* [PATCH rfc 0/2] nvmet nice logging helpers
@ 2018-07-16 10:53 Sagi Grimberg
2018-07-16 10:53 ` [PATCH rfc 1/2] nvmet: add nvmet port " Sagi Grimberg
2018-07-16 10:53 ` [PATCH rfc 2/2] nvmet: add nvmet ctrl " Sagi Grimberg
0 siblings, 2 replies; 5+ messages in thread
From: Sagi Grimberg @ 2018-07-16 10:53 UTC (permalink / raw)
This patch set adds some friendly logging helpers with similar
functionality to dev_[err|warn|info|dbg]. When building a
target system with multiple ports and multiple controllers
connected, its useful to have a coherent log message formats
that provide the affected port and controller identifier.
The one annoying thing is that for xxxx_dbg helper I needed
to open-code the dynamic debug macros. If anyone has a better
idea on how to have it, it'd be great (without allocating a class
device for it).
Feedback is welcome.
Sagi Grimberg (2):
nvmet: add nvmet port logging helpers
nvmet: add nvmet ctrl logging helpers
drivers/nvme/target/admin-cmd.c | 11 ++++-----
drivers/nvme/target/configfs.c | 37 +++++++++++-----------------
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 | 44 +++++++++++++++++++++++++++++++++
drivers/nvme/target/rdma.c | 52 ++++++++++++++++++++++-----------------
8 files changed, 122 insertions(+), 75 deletions(-)
--
2.14.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH rfc 1/2] nvmet: add nvmet port logging helpers
2018-07-16 10:53 [PATCH rfc 0/2] nvmet nice logging helpers Sagi Grimberg
@ 2018-07-16 10:53 ` Sagi Grimberg
2018-07-16 10:53 ` [PATCH rfc 2/2] nvmet: add nvmet ctrl " Sagi Grimberg
1 sibling, 0 replies; 5+ messages in thread
From: Sagi Grimberg @ 2018-07-16 10:53 UTC (permalink / raw)
prettify port related logging when we have multiple ports in
the system. Now port logging helpers will use the format
"nvmet portX: ...".
Signed-off-by: Sagi Grimberg <sagi at grimberg.me>
---
drivers/nvme/target/configfs.c | 37 +++++++++++++++----------------------
drivers/nvme/target/nvmet.h | 27 +++++++++++++++++++++++++++
drivers/nvme/target/rdma.c | 26 ++++++++++++++------------
3 files changed, 56 insertions(+), 34 deletions(-)
diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
index 3ba5ea5c4376..8c9b75640c30 100644
--- a/drivers/nvme/target/configfs.c
+++ b/drivers/nvme/target/configfs.c
@@ -59,8 +59,7 @@ static ssize_t nvmet_addr_adrfam_store(struct config_item *item,
struct nvmet_port *port = to_nvmet_port(item);
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
@@ -73,7 +72,7 @@ static ssize_t nvmet_addr_adrfam_store(struct config_item *item,
} else if (sysfs_streq(page, "fc")) {
port->disc_addr.adrfam = NVMF_ADDR_FAMILY_FC;
} else {
- pr_err("Invalid value '%s' for adrfam\n", page);
+ port_err(port, "Invalid value '%s' for adrfam\n", page);
return -EINVAL;
}
@@ -98,13 +97,12 @@ static ssize_t nvmet_addr_portid_store(struct config_item *item,
u16 portid = 0;
if (kstrtou16(page, 0, &portid)) {
- pr_err("Invalid value '%s' for portid\n", page);
+ port_err(port, "Invalid value '%s' for portid\n", page);
return -EINVAL;
}
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
port->disc_addr.portid = cpu_to_le16(portid);
@@ -128,13 +126,12 @@ static ssize_t nvmet_addr_traddr_store(struct config_item *item,
struct nvmet_port *port = to_nvmet_port(item);
if (count > NVMF_TRADDR_SIZE) {
- pr_err("Invalid value '%s' for traddr\n", page);
+ port_err(port, "Invalid value '%s' for traddr\n", page);
return -EINVAL;
}
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
@@ -166,8 +163,7 @@ static ssize_t nvmet_addr_treq_store(struct config_item *item,
struct nvmet_port *port = to_nvmet_port(item);
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
@@ -178,7 +174,7 @@ static ssize_t nvmet_addr_treq_store(struct config_item *item,
} else if (sysfs_streq(page, "not required")) {
port->disc_addr.treq = NVMF_TREQ_NOT_REQUIRED;
} else {
- pr_err("Invalid value '%s' for treq\n", page);
+ port_err(port, "Invalid value '%s' for treq\n", page);
return -EINVAL;
}
@@ -202,12 +198,11 @@ static ssize_t nvmet_addr_trsvcid_store(struct config_item *item,
struct nvmet_port *port = to_nvmet_port(item);
if (count > NVMF_TRSVCID_SIZE) {
- pr_err("Invalid value '%s' for trsvcid\n", page);
+ port_err(port, "Invalid value '%s' for trsvcid\n", page);
return -EINVAL;
}
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
@@ -233,13 +228,12 @@ static ssize_t nvmet_param_inline_data_size_store(struct config_item *item,
int ret;
if (port->enabled) {
- pr_err("Cannot modify inline_data_size while port enabled\n");
- pr_err("Disable the port before modifying\n");
+ port_err(port, "Cannot modify inline_data_size while port enabled\n");
return -EACCES;
}
ret = kstrtoint(page, 0, &port->inline_data_size);
if (ret) {
- pr_err("Invalid value '%s' for inline_data_size\n", page);
+ port_err(port, "Invalid value '%s' for inline_data_size\n", page);
return -EINVAL;
}
return count;
@@ -276,8 +270,7 @@ static ssize_t nvmet_addr_trtype_store(struct config_item *item,
int i;
if (port->enabled) {
- pr_err("Cannot modify address while enabled\n");
- pr_err("Disable the address before modifying\n");
+ port_err(port, "Cannot modify address while enabled\n");
return -EACCES;
}
@@ -286,7 +279,7 @@ static ssize_t nvmet_addr_trtype_store(struct config_item *item,
goto found;
}
- pr_err("Invalid value '%s' for trtype\n", page);
+ port_err(port, "Invalid value '%s' for trtype\n", page);
return -EINVAL;
found:
memset(&port->disc_addr.tsas, 0, NVMF_TSAS_SIZE);
@@ -854,7 +847,7 @@ static ssize_t nvmet_referral_enable_store(struct config_item *item,
return count;
inval:
- pr_err("Invalid value '%s' for enable\n", page);
+ port_err(port, "Invalid value '%s' for enable\n", page);
return -EINVAL;
}
diff --git a/drivers/nvme/target/nvmet.h b/drivers/nvme/target/nvmet.h
index 688993855402..6811258ab8ff 100644
--- a/drivers/nvme/target/nvmet.h
+++ b/drivers/nvme/target/nvmet.h
@@ -270,6 +270,33 @@ struct nvmet_req {
const struct nvmet_fabrics_ops *ops;
};
+#define port_err(port, fmt, a...) \
+ printk(KERN_ERR "nvmet port%d: " fmt, \
+ le32_to_cpu((port)->disc_addr.portid), ##a)
+#define port_info(port, fmt, a...) \
+ printk(KERN_INFO "nvmet port%d: " fmt, \
+ le32_to_cpu((port)->disc_addr.portid), ##a)
+#define port_warn(port, fmt, a...) \
+ printk(KERN_WARNING "nvmet port%d: " fmt, \
+ le32_to_cpu((port)->disc_addr.portid), ##a)
+
+#if defined(CONFIG_DYNAMIC_DEBUG)
+#include <linux/dynamic_debug.h>
+#define port_dbg(port, fmt, a...) \
+do { \
+ DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
+ if (DYNAMIC_DEBUG_BRANCH(descriptor)) \
+ printk(KERN_DEBUG "nvmet port%d: " fmt, \
+ le32_to_cpu((port)->disc_addr.portid), ##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)
+#else
+#define port_dbg(port, fmt, a...) {}
+#endif
+
extern struct workqueue_struct *buffered_io_wq;
static inline void nvmet_set_status(struct nvmet_req *req, u16 status)
diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index e7f43d1e1779..71bf6bf57be9 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -918,7 +918,7 @@ nvmet_rdma_find_get_device(struct rdma_cm_id *cm_id)
list_add(&ndev->entry, &device_list);
out_unlock:
mutex_unlock(&device_list_mutex);
- pr_debug("added %s.\n", ndev->device->name);
+ port_dbg(port, "added %s.\n", ndev->device->name);
return ndev;
out_free_pd:
@@ -1273,7 +1273,8 @@ static void nvmet_rdma_queue_established(struct nvmet_rdma_queue *queue)
spin_lock_irqsave(&queue->state_lock, flags);
if (queue->state != NVMET_RDMA_Q_CONNECTING) {
- pr_warn("trying to establish a connected queue\n");
+ port_warn(queue->port,
+ "trying to establish a connected queue\n");
goto out_unlock;
}
queue->state = NVMET_RDMA_Q_LIVE;
@@ -1299,7 +1300,8 @@ static void __nvmet_rdma_queue_disconnect(struct nvmet_rdma_queue *queue)
bool disconnect = false;
unsigned long flags;
- pr_debug("cm_id= %p queue->state= %d\n", queue->cm_id, queue->state);
+ port_dbg(queue->port, "cm_id= %p queue->state= %d\n",
+ queue->cm_id, queue->state);
spin_lock_irqsave(&queue->state_lock, flags);
switch (queue->state) {
@@ -1473,7 +1475,7 @@ static int nvmet_rdma_add_port(struct nvmet_port *port)
af = AF_INET6;
break;
default:
- pr_err("address family %d not supported\n",
+ port_err(port, "address family %d not supported\n",
port->disc_addr.adrfam);
return -EINVAL;
}
@@ -1481,7 +1483,8 @@ static int nvmet_rdma_add_port(struct nvmet_port *port)
if (port->inline_data_size < 0) {
port->inline_data_size = NVMET_RDMA_DEFAULT_INLINE_DATA_SIZE;
} else if (port->inline_data_size > NVMET_RDMA_MAX_INLINE_DATA_SIZE) {
- pr_warn("inline_data_size %u is too large, reducing to %u\n",
+ port_warn(port,
+ "inline_data_size %u is too large, reducing to %u\n",
port->inline_data_size,
NVMET_RDMA_MAX_INLINE_DATA_SIZE);
port->inline_data_size = NVMET_RDMA_MAX_INLINE_DATA_SIZE;
@@ -1490,7 +1493,7 @@ static int nvmet_rdma_add_port(struct nvmet_port *port)
ret = inet_pton_with_scope(&init_net, af, port->disc_addr.traddr,
port->disc_addr.trsvcid, &addr);
if (ret) {
- pr_err("malformed ip/port passed: %s:%s\n",
+ port_err(port, "malformed ip/port passed: %s:%s\n",
port->disc_addr.traddr, port->disc_addr.trsvcid);
return ret;
}
@@ -1498,7 +1501,7 @@ static int nvmet_rdma_add_port(struct nvmet_port *port)
cm_id = rdma_create_id(&init_net, nvmet_rdma_cm_handler, port,
RDMA_PS_TCP, IB_QPT_RC);
if (IS_ERR(cm_id)) {
- pr_err("CM ID creation failed\n");
+ port_err(port, "CM ID creation failed\n");
return PTR_ERR(cm_id);
}
@@ -1508,26 +1511,25 @@ static int nvmet_rdma_add_port(struct nvmet_port *port)
*/
ret = rdma_set_afonly(cm_id, 1);
if (ret) {
- pr_err("rdma_set_afonly failed (%d)\n", ret);
+ port_err(port, "rdma_set_afonly failed (%d)\n", ret);
goto out_destroy_id;
}
ret = rdma_bind_addr(cm_id, (struct sockaddr *)&addr);
if (ret) {
- pr_err("binding CM ID to %pISpcs failed (%d)\n",
+ port_err(port, "binding CM ID to %pISpcs failed (%d)\n",
(struct sockaddr *)&addr, ret);
goto out_destroy_id;
}
ret = rdma_listen(cm_id, 128);
if (ret) {
- pr_err("listening to %pISpcs failed (%d)\n",
+ port_err(port, "listening to %pISpcs failed (%d)\n",
(struct sockaddr *)&addr, ret);
goto out_destroy_id;
}
- pr_info("enabling port %d (%pISpcs)\n",
- le16_to_cpu(port->disc_addr.portid), (struct sockaddr *)&addr);
+ port_info(port, "enabled (%pISpcs)\n", (struct sockaddr *)&addr);
port->priv = cm_id;
return 0;
--
2.14.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH rfc 2/2] nvmet: add nvmet ctrl logging helpers
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
2018-07-16 22:11 ` Chaitanya Kulkarni
1 sibling, 1 reply; 5+ messages in thread
From: Sagi Grimberg @ 2018-07-16 10:53 UTC (permalink / raw)
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
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH rfc 2/2] nvmet: add nvmet ctrl logging helpers
2018-07-16 10:53 ` [PATCH rfc 2/2] nvmet: add nvmet ctrl " Sagi Grimberg
@ 2018-07-16 22:11 ` Chaitanya Kulkarni
2018-07-18 12:25 ` Sagi Grimberg
0 siblings, 1 reply; 5+ messages in thread
From: Chaitanya Kulkarni @ 2018-07-16 22:11 UTC (permalink / raw)
From: Linux-nvme <linux-nvme-bounces@lists.infradead.org> on behalf of Sagi Grimberg <sagi@grimberg.me>
Sent: Monday, July 16, 2018 3:53 AM
To: linux-nvme at lists.infradead.org
Subject: [PATCH rfc 2/2] nvmet: add nvmet ctrl logging helpers
?
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)
+
[CK] Can we use pr_XXX for above helpers instead of printk()?
?#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
_______________________________________________
Linux-nvme mailing list
Linux-nvme at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH rfc 2/2] nvmet: add nvmet ctrl logging helpers
2018-07-16 22:11 ` Chaitanya Kulkarni
@ 2018-07-18 12:25 ` Sagi Grimberg
0 siblings, 0 replies; 5+ messages in thread
From: Sagi Grimberg @ 2018-07-18 12:25 UTC (permalink / raw)
> 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)
> +
>
> [CK] Can we use pr_XXX for above helpers instead of printk()?
This would add pr_fmt() to the print which would look like:
"nvme-loop: nvmet ctrl1: XXX". Wanted to clean it up like
dev_XXX logging.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-07-18 12:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [PATCH rfc 2/2] nvmet: add nvmet ctrl " Sagi Grimberg
2018-07-16 22:11 ` Chaitanya Kulkarni
2018-07-18 12:25 ` Sagi Grimberg
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.