Commit 1dac8db8 authored by Gladyshev Ilya's avatar Gladyshev Ilya Committed by David Sterba
Browse files

btrfs: don't generate any code from ASSERT() in release builds



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: default avatarGladyshev Ilya <foxido@foxido.dev>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent dd57c78a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -299,7 +299,7 @@ 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,
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;