FAILED: patch "[PATCH] NFSv42: Fix pagecache invalidation after COPY/CLONE" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3f015d89a47cd8855cd92f71fff770095bd885a1 Mon Sep 17 00:00:00 2001
From: Benjamin Coddington <[email protected]>
Date: Tue, 16 Nov 2021 10:48:13 -0500
Subject: [PATCH] NFSv42: Fix pagecache invalidation after COPY/CLONE
The mechanism in use to allow the client to see the results of COPY/CLONE is to drop those pages from the pagecache. This forces the client to read those pages once more from the server. However, truncate_pagecache_range() zeros out partial pages instead of dropping them. Let us instead use invalidate_inode_pages2_range() with full-page offsets to ensure the client properly sees the results of COPY/CLONE operations.
fs/nfs/nfs42proc.c +3 -1
@@ -289,7 +289,9 @@ static void nfs42_copy_dest_done(struct inode *inode, loff_t pos, loff_t len)loff_t newsize = pos + len;loff_t end = newsize -1 ; -truncate_pagecache_range (inode, pos, end); +WARN_ON_ONCE (invalidate_inode_pages2_range (inode->i_mapping, + pos >>PAGE_SHIFT , end >>PAGE_SHIFT )); +spin_lock (&inode->i_lock);if (newsize >i_size_read (inode))i_size_write (inode, newsize);