]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: don't generate any code from ASSERT() in release builds
authorGladyshev Ilya <foxido@foxido.dev>
Sun, 2 Nov 2025 07:38:52 +0000 (10:38 +0300)
committerDavid Sterba <dsterba@suse.com>
Mon, 24 Nov 2025 21:42:22 +0000 (22:42 +0100)
The current definition of ASSERT(cond) as (void)(cond) is redundant,
since these checks have no side effects and don't affect code logic.

However, some checks contain READ_ONCE() or other compiler-unfriendly
constructs. For example, ASSERT(list_empty) in btrfs_add_dealloc_inode()
was compiled to a redundant mov instruction due to this issue.

Define ASSERT as BUILD_BUG_ON_INVALID for !CONFIG_BTRFS_ASSERT builds
which uses sizeof(cond) trick.  Also mark full_page_sectors_uptodate()
as __maybe_unused to suppress "unneeded declaration" warning (it's
needed in compile time)

Signed-off-by: Gladyshev Ilya <foxido@foxido.dev>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/messages.h
fs/btrfs/raid56.c

index 4416c165644fa40521ef67cd13d03ea5664f44a7..d8c0bd17dcdaf018ac4f444618b50fd53068cf86 100644 (file)
@@ -168,7 +168,8 @@ do {                                                                                \
 #endif
 
 #else
-#define ASSERT(cond, args...)                  (void)(cond)
+/* Compile check the @cond expression but don't generate any code. */
+#define ASSERT(cond, args...)                  BUILD_BUG_ON_INVALID(cond)
 #endif
 
 #ifdef CONFIG_BTRFS_DEBUG
index 0135dceb7baaa0908b3c238dc7c787e93371213a..302f20d8c33518dc6367fe82bb719000de1cdd99 100644 (file)
@@ -299,8 +299,8 @@ static int rbio_bucket(struct btrfs_raid_bio *rbio)
        return hash_64(num >> 16, BTRFS_STRIPE_HASH_TABLE_BITS);
 }
 
-static bool full_page_sectors_uptodate(struct btrfs_raid_bio *rbio,
-                                      unsigned int page_nr)
+static __maybe_unused bool full_page_sectors_uptodate(struct btrfs_raid_bio *rbio,
+                                                     unsigned int page_nr)
 {
        const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
        const u32 sectors_per_page = PAGE_SIZE / sectorsize;