From ee430f97b022376986dc59d65909a1e59c53880d Mon Sep 17 00:00:00 2001 From: Maciej Szwed Date: Fri, 26 Apr 2019 19:57:50 +0200 Subject: [PATCH] blobstore: Add _spdk_bs_delete_blob_finish function This patch add new _spdk_bs_delete_blob_finish function which will be helpful in future changes. Signed-off-by: Maciej Szwed Change-Id: I2d492b6102f33ad35b7b6fe408f709f54b7b2341 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452251 Reviewed-by: Jim Harris Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/blob/blobstore.c | 46 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index d152b2143..0d72d22bb 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -5055,6 +5055,35 @@ _spdk_bs_delete_persist_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno) spdk_blob_close(blob, _spdk_bs_delete_close_cpl, seq); } +static void +_spdk_bs_delete_blob_finish(void *cb_arg, struct spdk_blob *blob, int bserrno) +{ + spdk_bs_sequence_t *seq = cb_arg; + struct spdk_blob_list *snapshot_entry = NULL; + uint32_t page_num; + + if (bserrno) { + SPDK_ERRLOG("Failed to remove blob\n"); + spdk_bs_sequence_finish(seq, bserrno); + return; + } + + /* Remove snapshot from the list */ + snapshot_entry = _spdk_bs_get_snapshot_entry(blob->bs, blob->id); + if (snapshot_entry != NULL) { + TAILQ_REMOVE(&blob->bs->snapshots, snapshot_entry, link); + free(snapshot_entry); + } + + page_num = _spdk_bs_blobid_to_page(blob->id); + spdk_bit_array_clear(blob->bs->used_blobids, page_num); + blob->state = SPDK_BLOB_STATE_DIRTY; + blob->active.num_pages = 0; + _spdk_blob_resize(blob, 0); + + _spdk_blob_persist(seq, blob, _spdk_bs_delete_persist_cpl, blob); +} + static int _spdk_bs_is_blob_deletable(struct spdk_blob *blob) { @@ -5082,8 +5111,6 @@ static void _spdk_bs_delete_open_cpl(void *cb_arg, struct spdk_blob *blob, int bserrno) { spdk_bs_sequence_t *seq = cb_arg; - struct spdk_blob_list *snapshot = NULL; - uint32_t page_num; if (bserrno != 0) { spdk_bs_sequence_finish(seq, bserrno); @@ -5114,20 +5141,7 @@ _spdk_bs_delete_open_cpl(void *cb_arg, struct spdk_blob *blob, int bserrno) */ TAILQ_REMOVE(&blob->bs->blobs, blob, link); - /* If blob is a snapshot then remove it from the list */ - snapshot = _spdk_bs_get_snapshot_entry(blob->bs, blob->id); - if (snapshot != NULL) { - TAILQ_REMOVE(&blob->bs->snapshots, snapshot, link); - free(snapshot); - } - - page_num = _spdk_bs_blobid_to_page(blob->id); - spdk_bit_array_clear(blob->bs->used_blobids, page_num); - blob->state = SPDK_BLOB_STATE_DIRTY; - blob->active.num_pages = 0; - _spdk_blob_resize(blob, 0); - - _spdk_blob_persist(seq, blob, _spdk_bs_delete_persist_cpl, blob); + _spdk_bs_delete_blob_finish(seq, blob, 0); } void