lib/iscsi: Remove unnecessary declaration of iscsi_conn_stop()

We can remove the declaration of iscsi_conn_stop() by moving
the related functions before the caller to iscsi_conn_stop(),
_iscsi_conn_check_shutdown() and _iscsi_conn_destruct().

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ia86f6685c9e90692d8dae744495bd6f8fc310990
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470556
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-10-07 07:45:47 +09:00 committed by Changpeng Liu
parent 0608e00173
commit 26d6706bc5

View File

@ -70,7 +70,6 @@ static pthread_mutex_t g_conns_mutex = PTHREAD_MUTEX_INITIALIZER;
static struct spdk_poller *g_shutdown_timer = NULL; static struct spdk_poller *g_shutdown_timer = NULL;
static void iscsi_conn_stop(struct spdk_iscsi_conn *conn);
static void iscsi_conn_sock_cb(void *arg, struct spdk_sock_group *group, static void iscsi_conn_sock_cb(void *arg, struct spdk_sock_group *group,
struct spdk_sock *sock); struct spdk_sock *sock);
@ -455,126 +454,6 @@ end:
pthread_mutex_unlock(&g_conns_mutex); pthread_mutex_unlock(&g_conns_mutex);
} }
static int
_iscsi_conn_check_shutdown(void *arg)
{
struct spdk_iscsi_conn *conn = arg;
int rc;
rc = iscsi_conn_free_tasks(conn);
if (rc < 0) {
return 1;
}
spdk_poller_unregister(&conn->shutdown_timer);
iscsi_conn_stop(conn);
iscsi_conn_free(conn);
return 1;
}
static void
_iscsi_conn_destruct(struct spdk_iscsi_conn *conn)
{
int rc;
spdk_clear_all_transfer_task(conn, NULL, NULL);
iscsi_poll_group_remove_conn(conn->pg, conn);
spdk_sock_close(&conn->sock);
spdk_poller_unregister(&conn->logout_timer);
rc = iscsi_conn_free_tasks(conn);
if (rc < 0) {
/* The connection cannot be freed yet. Check back later. */
conn->shutdown_timer = spdk_poller_register(_iscsi_conn_check_shutdown, conn, 1000);
} else {
iscsi_conn_stop(conn);
iscsi_conn_free(conn);
}
}
static int
_iscsi_conn_check_pending_tasks(void *arg)
{
struct spdk_iscsi_conn *conn = arg;
if (conn->dev != NULL && spdk_scsi_dev_has_pending_tasks(conn->dev)) {
return 1;
}
spdk_poller_unregister(&conn->shutdown_timer);
_iscsi_conn_destruct(conn);
return 1;
}
void
spdk_iscsi_conn_destruct(struct spdk_iscsi_conn *conn)
{
/* If a connection is already in exited status, just return */
if (conn->state >= ISCSI_CONN_STATE_EXITED) {
return;
}
conn->state = ISCSI_CONN_STATE_EXITED;
if (conn->sess != NULL && conn->pending_task_cnt > 0) {
iscsi_conn_cleanup_backend(conn);
}
if (conn->dev != NULL && spdk_scsi_dev_has_pending_tasks(conn->dev)) {
conn->shutdown_timer = spdk_poller_register(_iscsi_conn_check_pending_tasks, conn, 1000);
} else {
_iscsi_conn_destruct(conn);
}
}
int
spdk_iscsi_get_active_conns(struct spdk_iscsi_tgt_node *target)
{
struct spdk_iscsi_conn *conn;
int num = 0;
int i;
pthread_mutex_lock(&g_conns_mutex);
for (i = 0; i < MAX_ISCSI_CONNECTIONS; i++) {
conn = find_iscsi_connection_by_id(i);
if (conn == NULL) {
continue;
}
if (target != NULL && conn->target != target) {
continue;
}
num++;
}
pthread_mutex_unlock(&g_conns_mutex);
return num;
}
static void
iscsi_conn_check_shutdown_cb(void *arg1)
{
_iscsi_conns_cleanup();
spdk_shutdown_iscsi_conns_done();
}
static int
iscsi_conn_check_shutdown(void *arg)
{
if (spdk_iscsi_get_active_conns(NULL) != 0) {
return 1;
}
spdk_poller_unregister(&g_shutdown_timer);
spdk_thread_send_msg(spdk_get_thread(), iscsi_conn_check_shutdown_cb, NULL);
return 1;
}
static void static void
iscsi_conn_close_lun(struct spdk_iscsi_conn *conn, int lun_id) iscsi_conn_close_lun(struct spdk_iscsi_conn *conn, int lun_id)
{ {
@ -732,6 +611,126 @@ iscsi_conn_stop(struct spdk_iscsi_conn *conn)
spdk_get_thread()); spdk_get_thread());
} }
static int
_iscsi_conn_check_shutdown(void *arg)
{
struct spdk_iscsi_conn *conn = arg;
int rc;
rc = iscsi_conn_free_tasks(conn);
if (rc < 0) {
return 1;
}
spdk_poller_unregister(&conn->shutdown_timer);
iscsi_conn_stop(conn);
iscsi_conn_free(conn);
return 1;
}
static void
_iscsi_conn_destruct(struct spdk_iscsi_conn *conn)
{
int rc;
spdk_clear_all_transfer_task(conn, NULL, NULL);
iscsi_poll_group_remove_conn(conn->pg, conn);
spdk_sock_close(&conn->sock);
spdk_poller_unregister(&conn->logout_timer);
rc = iscsi_conn_free_tasks(conn);
if (rc < 0) {
/* The connection cannot be freed yet. Check back later. */
conn->shutdown_timer = spdk_poller_register(_iscsi_conn_check_shutdown, conn, 1000);
} else {
iscsi_conn_stop(conn);
iscsi_conn_free(conn);
}
}
static int
_iscsi_conn_check_pending_tasks(void *arg)
{
struct spdk_iscsi_conn *conn = arg;
if (conn->dev != NULL && spdk_scsi_dev_has_pending_tasks(conn->dev)) {
return 1;
}
spdk_poller_unregister(&conn->shutdown_timer);
_iscsi_conn_destruct(conn);
return 1;
}
void
spdk_iscsi_conn_destruct(struct spdk_iscsi_conn *conn)
{
/* If a connection is already in exited status, just return */
if (conn->state >= ISCSI_CONN_STATE_EXITED) {
return;
}
conn->state = ISCSI_CONN_STATE_EXITED;
if (conn->sess != NULL && conn->pending_task_cnt > 0) {
iscsi_conn_cleanup_backend(conn);
}
if (conn->dev != NULL && spdk_scsi_dev_has_pending_tasks(conn->dev)) {
conn->shutdown_timer = spdk_poller_register(_iscsi_conn_check_pending_tasks, conn, 1000);
} else {
_iscsi_conn_destruct(conn);
}
}
int
spdk_iscsi_get_active_conns(struct spdk_iscsi_tgt_node *target)
{
struct spdk_iscsi_conn *conn;
int num = 0;
int i;
pthread_mutex_lock(&g_conns_mutex);
for (i = 0; i < MAX_ISCSI_CONNECTIONS; i++) {
conn = find_iscsi_connection_by_id(i);
if (conn == NULL) {
continue;
}
if (target != NULL && conn->target != target) {
continue;
}
num++;
}
pthread_mutex_unlock(&g_conns_mutex);
return num;
}
static void
iscsi_conn_check_shutdown_cb(void *arg1)
{
_iscsi_conns_cleanup();
spdk_shutdown_iscsi_conns_done();
}
static int
iscsi_conn_check_shutdown(void *arg)
{
if (spdk_iscsi_get_active_conns(NULL) != 0) {
return 1;
}
spdk_poller_unregister(&g_shutdown_timer);
spdk_thread_send_msg(spdk_get_thread(), iscsi_conn_check_shutdown_cb, NULL);
return 1;
}
void void
spdk_iscsi_conns_start_exit(struct spdk_iscsi_tgt_node *target) spdk_iscsi_conns_start_exit(struct spdk_iscsi_tgt_node *target)
{ {