From 34d31cdc209ab59e4fec6b066943d2b9c2cef3c9 Mon Sep 17 00:00:00 2001 From: Mike Gerdts Date: Thu, 22 Sep 2022 08:40:05 -0500 Subject: [PATCH] blob: refactor destruction of back_bs_dev External snapshots have a slightly more complicated cleanup of back_bs_dev. This moves all calls to back_bs_dev->destroy() into a function so that this more complicated cleanup can have a single implementation. Signed-off-by: Mike Gerdts Change-Id: I78460aa3877481788118e2b0b76931dcf5c56338 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14972 Reviewed-by: Jim Harris Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker --- lib/blob/blobstore.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index 35f7e581e..dba7e37cb 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -339,6 +339,13 @@ blob_free(struct spdk_blob *blob) free(blob); } +static void +blob_back_bs_destroy(struct spdk_blob *blob) +{ + blob->back_bs_dev->destroy(blob->back_bs_dev); + blob->back_bs_dev = NULL; +} + struct freeze_io_ctx { struct spdk_bs_cpl cpl; struct spdk_blob *blob; @@ -6235,7 +6242,7 @@ bs_snapshot_freeze_cpl(void *cb_arg, int rc) ctx->frozen = true; if (newblob->back_bs_dev) { - newblob->back_bs_dev->destroy(newblob->back_bs_dev); + blob_back_bs_destroy(newblob); } /* set new back_bs_dev for snapshot */ newblob->back_bs_dev = origblob->back_bs_dev; @@ -6532,7 +6539,7 @@ bs_inflate_blob_set_parent_cpl(void *cb_arg, struct spdk_blob *_parent, int bser bs_blob_list_remove(_blob); _blob->parent_id = _parent->id; - _blob->back_bs_dev->destroy(_blob->back_bs_dev); + blob_back_bs_destroy(_blob); _blob->back_bs_dev = bs_create_blob_bs_dev(_parent); bs_blob_list_add(_blob); @@ -6549,8 +6556,7 @@ bs_inflate_blob_done(struct spdk_clone_snapshot_ctx *ctx) /* remove thin provisioning */ bs_blob_list_remove(_blob); _blob->invalid_flags = _blob->invalid_flags & ~SPDK_BLOB_THIN_PROV; - _blob->back_bs_dev->destroy(_blob->back_bs_dev); - _blob->back_bs_dev = NULL; + blob_back_bs_destroy(_blob); _blob->parent_id = SPDK_BLOBID_INVALID; } else { _parent = ((struct spdk_blob_bs_dev *)(_blob->back_bs_dev))->blob; @@ -6563,7 +6569,7 @@ bs_inflate_blob_done(struct spdk_clone_snapshot_ctx *ctx) bs_blob_list_remove(_blob); _blob->parent_id = SPDK_BLOBID_INVALID; - _blob->back_bs_dev->destroy(_blob->back_bs_dev); + blob_back_bs_destroy(_blob); _blob->back_bs_dev = bs_create_zeroes_dev(); } @@ -7042,7 +7048,7 @@ static void delete_snapshot_update_extent_pages_cpl(struct delete_snapshot_ctx *ctx) { /* Delete old backing bs_dev from clone (related to snapshot that will be removed) */ - ctx->clone->back_bs_dev->destroy(ctx->clone->back_bs_dev); + blob_back_bs_destroy(ctx->clone); /* Set/remove snapshot xattr and switch parent ID and backing bs_dev on clone... */ if (ctx->parent_snapshot_entry != NULL) {