drivers/nvme/host/tcp.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
Replace open-coded ternary expressions with str_enabled_disabled()
when printing data and header digest mismatch messages in
nvme_tcp_init_connection().
This makes the code more readable and consistent with existing
helpers used for boolean string representation.
No functional change intended.
Signed-off-by: Rohit Chavan <roheetchavan@gmail.com>
---
drivers/nvme/host/tcp.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
index 243dab830dc8..b3165cd79a31 100644
--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -8,6 +8,7 @@
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/err.h>
+#include <linux/string_choices.h>
#include <linux/crc32.h>
#include <linux/nvme-tcp.h>
#include <linux/nvme-keyring.h>
@@ -1550,8 +1551,8 @@ static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
(!queue->data_digest && ctrl_ddgst)) {
pr_err("queue %d: data digest mismatch host: %s ctrl: %s\n",
nvme_tcp_queue_id(queue),
- queue->data_digest ? "enabled" : "disabled",
- ctrl_ddgst ? "enabled" : "disabled");
+ str_enabled_disabled(queue->data_digest),
+ str_enabled_disabled(ctrl_ddgst));
goto free_icresp;
}
@@ -1560,8 +1561,8 @@ static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
(!queue->hdr_digest && ctrl_hdgst)) {
pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
nvme_tcp_queue_id(queue),
- queue->hdr_digest ? "enabled" : "disabled",
- ctrl_hdgst ? "enabled" : "disabled");
+ str_enabled_disabled(queue->hdr_digest),
+ str_enabled_disabled(ctrl_hdgst);
goto free_icresp;
}
--
2.34.1
Hi Rohit,
kernel test robot noticed the following build errors:
[auto build test ERROR on axboe/for-next]
[also build test ERROR on linus/master v7.1-rc3 next-20260508]
[cannot apply to linux-nvme/for-next hch-configfs/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Rohit-Chavan/nvme-use-str_enabled_disabled-for-digest-mismatch-messages/20260514-220734
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git for-next
patch link: https://lore.kernel.org/r/20260504123555.1741525-1-roheetchavan%40gmail.com
patch subject: [PATCH] nvme: use str_enabled_disabled() for digest mismatch messages
config: powerpc64-randconfig-002-20260515 (https://download.01.org/0day-ci/archive/20260515/202605150537.AqXMjMVu-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260515/202605150537.AqXMjMVu-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605150537.AqXMjMVu-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/nvme/host/tcp.c:1576:3: error: unterminated function-like macro invocation
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^
include/linux/printk.h:553:9: note: macro 'pr_err' defined here
553 | #define pr_err(fmt, ...) \
| ^
>> drivers/nvme/host/tcp.c:3089:26: error: expected '}'
3089 | MODULE_ALIAS("nvme-tcp");
| ^
drivers/nvme/host/tcp.c:1575:42: note: to match this '{'
1575 | (!queue->hdr_digest && ctrl_hdgst)) {
| ^
>> drivers/nvme/host/tcp.c:3089:26: error: expected '}'
3089 | MODULE_ALIAS("nvme-tcp");
| ^
drivers/nvme/host/tcp.c:1475:1: note: to match this '{'
1475 | {
| ^
>> drivers/nvme/host/tcp.c:1493:8: error: use of undeclared label 'free_icreq'
1493 | goto free_icreq;
| ^
>> drivers/nvme/host/tcp.c:1514:8: error: use of undeclared label 'free_icresp'
1514 | goto free_icresp;
| ^
5 errors generated.
vim +1576 drivers/nvme/host/tcp.c
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1473
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1474 static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1475 {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1476 struct nvme_tcp_icreq_pdu *icreq;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1477 struct nvme_tcp_icresp_pdu *icresp;
2837966ab2a8117 Hannes Reinecke 2023-08-24 1478 char cbuf[CMSG_LEN(sizeof(char))] = {};
2837966ab2a8117 Hannes Reinecke 2023-08-24 1479 u8 ctype;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1480 struct msghdr msg = {};
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1481 struct kvec iov;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1482 bool ctrl_hdgst, ctrl_ddgst;
c2700d2886a87f8 Varun Prakash 2022-01-22 1483 u32 maxh2cdata;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1484 int ret;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1485
bf4afc53b77aeaa Linus Torvalds 2026-02-21 1486 icreq = kzalloc_obj(*icreq);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1487 if (!icreq)
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1488 return -ENOMEM;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1489
bf4afc53b77aeaa Linus Torvalds 2026-02-21 1490 icresp = kzalloc_obj(*icresp);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1491 if (!icresp) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1492 ret = -ENOMEM;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 @1493 goto free_icreq;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1494 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1495
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1496 icreq->hdr.type = nvme_tcp_icreq;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1497 icreq->hdr.hlen = sizeof(*icreq);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1498 icreq->hdr.pdo = 0;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1499 icreq->hdr.plen = cpu_to_le32(icreq->hdr.hlen);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1500 icreq->pfv = cpu_to_le16(NVME_TCP_PFV_1_0);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1501 icreq->maxr2t = 0; /* single inflight r2t supported */
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1502 icreq->hpda = 0; /* no alignment constraint */
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1503 if (queue->hdr_digest)
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1504 icreq->digest |= NVME_TCP_HDR_DIGEST_ENABLE;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1505 if (queue->data_digest)
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1506 icreq->digest |= NVME_TCP_DATA_DIGEST_ENABLE;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1507
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1508 iov.iov_base = icreq;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1509 iov.iov_len = sizeof(*icreq);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1510 ret = kernel_sendmsg(queue->sock, &msg, &iov, 1, iov.iov_len);
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1511 if (ret < 0) {
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1512 pr_warn("queue %d: failed to send icreq, error %d\n",
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1513 nvme_tcp_queue_id(queue), ret);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 @1514 goto free_icresp;
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1515 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1516
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1517 memset(&msg, 0, sizeof(msg));
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1518 iov.iov_base = icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1519 iov.iov_len = sizeof(*icresp);
363895767fbfa05 Hannes Reinecke 2024-07-22 1520 if (nvme_tcp_queue_tls(queue)) {
2837966ab2a8117 Hannes Reinecke 2023-08-24 1521 msg.msg_control = cbuf;
2837966ab2a8117 Hannes Reinecke 2023-08-24 1522 msg.msg_controllen = sizeof(cbuf);
2837966ab2a8117 Hannes Reinecke 2023-08-24 1523 }
578539e0969028f Caleb Sander Mateos 2025-01-24 1524 msg.msg_flags = MSG_WAITALL;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1525 ret = kernel_recvmsg(queue->sock, &msg, &iov, 1,
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1526 iov.iov_len, msg.msg_flags);
528361c49962708 Dan Carpenter 2025-03-05 1527 if (ret >= 0 && ret < sizeof(*icresp))
528361c49962708 Dan Carpenter 2025-03-05 1528 ret = -ECONNRESET;
528361c49962708 Dan Carpenter 2025-03-05 1529 if (ret < 0) {
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1530 pr_warn("queue %d: failed to receive icresp, error %d\n",
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1531 nvme_tcp_queue_id(queue), ret);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1532 goto free_icresp;
e4f4aabb6f66177 Hannes Reinecke 2023-08-24 1533 }
0e32fdd7968eb9a Christophe JAILLET 2023-10-30 1534 ret = -ENOTCONN;
363895767fbfa05 Hannes Reinecke 2024-07-22 1535 if (nvme_tcp_queue_tls(queue)) {
2837966ab2a8117 Hannes Reinecke 2023-08-24 1536 ctype = tls_get_record_type(queue->sock->sk,
2837966ab2a8117 Hannes Reinecke 2023-08-24 1537 (struct cmsghdr *)cbuf);
2837966ab2a8117 Hannes Reinecke 2023-08-24 1538 if (ctype != TLS_RECORD_TYPE_DATA) {
2837966ab2a8117 Hannes Reinecke 2023-08-24 1539 pr_err("queue %d: unhandled TLS record %d\n",
2837966ab2a8117 Hannes Reinecke 2023-08-24 1540 nvme_tcp_queue_id(queue), ctype);
0e32fdd7968eb9a Christophe JAILLET 2023-10-30 1541 goto free_icresp;
2837966ab2a8117 Hannes Reinecke 2023-08-24 1542 }
2837966ab2a8117 Hannes Reinecke 2023-08-24 1543 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1544 ret = -EINVAL;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1545 if (icresp->hdr.type != nvme_tcp_icresp) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1546 pr_err("queue %d: bad type returned %d\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1547 nvme_tcp_queue_id(queue), icresp->hdr.type);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1548 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1549 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1550
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1551 if (le32_to_cpu(icresp->hdr.plen) != sizeof(*icresp)) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1552 pr_err("queue %d: bad pdu length returned %d\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1553 nvme_tcp_queue_id(queue), icresp->hdr.plen);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1554 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1555 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1556
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1557 if (icresp->pfv != NVME_TCP_PFV_1_0) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1558 pr_err("queue %d: bad pfv returned %d\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1559 nvme_tcp_queue_id(queue), icresp->pfv);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1560 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1561 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1562
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1563 ctrl_ddgst = !!(icresp->digest & NVME_TCP_DATA_DIGEST_ENABLE);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1564 if ((queue->data_digest && !ctrl_ddgst) ||
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1565 (!queue->data_digest && ctrl_ddgst)) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1566 pr_err("queue %d: data digest mismatch host: %s ctrl: %s\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1567 nvme_tcp_queue_id(queue),
7a36402bd09e72c Rohit Chavan 2026-05-04 1568 str_enabled_disabled(queue->data_digest),
7a36402bd09e72c Rohit Chavan 2026-05-04 1569 str_enabled_disabled(ctrl_ddgst));
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1570 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1571 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1572
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1573 ctrl_hdgst = !!(icresp->digest & NVME_TCP_HDR_DIGEST_ENABLE);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1574 if ((queue->hdr_digest && !ctrl_hdgst) ||
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 @1575 (!queue->hdr_digest && ctrl_hdgst)) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 @1576 pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1577 nvme_tcp_queue_id(queue),
7a36402bd09e72c Rohit Chavan 2026-05-04 1578 str_enabled_disabled(queue->hdr_digest),
7a36402bd09e72c Rohit Chavan 2026-05-04 1579 str_enabled_disabled(ctrl_hdgst);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1580 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1581 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1582
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1583 if (icresp->cpda != 0) {
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1584 pr_err("queue %d: unsupported cpda returned %d\n",
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1585 nvme_tcp_queue_id(queue), icresp->cpda);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1586 goto free_icresp;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1587 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1588
c2700d2886a87f8 Varun Prakash 2022-01-22 1589 maxh2cdata = le32_to_cpu(icresp->maxdata);
c2700d2886a87f8 Varun Prakash 2022-01-22 1590 if ((maxh2cdata % 4) || (maxh2cdata < NVME_TCP_MIN_MAXH2CDATA)) {
c2700d2886a87f8 Varun Prakash 2022-01-22 1591 pr_err("queue %d: invalid maxh2cdata returned %u\n",
c2700d2886a87f8 Varun Prakash 2022-01-22 1592 nvme_tcp_queue_id(queue), maxh2cdata);
c2700d2886a87f8 Varun Prakash 2022-01-22 1593 goto free_icresp;
c2700d2886a87f8 Varun Prakash 2022-01-22 1594 }
c2700d2886a87f8 Varun Prakash 2022-01-22 1595 queue->maxh2cdata = maxh2cdata;
c2700d2886a87f8 Varun Prakash 2022-01-22 1596
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1597 ret = 0;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1598 free_icresp:
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1599 kfree(icresp);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1600 free_icreq:
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1601 kfree(icreq);
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1602 return ret;
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1603 }
3f2304f8c6d6ed9 Sagi Grimberg 2018-12-03 1604
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Rohit,
kernel test robot noticed the following build warnings:
[auto build test WARNING on axboe/for-next]
[also build test WARNING on linus/master v7.1-rc3 next-20260508]
[cannot apply to linux-nvme/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Rohit-Chavan/nvme-use-str_enabled_disabled-for-digest-mismatch-messages/20260514-220734
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git for-next
patch link: https://lore.kernel.org/r/20260504123555.1741525-1-roheetchavan%40gmail.com
patch subject: [PATCH] nvme: use str_enabled_disabled() for digest mismatch messages
config: powerpc64-randconfig-001-20260515 (https://download.01.org/0day-ci/archive/20260515/202605150441.5HXklwvg-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 14.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260515/202605150441.5HXklwvg-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605150441.5HXklwvg-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/nvme/host/tcp.c: In function 'nvme_tcp_init_connection':
drivers/nvme/host/tcp.c:3089:26: error: unterminated argument list invoking macro "pr_err"
3089 | MODULE_ALIAS("nvme-tcp");
| ^
drivers/nvme/host/tcp.c:1576:17: error: 'pr_err' undeclared (first use in this function); did you mean 'xa_err'?
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^~~~~~
| xa_err
drivers/nvme/host/tcp.c:1576:17: note: each undeclared identifier is reported only once for each function it appears in
drivers/nvme/host/tcp.c:1576:23: error: expected ';' at end of input
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^
| ;
......
drivers/nvme/host/tcp.c:1576:17: error: expected declaration or statement at end of input
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^~~~~~
drivers/nvme/host/tcp.c:1576:17: error: expected declaration or statement at end of input
drivers/nvme/host/tcp.c:1570:17: error: label 'free_icresp' used but not defined
1570 | goto free_icresp;
| ^~~~
drivers/nvme/host/tcp.c:1493:17: error: label 'free_icreq' used but not defined
1493 | goto free_icreq;
| ^~~~
drivers/nvme/host/tcp.c:1483:13: warning: unused variable 'maxh2cdata' [-Wunused-variable]
1483 | u32 maxh2cdata;
| ^~~~~~~~~~
drivers/nvme/host/tcp.c: At top level:
drivers/nvme/host/tcp.c:1474:12: warning: 'nvme_tcp_init_connection' defined but not used [-Wunused-function]
1474 | static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1438:13: warning: 'nvme_tcp_free_queue' defined but not used [-Wunused-function]
1438 | static void nvme_tcp_free_queue(struct nvme_ctrl *nctrl, int qid)
| ^~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1422:12: warning: 'nvme_tcp_alloc_async_req' defined but not used [-Wunused-function]
1422 | static int nvme_tcp_alloc_async_req(struct nvme_tcp_ctrl *ctrl)
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1415:13: warning: 'nvme_tcp_free_async_req' defined but not used [-Wunused-function]
1415 | static void nvme_tcp_free_async_req(struct nvme_tcp_ctrl *ctrl)
| ^~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1377:13: warning: 'nvme_tcp_io_work' defined but not used [-Wunused-function]
1377 | static void nvme_tcp_io_work(struct work_struct *w)
| ^~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1094:13: warning: 'nvme_tcp_state_change' defined but not used [-Wunused-function]
1094 | static void nvme_tcp_state_change(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1078:13: warning: 'nvme_tcp_write_space' defined but not used [-Wunused-function]
1078 | static void nvme_tcp_write_space(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:1064:13: warning: 'nvme_tcp_data_ready' defined but not used [-Wunused-function]
1064 | static void nvme_tcp_data_ready(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:587:12: warning: 'nvme_tcp_init_admin_hctx' defined but not used [-Wunused-function]
587 | static int nvme_tcp_init_admin_hctx(struct blk_mq_hw_ctx *hctx, void *data,
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:577:12: warning: 'nvme_tcp_init_hctx' defined but not used [-Wunused-function]
577 | static int nvme_tcp_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
| ^~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:550:12: warning: 'nvme_tcp_init_request' defined but not used [-Wunused-function]
550 | static int nvme_tcp_init_request(struct blk_mq_tag_set *set,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:542:13: warning: 'nvme_tcp_exit_request' defined but not used [-Wunused-function]
542 | static void nvme_tcp_exit_request(struct blk_mq_tag_set *set,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:208:32: warning: 'nvme_tcp_admin_mq_ops' defined but not used [-Wunused-const-variable=]
208 | static const struct blk_mq_ops nvme_tcp_admin_mq_ops;
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:207:32: warning: 'nvme_tcp_mq_ops' defined but not used [-Wunused-const-variable=]
207 | static const struct blk_mq_ops nvme_tcp_mq_ops;
| ^~~~~~~~~~~~~~~
In file included from include/linux/seqlock.h:20,
from include/linux/mmzone.h:17,
from include/linux/gfp.h:7,
from include/linux/umh.h:4,
from include/linux/kmod.h:9,
from include/linux/module.h:18,
from drivers/nvme/host/tcp.c:7:
>> drivers/nvme/host/tcp.c:205:21: warning: 'nvme_tcp_ctrl_mutex' defined but not used [-Wunused-variable]
205 | static DEFINE_MUTEX(nvme_tcp_ctrl_mutex);
| ^~~~~~~~~~~~~~~~~~~
include/linux/mutex.h:87:22: note: in definition of macro 'DEFINE_MUTEX'
87 | struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
| ^~~~~~~~~
drivers/nvme/host/tcp.c:95:13: warning: 'nvme_tcp_reclassify_socket' defined but not used [-Wunused-function]
95 | static void nvme_tcp_reclassify_socket(struct socket *sock) { }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:58:17: warning: 'nvme_tcp_cpu_queues' defined but not used [-Wunused-variable]
58 | static atomic_t nvme_tcp_cpu_queues[NR_CPUS];
| ^~~~~~~~~~~~~~~~~~~
vim +/nvme_tcp_ctrl_mutex +205 drivers/nvme/host/tcp.c
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 203
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 204 static LIST_HEAD(nvme_tcp_ctrl_list);
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 @205 static DEFINE_MUTEX(nvme_tcp_ctrl_mutex);
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 206 static struct workqueue_struct *nvme_tcp_wq;
6acbd9619b153f Rikard Falkeborn 2020-05-29 207 static const struct blk_mq_ops nvme_tcp_mq_ops;
6acbd9619b153f Rikard Falkeborn 2020-05-29 208 static const struct blk_mq_ops nvme_tcp_admin_mq_ops;
db5ad6b7f8cdd6 Sagi Grimberg 2020-05-01 209 static int nvme_tcp_try_send(struct nvme_tcp_queue *queue);
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 210
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Rohit,
kernel test robot noticed the following build errors:
[auto build test ERROR on axboe/for-next]
[also build test ERROR on linus/master v7.1-rc3 next-20260508]
[cannot apply to linux-nvme/for-next hch-configfs/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Rohit-Chavan/nvme-use-str_enabled_disabled-for-digest-mismatch-messages/20260514-220734
base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git for-next
patch link: https://lore.kernel.org/r/20260504123555.1741525-1-roheetchavan%40gmail.com
patch subject: [PATCH] nvme: use str_enabled_disabled() for digest mismatch messages
config: arm64-randconfig-004-20260515 (https://download.01.org/0day-ci/archive/20260515/202605150416.4egCVwkx-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260515/202605150416.4egCVwkx-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202605150416.4egCVwkx-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
drivers/nvme/host/tcp.c: In function 'nvme_tcp_init_connection':
>> drivers/nvme/host/tcp.c:3089:26: error: unterminated argument list invoking macro "pr_err"
3089 | MODULE_ALIAS("nvme-tcp");
| ^
>> drivers/nvme/host/tcp.c:1576:17: error: 'pr_err' undeclared (first use in this function); did you mean 'xa_err'?
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^~~~~~
| xa_err
drivers/nvme/host/tcp.c:1576:17: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/nvme/host/tcp.c:1576:23: error: expected ';' at end of input
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^
| ;
......
>> drivers/nvme/host/tcp.c:1576:17: error: expected declaration or statement at end of input
1576 | pr_err("queue %d: header digest mismatch host: %s ctrl: %s\n",
| ^~~~~~
>> drivers/nvme/host/tcp.c:1576:17: error: expected declaration or statement at end of input
>> drivers/nvme/host/tcp.c:1570:17: error: label 'free_icresp' used but not defined
1570 | goto free_icresp;
| ^~~~
>> drivers/nvme/host/tcp.c:1493:17: error: label 'free_icreq' used but not defined
1493 | goto free_icreq;
| ^~~~
>> drivers/nvme/host/tcp.c:1483:13: warning: unused variable 'maxh2cdata' [-Wunused-variable]
1483 | u32 maxh2cdata;
| ^~~~~~~~~~
At top level:
>> drivers/nvme/host/tcp.c:1474:12: warning: 'nvme_tcp_init_connection' defined but not used [-Wunused-function]
1474 | static int nvme_tcp_init_connection(struct nvme_tcp_queue *queue)
| ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1438:13: warning: 'nvme_tcp_free_queue' defined but not used [-Wunused-function]
1438 | static void nvme_tcp_free_queue(struct nvme_ctrl *nctrl, int qid)
| ^~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1422:12: warning: 'nvme_tcp_alloc_async_req' defined but not used [-Wunused-function]
1422 | static int nvme_tcp_alloc_async_req(struct nvme_tcp_ctrl *ctrl)
| ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1415:13: warning: 'nvme_tcp_free_async_req' defined but not used [-Wunused-function]
1415 | static void nvme_tcp_free_async_req(struct nvme_tcp_ctrl *ctrl)
| ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1377:13: warning: 'nvme_tcp_io_work' defined but not used [-Wunused-function]
1377 | static void nvme_tcp_io_work(struct work_struct *w)
| ^~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1094:13: warning: 'nvme_tcp_state_change' defined but not used [-Wunused-function]
1094 | static void nvme_tcp_state_change(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1078:13: warning: 'nvme_tcp_write_space' defined but not used [-Wunused-function]
1078 | static void nvme_tcp_write_space(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:1064:13: warning: 'nvme_tcp_data_ready' defined but not used [-Wunused-function]
1064 | static void nvme_tcp_data_ready(struct sock *sk)
| ^~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:587:12: warning: 'nvme_tcp_init_admin_hctx' defined but not used [-Wunused-function]
587 | static int nvme_tcp_init_admin_hctx(struct blk_mq_hw_ctx *hctx, void *data,
| ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:577:12: warning: 'nvme_tcp_init_hctx' defined but not used [-Wunused-function]
577 | static int nvme_tcp_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
| ^~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:550:12: warning: 'nvme_tcp_init_request' defined but not used [-Wunused-function]
550 | static int nvme_tcp_init_request(struct blk_mq_tag_set *set,
| ^~~~~~~~~~~~~~~~~~~~~
>> drivers/nvme/host/tcp.c:542:13: warning: 'nvme_tcp_exit_request' defined but not used [-Wunused-function]
542 | static void nvme_tcp_exit_request(struct blk_mq_tag_set *set,
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:208:32: warning: 'nvme_tcp_admin_mq_ops' defined but not used [-Wunused-const-variable=]
208 | static const struct blk_mq_ops nvme_tcp_admin_mq_ops;
| ^~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:207:32: warning: 'nvme_tcp_mq_ops' defined but not used [-Wunused-const-variable=]
207 | static const struct blk_mq_ops nvme_tcp_mq_ops;
| ^~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:70:13: warning: 'nvme_tcp_reclassify_socket' defined but not used [-Wunused-function]
70 | static void nvme_tcp_reclassify_socket(struct socket *sock)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:58:17: warning: 'nvme_tcp_cpu_queues' defined but not used [-Wunused-variable]
58 | static atomic_t nvme_tcp_cpu_queues[NR_CPUS];
| ^~~~~~~~~~~~~~~~~~~
drivers/nvme/host/tcp.c:51:12: warning: 'tls_handshake_timeout' defined but not used [-Wunused-variable]
51 | static int tls_handshake_timeout = 10;
| ^~~~~~~~~~~~~~~~~~~~~
vim +/pr_err +3089 drivers/nvme/host/tcp.c
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 3086
92b0b0ff0ba32e Chaitanya Kulkarni 2024-01-23 3087 MODULE_DESCRIPTION("NVMe host TCP transport driver");
3f2304f8c6d6ed Sagi Grimberg 2018-12-03 3088 MODULE_LICENSE("GPL v2");
723277b15ed971 Geliang Tang 2026-03-31 @3089 MODULE_ALIAS("nvme-tcp");
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On Mon, May 04, 2026 at 06:05:55PM +0530, Rohit Chavan wrote:
> pr_err("queue %d: data digest mismatch host: %s ctrl: %s\n",
> nvme_tcp_queue_id(queue),
> - queue->data_digest ? "enabled" : "disabled",
> - ctrl_ddgst ? "enabled" : "disabled");
> + str_enabled_disabled(queue->data_digest),
> + str_enabled_disabled(ctrl_ddgst));
I can't really see how this is considered an improvement.
Hi Christoph, Thank you for the feedback. My intent was to align the code with the standardized string helpers recently introduced in the kernel to reduce open-coding. However, I respect your preference for keeping the ternary form in the NVMe subsystem. I will drop this patch. Thanks, Rohit
On Fri, May 08, 2026 at 03:17:33PM +0530, Rohit Chavan wrote: > Hi Christoph, > > Thank you for the feedback. > > My intent was to align the code with the standardized string helpers > recently introduced in the kernel to reduce open-coding. However, > I respect your preference for keeping the ternary form in the > NVMe subsystem. I guess it's more of a question for the people adding the helpers, but it should also be in any place converting to it: what's the point? The helpers don't reduce the code size, but increase cognitive load. Not a good trade-off as far as I can tell, but maybe I'm missing something?
© 2016 - 2026 Red Hat, Inc.