From patchwork Mon Jan 4 18:21:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 7949941 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id F378F9F350 for ; Mon, 4 Jan 2016 18:22:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 198C4202B8 for ; Mon, 4 Jan 2016 18:22:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 09348202C8 for ; Mon, 4 Jan 2016 18:21:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751415AbcADSVz (ORCPT ); Mon, 4 Jan 2016 13:21:55 -0500 Received: from mail-ig0-f173.google.com ([209.85.213.173]:37203 "EHLO mail-ig0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752262AbcADSVx (ORCPT ); Mon, 4 Jan 2016 13:21:53 -0500 Received: by mail-ig0-f173.google.com with SMTP id to18so224399873igc.0 for ; Mon, 04 Jan 2016 10:21:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=primarydata-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=985v/2/4kjLAseC29JCul+DuDQb6KMBacxqeWJEpZtI=; b=ETjPV+zqBjbRKGzfjE3y8/3mJ/iXtmmO8vuciHQw2+NlWv4mZXkYrCtWlje8DLsvP6 ZMT+SvyY9SjHi/bjXTNmgEP4TUumGVacFxGhmMEoYv6eHHJcC7iFj/+q0/IS3SEQj3u9 cL0wSBE0zCWdz1ITBCDrBiW7F/EgeDqgifXnagpaZ4hH1dIJf7rZ3KPxTowE73p2JM9W 3BFwXZP6EhAvxnkzPu5UwboxmE3epFPaKyITAkBDaZjm8zPpb1PYa7xMBigmL0eBbBzq iPGfWBhiFkoFrFPhChoRyutVT0r87yukNXKVxlsFPFvkhUGmG7OaTv69qEBdUmyWAHn/ rO+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=985v/2/4kjLAseC29JCul+DuDQb6KMBacxqeWJEpZtI=; b=hVfU51tWJSGZESio5unkIITeB6Q3ug3yRJ45n02swy12vsZvPKDI+4+9H5IODrQ1TL CO/+gHT2asG1ZEZV+XUOzJrIbprTd64LFgLFdsu+a0ZcE0BYKuz8QhJrhHKz1xo0iB2I R2XchXwHBL8mzoQ49Ego84vv1bgOM+EIL3h5FSr5l73UKnMGQSBXkbr1rxYHdALqGpyX D4/lHze0nKpSLrZSKVR6deJxrzatK4KE5VGh55Hu6BPMplGcKDNL8bEXrexohHze2N2g 83uxNrBt5sg4UuzmYYE1pEXNhaRo+BU/rcugMZQlipUMXaNnUy8BB8g7TGuQjweR/OA6 9gXw== X-Gm-Message-State: ALoCoQk5Tq+b47PzKN1EMkjoUxXM6YqaBXCA1PpJEzbDSEq1iLVyE4R6TKMwEPYYhQTvQYd4eCIYy6uIL7ldTuAQGHdsw3NwmA== X-Received: by 10.50.142.66 with SMTP id ru2mr68800413igb.32.1451931712633; Mon, 04 Jan 2016 10:21:52 -0800 (PST) Received: from leira.trondhjem.org.localdomain (c-68-49-164-203.hsd1.mi.comcast.net. [68.49.164.203]) by smtp.gmail.com with ESMTPSA id n6sm12760568ige.12.2016.01.04.10.21.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Jan 2016 10:21:52 -0800 (PST) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH v3 10/18] NFS: Relax requirements in nfs_flush_incompatible Date: Mon, 4 Jan 2016 13:21:08 -0500 Message-Id: <1451931676-68481-10-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1451931676-68481-9-git-send-email-trond.myklebust@primarydata.com> References: <1451931676-68481-1-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-2-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-3-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-4-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-5-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-6-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-7-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-8-git-send-email-trond.myklebust@primarydata.com> <1451931676-68481-9-git-send-email-trond.myklebust@primarydata.com> 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_SIGNED, 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 If two processes share the same credentials and NFSv4 open stateid, then allow them both to dirty the same page, even if their nfs_open_context differs. Signed-off-by: Trond Myklebust --- fs/nfs/internal.h | 6 ++++++ fs/nfs/pagelist.c | 6 ------ fs/nfs/write.c | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 99a2919047e9..870e2ba7ba49 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -264,6 +264,12 @@ static inline bool nfs_pgio_has_mirroring(struct nfs_pageio_descriptor *desc) return desc->pg_mirror_count > 1; } +static inline bool nfs_match_open_context(const struct nfs_open_context *ctx1, + const struct nfs_open_context *ctx2) +{ + return ctx1->cred == ctx2->cred && ctx1->state == ctx2->state; +} + /* nfs2xdr.c */ extern struct rpc_procinfo nfs_procedures[]; extern int nfs2_decode_dirent(struct xdr_stream *, diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index 452a011ba0d8..c3a78450a239 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c @@ -903,12 +903,6 @@ static void nfs_pageio_cleanup_mirroring(struct nfs_pageio_descriptor *pgio) pgio->pg_mirrors_dynamic = NULL; } -static bool nfs_match_open_context(const struct nfs_open_context *ctx1, - const struct nfs_open_context *ctx2) -{ - return ctx1->cred == ctx2->cred && ctx1->state == ctx2->state; -} - static bool nfs_match_lock_context(const struct nfs_lock_context *l1, const struct nfs_lock_context *l2) { diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 0aa8d6f23b4c..2c26e04d9396 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -1130,7 +1130,8 @@ int nfs_flush_incompatible(struct file *file, struct page *page) if (req == NULL) return 0; l_ctx = req->wb_lock_context; - do_flush = req->wb_page != page || req->wb_context != ctx; + do_flush = req->wb_page != page || + !nfs_match_open_context(req->wb_context, ctx); /* for now, flush if more than 1 request in page_group */ do_flush |= req->wb_this_page != req; if (l_ctx && flctx &&