Commit f8461610 authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Jim Harris
Browse files

bdev: allow closing descriptor from it's remove_cb



bdev could be unregistered multiple times when all it's descriptors have
been instantly closed via it's remove_cb without any deferred
event/poller

Change-Id: I128716077b0512c6334bdd113220684f8cfcbecb
Signed-off-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/370949


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 522944bb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1437,6 +1437,7 @@ spdk_bdev_unregister(struct spdk_bdev *bdev)
{
	struct spdk_bdev_desc	*desc, *tmp;
	int			rc;
	bool			do_destruct = true;

	SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Removing bdev %s from list\n", bdev->name);

@@ -1447,12 +1448,13 @@ spdk_bdev_unregister(struct spdk_bdev *bdev)
	TAILQ_FOREACH_SAFE(desc, &bdev->open_descs, link, tmp) {
		if (desc->remove_cb) {
			pthread_mutex_unlock(&bdev->mutex);
			do_destruct = false;
			desc->remove_cb(desc->remove_ctx);
			pthread_mutex_lock(&bdev->mutex);
		}
	}

	if (!TAILQ_EMPTY(&bdev->open_descs)) {
	if (!do_destruct) {
		pthread_mutex_unlock(&bdev->mutex);
		return;
	}