Re: [PATCH] xfs: make fatal assert failures conditional in debug mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 04, 2017 at 01:58:32PM -0500, Eric Sandeen wrote:
> On 5/4/17 1:29 PM, Brian Foster wrote:
> > XFS currently supports two debug modes: XFS_WARN enables assert
> > failure warnings and XFS_DEBUG converts assert failures to fatal
> > errors (via BUG()) and enables additional runtime debug code.
> > 
> > While the behavior to BUG the kernel on assert failure is useful in
> > certain test scenarios, it is also useful for development/debug to
> > enable debug mode code without having to crash the kernel on an
> > assert failure.
> > 
> > To provide this additional flexibility, update XFS debug mode to not
> > BUG() the kernel by default and create a new XFS kernel
> > configuration option to enable fatal assert failures when debug mode
> > is enabled. To provide backwards compatibility with current
> > behavior, enable the fatal asserts option by default when debug mode
> > is enabled.
> > 
> > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>
> > ---
> > 
> > Hi all,
> > 
> > This tweaks the rfc version based on feedback from Christoph and
> > Darrick. The config option is renamed to minimize confusion and the
> > logic is basically flipped to disable BUG() behavior by default in
> > XFS_DEBUG mode and have the new config option turn it on. This option is
> > dependent on DEBUG mode because I don't believe there is a compelling
> > use case for XFS_WARN mode with fatal asserts and I'd rather not
> > unnecessarily increase the configuration matrix.
> > 
> > Note that the new config option is set 'default y' simply to provide
> > backwards compatibility with current behavior (so users expecting DEBUG
> > mode kernels to BUG() will continue to see that behavior without
> > requiring further config modifications). Thoughts, reviews, flames
> > appreciated.
> > 
> > Brian
> > 
> > v1:
> > - Use a new config option rather than reuse XFS_WARN.
> > - Disable BUG() in DEBUG mode by default and flip the logic of the new
> >   config option.
> > rfc: http://www.spinics.net/lists/linux-xfs/msg06390.html
> > 
> >  fs/xfs/Kconfig     |  8 ++++++++
> >  fs/xfs/xfs.h       |  4 ++++
> >  fs/xfs/xfs_linux.h | 32 +++++++++++++++++++-------------
> >  3 files changed, 31 insertions(+), 13 deletions(-)
> > 
> > diff --git a/fs/xfs/Kconfig b/fs/xfs/Kconfig
> > index 35faf12..ded25f8 100644
> > --- a/fs/xfs/Kconfig
> > +++ b/fs/xfs/Kconfig
> > @@ -96,3 +96,11 @@ config XFS_DEBUG
> >  	  not useful unless you are debugging a particular problem.
> >  
> >  	  Say N unless you are an XFS developer, or you play one on TV.
> > +
> > +config XFS_ASSERT_FATAL
> > +	bool "XFS fatal asserts"
> > +	default y
> > +	depends on XFS_FS && XFS_DEBUG
> > +	help
> > +	  Say Y here to convert DEBUG mode ASSERT failures into fatal errors
> > +	  that BUG() the kernel. Otherwise, ASSERT failures result in warnings.
> 
> nitpick, and don't care much either way, but since Y is the default, it's
> a little odd to restate "say Y."  The "Otherwise" isn't crystal clear IMHO.
> 

I think the help text should be independent from the default setting. At
least a couple Kconfig options under fs/Kconfig have "Say Y .... Say N
... If unsure, say ..." with a default of y. (I don't think we really
need "If unsure ..." here...).

> Maybe:
> 
> "The default XFS_DEBUG mode is to BUG() on ASSERT failures.
>  If you say N here, ASSERT failures result in warnings.
> 
> Or:
> 
> "Say Y here to convert DEBUG mode ASSERT failures into fatal errors
>  that BUG() the kernel.
>  If you say N, these ASSERTs will be converted into warnings."
> 
> I'd just like to see "N" behavior /explicitly/ stated (with the text "N") :)
> 

That sounds reasonable. After catching up on some of the chat on irc,
how about the following to avoid using "convert?"

"Say Y here to cause DEBUG mode assert failures to result in fatal
errors that BUG() the kernel. If you say N, assert failures result in
warnings."

Brian

> -Eric
> 
> > diff --git a/fs/xfs/xfs.h b/fs/xfs/xfs.h
> > index a742c47..80cd0fd 100644
> > --- a/fs/xfs/xfs.h
> > +++ b/fs/xfs/xfs.h
> > @@ -24,6 +24,10 @@
> >  #define XFS_BUF_LOCK_TRACKING 1
> >  #endif
> >  
> > +#ifdef CONFIG_XFS_ASSERT_FATAL
> > +#define XFS_ASSERT_FATAL 1
> > +#endif
> > +
> >  #ifdef CONFIG_XFS_WARN
> >  #define XFS_WARN 1
> >  #endif
> > diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
> > index 044fb0e..36c3eab 100644
> > --- a/fs/xfs/xfs_linux.h
> > +++ b/fs/xfs/xfs_linux.h
> > @@ -245,37 +245,43 @@ static inline __uint64_t howmany_64(__uint64_t x, __uint32_t y)
> >  	return x;
> >  }
> >  
> > +/*
> > + * ASSERT() definitions
> > + */
> >  #define ASSERT_ALWAYS(expr)	\
> >  	(likely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__))
> >  
> > -#ifdef DEBUG
> > +#if defined(DEBUG) && defined(XFS_ASSERT_FATAL)
> > +
> >  #define ASSERT(expr)	\
> >  	(likely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__))
> >  
> > -#ifndef STATIC
> > -# define STATIC noinline
> > -#endif
> > -
> > -#else	/* !DEBUG */
> > -
> > -#ifdef XFS_WARN
> > +#elif defined(DEBUG) || defined(XFS_WARN)
> >  
> >  #define ASSERT(expr)	\
> >  	(likely(expr) ? (void)0 : asswarn(#expr, __FILE__, __LINE__))
> >  
> > -#ifndef STATIC
> > -# define STATIC static noinline
> > +#else
> > +
> > +#define ASSERT(expr)	((void)0)
> > +
> >  #endif
> >  
> > -#else	/* !DEBUG && !XFS_WARN */
> > +/*
> > + * STATIC definitions
> > + */
> > +#ifdef DEBUG
> > +
> > +#ifndef STATIC
> > +# define STATIC noinline
> > +#endif
> >  
> > -#define ASSERT(expr)	((void)0)
> > +#else	/* !DEBUG */
> >  
> >  #ifndef STATIC
> >  # define STATIC static noinline
> >  #endif
> >  
> > -#endif /* XFS_WARN */
> >  #endif /* DEBUG */
> >  
> >  #ifdef CONFIG_XFS_RT
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux