@@ -4604,6 +4604,28 @@ int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, u64 start,
4604
4604
return ret ;
4605
4605
}
4606
4606
4607
+ static int alloc_reserved_extent (struct btrfs_trans_handle * trans , u64 bytenr ,
4608
+ u64 num_bytes )
4609
+ {
4610
+ struct btrfs_fs_info * fs_info = trans -> fs_info ;
4611
+ int ret ;
4612
+
4613
+ ret = remove_from_free_space_tree (trans , bytenr , num_bytes );
4614
+ if (ret )
4615
+ return ret ;
4616
+
4617
+ ret = btrfs_update_block_group (trans , bytenr , num_bytes , true);
4618
+ if (ret ) {
4619
+ ASSERT (!ret );
4620
+ btrfs_err (fs_info , "update block group failed for %llu %llu" ,
4621
+ bytenr , num_bytes );
4622
+ return ret ;
4623
+ }
4624
+
4625
+ trace_btrfs_reserved_extent_alloc (fs_info , bytenr , num_bytes );
4626
+ return 0 ;
4627
+ }
4628
+
4607
4629
static int alloc_reserved_file_extent (struct btrfs_trans_handle * trans ,
4608
4630
u64 parent , u64 root_objectid ,
4609
4631
u64 flags , u64 owner , u64 offset ,
@@ -4664,18 +4686,7 @@ static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4664
4686
btrfs_mark_buffer_dirty (path -> nodes [0 ]);
4665
4687
btrfs_free_path (path );
4666
4688
4667
- ret = remove_from_free_space_tree (trans , ins -> objectid , ins -> offset );
4668
- if (ret )
4669
- return ret ;
4670
-
4671
- ret = btrfs_update_block_group (trans , ins -> objectid , ins -> offset , true);
4672
- if (ret ) { /* -ENOENT, logic error */
4673
- btrfs_err (fs_info , "update block group failed for %llu %llu" ,
4674
- ins -> objectid , ins -> offset );
4675
- BUG ();
4676
- }
4677
- trace_btrfs_reserved_extent_alloc (fs_info , ins -> objectid , ins -> offset );
4678
- return ret ;
4689
+ return alloc_reserved_extent (trans , ins -> objectid , ins -> offset );
4679
4690
}
4680
4691
4681
4692
static int alloc_reserved_tree_block (struct btrfs_trans_handle * trans ,
@@ -4693,7 +4704,6 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4693
4704
struct extent_buffer * leaf ;
4694
4705
struct btrfs_delayed_tree_ref * ref ;
4695
4706
u32 size = sizeof (* extent_item ) + sizeof (* iref );
4696
- u64 num_bytes ;
4697
4707
u64 flags = extent_op -> flags_to_set ;
4698
4708
bool skinny_metadata = btrfs_fs_incompat (fs_info , SKINNY_METADATA );
4699
4709
@@ -4703,12 +4713,10 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4703
4713
if (skinny_metadata ) {
4704
4714
extent_key .offset = ref -> level ;
4705
4715
extent_key .type = BTRFS_METADATA_ITEM_KEY ;
4706
- num_bytes = fs_info -> nodesize ;
4707
4716
} else {
4708
4717
extent_key .offset = node -> num_bytes ;
4709
4718
extent_key .type = BTRFS_EXTENT_ITEM_KEY ;
4710
4719
size += sizeof (* block_info );
4711
- num_bytes = node -> num_bytes ;
4712
4720
}
4713
4721
4714
4722
path = btrfs_alloc_path ();
@@ -4753,23 +4761,7 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4753
4761
btrfs_mark_buffer_dirty (leaf );
4754
4762
btrfs_free_path (path );
4755
4763
4756
- ret = remove_from_free_space_tree (trans , extent_key .objectid ,
4757
- num_bytes );
4758
- if (ret )
4759
- return ret ;
4760
-
4761
- ret = btrfs_update_block_group (trans , extent_key .objectid ,
4762
- fs_info -> nodesize , true);
4763
- if (ret ) { /* -ENOENT, logic error */
4764
- ASSERT (!ret );
4765
- btrfs_err (fs_info , "update block group failed for %llu %llu" ,
4766
- extent_key .objectid , extent_key .offset );
4767
- return ret ;
4768
- }
4769
-
4770
- trace_btrfs_reserved_extent_alloc (fs_info , extent_key .objectid ,
4771
- fs_info -> nodesize );
4772
- return ret ;
4764
+ return alloc_reserved_extent (trans , node -> bytenr , fs_info -> nodesize );
4773
4765
}
4774
4766
4775
4767
int btrfs_alloc_reserved_file_extent (struct btrfs_trans_handle * trans ,
0 commit comments