mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 11:06:41 -05:00
block: add FALLOC_FL_WRITE_ZEROES support
Add support for FALLOC_FL_WRITE_ZEROES, if the block device enables the unmap write zeroes operation, it will issue a write zeroes command. Signed-off-by: Zhang Yi <yi.zhang@huawei.com> Link: https://lore.kernel.org/20250619111806.3546162-9-yi.zhang@huaweicloud.com Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: "Martin K. Petersen" <martin.petersen@oracle.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
committed by
Christian Brauner
parent
562108d56b
commit
912b6038fe
12
block/fops.c
12
block/fops.c
@@ -841,7 +841,7 @@ static ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
||||
|
||||
#define BLKDEV_FALLOC_FL_SUPPORTED \
|
||||
(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | \
|
||||
FALLOC_FL_ZERO_RANGE)
|
||||
FALLOC_FL_ZERO_RANGE | FALLOC_FL_WRITE_ZEROES)
|
||||
|
||||
static long blkdev_fallocate(struct file *file, int mode, loff_t start,
|
||||
loff_t len)
|
||||
@@ -856,6 +856,13 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
|
||||
/* Fail if we don't recognize the flags. */
|
||||
if (mode & ~BLKDEV_FALLOC_FL_SUPPORTED)
|
||||
return -EOPNOTSUPP;
|
||||
/*
|
||||
* Don't allow writing zeroes if the device does not enable the
|
||||
* unmap write zeroes operation.
|
||||
*/
|
||||
if ((mode & FALLOC_FL_WRITE_ZEROES) &&
|
||||
!bdev_write_zeroes_unmap_sectors(bdev))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Don't go off the end of the device. */
|
||||
isize = bdev_nr_bytes(bdev);
|
||||
@@ -886,6 +893,9 @@ static long blkdev_fallocate(struct file *file, int mode, loff_t start,
|
||||
case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE:
|
||||
flags = BLKDEV_ZERO_NOFALLBACK;
|
||||
break;
|
||||
case FALLOC_FL_WRITE_ZEROES:
|
||||
flags = 0;
|
||||
break;
|
||||
default:
|
||||
error = -EOPNOTSUPP;
|
||||
goto fail;
|
||||
|
||||
Reference in New Issue
Block a user