FAILED: patch "[PATCH] smb3: use filemap_write_and_wait_range instead of" failed to apply to 5.19-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.19-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 3e3761f1ec7df67d88cfca5e2ea98538f529e645 Mon Sep 17 00:00:00 2001
From: Steve French <[email protected]>
Date: Mon, 29 Aug 2022 11:53:41 -0500
Subject: [PATCH] smb3: use filemap_write_and_wait_range instead of
filemap_write_and_wait
When doing insert range and collapse range we should be writing out the cached pages for the ranges affected but not the whole file.
Fixes c3a72bb21320 ("smb3: Move the flush out of smb2_copychunk_range() into its callers")
Reviewed-by Paulo Alcantara (SUSE) <[email protected]>
Reviewed-by David Howells <[email protected]>
Signed-off-by Steve French <[email protected]>
fs/cifs/cifsfs.c +6 -2
@@ -1219,8 +1219,6 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,cifs_dbg (FYI ,"copychunk range\n" ); -filemap_write_and_wait (src_inode->i_mapping); -if (!src_file->private_data || !dst_file->private_data) { rc = -EBADF ;cifs_dbg (VFS ,"missing cifsFileInfo on copy range src file\n" );
@@ -1250,6 +1248,12 @@ ssize_t cifs_file_copychunk_range(unsigned int xid,lock_two_nondirectories (target_inode, src_inode);cifs_dbg (FYI ,"about to flush pages\n" ); + + rc =filemap_write_and_wait_range (src_inode->i_mapping, off, + off + len -1 ); +if (rc) + goto out; +/* should we flush first and last page first */ truncate_inode_pages (&target_inode->i_data,0 );
fs/cifs/smb2ops.c +7 -2
@@ -3687,7 +3687,10 @@ static long smb3_collapse_range(struct file *file, struct cifs_tcon *tcon, }filemap_invalidate_lock (inode->i_mapping); -filemap_write_and_wait (inode->i_mapping); + rc =filemap_write_and_wait_range (inode->i_mapping, off, old_eof -1 ); +if (rc <0 ) + goto out_2; +truncate_pagecache_range (inode, off, old_eof); rc = smb2_copychunk_range(xid, cfile, cfile, off + len,
@@ -3738,7 +3741,9 @@ static long smb3_insert_range(struct file *file, struct cifs_tcon *tcon, eof =cpu_to_le64 (old_eof + len);filemap_invalidate_lock (inode->i_mapping); -filemap_write_and_wait (inode->i_mapping); + rc =filemap_write_and_wait_range (inode->i_mapping, off, old_eof + len -1 ); +if (rc <0 ) + goto out_2;truncate_pagecache_range (inode, off, old_eof); rc = SMB2_set_eof(xid, tcon, cfile->fid.persistent_fid,