From 02a4d6cb41738a451aacafff65b81a8a53d74407 Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Tue, 18 Jul 2017 20:13:41 +0200 Subject: [PATCH] split: close descriptor and release bdev module when freeing split base This was probably overlooked in patch be9a3b9f. Fixes: be9a3b9f6955 ("bdev: pass descriptors for I/O operations") Change-Id: If29ad65ac168f3dbf7e1602f26f939dfbf17599a Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/370180 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker --- lib/bdev/split/vbdev_split.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/bdev/split/vbdev_split.c b/lib/bdev/split/vbdev_split.c index 054a63913..0e23970e7 100644 --- a/lib/bdev/split/vbdev_split.c +++ b/lib/bdev/split/vbdev_split.c @@ -153,11 +153,21 @@ vbdev_split_base_get_ref(struct split_base *split_base, struct split_disk *split split_disk->split_base = split_base; } +static void +vbdev_split_base_free(struct split_base *split_base) +{ + assert(split_base->base_bdev); + assert(split_base->desc); + spdk_bdev_module_release_bdev(split_base->base_bdev); + spdk_bdev_close(split_base->desc); + free(split_base); +} + static void vbdev_split_base_put_ref(struct split_base *split_base) { if (__sync_sub_and_fetch(&split_base->ref, 1) == 0) { - free(split_base); + vbdev_split_base_free(split_base); } } @@ -346,9 +356,7 @@ vbdev_split_create(struct spdk_bdev *base_bdev, uint64_t split_count, uint64_t s cleanup: if (split_base->ref == 0) { /* If no split_disk instances were created, free the resources */ - spdk_bdev_module_release_bdev(split_base->base_bdev); - spdk_bdev_close(split_base->desc); - free(split_base); + vbdev_split_base_free(split_base); } return rc;