Commit a95bbf23 authored by Hadi Moshayedi's avatar Hadi Moshayedi Committed by Tomasz Zawadzki
Browse files

blob: set parent_id properly on spdk_bs_blob_set_external_parent.



Based on `doc/blob.md`, `blob->parent_id` of esnap clones should be set
to `SPDK_BLOBID_EXTERNAL_SNAPSHOT`.

Previously, `spdk_bs_blob_set_external_parent` didn't do this. This
caused some features which relied on this, like copy-on-write, to not
work properly.

This change fixes this.

Change-Id: I13305d088efbff51aa7e066a7e42b13993d212a3
Signed-off-by: default avatarHadi Moshayedi <hadi@ubicloud.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23971


Reviewed-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarDamiano Cipriani <damiano.cipriani@suse.com>
parent 248c547d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7718,6 +7718,7 @@ bs_set_external_parent_refs(struct spdk_blob *blob, struct blob_parent *parent)
		return rc;
	}
	blob->invalid_flags |= SPDK_BLOB_EXTERNAL_SNAPSHOT;
	blob->parent_id = SPDK_BLOBID_EXTERNAL_SNAPSHOT;

	bs_blob_list_add(blob);

+2 −0
Original line number Diff line number Diff line
@@ -9766,6 +9766,7 @@ blob_set_external_parent(void)
	CU_ASSERT(!spdk_blob_is_clone(blob2));
	CU_ASSERT(rc == 0 && esnap_id_len == sizeof(esnap_opts2) &&
		  memcmp(esnap_id, &esnap_opts2, esnap_id_len) == 0);
	CU_ASSERT(blob2->parent_id == SPDK_BLOBID_EXTERNAL_SNAPSHOT);

	/* Create a not thin-provisioned blob that is not a clone */
	ut_spdk_blob_opts_init(&opts);
@@ -9802,6 +9803,7 @@ blob_set_external_parent(void)
	CU_ASSERT(!spdk_blob_is_clone(blob4));
	CU_ASSERT(rc == 0 && esnap_id_len == sizeof(esnap_opts) &&
		  memcmp(esnap_id, &esnap_opts, esnap_id_len) == 0);
	CU_ASSERT(blob4->parent_id == SPDK_BLOBID_EXTERNAL_SNAPSHOT);

	ut_blob_close_and_delete(bs, blob4);
	ut_blob_close_and_delete(bs, blob3);