Commit 29b446a1 authored by paul luse's avatar paul luse Committed by Jim Harris
Browse files

bdev/compress: insert vol unload into destruct path



Change-Id: I10c7dff267ce469c0b01db9d6a1dbf89d2fad877
Signed-off-by: default avatarpaul luse <paul.e.luse@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447368


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 8944bb46
Loading
Loading
Loading
Loading
+36 −17
Original line number Diff line number Diff line
@@ -528,13 +528,14 @@ _reduce_destroy_cb(void *ctx, int reduce_errno)
		SPDK_ERRLOG("error %d\n", reduce_errno);
	}

	comp_bdev->vol = NULL;
	spdk_bdev_unregister(&comp_bdev->comp_bdev, comp_bdev->delete_cb_fn,
			     comp_bdev->delete_cb_arg);
}

/* Called by reduceLib after performing unload vol actions */
static void
spdk_reduce_vol_unload_cb(void *cb_arg, int reduce_errno)
delete_vol_unload_cb(void *cb_arg, int reduce_errno)
{
	struct vbdev_compress *comp_bdev = (struct vbdev_compress *)cb_arg;

@@ -542,20 +543,20 @@ spdk_reduce_vol_unload_cb(void *cb_arg, int reduce_errno)
	spdk_bdev_close(comp_bdev->base_desc);
	if (reduce_errno) {
		SPDK_ERRLOG("error %d\n", reduce_errno);
	}

	} else {
		/* Clean the device before we free our resources. */
		spdk_reduce_vol_destroy(&comp_bdev->backing_dev, _reduce_destroy_cb, comp_bdev);
	}
}

/* Called after we've unregistered following a hot remove callback.
 * Our finish entry point will be called next.
 */
static int
vbdev_compress_destruct(void *ctx)
static void
vbdev_compress_destruct_cb(void *cb_arg, int reduce_errno)
{
	struct vbdev_compress *comp_bdev = (struct vbdev_compress *)ctx;
	struct vbdev_compress *comp_bdev = (struct vbdev_compress *)cb_arg;

	if (reduce_errno) {
		SPDK_ERRLOG("error %d\n", reduce_errno);
	} else {
		/* Remove this device from the internal list */
		TAILQ_REMOVE(&g_vbdev_comp, comp_bdev, link);

@@ -565,8 +566,26 @@ vbdev_compress_destruct(void *ctx)
		/* Close the underlying bdev. */
		spdk_bdev_close(comp_bdev->base_desc);

		comp_bdev->vol = NULL;
		/* Unregister the io_device. */
		spdk_io_device_unregister(comp_bdev, _device_unregister_cb);
	}
}

/* Called after we've unregistered following a hot remove callback.
 * Our finish entry point will be called next.
 */
static int
vbdev_compress_destruct(void *ctx)
{
	struct vbdev_compress *comp_bdev = (struct vbdev_compress *)ctx;

	if (comp_bdev->vol != NULL) {
		/* Tell reduceLiib that we're done with this volume. */
		spdk_reduce_vol_unload(comp_bdev->vol, vbdev_compress_destruct_cb, comp_bdev);
	} else {
		vbdev_compress_destruct_cb(comp_bdev, 0);
	}

	return 0;
}
@@ -896,7 +915,7 @@ _comp_bdev_ch_destroy_cb(void *arg)

/* We provide this callback for the SPDK channel code to destroy a channel
 * created with our create callback. We just need to undo anything we did
 * when we created. If this bdev used its own poller, we'd unregsiter it here.
 * when we created. If this bdev used its own poller, we'd unregister it here.
 */
static void
comp_bdev_ch_destroy_cb(void *io_device, void *ctx_buf)
@@ -1096,8 +1115,8 @@ delete_compress_disk(struct spdk_bdev *bdev, spdk_delete_compress_complete cb_fn
	comp_bdev->delete_cb_fn = cb_fn;
	comp_bdev->delete_cb_arg = cb_arg;

	/* Tell reduceLib that we're done with this volume. */
	spdk_reduce_vol_unload(comp_bdev->vol, spdk_reduce_vol_unload_cb, comp_bdev);
	/* Tell reduceLiib that we're done with this volume. */
	spdk_reduce_vol_unload(comp_bdev->vol, delete_vol_unload_cb, comp_bdev);
}

/* Callback from reduce for then load is complete. We'll pass the vbdev_comp struct