ext4: fix error return from ext4_ext_handle_uninitialized_extents()
PATCH 1/1 ext4: fix error return from ext4_ext_handle_uninitialized_extents()
Commit 3779473246 breaks the return of error codes from ext4_ext_handle_uninitialized_extents() in ext4_ext_map_blocks(). A portion of the patch assigns that function's signed integer return value to an unsigned int. Consequently, negatively valued error codes are lost and can be treated as a bogus allocated block count.
--- fs/ext4/extents.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
fs/ext4/extents.c +6 -2
@@ -4128,7 +4128,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,struct ext4_extent newex, *ex, *ex2;struct ext4_sb_info *sbi =EXT4_SB (inode->i_sb);ext4_fsblk_t newblock =0 ; -int free_on_err =0 , err =0 , depth; +int free_on_err =0 , err =0 , depth, ret;unsigned int allocated =0 , offset =0 ;unsigned int allocated_clusters =0 ;struct ext4_allocation_request ar;
@@ -4189,9 +4189,13 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,if (!ext4_ext_is_uninitialized (ex)) goto out; - allocated =ext4_ext_handle_uninitialized_extents ( + ret =ext4_ext_handle_uninitialized_extents ( handle, inode, map, path, flags, allocated, newblock); +if (ret <0 ) + err = ret; +else + allocated = ret; goto out3; } }
Signature · 1 line
1.8.3.2
Quoted 7 lines · Eric Whitney
Commit 3779473246 breaks the return of error codes from
ext4_ext_handle_uninitialized_extents()inext4_ext_map_blocks(). A portion of the patch assigns that function's signed integer return value to an unsigned int. Consequently, negatively valued error codes are lost and can be treated as a bogus allocated block count.Signed-off-by Eric Whitney <[email protected]>
Thanks, applied.
- Ted