All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH -stable] block: fix ext_dev_lock lockdep report
@ 2015-06-11  3:47 Dan Williams
  2015-06-11  7:51 ` Jiri Slaby
  0 siblings, 1 reply; 4+ messages in thread
From: Dan Williams @ 2015-06-11  3:47 UTC (permalink / raw)
  To: axboe; +Cc: Keith Busch, neilb, linux-kernel, stable

 =================================
 [ INFO: inconsistent lock state ]
 4.1.0-rc7+ #217 Tainted: G           O
 ---------------------------------
 inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
 swapper/6/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
  (ext_devt_lock){+.?...}, at: [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70
 {SOFTIRQ-ON-W} state was registered at:
   [<ffffffff810bf6b1>] __lock_acquire+0x461/0x1e70
   [<ffffffff810c1947>] lock_acquire+0xb7/0x290
   [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
   [<ffffffff8143a07d>] blk_alloc_devt+0x6d/0xd0  <-- take the lock in process context
[..]
  [<ffffffff810bf64e>] __lock_acquire+0x3fe/0x1e70
  [<ffffffff810c00ad>] ? __lock_acquire+0xe5d/0x1e70
  [<ffffffff810c1947>] lock_acquire+0xb7/0x290
  [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
  [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
  [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
  [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70    <-- take the lock in softirq
  [<ffffffff8143bfec>] part_release+0x1c/0x50
  [<ffffffff8158edf6>] device_release+0x36/0xb0
  [<ffffffff8145ac2b>] kobject_cleanup+0x7b/0x1a0
  [<ffffffff8145aad0>] kobject_put+0x30/0x70
  [<ffffffff8158f147>] put_device+0x17/0x20
  [<ffffffff8143c29c>] delete_partition_rcu_cb+0x16c/0x180
  [<ffffffff8143c130>] ? read_dev_sector+0xa0/0xa0
  [<ffffffff810e0e0f>] rcu_process_callbacks+0x2ff/0xa90
  [<ffffffff810e0dcf>] ? rcu_process_callbacks+0x2bf/0xa90
  [<ffffffff81067e2e>] __do_softirq+0xde/0x600

Neil sees this in his tests and it also triggers on pmem driver unbind
for the libnvdimm tests.  This fix is on top of an initial fix by Keith
for incorrect usage of mutex_lock() in this path: 2da78092dda1 "block:
Fix dev_t minor allocation lifetime".  Both this and 2da78092dda1 are
candidates for -stable.

Fixes: 2da78092dda1 ("block: Fix dev_t minor allocation lifetime")
Cc: <stable@vger.kernel.org>
Cc: Keith Busch <keith.busch@intel.com>
Reported-by: NeilBrown <neilb@suse.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---

Note that 2da78092dda1 had "Cc: stable@kernel.org" instead of @vger.kernel.org.

 block/genhd.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/block/genhd.c b/block/genhd.c
index 666e11b83983..ea982eadaf63 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -422,9 +422,9 @@ int blk_alloc_devt(struct hd_struct *part, dev_t *devt)
 	/* allocate ext devt */
 	idr_preload(GFP_KERNEL);
 
-	spin_lock(&ext_devt_lock);
+	spin_lock_bh(&ext_devt_lock);
 	idx = idr_alloc(&ext_devt_idr, part, 0, NR_EXT_DEVT, GFP_NOWAIT);
-	spin_unlock(&ext_devt_lock);
+	spin_unlock_bh(&ext_devt_lock);
 
 	idr_preload_end();
 	if (idx < 0)
@@ -449,9 +449,9 @@ void blk_free_devt(dev_t devt)
 		return;
 
 	if (MAJOR(devt) == BLOCK_EXT_MAJOR) {
-		spin_lock(&ext_devt_lock);
+		spin_lock_bh(&ext_devt_lock);
 		idr_remove(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
-		spin_unlock(&ext_devt_lock);
+		spin_unlock_bh(&ext_devt_lock);
 	}
 }
 
@@ -690,13 +690,13 @@ struct gendisk *get_gendisk(dev_t devt, int *partno)
 	} else {
 		struct hd_struct *part;
 
-		spin_lock(&ext_devt_lock);
+		spin_lock_bh(&ext_devt_lock);
 		part = idr_find(&ext_devt_idr, blk_mangle_minor(MINOR(devt)));
 		if (part && get_disk(part_to_disk(part))) {
 			*partno = part->partno;
 			disk = part_to_disk(part);
 		}
-		spin_unlock(&ext_devt_lock);
+		spin_unlock_bh(&ext_devt_lock);
 	}
 
 	return disk;


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

* Re: [PATCH -stable] block: fix ext_dev_lock lockdep report
  2015-06-11  3:47 [PATCH -stable] block: fix ext_dev_lock lockdep report Dan Williams
@ 2015-06-11  7:51 ` Jiri Slaby
  2015-06-11 14:07   ` Dan Williams
  0 siblings, 1 reply; 4+ messages in thread
From: Jiri Slaby @ 2015-06-11  7:51 UTC (permalink / raw)
  To: Dan Williams, axboe; +Cc: Keith Busch, neilb, linux-kernel, stable

On 06/11/2015, 05:47 AM, Dan Williams wrote:
>  =================================
>  [ INFO: inconsistent lock state ]
>  4.1.0-rc7+ #217 Tainted: G           O
>  ---------------------------------
>  inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
>  swapper/6/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
>   (ext_devt_lock){+.?...}, at: [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70
>  {SOFTIRQ-ON-W} state was registered at:
>    [<ffffffff810bf6b1>] __lock_acquire+0x461/0x1e70
>    [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>    [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>    [<ffffffff8143a07d>] blk_alloc_devt+0x6d/0xd0  <-- take the lock in process context
> [..]
>   [<ffffffff810bf64e>] __lock_acquire+0x3fe/0x1e70
>   [<ffffffff810c00ad>] ? __lock_acquire+0xe5d/0x1e70
>   [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>   [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>   [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>   [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>   [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70    <-- take the lock in softirq
>   [<ffffffff8143bfec>] part_release+0x1c/0x50
>   [<ffffffff8158edf6>] device_release+0x36/0xb0
>   [<ffffffff8145ac2b>] kobject_cleanup+0x7b/0x1a0
>   [<ffffffff8145aad0>] kobject_put+0x30/0x70
>   [<ffffffff8158f147>] put_device+0x17/0x20
>   [<ffffffff8143c29c>] delete_partition_rcu_cb+0x16c/0x180
>   [<ffffffff8143c130>] ? read_dev_sector+0xa0/0xa0
>   [<ffffffff810e0e0f>] rcu_process_callbacks+0x2ff/0xa90
>   [<ffffffff810e0dcf>] ? rcu_process_callbacks+0x2bf/0xa90
>   [<ffffffff81067e2e>] __do_softirq+0xde/0x600
> 
> Neil sees this in his tests and it also triggers on pmem driver unbind
> for the libnvdimm tests.  This fix is on top of an initial fix by Keith
> for incorrect usage of mutex_lock() in this path: 2da78092dda1 "block:
> Fix dev_t minor allocation lifetime".  Both this and 2da78092dda1 are
> candidates for -stable.

And what is *this* in terms of SHA? Thanks.

> Fixes: 2da78092dda1 ("block: Fix dev_t minor allocation lifetime")
> Cc: <stable@vger.kernel.org>
> Cc: Keith Busch <keith.busch@intel.com>
> Reported-by: NeilBrown <neilb@suse.de>
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
> 
> Note that 2da78092dda1 had "Cc: stable@kernel.org" instead of @vger.kernel.org.



-- 
js
suse labs

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

* Re: [PATCH -stable] block: fix ext_dev_lock lockdep report
  2015-06-11  7:51 ` Jiri Slaby
@ 2015-06-11 14:07   ` Dan Williams
  2015-06-11 15:01     ` Jens Axboe
  0 siblings, 1 reply; 4+ messages in thread
From: Dan Williams @ 2015-06-11 14:07 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: Jens Axboe, Keith Busch, Neil Brown, linux-kernel, stable

On Thu, Jun 11, 2015 at 12:51 AM, Jiri Slaby <jslaby@suse.cz> wrote:
> On 06/11/2015, 05:47 AM, Dan Williams wrote:
>>  =================================
>>  [ INFO: inconsistent lock state ]
>>  4.1.0-rc7+ #217 Tainted: G           O
>>  ---------------------------------
>>  inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
>>  swapper/6/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
>>   (ext_devt_lock){+.?...}, at: [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70
>>  {SOFTIRQ-ON-W} state was registered at:
>>    [<ffffffff810bf6b1>] __lock_acquire+0x461/0x1e70
>>    [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>>    [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>>    [<ffffffff8143a07d>] blk_alloc_devt+0x6d/0xd0  <-- take the lock in process context
>> [..]
>>   [<ffffffff810bf64e>] __lock_acquire+0x3fe/0x1e70
>>   [<ffffffff810c00ad>] ? __lock_acquire+0xe5d/0x1e70
>>   [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>>   [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>>   [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>>   [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>>   [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70    <-- take the lock in softirq
>>   [<ffffffff8143bfec>] part_release+0x1c/0x50
>>   [<ffffffff8158edf6>] device_release+0x36/0xb0
>>   [<ffffffff8145ac2b>] kobject_cleanup+0x7b/0x1a0
>>   [<ffffffff8145aad0>] kobject_put+0x30/0x70
>>   [<ffffffff8158f147>] put_device+0x17/0x20
>>   [<ffffffff8143c29c>] delete_partition_rcu_cb+0x16c/0x180
>>   [<ffffffff8143c130>] ? read_dev_sector+0xa0/0xa0
>>   [<ffffffff810e0e0f>] rcu_process_callbacks+0x2ff/0xa90
>>   [<ffffffff810e0dcf>] ? rcu_process_callbacks+0x2bf/0xa90
>>   [<ffffffff81067e2e>] __do_softirq+0xde/0x600
>>
>> Neil sees this in his tests and it also triggers on pmem driver unbind
>> for the libnvdimm tests.  This fix is on top of an initial fix by Keith
>> for incorrect usage of mutex_lock() in this path: 2da78092dda1 "block:
>> Fix dev_t minor allocation lifetime".  Both this and 2da78092dda1 are
>> candidates for -stable.
>
> And what is *this* in terms of SHA? Thanks.

Whatever it becomes when applied by Jens, i.e. self-referencing.

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

* Re: [PATCH -stable] block: fix ext_dev_lock lockdep report
  2015-06-11 14:07   ` Dan Williams
@ 2015-06-11 15:01     ` Jens Axboe
  0 siblings, 0 replies; 4+ messages in thread
From: Jens Axboe @ 2015-06-11 15:01 UTC (permalink / raw)
  To: Dan Williams, Jiri Slaby; +Cc: Keith Busch, Neil Brown, linux-kernel, stable

On 06/11/2015 08:07 AM, Dan Williams wrote:
> On Thu, Jun 11, 2015 at 12:51 AM, Jiri Slaby <jslaby@suse.cz> wrote:
>> On 06/11/2015, 05:47 AM, Dan Williams wrote:
>>>   =================================
>>>   [ INFO: inconsistent lock state ]
>>>   4.1.0-rc7+ #217 Tainted: G           O
>>>   ---------------------------------
>>>   inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
>>>   swapper/6/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
>>>    (ext_devt_lock){+.?...}, at: [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70
>>>   {SOFTIRQ-ON-W} state was registered at:
>>>     [<ffffffff810bf6b1>] __lock_acquire+0x461/0x1e70
>>>     [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>>>     [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>>>     [<ffffffff8143a07d>] blk_alloc_devt+0x6d/0xd0  <-- take the lock in process context
>>> [..]
>>>    [<ffffffff810bf64e>] __lock_acquire+0x3fe/0x1e70
>>>    [<ffffffff810c00ad>] ? __lock_acquire+0xe5d/0x1e70
>>>    [<ffffffff810c1947>] lock_acquire+0xb7/0x290
>>>    [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>>>    [<ffffffff818ac3a8>] _raw_spin_lock+0x38/0x50
>>>    [<ffffffff8143a60c>] ? blk_free_devt+0x3c/0x70
>>>    [<ffffffff8143a60c>] blk_free_devt+0x3c/0x70    <-- take the lock in softirq
>>>    [<ffffffff8143bfec>] part_release+0x1c/0x50
>>>    [<ffffffff8158edf6>] device_release+0x36/0xb0
>>>    [<ffffffff8145ac2b>] kobject_cleanup+0x7b/0x1a0
>>>    [<ffffffff8145aad0>] kobject_put+0x30/0x70
>>>    [<ffffffff8158f147>] put_device+0x17/0x20
>>>    [<ffffffff8143c29c>] delete_partition_rcu_cb+0x16c/0x180
>>>    [<ffffffff8143c130>] ? read_dev_sector+0xa0/0xa0
>>>    [<ffffffff810e0e0f>] rcu_process_callbacks+0x2ff/0xa90
>>>    [<ffffffff810e0dcf>] ? rcu_process_callbacks+0x2bf/0xa90
>>>    [<ffffffff81067e2e>] __do_softirq+0xde/0x600
>>>
>>> Neil sees this in his tests and it also triggers on pmem driver unbind
>>> for the libnvdimm tests.  This fix is on top of an initial fix by Keith
>>> for incorrect usage of mutex_lock() in this path: 2da78092dda1 "block:
>>> Fix dev_t minor allocation lifetime".  Both this and 2da78092dda1 are
>>> candidates for -stable.
>>
>> And what is *this* in terms of SHA? Thanks.
>
> Whatever it becomes when applied by Jens, i.e. self-referencing.

4d66e5e9b6d720d8463e11d027bd4ad91c8b1318

-- 
Jens Axboe


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

end of thread, other threads:[~2015-06-11 15:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-11  3:47 [PATCH -stable] block: fix ext_dev_lock lockdep report Dan Williams
2015-06-11  7:51 ` Jiri Slaby
2015-06-11 14:07   ` Dan Williams
2015-06-11 15:01     ` Jens Axboe

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.