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:
parent
a5b405c687
commit
d9709895fa
@ -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)
|
static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc)
|
||||||
{
|
{
|
||||||
struct nvme_qp_rx_desc *rx_desc;
|
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 spdk_nvmf_capsule_cmd *cap_hdr;
|
||||||
struct nvmf_request *req;
|
struct nvmf_request *req;
|
||||||
int ret = 0;
|
int ret;
|
||||||
|
|
||||||
rx_desc = (struct nvme_qp_rx_desc *)wc->wr_id;
|
rx_desc = (struct nvme_qp_rx_desc *)wc->wr_id;
|
||||||
cap_hdr = &rx_desc->cmd.nvmf_cmd;
|
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
|
remote host to query failure
|
||||||
via admin queue
|
via admin queue
|
||||||
*/
|
*/
|
||||||
goto drop_recv;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
/* if overflow on the admin queue
|
/* if overflow on the admin queue
|
||||||
there is no recovery, error out
|
there is no recovery, error out
|
||||||
to trigger disconnect
|
to trigger disconnect
|
||||||
*/
|
*/
|
||||||
goto recv_error;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wc->byte_len < sizeof(*cap_hdr)) {
|
if (wc->byte_len < sizeof(*cap_hdr)) {
|
||||||
SPDK_ERRLOG("recv length less than capsule header\n");
|
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);
|
SPDK_TRACELOG(SPDK_TRACE_NVMF, "recv byte count 0x%x\n", wc->byte_len);
|
||||||
|
|
||||||
/* get a response buffer */
|
/* get a response buffer */
|
||||||
if (STAILQ_EMPTY(&conn->rdma.qp_tx_desc)) {
|
if (STAILQ_EMPTY(&conn->rdma.qp_tx_desc)) {
|
||||||
SPDK_ERRLOG("tx desc pool empty!\n");
|
SPDK_ERRLOG("tx desc pool empty!\n");
|
||||||
goto recv_error;
|
return -1;
|
||||||
}
|
}
|
||||||
tx_desc = STAILQ_FIRST(&conn->rdma.qp_tx_desc);
|
tx_desc = STAILQ_FIRST(&conn->rdma.qp_tx_desc);
|
||||||
nvmf_active_tx_desc(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);
|
rx_desc->bb, rx_desc->bb_sgl.length);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SPDK_ERRLOG("prep_data failed\n");
|
SPDK_ERRLOG("prep_data failed\n");
|
||||||
goto recv_error;
|
} else if (ret == 0) {
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == 0) {
|
|
||||||
/* Data is available now; execute command immediately. */
|
/* Data is available now; execute command immediately. */
|
||||||
ret = spdk_nvmf_request_exec(req);
|
ret = spdk_nvmf_request_exec(req);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SPDK_ERRLOG("Command execution failed\n");
|
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:
|
if (ret < 0) {
|
||||||
return 0;
|
|
||||||
|
|
||||||
recv_error:
|
|
||||||
/* recover the tx_desc */
|
/* recover the tx_desc */
|
||||||
if (tx_desc != NULL) {
|
|
||||||
nvmf_deactive_tx_desc(tx_desc);
|
nvmf_deactive_tx_desc(tx_desc);
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nvmf_check_rdma_completions(struct spdk_nvmf_conn *conn)
|
static int nvmf_check_rdma_completions(struct spdk_nvmf_conn *conn)
|
||||||
|
Loading…
Reference in New Issue
Block a user