All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] xfs: inode lockdep annotations broke non-lockdep build
@ 2015-08-19 10:23 Dave Chinner
  2015-08-19 22:50 ` Eric Sandeen
  2015-08-20 11:32 ` Brian Foster
  0 siblings, 2 replies; 5+ messages in thread
From: Dave Chinner @ 2015-08-19 10:23 UTC (permalink / raw)
  To: xfs

From: Dave Chinner <dchinner@redhat.com>

Fix CONFIG_LOCKDEP=n build, because asserts I put in to ensure we
aren't overrunning lockdep subclasses in commit 0952c81 ("xfs:
clean up inode lockdep annotations") use a define that doesn't
exist when CONFIG_LOCKDEP=n

Only check the subclass limits when lockdep is actually enabled.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 fs/xfs/xfs_inode.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index dd584da..30555f8 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -362,6 +362,17 @@ int xfs_lots_retries;
 int xfs_lock_delays;
 #endif
 
+#ifdef CONFIG_LOCKDEP
+static bool
+xfs_lockdep_subclass_ok(
+	int subclass)
+{
+	return subclass < MAX_LOCKDEP_SUBCLASSES;
+}
+#else
+#define xfs_lockdep_subclass_ok(subclass)	(true)
+#endif
+
 /*
  * Bump the subclass so xfs_lock_inodes() acquires each lock with a different
  * value. This can be called for any type of inode lock combination, including
@@ -375,11 +386,12 @@ xfs_lock_inumorder(int lock_mode, int subclass)
 
 	ASSERT(!(lock_mode & (XFS_ILOCK_PARENT | XFS_ILOCK_RTBITMAP |
 			      XFS_ILOCK_RTSUM)));
+	ASSERT(xfs_lockdep_subclass_ok(subclass));
 
 	if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL)) {
 		ASSERT(subclass <= XFS_IOLOCK_MAX_SUBCLASS);
-		ASSERT(subclass + XFS_IOLOCK_PARENT_VAL <
-						MAX_LOCKDEP_SUBCLASSES);
+		ASSERT(xfs_lockdep_subclass_ok(subclass +
+						XFS_IOLOCK_PARENT_VAL));
 		class += subclass << XFS_IOLOCK_SHIFT;
 		if (lock_mode & XFS_IOLOCK_PARENT)
 			class += XFS_IOLOCK_PARENT_VAL << XFS_IOLOCK_SHIFT;
-- 
2.5.0

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] xfs: inode lockdep annotations broke non-lockdep build
  2015-08-19 10:23 [PATCH] xfs: inode lockdep annotations broke non-lockdep build Dave Chinner
@ 2015-08-19 22:50 ` Eric Sandeen
  2015-08-20 11:32 ` Brian Foster
  1 sibling, 0 replies; 5+ messages in thread
From: Eric Sandeen @ 2015-08-19 22:50 UTC (permalink / raw)
  To: Dave Chinner, xfs

On 8/19/15 5:23 AM, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> Fix CONFIG_LOCKDEP=n build, because asserts I put in to ensure we
> aren't overrunning lockdep subclasses in commit 0952c81 ("xfs:
> clean up inode lockdep annotations") use a define that doesn't
> exist when CONFIG_LOCKDEP=n
> 
> Only check the subclass limits when lockdep is actually enabled.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>

Reviewed-by: Eric Sandeen <sandeen@redhat.com>

> ---
>  fs/xfs/xfs_inode.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index dd584da..30555f8 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -362,6 +362,17 @@ int xfs_lots_retries;
>  int xfs_lock_delays;
>  #endif
>  
> +#ifdef CONFIG_LOCKDEP
> +static bool
> +xfs_lockdep_subclass_ok(
> +	int subclass)
> +{
> +	return subclass < MAX_LOCKDEP_SUBCLASSES;
> +}
> +#else
> +#define xfs_lockdep_subclass_ok(subclass)	(true)
> +#endif
> +
>  /*
>   * Bump the subclass so xfs_lock_inodes() acquires each lock with a different
>   * value. This can be called for any type of inode lock combination, including
> @@ -375,11 +386,12 @@ xfs_lock_inumorder(int lock_mode, int subclass)
>  
>  	ASSERT(!(lock_mode & (XFS_ILOCK_PARENT | XFS_ILOCK_RTBITMAP |
>  			      XFS_ILOCK_RTSUM)));
> +	ASSERT(xfs_lockdep_subclass_ok(subclass));
>  
>  	if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL)) {
>  		ASSERT(subclass <= XFS_IOLOCK_MAX_SUBCLASS);
> -		ASSERT(subclass + XFS_IOLOCK_PARENT_VAL <
> -						MAX_LOCKDEP_SUBCLASSES);
> +		ASSERT(xfs_lockdep_subclass_ok(subclass +
> +						XFS_IOLOCK_PARENT_VAL));
>  		class += subclass << XFS_IOLOCK_SHIFT;
>  		if (lock_mode & XFS_IOLOCK_PARENT)
>  			class += XFS_IOLOCK_PARENT_VAL << XFS_IOLOCK_SHIFT;
> 

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] xfs: inode lockdep annotations broke non-lockdep build
  2015-08-19 10:23 [PATCH] xfs: inode lockdep annotations broke non-lockdep build Dave Chinner
  2015-08-19 22:50 ` Eric Sandeen
@ 2015-08-20 11:32 ` Brian Foster
  2015-08-21  0:42   ` Dave Chinner
  1 sibling, 1 reply; 5+ messages in thread
From: Brian Foster @ 2015-08-20 11:32 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs

On Wed, Aug 19, 2015 at 08:23:34PM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> Fix CONFIG_LOCKDEP=n build, because asserts I put in to ensure we
> aren't overrunning lockdep subclasses in commit 0952c81 ("xfs:
> clean up inode lockdep annotations") use a define that doesn't
> exist when CONFIG_LOCKDEP=n
> 
> Only check the subclass limits when lockdep is actually enabled.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
>  fs/xfs/xfs_inode.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> index dd584da..30555f8 100644
> --- a/fs/xfs/xfs_inode.c
> +++ b/fs/xfs/xfs_inode.c
> @@ -362,6 +362,17 @@ int xfs_lots_retries;
>  int xfs_lock_delays;
>  #endif
>  
> +#ifdef CONFIG_LOCKDEP
> +static bool
> +xfs_lockdep_subclass_ok(
> +	int subclass)
> +{
> +	return subclass < MAX_LOCKDEP_SUBCLASSES;
> +}
> +#else
> +#define xfs_lockdep_subclass_ok(subclass)	(true)
> +#endif
> +

FYI, there's a compile warning with debug and verbose warnings disabled:

...
  CC [M]  fs/xfs//xfs_super.o
fs/xfs//xfs_inode.c:367:1: warning: ‘xfs_lockdep_subclass_ok’ defined but not used [-Wunused-function]
 xfs_lockdep_subclass_ok(
 ^
...

Perhaps it's best to just use the #define in both cases?

Brian

>  /*
>   * Bump the subclass so xfs_lock_inodes() acquires each lock with a different
>   * value. This can be called for any type of inode lock combination, including
> @@ -375,11 +386,12 @@ xfs_lock_inumorder(int lock_mode, int subclass)
>  
>  	ASSERT(!(lock_mode & (XFS_ILOCK_PARENT | XFS_ILOCK_RTBITMAP |
>  			      XFS_ILOCK_RTSUM)));
> +	ASSERT(xfs_lockdep_subclass_ok(subclass));
>  
>  	if (lock_mode & (XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL)) {
>  		ASSERT(subclass <= XFS_IOLOCK_MAX_SUBCLASS);
> -		ASSERT(subclass + XFS_IOLOCK_PARENT_VAL <
> -						MAX_LOCKDEP_SUBCLASSES);
> +		ASSERT(xfs_lockdep_subclass_ok(subclass +
> +						XFS_IOLOCK_PARENT_VAL));
>  		class += subclass << XFS_IOLOCK_SHIFT;
>  		if (lock_mode & XFS_IOLOCK_PARENT)
>  			class += XFS_IOLOCK_PARENT_VAL << XFS_IOLOCK_SHIFT;
> -- 
> 2.5.0
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] xfs: inode lockdep annotations broke non-lockdep build
  2015-08-20 11:32 ` Brian Foster
@ 2015-08-21  0:42   ` Dave Chinner
  2015-08-21 11:09     ` Brian Foster
  0 siblings, 1 reply; 5+ messages in thread
From: Dave Chinner @ 2015-08-21  0:42 UTC (permalink / raw)
  To: Brian Foster; +Cc: xfs

On Thu, Aug 20, 2015 at 07:32:00AM -0400, Brian Foster wrote:
> On Wed, Aug 19, 2015 at 08:23:34PM +1000, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> > 
> > Fix CONFIG_LOCKDEP=n build, because asserts I put in to ensure we
> > aren't overrunning lockdep subclasses in commit 0952c81 ("xfs:
> > clean up inode lockdep annotations") use a define that doesn't
> > exist when CONFIG_LOCKDEP=n
> > 
> > Only check the subclass limits when lockdep is actually enabled.
> > 
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > ---
> >  fs/xfs/xfs_inode.c | 16 ++++++++++++++--
> >  1 file changed, 14 insertions(+), 2 deletions(-)
> > 
> > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
> > index dd584da..30555f8 100644
> > --- a/fs/xfs/xfs_inode.c
> > +++ b/fs/xfs/xfs_inode.c
> > @@ -362,6 +362,17 @@ int xfs_lots_retries;
> >  int xfs_lock_delays;
> >  #endif
> >  
> > +#ifdef CONFIG_LOCKDEP
> > +static bool
> > +xfs_lockdep_subclass_ok(
> > +	int subclass)
> > +{
> > +	return subclass < MAX_LOCKDEP_SUBCLASSES;
> > +}
> > +#else
> > +#define xfs_lockdep_subclass_ok(subclass)	(true)
> > +#endif
> > +
> 
> FYI, there's a compile warning with debug and verbose warnings disabled:
> 
> ...
>   CC [M]  fs/xfs//xfs_super.o
> fs/xfs//xfs_inode.c:367:1: warning: ‘xfs_lockdep_subclass_ok’ defined but not used [-Wunused-function]
>  xfs_lockdep_subclass_ok(
>  ^
> ...

Yeah, I know. I've got another patch to fix that. I didn't test all
6 different combinations of the relevant config parameters before
pushing the change. (I turned off CONFIG_XFS_DEBUG, but turned on
CONFIG_XFS_WARN, so the function was still used).

I haven't pushed it yet, becuse it's just a useless warning rather
than a full build breakage and there's been other stuff I've needed
to deal with.

(I don't work at all efficiently when I have to context switch
all the time. And there's so many things I nee dto pay attention to
that I'm context switching every few minutes...)

> Perhaps it's best to just use the #define in both cases?

-#ifdef CONFIG_LOCKDEP
+#if (defined(DEBUG) || defined(XFS_WARN)) && CONFIG_LOCKDEP

is how I fixed it.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] xfs: inode lockdep annotations broke non-lockdep build
  2015-08-21  0:42   ` Dave Chinner
@ 2015-08-21 11:09     ` Brian Foster
  0 siblings, 0 replies; 5+ messages in thread
From: Brian Foster @ 2015-08-21 11:09 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs

On Fri, Aug 21, 2015 at 10:42:54AM +1000, Dave Chinner wrote:
> On Thu, Aug 20, 2015 at 07:32:00AM -0400, Brian Foster wrote:
> > On Wed, Aug 19, 2015 at 08:23:34PM +1000, Dave Chinner wrote:
> > > From: Dave Chinner <dchinner@redhat.com>
> > > 
...
> 
> > Perhaps it's best to just use the #define in both cases?
> 
> -#ifdef CONFIG_LOCKDEP
> +#if (defined(DEBUG) || defined(XFS_WARN)) && CONFIG_LOCKDEP
> 
> is how I fixed it.
> 

Sounds good to me.

Brian

> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@fromorbit.com
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-08-21 11:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-19 10:23 [PATCH] xfs: inode lockdep annotations broke non-lockdep build Dave Chinner
2015-08-19 22:50 ` Eric Sandeen
2015-08-20 11:32 ` Brian Foster
2015-08-21  0:42   ` Dave Chinner
2015-08-21 11:09     ` Brian Foster

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.