On 2016/10/26 22:57, Arnd Bergmann wrote: > On Wednesday, October 26, 2016 10:05:00 PM CEST Chao Yu wrote: >> On 2016/10/18 6:05, Arnd Bergmann wrote: >>> gcc is unsure about the use of last_ofs_in_node, which might happen >>> without a prior initialization: >>> >>> fs/f2fs//git/arm-soc/fs/f2fs/data.c: In function ‘f2fs_map_blocks’: >>> fs/f2fs/data.c:799:54: warning: ‘last_ofs_in_node’ may be used >>> uninitialized in this function [-Wmaybe-uninitialized] >>> if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) { >> >> In each round of dnode block traverse, we will init 'prealloc' and then >> update >> 'prealloc' and 'last_ofs_in_node' together in below lines of f2fs_map_blocks: >> if (flag == F2FS_GET_BLOCK_PRE_AIO) { >> if (blkaddr == NULL_ADDR) { >> prealloc++; >> last_ofs_in_node = dn.ofs_in_node; >> } >> } >> >> Then in below codes, it is safe to use 'last_ofs_in_node' since we will check >> 'prealloc' firstly, so if 'prealloc' is non-zero, 'last_ofs_in_node' must be >> valid. >> if (prealloc && dn.ofs_in_node != last_ofs_in_node + 1) { >> >> So I think we should not add WARN_ON there. > > Ok, that make sense. Thanks for taking a closer look! > > Should we just set last_ofs_in_node to the same value as ofs_in_node > before the loop?
I think it's OK as it can remove warning compiler reports. :) Thanks, > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 9ae194f..14db4b7 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -716,7 +716,7 @@ int f2fs_map_blocks(struct inode *inode, struct > f2fs_map_blocks *map, > } > > prealloc = 0; > - ofs_in_node = dn.ofs_in_node; > + last_ofs_in_node = ofs_in_node = dn.ofs_in_node; > end_offset = ADDRS_PER_PAGE(dn.node_page, inode); > > next_block: > > Arnd > > . >