On Fri, Jan 10, 2020 at 08:46:22PM +0100, David Sterba wrote: > On Tue, Dec 17, 2019 at 04:29:54PM +0100, David Sterba wrote: > > Separating the definitions by #ifdef looks ok, I'd rather do separate > > definitions of ASSERT too, to avoid the ternary operator. I'll send the > > patch. > > Subject: [PATCH] btrfs: separate definition of assertion failure handlers > > There's a report where objtool detects unreachable instructions, eg.: > > fs/btrfs/ctree.o: warning: objtool: btrfs_search_slot()+0x2d4: unreachable instruction > > This seems to be a false positive due to compiler version. The cause is > in the ASSERT macro implementation that does the conditional check as > IS_DEFINED(CONFIG_BTRFS_ASSERT) and not an #ifdef. > > To avoid that, use the ifdefs directly. > > CC: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Signed-off-by: David Sterba <dsterba@xxxxxxxx> > --- > fs/btrfs/ctree.h | 20 ++++++++++++-------- > 1 file changed, 12 insertions(+), 8 deletions(-) This looks quite similar to my patch, would you mind giving me attribution? > diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h > index 569931dd0ce5..f90b82050d2d 100644 > --- a/fs/btrfs/ctree.h > +++ b/fs/btrfs/ctree.h > @@ -3157,17 +3157,21 @@ do { \ > rcu_read_unlock(); \ > } while (0) > > -__cold > -static inline void assfail(const char *expr, const char *file, int line) > +#ifdef CONFIG_BTRFS_ASSERT > +__cold __noreturn > +static inline void assertfail(const char *expr, const char *file, int line) > { > - if (IS_ENABLED(CONFIG_BTRFS_ASSERT)) { > - pr_err("assertion failed: %s, in %s:%d\n", expr, file, line); > - BUG(); > - } > + pr_err("assertion failed: %s, in %s:%d\n", expr, file, line); > + BUG(); assertfail() is definitely better than "assfail", but shouldn't you update the callers so it doesn't break the build? -- Josh