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:
parent
0608e00173
commit
26d6706bc5
241
lib/iscsi/conn.c
241
lib/iscsi/conn.c
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user