Commit a5014efc authored by Paul Luse's avatar Paul Luse Committed by Daniel Verkamp
Browse files

blob: add check for supported underlying dev block lengths



Fail spdk_bs_init() if the dev being used has an
LBA size that is larger than a metadata page or not evenly
divisible by the size of a metadata page.

Change-Id: I0e0ca747ecd5b6039c20fb6a885382bde4527158
Signed-off-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-on: https://review.gerrithub.io/374182


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent d21ec1f0
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1480,6 +1480,13 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,

	SPDK_TRACELOG(SPDK_TRACE_BLOB, "Initializing blobstore on dev %p\n", dev);

	if ((sizeof(struct spdk_blob_md_page) % dev->blocklen) != 0) {
		SPDK_ERRLOG("unsupported dev block length of %d\n",
			    dev->blocklen);
		cb_fn(cb_arg, NULL, -EINVAL);
		return;
	}

	if (o) {
		opts = *o;
	} else {
+6 −0
Original line number Diff line number Diff line
@@ -95,6 +95,12 @@ blob_init(void)

	init_dev(&dev);

	/* should fail for an unsupported blocklen */
	dev.blocklen = 500;
	spdk_bs_init(&dev, NULL, bs_op_with_handle_complete, NULL);
	CU_ASSERT(g_bserrno == -EINVAL);

	init_dev(&dev);
	spdk_bs_init(&dev, NULL, bs_op_with_handle_complete, NULL);
	CU_ASSERT(g_bserrno == 0);
	SPDK_CU_ASSERT_FATAL(g_bs != NULL);