]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfs: Fix partial invalidation of streaming-write folio
authorDavid Howells <dhowells@redhat.com>
Tue, 12 May 2026 12:33:57 +0000 (13:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jun 2026 15:46:27 +0000 (17:46 +0200)
[ Upstream commit 6d91acc7fb85d33ea58fca9b964a32a453937f4b ]

In netfs_invalidate_folio(), if the region of a partial invalidation
overlaps the front (but not all) of a dirty write cached in a streaming
write page (dirty, but not uptodate, with the dirty region tracked by a
netfs_folio struct), the function modifies the dirty region - but
incorrectly as it moves the region forward by setting the start to the
start, not the end, of the invalidation region.

Fix this by setting finfo->dirty_offset to the end of the invalidation
region (iend).

Fixes: cce6bfa6ca0e ("netfs: Fix trimming of streaming-write folios in netfs_inval_folio()")
Closes: https://sashiko.dev/#/patchset/20260414082004.3756080-1-dhowells%40redhat.com
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://patch.msgid.link/20260512123404.719402-21-dhowells@redhat.com
cc: Paulo Alcantara <pc@manguebit.org>
cc: Matthew Wilcox <willy@infradead.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/netfs/misc.c

index 488a4b1914300cf63d36c7f74217819d2a49e059..9672904232ad59e9e9d4ef95fcec54fc9da1b4a8 100644 (file)
@@ -267,7 +267,7 @@ void netfs_invalidate_folio(struct folio *folio, size_t offset, size_t length)
                                goto erase_completely;
                        /* Move the start of the data. */
                        finfo->dirty_len = fend - iend;
-                       finfo->dirty_offset = offset;
+                       finfo->dirty_offset = iend;
                        trace_netfs_folio(folio, netfs_folio_trace_invalidate_front);
                        return;
                }