From patchwork Sat Feb 13 13:51:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kinglong Mee X-Patchwork-Id: 8300011 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 886B4C02AA for ; Sat, 13 Feb 2016 13:52:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A32C3203F4 for ; Sat, 13 Feb 2016 13:52:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BCAEC203F3 for ; Sat, 13 Feb 2016 13:52:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751454AbcBMNv7 (ORCPT ); Sat, 13 Feb 2016 08:51:59 -0500 Received: from mail-pa0-f54.google.com ([209.85.220.54]:35671 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751453AbcBMNv6 (ORCPT ); Sat, 13 Feb 2016 08:51:58 -0500 Received: by mail-pa0-f54.google.com with SMTP id ho8so61653610pac.2 for ; Sat, 13 Feb 2016 05:51:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=to:cc:from:subject:message-id:date:user-agent:mime-version :content-type:content-transfer-encoding; bh=k1UPM5+rhIIcGxXyq/ddCi1AErfG61Y9w1v8OBuKwxQ=; b=VoR/kQLblHcAbupHVuW6agtWzYDtODSZ9OZR8wl5qZS2vF6SG4PDdDi5lp63eOzK5v EFjIBQHeqBT09qNnkr82Noo3tGTZYItZ6QHsyQ9UFH8lh53vOzD3YOQg1wV535tE3YvM uXjOhd/w5riYhfRSpWv3ZX9PeBkxkoqoQGhhuXu964Cgi4Vgcqqb+F/n65R4SvDvWoIg yPJAfPtNzx29xZ/jSocwtQDcXoomvbUPGiEMAoR8PFn2rux84vWJAUXYhu1LAxCCjNY6 dUa+R3nndZCjfU2CutWKozlsgPkSyJOoF0pVjTwQ244OUfC3kKCCVJkOLFw2Qd6Tn/fL gdMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:cc:from:subject:message-id:date:user-agent :mime-version:content-type:content-transfer-encoding; bh=k1UPM5+rhIIcGxXyq/ddCi1AErfG61Y9w1v8OBuKwxQ=; b=ZvL9jFoYHL1iywhvF11Bf3MCEBdOsApi7Ix7JJvXQFH1loa6MYXOJZ+ylHqWMZflSJ Nzg93GdS7MkeoBmS5A3oRHijuOXJp6102e0aJu1/MDJq+RZDLx0331qBF9xfiUdSubiO exPhofI7G/ChOOLcAkLa4HwBEtu9q0SglZCCXE7vHU8I6rPHryax1YxmoRCt5f7GoHkh XyzjXLv9UD7VmaJMPSYOSYajOMNXmcHjKibDnAYOVV2guCXK+wxT6enDD8aM0Ch/wmjN 4C1z8huJGAWTBfNNpow9NxG2wNeyq3m4JBJr4IA/II2B7VXLkzn/g6El1qQm0I8J0pYF gv3g== X-Gm-Message-State: AG10YOSTg0ieAnCDWMeWozTDY/vYYHIb8ylBSE28FAuXFu78hHucjSJscMUoZxbXEQ3iOw== X-Received: by 10.66.150.133 with SMTP id ui5mr6561957pab.85.1455371518362; Sat, 13 Feb 2016 05:51:58 -0800 (PST) Received: from [192.168.99.19] (li1100-244.members.linode.com. [45.79.1.244]) by smtp.googlemail.com with ESMTPSA id k14sm26490649pfj.0.2016.02.13.05.51.38 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 13 Feb 2016 05:51:54 -0800 (PST) To: Trond Myklebust Cc: "linux-nfs@vger.kernel.org" , kinglongmee@gmail.com From: Kinglong Mee Subject: [PATCH] nfs/blocklayout: make sure making a aligned read request Message-ID: <56BF34E3.1020003@gmail.com> Date: Sat, 13 Feb 2016 21:51:31 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Only treat write goes up to the inode size as aligned request, because it always write PAGE_CACHE_SIZE, but read a dynamic size. Signed-off-by: Kinglong Mee --- fs/nfs/blocklayout/blocklayout.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c index ddd0138..8bc870e 100644 --- a/fs/nfs/blocklayout/blocklayout.c +++ b/fs/nfs/blocklayout/blocklayout.c @@ -743,7 +743,7 @@ bl_set_layoutdriver(struct nfs_server *server, const struct nfs_fh *fh) static bool is_aligned_req(struct nfs_pageio_descriptor *pgio, - struct nfs_page *req, unsigned int alignment) + struct nfs_page *req, unsigned int alignment, bool is_write) { /* * Always accept buffered writes, higher layers take care of the @@ -758,7 +758,8 @@ is_aligned_req(struct nfs_pageio_descriptor *pgio, if (IS_ALIGNED(req->wb_bytes, alignment)) return true; - if (req_offset(req) + req->wb_bytes == i_size_read(pgio->pg_inode)) { + if (is_write && + (req_offset(req) + req->wb_bytes == i_size_read(pgio->pg_inode))) { /* * If the write goes up to the inode size, just write * the full page. Data past the inode size is @@ -775,7 +776,7 @@ is_aligned_req(struct nfs_pageio_descriptor *pgio, static void bl_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req) { - if (!is_aligned_req(pgio, req, SECTOR_SIZE)) { + if (!is_aligned_req(pgio, req, SECTOR_SIZE, false)) { nfs_pageio_reset_read_mds(pgio); return; } @@ -791,7 +792,7 @@ static size_t bl_pg_test_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, struct nfs_page *req) { - if (!is_aligned_req(pgio, req, SECTOR_SIZE)) + if (!is_aligned_req(pgio, req, SECTOR_SIZE, false)) return 0; return pnfs_generic_pg_test(pgio, prev, req); } @@ -824,7 +825,7 @@ bl_pg_init_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *req) { u64 wb_size; - if (!is_aligned_req(pgio, req, PAGE_SIZE)) { + if (!is_aligned_req(pgio, req, PAGE_SIZE, true)) { nfs_pageio_reset_write_mds(pgio); return; } @@ -846,7 +847,7 @@ static size_t bl_pg_test_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, struct nfs_page *req) { - if (!is_aligned_req(pgio, req, PAGE_SIZE)) + if (!is_aligned_req(pgio, req, PAGE_SIZE, true)) return 0; return pnfs_generic_pg_test(pgio, prev, req); }