mirror of https://gitee.com/openkylin/linux.git
btrfs: disable fallocate in ZONED mode
fallocate() is implemented by reserving actual extent instead of reservations. This can result in exposing the sequential write constraint of host-managed zoned block devices to the application, which would break the POSIX semantic for the fallocated file. To avoid this, report fallocate() as not supported when in ZONED mode for now. In the future, we may be able to implement "in-memory" fallocate() in ZONED mode by utilizing space_info->bytes_may_use or similar, so this returns EOPNOTSUPP. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
d206e9c9c5
commit
f1569c4c10
|
@ -3308,6 +3308,10 @@ static long btrfs_fallocate(struct file *file, int mode,
|
|||
int blocksize = btrfs_inode_sectorsize(BTRFS_I(inode));
|
||||
int ret;
|
||||
|
||||
/* Do not allow fallocate in ZONED mode */
|
||||
if (btrfs_is_zoned(btrfs_sb(inode->i_sb)))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
alloc_start = round_down(offset, blocksize);
|
||||
alloc_end = round_up(offset + len, blocksize);
|
||||
cur_offset = alloc_start;
|
||||
|
|
Loading…
Reference in New Issue