mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
btrfs: use a single variable to track return value for log_dir_items()
We currently use 'ret' and 'err' to track the return value for log_dir_items(), which is confusing and likely the cause for previous bugs where log_dir_items() did not return an error when it should, fixed in previous patches. So change this and use only a single variable, 'ret', to track the return value. This is simpler and makes it similar to most of the existing code. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5cce1780dc
commit
235e1c7b87
@ -3793,7 +3793,6 @@ static noinline int log_dir_items(struct btrfs_trans_handle *trans,
|
||||
struct btrfs_key min_key;
|
||||
struct btrfs_root *root = inode->root;
|
||||
struct btrfs_root *log = root->log_root;
|
||||
int err = 0;
|
||||
int ret;
|
||||
u64 last_old_dentry_offset = min_offset - 1;
|
||||
u64 last_offset = (u64)-1;
|
||||
@ -3834,8 +3833,8 @@ static noinline int log_dir_items(struct btrfs_trans_handle *trans,
|
||||
path->slots[0]);
|
||||
if (tmp.type == BTRFS_DIR_INDEX_KEY)
|
||||
last_old_dentry_offset = tmp.offset;
|
||||
} else if (ret < 0) {
|
||||
err = ret;
|
||||
} else if (ret > 0) {
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
goto done;
|
||||
@ -3858,7 +3857,6 @@ static noinline int log_dir_items(struct btrfs_trans_handle *trans,
|
||||
if (tmp.type == BTRFS_DIR_INDEX_KEY)
|
||||
last_old_dentry_offset = tmp.offset;
|
||||
} else if (ret < 0) {
|
||||
err = ret;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@ -3880,12 +3878,15 @@ static noinline int log_dir_items(struct btrfs_trans_handle *trans,
|
||||
*/
|
||||
search:
|
||||
ret = btrfs_search_slot(NULL, root, &min_key, path, 0, 0);
|
||||
if (ret > 0)
|
||||
if (ret > 0) {
|
||||
ret = btrfs_next_item(root, path);
|
||||
if (ret > 0) {
|
||||
/* There are no more keys in the inode's root. */
|
||||
ret = 0;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
if (ret < 0)
|
||||
err = ret;
|
||||
/* If ret is 1, there are no more keys in the inode's root. */
|
||||
if (ret != 0)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
@ -3896,8 +3897,8 @@ search:
|
||||
ret = process_dir_items_leaf(trans, inode, path, dst_path, ctx,
|
||||
&last_old_dentry_offset);
|
||||
if (ret != 0) {
|
||||
if (ret < 0)
|
||||
err = ret;
|
||||
if (ret > 0)
|
||||
ret = 0;
|
||||
goto done;
|
||||
}
|
||||
path->slots[0] = btrfs_header_nritems(path->nodes[0]);
|
||||
@ -3908,10 +3909,10 @@ search:
|
||||
*/
|
||||
ret = btrfs_next_leaf(root, path);
|
||||
if (ret) {
|
||||
if (ret == 1)
|
||||
if (ret == 1) {
|
||||
last_offset = (u64)-1;
|
||||
else
|
||||
err = ret;
|
||||
ret = 0;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
btrfs_item_key_to_cpu(path->nodes[0], &min_key, path->slots[0]);
|
||||
@ -3942,7 +3943,7 @@ done:
|
||||
btrfs_release_path(path);
|
||||
btrfs_release_path(dst_path);
|
||||
|
||||
if (err == 0) {
|
||||
if (ret == 0) {
|
||||
*last_offset_ret = last_offset;
|
||||
/*
|
||||
* In case the leaf was changed in the current transaction but
|
||||
@ -3953,15 +3954,13 @@ done:
|
||||
* a range, last_old_dentry_offset is == to last_offset.
|
||||
*/
|
||||
ASSERT(last_old_dentry_offset <= last_offset);
|
||||
if (last_old_dentry_offset < last_offset) {
|
||||
if (last_old_dentry_offset < last_offset)
|
||||
ret = insert_dir_log_key(trans, log, path, ino,
|
||||
last_old_dentry_offset + 1,
|
||||
last_offset);
|
||||
if (ret)
|
||||
err = ret;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user