Re: [PATCH linux-next] fs: btrfs: fix returnvar.cocci warnings

From: Qu Wenruo
Date: Thu Aug 19 2021 - 23:17:20 EST




On 2021/8/20 上午10:32, jing yangyang wrote:
Remove unneeded variables when "0" can be returned.

Generated by: scripts/coccinelle/misc/returnvar.cocci

Reported-by: Zeal Robot <zealci@xxxxxxxxxx>
Signed-off-by: jing yangyang <jing.yangyang@xxxxxxxxxx>
---
fs/btrfs/extent_map.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index 4a8e02f..58860d7 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -296,7 +296,6 @@ static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em)
int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len,
u64 gen)
{
- int ret = 0;
struct extent_map *em;
bool prealloc = false;


Please just check the lines below:

em = lookup_extent_mapping(tree, start, len);

WARN_ON(!em || em->start != start);

if (!em)
goto out;

This looks more like a missing error handling.

Thus the proper way to fix it is not just simply remove the "int ret =
0;" line (which compiler is more than able to optimize it out), but
properly add the error handling, and modify the only caller to catch
such error properly.

Some diff like the below would be more meaningful:

diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index 4a8e02f7b6c7..9182d747a50e 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -303,10 +303,11 @@ int unpin_extent_cache(struct extent_map_tree
*tree, u64 start, u64 len,
write_lock(&tree->lock);
em = lookup_extent_mapping(tree, start, len);

- WARN_ON(!em || em->start != start);
-
- if (!em)
+ if (!em || em->start != start) {
+ WARN(1, KERN_WARNING "unexpected extent mapping\n");
+ ret = -EUCLEAN;
goto out;
+ }

em->generation = gen;
clear_bit(EXTENT_FLAG_PINNED, &em->flags);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 2aa9646bce56..313b0a314c0b 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2989,6 +2989,7 @@ static int btrfs_finish_ordered_io(struct
btrfs_ordered_extent *ordered_extent)
u64 start, end;
int compress_type = 0;
int ret = 0;
+ int ret2;
u64 logical_len = ordered_extent->num_bytes;
bool freespace_inode;
bool truncated = false;
@@ -3076,8 +3077,11 @@ static int btrfs_finish_ordered_io(struct
btrfs_ordered_extent *ordered_extent)
ordered_extent->disk_num_bytes);
}
}
- unpin_extent_cache(&inode->extent_tree, ordered_extent->file_offset,
+ ret2 = unpin_extent_cache(&inode->extent_tree,
ordered_extent->file_offset,
ordered_extent->num_bytes, trans->transid);
+ if (ret2 < 0 && !ret)
+ ret = ret2;
+
if (ret < 0) {
btrfs_abort_transaction(trans, ret);
goto out;


Thanks,
Qu
@@ -328,7 +327,7 @@ int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len,
free_extent_map(em);
out:
write_unlock(&tree->lock);
- return ret;
+ return 0;

}