Commit 2eec5f00 authored by Anders Roxell's avatar Anders Roxell Committed by David Sterba
Browse files

btrfs: let the assertion expression compile in all configs



A compiler warning (in a patch in development) pointed to a variable
that was used only inside and ASSERT:

  u64 root_objectid = root->root_key.objectid;
  ASSERT(root_objectid == ...);

  fs/btrfs/relocation.c: In function ‘insert_dirty_subv’:
  fs/btrfs/relocation.c:2138:6: warning: unused variable ‘root_objectid’ [-Wunused-variable]
    u64 root_objectid = root->root_key.objectid;
	^~~~~~~~~~~~~

When CONFIG_BRTFS_ASSERT isn't enabled, variable root_objectid isn't used.

Rework the assertion helper by adding a runtime check instead of the
'#ifdef CONFIG_BTRFS_ASSERT #else ...", so the compiler sees the
condition being passed into an inline function after preprocessing.

Signed-off-by: default avatarAnders Roxell <anders.roxell@linaro.org>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
[ update changelog ]
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 766ece54
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -3518,21 +3518,18 @@ do { \
	rcu_read_unlock();					\
} while (0)

#ifdef CONFIG_BTRFS_ASSERT

__cold
static inline void assfail(const char *expr, const char *file, int line)
{
	if (IS_ENABLED(CONFIG_BTRFS_ASSERT)) {
		pr_err("assertion failed: %s, file: %s, line: %d\n",
		       expr, file, line);
		BUG();
	}
}

#define ASSERT(expr)	\
	(likely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__))
#else
#define ASSERT(expr)	((void)0)
#endif

/*
 * Use that for functions that are conditionally exported for sanity tests but