IB/iser: Seperate iser_conn and iscsi_endpoint storage space
[deliverable/linux.git] / drivers / infiniband / ulp / iser / iser_verbs.c
index ea01075f9f9b81b180ecfe85f02d4b18a77a494f..fffb4ac4c6acf4b274befd5173ab7fc16b4647e2 100644 (file)
@@ -620,7 +620,7 @@ void iser_conn_release(struct iser_conn *ib_conn)
                rdma_destroy_id(ib_conn->cma_id);
                ib_conn->cma_id = NULL;
        }
-       iscsi_destroy_endpoint(ib_conn->ep);
+       kfree(ib_conn);
 }
 
 /**
@@ -694,13 +694,15 @@ static void iser_route_handler(struct rdma_cm_id *cma_id)
        struct rdma_conn_param conn_param;
        int    ret;
        struct iser_cm_hdr req_hdr;
+       struct iser_conn *ib_conn = (struct iser_conn *)cma_id->context;
+       struct iser_device *device = ib_conn->device;
 
        ret = iser_create_ib_conn_res((struct iser_conn *)cma_id->context);
        if (ret)
                goto failure;
 
        memset(&conn_param, 0, sizeof conn_param);
-       conn_param.responder_resources = 4;
+       conn_param.responder_resources = device->dev_attr.max_qp_rd_atom;
        conn_param.initiator_depth     = 1;
        conn_param.retry_count         = 7;
        conn_param.rnr_retry_count     = 6;
@@ -785,6 +787,7 @@ static int iser_cma_handler(struct rdma_cm_id *cma_id, struct rdma_cm_event *eve
        case RDMA_CM_EVENT_DISCONNECTED:
        case RDMA_CM_EVENT_DEVICE_REMOVAL:
        case RDMA_CM_EVENT_ADDR_CHANGE:
+       case RDMA_CM_EVENT_TIMEWAIT_EXIT:
                iser_disconnected_handler(cma_id);
                break;
        default:
@@ -810,22 +813,19 @@ void iser_conn_init(struct iser_conn *ib_conn)
  * sleeps until the connection is established or rejected
  */
 int iser_connect(struct iser_conn   *ib_conn,
-                struct sockaddr_in *src_addr,
-                struct sockaddr_in *dst_addr,
+                struct sockaddr    *src_addr,
+                struct sockaddr    *dst_addr,
                 int                 non_blocking)
 {
-       struct sockaddr *src, *dst;
        int err = 0;
 
-       sprintf(ib_conn->name, "%pI4:%d",
-               &dst_addr->sin_addr.s_addr, dst_addr->sin_port);
+       sprintf(ib_conn->name, "%pISp", dst_addr);
+
+       iser_info("connecting to: %s\n", ib_conn->name);
 
        /* the device is known only --after-- address resolution */
        ib_conn->device = NULL;
 
-       iser_info("connecting to: %pI4, port 0x%x\n",
-                 &dst_addr->sin_addr, dst_addr->sin_port);
-
        ib_conn->state = ISER_CONN_PENDING;
 
        ib_conn->cma_id = rdma_create_id(iser_cma_handler,
@@ -837,9 +837,7 @@ int iser_connect(struct iser_conn   *ib_conn,
                goto id_failure;
        }
 
-       src = (struct sockaddr *)src_addr;
-       dst = (struct sockaddr *)dst_addr;
-       err = rdma_resolve_addr(ib_conn->cma_id, src, dst, 1000);
+       err = rdma_resolve_addr(ib_conn->cma_id, src_addr, dst_addr, 1000);
        if (err) {
                iser_err("rdma_resolve_addr failed: %d\n", err);
                goto addr_failure;
This page took 0.028379 seconds and 5 git commands to generate.