linux/drivers/nvme/target/loop.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * NVMe over Fabrics loopback device.
   4 * Copyright (c) 2015-2016 HGST, a Western Digital Company.
   5 */
   6#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   7#include <linux/scatterlist.h>
   8#include <linux/blk-mq.h>
   9#include <linux/nvme.h>
  10#include <linux/module.h>
  11#include <linux/parser.h>
  12#include "nvmet.h"
  13#include "../host/nvme.h"
  14#include "../host/fabrics.h"
  15
  16#define NVME_LOOP_MAX_SEGMENTS          256
  17
  18struct nvme_loop_iod {
  19        struct nvme_request     nvme_req;
  20        struct nvme_command     cmd;
  21        struct nvme_completion  cqe;
  22        struct nvmet_req        req;
  23        struct nvme_loop_queue  *queue;
  24        struct work_struct      work;
  25        struct sg_table         sg_table;
  26        struct scatterlist      first_sgl[];
  27};
  28
  29struct nvme_loop_ctrl {
  30        struct nvme_loop_queue  *queues;
  31
  32        struct blk_mq_tag_set   admin_tag_set;
  33
  34        struct list_head        list;
  35        struct blk_mq_tag_set   tag_set;
  36        struct nvme_loop_iod    async_event_iod;
  37        struct nvme_ctrl        ctrl;
  38
  39        struct nvmet_ctrl       *target_ctrl;
  40        struct nvmet_port       *port;
  41};
  42
  43static inline struct nvme_loop_ctrl *to_loop_ctrl(struct nvme_ctrl *ctrl)
  44{
  45        return container_of(ctrl, struct nvme_loop_ctrl, ctrl);
  46}
  47
  48enum nvme_loop_queue_flags {
  49        NVME_LOOP_Q_LIVE        = 0,
  50};
  51
  52struct nvme_loop_queue {
  53        struct nvmet_cq         nvme_cq;
  54        struct nvmet_sq         nvme_sq;
  55        struct nvme_loop_ctrl   *ctrl;
  56        unsigned long           flags;
  57};
  58
  59static LIST_HEAD(nvme_loop_ports);
  60static DEFINE_MUTEX(nvme_loop_ports_mutex);
  61
  62static LIST_HEAD(nvme_loop_ctrl_list);
  63static DEFINE_MUTEX(nvme_loop_ctrl_mutex);
  64
  65static void nvme_loop_queue_response(struct nvmet_req *nvme_req);
  66static void nvme_loop_delete_ctrl(struct nvmet_ctrl *ctrl);
  67
  68static const struct nvmet_fabrics_ops nvme_loop_ops;
  69
  70static inline int nvme_loop_queue_idx(struct nvme_loop_queue *queue)
  71{
  72        return queue - queue->ctrl->queues;
  73}
  74
  75static void nvme_loop_complete_rq(struct request *req)
  76{
  77        struct nvme_loop_iod *iod = blk_mq_rq_to_pdu(req);
  78
  79        nvme_cleanup_cmd(req);
  80        sg_free_table_chained(&iod->sg_table, SG_CHUNK_SIZE);
  81        nvme_complete_rq(req);
  82}
  83
  84static struct blk_mq_tags *nvme_loop_tagset(struct nvme_loop_queue *queue)
  85{
  86        u32 queue_idx = nvme_loop_queue_idx(queue);
  87
  88        if (queue_idx == 0)
  89                return queue->ctrl->admin_tag_set.tags[queue_idx];
  90        return queue->ctrl->tag_set.tags[queue_idx - 1];
  91}
  92
  93static void nvme_loop_queue_response(struct nvmet_req *req)
  94{
  95        struct nvme_loop_queue *queue =
  96                container_of(req->sq, struct nvme_loop_queue, nvme_sq);
  97        struct nvme_completion *cqe = req->cqe;
  98
  99        /*
 100         * AEN requests are special as they don't time out and can
 101         * survive any kind of queue freeze and often don't respond to
 102         * aborts.  We don't even bother to allocate a struct request
 103         * for them but rather special case them here.
 104         */
 105        if (unlikely(nvme_loop_queue_idx(queue) == 0 &&
 106                        cqe->command_id >= NVME_AQ_BLK_MQ_DEPTH)) {
 107                nvme_complete_async_event(&queue->ctrl->ctrl, cqe->status,
 108                                &cqe->result);
 109        } else {
 110                struct request *rq;
 111
 112                rq = blk_mq_tag_to_rq(nvme_loop_tagset(queue), cqe->command_id);
 113                if (!rq) {
 114                        dev_err(queue->ctrl->ctrl.device,
 115                                "tag 0x%x on queue %d not found\n",
 116                                cqe->command_id, nvme_loop_queue_idx(queue));
 117                        return;
 118                }
 119
 120                nvme_end_request(rq, cqe->status, cqe->result);
 121        }
 122}
 123
 124static void nvme_loop_execute_work(struct work_struct *work)
 125{
 126        struct nvme_loop_iod *iod =
 127                container_of(work, struct nvme_loop_iod, work);
 128
 129        nvmet_req_execute(&iod->req);
 130}
 131
 132static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx,
 133                const struct blk_mq_queue_data *bd)
 134{
 135        struct nvme_ns *ns = hctx->queue->queuedata;
 136        struct nvme_loop_queue *queue = hctx->driver_data;
 137        struct request *req = bd->rq;
 138        struct nvme_loop_iod *iod = blk_mq_rq_to_pdu(req);
 139        bool queue_ready = test_bit(NVME_LOOP_Q_LIVE, &queue->flags);
 140        blk_status_t ret;
 141
 142        if (!nvmf_check_ready(&queue->ctrl->ctrl, req, queue_ready))
 143                return nvmf_fail_nonready_command(&queue->ctrl->ctrl, req);
 144
 145        ret = nvme_setup_cmd(ns, req, &iod->cmd);
 146        if (ret)
 147                return ret;
 148
 149        blk_mq_start_request(req);
 150        iod->cmd.common.flags |= NVME_CMD_SGL_METABUF;
 151        iod->req.port = queue->ctrl->port;
 152        if (!nvmet_req_init(&iod->req, &queue->nvme_cq,
 153                        &queue->nvme_sq, &nvme_loop_ops))
 154                return BLK_STS_OK;
 155
 156        if (blk_rq_nr_phys_segments(req)) {
 157                iod->sg_table.sgl = iod->first_sgl;
 158                if (sg_alloc_table_chained(&iod->sg_table,
 159                                blk_rq_nr_phys_segments(req),
 160                                iod->sg_table.sgl, SG_CHUNK_SIZE))
 161                        return BLK_STS_RESOURCE;
 162
 163                iod->req.sg = iod->sg_table.sgl;
 164                iod->req.sg_cnt = blk_rq_map_sg(req->q, req, iod->sg_table.sgl);
 165                iod->req.transfer_len = blk_rq_payload_bytes(req);
 166        }
 167
 168        schedule_work(&iod->work);
 169        return BLK_STS_OK;
 170}
 171
 172static void nvme_loop_submit_async_event(struct nvme_ctrl *arg)
 173{
 174        struct nvme_loop_ctrl *ctrl = to_loop_ctrl(arg);
 175        struct nvme_loop_queue *queue = &ctrl->queues[0];
 176        struct nvme_loop_iod *iod = &ctrl->async_event_iod;
 177
 178        memset(&iod->cmd, 0, sizeof(iod->cmd));
 179        iod->cmd.common.opcode = nvme_admin_async_event;
 180        iod->cmd.common.command_id = NVME_AQ_BLK_MQ_DEPTH;
 181        iod->cmd.common.flags |= NVME_CMD_SGL_METABUF;
 182
 183        if (!nvmet_req_init(&iod->req, &queue->nvme_cq, &queue->nvme_sq,
 184                        &nvme_loop_ops)) {
 185                dev_err(ctrl->ctrl.device, "failed async event work\n");
 186                return;
 187        }
 188
 189        schedule_work(&iod->work);
 190}
 191
 192static int nvme_loop_init_iod(struct nvme_loop_ctrl *ctrl,
 193                struct nvme_loop_iod *iod, unsigned int queue_idx)
 194{
 195        iod->req.cmd = &iod->cmd;
 196        iod->req.cqe = &iod->cqe;
 197        iod->queue = &ctrl->queues[queue_idx];
 198        INIT_WORK(&iod->work, nvme_loop_execute_work);
 199        return 0;
 200}
 201
 202static int nvme_loop_init_request(struct blk_mq_tag_set *set,
 203                struct request *req, unsigned int hctx_idx,
 204                unsigned int numa_node)
 205{
 206        struct nvme_loop_ctrl *ctrl = set->driver_data;
 207
 208        nvme_req(req)->ctrl = &ctrl->ctrl;
 209        return nvme_loop_init_iod(ctrl, blk_mq_rq_to_pdu(req),
 210                        (set == &ctrl->tag_set) ? hctx_idx + 1 : 0);
 211}
 212
 213static int nvme_loop_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
 214                unsigned int hctx_idx)
 215{
 216        struct nvme_loop_ctrl *ctrl = data;
 217        struct nvme_loop_queue *queue = &ctrl->queues[hctx_idx + 1];
 218
 219        BUG_ON(hctx_idx >= ctrl->ctrl.queue_count);
 220
 221        hctx->driver_data = queue;
 222        return 0;
 223}
 224
 225static int nvme_loop_init_admin_hctx(struct blk_mq_hw_ctx *hctx, void *data,
 226                unsigned int hctx_idx)
 227{
 228        struct nvme_loop_ctrl *ctrl = data;
 229        struct nvme_loop_queue *queue = &ctrl->queues[0];
 230
 231        BUG_ON(hctx_idx != 0);
 232
 233        hctx->driver_data = queue;
 234        return 0;
 235}
 236
 237static const struct blk_mq_ops nvme_loop_mq_ops = {
 238        .queue_rq       = nvme_loop_queue_rq,
 239        .complete       = nvme_loop_complete_rq,
 240        .init_request   = nvme_loop_init_request,
 241        .init_hctx      = nvme_loop_init_hctx,
 242};
 243
 244static const struct blk_mq_ops nvme_loop_admin_mq_ops = {
 245        .queue_rq       = nvme_loop_queue_rq,
 246        .complete       = nvme_loop_complete_rq,
 247        .init_request   = nvme_loop_init_request,
 248        .init_hctx      = nvme_loop_init_admin_hctx,
 249};
 250
 251static void nvme_loop_destroy_admin_queue(struct nvme_loop_ctrl *ctrl)
 252{
 253        clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags);
 254        nvmet_sq_destroy(&ctrl->queues[0].nvme_sq);
 255        blk_cleanup_queue(ctrl->ctrl.admin_q);
 256        blk_mq_free_tag_set(&ctrl->admin_tag_set);
 257}
 258
 259static void nvme_loop_free_ctrl(struct nvme_ctrl *nctrl)
 260{
 261        struct nvme_loop_ctrl *ctrl = to_loop_ctrl(nctrl);
 262
 263        if (list_empty(&ctrl->list))
 264                goto free_ctrl;
 265
 266        mutex_lock(&nvme_loop_ctrl_mutex);
 267        list_del(&ctrl->list);
 268        mutex_unlock(&nvme_loop_ctrl_mutex);
 269
 270        if (nctrl->tagset) {
 271                blk_cleanup_queue(ctrl->ctrl.connect_q);
 272                blk_mq_free_tag_set(&ctrl->tag_set);
 273        }
 274        kfree(ctrl->queues);
 275        nvmf_free_options(nctrl->opts);
 276free_ctrl:
 277        kfree(ctrl);
 278}
 279
 280static void nvme_loop_destroy_io_queues(struct nvme_loop_ctrl *ctrl)
 281{
 282        int i;
 283
 284        for (i = 1; i < ctrl->ctrl.queue_count; i++) {
 285                clear_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[i].flags);
 286                nvmet_sq_destroy(&ctrl->queues[i].nvme_sq);
 287        }
 288}
 289
 290static int nvme_loop_init_io_queues(struct nvme_loop_ctrl *ctrl)
 291{
 292        struct nvmf_ctrl_options *opts = ctrl->ctrl.opts;
 293        unsigned int nr_io_queues;
 294        int ret, i;
 295
 296        nr_io_queues = min(opts->nr_io_queues, num_online_cpus());
 297        ret = nvme_set_queue_count(&ctrl->ctrl, &nr_io_queues);
 298        if (ret || !nr_io_queues)
 299                return ret;
 300
 301        dev_info(ctrl->ctrl.device, "creating %d I/O queues.\n", nr_io_queues);
 302
 303        for (i = 1; i <= nr_io_queues; i++) {
 304                ctrl->queues[i].ctrl = ctrl;
 305                ret = nvmet_sq_init(&ctrl->queues[i].nvme_sq);
 306                if (ret)
 307                        goto out_destroy_queues;
 308
 309                ctrl->ctrl.queue_count++;
 310        }
 311
 312        return 0;
 313
 314out_destroy_queues:
 315        nvme_loop_destroy_io_queues(ctrl);
 316        return ret;
 317}
 318
 319static int nvme_loop_connect_io_queues(struct nvme_loop_ctrl *ctrl)
 320{
 321        int i, ret;
 322
 323        for (i = 1; i < ctrl->ctrl.queue_count; i++) {
 324                ret = nvmf_connect_io_queue(&ctrl->ctrl, i, false);
 325                if (ret)
 326                        return ret;
 327                set_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[i].flags);
 328        }
 329
 330        return 0;
 331}
 332
 333static int nvme_loop_configure_admin_queue(struct nvme_loop_ctrl *ctrl)
 334{
 335        int error;
 336
 337        memset(&ctrl->admin_tag_set, 0, sizeof(ctrl->admin_tag_set));
 338        ctrl->admin_tag_set.ops = &nvme_loop_admin_mq_ops;
 339        ctrl->admin_tag_set.queue_depth = NVME_AQ_MQ_TAG_DEPTH;
 340        ctrl->admin_tag_set.reserved_tags = 2; /* connect + keep-alive */
 341        ctrl->admin_tag_set.numa_node = NUMA_NO_NODE;
 342        ctrl->admin_tag_set.cmd_size = sizeof(struct nvme_loop_iod) +
 343                SG_CHUNK_SIZE * sizeof(struct scatterlist);
 344        ctrl->admin_tag_set.driver_data = ctrl;
 345        ctrl->admin_tag_set.nr_hw_queues = 1;
 346        ctrl->admin_tag_set.timeout = ADMIN_TIMEOUT;
 347        ctrl->admin_tag_set.flags = BLK_MQ_F_NO_SCHED;
 348
 349        ctrl->queues[0].ctrl = ctrl;
 350        error = nvmet_sq_init(&ctrl->queues[0].nvme_sq);
 351        if (error)
 352                return error;
 353        ctrl->ctrl.queue_count = 1;
 354
 355        error = blk_mq_alloc_tag_set(&ctrl->admin_tag_set);
 356        if (error)
 357                goto out_free_sq;
 358        ctrl->ctrl.admin_tagset = &ctrl->admin_tag_set;
 359
 360        ctrl->ctrl.admin_q = blk_mq_init_queue(&ctrl->admin_tag_set);
 361        if (IS_ERR(ctrl->ctrl.admin_q)) {
 362                error = PTR_ERR(ctrl->ctrl.admin_q);
 363                goto out_free_tagset;
 364        }
 365
 366        error = nvmf_connect_admin_queue(&ctrl->ctrl);
 367        if (error)
 368                goto out_cleanup_queue;
 369
 370        set_bit(NVME_LOOP_Q_LIVE, &ctrl->queues[0].flags);
 371
 372        error = nvmf_reg_read64(&ctrl->ctrl, NVME_REG_CAP, &ctrl->ctrl.cap);
 373        if (error) {
 374                dev_err(ctrl->ctrl.device,
 375                        "prop_get NVME_REG_CAP failed\n");
 376                goto out_cleanup_queue;
 377        }
 378
 379        ctrl->ctrl.sqsize =
 380                min_t(int, NVME_CAP_MQES(ctrl->ctrl.cap), ctrl->ctrl.sqsize);
 381
 382        error = nvme_enable_ctrl(&ctrl->ctrl, ctrl->ctrl.cap);
 383        if (error)
 384                goto out_cleanup_queue;
 385
 386        ctrl->ctrl.max_hw_sectors =
 387                (NVME_LOOP_MAX_SEGMENTS - 1) << (PAGE_SHIFT - 9);
 388
 389        error = nvme_init_identify(&ctrl->ctrl);
 390        if (error)
 391                goto out_cleanup_queue;
 392
 393        return 0;
 394
 395out_cleanup_queue:
 396        blk_cleanup_queue(ctrl->ctrl.admin_q);
 397out_free_tagset:
 398        blk_mq_free_tag_set(&ctrl->admin_tag_set);
 399out_free_sq:
 400        nvmet_sq_destroy(&ctrl->queues[0].nvme_sq);
 401        return error;
 402}
 403
 404static void nvme_loop_shutdown_ctrl(struct nvme_loop_ctrl *ctrl)
 405{
 406        if (ctrl->ctrl.queue_count > 1) {
 407                nvme_stop_queues(&ctrl->ctrl);
 408                blk_mq_tagset_busy_iter(&ctrl->tag_set,
 409                                        nvme_cancel_request, &ctrl->ctrl);
 410                nvme_loop_destroy_io_queues(ctrl);
 411        }
 412
 413        if (ctrl->ctrl.state == NVME_CTRL_LIVE)
 414                nvme_shutdown_ctrl(&ctrl->ctrl);
 415
 416        blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
 417        blk_mq_tagset_busy_iter(&ctrl->admin_tag_set,
 418                                nvme_cancel_request, &ctrl->ctrl);
 419        blk_mq_unquiesce_queue(ctrl->ctrl.admin_q);
 420        nvme_loop_destroy_admin_queue(ctrl);
 421}
 422
 423static void nvme_loop_delete_ctrl_host(struct nvme_ctrl *ctrl)
 424{
 425        nvme_loop_shutdown_ctrl(to_loop_ctrl(ctrl));
 426}
 427
 428static void nvme_loop_delete_ctrl(struct nvmet_ctrl *nctrl)
 429{
 430        struct nvme_loop_ctrl *ctrl;
 431
 432        mutex_lock(&nvme_loop_ctrl_mutex);
 433        list_for_each_entry(ctrl, &nvme_loop_ctrl_list, list) {
 434                if (ctrl->ctrl.cntlid == nctrl->cntlid)
 435                        nvme_delete_ctrl(&ctrl->ctrl);
 436        }
 437        mutex_unlock(&nvme_loop_ctrl_mutex);
 438}
 439
 440static void nvme_loop_reset_ctrl_work(struct work_struct *work)
 441{
 442        struct nvme_loop_ctrl *ctrl =
 443                container_of(work, struct nvme_loop_ctrl, ctrl.reset_work);
 444        bool changed;
 445        int ret;
 446
 447        nvme_stop_ctrl(&ctrl->ctrl);
 448        nvme_loop_shutdown_ctrl(ctrl);
 449
 450        if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_CONNECTING)) {
 451                /* state change failure should never happen */
 452                WARN_ON_ONCE(1);
 453                return;
 454        }
 455
 456        ret = nvme_loop_configure_admin_queue(ctrl);
 457        if (ret)
 458                goto out_disable;
 459
 460        ret = nvme_loop_init_io_queues(ctrl);
 461        if (ret)
 462                goto out_destroy_admin;
 463
 464        ret = nvme_loop_connect_io_queues(ctrl);
 465        if (ret)
 466                goto out_destroy_io;
 467
 468        blk_mq_update_nr_hw_queues(&ctrl->tag_set,
 469                        ctrl->ctrl.queue_count - 1);
 470
 471        changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
 472        WARN_ON_ONCE(!changed);
 473
 474        nvme_start_ctrl(&ctrl->ctrl);
 475
 476        return;
 477
 478out_destroy_io:
 479        nvme_loop_destroy_io_queues(ctrl);
 480out_destroy_admin:
 481        nvme_loop_destroy_admin_queue(ctrl);
 482out_disable:
 483        dev_warn(ctrl->ctrl.device, "Removing after reset failure\n");
 484        nvme_uninit_ctrl(&ctrl->ctrl);
 485        nvme_put_ctrl(&ctrl->ctrl);
 486}
 487
 488static const struct nvme_ctrl_ops nvme_loop_ctrl_ops = {
 489        .name                   = "loop",
 490        .module                 = THIS_MODULE,
 491        .flags                  = NVME_F_FABRICS,
 492        .reg_read32             = nvmf_reg_read32,
 493        .reg_read64             = nvmf_reg_read64,
 494        .reg_write32            = nvmf_reg_write32,
 495        .free_ctrl              = nvme_loop_free_ctrl,
 496        .submit_async_event     = nvme_loop_submit_async_event,
 497        .delete_ctrl            = nvme_loop_delete_ctrl_host,
 498        .get_address            = nvmf_get_address,
 499};
 500
 501static int nvme_loop_create_io_queues(struct nvme_loop_ctrl *ctrl)
 502{
 503        int ret;
 504
 505        ret = nvme_loop_init_io_queues(ctrl);
 506        if (ret)
 507                return ret;
 508
 509        memset(&ctrl->tag_set, 0, sizeof(ctrl->tag_set));
 510        ctrl->tag_set.ops = &nvme_loop_mq_ops;
 511        ctrl->tag_set.queue_depth = ctrl->ctrl.opts->queue_size;
 512        ctrl->tag_set.reserved_tags = 1; /* fabric connect */
 513        ctrl->tag_set.numa_node = NUMA_NO_NODE;
 514        ctrl->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
 515        ctrl->tag_set.cmd_size = sizeof(struct nvme_loop_iod) +
 516                SG_CHUNK_SIZE * sizeof(struct scatterlist);
 517        ctrl->tag_set.driver_data = ctrl;
 518        ctrl->tag_set.nr_hw_queues = ctrl->ctrl.queue_count - 1;
 519        ctrl->tag_set.timeout = NVME_IO_TIMEOUT;
 520        ctrl->ctrl.tagset = &ctrl->tag_set;
 521
 522        ret = blk_mq_alloc_tag_set(&ctrl->tag_set);
 523        if (ret)
 524                goto out_destroy_queues;
 525
 526        ctrl->ctrl.connect_q = blk_mq_init_queue(&ctrl->tag_set);
 527        if (IS_ERR(ctrl->ctrl.connect_q)) {
 528                ret = PTR_ERR(ctrl->ctrl.connect_q);
 529                goto out_free_tagset;
 530        }
 531
 532        ret = nvme_loop_connect_io_queues(ctrl);
 533        if (ret)
 534                goto out_cleanup_connect_q;
 535
 536        return 0;
 537
 538out_cleanup_connect_q:
 539        blk_cleanup_queue(ctrl->ctrl.connect_q);
 540out_free_tagset:
 541        blk_mq_free_tag_set(&ctrl->tag_set);
 542out_destroy_queues:
 543        nvme_loop_destroy_io_queues(ctrl);
 544        return ret;
 545}
 546
 547static struct nvmet_port *nvme_loop_find_port(struct nvme_ctrl *ctrl)
 548{
 549        struct nvmet_port *p, *found = NULL;
 550
 551        mutex_lock(&nvme_loop_ports_mutex);
 552        list_for_each_entry(p, &nvme_loop_ports, entry) {
 553                /* if no transport address is specified use the first port */
 554                if ((ctrl->opts->mask & NVMF_OPT_TRADDR) &&
 555                    strcmp(ctrl->opts->traddr, p->disc_addr.traddr))
 556                        continue;
 557                found = p;
 558                break;
 559        }
 560        mutex_unlock(&nvme_loop_ports_mutex);
 561        return found;
 562}
 563
 564static struct nvme_ctrl *nvme_loop_create_ctrl(struct device *dev,
 565                struct nvmf_ctrl_options *opts)
 566{
 567        struct nvme_loop_ctrl *ctrl;
 568        bool changed;
 569        int ret;
 570
 571        ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
 572        if (!ctrl)
 573                return ERR_PTR(-ENOMEM);
 574        ctrl->ctrl.opts = opts;
 575        INIT_LIST_HEAD(&ctrl->list);
 576
 577        INIT_WORK(&ctrl->ctrl.reset_work, nvme_loop_reset_ctrl_work);
 578
 579        ret = nvme_init_ctrl(&ctrl->ctrl, dev, &nvme_loop_ctrl_ops,
 580                                0 /* no quirks, we're perfect! */);
 581        if (ret)
 582                goto out_put_ctrl;
 583
 584        ret = -ENOMEM;
 585
 586        ctrl->ctrl.sqsize = opts->queue_size - 1;
 587        ctrl->ctrl.kato = opts->kato;
 588        ctrl->port = nvme_loop_find_port(&ctrl->ctrl);
 589
 590        ctrl->queues = kcalloc(opts->nr_io_queues + 1, sizeof(*ctrl->queues),
 591                        GFP_KERNEL);
 592        if (!ctrl->queues)
 593                goto out_uninit_ctrl;
 594
 595        ret = nvme_loop_configure_admin_queue(ctrl);
 596        if (ret)
 597                goto out_free_queues;
 598
 599        if (opts->queue_size > ctrl->ctrl.maxcmd) {
 600                /* warn if maxcmd is lower than queue_size */
 601                dev_warn(ctrl->ctrl.device,
 602                        "queue_size %zu > ctrl maxcmd %u, clamping down\n",
 603                        opts->queue_size, ctrl->ctrl.maxcmd);
 604                opts->queue_size = ctrl->ctrl.maxcmd;
 605        }
 606
 607        if (opts->nr_io_queues) {
 608                ret = nvme_loop_create_io_queues(ctrl);
 609                if (ret)
 610                        goto out_remove_admin_queue;
 611        }
 612
 613        nvme_loop_init_iod(ctrl, &ctrl->async_event_iod, 0);
 614
 615        dev_info(ctrl->ctrl.device,
 616                 "new ctrl: \"%s\"\n", ctrl->ctrl.opts->subsysnqn);
 617
 618        nvme_get_ctrl(&ctrl->ctrl);
 619
 620        changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE);
 621        WARN_ON_ONCE(!changed);
 622
 623        mutex_lock(&nvme_loop_ctrl_mutex);
 624        list_add_tail(&ctrl->list, &nvme_loop_ctrl_list);
 625        mutex_unlock(&nvme_loop_ctrl_mutex);
 626
 627        nvme_start_ctrl(&ctrl->ctrl);
 628
 629        return &ctrl->ctrl;
 630
 631out_remove_admin_queue:
 632        nvme_loop_destroy_admin_queue(ctrl);
 633out_free_queues:
 634        kfree(ctrl->queues);
 635out_uninit_ctrl:
 636        nvme_uninit_ctrl(&ctrl->ctrl);
 637out_put_ctrl:
 638        nvme_put_ctrl(&ctrl->ctrl);
 639        if (ret > 0)
 640                ret = -EIO;
 641        return ERR_PTR(ret);
 642}
 643
 644static int nvme_loop_add_port(struct nvmet_port *port)
 645{
 646        mutex_lock(&nvme_loop_ports_mutex);
 647        list_add_tail(&port->entry, &nvme_loop_ports);
 648        mutex_unlock(&nvme_loop_ports_mutex);
 649        return 0;
 650}
 651
 652static void nvme_loop_remove_port(struct nvmet_port *port)
 653{
 654        mutex_lock(&nvme_loop_ports_mutex);
 655        list_del_init(&port->entry);
 656        mutex_unlock(&nvme_loop_ports_mutex);
 657
 658        /*
 659         * Ensure any ctrls that are in the process of being
 660         * deleted are in fact deleted before we return
 661         * and free the port. This is to prevent active
 662         * ctrls from using a port after it's freed.
 663         */
 664        flush_workqueue(nvme_delete_wq);
 665}
 666
 667static const struct nvmet_fabrics_ops nvme_loop_ops = {
 668        .owner          = THIS_MODULE,
 669        .type           = NVMF_TRTYPE_LOOP,
 670        .add_port       = nvme_loop_add_port,
 671        .remove_port    = nvme_loop_remove_port,
 672        .queue_response = nvme_loop_queue_response,
 673        .delete_ctrl    = nvme_loop_delete_ctrl,
 674};
 675
 676static struct nvmf_transport_ops nvme_loop_transport = {
 677        .name           = "loop",
 678        .module         = THIS_MODULE,
 679        .create_ctrl    = nvme_loop_create_ctrl,
 680        .allowed_opts   = NVMF_OPT_TRADDR,
 681};
 682
 683static int __init nvme_loop_init_module(void)
 684{
 685        int ret;
 686
 687        ret = nvmet_register_transport(&nvme_loop_ops);
 688        if (ret)
 689                return ret;
 690
 691        ret = nvmf_register_transport(&nvme_loop_transport);
 692        if (ret)
 693                nvmet_unregister_transport(&nvme_loop_ops);
 694
 695        return ret;
 696}
 697
 698static void __exit nvme_loop_cleanup_module(void)
 699{
 700        struct nvme_loop_ctrl *ctrl, *next;
 701
 702        nvmf_unregister_transport(&nvme_loop_transport);
 703        nvmet_unregister_transport(&nvme_loop_ops);
 704
 705        mutex_lock(&nvme_loop_ctrl_mutex);
 706        list_for_each_entry_safe(ctrl, next, &nvme_loop_ctrl_list, list)
 707                nvme_delete_ctrl(&ctrl->ctrl);
 708        mutex_unlock(&nvme_loop_ctrl_mutex);
 709
 710        flush_workqueue(nvme_delete_wq);
 711}
 712
 713module_init(nvme_loop_init_module);
 714module_exit(nvme_loop_cleanup_module);
 715
 716MODULE_LICENSE("GPL v2");
 717MODULE_ALIAS("nvmet-transport-254"); /* 254 == NVMF_TRTYPE_LOOP */
 718