@@ -2637,7 +2637,7 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
2637
2637
struct ext4_inode * raw_inode , handle_t * handle )
2638
2638
{
2639
2639
struct ext4_xattr_ibody_header * header ;
2640
- struct buffer_head * bh = NULL ;
2640
+ struct buffer_head * bh ;
2641
2641
struct ext4_sb_info * sbi = EXT4_SB (inode -> i_sb );
2642
2642
static unsigned int mnt_count ;
2643
2643
size_t min_offs ;
@@ -2651,7 +2651,7 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
2651
2651
retry :
2652
2652
isize_diff = new_extra_isize - EXT4_I (inode )-> i_extra_isize ;
2653
2653
if (EXT4_I (inode )-> i_extra_isize >= new_extra_isize )
2654
- goto out ;
2654
+ return 0 ;
2655
2655
2656
2656
header = IHDR (inode , raw_inode );
2657
2657
@@ -2686,18 +2686,19 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
2686
2686
EXT4_ERROR_INODE (inode , "bad block %llu" ,
2687
2687
EXT4_I (inode )-> i_file_acl );
2688
2688
error = - EFSCORRUPTED ;
2689
+ brelse (bh );
2689
2690
goto cleanup ;
2690
2691
}
2691
2692
base = BHDR (bh );
2692
2693
end = bh -> b_data + bh -> b_size ;
2693
2694
min_offs = end - base ;
2694
2695
bfree = ext4_xattr_free_space (BFIRST (bh ), & min_offs , base ,
2695
2696
NULL );
2697
+ brelse (bh );
2696
2698
if (bfree + ifree < isize_diff ) {
2697
2699
if (!tried_min_extra_isize && s_min_extra_isize ) {
2698
2700
tried_min_extra_isize ++ ;
2699
2701
new_extra_isize = s_min_extra_isize ;
2700
- brelse (bh );
2701
2702
goto retry ;
2702
2703
}
2703
2704
error = - ENOSPC ;
@@ -2715,7 +2716,6 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
2715
2716
s_min_extra_isize ) {
2716
2717
tried_min_extra_isize ++ ;
2717
2718
new_extra_isize = s_min_extra_isize ;
2718
- brelse (bh );
2719
2719
goto retry ;
2720
2720
}
2721
2721
goto cleanup ;
@@ -2727,13 +2727,9 @@ int ext4_expand_extra_isize_ea(struct inode *inode, int new_extra_isize,
2727
2727
EXT4_GOOD_OLD_INODE_SIZE + new_extra_isize ,
2728
2728
(void * )header , total_ino );
2729
2729
EXT4_I (inode )-> i_extra_isize = new_extra_isize ;
2730
- brelse (bh );
2731
- out :
2732
- return 0 ;
2733
2730
2734
2731
cleanup :
2735
- brelse (bh );
2736
- if (mnt_count != le16_to_cpu (sbi -> s_es -> s_mnt_count )) {
2732
+ if (error && (mnt_count != le16_to_cpu (sbi -> s_es -> s_mnt_count ))) {
2737
2733
ext4_warning (inode -> i_sb , "Unable to expand inode %lu. Delete some EAs or run e2fsck." ,
2738
2734
inode -> i_ino );
2739
2735
mnt_count = le16_to_cpu (sbi -> s_es -> s_mnt_count );
0 commit comments