Merge tag 'for-5.1-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba: - fix parsing of compression algorithm when set as a inode property, this could end up with eg. 'zst' or 'zli' in the value - don't allow trim on a filesystem with unreplayed log, this could cause data loss if there are pending updates to the block groups that would not be subject to trim after replay * tag 'for-5.1-rc4-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: prop: fix vanished compression property after failed set btrfs: prop: fix zstd compression parameter validation Btrfs: do not allow trimming when a fs is mounted with the nologreplay option
This commit is contained in:
@@ -501,6 +501,16 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg)
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
/*
|
||||
* If the fs is mounted with nologreplay, which requires it to be
|
||||
* mounted in RO mode as well, we can not allow discard on free space
|
||||
* inside block groups, because log trees refer to extents that are not
|
||||
* pinned in a block group's free space cache (pinning the extents is
|
||||
* precisely the first phase of replaying a log tree).
|
||||
*/
|
||||
if (btrfs_test_opt(fs_info, NOLOGREPLAY))
|
||||
return -EROFS;
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(device, &fs_info->fs_devices->devices,
|
||||
dev_list) {
|
||||
|
@@ -366,11 +366,11 @@ int btrfs_subvol_inherit_props(struct btrfs_trans_handle *trans,
|
||||
|
||||
static int prop_compression_validate(const char *value, size_t len)
|
||||
{
|
||||
if (!strncmp("lzo", value, len))
|
||||
if (!strncmp("lzo", value, 3))
|
||||
return 0;
|
||||
else if (!strncmp("zlib", value, len))
|
||||
else if (!strncmp("zlib", value, 4))
|
||||
return 0;
|
||||
else if (!strncmp("zstd", value, len))
|
||||
else if (!strncmp("zstd", value, 4))
|
||||
return 0;
|
||||
|
||||
return -EINVAL;
|
||||
@@ -396,7 +396,7 @@ static int prop_compression_apply(struct inode *inode,
|
||||
btrfs_set_fs_incompat(fs_info, COMPRESS_LZO);
|
||||
} else if (!strncmp("zlib", value, 4)) {
|
||||
type = BTRFS_COMPRESS_ZLIB;
|
||||
} else if (!strncmp("zstd", value, len)) {
|
||||
} else if (!strncmp("zstd", value, 4)) {
|
||||
type = BTRFS_COMPRESS_ZSTD;
|
||||
btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD);
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user