From: axboe@fb.com (Jens Axboe)
Subject: [PATCH 0/4] nvme-blkmq fixes
Date: Tue, 23 Dec 2014 10:49:11 -0700 [thread overview]
Message-ID: <5499AB17.6060805@fb.com> (raw)
In-Reply-To: <alpine.LNX.2.00.1412222303100.4026@localhost.lm.intel.com>
On 12/22/2014 06:34 PM, Keith Busch wrote:
> On Mon, 22 Dec 2014, Keith Busch wrote:
>> On Mon, 22 Dec 2014, Jens Axboe wrote:
>>> Should be enough to just check for ->rq_pool being initialized or not
>>> - if it is, we could have waiters and we know the waitqueues have
>>> been setup, etc.
>>>
>>> V2 attached.
>>
>> Yep, that fixes the bug.
>>
>> I'm not sure I follow your suggestion for forcing bt_get() to abandon
>> allocating a request tag when the queue is dying. If hctx_may_queue()
>> fails, it returns a generic error and bt_get() reschedules itself. Should
>> a different error than -1 be returned if the queue is dying?
>
> We're making good incremental improvements, but finding oddities the
> more I test this. This one's a doozy.
>
> Requeued IO's are automatically dispatched, and I don't see an immediately
> available way stop them. It causes a bug because the queue doorbells are
> unmapped during reset, so you can't touch them when the queue should be
> quiesced. I could fix that by having the driver not kick the requeue_list
> when it knows a reset is in progress, but there's no immediate way
> to drain the list if the reset fails and the device requires removal,
> and blk_cleanup_queue() will be stuck.
>
> Is there something available to call that I'm missing or do I need to
> add more removal handling?
So that's actually a case where having the queues auto-started on
requeue run is harmful, since we should be able to handle this situation
by stopping queues, requeueing, and then having a helper to eventually
abort pending requeued work, if we have to. But if you simply requeue
them and defer kicking the requeue list it might work. At that point
you'd either kick the requeues (and hence start processing them) if
things went well on the reset, or we could have some
blk_mq_abort_requeues() helper that'd kill them with -EIO instead. Would
that work for you?
--
Jens Axboe
next prev parent reply other threads:[~2014-12-23 17:49 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-20 0:54 [PATCH 0/4] nvme-blkmq fixes Keith Busch
2014-12-20 0:54 ` [PATCH 1/4] blk-mq: Exit queue on alloc failure Keith Busch
2014-12-20 0:54 ` [PATCH 2/4] blk-mq: Export freeze/unfreeze functions Keith Busch
2014-12-20 0:54 ` [PATCH 3/4] NVMe: Fix double free irq Keith Busch
2014-12-22 15:15 ` Matthew Wilcox
2014-12-20 0:54 ` [PATCH 4/4] NVMe: Freeze queues on shutdown Keith Busch
2014-12-20 17:32 ` [PATCH 0/4] nvme-blkmq fixes Jens Axboe
2014-12-20 19:29 ` Jens Axboe
2014-12-22 16:38 ` Keith Busch
2014-12-22 16:47 ` Jens Axboe
2014-12-22 18:17 ` Keith Busch
2014-12-22 18:19 ` Jens Axboe
2014-12-22 20:08 ` Jens Axboe
2014-12-22 21:01 ` Keith Busch
2014-12-23 1:34 ` Keith Busch
2014-12-23 17:49 ` Jens Axboe [this message]
2014-12-23 17:54 ` Jens Axboe
2014-12-23 18:09 ` Keith Busch
2014-12-23 21:10 ` Keith Busch
2014-12-23 21:23 ` Keith Busch
2014-12-23 21:24 ` Jens Axboe
2014-12-31 2:31 ` Keith Busch
2014-12-31 16:38 ` Jens Axboe
2015-01-05 15:17 ` Keith Busch
2015-01-05 19:30 ` Jens Axboe
2015-01-05 20:19 ` Keith Busch
2015-01-05 20:20 ` Jens Axboe
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=5499AB17.6060805@fb.com \
--to=axboe@fb.com \
/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.