From 72caa1d06b6283fb4ba627540b2425400d3ab0bd Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 7 Dec 2018 16:22:25 +0900 Subject: [PATCH] iscsi: Refactor spdk_iscsi_conn_free Current implementation is a little complicated and a little refactoring will improve maintainability. Change-Id: I23bdbe6a0e14739631c4b4f211bedefc9742f410 Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/436447 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/iscsi/conn.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 48fb38ea3..d361a8767 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -454,16 +454,17 @@ spdk_iscsi_conn_free(struct spdk_iscsi_conn *conn) { struct spdk_iscsi_sess *sess; int idx; - uint32_t i, j; + uint32_t i; pthread_mutex_lock(&g_conns_mutex); + if (conn->sess == NULL) { + goto end; + } + idx = -1; sess = conn->sess; conn->sess = NULL; - if (sess == NULL) { - goto end; - } for (i = 0; i < sess->connections; i++) { if (sess->conns[i] == conn) { @@ -472,31 +473,26 @@ spdk_iscsi_conn_free(struct spdk_iscsi_conn *conn) } } - if (sess->connections < 1) { - SPDK_ERRLOG("zero connection\n"); - sess->connections = 0; + if (idx < 0) { + SPDK_ERRLOG("remove conn not found\n"); } else { - if (idx < 0) { - SPDK_ERRLOG("remove conn not found\n"); - } else { - for (j = idx; j < sess->connections - 1; j++) { - sess->conns[j] = sess->conns[j + 1]; - } - sess->conns[sess->connections - 1] = NULL; + for (i = idx; i < sess->connections - 1; i++) { + sess->conns[i] = sess->conns[i + 1]; } + sess->conns[sess->connections - 1] = NULL; sess->connections--; + + if (sess->connections == 0) { + /* cleanup last connection */ + SPDK_DEBUGLOG(SPDK_LOG_ISCSI, + "cleanup last conn free sess\n"); + spdk_free_sess(sess); + } } SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "Terminating connections(tsih %d): %d\n", sess->tsih, sess->connections); - if (sess->connections == 0) { - /* cleanup last connection */ - SPDK_DEBUGLOG(SPDK_LOG_ISCSI, - "cleanup last conn free sess\n"); - spdk_free_sess(sess); - } - end: SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "cleanup free conn\n"); _spdk_iscsi_conn_free(conn);