* Re: [PATCH v7 1/5] block: Don't invalidate pagecache for invalid falloc modes
2023-05-18 22:33 ` [PATCH v7 1/5] block: Don't invalidate pagecache for invalid falloc modes Sarthak Kukreti
@ 2023-05-19 4:09 ` Christoph Hellwig
2023-05-19 15:17 ` Darrick J. Wong
1 sibling, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2023-05-19 4:09 UTC (permalink / raw)
To: Sarthak Kukreti
Cc: dm-devel, linux-block, linux-ext4, linux-kernel, linux-fsdevel,
Jens Axboe, Michael S. Tsirkin, Jason Wang, Stefan Hajnoczi,
Alasdair Kergon, Mike Snitzer, Christoph Hellwig, Brian Foster,
Theodore Ts'o, Andreas Dilger, Bart Van Assche,
Darrick J. Wong, stable
On Thu, May 18, 2023 at 03:33:22PM -0700, Sarthak Kukreti wrote:
> 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 <djwong@kernel.org>
> Signed-off-by: Sarthak Kukreti <sarthakkukreti@chromium.org>
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v7 1/5] block: Don't invalidate pagecache for invalid falloc modes
2023-05-18 22:33 ` [PATCH v7 1/5] block: Don't invalidate pagecache for invalid falloc modes Sarthak Kukreti
2023-05-19 4:09 ` Christoph Hellwig
@ 2023-05-19 15:17 ` Darrick J. Wong
1 sibling, 0 replies; 3+ messages in thread
From: Darrick J. Wong @ 2023-05-19 15:17 UTC (permalink / raw)
To: Sarthak Kukreti
Cc: dm-devel, linux-block, linux-ext4, linux-kernel, linux-fsdevel,
Jens Axboe, Michael S. Tsirkin, Jason Wang, Stefan Hajnoczi,
Alasdair Kergon, Mike Snitzer, Christoph Hellwig, Brian Foster,
Theodore Ts'o, Andreas Dilger, Bart Van Assche, stable
On Thu, May 18, 2023 at 03:33:22PM -0700, Sarthak Kukreti wrote:
> 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 <djwong@kernel.org>
> Signed-off-by: Sarthak Kukreti <sarthakkukreti@chromium.org>
Thanks for fixing this,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> block/fops.c | 21 ++++++++++++++++-----
> 1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/block/fops.c b/block/fops.c
> index d2e6be4e3d1c..4c70fdc546e7 100644
> --- a/block/fops.c
> +++ b/block/fops.c
> @@ -648,24 +648,35 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
>
> 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;
> --
> 2.40.1.698.g37aff9b760-goog
>
^ permalink raw reply [flat|nested] 3+ messages in thread