On Fri, Jan 17, 2020 at 05:50:19PM +0100, David Sterba wrote: > 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? Co-developed-by would be fine, thanks. > > > 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. Oops, you're right, I misread the patch. -- Josh