FAILED: patch "[PATCH] cifs: add revalidation on FSCTL failure in" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-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]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 53676a5e28231186c9f56d87b7998b640699bc15
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026102116-grove-undercut-9b92@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 53676a5e28231186c9f56d87b7998b640699bc15 Mon Sep 17 00:00:00 2001
From: Frank Sorenson <[email protected]>
Date: Sun, 23 Aug 2026 18:26:46 -0500
Subject: [PATCH] cifs: add revalidation on FSCTL failure in
smb2_duplicate_extents()
smb2_duplicate_extents() has no handling for FSCTL_DUPLICATE_EXTENTS_TO_FILE failure: when the FSCTL fails, local inode metadata may be stale from the pre-extension or from concurrent remote writes, but is never refreshed.
Force revalidation on FSCTL failure and use i_size_read() for the pre-extension check.
fs/smb/client/smb2ops.c +5 -2
@@ -2218,7 +2218,7 @@ smb2_duplicate_extents(const unsigned int xid, trgtfile->fid.volatile_fid, tcon->tid, tcon->ses->Suid, src_off, dest_off, len); inode =d_inode (trgtfile->dentry); -if (inode->i_size < dest_off + len) { +if (i_size_read (inode) < dest_off + len) { rc =smb2_set_file_size (xid, tcon, trgtfile, dest_off + len, false);if (rc) goto duplicate_extents_out;
@@ -2235,7 +2235,10 @@ smb2_duplicate_extents(const unsigned int xid,if (ret_data_len >0 )cifs_dbg (FYI ,"Non-zero response length in duplicate extents\n" ); -if (rc ==0 ) { +if (rc) { +CIFS_I (inode)->time =0 ;/* force reval */ +cifs_invalidate_cache (inode,0 ); + }else { qrc =SMB2_query_info (xid, tcon, trgtfile->fid.persistent_fid, trgtfile->fid.volatile_fid, &file_inf);spin_lock (&inode->i_lock);
Sasha Levin
maintainerPATCH 1/1 cifs: add revalidation on FSCTL failure in smb2_duplicate_extents()
From: Frank Sorenson <[email protected]>
[ Upstream commit 53676a5e28231186c9f56d87b7998b640699bc15 ]
smb2_duplicate_extents() has no handling for FSCTL_DUPLICATE_EXTENTS_TO_FILE failure: when the FSCTL fails, local inode metadata may be stale from the pre-extension or from concurrent remote writes, but is never refreshed.
Force revalidation on FSCTL failure and use i_size_read() for the pre-extension check.
--- fs/cifs/smb2ops.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
fs/cifs/smb2ops.c +9 -1
@@ -8,6 +8,7 @@#include <linux/pagemap.h> #include <linux/vfs.h> #include <linux/falloc.h> +#include <linux/fscache.h> #include <linux/scatterlist.h> #include <linux/uuid.h> #include <linux/sort.h>
@@ -2045,7 +2046,7 @@ smb2_duplicate_extents(const unsigned int xid, src_off, dest_off, len); inode =d_inode (trgtfile->dentry); -if (inode->i_size < dest_off + len) { +if (i_size_read (inode) < dest_off + len) { rc =smb2_set_file_size (xid, tcon, trgtfile, dest_off + len, false);if (rc) goto duplicate_extents_out;
@@ -2070,6 +2071,13 @@ smb2_duplicate_extents(const unsigned int xid,if (ret_data_len >0 )cifs_dbg (FYI ,"Non-zero response length in duplicate extents\n" ); +if (rc) { +CIFS_I (inode)->time =0 ;/* force reval */ +#ifdef CONFIG_CIFS_FSCACHE +fscache_invalidate (CIFS_I (inode)->fscache); +#endif + } + duplicate_extents_out:return rc; }
Signature · 1 line
2.53.0