btrfs: avoid linker error in btrfs_find_create_tree_block()
authorMark Harmstone <maharmstone@fb.com>
Thu, 6 Mar 2025 10:58:46 +0000 (10:58 +0000)
committerDavid Sterba <dsterba@suse.com>
Tue, 18 Mar 2025 19:35:50 +0000 (20:35 +0100)
The inline function btrfs_is_testing() is hardcoded to return 0 if
CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set. Currently we're relying on
the compiler optimizing out the call to alloc_test_extent_buffer() in
btrfs_find_create_tree_block(), as it's not been defined (it's behind an
 #ifdef).

Add a stub version of alloc_test_extent_buffer() to avoid linker errors
on non-standard optimization levels. This problem was seen on GCC 14
with -O0 and is helps to see symbols that would be otherwise optimized
out.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Mark Harmstone <maharmstone@fb.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 822317364065205d6435bdb7121acc6ec70775f6..3436dae04bd7c35cbb1edccfb23824c3a6ad5356 100644 (file)
@@ -3006,10 +3006,10 @@ struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
        return eb;
 }
 
-#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
 struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
                                        u64 start)
 {
+#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
        struct extent_buffer *eb, *exists = NULL;
        int ret;
 
@@ -3045,8 +3045,11 @@ again:
 free_eb:
        btrfs_release_extent_buffer(eb);
        return exists;
-}
+#else
+       /* Stub to avoid linker error when compiled with optimizations turned off. */
+       return NULL;
 #endif
+}
 
 static struct extent_buffer *grab_extent_buffer(struct btrfs_fs_info *fs_info,
                                                struct folio *folio)