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 5f5bc6b1e2
("Btrfs: make xattr replace operations atomic").
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
5dfe2be7ea
commit
5cdf83edb8
|
@ -111,6 +111,8 @@ static int do_setxattr(struct btrfs_trans_handle *trans,
|
|||
name, name_len, -1);
|
||||
if (!di && (flags & XATTR_REPLACE))
|
||||
ret = -ENODATA;
|
||||
else if (IS_ERR(di))
|
||||
ret = PTR_ERR(di);
|
||||
else if (di)
|
||||
ret = btrfs_delete_one_dir_name(trans, root, path, di);
|
||||
goto out;
|
||||
|
@ -127,10 +129,12 @@ static int do_setxattr(struct btrfs_trans_handle *trans,
|
|||
ASSERT(mutex_is_locked(&inode->i_mutex));
|
||||
di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode),
|
||||
name, name_len, 0);
|
||||
if (!di) {
|
||||
if (!di)
|
||||
ret = -ENODATA;
|
||||
else if (IS_ERR(di))
|
||||
ret = PTR_ERR(di);
|
||||
if (ret)
|
||||
goto out;
|
||||
}
|
||||
btrfs_release_path(path);
|
||||
di = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue