summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/props.c
diff options
context:
space:
mode:
authorAnand Jain <anand.jain@oracle.com>2019-04-12 10:02:58 +0200
committerDavid Sterba <dsterba@suse.com>2019-04-29 19:02:44 +0200
commit04e6863b19c72279bcbeffa26d85d649ab9c8205 (patch)
tree9b8c3dead2ef66371726b7b16a155d2903ff3218 /fs/btrfs/props.c
parentbtrfs: remove redundant readonly root check in btrfs_setxattr_trans (diff)
downloadlinux-04e6863b19c72279bcbeffa26d85d649ab9c8205.tar.xz
linux-04e6863b19c72279bcbeffa26d85d649ab9c8205.zip
btrfs: split btrfs_setxattr calls regarding transaction
When the caller has already created the transaction handle, btrfs_setxattr() will use it. Also adds assert in btrfs_setxattr(). Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/props.c')
-rw-r--r--fs/btrfs/props.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/fs/btrfs/props.c b/fs/btrfs/props.c
index 61ced0ebb5ba..a73c1bdc7b05 100644
--- a/fs/btrfs/props.c
+++ b/fs/btrfs/props.c
@@ -70,8 +70,13 @@ static int btrfs_set_prop(struct btrfs_trans_handle *trans, struct inode *inode,
return -EINVAL;
if (value_len == 0) {
- ret = btrfs_setxattr_trans(trans, inode, handler->xattr_name,
- NULL, 0, flags);
+ if (trans)
+ ret = btrfs_setxattr(trans, inode, handler->xattr_name,
+ NULL, 0, flags);
+ else
+ ret = btrfs_setxattr_trans(NULL, inode,
+ handler->xattr_name, NULL, 0,
+ flags);
if (ret)
return ret;
@@ -84,14 +89,23 @@ static int btrfs_set_prop(struct btrfs_trans_handle *trans, struct inode *inode,
ret = handler->validate(value, value_len);
if (ret)
return ret;
- ret = btrfs_setxattr_trans(trans, inode, handler->xattr_name,
- value, value_len, flags);
+ if (trans)
+ ret = btrfs_setxattr(trans, inode, handler->xattr_name, value,
+ value_len, flags);
+ else
+ ret = btrfs_setxattr_trans(NULL, inode, handler->xattr_name,
+ value, value_len, flags);
+
if (ret)
return ret;
ret = handler->apply(inode, value, value_len);
if (ret) {
- btrfs_setxattr_trans(trans, inode, handler->xattr_name,
- NULL, 0, flags);
+ if (trans)
+ btrfs_setxattr(trans, inode, handler->xattr_name, NULL,
+ 0, flags);
+ else
+ btrfs_setxattr_trans(NULL, inode, handler->xattr_name,
+ NULL, 0, flags);
return ret;
}
@@ -358,13 +372,13 @@ static int inherit_props(struct btrfs_trans_handle *trans,
if (ret)
return ret;
- ret = btrfs_setxattr_trans(trans, inode, h->xattr_name, value,
- strlen(value), 0);
+ ret = btrfs_setxattr(trans, inode, h->xattr_name, value,
+ strlen(value), 0);
if (!ret) {
ret = h->apply(inode, value, strlen(value));
if (ret)
- btrfs_setxattr_trans(trans, inode, h->xattr_name,
- NULL, 0, 0);
+ btrfs_setxattr(trans, inode, h->xattr_name,
+ NULL, 0, 0);
else
set_bit(BTRFS_INODE_HAS_PROPS,
&BTRFS_I(inode)->runtime_flags);