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;
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;
}
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:
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;
}