From c126086c001deaa7bae6934c269ee7cc43ccb250 Mon Sep 17 00:00:00 2001 From: paul luse Date: Fri, 26 Apr 2019 16:40:18 -0400 Subject: [PATCH] bdev/compress: fix issues with delete I didn't test delete after making a bunch of channel changes so there were some bugs in that path. Also as a drive-by I NULL out the base_desc in vbdev_reduce_load_cb() to be consistent with other places where I'm closing the base desc. Signed-off-by: paul luse Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452267 (master) (cherry picked from commit 168738298bff3e19d70b970fc24e259e7db7812e) Change-Id: Iddd5dc704cde8eb7a6a5a3a8481e064a5c6c6d4e Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457228 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Paul Luse Reviewed-by: Darek Stojaczyk --- lib/bdev/compress/vbdev_compress.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/bdev/compress/vbdev_compress.c b/lib/bdev/compress/vbdev_compress.c index e541df7fc..9941832dd 100644 --- a/lib/bdev/compress/vbdev_compress.c +++ b/lib/bdev/compress/vbdev_compress.c @@ -693,6 +693,7 @@ _reduce_destroy_cb(void *ctx, int reduce_errno) } comp_bdev->vol = NULL; + spdk_put_io_channel(comp_bdev->base_ch); spdk_bdev_unregister(&comp_bdev->comp_bdev, comp_bdev->delete_cb_fn, comp_bdev->delete_cb_arg); } @@ -703,11 +704,12 @@ delete_vol_unload_cb(void *cb_arg, int reduce_errno) { struct vbdev_compress *comp_bdev = (struct vbdev_compress *)cb_arg; - /* Close the underlying bdev. */ - spdk_bdev_close(comp_bdev->base_desc); if (reduce_errno) { SPDK_ERRLOG("number %d\n", reduce_errno); } else { + /* reducelib needs a channel to comm with the backing device */ + comp_bdev->base_ch = spdk_bdev_get_io_channel(comp_bdev->base_desc); + /* Clean the device before we free our resources. */ spdk_reduce_vol_destroy(&comp_bdev->backing_dev, _reduce_destroy_cb, comp_bdev); } @@ -1300,6 +1302,7 @@ vbdev_reduce_load_cb(void *cb_arg, struct spdk_reduce_vol *vol, int reduce_errno /* Done with metadata operations */ spdk_put_io_channel(meta_ctx->base_ch); spdk_bdev_close(meta_ctx->base_desc); + meta_ctx->base_desc = NULL; if (reduce_errno != 0) { /* This error means it is not a compress disk. */