Commit 2fa8447f authored by Ben Walker's avatar Ben Walker
Browse files

bdev: Handle calls to spdk_bdev_unregister from non-SPDK threads



Change-Id: Ic20993bdf5ae4e5ed7fbed7d630a0024462f7fc6
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/408534


Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 106684ff
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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);
		}
	}