From: Bart Van Assche <bvanassche@acm.org>
To: Ming Lei <tom.leiming@gmail.com>, "Theodore Y. Ts'o" <tytso@mit.edu>
Cc: linux-block <linux-block@vger.kernel.org>
Subject: Re: blktests nvme/012 triggering LOCKDEP warning
Date: Wed, 13 Feb 2019 09:36:13 -0800 [thread overview]
Message-ID: <1550079373.19311.55.camel@acm.org> (raw)
In-Reply-To: <CACVXFVNWK7QC+463cbMKE4T36O72Qvkx6AjbW2RZtJX3H4RM9g@mail.gmail.com>
On Wed, 2019-02-13 at 12:27 +0800, Ming Lei wrote:
> On Wed, Feb 13, 2019 at 12:33 AM Theodore Y. Ts'o <tytso@mit.edu> wrote:
> >
> > Is this a known issue? nvme/012 is triggering the following lockdep warning:
> >
> > Thanks,
> >
> > - Ted
> >
> > [ 1964.751910] run blktests nvme/012 at 2019-02-11 20:58:31
> > [ 1964.977624] nvmet: adding nsid 1 to subsystem blktests-subsystem-1
> > [ 1965.006395] nvmet: creating controller 1 for subsystem blktests-subsystem-1 for NQN nqn.2014-08.org.nvmexpress:uuid:8a58b187-6d09-4c5d-bc03-593896d2d80d.
> > [ 1965.011811] nvme nvme0: ANA group 1: optimized.
> > [ 1965.011899] nvme nvme0: creating 2 I/O queues.
> > [ 1965.013966] nvme nvme0: new ctrl: "blktests-subsystem-1"
> >
> > [ 1965.282478] ============================================
> > [ 1965.287922] WARNING: possible recursive locking detected
> > [ 1965.293364] 5.0.0-rc3-xfstests-00015-g1236f7d60242 #841 Not tainted
> > [ 1965.299762] --------------------------------------------
> > [ 1965.305207] ksoftirqd/1/16 is trying to acquire lock:
> > [ 1965.310389] 000000000282032e (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
> > [ 1965.319146]
> > but task is already holding lock:
> > [ 1965.325106] 00000000cbadcbc2 (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
> > [ 1965.333957]
> > other info that might help us debug this:
> > [ 1965.340615] Possible unsafe locking scenario:
> >
> > [ 1965.346664] CPU0
> > [ 1965.349248] ----
> > [ 1965.351820] lock(&(&fq->mq_flush_lock)->rlock);
> > [ 1965.356654] lock(&(&fq->mq_flush_lock)->rlock);
> > [ 1965.361490]
> > *** DEADLOCK ***
> >
> > [ 1965.367541] May be due to missing lock nesting notation
> >
> > [ 1965.374636] 1 lock held by ksoftirqd/1/16:
> > [ 1965.378890] #0: 00000000cbadcbc2 (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
> > [ 1965.388080]
> > stack backtrace:
> > [ 1965.392570] CPU: 1 PID: 16 Comm: ksoftirqd/1 Not tainted 5.0.0-rc3-xfstests-00015-g1236f7d60242 #841
> > [ 1965.402002] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
> > [ 1965.411411] Call Trace:
> > [ 1965.413996] dump_stack+0x67/0x90
> > [ 1965.417433] __lock_acquire.cold.45+0x2b4/0x313
> > [ 1965.422194] lock_acquire+0x98/0x160
> > [ 1965.425894] ? flush_end_io+0x4e/0x1d0
> > [ 1965.429817] _raw_spin_lock_irqsave+0x3b/0x80
> > [ 1965.434299] ? flush_end_io+0x4e/0x1d0
> > [ 1965.438162] flush_end_io+0x4e/0x1d0
> > [ 1965.441909] blk_mq_complete_request+0x76/0x110
> > [ 1965.446580] nvmet_req_complete+0x15/0x110 [nvmet]
> > [ 1965.452098] nvmet_bio_done+0x27/0x50 [nvmet]
> > [ 1965.456634] blk_update_request+0xd7/0x2d0
> > [ 1965.460869] blk_mq_end_request+0x1a/0x100
> > [ 1965.465091] blk_flush_complete_seq+0xe5/0x350
> > [ 1965.469660] flush_end_io+0x12f/0x1d0
> > [ 1965.473436] blk_done_softirq+0x9f/0xd0
> > [ 1965.477398] __do_softirq+0xca/0x440
> > [ 1965.481092] ? smpboot_thread_fn+0x2f/0x1e0
> > [ 1965.485512] ? smpboot_thread_fn+0x74/0x1e0
> > [ 1965.489813] ? smpboot_thread_fn+0x118/0x1e0
> > [ 1965.494379] run_ksoftirqd+0x24/0x50
> > [ 1965.498081] smpboot_thread_fn+0x113/0x1e0
> > [ 1965.502399] ? sort_range+0x20/0x20
> > [ 1965.506008] kthread+0x121/0x140
> > [ 1965.509395] ? kthread_park+0x80/0x80
> > [ 1965.513290] ret_from_fork+0x3a/0x50
> > [ 1965.527032] XFS (nvme0n1): Mounting V5 Filesystem
> > [ 1965.541778] XFS (nvme0n1): Ending clean mount
> > [ 2064.142830] XFS (nvme0n1): Unmounting Filesystem
> > [ 2064.171432] nvme nvme0: Removing ctrl: NQN "blktests-subsystem-1"
>
> That is a false positive.
>
> It is caused by calling host request's completion handler from target
> IO's completion
> handler directly, and this way should be nvme-loop only.
>
> We may need to annotate the locks in .end_io of blk-flush for avoiding
> this warning.
>
> BTW, this way of nvme-loop handling IO completion may trigger soft lockup too.
Hi Ming,
Can you clarify that last statement?
You may want to know that the patch below suppresses this lockdep complaint. I will
include it in my "dynamic lockdep key" patch series.
[PATCH] block: Suppress a false positive lockdep complaint
Avoid that running test nvme/012 from the blktests suite triggers the
following lockdep complaint:
============================================
WARNING: possible recursive locking detected
5.0.0-rc3-xfstests-00015-g1236f7d60242 #841 Not tainted
--------------------------------------------
ksoftirqd/1/16 is trying to acquire lock:
000000000282032e (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
but task is already holding lock:
00000000cbadcbc2 (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(&(&fq->mq_flush_lock)->rlock);
lock(&(&fq->mq_flush_lock)->rlock);
*** DEADLOCK ***
May be due to missing lock nesting notation
1 lock held by ksoftirqd/1/16:
#0: 00000000cbadcbc2 (&(&fq->mq_flush_lock)->rlock){..-.}, at: flush_end_io+0x4e/0x1d0
stack backtrace:
CPU: 1 PID: 16 Comm: ksoftirqd/1 Not tainted 5.0.0-rc3-xfstests-00015-g1236f7d60242 #841
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
dump_stack+0x67/0x90
__lock_acquire.cold.45+0x2b4/0x313
lock_acquire+0x98/0x160
_raw_spin_lock_irqsave+0x3b/0x80
flush_end_io+0x4e/0x1d0
blk_mq_complete_request+0x76/0x110
nvmet_req_complete+0x15/0x110 [nvmet]
nvmet_bio_done+0x27/0x50 [nvmet]
blk_update_request+0xd7/0x2d0
blk_mq_end_request+0x1a/0x100
blk_flush_complete_seq+0xe5/0x350
flush_end_io+0x12f/0x1d0
blk_done_softirq+0x9f/0xd0
__do_softirq+0xca/0x440
run_ksoftirqd+0x24/0x50
smpboot_thread_fn+0x113/0x1e0
kthread+0x121/0x140
ret_from_fork+0x3a/0x50
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
block/blk-flush.c | 4 +++-
block/blk.h | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/block/blk-flush.c b/block/blk-flush.c
index 6e0f2d97fc6d..c4fa6dd73664 100644
--- a/block/blk-flush.c
+++ b/block/blk-flush.c
@@ -472,7 +472,8 @@ struct blk_flush_queue *blk_alloc_flush_queue(struct request_queue *q,
if (!fq)
goto fail;
- spin_lock_init(&fq->mq_flush_lock);
+ lockdep_register_key(&fq->key);
+ spin_lock_init_key(&fq->mq_flush_lock, &fq->key);
rq_sz = round_up(rq_sz + cmd_size, cache_line_size());
fq->flush_rq = kzalloc_node(rq_sz, flags, node);
@@ -497,6 +498,7 @@ void blk_free_flush_queue(struct blk_flush_queue *fq)
if (!fq)
return;
+ lockdep_unregister_key(&fq->key);
kfree(fq->flush_rq);
kfree(fq);
}
diff --git a/block/blk.h b/block/blk.h
index 848278c52030..10f5e19aa4a1 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -28,6 +28,7 @@ struct blk_flush_queue {
* at the same time
*/
struct request *orig_rq;
+ struct lock_class_key key;
spinlock_t mq_flush_lock;
};
--
2.20.1.791.gb4d0f1c61a-goog
next prev parent reply other threads:[~2019-02-13 17:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-12 16:31 blktests nvme/012 triggering LOCKDEP warning Theodore Y. Ts'o
2019-02-13 4:27 ` Ming Lei
2019-02-13 17:36 ` Bart Van Assche [this message]
2019-02-14 12:44 ` Ming Lei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1550079373.19311.55.camel@acm.org \
--to=bvanassche@acm.org \
--cc=linux-block@vger.kernel.org \
--cc=tom.leiming@gmail.com \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.