bdev: Handle calls to spdk_bdev_unregister from non-SPDK threads

Change-Id: Ic20993bdf5ae4e5ed7fbed7d630a0024462f7fc6
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/408534
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Ben Walker 2018-04-20 15:58:40 -07:00
parent 106684ff45
commit 2fa8447f2f

View File

@ -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);
}
}