From: Uday Shankar <ushankar@purestorage.com>
To: Ming Lei <ming.lei@redhat.com>
Cc: Jens Axboe <axboe@kernel.dk>, linux-block@vger.kernel.org
Subject: Re: [PATCH 4/4] ublk: support device recovery without I/O queueing
Date: Mon, 16 Sep 2024 18:29:27 -0600 [thread overview]
Message-ID: <ZujNZ8FxtK2hqKQx@dev-ushankar.dev.purestorage.com> (raw)
In-Reply-To: <ZoQEmCuPIq0thaON@fedora>
On Tue, Jul 02, 2024 at 09:46:00PM +0800, Ming Lei wrote:
> I'd suggest to add one per-ublk-queue flag for this purpose instead of
> device state, then fetching device can be avoided in fast io path, please see
> similar example of `->force_abort`.
Done in v2.
> > /* fill iod to slot in io cmd buffer */
> > res = ublk_setup_iod(ubq, rq);
> > if (unlikely(res != BLK_STS_OK))
> > @@ -1602,7 +1616,15 @@ static void ublk_nosrv_work(struct work_struct *work)
> > mutex_lock(&ub->mutex);
> > if (ub->dev_info.state != UBLK_S_DEV_LIVE)
> > goto unlock;
> > - __ublk_quiesce_dev(ub);
> > +
> > + if (ublk_nosrv_should_queue_io(ub)) {
>
> Here ublk_nosrv_should_queue_io() doesn't cover UBLK_F_USER_RECOVERY_REISSUE.
Not sure what you mean here. I don't see an issue, can you explain?
>
> > + __ublk_quiesce_dev(ub);
> > + } else {
> > + blk_mq_quiesce_queue(ub->ub_disk->queue);
> > + ub->dev_info.state = UBLK_S_DEV_FAIL_IO;
> > + blk_mq_unquiesce_queue(ub->ub_disk->queue);
> > + }
>
> If the above extra device state is saved, the whole change can be simplified,
> and __ublk_quiesce_dev() still can be called for
> UBLK_F_USER_RECOVERY_NOQUEUE, and UBLK_S_DEV_QUIESCED can cover this new flag,
> meantime setting one per-ublk-queue flag, such as, ->fail_io_in_recovery.
I don't think it's a good idea to have the state UBLK_S_DEV_QUIESCED
cover the new flag. Then we will have a case where the state is
UBLK_S_DEV_QUIESCED but the queue is not actually quiesced... that just
seems confusing. I added a per-queue flag and used it in the fast path,
but kept the new state as well.
> > +/*
> > + * - Block devices are recoverable if ublk server exits and restarts
> > + * - Outstanding I/O when ublk server exits is met with errors
> > + * - I/O issued while there is no ublk server is met with errors
> > + */
> > +#define UBLK_F_USER_RECOVERY_NOQUEUE (1ULL << 9)
>
> Maybe UBLK_F_USER_RECOVERY_FAIL_IO is more readable?
Sure, changed the name.
prev parent reply other threads:[~2024-09-17 0:29 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-17 19:44 [PATCH 0/4] ublk: support device recovery without I/O queueing Uday Shankar
2024-06-17 19:44 ` [PATCH 1/4] ublk: check recovery flags for validity Uday Shankar
2024-06-18 2:00 ` Ming Lei
2024-07-23 19:32 ` Uday Shankar
2024-06-17 19:44 ` [PATCH 2/4] ublk: refactor recovery configuration flag helpers Uday Shankar
2024-06-18 2:11 ` Ming Lei
2024-06-26 17:22 ` Uday Shankar
2024-06-27 1:17 ` Ming Lei
2024-06-27 17:09 ` Uday Shankar
2024-06-30 13:56 ` Ming Lei
2024-07-01 21:02 ` Uday Shankar
2024-07-02 4:07 ` Ming Lei
2024-07-02 11:09 ` Ming Lei
2024-09-17 0:26 ` Uday Shankar
2024-06-17 19:44 ` [PATCH 3/4] ublk: merge stop_work and quiesce_work Uday Shankar
2024-07-02 13:31 ` Ming Lei
2024-06-17 19:44 ` [PATCH 4/4] ublk: support device recovery without I/O queueing Uday Shankar
2024-07-02 13:46 ` Ming Lei
2024-09-17 0:29 ` Uday Shankar [this message]
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=ZujNZ8FxtK2hqKQx@dev-ushankar.dev.purestorage.com \
--to=ushankar@purestorage.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=ming.lei@redhat.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.