On Fri, Jan 17, 2020 at 09:28:05AM -0600, Josh Poimboeuf wrote: > 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? So Co-developed-by: or "based on patch from Josh", or something else? > > 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? I don't understand what you mean, the helper is not called directly (and build does not fail with or without CONFIG_BTRFS_ASSERT), but always as ASSERT, so I don't see what needs to be updated.