linux-nvme.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: sagi@grimberg.me (Sagi Grimberg)
Subject: [PATCH rfc 2/2] nvmet: add nvmet ctrl logging helpers
Date: Mon, 16 Jul 2018 13:53:43 +0300	[thread overview]
Message-ID: <20180716105343.29699-3-sagi@grimberg.me> (raw)
In-Reply-To: <20180716105343.29699-1-sagi@grimberg.me>

prettify ctrl related logging when we have multiple ports in
the system. Now ctrl logging helpers will use the format
"nvmet ctrlX: ...".

Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
---
 drivers/nvme/target/admin-cmd.c   | 11 +++++------
 drivers/nvme/target/core.c        | 20 ++++++++++----------
 drivers/nvme/target/discovery.c   | 13 +++++++------
 drivers/nvme/target/fabrics-cmd.c | 15 ++++++++-------
 drivers/nvme/target/io-cmd-bdev.c |  5 +++--
 drivers/nvme/target/nvmet.h       | 17 +++++++++++++++++
 drivers/nvme/target/rdma.c        | 26 ++++++++++++++++----------
 7 files changed, 66 insertions(+), 41 deletions(-)

diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
index 837bbdbfaa4b..46e2fb9c8bc7 100644
--- a/drivers/nvme/target/admin-cmd.c
+++ b/drivers/nvme/target/admin-cmd.c
@@ -45,8 +45,8 @@ static u16 nvmet_get_smart_log_nsid(struct nvmet_req *req,
 
 	ns = nvmet_find_namespace(req->sq->ctrl, req->cmd->get_log_page.nsid);
 	if (!ns) {
-		pr_err("nvmet : Could not find namespace id : %d\n",
-				le32_to_cpu(req->cmd->get_log_page.nsid));
+		ctrl_err(req->sq->ctrl, "Could not find namespace id : %d\n",
+			le32_to_cpu(req->cmd->get_log_page.nsid));
 		return NVME_SC_INVALID_NS;
 	}
 
@@ -571,8 +571,7 @@ static void nvmet_execute_keep_alive(struct nvmet_req *req)
 {
 	struct nvmet_ctrl *ctrl = req->sq->ctrl;
 
-	pr_debug("ctrl %d update keep-alive timer for %d secs\n",
-		ctrl->cntlid, ctrl->kato);
+	ctrl_dbg(ctrl, "update keep-alive timer for %d secs\n", ctrl->kato);
 
 	mod_delayed_work(system_wq, &ctrl->ka_work, ctrl->kato * HZ);
 	nvmet_req_complete(req, 0);
@@ -660,7 +659,7 @@ u16 nvmet_parse_admin_cmd(struct nvmet_req *req)
 		return 0;
 	}
 
-	pr_err("unhandled cmd %d on qid %d\n", cmd->common.opcode,
-	       req->sq->qid);
+	ctrl_err(req->sq->ctrl, "unhandled cmd %d on qid %d\n",
+		cmd->common.opcode, req->sq->qid);
 	return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 }
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index ddd85715a00a..fbb71d005ea1 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -268,16 +268,14 @@ static void nvmet_keep_alive_timer(struct work_struct *work)
 	struct nvmet_ctrl *ctrl = container_of(to_delayed_work(work),
 			struct nvmet_ctrl, ka_work);
 
-	pr_err("ctrl %d keep-alive timer (%d seconds) expired!\n",
-		ctrl->cntlid, ctrl->kato);
+	ctrl_err(ctrl, "keep-alive timer (%d seconds) expired!\n", ctrl->kato);
 
 	nvmet_ctrl_fatal_error(ctrl);
 }
 
 static void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl)
 {
-	pr_debug("ctrl %d start keep-alive timer for %d secs\n",
-		ctrl->cntlid, ctrl->kato);
+	ctrl_dbg(ctrl, "start keep-alive timer for %d secs\n", ctrl->kato);
 
 	INIT_DELAYED_WORK(&ctrl->ka_work, nvmet_keep_alive_timer);
 	schedule_delayed_work(&ctrl->ka_work, ctrl->kato * HZ);
@@ -285,7 +283,7 @@ static void nvmet_start_keep_alive_timer(struct nvmet_ctrl *ctrl)
 
 static void nvmet_stop_keep_alive_timer(struct nvmet_ctrl *ctrl)
 {
-	pr_debug("ctrl %d stop keep-alive\n", ctrl->cntlid);
+	ctrl_dbg(ctrl, "stop keep-alive\n");
 
 	cancel_delayed_work_sync(&ctrl->ka_work);
 }
@@ -786,14 +784,16 @@ u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
 u16 nvmet_check_ctrl_status(struct nvmet_req *req, struct nvme_command *cmd)
 {
 	if (unlikely(!(req->sq->ctrl->cc & NVME_CC_ENABLE))) {
-		pr_err("got cmd %d while CC.EN == 0 on qid = %d\n",
-		       cmd->common.opcode, req->sq->qid);
+		ctrl_err(req->sq->ctrl,
+			"got cmd %d while CC.EN == 0 on qid = %d\n",
+			cmd->common.opcode, req->sq->qid);
 		return NVME_SC_CMD_SEQ_ERROR | NVME_SC_DNR;
 	}
 
 	if (unlikely(!(req->sq->ctrl->csts & NVME_CSTS_RDY))) {
-		pr_err("got cmd %d while CSTS.RDY == 0 on qid = %d\n",
-		       cmd->common.opcode, req->sq->qid);
+		ctrl_err(req->sq->ctrl,
+			"got cmd %d while CSTS.RDY == 0 on qid = %d\n",
+			cmd->common.opcode, req->sq->qid);
 		return NVME_SC_CMD_SEQ_ERROR | NVME_SC_DNR;
 	}
 	return 0;
@@ -997,7 +997,7 @@ static void nvmet_fatal_error_handler(struct work_struct *work)
 	struct nvmet_ctrl *ctrl =
 			container_of(work, struct nvmet_ctrl, fatal_err_work);
 
-	pr_err("ctrl %d fatal error occurred!\n", ctrl->cntlid);
+	ctrl_err(ctrl, "fatal error occurred!\n");
 	ctrl->ops->delete_ctrl(ctrl);
 }
 
diff --git a/drivers/nvme/target/discovery.c b/drivers/nvme/target/discovery.c
index eae29f493a07..960031608f93 100644
--- a/drivers/nvme/target/discovery.c
+++ b/drivers/nvme/target/discovery.c
@@ -186,9 +186,10 @@ static void nvmet_execute_identify_disc_ctrl(struct nvmet_req *req)
 u16 nvmet_parse_discovery_cmd(struct nvmet_req *req)
 {
 	struct nvme_command *cmd = req->cmd;
+	struct nvmet_ctrl *ctrl = req->sq->ctrl;
 
-	if (unlikely(!(req->sq->ctrl->csts & NVME_CSTS_RDY))) {
-		pr_err("got cmd %d while not ready\n",
+	if (unlikely(!(ctrl->csts & NVME_CSTS_RDY))) {
+		ctrl_err(ctrl, "got cmd %d while not ready\n",
 		       cmd->common.opcode);
 		return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 	}
@@ -202,7 +203,7 @@ u16 nvmet_parse_discovery_cmd(struct nvmet_req *req)
 			req->execute = nvmet_execute_get_disc_log_page;
 			return 0;
 		default:
-			pr_err("unsupported get_log_page lid %d\n",
+			ctrl_err(ctrl, "unsupported get_log_page lid %d\n",
 			       cmd->get_log_page.lid);
 		return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 		}
@@ -214,16 +215,16 @@ u16 nvmet_parse_discovery_cmd(struct nvmet_req *req)
 				nvmet_execute_identify_disc_ctrl;
 			return 0;
 		default:
-			pr_err("unsupported identify cns %d\n",
+			ctrl_err(ctrl, "unsupported identify cns %d\n",
 			       cmd->identify.cns);
 			return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 		}
 	default:
-		pr_err("unsupported cmd %d\n", cmd->common.opcode);
+		ctrl_err(ctrl, "unsupported cmd %d\n", cmd->common.opcode);
 		return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 	}
 
-	pr_err("unhandled cmd %d\n", cmd->common.opcode);
+	ctrl_err(ctrl, "unhandled cmd %d\n", cmd->common.opcode);
 	return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 }
 
diff --git a/drivers/nvme/target/fabrics-cmd.c b/drivers/nvme/target/fabrics-cmd.c
index d84ae004cb85..3a2722d483d7 100644
--- a/drivers/nvme/target/fabrics-cmd.c
+++ b/drivers/nvme/target/fabrics-cmd.c
@@ -87,7 +87,8 @@ u16 nvmet_parse_fabrics_cmd(struct nvmet_req *req)
 		req->execute = nvmet_execute_prop_get;
 		break;
 	default:
-		pr_err("received unknown capsule type 0x%x\n",
+		ctrl_err(req->sq->ctrl,
+			"received unknown capsule type 0x%x\n",
 			cmd->fabrics.fctype);
 		return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 	}
@@ -104,11 +105,11 @@ static u16 nvmet_install_queue(struct nvmet_ctrl *ctrl, struct nvmet_req *req)
 
 	old = cmpxchg(&req->sq->ctrl, NULL, ctrl);
 	if (old) {
-		pr_warn("queue already connected!\n");
+		ctrl_warn(ctrl, "queue already connected!\n");
 		return NVME_SC_CONNECT_CTRL_BUSY | NVME_SC_DNR;
 	}
 	if (!sqsize) {
-		pr_warn("queue size zero!\n");
+		ctrl_warn(ctrl, "queue size zero!\n");
 		return NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
 	}
 
@@ -165,8 +166,8 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req)
 		goto out;
 	}
 
-	pr_info("creating controller %d for subsystem %s for NQN %s.\n",
-		ctrl->cntlid, ctrl->subsys->subsysnqn, ctrl->hostnqn);
+	ctrl_info(ctrl, "subsystem %s to host %s.\n",
+		ctrl->subsys->subsysnqn, ctrl->hostnqn);
 	req->rsp->result.u16 = cpu_to_le16(ctrl->cntlid);
 
 out:
@@ -210,7 +211,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
 		goto out;
 
 	if (unlikely(qid > ctrl->subsys->max_qid)) {
-		pr_warn("invalid queue id (%d)\n", qid);
+		ctrl_warn(ctrl, "invalid queue id (%d)\n", qid);
 		status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
 		req->rsp->result.u32 = IPO_IATTR_CONNECT_SQE(qid);
 		goto out_ctrl_put;
@@ -223,7 +224,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
 		goto out_ctrl_put;
 	}
 
-	pr_debug("adding queue %d to ctrl %d.\n", qid, ctrl->cntlid);
+	ctrl_dbg(ctrl, "adding queue %d.\n", qid);
 
 out:
 	kfree(d);
diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd-bdev.c
index e0b0f7df70c2..d4e7b071dce4 100644
--- a/drivers/nvme/target/io-cmd-bdev.c
+++ b/drivers/nvme/target/io-cmd-bdev.c
@@ -234,8 +234,9 @@ u16 nvmet_bdev_parse_io_cmd(struct nvmet_req *req)
 		req->execute = nvmet_bdev_execute_write_zeroes;
 		return 0;
 	default:
-		pr_err("unhandled cmd %d on qid %d\n", cmd->common.opcode,
-		       req->sq->qid);
+		ctrl_err(req->sq->ctrl,
+			"unhandled cmd %d on qid %d\n", cmd->common.opcode,
+			req->sq->qid);
 		return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 	}
 }
diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h
index 6811258ab8ff..73751ded2174 100644
--- a/drivers/nvme/target/nvmet.h
+++ b/drivers/nvme/target/nvmet.h
@@ -280,6 +280,13 @@ struct nvmet_req {
 	printk(KERN_WARNING "nvmet port%d: " fmt, \
 		le32_to_cpu((port)->disc_addr.portid), ##a)
 
+#define ctrl_err(ctrl, fmt, a...)		\
+	printk(KERN_ERR "nvmet ctrl%d: " fmt, (ctrl)->cntlid, ##a)
+#define ctrl_info(ctrl, fmt, a...)		\
+	printk(KERN_INFO "nvmet ctrl%d: " fmt, (ctrl)->cntlid, ##a)
+#define ctrl_warn(ctrl, fmt, a...)		\
+	printk(KERN_WARNING "nvmet ctrl%d: " fmt, (ctrl)->cntlid, ##a)
+
 #if defined(CONFIG_DYNAMIC_DEBUG)
 #include <linux/dynamic_debug.h>
 #define port_dbg(port, fmt, a...)				\
@@ -289,12 +296,22 @@ do {								\
 		printk(KERN_DEBUG "nvmet port%d: " fmt, 	\
 			le32_to_cpu((port)->disc_addr.portid), ##a);\
 } while (0)
+#define ctrl_dbg(ctrl, fmt, a...)				\
+do {								\
+	DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);		\
+	if (DYNAMIC_DEBUG_BRANCH(descriptor))			\
+		printk(KERN_DEBUG "nvmet ctrl%d: " fmt, 	\
+			(ctrl)->cntlid, ##a);			\
+} while (0)
 #elif defined(DEBUG)
 #define port_dbg(port, fmt, a...)				\
 	printk(KERN_DEBUG "nvmet port%d: " fmt, 	\
 		le32_to_cpu((port)->disc_addr.portid)
+#define ctrl_dbg(ctrl, fmt, a...)				\
+	printk(KERN_DEBUG "nvmet ctrl%d: " fmt, (ctrl)->cntlid, ##a)
 #else
 #define port_dbg(port, fmt, a...) {}
+#define ctrl_dbg(ctrl, fmt, a...) {}
 #endif
 
 extern struct workqueue_struct *buffered_io_wq;
diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index 71bf6bf57be9..b14227e6e11f 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -554,7 +554,8 @@ static void nvmet_rdma_queue_response(struct nvmet_req *req)
 		DMA_TO_DEVICE);
 
 	if (unlikely(ib_post_send(cm_id->qp, first_wr, &bad_wr))) {
-		pr_err("sending cmd response failed\n");
+		ctrl_err(req->sq->ctrl,
+			"sending cmd response failed\n");
 		nvmet_rdma_release_rsp(rsp);
 	}
 }
@@ -576,7 +577,8 @@ static void nvmet_rdma_read_data_done(struct ib_cq *cq, struct ib_wc *wc)
 		nvmet_req_uninit(&rsp->req);
 		nvmet_rdma_release_rsp(rsp);
 		if (wc->status != IB_WC_WR_FLUSH_ERR) {
-			pr_info("RDMA READ for CQE 0x%p failed with status %s (%d).\n",
+			ctrl_err(queue->nvme_sq.ctrl,
+				"RDMA READ for CQE 0x%p failed with status %s (%d).\n",
 				wc->wr_cqe, ib_wc_status_msg(wc->status), wc->status);
 			nvmet_rdma_error_comp(queue);
 		}
@@ -620,7 +622,8 @@ static u16 nvmet_rdma_map_sgl_inline(struct nvmet_rdma_rsp *rsp)
 		return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
 
 	if (off + len > rsp->queue->dev->inline_data_size) {
-		pr_err("invalid inline data offset!\n");
+		ctrl_err(rsp->cmd->queue->nvme_sq.ctrl,
+			"invalid inline data offset!\n");
 		return NVME_SC_SGL_INVALID_OFFSET | NVME_SC_DNR;
 	}
 
@@ -677,7 +680,8 @@ static u16 nvmet_rdma_map_sgl(struct nvmet_rdma_rsp *rsp)
 		case NVME_SGL_FMT_OFFSET:
 			return nvmet_rdma_map_sgl_inline(rsp);
 		default:
-			pr_err("invalid SGL subtype: %#x\n", sgl->type);
+			ctrl_err(rsp->cmd->queue->nvme_sq.ctrl,
+				"invalid SGL subtype: %#x\n", sgl->type);
 			return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
 		}
 	case NVME_KEY_SGL_FMT_DATA_DESC:
@@ -687,11 +691,13 @@ static u16 nvmet_rdma_map_sgl(struct nvmet_rdma_rsp *rsp)
 		case NVME_SGL_FMT_ADDRESS:
 			return nvmet_rdma_map_sgl_keyed(rsp, sgl, false);
 		default:
-			pr_err("invalid SGL subtype: %#x\n", sgl->type);
+			ctrl_err(rsp->cmd->queue->nvme_sq.ctrl,
+				"invalid SGL subtype: %#x\n", sgl->type);
 			return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
 		}
 	default:
-		pr_err("invalid SGL type: %#x\n", sgl->type);
+		ctrl_err(rsp->cmd->queue->nvme_sq.ctrl,
+			"invalid SGL type: %#x\n", sgl->type);
 		return NVME_SC_SGL_INVALID_TYPE | NVME_SC_DNR;
 	}
 }
@@ -702,9 +708,9 @@ static bool nvmet_rdma_execute_command(struct nvmet_rdma_rsp *rsp)
 
 	if (unlikely(atomic_sub_return(1 + rsp->n_rdma,
 			&queue->sq_wr_avail) < 0)) {
-		pr_debug("IB send queue full (needed %d): queue %u cntlid %u\n",
-				1 + rsp->n_rdma, queue->idx,
-				queue->nvme_sq.ctrl->cntlid);
+		ctrl_dbg(queue->nvme_sq.ctrl,
+			"IB send queue full (needed %d): queue %u\n",
+			1 + rsp->n_rdma, queue->idx);
 		atomic_add(1 + rsp->n_rdma, &queue->sq_wr_avail);
 		return false;
 	}
@@ -1022,7 +1028,7 @@ static void nvmet_rdma_destroy_queue_ib(struct nvmet_rdma_queue *queue)
 
 static void nvmet_rdma_free_queue(struct nvmet_rdma_queue *queue)
 {
-	pr_debug("freeing queue %d\n", queue->idx);
+	ctrl_dbg(queue->nvme_sq.ctrl, "freeing queue %d\n", queue->idx);
 
 	nvmet_sq_destroy(&queue->nvme_sq);
 
-- 
2.14.1

  parent reply	other threads:[~2018-07-16 10:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-16 10:53 [PATCH rfc 0/2] nvmet nice logging helpers Sagi Grimberg
2018-07-16 10:53 ` [PATCH rfc 1/2] nvmet: add nvmet port " Sagi Grimberg
2018-07-16 10:53 ` Sagi Grimberg [this message]
2018-07-16 22:11   ` [PATCH rfc 2/2] nvmet: add nvmet ctrl " Chaitanya Kulkarni
2018-07-18 12:25     ` Sagi Grimberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180716105343.29699-3-sagi@grimberg.me \
    --to=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).