On 2017/10/23 22:51, Christoph Hellwig wrote: > @@ -2427,20 +2681,46 @@ static struct nvme_ns_head *nvme_alloc_ns_head(struct nvme_ctrl *ctrl, > if (ret) { > dev_err(ctrl->device, > "duplicate IDs for nsid %d\n", nsid); > - goto out_free_head; > + goto out_release_instance; > } > > + ret = -ENOMEM; > + q = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE); > + if (!q) > + goto out_free_head; > + q->queuedata = head; > + blk_queue_make_request(q, nvme_ns_head_make_request); > + q->poll_fn = nvme_ns_head_poll; > + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q); > + /* set to a default value for 512 until disk is validated */ > + blk_queue_logical_block_size(q, 512); > + nvme_set_queue_limits(ctrl, q); > + > + head->disk = alloc_disk(0); > + if (!head->disk) > + goto out_cleanup_queue; > + head->disk->fops = &nvme_ns_head_ops; > + head->disk->private_data = head; > + head->disk->queue = q; > + head->disk->flags = GENHD_FL_EXT_DEVT; > + sprintf(head->disk->disk_name, "nvme%dn%d", > + ctrl->subsys->instance, nsid); Is it okay to use head->instance instead of nsid for disk name nvme#n# ? Becuase _nsid_ sets are not continuous sometimes, so disk name is ugly in that case.