Commit 7e6d8079 authored by Anton Nayshtut's avatar Anton Nayshtut Committed by Konrad Sztyber
Browse files

lib/fuse_dispatcher: destruction sequence fixed



fuse_dispatcher now calls the spdk_fsdev_close() in the correct thread.

Change-Id: Ic65fa03f279b6459cb76030657a65f8aa3f9144d
Signed-off-by: default avatarAnton Nayshtut <anayshtut@nvidia.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25026


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
parent 8dce8605
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -3027,6 +3027,7 @@ spdk_fuse_dispatcher_submit_request(struct spdk_fuse_dispatcher *disp,

struct fuse_dispatcher_delete_ctx {
	struct spdk_fuse_dispatcher *disp;
	struct spdk_thread *thread;
	spdk_fuse_dispatcher_delete_cpl_cb cb;
	void *cb_arg;
};
@@ -3072,6 +3073,25 @@ fuse_dispatcher_delete_put_channel(struct spdk_io_channel_iter *i)
	spdk_for_each_channel_continue(i, 0);
}

static void
fuse_dispatcher_delete_done_msg(void *_ctx)
{
	struct fuse_dispatcher_delete_ctx *ctx = _ctx;

	fuse_dispatcher_delete_done(ctx, 0);
}

static void
fuse_dispatcher_delete_close_fsdev_msg(void *_ctx)
{
	struct fuse_dispatcher_delete_ctx *ctx = _ctx;
	struct spdk_fuse_dispatcher *disp = ctx->disp;

	spdk_fsdev_close(disp->desc);

	spdk_thread_send_msg(ctx->thread, fuse_dispatcher_delete_done_msg, ctx);
}

static void
fuse_dispatcher_delete_put_channel_done(struct spdk_io_channel_iter *i, int status)
{
@@ -3087,9 +3107,7 @@ fuse_dispatcher_delete_put_channel_done(struct spdk_io_channel_iter *i, int stat
	SPDK_DEBUGLOG(fuse_dispatcher, "%s: putting channels succeeded. Releasing the fdev\n",
		      fuse_dispatcher_name(disp));

	spdk_fsdev_close(disp->desc);

	fuse_dispatcher_delete_done(ctx, 0);
	spdk_thread_send_msg(disp->fsdev_thread, fuse_dispatcher_delete_close_fsdev_msg, ctx);
}

int
@@ -3107,6 +3125,7 @@ spdk_fuse_dispatcher_delete(struct spdk_fuse_dispatcher *disp,
	ctx->disp = disp;
	ctx->cb = cb;
	ctx->cb_arg = cb_arg;
	ctx->thread = spdk_get_thread();

	if (disp->desc) {
		SPDK_DEBUGLOG(fuse_dispatcher, "%s: fsdev still open. Releasing the channels.\n",