|
@@ -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) {
|