From patchwork Tue Sep 6 14:27:21 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 1126522 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p86ERWZO031465 for ; Tue, 6 Sep 2011 14:27:46 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754700Ab1IFO1q (ORCPT ); Tue, 6 Sep 2011 10:27:46 -0400 Received: from mail-gy0-f174.google.com ([209.85.160.174]:45125 "EHLO mail-gy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754661Ab1IFO1q (ORCPT ); Tue, 6 Sep 2011 10:27:46 -0400 Received: by gya6 with SMTP id 6so3838213gya.19 for ; Tue, 06 Sep 2011 07:27:45 -0700 (PDT) Received: by 10.150.251.31 with SMTP id y31mr3783708ybh.304.1315319265646; Tue, 06 Sep 2011 07:27:45 -0700 (PDT) Received: from salusa.poochiereds.net (cpe-075-177-182-191.nc.res.rr.com [75.177.182.191]) by mx.google.com with ESMTPS id h12sm341892anl.5.2011.09.06.07.27.41 (version=SSLv3 cipher=OTHER); Tue, 06 Sep 2011 07:27:41 -0700 (PDT) From: Jeff Layton To: smfrench@gmail.com Cc: linux-cifs@vger.kernel.org Subject: [PATCH 5/5] cifs: tune bdi.ra_pages in accordance with the rsize Date: Tue, 6 Sep 2011 10:27:21 -0400 Message-Id: <1315319241-21637-6-git-send-email-jlayton@redhat.com> X-Mailer: git-send-email 1.7.6 In-Reply-To: <1315319241-21637-1-git-send-email-jlayton@redhat.com> References: <1315319241-21637-1-git-send-email-jlayton@redhat.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Tue, 06 Sep 2011 14:27:46 +0000 (UTC) Tune bdi.ra_pages to be a multiple of the rsize. This prevents the VFS from asking for pages that require small reads to satisfy. Signed-off-by: Jeff Layton --- fs/cifs/connect.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 02bc0e2..ca32275 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -3156,6 +3156,22 @@ cifs_get_volume_info(char *mount_data, const char *devname) return volume_info; } +/* make sure ra_pages is a multiple of rsize */ +static inline unsigned int +cifs_ra_pages(struct cifs_sb_info *cifs_sb) +{ + unsigned int reads; + unsigned int rsize_pages = cifs_sb->rsize / PAGE_CACHE_SIZE; + + if (rsize_pages >= default_backing_dev_info.ra_pages) + return default_backing_dev_info.ra_pages; + else if (rsize_pages == 0) + return rsize_pages; + + reads = default_backing_dev_info.ra_pages / rsize_pages; + return reads * rsize_pages; +} + int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info) { @@ -3174,8 +3190,6 @@ cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *volume_info) if (rc) return rc; - cifs_sb->bdi.ra_pages = default_backing_dev_info.ra_pages; - #ifdef CONFIG_CIFS_DFS_UPCALL try_mount_again: /* cleanup activities if we're chasing a referral */ @@ -3243,6 +3257,9 @@ try_mount_again: cifs_sb->wsize = cifs_negotiate_wsize(tcon, volume_info); cifs_sb->rsize = cifs_negotiate_rsize(tcon, volume_info); + /* tune readahead according to rsize */ + cifs_sb->bdi.ra_pages = cifs_ra_pages(cifs_sb); + remote_path_check: #ifdef CONFIG_CIFS_DFS_UPCALL /*