summaryrefslogtreecommitdiff
path: root/include/linux/nvme.h
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2014-02-21 14:13:44 -0700
committerMatthew Wilcox <matthew.r.wilcox@intel.com>2014-03-24 08:45:57 -0400
commit5a92e700af2e5e0e6404988d6a7f2ed3dad3f46f (patch)
tree0de62a3873a05bb0e21fc5195be6ff20af5366cf /include/linux/nvme.h
parentfb35e914b3f88cda9ee6f9d776910c35269c4ecf (diff)
downloadlwn-5a92e700af2e5e0e6404988d6a7f2ed3dad3f46f.tar.gz
lwn-5a92e700af2e5e0e6404988d6a7f2ed3dad3f46f.zip
NVMe: RCU protected access to io queues
This adds rcu protected access to nvme_queue to fix a race between a surprise removal freeing the queue and a thread with open reference on a NVMe block device using that queue. The queues do not need to be rcu protected during the initialization or shutdown parts, so I've added a helper function for raw deferencing to get around the sparse errors. There is still a hole in the IOCTL path for the same problem, which is fixed in a subsequent patch. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Matthew Wilcox <matthew.r.wilcox@intel.com>
Diffstat (limited to 'include/linux/nvme.h')
-rw-r--r--include/linux/nvme.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 69ae03f6eb15..98d367b06f9c 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -73,7 +73,7 @@ enum {
*/
struct nvme_dev {
struct list_head node;
- struct nvme_queue **queues;
+ struct nvme_queue __rcu **queues;
u32 __iomem *dbs;
struct pci_dev *pci_dev;
struct dma_pool *prp_page_pool;