From 039b462d5a89ddde0e3577748393d09c4050123f Mon Sep 17 00:00:00 2001 From: Maciej Szwed Date: Wed, 4 Sep 2019 11:11:24 +0200 Subject: [PATCH] lvol: Remove blobstore on super blob creation/open error Fixes github issue #929 Signed-off-by: Maciej Szwed Change-Id: I54f7dbed3b686bf85b7ead52d51ca86c525d2ca5 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/467327 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/lvol/lvol.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/lvol/lvol.c b/lib/lvol/lvol.c index 4165d531d..d32e72624 100644 --- a/lib/lvol/lvol.c +++ b/lib/lvol/lvol.c @@ -427,6 +427,11 @@ spdk_lvs_load(struct spdk_bs_dev *bs_dev, spdk_lvs_op_with_handle_complete cb_fn spdk_bs_load(bs_dev, &opts, _spdk_lvs_load_cb, req); } +static void +_spdk_remove_bs_on_error_cb(void *cb_arg, int bserrno) +{ +} + static void _spdk_super_create_close_cb(void *cb_arg, int lvolerrno) { @@ -436,6 +441,7 @@ _spdk_super_create_close_cb(void *cb_arg, int lvolerrno) if (lvolerrno < 0) { SPDK_ERRLOG("Lvol store init failed: could not close super blob\n"); req->cb_fn(req->cb_arg, NULL, lvolerrno); + spdk_bs_destroy(lvs->blobstore, _spdk_remove_bs_on_error_cb, NULL); _spdk_lvs_free(lvs); free(req); return; @@ -455,6 +461,7 @@ _spdk_super_blob_set_cb(void *cb_arg, int lvolerrno) if (lvolerrno < 0) { req->cb_fn(req->cb_arg, NULL, lvolerrno); SPDK_ERRLOG("Lvol store init failed: could not set uuid for super blob\n"); + spdk_bs_destroy(lvs->blobstore, _spdk_remove_bs_on_error_cb, NULL); _spdk_lvs_free(lvs); free(req); return; @@ -474,6 +481,7 @@ _spdk_super_blob_init_cb(void *cb_arg, int lvolerrno) if (lvolerrno < 0) { req->cb_fn(req->cb_arg, NULL, lvolerrno); SPDK_ERRLOG("Lvol store init failed: could not set super blob\n"); + spdk_bs_destroy(lvs->blobstore, _spdk_remove_bs_on_error_cb, NULL); _spdk_lvs_free(lvs); free(req); return; @@ -495,6 +503,7 @@ _spdk_super_blob_create_open_cb(void *cb_arg, struct spdk_blob *blob, int lvoler if (lvolerrno < 0) { req->cb_fn(req->cb_arg, NULL, lvolerrno); SPDK_ERRLOG("Lvol store init failed: could not open super blob\n"); + spdk_bs_destroy(lvs->blobstore, _spdk_remove_bs_on_error_cb, NULL); _spdk_lvs_free(lvs); free(req); return; @@ -516,6 +525,7 @@ _spdk_super_blob_create_cb(void *cb_arg, spdk_blob_id blobid, int lvolerrno) if (lvolerrno < 0) { req->cb_fn(req->cb_arg, NULL, lvolerrno); SPDK_ERRLOG("Lvol store init failed: could not create super blob\n"); + spdk_bs_destroy(lvs->blobstore, _spdk_remove_bs_on_error_cb, NULL); _spdk_lvs_free(lvs); free(req); return;