]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/rtrs: Improve error logging for RDMA cm events
authorKim Zhu <zhu.yanjun@ionos.com>
Wed, 7 Jan 2026 16:15:11 +0000 (17:15 +0100)
committerLeon Romanovsky <leon@kernel.org>
Tue, 13 Jan 2026 13:01:13 +0000 (08:01 -0500)
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>
drivers/infiniband/ulp/rtrs/rtrs-clt.c
drivers/infiniband/ulp/rtrs/rtrs-srv.c

index 58042d835045fb9593be3c6a49d857bde86168cd..1cd4d333d41790232b7f55393557777d9ac0693a 100644 (file)
@@ -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;
        }
index 7ed8910ef7f5af11d2e97ef39c99ac05a8185f6c..9b8567e5ea38f316f896288f384234de221f1564 100644 (file)
@@ -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;
        }