From 2fa8447f2ffea69e6fce920fee4ce329fe7b536e Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Fri, 20 Apr 2018 15:58:40 -0700 Subject: [PATCH] bdev: Handle calls to spdk_bdev_unregister from non-SPDK threads Change-Id: Ic20993bdf5ae4e5ed7fbed7d630a0024462f7fc6 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/408534 Reviewed-by: Daniel Verkamp Tested-by: SPDK Automated Test System Reviewed-by: Changpeng Liu --- lib/bdev/bdev.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index bcfb8d7b6..d00a5d1f4 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -2659,9 +2659,17 @@ spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void { struct spdk_bdev_desc *desc, *tmp; bool do_destruct = true; + struct spdk_thread *thread; SPDK_DEBUGLOG(SPDK_LOG_BDEV, "Removing bdev %s from list\n", bdev->name); + thread = spdk_get_thread(); + if (!thread) { + /* The user called this from a non-SPDK thread. */ + cb_fn(cb_arg, -ENOTSUP); + return; + } + pthread_mutex_lock(&bdev->mutex); spdk_vbdev_remove_base_bdevs(bdev); @@ -2679,7 +2687,7 @@ spdk_bdev_unregister(struct spdk_bdev *bdev, spdk_bdev_unregister_cb cb_fn, void * we don't recursively unregister this bdev again if the remove_cb * immediately closes its descriptor. */ - spdk_thread_send_msg(spdk_get_thread(), _remove_notify, desc); + spdk_thread_send_msg(thread, _remove_notify, desc); } }