From: hare@suse.de (Hannes Reinecke)
Subject: [PATCH 4/4] nvme: start ANATT timer on out-of-order state changes
Date: Thu, 7 Jun 2018 14:37:50 +0200 [thread overview]
Message-ID: <20180607143750.16ddff8f@pentland.suse.de> (raw)
In-Reply-To: <20180607121135.GD11938@lst.de>
On Thu, 7 Jun 2018 14:11:35 +0200
Christoph Hellwig <hch@lst.de> wrote:
> > + ana_state = READ_ONCE(ns->ctrl->ana_state[ns->anagrpid]);
> > switch (nvme_req(req)->status & 0x7ff) {
> > case NVME_SC_ANA_TRANSITION:
> > - nvme_update_ana_state(ns, NVME_ANA_CHANGE);
> > - if (!timer_pending(&ns->anatt_timer)) {
> > - ns->anatt_timer.expires =
> > - ns->ctrl->anatt * HZ + jiffies;
> > - add_timer(&ns->anatt_timer);
> > + if (ana_state != NVME_ANA_CHANGE) {
> > + nvme_update_ana_state(ns, NVME_ANA_CHANGE);
> > + ana_state_changed = true;
>
> Needs an xchg operation to be atomic.
>
Okay.
> > case NVME_SC_ANA_PERSISTENT_LOSS:
> > - nvme_update_ana_state(ns,
> > NVME_ANA_PERSISTENT_LOSS);
> > + if (ana_state != NVME_ANA_PERSISTENT_LOSS) {
> > + nvme_update_ana_state(ns,
> > NVME_ANA_PERSISTENT_LOSS);
> > + ana_state_changed = true;
> > + }
> > break;
> > case NVME_SC_ANA_INACCESSIBLE:
> > - nvme_update_ana_state(ns, NVME_ANA_INACCESSIBLE);
> > + if (ana_state != NVME_ANA_INACCESSIBLE) {
> > + nvme_update_ana_state(ns,
> > NVME_ANA_INACCESSIBLE);
> > + ana_state_changed = true;
> > + }
> > break;
>
> We don't need to start the ANA timer for these states, it should
> only happen for the CHANGE state.
>
Hmm. When we're getting these error it means that there is a divergence
between the ANA state on the host and the target.
Which really shouldn't happen, as we _should_ have received an ANA AEN
signalling us this state. As there is a race condition here (ANA AENs
are being send via the admin connection, and it might be that we
haven't gotten around to processing the ANA state yet) we should be
starting the ANATT timer to catch any outstanding AENs.
And if we're not getting an ANA AEN within ANATT the controller should
be considered hosed, and we need to reset it.
Hence the code.
If you disagree, what _should_ be the appropriate handling in this
case, ie we have the most current ANA log page, _and_ get this error
indicating a state mismatch?
Cheers,
Hannes
next prev parent reply other threads:[~2018-06-07 12:37 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-07 7:35 [PATCH 0/4] nvme: ANATT handling Hannes Reinecke
2018-06-07 7:35 ` [PATCH 1/4] nvmet: make ANATT configurable Hannes Reinecke
2018-06-07 12:06 ` Christoph Hellwig
2018-06-07 12:42 ` Hannes Reinecke
2018-06-07 13:03 ` Sagi Grimberg
2018-06-07 7:35 ` [PATCH 2/4] nvmet: ANA transition timeout handling Hannes Reinecke
2018-06-07 12:07 ` Christoph Hellwig
2018-06-07 13:31 ` Hannes Reinecke
2018-06-07 13:41 ` Christoph Hellwig
2018-06-07 13:12 ` Sagi Grimberg
2018-06-07 7:35 ` [PATCH 3/4] nvme: " Hannes Reinecke
2018-06-07 12:09 ` Christoph Hellwig
2018-06-07 12:52 ` Hannes Reinecke
2018-06-07 13:11 ` Christoph Hellwig
2018-06-07 13:16 ` Sagi Grimberg
2018-06-07 13:26 ` Christoph Hellwig
2018-06-07 7:35 ` [PATCH 4/4] nvme: start ANATT timer on out-of-order state changes Hannes Reinecke
2018-06-07 12:11 ` Christoph Hellwig
2018-06-07 12:37 ` Hannes Reinecke [this message]
2018-06-07 13:10 ` Christoph Hellwig
2018-06-07 13:20 ` Hannes Reinecke
2018-06-07 13:46 ` Christoph Hellwig
2018-06-07 14:01 ` Hannes Reinecke
2018-06-07 14:22 ` Christoph Hellwig
2018-06-07 15:20 ` Sagi Grimberg
2018-06-07 13:20 ` 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=20180607143750.16ddff8f@pentland.suse.de \
--to=hare@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox