From c70182e1a65833a8de45839fd0fc98b30ac12aad Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 5 Jan 2024 15:35:03 +0100 Subject: [PATCH] 5.4-stable patches added patches: block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch --- ...e-pagecache-for-invalid-falloc-modes.patch | 60 +++++++++++++++++++ queue-5.4/series | 1 + 2 files changed, 61 insertions(+) create mode 100644 queue-5.4/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch diff --git a/queue-5.4/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch b/queue-5.4/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch new file mode 100644 index 00000000000..79516fb3392 --- /dev/null +++ b/queue-5.4/block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch @@ -0,0 +1,60 @@ +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 +--- + fs/block_dev.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -2114,21 +2114,26 @@ static long blkdev_fallocate(struct file + if ((start | len) & (bdev_logical_block_size(bdev) - 1)) + return -EINVAL; + +- /* Invalidate the page cache, including dirty pages. */ ++ /* ++ * Invalidate the page cache, including dirty pages, for valid ++ * de-allocate mode calls to fallocate(). ++ */ + mapping = bdev->bd_inode->i_mapping; +- truncate_inode_pages_range(mapping, start, end); + + switch (mode) { + case FALLOC_FL_ZERO_RANGE: + case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOUNMAP); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_zeroout(bdev, start >> 9, len >> 9, + GFP_KERNEL, BLKDEV_ZERO_NOFALLBACK); + break; + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE | FALLOC_FL_NO_HIDE_STALE: ++ truncate_inode_pages_range(mapping, start, end); + error = blkdev_issue_discard(bdev, start >> 9, len >> 9, + GFP_KERNEL, 0); + break; diff --git a/queue-5.4/series b/queue-5.4/series index 9bfe5014fe9..613ffc0023b 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -44,3 +44,4 @@ smb-client-fix-oob-in-smbcalcsize.patch bus-ti-sysc-use-fsleep-instead-of-usleep_range-in-sy.patch bus-ti-sysc-flush-posted-write-only-after-srst_udela.patch ring-buffer-fix-wake-ups-when-buffer_percent-is-set-to-100.patch +block-don-t-invalidate-pagecache-for-invalid-falloc-modes.patch -- 2.47.3