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: Paul Luse <paul.e.luse@intel.com>
Reviewed-on: https://review.gerrithub.io/374182
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Paul Luse 2017-08-14 11:23:25 -07:00 committed by Daniel Verkamp
parent d21ec1f00d
commit a5014efc2b
2 changed files with 13 additions and 0 deletions

View File

@ -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); 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) { if (o) {
opts = *o; opts = *o;
} else { } else {

View File

@ -95,6 +95,12 @@ blob_init(void)
init_dev(&dev); 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); spdk_bs_init(&dev, NULL, bs_op_with_handle_complete, NULL);
CU_ASSERT(g_bserrno == 0); CU_ASSERT(g_bserrno == 0);
SPDK_CU_ASSERT_FATAL(g_bs != NULL); SPDK_CU_ASSERT_FATAL(g_bs != NULL);