diff options
Diffstat (limited to 'drivers/nvme/host/tcp.c')
| -rw-r--r-- | drivers/nvme/host/tcp.c | 29 | 
1 files changed, 16 insertions, 13 deletions
| diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 3c1c29dd3020..33bc83d8d992 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -926,12 +926,14 @@ static void nvme_tcp_fail_request(struct nvme_tcp_request *req)  static int nvme_tcp_try_send_data(struct nvme_tcp_request *req)  {  	struct nvme_tcp_queue *queue = req->queue; +	int req_data_len = req->data_len;  	while (true) {  		struct page *page = nvme_tcp_req_cur_page(req);  		size_t offset = nvme_tcp_req_cur_offset(req);  		size_t len = nvme_tcp_req_cur_length(req);  		bool last = nvme_tcp_pdu_last_send(req, len); +		int req_data_sent = req->data_sent;  		int ret, flags = MSG_DONTWAIT;  		if (last && !queue->data_digest && !nvme_tcp_queue_more(queue)) @@ -958,7 +960,7 @@ static int nvme_tcp_try_send_data(struct nvme_tcp_request *req)  		 * in the request where we don't want to modify it as we may  		 * compete with the RX path completing the request.  		 */ -		if (req->data_sent + ret < req->data_len) +		if (req_data_sent + ret < req_data_len)  			nvme_tcp_advance_req(req, ret);  		/* fully successful last send in current PDU */ @@ -1048,10 +1050,11 @@ static int nvme_tcp_try_send_data_pdu(struct nvme_tcp_request *req)  static int nvme_tcp_try_send_ddgst(struct nvme_tcp_request *req)  {  	struct nvme_tcp_queue *queue = req->queue; +	size_t offset = req->offset;  	int ret;  	struct msghdr msg = { .msg_flags = MSG_DONTWAIT };  	struct kvec iov = { -		.iov_base = &req->ddgst + req->offset, +		.iov_base = (u8 *)&req->ddgst + req->offset,  		.iov_len = NVME_TCP_DIGEST_LENGTH - req->offset  	}; @@ -1064,7 +1067,7 @@ static int nvme_tcp_try_send_ddgst(struct nvme_tcp_request *req)  	if (unlikely(ret <= 0))  		return ret; -	if (req->offset + ret == NVME_TCP_DIGEST_LENGTH) { +	if (offset + ret == NVME_TCP_DIGEST_LENGTH) {  		nvme_tcp_done_send_req(queue);  		return 1;  	} @@ -1915,7 +1918,7 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new)  	if (error)  		goto out_stop_queue; -	blk_mq_unquiesce_queue(ctrl->admin_q); +	nvme_start_admin_queue(ctrl);  	error = nvme_init_ctrl_finish(ctrl);  	if (error) @@ -1924,7 +1927,7 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new)  	return 0;  out_quiesce_queue: -	blk_mq_quiesce_queue(ctrl->admin_q); +	nvme_stop_admin_queue(ctrl);  	blk_sync_queue(ctrl->admin_q);  out_stop_queue:  	nvme_tcp_stop_queue(ctrl, 0); @@ -1946,12 +1949,12 @@ out_free_queue:  static void nvme_tcp_teardown_admin_queue(struct nvme_ctrl *ctrl,  		bool remove)  { -	blk_mq_quiesce_queue(ctrl->admin_q); +	nvme_stop_admin_queue(ctrl);  	blk_sync_queue(ctrl->admin_q);  	nvme_tcp_stop_queue(ctrl, 0);  	nvme_cancel_admin_tagset(ctrl);  	if (remove) -		blk_mq_unquiesce_queue(ctrl->admin_q); +		nvme_start_admin_queue(ctrl);  	nvme_tcp_destroy_admin_queue(ctrl, remove);  } @@ -1960,7 +1963,7 @@ static void nvme_tcp_teardown_io_queues(struct nvme_ctrl *ctrl,  {  	if (ctrl->queue_count <= 1)  		return; -	blk_mq_quiesce_queue(ctrl->admin_q); +	nvme_stop_admin_queue(ctrl);  	nvme_start_freeze(ctrl);  	nvme_stop_queues(ctrl);  	nvme_sync_io_queues(ctrl); @@ -2055,7 +2058,7 @@ destroy_io:  		nvme_tcp_destroy_io_queues(ctrl, new);  	}  destroy_admin: -	blk_mq_quiesce_queue(ctrl->admin_q); +	nvme_stop_admin_queue(ctrl);  	blk_sync_queue(ctrl->admin_q);  	nvme_tcp_stop_queue(ctrl, 0);  	nvme_cancel_admin_tagset(ctrl); @@ -2098,7 +2101,7 @@ static void nvme_tcp_error_recovery_work(struct work_struct *work)  	/* unquiesce to fail fast pending requests */  	nvme_start_queues(ctrl);  	nvme_tcp_teardown_admin_queue(ctrl, false); -	blk_mq_unquiesce_queue(ctrl->admin_q); +	nvme_start_admin_queue(ctrl);  	if (!nvme_change_ctrl_state(ctrl, NVME_CTRL_CONNECTING)) {  		/* state change failure is ok if we started ctrl delete */ @@ -2116,7 +2119,7 @@ static void nvme_tcp_teardown_ctrl(struct nvme_ctrl *ctrl, bool shutdown)  	cancel_delayed_work_sync(&to_tcp_ctrl(ctrl)->connect_work);  	nvme_tcp_teardown_io_queues(ctrl, shutdown); -	blk_mq_quiesce_queue(ctrl->admin_q); +	nvme_stop_admin_queue(ctrl);  	if (shutdown)  		nvme_shutdown_ctrl(ctrl);  	else @@ -2429,7 +2432,7 @@ static int nvme_tcp_map_queues(struct blk_mq_tag_set *set)  	return 0;  } -static int nvme_tcp_poll(struct blk_mq_hw_ctx *hctx) +static int nvme_tcp_poll(struct blk_mq_hw_ctx *hctx, struct io_comp_batch *iob)  {  	struct nvme_tcp_queue *queue = hctx->driver_data;  	struct sock *sk = queue->sock->sk; @@ -2582,7 +2585,7 @@ static struct nvme_ctrl *nvme_tcp_create_ctrl(struct device *dev,  		goto out_uninit_ctrl;  	dev_info(ctrl->ctrl.device, "new ctrl: NQN \"%s\", addr %pISp\n", -		ctrl->ctrl.opts->subsysnqn, &ctrl->addr); +		nvmf_ctrl_subsysnqn(&ctrl->ctrl), &ctrl->addr);  	mutex_lock(&nvme_tcp_ctrl_mutex);  	list_add_tail(&ctrl->list, &nvme_tcp_ctrl_list); |