Commit ab5cc9dd authored by MengjinWu's avatar MengjinWu Committed by Tomasz Zawadzki
Browse files

lib/nbd: refine _nbd_fini process



_nbd_fini will make all NBDs into closing state.
remove _nbd_async, beasue it will call asynchronous error.

Signed-off-by: default avatarMengjinWu <mengjin.wu@intel.com>
Change-Id: Ifb873b7f079b735983bdf20c2df652be0a21919f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8035


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 628c230d
Loading
Loading
Loading
Loading
+12 −26
Original line number Diff line number Diff line
@@ -148,37 +148,23 @@ spdk_nbd_init(void)
}

static void
_nbd_stop_async(void *arg)
_nbd_fini(void *arg1)
{
	struct spdk_nbd_disk *nbd = arg;
	int rc;
	struct spdk_nbd_disk *nbd, *nbd_tmp;

	rc = spdk_nbd_stop(nbd);
	if (rc) {
		/* spdk_nbd_stop failed because some IO are still executing. Send a message
		* to this thread to try again later. */
		spdk_thread_send_msg(spdk_get_thread(),
				     _nbd_stop_async, nbd);
	} else {
		_nbd_fini(NULL);
	/* Change all nbds into closing state */
	TAILQ_FOREACH_SAFE(nbd, &g_spdk_nbd.disk_head, tailq, nbd_tmp) {
		if (nbd->state != NBD_DISK_STATE_HARDDISC) {
			spdk_nbd_stop(nbd);
		}
	}

static void
_nbd_fini(void *arg1)
{
	struct spdk_nbd_disk *nbd_first;

	nbd_first = TAILQ_FIRST(&g_spdk_nbd.disk_head);
	if (nbd_first) {
		/* Stop running spdk_nbd_disk */
		spdk_thread_send_msg(spdk_io_channel_get_thread(nbd_first->ch),
				     _nbd_stop_async, nbd_first);
	} else {
		/* We can directly call final function here, because
		 spdk_subsystem_fini_next handles the case: current thread does not equal
		 to g_final_thread */
	/* Check if all nbds closed */
	if (!TAILQ_FIRST(&g_spdk_nbd.disk_head)) {
		g_fini_cb_fn(g_fini_cb_arg);
	} else {
		spdk_thread_send_msg(spdk_get_thread(),
				     _nbd_fini, NULL);
	}
}