mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 13:34:30 +00:00
btrfs: check for error when looking up inode during dir entry replay
At replay_one_name(), we are treating any error from btrfs_lookup_inode() as if the inode does not exists. Fix this by checking for an error and returning it to the caller. CC: stable@vger.kernel.org # 4.14+ Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
8dcbc26194
commit
cfd312695b
@ -1950,8 +1950,8 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
|
|||||||
struct btrfs_key log_key;
|
struct btrfs_key log_key;
|
||||||
struct inode *dir;
|
struct inode *dir;
|
||||||
u8 log_type;
|
u8 log_type;
|
||||||
int exists;
|
bool exists;
|
||||||
int ret = 0;
|
int ret;
|
||||||
bool update_size = (key->type == BTRFS_DIR_INDEX_KEY);
|
bool update_size = (key->type == BTRFS_DIR_INDEX_KEY);
|
||||||
bool name_added = false;
|
bool name_added = false;
|
||||||
|
|
||||||
@ -1971,12 +1971,12 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,
|
|||||||
name_len);
|
name_len);
|
||||||
|
|
||||||
btrfs_dir_item_key_to_cpu(eb, di, &log_key);
|
btrfs_dir_item_key_to_cpu(eb, di, &log_key);
|
||||||
exists = btrfs_lookup_inode(trans, root, path, &log_key, 0);
|
ret = btrfs_lookup_inode(trans, root, path, &log_key, 0);
|
||||||
if (exists == 0)
|
|
||||||
exists = 1;
|
|
||||||
else
|
|
||||||
exists = 0;
|
|
||||||
btrfs_release_path(path);
|
btrfs_release_path(path);
|
||||||
|
if (ret < 0)
|
||||||
|
goto out;
|
||||||
|
exists = (ret == 0);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
if (key->type == BTRFS_DIR_ITEM_KEY) {
|
if (key->type == BTRFS_DIR_ITEM_KEY) {
|
||||||
dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid,
|
dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user