@@ -7606,7 +7606,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7606
7606
};
7607
7607
struct btrfs_root * root = inode -> root ;
7608
7608
struct btrfs_fs_info * fs_info = root -> fs_info ;
7609
- struct btrfs_block_rsv * rsv ;
7609
+ struct btrfs_block_rsv rsv ;
7610
7610
int ret ;
7611
7611
struct btrfs_trans_handle * trans ;
7612
7612
u64 mask = fs_info -> sectorsize - 1 ;
@@ -7648,11 +7648,9 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7648
7648
* 2) fs_info->trans_block_rsv - this will have 1 items worth left for
7649
7649
* updating the inode.
7650
7650
*/
7651
- rsv = btrfs_alloc_block_rsv (fs_info , BTRFS_BLOCK_RSV_TEMP );
7652
- if (!rsv )
7653
- return - ENOMEM ;
7654
- rsv -> size = min_size ;
7655
- rsv -> failfast = true;
7651
+ btrfs_init_metadata_block_rsv (fs_info , & rsv , BTRFS_BLOCK_RSV_TEMP );
7652
+ rsv .size = min_size ;
7653
+ rsv .failfast = true;
7656
7654
7657
7655
/*
7658
7656
* 1 for the truncate slack space
@@ -7665,7 +7663,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7665
7663
}
7666
7664
7667
7665
/* Migrate the slack space for the truncate to our reserve */
7668
- ret = btrfs_block_rsv_migrate (& fs_info -> trans_block_rsv , rsv ,
7666
+ ret = btrfs_block_rsv_migrate (& fs_info -> trans_block_rsv , & rsv ,
7669
7667
min_size , false);
7670
7668
/*
7671
7669
* We have reserved 2 metadata units when we started the transaction and
@@ -7677,7 +7675,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7677
7675
goto out ;
7678
7676
}
7679
7677
7680
- trans -> block_rsv = rsv ;
7678
+ trans -> block_rsv = & rsv ;
7681
7679
7682
7680
while (1 ) {
7683
7681
struct extent_state * cached_state = NULL ;
@@ -7720,9 +7718,9 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7720
7718
break ;
7721
7719
}
7722
7720
7723
- btrfs_block_rsv_release (fs_info , rsv , -1 , NULL );
7721
+ btrfs_block_rsv_release (fs_info , & rsv , -1 , NULL );
7724
7722
ret = btrfs_block_rsv_migrate (& fs_info -> trans_block_rsv ,
7725
- rsv , min_size , false);
7723
+ & rsv , min_size , false);
7726
7724
/*
7727
7725
* We have reserved 2 metadata units when we started the
7728
7726
* transaction and min_size matches 1 unit, so this should never
@@ -7731,7 +7729,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7731
7729
if (WARN_ON (ret ))
7732
7730
break ;
7733
7731
7734
- trans -> block_rsv = rsv ;
7732
+ trans -> block_rsv = & rsv ;
7735
7733
}
7736
7734
7737
7735
/*
@@ -7770,7 +7768,7 @@ static int btrfs_truncate(struct btrfs_inode *inode, bool skip_writeback)
7770
7768
btrfs_btree_balance_dirty (fs_info );
7771
7769
}
7772
7770
out :
7773
- btrfs_free_block_rsv (fs_info , rsv );
7771
+ btrfs_block_rsv_release (fs_info , & rsv , ( u64 ) - 1 , NULL );
7774
7772
/*
7775
7773
* So if we truncate and then write and fsync we normally would just
7776
7774
* write the extents that changed, which is a problem if we need to
0 commit comments