diff mbox series

[4/6] btrfs: simplify error path for btrfs_lookup_csums_list()

Message ID d5576134584be460ba386627ee5853fcca5c2edd.1712933006.git.fdmanana@suse.com (mailing list archive)
State New
Headers show
Series btrfs: some speedup for NOCOW write path and cleanups | expand

Commit Message

Filipe Manana April 12, 2024, 3:03 p.m. UTC
From: Filipe Manana <fdmanana@suse.com>

In the error path we have this while loop that keeps iterating over the
csums of the list and then delete them from the list and free them,
testing for an error (ret < 0) and list emptyness as the conditions of
the while loop.

Simplify this by using list_for_each_entry_safe() so there's no need to
delete elements from the list and need to test the error condition on
each iteration.

Also rename the 'fail' label to 'out' since the label is not exclusive
to a failure path, as we also end up there when the function succeeds,
and it's also a more common label name.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/file-item.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

Comments

Qu Wenruo April 13, 2024, 10:12 a.m. UTC | #1
在 2024/4/13 00:33, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
>
> In the error path we have this while loop that keeps iterating over the
> csums of the list and then delete them from the list and free them,
> testing for an error (ret < 0) and list emptyness as the conditions of
> the while loop.
>
> Simplify this by using list_for_each_entry_safe() so there's no need to
> delete elements from the list and need to test the error condition on
> each iteration.
>
> Also rename the 'fail' label to 'out' since the label is not exclusive
> to a failure path, as we also end up there when the function succeeds,
> and it's also a more common label name.
>
> Signed-off-by: Filipe Manana <fdmanana@suse.com>

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu
> ---
>   fs/btrfs/file-item.c | 17 +++++++++--------
>   1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
> index c2799325706f..231abcc87f63 100644
> --- a/fs/btrfs/file-item.c
> +++ b/fs/btrfs/file-item.c
> @@ -487,7 +487,7 @@ int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
>
>   	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
>   	if (ret < 0)
> -		goto fail;
> +		goto out;
>   	if (ret > 0 && path->slots[0] > 0) {
>   		leaf = path->nodes[0];
>   		btrfs_item_key_to_cpu(leaf, &key, path->slots[0] - 1);
> @@ -522,7 +522,7 @@ int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
>   		if (path->slots[0] >= btrfs_header_nritems(leaf)) {
>   			ret = btrfs_next_leaf(root, path);
>   			if (ret < 0)
> -				goto fail;
> +				goto out;
>   			if (ret > 0)
>   				break;
>   			leaf = path->nodes[0];
> @@ -557,7 +557,7 @@ int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
>   				       GFP_NOFS);
>   			if (!sums) {
>   				ret = -ENOMEM;
> -				goto fail;
> +				goto out;
>   			}
>
>   			sums->logical = start;
> @@ -576,11 +576,12 @@ int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
>   		path->slots[0]++;
>   	}
>   	ret = 0;
> -fail:
> -	while (ret < 0 && !list_empty(list)) {
> -		sums = list_entry(list->next, struct btrfs_ordered_sum, list);
> -		list_del(&sums->list);
> -		kfree(sums);
> +out:
> +	if (ret < 0) {
> +		struct btrfs_ordered_sum *tmp_sums;
> +
> +		list_for_each_entry_safe(sums, tmp_sums, list, list)
> +			kfree(sums);
>   	}
>
>   	btrfs_free_path(path);
diff mbox series

Patch

diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index c2799325706f..231abcc87f63 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -487,7 +487,7 @@  int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
 
 	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
 	if (ret < 0)
-		goto fail;
+		goto out;
 	if (ret > 0 && path->slots[0] > 0) {
 		leaf = path->nodes[0];
 		btrfs_item_key_to_cpu(leaf, &key, path->slots[0] - 1);
@@ -522,7 +522,7 @@  int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
 		if (path->slots[0] >= btrfs_header_nritems(leaf)) {
 			ret = btrfs_next_leaf(root, path);
 			if (ret < 0)
-				goto fail;
+				goto out;
 			if (ret > 0)
 				break;
 			leaf = path->nodes[0];
@@ -557,7 +557,7 @@  int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
 				       GFP_NOFS);
 			if (!sums) {
 				ret = -ENOMEM;
-				goto fail;
+				goto out;
 			}
 
 			sums->logical = start;
@@ -576,11 +576,12 @@  int btrfs_lookup_csums_list(struct btrfs_root *root, u64 start, u64 end,
 		path->slots[0]++;
 	}
 	ret = 0;
-fail:
-	while (ret < 0 && !list_empty(list)) {
-		sums = list_entry(list->next, struct btrfs_ordered_sum, list);
-		list_del(&sums->list);
-		kfree(sums);
+out:
+	if (ret < 0) {
+		struct btrfs_ordered_sum *tmp_sums;
+
+		list_for_each_entry_safe(sums, tmp_sums, list, list)
+			kfree(sums);
 	}
 
 	btrfs_free_path(path);