From: hch@infradead.org (Christoph Hellwig)
Subject: [PATCH 5/5] NVMe: IO queue deletion re-write
Date: Wed, 30 Dec 2015 10:04:30 -0800 [thread overview]
Message-ID: <20151230180430.GA12828@infradead.org> (raw)
In-Reply-To: <1451496471-29370-6-git-send-email-keith.busch@intel.com>
On Wed, Dec 30, 2015@10:27:51AM -0700, Keith Busch wrote:
> The nvme driver deletes IO queues asynchronously since this operation
> may potentially take an undesirable amount of time with a large number
> of queues if done serially.
>
> The driver used to manage coordinating asynchronous deletions. This
> patch simplifies that by leveraging the block layer rather than using
> kthread workers and complicated callback chaining.
>
> Beyond just being a simpler method, this also fixes a theoretical hang
> if the controller stops responding while the worker thread was queued
> deeper than the admin queue depth.
I love the overall scheme, but I think some of the implementation
detail will need a few changes to be long term maintainable:
First the 'wait' workqueue is a per-controller wait, so it should
be in nvme_ctrl instead of a union inside the queue. Second it
should really be a wait queue, and it should only wake the caller
when all pending queues have been deleted to avoid spurious wakeups.
The other things is the use of nvme_requeue_req for submitting
a different command, which looks rather hacky. I'd suggest to
just wake a per-queue work item to do a proper command allocation
and submission, which also means we can use the normal on-stack
commands.
Btw:
> +static int nvme_delete_queue(struct nvme_queue *nvmeq, struct request_queue *q)
> +{
> + struct request *req;
> +
> + req = nvme_alloc_request(q, (struct nvme_command *)&nvmeq->dq,
> + BLK_MQ_REQ_NOWAIT);
> + if (IS_ERR(req))
> + return -1;
> +
> + memset(&nvmeq->dq, 0, sizeof(nvmeq->dq));
> + nvmeq->dq.opcode = nvme_admin_delete_sq;
> + nvmeq->dq.qid = cpu_to_le16(nvmeq->qid);
> +
> + req->end_io_data = nvmeq;
> + req->timeout = ADMIN_TIMEOUT;
> +
> + blk_execute_rq_nowait(q, NULL, req, false, nvme_del_sq_end);
> + return 0;
Please return either a Linux error code or a bool, but not a 0 vs -1
integer.
next prev parent reply other threads:[~2015-12-30 18:04 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-30 17:27 [PATCH 0/5] NVMe fixes and updates for 4.5 Keith Busch
2015-12-30 17:27 ` [PATCH 1/5] NVMe: Fix admin queue ring wrap Keith Busch
2015-12-30 17:49 ` Christoph Hellwig
2015-12-30 17:56 ` Keith Busch
2015-12-30 17:53 ` Jens Axboe
2015-12-30 18:09 ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 2/5] NVMe: Use a retryable error code on reset Keith Busch
2015-12-30 17:52 ` Christoph Hellwig
2015-12-30 18:09 ` Keith Busch
2015-12-30 18:18 ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 3/5] NVMe: Remove queue freezing on resets Keith Busch
2015-12-30 17:53 ` Christoph Hellwig
2015-12-30 20:44 ` Sagi Grimberg
2015-12-30 20:42 ` Sagi Grimberg
2015-12-31 17:19 ` Sagi Grimberg
2015-12-30 17:27 ` [PATCH 4/5] NVMe: Shutdown controller only for power-off Keith Busch
2015-12-30 17:58 ` Christoph Hellwig
2015-12-30 18:02 ` Keith Busch
2015-12-30 18:14 ` Christoph Hellwig
2015-12-30 17:27 ` [PATCH 5/5] NVMe: IO queue deletion re-write Keith Busch
2015-12-30 18:04 ` Christoph Hellwig [this message]
2015-12-30 19:07 ` Keith Busch
2016-01-02 17:07 ` Christoph Hellwig
2016-01-02 21:30 ` Keith Busch
2016-01-03 11:40 ` Christoph Hellwig
2016-01-03 15:43 ` Keith Busch
2016-01-03 16:17 ` Christoph Hellwig
2016-01-03 16:26 ` Keith Busch
2016-01-03 18:04 ` Keith Busch
2016-01-03 17:05 ` Sagi Grimberg
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=20151230180430.GA12828@infradead.org \
--to=hch@infradead.org \
/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.