linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Btrfs: remove BUG_ON from get_restripe_target
@ 2012-04-04 20:19 Bobby Powers
  2012-04-05  0:46 ` Jeff Mahoney
  2012-04-05  2:04 ` [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON Bobby Powers
  0 siblings, 2 replies; 10+ messages in thread
From: Bobby Powers @ 2012-04-04 20:19 UTC (permalink / raw)
  Cc: Bobby Powers, Ilya Dryomov, Chris Mason, Andi Kleen, linux-btrfs,
	linux-kernel

spin_is_locked always returns 0 on non-SMP systems, which causes btrfs
to fail the mount.  There is documentation pending as to why checking
for spin_is_locked is a bad idea:

https://lkml.org/lkml/2012/3/27/413

As this was the only location in fs/btrfs/extent-tree.c that did
lock-correctness checking in a BUG_ON, simply remove it.

Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
CC: Ilya Dryomov <idryomov@gmail.com>
CC: Chris Mason <chris.mason@oracle.com>
CC: Andi Kleen <ak@linux.intel.com>
CC: linux-btrfs@vger.kernel.org
CC: linux-kernel@vger.kernel.org
---
 fs/btrfs/extent-tree.c |    3 ---
 1 file changed, 3 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index a844204..c98b073 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -3158,9 +3158,6 @@ static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
 	struct btrfs_balance_control *bctl = fs_info->balance_ctl;
 	u64 target = 0;
 
-	BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) &&
-	       !spin_is_locked(&fs_info->balance_lock));
-
 	if (!bctl)
 		return 0;
 
-- 
1.7.10.rc3.3.g19a6c

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

* Re: [PATCH] Btrfs: remove BUG_ON from get_restripe_target
  2012-04-04 20:19 [PATCH] Btrfs: remove BUG_ON from get_restripe_target Bobby Powers
@ 2012-04-05  0:46 ` Jeff Mahoney
  2012-04-05  1:19   ` Bobby Powers
  2012-04-05  2:04 ` [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON Bobby Powers
  1 sibling, 1 reply; 10+ messages in thread
From: Jeff Mahoney @ 2012-04-05  0:46 UTC (permalink / raw)
  To: Bobby Powers
  Cc: Ilya Dryomov, Chris Mason, Andi Kleen, linux-btrfs, linux-kernel

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/04/2012 04:19 PM, Bobby Powers wrote:
> spin_is_locked always returns 0 on non-SMP systems, which causes 
> btrfs to fail the mount.  There is documentation pending as to why 
> checking for spin_is_locked is a bad idea:
> 
> https://lkml.org/lkml/2012/3/27/413
> 
> As this was the only location in fs/btrfs/extent-tree.c that did 
> lock-correctness checking in a BUG_ON, simply remove it.
> 
> Signed-off-by: Bobby Powers <bobbypowers@gmail.com> CC: Ilya 
> Dryomov <idryomov@gmail.com> CC: Chris Mason 
> <chris.mason@oracle.com> CC: Andi Kleen <ak@linux.intel.com> CC: 
> linux-btrfs@vger.kernel.org CC: linux-kernel@vger.kernel.org --- 
> fs/btrfs/extent-tree.c |    3 --- 1 file changed, 3 deletions(-)
> 
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 
> a844204..c98b073 100644 --- a/fs/btrfs/extent-tree.c +++ 
> b/fs/btrfs/extent-tree.c @@ -3158,9 +3158,6 @@ static u64 
> get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags) 
> struct btrfs_balance_control *bctl = fs_info->balance_ctl; u64 
> target = 0;
> 
> -	BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) && - 
> !spin_is_locked(&fs_info->balance_lock)); - if (!bctl) return 0;
> 

Why not replace both of these with lockdep_assert_held as Andi
suggested in his doc?

- -Jeff

- -- 
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJPfOtVAAoJEB57S2MheeWyew4P/ju2FiKPWvFEhShP2BQzmPPL
wYoYP9cEmuoJbr1FXnpVXRy3RJsS+Dv9IHyUt2l8WRddO5PeTC08fS3a1PsR6Lky
dnDBpOTsvBhdUPClA+9cu9HtNZ488PKALTgNX7kocVYm+vd0vkE54Iv0OWRvIMEA
5nmm/r2MJwgQmTsFwAWojxfiSEJNzRSJ6GXZFbIfwGOaJIx7MmnPg4R3PKU1SZiF
ogKIwocfsTA/T7eplK58+EqtQnfTGTKzAbaEQvX/w1ryRRXHqD2zdk2p+zSAtpN6
swnhu156Bb9t2EUPTv9KiYth0BoYhYy9ppdp2Wyh0hX3lYCAP1SrwBVIYCqpvdqr
CuipFWmqbupW41IjQc6bjoIwaVlGNsqwDY3NNrjR+kb29k3+/3MT8QH1ZXLhlpTB
cUixluE62J8QllW4u3Wa2mLMTqdolcWCCTdh4yUqE+8jxguXUKhoTni1vwApmkru
PM158CLPdxWCnDe1TaGcRYcBoweWPl6UDaVj8W+LdSVcYsycZhwehvDg2amX6pdg
9QFUf25PbDzEVw99w3f2hMhRG5pERRheLqPcFUVbnqZYkZBACt9XtIYBINlREoYW
ACjr9dJszluF9dEKWOmlKhsah3gAGJJoC5+QU8oR+vpxKdrI+8vQ+NYtVhCr0hVA
CO/KEEcwNaobsCWiAbSr
=5Op/
-----END PGP SIGNATURE-----

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

* Re: [PATCH] Btrfs: remove BUG_ON from get_restripe_target
  2012-04-05  0:46 ` Jeff Mahoney
@ 2012-04-05  1:19   ` Bobby Powers
  2012-04-05  1:48     ` Bobby Powers
  0 siblings, 1 reply; 10+ messages in thread
From: Bobby Powers @ 2012-04-05  1:19 UTC (permalink / raw)
  To: Jeff Mahoney
  Cc: Ilya Dryomov, Chris Mason, Andi Kleen, linux-btrfs, linux-kernel

On Wed, Apr 4, 2012 at 8:46 PM, Jeff Mahoney <jeffm@suse.de> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 04/04/2012 04:19 PM, Bobby Powers wrote:
>> spin_is_locked always returns 0 on non-SMP systems, which causes
>> btrfs to fail the mount. =A0There is documentation pending as to why
>> checking for spin_is_locked is a bad idea:
>>
>> https://lkml.org/lkml/2012/3/27/413
>>
>> As this was the only location in fs/btrfs/extent-tree.c that did
>> lock-correctness checking in a BUG_ON, simply remove it.
>>
>> Signed-off-by: Bobby Powers <bobbypowers@gmail.com> CC: Ilya
>> Dryomov <idryomov@gmail.com> CC: Chris Mason
>> <chris.mason@oracle.com> CC: Andi Kleen <ak@linux.intel.com> CC:
>> linux-btrfs@vger.kernel.org CC: linux-kernel@vger.kernel.org ---
>> fs/btrfs/extent-tree.c | =A0 =A03 --- 1 file changed, 3 deletions(-)
>>
>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index
>> a844204..c98b073 100644 --- a/fs/btrfs/extent-tree.c +++
>> b/fs/btrfs/extent-tree.c @@ -3158,9 +3158,6 @@ static u64
>> get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
>> struct btrfs_balance_control *bctl =3D fs_info->balance_ctl; u64
>> target =3D 0;
>>
>> - =A0 =A0 BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) && -
>> !spin_is_locked(&fs_info->balance_lock)); - if (!bctl) return 0;
>>
>
> Why not replace both of these with lockdep_assert_held as Andi
> suggested in his doc?

The complication here is that the existing statement was asserting
that _either_ volume_mutex was held _or_ balance_lock was held -
lockdep_assert_held is defined as:

#define lockdep_assert_held(l)	WARN_ON(debug_locks && !lockdep_is_held(=
l))

which doesn't map to the existing logic.  Although I could be missing s=
omething.

Sorry for the double email, forgot to turn off html mail initially.

yours,
Bobby

> - -Jeff
>
> - --
> Jeff Mahoney
> SUSE Labs
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2.0.18 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
> iQIcBAEBAgAGBQJPfOtVAAoJEB57S2MheeWyew4P/ju2FiKPWvFEhShP2BQzmPPL
> wYoYP9cEmuoJbr1FXnpVXRy3RJsS+Dv9IHyUt2l8WRddO5PeTC08fS3a1PsR6Lky
> dnDBpOTsvBhdUPClA+9cu9HtNZ488PKALTgNX7kocVYm+vd0vkE54Iv0OWRvIMEA
> 5nmm/r2MJwgQmTsFwAWojxfiSEJNzRSJ6GXZFbIfwGOaJIx7MmnPg4R3PKU1SZiF
> ogKIwocfsTA/T7eplK58+EqtQnfTGTKzAbaEQvX/w1ryRRXHqD2zdk2p+zSAtpN6
> swnhu156Bb9t2EUPTv9KiYth0BoYhYy9ppdp2Wyh0hX3lYCAP1SrwBVIYCqpvdqr
> CuipFWmqbupW41IjQc6bjoIwaVlGNsqwDY3NNrjR+kb29k3+/3MT8QH1ZXLhlpTB
> cUixluE62J8QllW4u3Wa2mLMTqdolcWCCTdh4yUqE+8jxguXUKhoTni1vwApmkru
> PM158CLPdxWCnDe1TaGcRYcBoweWPl6UDaVj8W+LdSVcYsycZhwehvDg2amX6pdg
> 9QFUf25PbDzEVw99w3f2hMhRG5pERRheLqPcFUVbnqZYkZBACt9XtIYBINlREoYW
> ACjr9dJszluF9dEKWOmlKhsah3gAGJJoC5+QU8oR+vpxKdrI+8vQ+NYtVhCr0hVA
> CO/KEEcwNaobsCWiAbSr
> =3D5Op/
> -----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" =
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] Btrfs: remove BUG_ON from get_restripe_target
  2012-04-05  1:19   ` Bobby Powers
@ 2012-04-05  1:48     ` Bobby Powers
  0 siblings, 0 replies; 10+ messages in thread
From: Bobby Powers @ 2012-04-05  1:48 UTC (permalink / raw)
  To: Jeff Mahoney
  Cc: Ilya Dryomov, Chris Mason, Andi Kleen, linux-btrfs, linux-kernel

On Wed, Apr 4, 2012 at 9:19 PM, Bobby Powers <bobbypowers@gmail.com> wr=
ote:
> On Wed, Apr 4, 2012 at 8:46 PM, Jeff Mahoney <jeffm@suse.de> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On 04/04/2012 04:19 PM, Bobby Powers wrote:
>>> spin_is_locked always returns 0 on non-SMP systems, which causes
>>> btrfs to fail the mount. =A0There is documentation pending as to wh=
y
>>> checking for spin_is_locked is a bad idea:
>>>
>>> https://lkml.org/lkml/2012/3/27/413
>>>
>>> As this was the only location in fs/btrfs/extent-tree.c that did
>>> lock-correctness checking in a BUG_ON, simply remove it.
>>>
>>> Signed-off-by: Bobby Powers <bobbypowers@gmail.com> CC: Ilya
>>> Dryomov <idryomov@gmail.com> CC: Chris Mason
>>> <chris.mason@oracle.com> CC: Andi Kleen <ak@linux.intel.com> CC:
>>> linux-btrfs@vger.kernel.org CC: linux-kernel@vger.kernel.org ---
>>> fs/btrfs/extent-tree.c | =A0 =A03 --- 1 file changed, 3 deletions(-=
)
>>>
>>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index
>>> a844204..c98b073 100644 --- a/fs/btrfs/extent-tree.c +++
>>> b/fs/btrfs/extent-tree.c @@ -3158,9 +3158,6 @@ static u64
>>> get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
>>> struct btrfs_balance_control *bctl =3D fs_info->balance_ctl; u64
>>> target =3D 0;
>>>
>>> - =A0 =A0 BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) && -
>>> !spin_is_locked(&fs_info->balance_lock)); - if (!bctl) return 0;
>>>
>>
>> Why not replace both of these with lockdep_assert_held as Andi
>> suggested in his doc?
>
> The complication here is that the existing statement was asserting
> that _either_ volume_mutex was held _or_ balance_lock was held -
> lockdep_assert_held is defined as:
>
> #define lockdep_assert_held(l) =A0WARN_ON(debug_locks && !lockdep_is_=
held(l))

Well, I guess it works fine if lockdep.h defines lockdep_is_held(l)
for the !LOCKDEP case:

       BUG_ON(debug_locks && !lockdep_is_held(&fs_info->volume_mutex) &=
&
              !lockdep_is_held(&fs_info->balance_lock));

> which doesn't map to the existing logic. =A0Although I could be missi=
ng something.
>
> Sorry for the double email, forgot to turn off html mail initially.
>
> yours,
> Bobby
>
>> - -Jeff
>>
>> - --
>> Jeff Mahoney
>> SUSE Labs
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v2.0.18 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>>
>> iQIcBAEBAgAGBQJPfOtVAAoJEB57S2MheeWyew4P/ju2FiKPWvFEhShP2BQzmPPL
>> wYoYP9cEmuoJbr1FXnpVXRy3RJsS+Dv9IHyUt2l8WRddO5PeTC08fS3a1PsR6Lky
>> dnDBpOTsvBhdUPClA+9cu9HtNZ488PKALTgNX7kocVYm+vd0vkE54Iv0OWRvIMEA
>> 5nmm/r2MJwgQmTsFwAWojxfiSEJNzRSJ6GXZFbIfwGOaJIx7MmnPg4R3PKU1SZiF
>> ogKIwocfsTA/T7eplK58+EqtQnfTGTKzAbaEQvX/w1ryRRXHqD2zdk2p+zSAtpN6
>> swnhu156Bb9t2EUPTv9KiYth0BoYhYy9ppdp2Wyh0hX3lYCAP1SrwBVIYCqpvdqr
>> CuipFWmqbupW41IjQc6bjoIwaVlGNsqwDY3NNrjR+kb29k3+/3MT8QH1ZXLhlpTB
>> cUixluE62J8QllW4u3Wa2mLMTqdolcWCCTdh4yUqE+8jxguXUKhoTni1vwApmkru
>> PM158CLPdxWCnDe1TaGcRYcBoweWPl6UDaVj8W+LdSVcYsycZhwehvDg2amX6pdg
>> 9QFUf25PbDzEVw99w3f2hMhRG5pERRheLqPcFUVbnqZYkZBACt9XtIYBINlREoYW
>> ACjr9dJszluF9dEKWOmlKhsah3gAGJJoC5+QU8oR+vpxKdrI+8vQ+NYtVhCr0hVA
>> CO/KEEcwNaobsCWiAbSr
>> =3D5Op/
>> -----END PGP SIGNATURE-----
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" =
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-04 20:19 [PATCH] Btrfs: remove BUG_ON from get_restripe_target Bobby Powers
  2012-04-05  0:46 ` Jeff Mahoney
@ 2012-04-05  2:04 ` Bobby Powers
  2012-04-05 16:23   ` Bobby Powers
  2012-04-06 20:05   ` Ilya Dryomov
  1 sibling, 2 replies; 10+ messages in thread
From: Bobby Powers @ 2012-04-05  2:04 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Bobby Powers, Ilya Dryomov, Chris Mason, Andi Kleen, Jeff Mahoney,
	Ingo Molnar, linux-kernel

spin_is_locked always returns 0 on non-SMP systems, which causes btrfs
to fail the mount.  There is documentation pending as to why checking
for spin_is_locked is a bad idea:

https://lkml.org/lkml/2012/3/27/413

The suggested lockdep_assert_held() is not appropriate in this case,
as what get_restripe_target() is checking for is that either
volume_mutex is held or balance_lock is held.  Luckily
lockdep_assert_held() is a simple macro:

WARN_ON(debug_locks && !lockdep_is_held(l))

We can mimic the structure in get_restripe_target(), but we need to
make sure lockdep_is_held() is defined for the !LOCKDEP case.

CC: Ilya Dryomov <idryomov@gmail.com>
CC: Chris Mason <chris.mason@oracle.com>
CC: Andi Kleen <ak@linux.intel.com>
CC: Jeff Mahoney <jeffm@suse.de>
CC: Ingo Molnar <mingo@redhat.com>
CC: linux-kernel@vger.kernel.org
Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
---
 fs/btrfs/extent-tree.c  |    5 +++--
 include/linux/lockdep.h |    1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index a844204..4d13eb1 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -24,6 +24,7 @@
 #include <linux/kthread.h>
 #include <linux/slab.h>
 #include <linux/ratelimit.h>
+#include <linux/lockdep.h>
 #include "compat.h"
 #include "hash.h"
 #include "ctree.h"
@@ -3158,8 +3159,8 @@ static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
 	struct btrfs_balance_control *bctl = fs_info->balance_ctl;
 	u64 target = 0;
 
-	BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) &&
-	       !spin_is_locked(&fs_info->balance_lock));
+	BUG_ON(debug_locks && !lockdep_is_held(&fs_info->volume_mutex) &&
+	       !lockdep_is_held(&fs_info->balance_lock));
 
 	if (!bctl)
 		return 0;
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index d36619e..94c0edb 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -392,6 +392,7 @@ struct lock_class_key { };
 
 #define lockdep_depth(tsk)	(0)
 
+#define lockdep_is_held(l)	(0)
 #define lockdep_assert_held(l)			do { } while (0)
 
 #define lockdep_recursing(tsk)			(0)
-- 
1.7.10.rc3.3.g19a6c


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

* Re: [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-05  2:04 ` [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON Bobby Powers
@ 2012-04-05 16:23   ` Bobby Powers
  2012-04-05 16:51     ` Ilya Dryomov
  2012-04-06 20:05   ` Ilya Dryomov
  1 sibling, 1 reply; 10+ messages in thread
From: Bobby Powers @ 2012-04-05 16:23 UTC (permalink / raw)
  To: linux-btrfs
  Cc: Bobby Powers, Ilya Dryomov, Chris Mason, Andi Kleen, Jeff Mahoney,
	Ingo Molnar, linux-kernel

On Wed, Apr 4, 2012 at 10:04 PM, Bobby Powers <bobbypowers@gmail.com> w=
rote:
> spin_is_locked always returns 0 on non-SMP systems, which causes btrf=
s
> to fail the mount. =A0There is documentation pending as to why checki=
ng

I guess I should be explicit in stating that this is a regression, so
this patch or something else that addresses it should be pulled into
3.4.

> for spin_is_locked is a bad idea:
>
> https://lkml.org/lkml/2012/3/27/413
>
> The suggested lockdep_assert_held() is not appropriate in this case,
> as what get_restripe_target() is checking for is that either
> volume_mutex is held or balance_lock is held. =A0Luckily
> lockdep_assert_held() is a simple macro:
>
> WARN_ON(debug_locks && !lockdep_is_held(l))
>
> We can mimic the structure in get_restripe_target(), but we need to
> make sure lockdep_is_held() is defined for the !LOCKDEP case.
>
> CC: Ilya Dryomov <idryomov@gmail.com>
> CC: Chris Mason <chris.mason@oracle.com>
> CC: Andi Kleen <ak@linux.intel.com>
> CC: Jeff Mahoney <jeffm@suse.de>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: linux-kernel@vger.kernel.org
> Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
> ---
> =A0fs/btrfs/extent-tree.c =A0| =A0 =A05 +++--
> =A0include/linux/lockdep.h | =A0 =A01 +
> =A02 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index a844204..4d13eb1 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -24,6 +24,7 @@
> =A0#include <linux/kthread.h>
> =A0#include <linux/slab.h>
> =A0#include <linux/ratelimit.h>
> +#include <linux/lockdep.h>
> =A0#include "compat.h"
> =A0#include "hash.h"
> =A0#include "ctree.h"
> @@ -3158,8 +3159,8 @@ static u64 get_restripe_target(struct btrfs_fs_=
info *fs_info, u64 flags)
> =A0 =A0 =A0 =A0struct btrfs_balance_control *bctl =3D fs_info->balanc=
e_ctl;
> =A0 =A0 =A0 =A0u64 target =3D 0;
>
> - =A0 =A0 =A0 BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) &&
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0!spin_is_locked(&fs_info->balance_lock))=
;
> + =A0 =A0 =A0 BUG_ON(debug_locks && !lockdep_is_held(&fs_info->volume=
_mutex) &&
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0!lockdep_is_held(&fs_info->balance_lock)=
);
>
> =A0 =A0 =A0 =A0if (!bctl)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return 0;
> diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
> index d36619e..94c0edb 100644
> --- a/include/linux/lockdep.h
> +++ b/include/linux/lockdep.h
> @@ -392,6 +392,7 @@ struct lock_class_key { };
>
> =A0#define lockdep_depth(tsk) =A0 =A0 (0)
>
> +#define lockdep_is_held(l) =A0 =A0 (0)
> =A0#define lockdep_assert_held(l) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 do =
{ } while (0)
>
> =A0#define lockdep_recursing(tsk) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (0)
> --
> 1.7.10.rc3.3.g19a6c
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" =
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-05 16:23   ` Bobby Powers
@ 2012-04-05 16:51     ` Ilya Dryomov
  2012-04-06 17:20       ` Mitch Harder
  0 siblings, 1 reply; 10+ messages in thread
From: Ilya Dryomov @ 2012-04-05 16:51 UTC (permalink / raw)
  To: Bobby Powers
  Cc: linux-btrfs, Chris Mason, Andi Kleen, Jeff Mahoney, Ingo Molnar,
	linux-kernel

On Thu, Apr 05, 2012 at 12:23:01PM -0400, Bobby Powers wrote:
> On Wed, Apr 4, 2012 at 10:04 PM, Bobby Powers <bobbypowers@gmail.com>=
 wrote:
> > spin_is_locked always returns 0 on non-SMP systems, which causes bt=
rfs
> > to fail the mount. =C2=A0There is documentation pending as to why c=
hecking
>=20
> I guess I should be explicit in stating that this is a regression, so
> this patch or something else that addresses it should be pulled into
> 3.4.

Yes, this is a regression and spin_is_locked() definitely has to go.  I
don't have a strong opinion on this assert, if there are objections to
v2 I'm OK with ripping that BUG_ON entirely and replacing it with a
comment (this function and its callers are WIP).

Thanks,

		Ilya

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

* Re: [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-05 16:51     ` Ilya Dryomov
@ 2012-04-06 17:20       ` Mitch Harder
  0 siblings, 0 replies; 10+ messages in thread
From: Mitch Harder @ 2012-04-06 17:20 UTC (permalink / raw)
  To: Ilya Dryomov
  Cc: Bobby Powers, linux-btrfs, Chris Mason, Andi Kleen, Jeff Mahoney,
	Ingo Molnar, linux-kernel

On Thu, Apr 5, 2012 at 11:51 AM, Ilya Dryomov <idryomov@gmail.com> wrot=
e:
> On Thu, Apr 05, 2012 at 12:23:01PM -0400, Bobby Powers wrote:
>> On Wed, Apr 4, 2012 at 10:04 PM, Bobby Powers <bobbypowers@gmail.com=
> wrote:
>> > spin_is_locked always returns 0 on non-SMP systems, which causes b=
trfs
>> > to fail the mount. =A0There is documentation pending as to why che=
cking
>>
>> I guess I should be explicit in stating that this is a regression, s=
o
>> this patch or something else that addresses it should be pulled into
>> 3.4.
>
> Yes, this is a regression and spin_is_locked() definitely has to go. =
=A0I
> don't have a strong opinion on this assert, if there are objections t=
o
> v2 I'm OK with ripping that BUG_ON entirely and replacing it with a
> comment (this function and its callers are WIP).
>

I'm still hitting this BUG_ON after applying this patch on my single
CPU AthlonXP x86 system.

I'm running a 3.3.1 kernel merged with the for-linus branch, and had
this patch applied.

I am currently testing with the BUG_ON commented out.  The btrfs
partitions mount without error, and I haven't encountered any
immediate issues.

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

* Re: [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-05  2:04 ` [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON Bobby Powers
  2012-04-05 16:23   ` Bobby Powers
@ 2012-04-06 20:05   ` Ilya Dryomov
  2012-04-07  1:06     ` Bobby Powers
  1 sibling, 1 reply; 10+ messages in thread
From: Ilya Dryomov @ 2012-04-06 20:05 UTC (permalink / raw)
  To: Bobby Powers
  Cc: linux-btrfs, Chris Mason, Andi Kleen, Jeff Mahoney, Ingo Molnar,
	linux-kernel

On Wed, Apr 04, 2012 at 10:04:12PM -0400, Bobby Powers wrote:
> spin_is_locked always returns 0 on non-SMP systems, which causes btrfs
> to fail the mount.  There is documentation pending as to why checking
> for spin_is_locked is a bad idea:
> 
> https://lkml.org/lkml/2012/3/27/413
> 
> The suggested lockdep_assert_held() is not appropriate in this case,
> as what get_restripe_target() is checking for is that either
> volume_mutex is held or balance_lock is held.  Luckily
> lockdep_assert_held() is a simple macro:
> 
> WARN_ON(debug_locks && !lockdep_is_held(l))
> 
> We can mimic the structure in get_restripe_target(), but we need to
> make sure lockdep_is_held() is defined for the !LOCKDEP case.
> 
> CC: Ilya Dryomov <idryomov@gmail.com>
> CC: Chris Mason <chris.mason@oracle.com>
> CC: Andi Kleen <ak@linux.intel.com>
> CC: Jeff Mahoney <jeffm@suse.de>
> CC: Ingo Molnar <mingo@redhat.com>
> CC: linux-kernel@vger.kernel.org
> Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
> ---
>  fs/btrfs/extent-tree.c  |    5 +++--
>  include/linux/lockdep.h |    1 +
>  2 files changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index a844204..4d13eb1 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -24,6 +24,7 @@
>  #include <linux/kthread.h>
>  #include <linux/slab.h>
>  #include <linux/ratelimit.h>
> +#include <linux/lockdep.h>
>  #include "compat.h"
>  #include "hash.h"
>  #include "ctree.h"
> @@ -3158,8 +3159,8 @@ static u64 get_restripe_target(struct btrfs_fs_info *fs_info, u64 flags)
>  	struct btrfs_balance_control *bctl = fs_info->balance_ctl;
>  	u64 target = 0;
>  
> -	BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) &&
> -	       !spin_is_locked(&fs_info->balance_lock));
> +	BUG_ON(debug_locks && !lockdep_is_held(&fs_info->volume_mutex) &&
> +	       !lockdep_is_held(&fs_info->balance_lock));
>  
>  	if (!bctl)
>  		return 0;
> diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
> index d36619e..94c0edb 100644
> --- a/include/linux/lockdep.h
> +++ b/include/linux/lockdep.h
> @@ -392,6 +392,7 @@ struct lock_class_key { };
>  
>  #define lockdep_depth(tsk)	(0)
>  
> +#define lockdep_is_held(l)	(0)
>  #define lockdep_assert_held(l)			do { } while (0)
>  
>  #define lockdep_recursing(tsk)			(0)
> -- 
> 1.7.10.rc3.3.g19a6c

OK, Mitch's report prompted me to actually take a look.  This patch is
wrong: by defining lockdep_is_held(l) to 0 in !LOCKDEP case you
effectively mimic the behaviour of spin_is_locked() which is what
getting us in the first place.

get_restripe_target() interface is WIP so I will replace BUG_ON with a
comment and send a patch through btrfs tree.

Thanks,

		Ilya

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

* Re: [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON
  2012-04-06 20:05   ` Ilya Dryomov
@ 2012-04-07  1:06     ` Bobby Powers
  0 siblings, 0 replies; 10+ messages in thread
From: Bobby Powers @ 2012-04-07  1:06 UTC (permalink / raw)
  To: Ilya Dryomov
  Cc: linux-btrfs, Chris Mason, Andi Kleen, Jeff Mahoney, Ingo Molnar,
	linux-kernel

On Fri, Apr 6, 2012 at 4:05 PM, Ilya Dryomov <idryomov@gmail.com> wrote=
:
> On Wed, Apr 04, 2012 at 10:04:12PM -0400, Bobby Powers wrote:
>> spin_is_locked always returns 0 on non-SMP systems, which causes btr=
fs
>> to fail the mount. =A0There is documentation pending as to why check=
ing
>> for spin_is_locked is a bad idea:
>>
>> https://lkml.org/lkml/2012/3/27/413
>>
>> The suggested lockdep_assert_held() is not appropriate in this case,
>> as what get_restripe_target() is checking for is that either
>> volume_mutex is held or balance_lock is held. =A0Luckily
>> lockdep_assert_held() is a simple macro:
>>
>> WARN_ON(debug_locks && !lockdep_is_held(l))
>>
>> We can mimic the structure in get_restripe_target(), but we need to
>> make sure lockdep_is_held() is defined for the !LOCKDEP case.
>>
>> CC: Ilya Dryomov <idryomov@gmail.com>
>> CC: Chris Mason <chris.mason@oracle.com>
>> CC: Andi Kleen <ak@linux.intel.com>
>> CC: Jeff Mahoney <jeffm@suse.de>
>> CC: Ingo Molnar <mingo@redhat.com>
>> CC: linux-kernel@vger.kernel.org
>> Signed-off-by: Bobby Powers <bobbypowers@gmail.com>
>> ---
>> =A0fs/btrfs/extent-tree.c =A0| =A0 =A05 +++--
>> =A0include/linux/lockdep.h | =A0 =A01 +
>> =A02 files changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
>> index a844204..4d13eb1 100644
>> --- a/fs/btrfs/extent-tree.c
>> +++ b/fs/btrfs/extent-tree.c
>> @@ -24,6 +24,7 @@
>> =A0#include <linux/kthread.h>
>> =A0#include <linux/slab.h>
>> =A0#include <linux/ratelimit.h>
>> +#include <linux/lockdep.h>
>> =A0#include "compat.h"
>> =A0#include "hash.h"
>> =A0#include "ctree.h"
>> @@ -3158,8 +3159,8 @@ static u64 get_restripe_target(struct btrfs_fs=
_info *fs_info, u64 flags)
>> =A0 =A0 =A0 struct btrfs_balance_control *bctl =3D fs_info->balance_=
ctl;
>> =A0 =A0 =A0 u64 target =3D 0;
>>
>> - =A0 =A0 BUG_ON(!mutex_is_locked(&fs_info->volume_mutex) &&
>> - =A0 =A0 =A0 =A0 =A0 =A0!spin_is_locked(&fs_info->balance_lock));
>> + =A0 =A0 BUG_ON(debug_locks && !lockdep_is_held(&fs_info->volume_mu=
tex) &&
>> + =A0 =A0 =A0 =A0 =A0 =A0!lockdep_is_held(&fs_info->balance_lock));
>>
>> =A0 =A0 =A0 if (!bctl)
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 return 0;
>> diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
>> index d36619e..94c0edb 100644
>> --- a/include/linux/lockdep.h
>> +++ b/include/linux/lockdep.h
>> @@ -392,6 +392,7 @@ struct lock_class_key { };
>>
>> =A0#define lockdep_depth(tsk) =A0 (0)
>>
>> +#define lockdep_is_held(l) =A0 (0)
>> =A0#define lockdep_assert_held(l) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 do { } while (0)
>>
>> =A0#define lockdep_recursing(tsk) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 (0)
>> --
>> 1.7.10.rc3.3.g19a6c
>
> OK, Mitch's report prompted me to actually take a look. =A0This patch=
 is
> wrong: by defining lockdep_is_held(l) to 0 in !LOCKDEP case you
> effectively mimic the behaviour of spin_is_locked() which is what
> getting us in the first place.
>
> get_restripe_target() interface is WIP so I will replace BUG_ON with =
a
> comment and send a patch through btrfs tree.

Hah, good point...

> Thanks,
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Ilya

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

end of thread, other threads:[~2012-04-07  1:06 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-04 20:19 [PATCH] Btrfs: remove BUG_ON from get_restripe_target Bobby Powers
2012-04-05  0:46 ` Jeff Mahoney
2012-04-05  1:19   ` Bobby Powers
2012-04-05  1:48     ` Bobby Powers
2012-04-05  2:04 ` [PATCH v2] Btrfs, lockdep: get_restripe_target: use lockdep in BUG_ON Bobby Powers
2012-04-05 16:23   ` Bobby Powers
2012-04-05 16:51     ` Ilya Dryomov
2012-04-06 17:20       ` Mitch Harder
2012-04-06 20:05   ` Ilya Dryomov
2012-04-07  1:06     ` Bobby Powers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).