2019-09-03 03:32:41

by Austin Kim

[permalink] [raw]
Subject: [PATCH] btrfs: fix Wmaybe-uninitialized warning

gcc throws warning message as below:

‘clone_src_i_size’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
^
fs/btrfs/send.c:5088:6: note: ‘clone_src_i_size’ was declared here
u64 clone_src_i_size;
^
The clone_src_i_size is only used as call-by-reference
in a call to get_inode_info().

Silence the warning by initializing clone_src_i_size to 0.

Signed-off-by: Austin Kim <[email protected]>
---
fs/btrfs/send.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index f856d6c..197536b 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -5085,7 +5085,7 @@ static int clone_range(struct send_ctx *sctx,
struct btrfs_path *path;
struct btrfs_key key;
int ret;
- u64 clone_src_i_size;
+ u64 clone_src_i_size = 0;

/*
* Prevent cloning from a zero offset with a length matching the sector
--
2.6.2


2019-09-10 16:41:35

by Austin Kim

[permalink] [raw]
Subject: Re: [PATCH] btrfs: fix Wmaybe-uninitialized warning

Hello, maintainers.

If you are available, please review this patch and share the feedback.

Thanks,
Austin Kim

2019년 9월 3일 (화) 오후 12:30, Austin Kim <[email protected]>님이 작성:
>
> gcc throws warning message as below:
>
> ‘clone_src_i_size’ may be used uninitialized in this function
> [-Wmaybe-uninitialized]
> #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
> ^
> fs/btrfs/send.c:5088:6: note: ‘clone_src_i_size’ was declared here
> u64 clone_src_i_size;
> ^
> The clone_src_i_size is only used as call-by-reference
> in a call to get_inode_info().
>
> Silence the warning by initializing clone_src_i_size to 0.
>
> Signed-off-by: Austin Kim <[email protected]>
> ---
> fs/btrfs/send.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
> index f856d6c..197536b 100644
> --- a/fs/btrfs/send.c
> +++ b/fs/btrfs/send.c
> @@ -5085,7 +5085,7 @@ static int clone_range(struct send_ctx *sctx,
> struct btrfs_path *path;
> struct btrfs_key key;
> int ret;
> - u64 clone_src_i_size;
> + u64 clone_src_i_size = 0;
>
> /*
> * Prevent cloning from a zero offset with a length matching the sector
> --
> 2.6.2
>

2019-09-17 10:43:21

by David Sterba

[permalink] [raw]
Subject: Re: [PATCH] btrfs: fix Wmaybe-uninitialized warning

On Tue, Sep 03, 2019 at 12:30:19PM +0900, Austin Kim wrote:
> gcc throws warning message as below:

What version of gcc reports that? 9.2.1 does not.

> ‘clone_src_i_size’ may be used uninitialized in this function
> [-Wmaybe-uninitialized]
> #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
> ^
> fs/btrfs/send.c:5088:6: note: ‘clone_src_i_size’ was declared here
> u64 clone_src_i_size;
> ^
> The clone_src_i_size is only used as call-by-reference
> in a call to get_inode_info().

The reference is passed to a static function, so the compiler has enough
information to determine if it's unused. By inspection I don't see a
problem with the uninitalized variable: if __get_inode_info succeeds,
there's a valid value, in error case it's not used at all.

2019-10-07 15:04:02

by David Sterba

[permalink] [raw]
Subject: Re: [PATCH] btrfs: fix Wmaybe-uninitialized warning

On Tue, Sep 03, 2019 at 12:30:19PM +0900, Austin Kim wrote:
> gcc throws warning message as below:
>
> ‘clone_src_i_size’ may be used uninitialized in this function
> [-Wmaybe-uninitialized]
> #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
> ^
> fs/btrfs/send.c:5088:6: note: ‘clone_src_i_size’ was declared here
> u64 clone_src_i_size;
> ^
> The clone_src_i_size is only used as call-by-reference
> in a call to get_inode_info().
>
> Silence the warning by initializing clone_src_i_size to 0.
>
> Signed-off-by: Austin Kim <[email protected]>

A few more people have repoted this warning, so I'm gonig to apply the
patch to avoid further reports. Thanks.