@@ -642,16 +642,16 @@ static int erdma_proc_mpareply(struct erdma_cep *cep)
static void erdma_accept_newconn(struct erdma_cep *cep)
{
struct socket *s = cep->sock;
- struct socket *new_s = NULL;
- struct erdma_cep *new_cep = NULL;
- int ret = 0;
+ struct socket *new_s;
+ struct erdma_cep *new_cep;
+ int ret;
if (cep->state != ERDMA_EPSTATE_LISTENING)
- goto error;
+ return;
new_cep = erdma_cep_alloc(cep->dev);
if (!new_cep)
- goto error;
+ return;
/*
* 4: Allocate a sufficient number of work elements
@@ -659,7 +659,7 @@ static void erdma_accept_newconn(struct erdma_cep *cep)
* events, MPA header processing + MPA timeout.
*/
if (erdma_cm_alloc_work(new_cep, 4) != 0)
- goto error;
+ goto put_cep;
/*
* Copy saved socket callbacks from listening CEP
@@ -671,7 +671,7 @@ static void erdma_accept_newconn(struct erdma_cep *cep)
ret = kernel_accept(s, &new_s, O_NONBLOCK);
if (ret != 0)
- goto error;
+ goto put_cep;
new_cep->sock = new_s;
erdma_cep_get(new_cep);
@@ -682,7 +682,7 @@ static void erdma_accept_newconn(struct erdma_cep *cep)
ret = erdma_cm_queue_work(new_cep, ERDMA_CM_WORK_MPATIMEOUT);
if (ret)
- goto error;
+ goto disassoc_socket;
new_cep->listen_cep = cep;
erdma_cep_get(cep);
@@ -696,25 +696,20 @@ static void erdma_accept_newconn(struct erdma_cep *cep)
new_cep->listen_cep = NULL;
if (ret) {
erdma_cep_set_free(new_cep);
- goto error;
+ goto disassoc_socket;
}
}
erdma_cep_set_free(new_cep);
}
return;
-error:
- if (new_cep) {
- new_cep->state = ERDMA_EPSTATE_CLOSED;
- erdma_cancel_mpatimer(new_cep);
-
- erdma_cep_put(new_cep);
- }
-
- if (new_s) {
- erdma_socket_disassoc(new_s);
- sock_release(new_s);
- }
+disassoc_socket:
+ erdma_socket_disassoc(new_s);
+ sock_release(new_s);
+ new_cep->state = ERDMA_EPSTATE_CLOSED;
+ erdma_cancel_mpatimer(new_cep);
+put_cep:
+ erdma_cep_put(new_cep);
}
static int erdma_newconn_connected(struct erdma_cep *cep)