mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
btrfs: prop: open code btrfs_set_prop in inherit_prop
When an inode inherits property from its parent, we call btrfs_set_prop(). btrfs_set_prop() does an elaborate checks, which is not required in the context of inheriting a property. Instead just open-code only the required items from btrfs_set_prop() and then call btrfs_setxattr() directly. So now the only user of btrfs_set_prop() is gone, (except for the wraper function btrfs_set_prop_trans()). Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
ae0bc86310
commit
8b4d1efc9e
@ -344,20 +344,38 @@ static int inherit_props(struct btrfs_trans_handle *trans,
|
|||||||
if (!value)
|
if (!value)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is not strictly necessary as the property should be
|
||||||
|
* valid, but in case it isn't, don't propagate it futher.
|
||||||
|
*/
|
||||||
|
ret = h->validate(value, strlen(value));
|
||||||
|
if (ret)
|
||||||
|
continue;
|
||||||
|
|
||||||
num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
|
num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
|
||||||
ret = btrfs_block_rsv_add(root, trans->block_rsv,
|
ret = btrfs_block_rsv_add(root, trans->block_rsv,
|
||||||
num_bytes, BTRFS_RESERVE_NO_FLUSH);
|
num_bytes, BTRFS_RESERVE_NO_FLUSH);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
return ret;
|
||||||
ret = btrfs_set_prop(trans, inode, h->xattr_name, value,
|
|
||||||
|
ret = btrfs_setxattr(trans, inode, h->xattr_name, value,
|
||||||
strlen(value), 0);
|
strlen(value), 0);
|
||||||
|
if (!ret) {
|
||||||
|
ret = h->apply(inode, value, strlen(value));
|
||||||
|
if (ret)
|
||||||
|
btrfs_setxattr(trans, inode, h->xattr_name,
|
||||||
|
NULL, 0, 0);
|
||||||
|
else
|
||||||
|
set_bit(BTRFS_INODE_HAS_PROPS,
|
||||||
|
&BTRFS_I(inode)->runtime_flags);
|
||||||
|
}
|
||||||
|
|
||||||
btrfs_block_rsv_release(fs_info, trans->block_rsv, num_bytes);
|
btrfs_block_rsv_release(fs_info, trans->block_rsv, num_bytes);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = 0;
|
|
||||||
out:
|
return 0;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_inode_inherit_props(struct btrfs_trans_handle *trans,
|
int btrfs_inode_inherit_props(struct btrfs_trans_handle *trans,
|
||||||
|
Loading…
Reference in New Issue
Block a user