btrfs-progs: Fix -Wmaybe-uninitialized warning
GCC 8.2.1 will report the following warning with "make W=1": ctree.c: In function 'btrfs_next_sibling_tree_block': ctree.c:2990:21: warning: 'slot' may be used uninitialized in this function [-Wmaybe-uninitialized] path->slots[level] = slot; ~~~~~~~~~~~~~~~~~~~^~~~~~ The culprit is the following code: int slot; << Not initialized int level = path->lowest_level + 1; BUG_ON(path->lowest_level + 1 >= BTRFS_MAX_LEVEL); while(level < BTRFS_MAX_LEVEL) { slot = path->slots[level] + 1; ^^^^^^ but we initialize @slot here. ... } path->slots[level] = slot; It's possible that compiler doesn't get enough hint for BUG_ON() on lowest_level + 1 >= BTRFS_MAX_LEVEL case. Fix it by using a do {} while() loop other than while() {} loop, to ensure we will run the loop for at least once. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
e27e36b989
commit
bda00a4021
4
ctree.c
4
ctree.c
|
@ -2967,7 +2967,7 @@ int btrfs_next_sibling_tree_block(struct btrfs_fs_info *fs_info,
|
|||
struct extent_buffer *next = NULL;
|
||||
|
||||
BUG_ON(path->lowest_level + 1 >= BTRFS_MAX_LEVEL);
|
||||
while(level < BTRFS_MAX_LEVEL) {
|
||||
do {
|
||||
if (!path->nodes[level])
|
||||
return 1;
|
||||
|
||||
|
@ -2987,7 +2987,7 @@ int btrfs_next_sibling_tree_block(struct btrfs_fs_info *fs_info,
|
|||
if (!extent_buffer_uptodate(next))
|
||||
return -EIO;
|
||||
break;
|
||||
}
|
||||
} while (level < BTRFS_MAX_LEVEL);
|
||||
path->slots[level] = slot;
|
||||
while(1) {
|
||||
level--;
|
||||
|
|
Loading…
Reference in New Issue