* [PATCH 0/2] Fix some -Wmaybe-uninitialized errors
@ 2023-09-05 16:15 Josef Bacik
2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Josef Bacik @ 2023-09-05 16:15 UTC (permalink / raw)
To: linux-btrfs, kernel-team
Hello,
Jens reported to me two warnings he was seeing with
CONFIG_CC_OPTIMIZE_FOR_SIZE=y set in his .config. We don't see these errors
without this option, and they're not correct warnings. However we've had issues
where -Wmaybe-uninitialized would have caught a real bug, so this warning is
generally valuable. Fix these warnings so we have a clean build. Thanks,
Josef
Josef Bacik (2):
btrfs: make sure to initialize start and len in find_free_dev_extent
btrfs: initialize start_slot in btrfs_log_prealloc_extents
fs/btrfs/tree-log.c | 2 +-
fs/btrfs/volumes.c | 14 ++++++--------
2 files changed, 7 insertions(+), 9 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent 2023-09-05 16:15 [PATCH 0/2] Fix some -Wmaybe-uninitialized errors Josef Bacik @ 2023-09-05 16:15 ` Josef Bacik 2023-09-05 17:30 ` Jens Axboe 2023-09-05 22:48 ` Qu Wenruo 2023-09-05 16:15 ` [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents Josef Bacik 2023-09-06 16:18 ` [PATCH 0/2] Fix some -Wmaybe-uninitialized errors David Sterba 2 siblings, 2 replies; 10+ messages in thread From: Josef Bacik @ 2023-09-05 16:15 UTC (permalink / raw) To: linux-btrfs, kernel-team; +Cc: Jens Axboe Jens reported a compiler error when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y that looks like this In function ‘gather_device_info’, inlined from ‘btrfs_create_chunk’ at fs/btrfs/volumes.c:5507:8: fs/btrfs/volumes.c:5245:48: warning: ‘dev_offset’ may be used uninitialized [-Wmaybe-uninitialized] 5245 | devices_info[ndevs].dev_offset = dev_offset; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ fs/btrfs/volumes.c: In function ‘btrfs_create_chunk’: fs/btrfs/volumes.c:5196:13: note: ‘dev_offset’ was declared here 5196 | u64 dev_offset; This occurs because find_free_dev_extent is responsible for setting dev_offset, however if we get an -ENOMEM at the top of the function we'll return without setting the value. This isn't actually a problem because we will see the -ENOMEM in gather_device_info() and return and not use the uninitialized value, however we also just don't want the compiler warning so rework the code slightly in find_free_dev_extent() to make sure it's always setting *start and *len to avoid the compiler error. Reported-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- fs/btrfs/volumes.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 4b0e441227b2..08dba911212c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1594,25 +1594,23 @@ static int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes, u64 search_start; u64 hole_size; u64 max_hole_start; - u64 max_hole_size; + u64 max_hole_size = 0; u64 extent_end; u64 search_end = device->total_bytes; int ret; int slot; struct extent_buffer *l; - search_start = dev_extent_search_start(device); + max_hole_start = search_start = dev_extent_search_start(device); WARN_ON(device->zone_info && !IS_ALIGNED(num_bytes, device->zone_info->zone_size)); path = btrfs_alloc_path(); - if (!path) - return -ENOMEM; - - max_hole_start = search_start; - max_hole_size = 0; - + if (!path) { + ret = -ENOMEM; + goto out; + } again: if (search_start >= search_end || test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) { -- 2.41.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent 2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik @ 2023-09-05 17:30 ` Jens Axboe 2023-09-05 22:48 ` Qu Wenruo 1 sibling, 0 replies; 10+ messages in thread From: Jens Axboe @ 2023-09-05 17:30 UTC (permalink / raw) To: Josef Bacik, linux-btrfs, kernel-team Tested-by: Jens Axboe <axboe@kernel.dk> -- Jens Axboe ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent 2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik 2023-09-05 17:30 ` Jens Axboe @ 2023-09-05 22:48 ` Qu Wenruo 2023-09-06 16:13 ` David Sterba 1 sibling, 1 reply; 10+ messages in thread From: Qu Wenruo @ 2023-09-05 22:48 UTC (permalink / raw) To: Josef Bacik, linux-btrfs, kernel-team; +Cc: Jens Axboe On 2023/9/6 00:15, Josef Bacik wrote: > Jens reported a compiler error when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y > that looks like this > > In function ‘gather_device_info’, > inlined from ‘btrfs_create_chunk’ at fs/btrfs/volumes.c:5507:8: > fs/btrfs/volumes.c:5245:48: warning: ‘dev_offset’ may be used uninitialized [-Wmaybe-uninitialized] > 5245 | devices_info[ndevs].dev_offset = dev_offset; > | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ > fs/btrfs/volumes.c: In function ‘btrfs_create_chunk’: > fs/btrfs/volumes.c:5196:13: note: ‘dev_offset’ was declared here > 5196 | u64 dev_offset; > > This occurs because find_free_dev_extent is responsible for setting > dev_offset, however if we get an -ENOMEM at the top of the function > we'll return without setting the value. > > This isn't actually a problem because we will see the -ENOMEM in > gather_device_info() and return and not use the uninitialized value, > however we also just don't want the compiler warning so rework the code > slightly in find_free_dev_extent() to make sure it's always setting > *start and *len to avoid the compiler error. > > Reported-by: Jens Axboe <axboe@kernel.dk> > Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Just one nitpick below. > --- > fs/btrfs/volumes.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c > index 4b0e441227b2..08dba911212c 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -1594,25 +1594,23 @@ static int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes, > u64 search_start; > u64 hole_size; > u64 max_hole_start; > - u64 max_hole_size; > + u64 max_hole_size = 0; > u64 extent_end; > u64 search_end = device->total_bytes; > int ret; > int slot; > struct extent_buffer *l; > > - search_start = dev_extent_search_start(device); > + max_hole_start = search_start = dev_extent_search_start(device); IIRC we don't recommend such assignment, it would be better to go two lines to do the assignment. Thanks, Qu > > WARN_ON(device->zone_info && > !IS_ALIGNED(num_bytes, device->zone_info->zone_size)); > > path = btrfs_alloc_path(); > - if (!path) > - return -ENOMEM; > - > - max_hole_start = search_start; > - max_hole_size = 0; > - > + if (!path) { > + ret = -ENOMEM; > + goto out; > + } > again: > if (search_start >= search_end || > test_bit(BTRFS_DEV_STATE_REPLACE_TGT, &device->dev_state)) { ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent 2023-09-05 22:48 ` Qu Wenruo @ 2023-09-06 16:13 ` David Sterba 0 siblings, 0 replies; 10+ messages in thread From: David Sterba @ 2023-09-06 16:13 UTC (permalink / raw) To: Qu Wenruo; +Cc: Josef Bacik, linux-btrfs, kernel-team, Jens Axboe On Wed, Sep 06, 2023 at 06:48:41AM +0800, Qu Wenruo wrote: > > - search_start = dev_extent_search_start(device); > > + max_hole_start = search_start = dev_extent_search_start(device); > > IIRC we don't recommend such assignment, it would be better to go two > lines to do the assignment. Right, fixed in the commit, thanks. ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents 2023-09-05 16:15 [PATCH 0/2] Fix some -Wmaybe-uninitialized errors Josef Bacik 2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik @ 2023-09-05 16:15 ` Josef Bacik 2023-09-05 17:31 ` Jens Axboe 2023-09-05 22:51 ` Qu Wenruo 2023-09-06 16:18 ` [PATCH 0/2] Fix some -Wmaybe-uninitialized errors David Sterba 2 siblings, 2 replies; 10+ messages in thread From: Josef Bacik @ 2023-09-05 16:15 UTC (permalink / raw) To: linux-btrfs, kernel-team; +Cc: Jens Axboe Jens reported a compiler warning when using CONFIG_CC_OPTIMIZE_FOR_SIZE=y that looks like this fs/btrfs/tree-log.c: In function ‘btrfs_log_prealloc_extents’: fs/btrfs/tree-log.c:4828:23: warning: ‘start_slot’ may be used uninitialized [-Wmaybe-uninitialized] 4828 | ret = copy_items(trans, inode, dst_path, path, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4829 | start_slot, ins_nr, 1, 0); | ~~~~~~~~~~~~~~~~~~~~~~~~~ fs/btrfs/tree-log.c:4725:13: note: ‘start_slot’ was declared here 4725 | int start_slot; | ^~~~~~~~~~ The compiler is incorrect, as we only use this code when ins_len > 0, and when ins_len > 0 we have start_slot properly initialized. However we generally find the -Wmaybe-uninitialized warnings valuable, so initialize start_slot to get rid of the warning. Reported-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Josef Bacik <josef@toxicpanda.com> --- fs/btrfs/tree-log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index d1e46b839519..cbb17b542131 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -4722,7 +4722,7 @@ static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans, struct extent_buffer *leaf; int slot; int ins_nr = 0; - int start_slot; + int start_slot = 0; int ret; if (!(inode->flags & BTRFS_INODE_PREALLOC)) -- 2.41.0 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents 2023-09-05 16:15 ` [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents Josef Bacik @ 2023-09-05 17:31 ` Jens Axboe 2023-09-05 22:51 ` Qu Wenruo 1 sibling, 0 replies; 10+ messages in thread From: Jens Axboe @ 2023-09-05 17:31 UTC (permalink / raw) To: Josef Bacik, linux-btrfs, kernel-team Tested-by: Jens Axboe <axboe@kernel.dk> -- Jens Axboe ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents 2023-09-05 16:15 ` [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents Josef Bacik 2023-09-05 17:31 ` Jens Axboe @ 2023-09-05 22:51 ` Qu Wenruo 2023-09-06 16:17 ` David Sterba 1 sibling, 1 reply; 10+ messages in thread From: Qu Wenruo @ 2023-09-05 22:51 UTC (permalink / raw) To: Josef Bacik, linux-btrfs, kernel-team; +Cc: Jens Axboe On 2023/9/6 00:15, Josef Bacik wrote: > Jens reported a compiler warning when using > CONFIG_CC_OPTIMIZE_FOR_SIZE=y that looks like this > > fs/btrfs/tree-log.c: In function ‘btrfs_log_prealloc_extents’: > fs/btrfs/tree-log.c:4828:23: warning: ‘start_slot’ may be used > uninitialized [-Wmaybe-uninitialized] > 4828 | ret = copy_items(trans, inode, dst_path, path, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 4829 | start_slot, ins_nr, 1, 0); > | ~~~~~~~~~~~~~~~~~~~~~~~~~ > fs/btrfs/tree-log.c:4725:13: note: ‘start_slot’ was declared here > 4725 | int start_slot; > | ^~~~~~~~~~ > > The compiler is incorrect, as we only use this code when ins_len > 0, > and when ins_len > 0 we have start_slot properly initialized. However > we generally find the -Wmaybe-uninitialized warnings valuable, so > initialize start_slot to get rid of the warning. > > Reported-by: Jens Axboe <axboe@kernel.dk> > Signed-off-by: Josef Bacik <josef@toxicpanda.com> I think we're in a dilemma, if we don't do the initialization, bad compiler may warn. But if we do the initialization, some static checker may also warn... Thanks, Qu > --- > fs/btrfs/tree-log.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c > index d1e46b839519..cbb17b542131 100644 > --- a/fs/btrfs/tree-log.c > +++ b/fs/btrfs/tree-log.c > @@ -4722,7 +4722,7 @@ static int btrfs_log_prealloc_extents(struct btrfs_trans_handle *trans, > struct extent_buffer *leaf; > int slot; > int ins_nr = 0; > - int start_slot; > + int start_slot = 0; > int ret; > > if (!(inode->flags & BTRFS_INODE_PREALLOC)) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents 2023-09-05 22:51 ` Qu Wenruo @ 2023-09-06 16:17 ` David Sterba 0 siblings, 0 replies; 10+ messages in thread From: David Sterba @ 2023-09-06 16:17 UTC (permalink / raw) To: Qu Wenruo; +Cc: Josef Bacik, linux-btrfs, kernel-team, Jens Axboe On Wed, Sep 06, 2023 at 06:51:26AM +0800, Qu Wenruo wrote: > > > On 2023/9/6 00:15, Josef Bacik wrote: > > Jens reported a compiler warning when using > > CONFIG_CC_OPTIMIZE_FOR_SIZE=y that looks like this > > > > fs/btrfs/tree-log.c: In function ‘btrfs_log_prealloc_extents’: > > fs/btrfs/tree-log.c:4828:23: warning: ‘start_slot’ may be used > > uninitialized [-Wmaybe-uninitialized] > > 4828 | ret = copy_items(trans, inode, dst_path, path, > > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > 4829 | start_slot, ins_nr, 1, 0); > > | ~~~~~~~~~~~~~~~~~~~~~~~~~ > > fs/btrfs/tree-log.c:4725:13: note: ‘start_slot’ was declared here > > 4725 | int start_slot; > > | ^~~~~~~~~~ > > > > The compiler is incorrect, as we only use this code when ins_len > 0, > > and when ins_len > 0 we have start_slot properly initialized. However > > we generally find the -Wmaybe-uninitialized warnings valuable, so > > initialize start_slot to get rid of the warning. > > > > Reported-by: Jens Axboe <axboe@kernel.dk> > > Signed-off-by: Josef Bacik <josef@toxicpanda.com> > > I think we're in a dilemma, if we don't do the initialization, bad > compiler may warn. > > But if we do the initialization, some static checker may also warn... I've seen static checkers to accept variables initialized to 0 and unused, there's a lot of code that does that as a matter of coding style so there would be too many warnings for a generally good practice. If we see a warning from something else than compiler then we can reconsider the way it's fixed but I think we'd see more compiler reports than static checker reports. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/2] Fix some -Wmaybe-uninitialized errors 2023-09-05 16:15 [PATCH 0/2] Fix some -Wmaybe-uninitialized errors Josef Bacik 2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik 2023-09-05 16:15 ` [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents Josef Bacik @ 2023-09-06 16:18 ` David Sterba 2 siblings, 0 replies; 10+ messages in thread From: David Sterba @ 2023-09-06 16:18 UTC (permalink / raw) To: Josef Bacik; +Cc: linux-btrfs, kernel-team On Tue, Sep 05, 2023 at 12:15:22PM -0400, Josef Bacik wrote: > Hello, > > Jens reported to me two warnings he was seeing with > CONFIG_CC_OPTIMIZE_FOR_SIZE=y set in his .config. We don't see these errors > without this option, and they're not correct warnings. However we've had issues > where -Wmaybe-uninitialized would have caught a real bug, so this warning is > generally valuable. Fix these warnings so we have a clean build. Thanks, > > Josef > > Josef Bacik (2): > btrfs: make sure to initialize start and len in find_free_dev_extent > btrfs: initialize start_slot in btrfs_log_prealloc_extents Added to misc-next, thanks. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-09-06 16:25 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-09-05 16:15 [PATCH 0/2] Fix some -Wmaybe-uninitialized errors Josef Bacik 2023-09-05 16:15 ` [PATCH 1/2] btrfs: make sure to initialize start and len in find_free_dev_extent Josef Bacik 2023-09-05 17:30 ` Jens Axboe 2023-09-05 22:48 ` Qu Wenruo 2023-09-06 16:13 ` David Sterba 2023-09-05 16:15 ` [PATCH 2/2] btrfs: initialize start_slot in btrfs_log_prealloc_extents Josef Bacik 2023-09-05 17:31 ` Jens Axboe 2023-09-05 22:51 ` Qu Wenruo 2023-09-06 16:17 ` David Sterba 2023-09-06 16:18 ` [PATCH 0/2] Fix some -Wmaybe-uninitialized errors David Sterba
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.