On Wed, Feb 27, 2019 at 01:49:52PM +0800, Qu Wenruo wrote: > GCC 8.2.1 will report the following error: > > check/main.c: In function 'try_repair_inode': > check/main.c:2606:5: warning: 'ret' may be used uninitialized in this > function [-Wmaybe-uninitialized] > if (!ret) { > ^ > check/main.c:2584:6: note: 'ret' was declared here > int ret; > ^~~ > > The offending code is in repair_mismatch_dir_hash(): > > int ret; > > printf( > "Deleting bad dir items with invalid hash for root %llu ino %llu\n", > root->root_key.objectid, rec->ino); > while (!list_empty(&rec->mismatch_dir_hash)) { > /* do some repair */ > } > if (!ret) { <<< Here > /* do some fix */ > } > > The truth is, to enter try_repair_inode(), we must have > I_ERR_MISMATCH_DIR_HASH bit set for rec->errors. > > And just after we set I_ERR_MISMATCH_DIR_HASH, we call > add_mismatch_dir_hash() and handled its error correctly. > > So it's impossible to to skip the while loop. > > Fix it by initializing @ret to -EUCLEAN, so even we hit some impossible > case, repair_mismatch_dir_hash() won't falsely consider the mismatch > hash fixed. > > Signed-off-by: Qu Wenruo <w...@suse.com>
Applied, thanks.