From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9EC13C369CB for ; Wed, 23 Apr 2025 04:25:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C07E6B0008; Wed, 23 Apr 2025 00:25:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 26FB16B000A; Wed, 23 Apr 2025 00:25:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0EA456B000D; Wed, 23 Apr 2025 00:25:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id E39486B000A for ; Wed, 23 Apr 2025 00:25:36 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id C199A12036A for ; Wed, 23 Apr 2025 04:25:38 +0000 (UTC) X-FDA: 83364019956.18.6D2D43B Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf17.hostedemail.com (Postfix) with ESMTP id 3061C40007 for ; Wed, 23 Apr 2025 04:25:37 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sHy0X3rB; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf17.hostedemail.com: domain of trondmy@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=trondmy@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745382337; a=rsa-sha256; cv=none; b=PWGN9K3iujjBy96WwAOvzLpqSdcz0B0i582XN66JZnkWaAwX4kXsvhVj+bAOsxDVgvTvq/ TO5y40kwgQ9rYFXHTtD2BgzyxZ66myRCyHP6nHxwpBsWyF0fKc8cGLwfsHGDzBvj935PRN 6tiTesyM0C6CWmFmPmAUj7zFo9vVOWM= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=sHy0X3rB; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf17.hostedemail.com: domain of trondmy@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=trondmy@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745382337; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=GFMaUGioGbH2MCiFNItrvD9QAU6acoVwLgmDo9kR6eU=; b=pGtvIlMq40wHGpgFyRLSrzhChEDDfuGkzk76DHa7gso+I6lNjdPOBvjxl29/jUBHb5Z5cz DEKfPo4JhOHSpcbkattfEe4ThGjdn7fflMHJ03nbkECaV1K0HHyCjPkVT/QGR+VYMuQF08 JltipwVCfk9zLdxDsIeJN5xBoxrfX10= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 207E8614BA for ; Wed, 23 Apr 2025 04:25:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BC778C4CEEE; Wed, 23 Apr 2025 04:25:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745382336; bh=T4dxTjHbMdrsjf8LVgCA3UA6psQzEm5gWO89zxcso54=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sHy0X3rB14dBHfS9hOR9bMglpxYPbnWqN4ahZb8CAG8IK4YlU67llR1bDw/Se8itr CS6ch5k0FcsOjDGEEKerdlA9YQkFiIEhKZJB/JnUqz1fDgxtn7y6/ldXBb+Dm/y9Ai KSxOeu57d+G378bJwoXsBx9/AEHazIBtroHQnBnDQrNbjAlDF+ud4He/3gQluJa6yM /i86sSPnqctzLWUrNxwf6JkYvQPEbvAiyni3EwAOb66VvQhcprOhYcT9BtcpiDHYSQ lK+X4kmz36xRRyghP8cOLxhAu5/iQAr6qF5Y/Ou8HMA5NoShlvBAiCfa1at2iBSSft SMHJeuLUpj87g== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [RFC PATCH 3/3] NFS: Enable the RWF_DONTCACHE flag for the NFS client Date: Wed, 23 Apr 2025 00:25:32 -0400 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 3061C40007 X-Rspam-User: X-Rspamd-Server: rspam07 X-Stat-Signature: nzkpx7unu3rte3gbhwqookxiuw7dxu38 X-HE-Tag: 1745382337-289137 X-HE-Meta: U2FsdGVkX1/5pxn8ZXTqdmHUCPNIeYqFXH31D90/TfQUGwpvJOcmXNcSAAwcXO4Tf3D/aBGPwA/+maNsWCVxfoomVjISxd6mpLt5wr2scphvurbcFETtrBTZj1xtpdH6J7xq7RzEB0n1ZTQMhv1n35Rvkblu1jyGfbR1IcGJdJUmVc/cNVhdV8/rJJNAXI0+5yULZCwtridf/F0PlhKmW8eRxTLbCg7Kw9gnMEkAXSBrfwQ80T/HMmN+RUBfOjGCEA36KhGdq4tbDzo1x6MRRV6dl1SV+7fxZwY3qQiP5aVj8EWM1o4SKV1hYN1mXhcc9KOzsGkXVF5a39ccuHK9cG50haV2pi86BFSGvUPD0KCyLA+OIUdQgRqxVwSG1MsEz4o176DsIMjIFUOocPq0o6bOTl4b0r9bfuWCHiGqYM4XBkKWChg6E1RF5jKHScBmgeAsY/4jakIg4zcLo9wZJM4XF4DrtKvNvurZzvrjyUjDcH6iC7laT0iVH1cMaOZwiXjMOqjroyKFGOSh1iorPiu0TqwFZUcxrIfkuXrb2hxyVI+/aAfoy9QJdzE4lJkwzzf4v7SSMduzoXltojYyP0mSGwQSTLyryp796Rhax/jJyrupmO14mvw/RQ3vGeJDQggbUtcbz4va7zxO76XdnXt3+d6HgVZ5cXXmhrGc5pAkTDj8yrgo6bs+h0oHWivzK4EoYmqrteJvucqux3eOlRwpxCwdX2/HWJhMaOiafUCZk8/+IaY1B6SfQ0iBEZJqYNSZcT8SuJjJIxiH38HQ80Y/qsR8540FOUTkb0JThqsrgdbnyWgp6F8YSsGIgjJlg9N0HQVJUVb1UTrsIHOA5rwCFHa/m6LwOi2xVULkPPIrCYWLxNwP3MXYZYYBzk5f2bbaKCtn+I5+zRQHMvgfGJdswZI1/UY2aHfh9WQbaLGCIyH00TyswuD4pYZOGqhYK2c5NW63Y4E/ASpAslt KbkbE8BM nN4OTN0gxjOKUsyvbAl2WMYRDFhjfEZ+CgJxw4uU7usNMdBXwXwkSghH1RyReqCUjfdINguZO9xZ7jJvaLT/tG88MYMpwoGfdnljwmZRh8+1ndQIT1TD2qmduSIZ58oHfLqw2VfrsXJ4+8kDsMejH5wyTiRfOVLSKW8btYOYNR/9LSJ7V+O1Nrj2CAmhjFZUnJBIxdcnV7Ehwbfo/QM7usXgQfiP2Ld9girhxusY6gtDM2Mv+LsFIO+mxqP2JMkRtRr51DJipHwlDgb7+AXpOOnSOyWOD5kibMxECYgTO5Ov31eK2uRtF2ynugtdDg7h4pSbuxp4um/QVHZfKptFgR/yrag== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Trond Myklebust While the NFS readahead code has no problems using the generic code to manage the dropbehind behaviour enabled by RWF_DONTCACHE, the write code needs to deal with the fact that NFS writeback uses a 2 step process (UNSTABLE write followed by COMMIT). This commit replaces the use of the folio dropbehind flag with a local NFS request flag that triggers the dropbehind behaviour once the data has been written to stable storage. Signed-off-by: Trond Myklebust --- fs/nfs/file.c | 2 ++ fs/nfs/nfs4file.c | 2 ++ fs/nfs/write.c | 12 +++++++++++- include/linux/nfs_page.h | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 033feeab8c34..60d47f141acb 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -910,5 +910,7 @@ const struct file_operations nfs_file_operations = { .splice_write = iter_file_splice_write, .check_flags = nfs_check_flags, .setlease = simple_nosetlease, + + .fop_flags = FOP_DONTCACHE, }; EXPORT_SYMBOL_GPL(nfs_file_operations); diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 1cd9652f3c28..e6726499c585 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -467,4 +467,6 @@ const struct file_operations nfs4_file_operations = { #else .llseek = nfs_file_llseek, #endif + + .fop_flags = FOP_DONTCACHE, }; diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 23df8b214474..e0ac439ab211 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -359,8 +359,12 @@ static void nfs_folio_end_writeback(struct folio *folio) static void nfs_page_end_writeback(struct nfs_page *req) { if (nfs_page_group_sync_on_bit(req, PG_WB_END)) { + struct folio *folio = nfs_page_to_folio(req); + + if (folio_test_clear_dropbehind(folio)) + set_bit(PG_DROPBEHIND, &req->wb_flags); nfs_unlock_request(req); - nfs_folio_end_writeback(nfs_page_to_folio(req)); + nfs_folio_end_writeback(folio); } else nfs_unlock_request(req); } @@ -813,6 +817,9 @@ static void nfs_inode_remove_request(struct nfs_page *req) clear_bit(PG_MAPPED, &req->wb_head->wb_flags); } spin_unlock(&mapping->i_private_lock); + + if (test_bit(PG_DROPBEHIND, &req->wb_flags)) + folio_end_dropbehind(folio); } if (test_and_clear_bit(PG_INODE_REF, &req->wb_flags)) { @@ -2093,6 +2100,7 @@ int nfs_wb_folio(struct inode *inode, struct folio *folio) .range_start = range_start, .range_end = range_start + len - 1, }; + bool dropbehind = folio_test_clear_dropbehind(folio); int ret; trace_nfs_writeback_folio(inode, range_start, len); @@ -2113,6 +2121,8 @@ int nfs_wb_folio(struct inode *inode, struct folio *folio) goto out_error; } out_error: + if (dropbehind) + folio_set_dropbehind(folio); trace_nfs_writeback_folio_done(inode, range_start, len, ret); return ret; } diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h index 169b4ae30ff4..1a017b5b476f 100644 --- a/include/linux/nfs_page.h +++ b/include/linux/nfs_page.h @@ -37,6 +37,7 @@ enum { PG_REMOVE, /* page group sync bit in write path */ PG_CONTENDED1, /* Is someone waiting for a lock? */ PG_CONTENDED2, /* Is someone waiting for a lock? */ + PG_DROPBEHIND, /* Implement RWF_DONTCACHE */ }; struct nfs_inode; -- 2.49.0