* [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.