From: keith.busch@intel.com (Keith Busch)
Subject: [PATCH V2 1/1] nvme: fix multiple ctrl removal scheduling
Date: Fri, 26 May 2017 06:06:14 -0400 [thread overview]
Message-ID: <20170526100613.GE24894@localhost.localdomain> (raw)
In-Reply-To: <20170524142623.GA27721@dhcp-216.srv.tuxera.com>
On Wed, May 24, 2017@05:26:25PM +0300, Rakesh Pandit wrote:
> Commit c5f6ce97c1210 tries to address multiple resets but fails as
> work_busy doesn't involve any synchronization and can fail. This is
> reproducible easily as can be seen by WARNING below which is triggered
> with line:
>
> WARN_ON(dev->ctrl.state == NVME_CTRL_RESETTING)
>
> Allowing multiple resets can result in multiple controller removal as
> well if different conditions inside nvme_reset_work fail and which
> might deadlock on device_release_driver.
>
> This patch makes sure that work queue item (reset_work) is added only
> if controller state != NVME_CTRL_RESETTING and that is achieved by
> moving state change outside nvme_reset_work into nvme_reset and
> removing old work_busy call. State change is always synchronizated
> using controller spinlock.
So, the reason the state is changed when the work is running rather than
queueing is for the window when the state may be set to NVME_CTRL_DELETING,
and we don't want the reset work to proceed in that case.
What do you think about adding a new state, like NVME_CTRL_SCHED_RESET,
then leaving the NVME_CTRL_RESETTING state change as-is?
WARNING: multiple messages have this Message-ID (diff)
From: Keith Busch <keith.busch@intel.com>
To: Rakesh Pandit <rakesh@tuxera.com>
Cc: linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org,
Jens Axboe <axboe@fb.com>, Christoph Hellwig <hch@lst.de>,
Sagi Grimberg <sagi@grimberg.me>
Subject: Re: [PATCH V2 1/1] nvme: fix multiple ctrl removal scheduling
Date: Fri, 26 May 2017 06:06:14 -0400 [thread overview]
Message-ID: <20170526100613.GE24894@localhost.localdomain> (raw)
In-Reply-To: <20170524142623.GA27721@dhcp-216.srv.tuxera.com>
On Wed, May 24, 2017 at 05:26:25PM +0300, Rakesh Pandit wrote:
> Commit c5f6ce97c1210 tries to address multiple resets but fails as
> work_busy doesn't involve any synchronization and can fail. This is
> reproducible easily as can be seen by WARNING below which is triggered
> with line:
>
> WARN_ON(dev->ctrl.state == NVME_CTRL_RESETTING)
>
> Allowing multiple resets can result in multiple controller removal as
> well if different conditions inside nvme_reset_work fail and which
> might deadlock on device_release_driver.
>
> This patch makes sure that work queue item (reset_work) is added only
> if controller state != NVME_CTRL_RESETTING and that is achieved by
> moving state change outside nvme_reset_work into nvme_reset and
> removing old work_busy call. State change is always synchronizated
> using controller spinlock.
So, the reason the state is changed when the work is running rather than
queueing is for the window when the state may be set to NVME_CTRL_DELETING,
and we don't want the reset work to proceed in that case.
What do you think about adding a new state, like NVME_CTRL_SCHED_RESET,
then leaving the NVME_CTRL_RESETTING state change as-is?
next prev parent reply other threads:[~2017-05-26 10:06 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-24 14:26 [PATCH V2 1/1] nvme: fix multiple ctrl removal scheduling Rakesh Pandit
2017-05-24 14:26 ` Rakesh Pandit
2017-05-25 8:30 ` Christoph Hellwig
2017-05-25 8:30 ` Christoph Hellwig
2017-05-26 20:12 ` Rakesh Pandit
2017-05-26 20:12 ` Rakesh Pandit
2017-05-26 10:06 ` Keith Busch [this message]
2017-05-26 10:06 ` Keith Busch
2017-05-26 15:28 ` Rakesh Pandit
2017-05-26 15:28 ` Rakesh Pandit
2017-05-30 11:58 ` Sagi Grimberg
2017-05-30 11:58 ` Sagi Grimberg
2017-05-31 16:17 ` Keith Busch
2017-05-31 16:17 ` Keith Busch
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=20170526100613.GE24894@localhost.localdomain \
--to=keith.busch@intel.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.