blobstore: Add _spdk_blob_get_snapshot_and_clone_entries function

Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Change-Id: Ic29496516a75d252c3d0fce9396434209eb620e8

Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/449543
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Maciej Szwed 2019-03-29 12:46:48 +01:00 committed by Jim Harris
parent 8bc6e3c595
commit 6e947d19e2

View File

@ -2206,6 +2206,35 @@ _spdk_blob_lookup(struct spdk_blob_store *bs, spdk_blob_id blobid)
return NULL;
}
static void
_spdk_blob_get_snapshot_and_clone_entries(struct spdk_blob *blob,
struct spdk_blob_list **snapshot_entry, struct spdk_blob_list **clone_entry)
{
assert(blob != NULL);
*snapshot_entry = NULL;
*clone_entry = NULL;
if (blob->parent_id == SPDK_BLOBID_INVALID) {
return;
}
TAILQ_FOREACH(*snapshot_entry, &blob->bs->snapshots, link) {
if ((*snapshot_entry)->id == blob->parent_id) {
break;
}
}
if (*snapshot_entry != NULL) {
TAILQ_FOREACH(*clone_entry, &(*snapshot_entry)->clones, link) {
if ((*clone_entry)->id == blob->id) {
break;
}
}
assert(clone_entry != NULL);
}
}
static int
_spdk_bs_channel_create(void *io_device, void *ctx_buf)
{
@ -2350,31 +2379,13 @@ _spdk_bs_blob_list_remove(struct spdk_blob *blob)
{
struct spdk_blob_list *snapshot_entry = NULL;
struct spdk_blob_list *clone_entry = NULL;
spdk_blob_id snapshot_id;
assert(blob != NULL);
_spdk_blob_get_snapshot_and_clone_entries(blob, &snapshot_entry, &clone_entry);
snapshot_id = blob->parent_id;
if (snapshot_id == SPDK_BLOBID_INVALID) {
if (snapshot_entry == NULL) {
return 0;
}
TAILQ_FOREACH(snapshot_entry, &blob->bs->snapshots, link) {
if (snapshot_entry->id == snapshot_id) {
break;
}
}
assert(snapshot_entry != NULL);
TAILQ_FOREACH(clone_entry, &snapshot_entry->clones, link) {
if (clone_entry->id == blob->id) {
break;
}
}
assert(clone_entry != NULL);
blob->parent_id = SPDK_BLOBID_INVALID;
TAILQ_REMOVE(&snapshot_entry->clones, clone_entry, link);
free(clone_entry);