Patches for upstream 3f015d89a47c NFS COPY/CLONE - stable versions follow
The five patches referencing this cover letter are backports of upstream fix "3f015d89a47c NFSv42: Fix pagecache invalidation after COPY/CLONE", which did not apply cleanly to longterm trees.
Note: while the upstream fix received extensive testing, these backports have been build-tested only.
Benjamin Coddington (1):
NFSv42: Fix pagecache invalidation after COPY/CLONE
fs/nfs/nfs42proc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
Signature · 1 line
2.31.1
PATCH 1/1 NFSv42: Fix pagecache invalidation after COPY/CLONE
Upstream commit 3f015d89a47cd8855cd92f71fff770095bd885a1 backported for stable v5.10:
8<----------------------------------------------------------------------
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/nfs/nfs42proc.c +3 -2
@@ -362,8 +362,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, goto out; } -truncate_pagecache_range (dst_inode, pos_dst, - pos_dst + res->write_res.count); +WARN_ON_ONCE (invalidate_inode_pages2_range (dst_inode->i_mapping, + pos_dst >>PAGE_SHIFT , + (pos_dst + res->write_res.count -1 ) >>PAGE_SHIFT ));spin_lock (&dst_inode->i_lock); NFS_I(dst_inode)->cache_validity |= (NFS_INO_REVAL_PAGECACHE | NFS_INO_REVAL_FORCED | NFS_INO_INVALID_SIZE |
Signature · 1 line
2.31.1
PATCH 1/1 NFSv42: Fix pagecache invalidation after COPY/CLONE
In reply to Benjamin CoddingtonUpstream commit 3f015d89a47cd8855cd92f71fff770095bd885a1 backported for stable v5.4:
8<----------------------------------------------------------------------
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/nfs/nfs42proc.c +3 -2
@@ -295,8 +295,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, goto out; } -truncate_pagecache_range (dst_inode, pos_dst, - pos_dst + res->write_res.count); +WARN_ON_ONCE (invalidate_inode_pages2_range (dst_inode->i_mapping, + pos_dst >>PAGE_SHIFT , + (pos_dst + res->write_res.count -1 ) >>PAGE_SHIFT )); status = res->write_res.count; out:
Signature · 1 line
2.31.1
PATCH 1/1 NFSv42: Fix pagecache invalidation after COPY/CLONE
In reply to Benjamin CoddingtonUpstream commit 3f015d89a47cd8855cd92f71fff770095bd885a1 backported for stable v4.19:
8<----------------------------------------------------------------------
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/nfs/nfs42proc.c +3 -2
@@ -295,8 +295,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, goto out; } -truncate_pagecache_range (dst_inode, pos_dst, - pos_dst + res->write_res.count); +WARN_ON_ONCE (invalidate_inode_pages2_range (dst_inode->i_mapping, + pos_dst >>PAGE_SHIFT , + (pos_dst + res->write_res.count -1 ) >>PAGE_SHIFT )); status = res->write_res.count; out:
Signature · 1 line
2.31.1
PATCH 1/1 NFSv42: Fix pagecache invalidation after COPY/CLONE
In reply to Benjamin CoddingtonUpstream commit 3f015d89a47cd8855cd92f71fff770095bd885a1 backported for stable v4.9:
8<----------------------------------------------------------------------
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/nfs/nfs42proc.c +3 -2
@@ -181,8 +181,9 @@ static ssize_t _nfs42_proc_copy(struct file *src,return status; } -truncate_pagecache_range (dst_inode, pos_dst, - pos_dst + res->write_res.count); +WARN_ON_ONCE (invalidate_inode_pages2_range (dst_inode->i_mapping, + pos_dst >>PAGE_SHIFT , + (pos_dst + res->write_res.count -1 ) >>PAGE_SHIFT ));return res->write_res.count; }
Signature · 1 line
2.31.1
PATCH 1/1 NFSv42: Fix pagecache invalidation after COPY/CLONE
In reply to Benjamin CoddingtonUpstream commit 3f015d89a47cd8855cd92f71fff770095bd885a1 backported for stable v4.14:
8<----------------------------------------------------------------------
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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/nfs/nfs42proc.c +3 -2
@@ -186,8 +186,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, goto out; } -truncate_pagecache_range (dst_inode, pos_dst, - pos_dst + res->write_res.count); +WARN_ON_ONCE (invalidate_inode_pages2_range (dst_inode->i_mapping, + pos_dst >>PAGE_SHIFT , + (pos_dst + res->write_res.count -1 ) >>PAGE_SHIFT )); status = res->write_res.count; out:
Signature · 1 line
2.31.1
Greg KH
maintainerQuoted 4 lines · Benjamin Coddington
The five patches referencing this cover letter are backports of upstream fix "
3f015d89a47cNFSv42: Fix pagecache invalidation after COPY/CLONE", which did not apply cleanly to longterm trees.
Quoted 12 lines
Note: while the upstream fix received extensive testing, these backports have been build-tested only.
Benjamin Coddington (1):
NFSv42: Fix pagecache invalidation after COPY/CLONEfs/nfs/nfs42proc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)Signature · 1 line
2.31.1
All now queued up, thanks!
greg k-h