Re: [PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-18 Thread Jan Kara
On Mon 17-10-16 22:15:29, Christoph Hellwig wrote:
> Thanks Arnd, this looks fine to me:
> 
> Reviewed-by: Christoph Hellwig 

Thanks! I have pulled the patch into my tree and will push it to Linus.

Honza
-- 
Jan Kara 
SUSE Labs, CR


Re: [PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-18 Thread Jan Kara
On Mon 17-10-16 22:15:29, Christoph Hellwig wrote:
> Thanks Arnd, this looks fine to me:
> 
> Reviewed-by: Christoph Hellwig 

Thanks! I have pulled the patch into my tree and will push it to Linus.

Honza
-- 
Jan Kara 
SUSE Labs, CR


Re: [PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-17 Thread Christoph Hellwig
Thanks Arnd, this looks fine to me:

Reviewed-by: Christoph Hellwig 


Re: [PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-17 Thread Christoph Hellwig
Thanks Arnd, this looks fine to me:

Reviewed-by: Christoph Hellwig 


[PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-17 Thread Arnd Bergmann
On ARM, we get this false-positive warning since the rework of
the ext2_get_blocks interface:

fs/ext2/inode.c: In function 'ext2_get_block':
include/linux/buffer_head.h:340:16: error: 'bno' may be used uninitialized in 
this function [-Werror=maybe-uninitialized]

The calling conventions for this function are rather complex, and it's
not surprising that the compiler gets this wrong, I spent a long time
trying to understand how it all fits together myself.

This change to avoid the warning makes sure the compiler sees that we
always set 'bno' pointer whenever we have a positive return code.
The transformation is correct because we always arrive at the 'got_it'
label with a positive count that gets used as the return value, while
any branch to the 'cleanup' label has a negative or zero 'err'.

Fixes: 6750ad71986d ("ext2: stop passing buffer_head to ext2_get_blocks")
Signed-off-by: Arnd Bergmann 
Cc: Christoph Hellwig 
Cc: Dave Chinner 
---
 fs/ext2/inode.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index d831e24..41b8b44 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -622,7 +622,7 @@ static int ext2_get_blocks(struct inode *inode,
   u32 *bno, bool *new, bool *boundary,
   int create)
 {
-   int err = -EIO;
+   int err;
int offsets[4];
Indirect chain[4];
Indirect *partial;
@@ -639,7 +639,7 @@ static int ext2_get_blocks(struct inode *inode,
depth = ext2_block_to_path(inode,iblock,offsets,_to_boundary);
 
if (depth == 0)
-   return (err);
+   return -EIO;
 
partial = ext2_get_branch(inode, depth, offsets, chain, );
/* Simplest case - block found, no allocation needed */
@@ -761,7 +761,6 @@ static int ext2_get_blocks(struct inode *inode,
ext2_splice_branch(inode, iblock, partial, indirect_blks, count);
mutex_unlock(>truncate_mutex);
 got_it:
-   *bno = le32_to_cpu(chain[depth-1].key);
if (count > blocks_to_boundary)
*boundary = true;
err = count;
@@ -772,6 +771,8 @@ static int ext2_get_blocks(struct inode *inode,
brelse(partial->bh);
partial--;
}
+   if (err > 0)
+   *bno = le32_to_cpu(chain[depth-1].key);
return err;
 }
 
-- 
2.9.0



[PATCH 05/28] ext2: avoid bogus -Wmaybe-uninitialized warning

2016-10-17 Thread Arnd Bergmann
On ARM, we get this false-positive warning since the rework of
the ext2_get_blocks interface:

fs/ext2/inode.c: In function 'ext2_get_block':
include/linux/buffer_head.h:340:16: error: 'bno' may be used uninitialized in 
this function [-Werror=maybe-uninitialized]

The calling conventions for this function are rather complex, and it's
not surprising that the compiler gets this wrong, I spent a long time
trying to understand how it all fits together myself.

This change to avoid the warning makes sure the compiler sees that we
always set 'bno' pointer whenever we have a positive return code.
The transformation is correct because we always arrive at the 'got_it'
label with a positive count that gets used as the return value, while
any branch to the 'cleanup' label has a negative or zero 'err'.

Fixes: 6750ad71986d ("ext2: stop passing buffer_head to ext2_get_blocks")
Signed-off-by: Arnd Bergmann 
Cc: Christoph Hellwig 
Cc: Dave Chinner 
---
 fs/ext2/inode.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index d831e24..41b8b44 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -622,7 +622,7 @@ static int ext2_get_blocks(struct inode *inode,
   u32 *bno, bool *new, bool *boundary,
   int create)
 {
-   int err = -EIO;
+   int err;
int offsets[4];
Indirect chain[4];
Indirect *partial;
@@ -639,7 +639,7 @@ static int ext2_get_blocks(struct inode *inode,
depth = ext2_block_to_path(inode,iblock,offsets,_to_boundary);
 
if (depth == 0)
-   return (err);
+   return -EIO;
 
partial = ext2_get_branch(inode, depth, offsets, chain, );
/* Simplest case - block found, no allocation needed */
@@ -761,7 +761,6 @@ static int ext2_get_blocks(struct inode *inode,
ext2_splice_branch(inode, iblock, partial, indirect_blks, count);
mutex_unlock(>truncate_mutex);
 got_it:
-   *bno = le32_to_cpu(chain[depth-1].key);
if (count > blocks_to_boundary)
*boundary = true;
err = count;
@@ -772,6 +771,8 @@ static int ext2_get_blocks(struct inode *inode,
brelse(partial->bh);
partial--;
}
+   if (err > 0)
+   *bno = le32_to_cpu(chain[depth-1].key);
return err;
 }
 
-- 
2.9.0