nvme: make nvmf_register_transport require a create_ctrl callback
authorJohannes Thumshirn <jthumshirn@suse.de>
Fri, 27 Jan 2017 08:03:45 +0000 (09:03 +0100)
committerJens Axboe <axboe@fb.com>
Wed, 22 Feb 2017 20:34:00 +0000 (13:34 -0700)
nvmf_create_ctrl() relys on the presence of a create_crtl callback in the
registered nvmf_transport_ops, so make nvmf_register_transport require one.

Update the available call-sites as well to reflect these changes.

Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/nvme/host/fabrics.c
drivers/nvme/host/fabrics.h
drivers/nvme/host/fc.c
drivers/nvme/host/rdma.c
drivers/nvme/target/loop.c

index 916d1360805964cbe6a095576ba2049af52384f8..5b7386f69f4de5571112bcc504134c8d99744793 100644 (file)
@@ -480,11 +480,16 @@ EXPORT_SYMBOL_GPL(nvmf_connect_io_queue);
  * being implemented to the common NVMe fabrics library. Part of
  * the overall init sequence of starting up a fabrics driver.
  */
-void nvmf_register_transport(struct nvmf_transport_ops *ops)
+int nvmf_register_transport(struct nvmf_transport_ops *ops)
 {
+       if (!ops->create_ctrl)
+               return -EINVAL;
+
        mutex_lock(&nvmf_transports_mutex);
        list_add_tail(&ops->entry, &nvmf_transports);
        mutex_unlock(&nvmf_transports_mutex);
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(nvmf_register_transport);
 
index 924145c979f136e167c72448b5998df15479a670..156018182ce43bbf70fe34fa1ff71b6df2e4456b 100644 (file)
@@ -128,7 +128,7 @@ int nvmf_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val);
 int nvmf_reg_write32(struct nvme_ctrl *ctrl, u32 off, u32 val);
 int nvmf_connect_admin_queue(struct nvme_ctrl *ctrl);
 int nvmf_connect_io_queue(struct nvme_ctrl *ctrl, u16 qid);
-void nvmf_register_transport(struct nvmf_transport_ops *ops);
+int nvmf_register_transport(struct nvmf_transport_ops *ops);
 void nvmf_unregister_transport(struct nvmf_transport_ops *ops);
 void nvmf_free_options(struct nvmf_ctrl_options *opts);
 const char *nvmf_get_subsysnqn(struct nvme_ctrl *ctrl);
index fb51a8de9b29a770c93a34dfca7b3264e8dd0a6a..6186fde718f9aacfa45b52220b5a9b0d2fea32df 100644 (file)
@@ -2562,8 +2562,7 @@ static int __init nvme_fc_init_module(void)
        if (!nvme_fc_wq)
                return -ENOMEM;
 
-       nvmf_register_transport(&nvme_fc_transport);
-       return 0;
+       return nvmf_register_transport(&nvme_fc_transport);
 }
 
 static void __exit nvme_fc_exit_module(void)
index a75e95d42b3febf5edba65c4ba7ed5181aa08c20..aedac6e28c6fb5f9b6c57f1f48000f754ac4f3e2 100644 (file)
@@ -2063,8 +2063,7 @@ static int __init nvme_rdma_init_module(void)
                return ret;
        }
 
-       nvmf_register_transport(&nvme_rdma_transport);
-       return 0;
+       return nvmf_register_transport(&nvme_rdma_transport);
 }
 
 static void __exit nvme_rdma_cleanup_module(void)
index f3862e38f5748d8e21b4a55574cac30c7cf2054a..d1f06e7768ff1d7ff6ee787ff6d94eb01576252f 100644 (file)
@@ -724,8 +724,7 @@ static int __init nvme_loop_init_module(void)
        ret = nvmet_register_transport(&nvme_loop_ops);
        if (ret)
                return ret;
-       nvmf_register_transport(&nvme_loop_transport);
-       return 0;
+       return nvmf_register_transport(&nvme_loop_transport);
 }
 
 static void __exit nvme_loop_cleanup_module(void)