diff options
author | Krishna Kumar <krkumar2@in.ibm.com> | 2006-10-17 00:39:11 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2006-11-29 18:33:05 -0500 |
commit | a1a733f65b091fdad3d0783e648c92b491933ab6 (patch) | |
tree | e39f19948804c40f583780e23cfa8f87215766c4 /drivers/infiniband | |
parent | f115db4803effd8207c3169590fb3f13336a4093 (diff) |
RDMA/cma: Rewrite cma_req_handler() to encapsulate common code
Rewrite cma_req_handler error handling case to encapsulate
common code.
Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/core/cma.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 9aba4ea94933..b449e26b84d2 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -935,13 +935,8 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
935 | mutex_lock(&lock); | 935 | mutex_lock(&lock); |
936 | ret = cma_acquire_dev(conn_id); | 936 | ret = cma_acquire_dev(conn_id); |
937 | mutex_unlock(&lock); | 937 | mutex_unlock(&lock); |
938 | if (ret) { | 938 | if (ret) |
939 | ret = -ENODEV; | 939 | goto release_conn_id; |
940 | cma_exch(conn_id, CMA_DESTROYING); | ||
941 | cma_release_remove(conn_id); | ||
942 | rdma_destroy_id(&conn_id->id); | ||
943 | goto out; | ||
944 | } | ||
945 | 940 | ||
946 | conn_id->cm_id.ib = cm_id; | 941 | conn_id->cm_id.ib = cm_id; |
947 | cm_id->context = conn_id; | 942 | cm_id->context = conn_id; |
@@ -951,13 +946,17 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event) | |||
951 | ret = cma_notify_user(conn_id, RDMA_CM_EVENT_CONNECT_REQUEST, 0, | 946 | ret = cma_notify_user(conn_id, RDMA_CM_EVENT_CONNECT_REQUEST, 0, |
952 | ib_event->private_data + offset, | 947 | ib_event->private_data + offset, |
953 | IB_CM_REQ_PRIVATE_DATA_SIZE - offset); | 948 | IB_CM_REQ_PRIVATE_DATA_SIZE - offset); |
954 | if (ret) { | 949 | if (!ret) |
955 | /* Destroy the CM ID by returning a non-zero value. */ | 950 | goto out; |
956 | conn_id->cm_id.ib = NULL; | 951 | |
957 | cma_exch(conn_id, CMA_DESTROYING); | 952 | /* Destroy the CM ID by returning a non-zero value. */ |
958 | cma_release_remove(conn_id); | 953 | conn_id->cm_id.ib = NULL; |
959 | rdma_destroy_id(&conn_id->id); | 954 | |
960 | } | 955 | release_conn_id: |
956 | cma_exch(conn_id, CMA_DESTROYING); | ||
957 | cma_release_remove(conn_id); | ||
958 | rdma_destroy_id(&conn_id->id); | ||
959 | |||
961 | out: | 960 | out: |
962 | cma_release_remove(listen_id); | 961 | cma_release_remove(listen_id); |
963 | return ret; | 962 | return ret; |