diff options
author | Filipe Manana <fdmanana@suse.com> | 2015-02-23 14:50:49 -0500 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-03-02 17:04:45 -0500 |
commit | 5cdf83edb8e41cad1ec8eab2d402b4f9d9eb7ee0 (patch) | |
tree | 8585bd88705aebb17bb8114768d09fa46c092c43 /fs/btrfs | |
parent | 5dfe2be7ead15863fd7b3fcc8bd69e470fae2bec (diff) |
Btrfs: do not ignore errors from btrfs_lookup_xattr in do_setxattr
The return value from btrfs_lookup_xattr() can be a pointer encoding an
error, therefore deal with it. This fixes commit 5f5bc6b1e2d5
("Btrfs: make xattr replace operations atomic").
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/xattr.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 47b19465f0dc..883b93623bc5 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c | |||
@@ -111,6 +111,8 @@ static int do_setxattr(struct btrfs_trans_handle *trans, | |||
111 | name, name_len, -1); | 111 | name, name_len, -1); |
112 | if (!di && (flags & XATTR_REPLACE)) | 112 | if (!di && (flags & XATTR_REPLACE)) |
113 | ret = -ENODATA; | 113 | ret = -ENODATA; |
114 | else if (IS_ERR(di)) | ||
115 | ret = PTR_ERR(di); | ||
114 | else if (di) | 116 | else if (di) |
115 | ret = btrfs_delete_one_dir_name(trans, root, path, di); | 117 | ret = btrfs_delete_one_dir_name(trans, root, path, di); |
116 | goto out; | 118 | goto out; |
@@ -127,10 +129,12 @@ static int do_setxattr(struct btrfs_trans_handle *trans, | |||
127 | ASSERT(mutex_is_locked(&inode->i_mutex)); | 129 | ASSERT(mutex_is_locked(&inode->i_mutex)); |
128 | di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), | 130 | di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), |
129 | name, name_len, 0); | 131 | name, name_len, 0); |
130 | if (!di) { | 132 | if (!di) |
131 | ret = -ENODATA; | 133 | ret = -ENODATA; |
134 | else if (IS_ERR(di)) | ||
135 | ret = PTR_ERR(di); | ||
136 | if (ret) | ||
132 | goto out; | 137 | goto out; |
133 | } | ||
134 | btrfs_release_path(path); | 138 | btrfs_release_path(path); |
135 | di = NULL; | 139 | di = NULL; |
136 | } | 140 | } |