diff options
author | Christoph Hellwig <hch@lst.de> | 2017-08-22 11:42:24 +0200 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2017-08-29 10:22:23 +0200 |
commit | 0a72bbba493bebd53fa78e6741b86a3003f070d6 (patch) | |
tree | 6a45cab1b33026b85cca57a5063fe0b5a3130c02 | |
parent | nvme: report more detailed status codes to the block layer (diff) | |
download | linux-0a72bbba493bebd53fa78e6741b86a3003f070d6.tar.xz linux-0a72bbba493bebd53fa78e6741b86a3003f070d6.zip |
nvme: allow calling nvme_change_ctrl_state from irq context
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
-rw-r--r-- | drivers/nvme/host/core.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 4c49ec4349bc..d63e1fcf4437 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -176,9 +176,10 @@ bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, enum nvme_ctrl_state new_state) { enum nvme_ctrl_state old_state; + unsigned long flags; bool changed = false; - spin_lock_irq(&ctrl->lock); + spin_lock_irqsave(&ctrl->lock, flags); old_state = ctrl->state; switch (new_state) { @@ -239,7 +240,7 @@ bool nvme_change_ctrl_state(struct nvme_ctrl *ctrl, if (changed) ctrl->state = new_state; - spin_unlock_irq(&ctrl->lock); + spin_unlock_irqrestore(&ctrl->lock, flags); return changed; } |