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
> 
> .
> 

Reply via email to