return 0;
}
-int rdma_disconnect(struct rdma_cm_id *id)
+int ucma_shutdown(struct rdma_cm_id *id)
{
- struct ucma_abi_disconnect cmd;
- struct cma_id_private *id_priv;
- int ret;
-
switch (id->verbs->device->transport_type) {
case IBV_TRANSPORT_IB:
- ret = ucma_modify_qp_err(id);
- break;
+ return ucma_modify_qp_err(id);
case IBV_TRANSPORT_IWARP:
- ret = ucma_modify_qp_sqd(id);
- break;
+ return ucma_modify_qp_sqd(id);
default:
- ret = ERR(EINVAL);
+ return ERR(EINVAL);
}
+}
+
+int rdma_disconnect(struct rdma_cm_id *id)
+{
+ struct ucma_abi_disconnect cmd;
+ struct cma_id_private *id_priv;
+ int ret;
+
+ ret = ucma_shutdown(id);
if (ret)
return ret;
struct sockaddr_ib *sib);
int ucma_max_qpsize(struct rdma_cm_id *id);
int ucma_complete(struct rdma_cm_id *id);
+int ucma_shutdown(struct rdma_cm_id *id);
static inline int ERR(int err)
{
if (rs->state & rs_disconnected) {
/* Generate event by flushing receives to unblock rpoll */
ibv_req_notify_cq(rs->cm_id->recv_cq, 0);
- rdma_disconnect(rs->cm_id);
+ ucma_shutdown(rs->cm_id);
}
return ret;