@@ -75,6 +75,12 @@ int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len)
7575 struct btrfs_key key ;
7676 BTRFS_PATH_AUTO_FREE (path );
7777
78+ if (unlikely (!root )) {
79+ btrfs_err (fs_info ,
80+ "missing extent root for extent at bytenr %llu" , start );
81+ return - EUCLEAN ;
82+ }
83+
7884 path = btrfs_alloc_path ();
7985 if (!path )
8086 return - ENOMEM ;
@@ -131,6 +137,12 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
131137 key .offset = offset ;
132138
133139 extent_root = btrfs_extent_root (fs_info , bytenr );
140+ if (unlikely (!extent_root )) {
141+ btrfs_err (fs_info ,
142+ "missing extent root for extent at bytenr %llu" , bytenr );
143+ return - EUCLEAN ;
144+ }
145+
134146 ret = btrfs_search_slot (NULL , extent_root , & key , path , 0 , 0 );
135147 if (ret < 0 )
136148 return ret ;
@@ -436,6 +448,12 @@ static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
436448 int recow ;
437449 int ret ;
438450
451+ if (unlikely (!root )) {
452+ btrfs_err (trans -> fs_info ,
453+ "missing extent root for extent at bytenr %llu" , bytenr );
454+ return - EUCLEAN ;
455+ }
456+
439457 key .objectid = bytenr ;
440458 if (parent ) {
441459 key .type = BTRFS_SHARED_DATA_REF_KEY ;
@@ -510,6 +528,12 @@ static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
510528 u32 num_refs ;
511529 int ret ;
512530
531+ if (unlikely (!root )) {
532+ btrfs_err (trans -> fs_info ,
533+ "missing extent root for extent at bytenr %llu" , bytenr );
534+ return - EUCLEAN ;
535+ }
536+
513537 key .objectid = bytenr ;
514538 if (node -> parent ) {
515539 key .type = BTRFS_SHARED_DATA_REF_KEY ;
@@ -668,6 +692,12 @@ static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
668692 struct btrfs_key key ;
669693 int ret ;
670694
695+ if (unlikely (!root )) {
696+ btrfs_err (trans -> fs_info ,
697+ "missing extent root for extent at bytenr %llu" , bytenr );
698+ return - EUCLEAN ;
699+ }
700+
671701 key .objectid = bytenr ;
672702 if (parent ) {
673703 key .type = BTRFS_SHARED_BLOCK_REF_KEY ;
@@ -692,6 +722,12 @@ static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
692722 struct btrfs_key key ;
693723 int ret ;
694724
725+ if (unlikely (!root )) {
726+ btrfs_err (trans -> fs_info ,
727+ "missing extent root for extent at bytenr %llu" , bytenr );
728+ return - EUCLEAN ;
729+ }
730+
695731 key .objectid = bytenr ;
696732 if (node -> parent ) {
697733 key .type = BTRFS_SHARED_BLOCK_REF_KEY ;
@@ -782,6 +818,12 @@ int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
782818 bool skinny_metadata = btrfs_fs_incompat (fs_info , SKINNY_METADATA );
783819 int needed ;
784820
821+ if (unlikely (!root )) {
822+ btrfs_err (fs_info ,
823+ "missing extent root for extent at bytenr %llu" , bytenr );
824+ return - EUCLEAN ;
825+ }
826+
785827 key .objectid = bytenr ;
786828 key .type = BTRFS_EXTENT_ITEM_KEY ;
787829 key .offset = num_bytes ;
@@ -1680,6 +1722,12 @@ static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
16801722 }
16811723
16821724 root = btrfs_extent_root (fs_info , key .objectid );
1725+ if (unlikely (!root )) {
1726+ btrfs_err (fs_info ,
1727+ "missing extent root for extent at bytenr %llu" ,
1728+ key .objectid );
1729+ return - EUCLEAN ;
1730+ }
16831731again :
16841732 ret = btrfs_search_slot (trans , root , & key , path , 0 , 1 );
16851733 if (ret < 0 ) {
@@ -2379,6 +2427,12 @@ static noinline int check_committed_ref(struct btrfs_inode *inode,
23792427 int type ;
23802428 int ret ;
23812429
2430+ if (unlikely (!extent_root )) {
2431+ btrfs_err (fs_info ,
2432+ "missing extent root for extent at bytenr %llu" , bytenr );
2433+ return - EUCLEAN ;
2434+ }
2435+
23822436 key .objectid = bytenr ;
23832437 key .type = BTRFS_EXTENT_ITEM_KEY ;
23842438 key .offset = (u64 )- 1 ;
@@ -3222,7 +3276,11 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
32223276 u64 delayed_ref_root = href -> owning_root ;
32233277
32243278 extent_root = btrfs_extent_root (info , bytenr );
3225- ASSERT (extent_root );
3279+ if (unlikely (!extent_root )) {
3280+ btrfs_err (info ,
3281+ "missing extent root for extent at bytenr %llu" , bytenr );
3282+ return - EUCLEAN ;
3283+ }
32263284
32273285 path = btrfs_alloc_path ();
32283286 if (!path )
@@ -4939,11 +4997,18 @@ static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
49394997 size += btrfs_extent_inline_ref_size (BTRFS_EXTENT_OWNER_REF_KEY );
49404998 size += btrfs_extent_inline_ref_size (type );
49414999
5000+ extent_root = btrfs_extent_root (fs_info , ins -> objectid );
5001+ if (unlikely (!extent_root )) {
5002+ btrfs_err (fs_info ,
5003+ "missing extent root for extent at bytenr %llu" ,
5004+ ins -> objectid );
5005+ return - EUCLEAN ;
5006+ }
5007+
49425008 path = btrfs_alloc_path ();
49435009 if (!path )
49445010 return - ENOMEM ;
49455011
4946- extent_root = btrfs_extent_root (fs_info , ins -> objectid );
49475012 ret = btrfs_insert_empty_item (trans , extent_root , path , ins , size );
49485013 if (ret ) {
49495014 btrfs_free_path (path );
@@ -5019,11 +5084,18 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
50195084 size += sizeof (* block_info );
50205085 }
50215086
5087+ extent_root = btrfs_extent_root (fs_info , extent_key .objectid );
5088+ if (unlikely (!extent_root )) {
5089+ btrfs_err (fs_info ,
5090+ "missing extent root for extent at bytenr %llu" ,
5091+ extent_key .objectid );
5092+ return - EUCLEAN ;
5093+ }
5094+
50225095 path = btrfs_alloc_path ();
50235096 if (!path )
50245097 return - ENOMEM ;
50255098
5026- extent_root = btrfs_extent_root (fs_info , extent_key .objectid );
50275099 ret = btrfs_insert_empty_item (trans , extent_root , path , & extent_key ,
50285100 size );
50295101 if (ret ) {
0 commit comments