On Mon, Feb 21, 2022 at 5:46 AM Qu Wenruo <quwenruo.btrfs@xxxxxxx> wrote:
On 2022/2/20 22:46, Souptick Joarder wrote:
From: "Souptick Joarder (HPE)" <jrdr.linux@xxxxxxxxx>
Kernel test robot reported below warning ->
fs/btrfs/scrub.c:3439:2: warning: Undefined or garbage value
returned to caller [clang-analyzer-core.uninitialized.UndefReturn]
Initialize ret to 0.
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Signed-off-by: Souptick Joarder (HPE) <jrdr.linux@xxxxxxxxx>
Although the patch is not yet merged, but I have to say, it's a false alert.
Yes, I agree it is a false positive but this patch will at least keep
kernel test robot happy :)
Firstly, the while loop will always get at least one run.
Secondly, in that loop, we either set ret to some error value and break,
or after at least one find_first_extent_item() and scrub_extent() call,
we increase cur_logical and reached the limit of the while loop and exit.
So there is no possible routine to leave @ret uninitialized and returned
to caller.
Thanks,
Qu
---
fs/btrfs/scrub.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 4baa8e43d585..5ca7e5ffbc96 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -3325,7 +3325,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,
const u32 max_length = SZ_64K;
struct btrfs_path path = {};
u64 cur_logical = logical_start;
- int ret;
+ int ret = 0;
/* The range must be inside the bg */
ASSERT(logical_start >= bg->start &&