@@ -987,8 +987,7 @@ static int __btrfs_convert_file_extent(struct btrfs_trans_handle *trans,
987987 int ret ;
988988 struct btrfs_fs_info * info = root -> fs_info ;
989989 struct btrfs_root * extent_root = btrfs_extent_root (info , disk_bytenr );
990- struct extent_buffer * leaf ;
991- struct btrfs_file_extent_item * fi ;
990+ struct btrfs_file_extent_item stack_fi = { 0 };
992991 struct btrfs_key ins_key ;
993992 struct btrfs_path * path ;
994993 struct btrfs_extent_item * ei ;
@@ -1009,9 +1008,11 @@ static int __btrfs_convert_file_extent(struct btrfs_trans_handle *trans,
10091008 * hole. And hole extent has no size limit, no need to loop.
10101009 */
10111010 if (disk_bytenr == 0 ) {
1011+ btrfs_set_stack_file_extent_type (& stack_fi , BTRFS_FILE_EXTENT_REG );
1012+ btrfs_set_stack_file_extent_num_bytes (& stack_fi , num_bytes );
1013+ btrfs_set_stack_file_extent_ram_bytes (& stack_fi , num_bytes );
10121014 ret = btrfs_insert_file_extent (trans , root , objectid ,
1013- file_pos , disk_bytenr ,
1014- num_bytes , num_bytes );
1015+ file_pos , & stack_fi );
10151016 return ret ;
10161017 }
10171018 num_bytes = min_t (u64 , num_bytes , BTRFS_MAX_EXTENT_SIZE );
@@ -1052,6 +1053,8 @@ static int __btrfs_convert_file_extent(struct btrfs_trans_handle *trans,
10521053 ret = btrfs_insert_empty_item (trans , extent_root , path ,
10531054 & ins_key , sizeof (* ei ));
10541055 if (ret == 0 ) {
1056+ struct extent_buffer * leaf ;
1057+
10551058 leaf = path -> nodes [0 ];
10561059 ei = btrfs_item_ptr (leaf , path -> slots [0 ],
10571060 struct btrfs_extent_item );
@@ -1083,26 +1086,18 @@ static int __btrfs_convert_file_extent(struct btrfs_trans_handle *trans,
10831086 ins_key .objectid = objectid ;
10841087 ins_key .type = BTRFS_EXTENT_DATA_KEY ;
10851088 ins_key .offset = file_pos ;
1086- ret = btrfs_insert_empty_item (trans , root , path , & ins_key , sizeof (* fi ));
1089+ btrfs_set_stack_file_extent_type (& stack_fi , BTRFS_FILE_EXTENT_REG );
1090+ btrfs_set_stack_file_extent_disk_bytenr (& stack_fi , extent_bytenr );
1091+ btrfs_set_stack_file_extent_disk_num_bytes (& stack_fi , extent_num_bytes );
1092+ btrfs_set_stack_file_extent_offset (& stack_fi , extent_offset );
1093+ btrfs_set_stack_file_extent_num_bytes (& stack_fi , num_bytes );
1094+ btrfs_set_stack_file_extent_ram_bytes (& stack_fi , extent_num_bytes );
1095+ ret = btrfs_insert_file_extent (trans , root , objectid , file_pos , & stack_fi );
10871096 if (ret )
10881097 goto fail ;
1089- leaf = path -> nodes [0 ];
1090- fi = btrfs_item_ptr (leaf , path -> slots [0 ], struct btrfs_file_extent_item );
1091- btrfs_set_file_extent_generation (leaf , fi , trans -> transid );
1092- btrfs_set_file_extent_type (leaf , fi , BTRFS_FILE_EXTENT_REG );
1093- btrfs_set_file_extent_disk_bytenr (leaf , fi , extent_bytenr );
1094- btrfs_set_file_extent_disk_num_bytes (leaf , fi , extent_num_bytes );
1095- btrfs_set_file_extent_offset (leaf , fi , extent_offset );
1096- btrfs_set_file_extent_num_bytes (leaf , fi , num_bytes );
1097- btrfs_set_file_extent_ram_bytes (leaf , fi , extent_num_bytes );
1098- btrfs_set_file_extent_compression (leaf , fi , 0 );
1099- btrfs_set_file_extent_encryption (leaf , fi , 0 );
1100- btrfs_set_file_extent_other_encoding (leaf , fi , 0 );
1101- btrfs_mark_buffer_dirty (leaf );
11021098
11031099 nbytes = btrfs_stack_inode_nbytes (inode ) + num_bytes ;
11041100 btrfs_set_stack_inode_nbytes (inode , nbytes );
1105- btrfs_release_path (path );
11061101
11071102 ret = btrfs_inc_extent_ref (trans , extent_bytenr , extent_num_bytes ,
11081103 0 , root -> root_key .objectid , objectid ,
0 commit comments