nvmf: simplify control flow in nvmf_recv()

Get rid of the gotos.

Change-Id: I884e3fe6131fdd55731dcf28bf1de43bc5c2c724
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-06-24 17:48:58 -07:00
parent a5b405c687
commit d9709895fa

View File

@ -428,10 +428,10 @@ nvmf_init_conn_properites(struct spdk_nvmf_conn *conn,
static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc)
{
struct nvme_qp_rx_desc *rx_desc;
struct nvme_qp_tx_desc *tx_desc = NULL;
struct nvme_qp_tx_desc *tx_desc;
struct spdk_nvmf_capsule_cmd *cap_hdr;
struct nvmf_request *req;
int ret = 0;
int ret;
rx_desc = (struct nvme_qp_rx_desc *)wc->wr_id;
cap_hdr = &rx_desc->cmd.nvmf_cmd;
@ -462,26 +462,26 @@ static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc)
remote host to query failure
via admin queue
*/
goto drop_recv;
return 0;
} else {
/* if overflow on the admin queue
there is no recovery, error out
to trigger disconnect
*/
goto recv_error;
return -1;
}
}
if (wc->byte_len < sizeof(*cap_hdr)) {
SPDK_ERRLOG("recv length less than capsule header\n");
goto recv_error;
return -1;
}
SPDK_TRACELOG(SPDK_TRACE_NVMF, "recv byte count 0x%x\n", wc->byte_len);
/* get a response buffer */
if (STAILQ_EMPTY(&conn->rdma.qp_tx_desc)) {
SPDK_ERRLOG("tx desc pool empty!\n");
goto recv_error;
return -1;
}
tx_desc = STAILQ_FIRST(&conn->rdma.qp_tx_desc);
nvmf_active_tx_desc(tx_desc);
@ -500,27 +500,26 @@ static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc)
rx_desc->bb, rx_desc->bb_sgl.length);
if (ret < 0) {
SPDK_ERRLOG("prep_data failed\n");
goto recv_error;
}
if (ret == 0) {
} else if (ret == 0) {
/* Data is available now; execute command immediately. */
ret = spdk_nvmf_request_exec(req);
if (ret < 0) {
SPDK_ERRLOG("Command execution failed\n");
goto recv_error;
}
} else if (ret > 0) {
/*
* Pending transfer from host to controller; command will continue
* once transfer is complete.
*/
ret = 0;
}
drop_recv:
return 0;
recv_error:
/* recover the tx_desc */
if (tx_desc != NULL) {
if (ret < 0) {
/* recover the tx_desc */
nvmf_deactive_tx_desc(tx_desc);
}
return -1;
return ret;
}
static int nvmf_check_rdma_completions(struct spdk_nvmf_conn *conn)