nvme-rdma: Don't flush delete_wq by default during remove_one
authorMax Gurtovoy <maxg@mellanox.com>
Wed, 28 Feb 2018 11:12:39 +0000 (13:12 +0200)
committerJens Axboe <axboe@kernel.dk>
Mon, 26 Mar 2018 14:53:43 +0000 (08:53 -0600)
The .remove_one function is called for any ib_device removal.
In case the removed device has no reference in our driver, there
is no need to flush the work queue.

Reviewed-by: Israel Rukshin <israelr@mellanox.com>
Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/rdma.c

index f5f460b..250b277 100644 (file)
@@ -2024,6 +2024,20 @@ static struct nvmf_transport_ops nvme_rdma_transport = {
 static void nvme_rdma_remove_one(struct ib_device *ib_device, void *client_data)
 {
        struct nvme_rdma_ctrl *ctrl;
+       struct nvme_rdma_device *ndev;
+       bool found = false;
+
+       mutex_lock(&device_list_mutex);
+       list_for_each_entry(ndev, &device_list, entry) {
+               if (ndev->dev == ib_device) {
+                       found = true;
+                       break;
+               }
+       }
+       mutex_unlock(&device_list_mutex);
+
+       if (!found)
+               return;
 
        /* Delete all controllers using this device */
        mutex_lock(&nvme_rdma_ctrl_mutex);