diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-10-16 17:36:12 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-10-16 17:36:12 +0200 |
commit | d0d27ef87e1ca974ed93ed4f7d3c123cbd392ba6 (patch) | |
tree | f7c3e3259579973c896c634e2bdabed31a171395 /block/fops.c | |
parent | 1034cc423f1b4a7a9a56d310ca980fcd2753e11d (diff) | |
parent | 58720809f52779dc0f08e53e54b014209d13eebb (diff) | |
download | linux-stable-d0d27ef87e1ca974ed93ed4f7d3c123cbd392ba6.tar.gz linux-stable-d0d27ef87e1ca974ed93ed4f7d3c123cbd392ba6.tar.bz2 linux-stable-d0d27ef87e1ca974ed93ed4f7d3c123cbd392ba6.zip |
Merge 6.6-rc6 into usb-next
We need the USB and Thunderbolt fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'block/fops.c')
-rw-r--r-- | block/fops.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/block/fops.c b/block/fops.c index acff3d5d22d4..73e42742543f 100644 --- a/block/fops.c +++ b/block/fops.c @@ -772,24 +772,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_to_blk_mode(file), 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_to_blk_mode(file), 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_to_blk_mode(file), 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_to_blk_mode(file), start, end); + if (error) + goto fail; + error = blkdev_issue_discard(bdev, start >> SECTOR_SHIFT, len >> SECTOR_SHIFT, GFP_KERNEL); break; |