Here is a patch similar to what David suggested. Seems straightforward fix. See attached. I did limited testing on it tonight with 6.1 (will do more tomorrow, but feedback welcome) but it did fix the regression in xfstest generic/001 mentioned in this thread. On Fri, Jan 12, 2024 at 8:26 AM David Howells <dhowells@xxxxxxxxxx> wrote: > > gregkh@xxxxxxxxxxxxxxxxxxx <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > > I guess I can just revert the single commit here? Can someone send me > > the revert that I need to do so as I get it right? > > In cifs_flush_folio() the error check for filemap_get_folio() just needs > changing to check !folio instead of IS_ERR(folio). > > David > > -- Thanks, Steve
From ba288a873fb8ac3d1bf5563366558a905620c071 Mon Sep 17 00:00:00 2001 From: Steve French <stfrench@xxxxxxxxxxxxx> Date: Fri, 12 Jan 2024 23:08:51 -0600 Subject: [PATCH] cifs: fix flushing folio regression for 6.1 backport filemap_get_folio works differenty in 6.1 vs. later kernels (returning NULL in 6.1 instead of an error). Add this minor correction which addresses the regression in the patch: cifs: Fix flushing, invalidation and file size with copy_file_range() Suggested-by: David Howells <dhowells@xxxxxxxxxx> Reported-by: Salvatore Bonaccorso <carnil@xxxxxxxxxx> Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx> --- fs/smb/client/cifsfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c index 2e15b182e59f..ac0b7f229a23 100644 --- a/fs/smb/client/cifsfs.c +++ b/fs/smb/client/cifsfs.c @@ -1240,7 +1240,7 @@ static int cifs_flush_folio(struct inode *inode, loff_t pos, loff_t *_fstart, lo int rc = 0; folio = filemap_get_folio(inode->i_mapping, index); - if (IS_ERR(folio)) + if ((!folio) || (IS_ERR(folio))) return 0; size = folio_size(folio); -- 2.40.1