From a9c3a887c74b4e8bf3fc1d4cff093957742bee2f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 5 Jan 2024 15:35:32 +0100 Subject: [PATCH] 6.1-stable patches added patches: block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch --- ...e-pagecache-for-invalid-falloc-modes.patch | 72 +++++++++++++++++++ queue-6.1/series | 1 + 2 files changed, 73 insertions(+) create mode 100644 queue-6.1/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch diff --git a/queue-6.1/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch b/queue-6.1/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch new file mode 100644 index 00000000000..a91ae233633 --- /dev/null +++ b/queue-6.1/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch @@ -0,0 +1,72 @@ +From 1364a3c391aedfeb32aa025303ead3d7c91cdf9d Mon Sep 17 00:00:00 2001 +From: Sarthak Kukreti +Date: Wed, 11 Oct 2023 13:12:30 -0700 +Subject: block: Don't invalidate pagecache for invalid falloc modes + +From: Sarthak Kukreti + +commit 1364a3c391aedfeb32aa025303ead3d7c91cdf9d upstream. + +Only call truncate_bdev_range() if the fallocate mode is supported. This +fixes a bug where data in the pagecache could be invalidated if the +fallocate() was called on the block device with an invalid mode. + +Fixes: 25f4c41415e5 ("block: implement (some of) fallocate for block devices") +Cc: stable@vger.kernel.org +Reported-by: "Darrick J. Wong" +Signed-off-by: Sarthak Kukreti +Reviewed-by: Christoph Hellwig +Reviewed-by: "Darrick J. Wong" +Signed-off-by: Mike Snitzer +Fixes: line? I've never seen those wrapped. +Link: https://lore.kernel.org/r/20231011201230.750105-1-sarthakkukreti@chromium.org +Signed-off-by: Jens Axboe +Signed-off-by: Sarthak Kukreti +Signed-off-by: Greg Kroah-Hartman +--- + block/fops.c | 21 ++++++++++++++++----- + 1 file changed, 16 insertions(+), 5 deletions(-) + +--- a/block/fops.c ++++ b/block/fops.c +@@ -655,24 +655,35 @@ static long blkdev_fallocate(struct file + + filemap_invalidate_lock(inode->i_mapping); + +- /* Invalidate the page cache, including dirty pages. */ +- error = truncate_bdev_range(bdev, file->f_mode, start, end); +- if (error) +- goto fail; +- ++ /* ++ * Invalidate the page cache, including dirty pages, for valid ++ * de-allocate mode calls to fallocate(). ++ */ + switch (mode) { + case FALLOC_FL_ZERO_RANGE: + case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_zeroout(bdev, start >> SECTOR_SHIFT, + len >> SECTOR_SHIFT, GFP_KERNEL, + BLKDEV_ZERO_NOUNMAP); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_zeroout(bdev, start >> SECTOR_SHIFT, + len >> SECTOR_SHIFT, GFP_KERNEL, + BLKDEV_ZERO_NOFALLBACK); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE | FALLOC_FL_NO_HIDE_STALE: ++ error = truncate_bdev_range(bdev, file->f_mode, start, end); ++ if (error) ++ goto fail; ++ + error = blkdev_issue_discard(bdev, start >> SECTOR_SHIFT, + len >> SECTOR_SHIFT, GFP_KERNEL); + break; diff --git a/queue-6.1/series b/queue-6.1/series index 78e00459032..c071d30dc1d 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -1 +1,2 @@ keys-dns-fix-missing-size-check-of-v1-server-list-header.patch +block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch -- 2.47.3