diff options
| author | Max Gurtovoy <mgurtovoy@nvidia.com> | 2021-09-23 00:55:36 +0300 | 
|---|---|---|
| committer | Christoph Hellwig <hch@lst.de> | 2021-10-20 19:16:01 +0200 | 
| commit | 6d1555cc41c088d738b4968009b32aaeda8542a3 (patch) | |
| tree | 4c7c2848a45e7e96afc1b85b36181c5d7d55c6de | |
| parent | 44c3c6257e99c6284f312206de73783575fc8906 (diff) | |
nvmet: add get_max_queue_size op for controllers
Some transports, such as RDMA, would like to set the queue size
according to device/port/ctrl characteristics. Add a new nvmet transport
op that is called during ctrl initialization. This will not effect
transports that don't implement this option.
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
| -rw-r--r-- | drivers/nvme/target/core.c | 8 | ||||
| -rw-r--r-- | drivers/nvme/target/nvmet.h | 1 | 
2 files changed, 6 insertions, 3 deletions
| diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index b8425fa34300..93107af3310d 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -1205,7 +1205,10 @@ static void nvmet_init_cap(struct nvmet_ctrl *ctrl)  	/* CC.EN timeout in 500msec units: */  	ctrl->cap |= (15ULL << 24);  	/* maximum queue entries supported: */ -	ctrl->cap |= NVMET_QUEUE_SIZE - 1; +	if (ctrl->ops->get_max_queue_size) +		ctrl->cap |= ctrl->ops->get_max_queue_size(ctrl) - 1; +	else +		ctrl->cap |= NVMET_QUEUE_SIZE - 1;  	if (nvmet_is_passthru_subsys(ctrl->subsys))  		nvmet_passthrough_override_cap(ctrl); @@ -1367,6 +1370,7 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,  	mutex_init(&ctrl->lock);  	ctrl->port = req->port; +	ctrl->ops = req->ops;  	INIT_WORK(&ctrl->async_event_work, nvmet_async_event_work);  	INIT_LIST_HEAD(&ctrl->async_events); @@ -1405,8 +1409,6 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,  	}  	ctrl->cntlid = ret; -	ctrl->ops = req->ops; -  	/*  	 * Discovery controllers may use some arbitrary high value  	 * in order to cleanup stale discovery sessions diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h index 7143c7fa7464..f8e0ee131dc6 100644 --- a/drivers/nvme/target/nvmet.h +++ b/drivers/nvme/target/nvmet.h @@ -309,6 +309,7 @@ struct nvmet_fabrics_ops {  	u16 (*install_queue)(struct nvmet_sq *nvme_sq);  	void (*discovery_chg)(struct nvmet_port *port);  	u8 (*get_mdts)(const struct nvmet_ctrl *ctrl); +	u16 (*get_max_queue_size)(const struct nvmet_ctrl *ctrl);  };  #define NVMET_MAX_INLINE_BIOVEC	8 | 
