summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/props.c
diff options
context:
space:
mode:
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,
70 return -EINVAL; 70 return -EINVAL;
71 71
72 if (value_len == 0) { 72 if (value_len == 0) {
73 ret = btrfs_setxattr_trans(trans, inode, handler->xattr_name, 73 if (trans)
74 NULL, 0, flags); 74 ret = btrfs_setxattr(trans, inode, handler->xattr_name,
75 NULL, 0, flags);
76 else
77 ret = btrfs_setxattr_trans(NULL, inode,
78 handler->xattr_name, NULL, 0,
79 flags);
75 if (ret) 80 if (ret)
76 return ret; 81 return ret;
77 82
@@ -84,14 +89,23 @@ static int btrfs_set_prop(struct btrfs_trans_handle *trans, struct inode *inode,
84 ret = handler->validate(value, value_len); 89 ret = handler->validate(value, value_len);
85 if (ret) 90 if (ret)
86 return ret; 91 return ret;
87 ret = btrfs_setxattr_trans(trans, inode, handler->xattr_name, 92 if (trans)
88 value, value_len, flags); 93 ret = btrfs_setxattr(trans, inode, handler->xattr_name, value,
94 value_len, flags);
95 else
96 ret = btrfs_setxattr_trans(NULL, inode, handler->xattr_name,
97 value, value_len, flags);
98
89 if (ret) 99 if (ret)
90 return ret; 100 return ret;
91 ret = handler->apply(inode, value, value_len); 101 ret = handler->apply(inode, value, value_len);
92 if (ret) { 102 if (ret) {
93 btrfs_setxattr_trans(trans, inode, handler->xattr_name, 103 if (trans)
94 NULL, 0, flags); 104 btrfs_setxattr(trans, inode, handler->xattr_name, NULL,
105 0, flags);
106 else
107 btrfs_setxattr_trans(NULL, inode, handler->xattr_name,
108 NULL, 0, flags);
95 return ret; 109 return ret;
96 } 110 }
97 111
@@ -358,13 +372,13 @@ static int inherit_props(struct btrfs_trans_handle *trans,
358 if (ret) 372 if (ret)
359 return ret; 373 return ret;
360 374
361 ret = btrfs_setxattr_trans(trans, inode, h->xattr_name, value, 375 ret = btrfs_setxattr(trans, inode, h->xattr_name, value,
362 strlen(value), 0); 376 strlen(value), 0);
363 if (!ret) { 377 if (!ret) {
364 ret = h->apply(inode, value, strlen(value)); 378 ret = h->apply(inode, value, strlen(value));
365 if (ret) 379 if (ret)
366 btrfs_setxattr_trans(trans, inode, h->xattr_name, 380 btrfs_setxattr(trans, inode, h->xattr_name,
367 NULL, 0, 0); 381 NULL, 0, 0);
368 else 382 else
369 set_bit(BTRFS_INODE_HAS_PROPS, 383 set_bit(BTRFS_INODE_HAS_PROPS,
370 &BTRFS_I(inode)->runtime_flags); 384 &BTRFS_I(inode)->runtime_flags);