nvmet-rdma: Don't flush system_wq by default during remove_one
authorMax Gurtovoy <maxg@mellanox.com>
Wed, 28 Feb 2018 11:12:38 +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 system 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/target/rdma.c

index aa8068fce0dd3b0a584add98dfa4a4e2cbde1894..a59263d6d158c19220a826f43a8ca1c903eef48d 100644 (file)
@@ -1469,8 +1469,25 @@ static struct nvmet_fabrics_ops nvmet_rdma_ops = {
 static void nvmet_rdma_remove_one(struct ib_device *ib_device, void *client_data)
 {
        struct nvmet_rdma_queue *queue, *tmp;
+       struct nvmet_rdma_device *ndev;
+       bool found = false;
+
+       mutex_lock(&device_list_mutex);
+       list_for_each_entry(ndev, &device_list, entry) {
+               if (ndev->device == ib_device) {
+                       found = true;
+                       break;
+               }
+       }
+       mutex_unlock(&device_list_mutex);
+
+       if (!found)
+               return;
 
-       /* Device is being removed, delete all queues using this device */
+       /*
+        * IB Device that is used by nvmet controllers is being removed,
+        * delete all queues using this device.
+        */
        mutex_lock(&nvmet_rdma_queue_mutex);
        list_for_each_entry_safe(queue, tmp, &nvmet_rdma_queue_list,
                                 queue_list) {