summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Zhu <zhu.yanjun@ionos.com>2026-01-07 19:15:11 +0300
committerLeon Romanovsky <leon@kernel.org>2026-01-13 16:01:13 +0300
commitf85febf57bb567b59b41a13c9bf845a73b616d10 (patch)
treec261be903e0ad4b177e3f27ce508293dd34a9d17
parent9293e042782df38434191de8f3703fe2cb808ad6 (diff)
downloadlinux-f85febf57bb567b59b41a13c9bf845a73b616d10.tar.xz
RDMA/rtrs: Improve error logging for RDMA cm events
The member variable status in the struct rdma_cm_event is used for both linux errors and the errors definded in rdma stack. Signed-off-by: Kim Zhu <zhu.yanjun@ionos.com> Reviewed-by: Md Haris Iqbal <haris.iqbal@ionos.com> Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com> Link: https://patch.msgid.link/20260107161517.56357-5-haris.iqbal@ionos.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
-rw-r--r--drivers/infiniband/ulp/rtrs/rtrs-clt.c46
-rw-r--r--drivers/infiniband/ulp/rtrs/rtrs-srv.c22
2 files changed, 54 insertions, 14 deletions
diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
index 58042d835045..1cd4d333d417 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
@@ -1946,8 +1946,8 @@ static int rtrs_rdma_conn_rejected(struct rtrs_clt_con *con,
status, rej_msg, ERR_PTR(errno));
} else {
rtrs_err(s,
- "Connect rejected but with malformed message: status %pe (%s)\n",
- ERR_PTR(status), rej_msg);
+ "Connect rejected but with malformed message: status %d (%s)\n",
+ status, rej_msg);
}
return -ECONNRESET;
@@ -2014,27 +2014,53 @@ static int rtrs_clt_rdma_cm_handler(struct rdma_cm_id *cm_id,
case RDMA_CM_EVENT_UNREACHABLE:
case RDMA_CM_EVENT_ADDR_CHANGE:
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
- rtrs_wrn(s, "CM error (CM event: %s, err: %pe)\n",
- rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ rtrs_wrn(s, "CM error (CM event: %s, err: %pe)\n",
+ rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ rtrs_wrn(s, "CM error (CM event: %s, err: %s)\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
cm_err = -ECONNRESET;
break;
case RDMA_CM_EVENT_ADDR_ERROR:
case RDMA_CM_EVENT_ROUTE_ERROR:
- rtrs_wrn(s, "CM error (CM event: %s, err: %pe)\n",
- rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ rtrs_wrn(s, "CM error (CM event: %s, err: %pe)\n",
+ rdma_event_msg(ev->event),
+ ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ rtrs_wrn(s, "CM error (CM event: %s, err: %s)\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
cm_err = -EHOSTUNREACH;
break;
case RDMA_CM_EVENT_DEVICE_REMOVAL:
/*
* Device removal is a special case. Queue close and return 0.
*/
- rtrs_wrn_rl(s, "CM event: %s, status: %pe\n", rdma_event_msg(ev->event),
- ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ rtrs_wrn_rl(s, "CM event: %s, status: %pe\n",
+ rdma_event_msg(ev->event),
+ ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ rtrs_wrn_rl(s, "CM event: %s, status: %s\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
rtrs_clt_close_conns(clt_path, false);
return 0;
default:
- rtrs_err(s, "Unexpected RDMA CM error (CM event: %s, err: %pe)\n",
- rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ rtrs_err(s, "Unexpected RDMA CM error (CM event: %s, err: %pe)\n",
+ rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ rtrs_err(s, "Unexpected RDMA CM error (CM event: %s, err: %s)\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
cm_err = -ECONNRESET;
break;
}
diff --git a/drivers/infiniband/ulp/rtrs/rtrs-srv.c b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
index 7ed8910ef7f5..9b8567e5ea38 100644
--- a/drivers/infiniband/ulp/rtrs/rtrs-srv.c
+++ b/drivers/infiniband/ulp/rtrs/rtrs-srv.c
@@ -2012,8 +2012,15 @@ static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id,
case RDMA_CM_EVENT_REJECTED:
case RDMA_CM_EVENT_CONNECT_ERROR:
case RDMA_CM_EVENT_UNREACHABLE:
- rtrs_err(s, "CM error (CM event: %s, err: %pe)\n",
- rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ rtrs_err(s, "CM error (CM event: %s, err: %pe)\n",
+ rdma_event_msg(ev->event),
+ ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ rtrs_err(s, "CM error (CM event: %s, err: %s)\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
fallthrough;
case RDMA_CM_EVENT_DISCONNECTED:
case RDMA_CM_EVENT_ADDR_CHANGE:
@@ -2022,8 +2029,15 @@ static int rtrs_srv_rdma_cm_handler(struct rdma_cm_id *cm_id,
close_path(srv_path);
break;
default:
- pr_err("Ignoring unexpected CM event %s, err %pe\n",
- rdma_event_msg(ev->event), ERR_PTR(ev->status));
+ if (ev->status < 0) {
+ pr_err("Ignoring unexpected CM event %s, err %pe\n",
+ rdma_event_msg(ev->event),
+ ERR_PTR(ev->status));
+ } else if (ev->status > 0) {
+ pr_err("Ignoring unexpected CM event %s, err %s\n",
+ rdma_event_msg(ev->event),
+ rdma_reject_msg(cm_id, ev->status));
+ }
break;
}