ut/bdev: Configure bdev size and iobuf for all test cases

The following patches will change spdk_bdev_register() to access iobuf
and bdev's blocklen and blockcnt.
Hence, we have to configure these correctly for alltest cases.

Move ut_init/fini_bdev() up in a file. Add missing ut_init/fini_bdev()
and allocate/free_bdev() calls for some test cases. Add blockcnt and
blocklen to allocate_vbdev().

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: Iccbb1cfe4dcdc4496f15304b5362d76d5296607f
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17908
Community-CI: Mellanox Build Bot
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Shuhei Matsumoto 2023-05-02 21:08:02 +09:00 committed by Jim Harris
parent 5bced73616
commit cec70a601f

View File

@ -536,6 +536,40 @@ vbdev_ut_examine_disk(struct spdk_bdev *bdev)
spdk_bdev_module_examine_done(&vbdev_ut_if); spdk_bdev_module_examine_done(&vbdev_ut_if);
} }
static void
bdev_init_cb(void *arg, int rc)
{
CU_ASSERT(rc == 0);
}
static void
bdev_fini_cb(void *arg)
{
}
static void
ut_init_bdev(struct spdk_bdev_opts *opts)
{
int rc;
if (opts != NULL) {
rc = spdk_bdev_set_opts(opts);
CU_ASSERT(rc == 0);
}
rc = spdk_iobuf_initialize();
CU_ASSERT(rc == 0);
spdk_bdev_initialize(bdev_init_cb, NULL);
poll_threads();
}
static void
ut_fini_bdev(void)
{
spdk_bdev_finish(bdev_fini_cb, NULL);
spdk_iobuf_finish(bdev_fini_cb, NULL);
poll_threads();
}
static struct spdk_bdev * static struct spdk_bdev *
allocate_bdev_ctx(char *name, void *ctx) allocate_bdev_ctx(char *name, void *ctx)
{ {
@ -579,6 +613,8 @@ allocate_vbdev(char *name)
bdev->name = name; bdev->name = name;
bdev->fn_table = &fn_table; bdev->fn_table = &fn_table;
bdev->module = &vbdev_ut_if; bdev->module = &vbdev_ut_if;
bdev->blockcnt = 1024;
bdev->blocklen = 512;
rc = spdk_bdev_register(bdev); rc = spdk_bdev_register(bdev);
poll_threads(); poll_threads();
@ -701,6 +737,8 @@ open_write_test(void)
struct spdk_bdev_desc *desc[9] = {}; struct spdk_bdev_desc *desc[9] = {};
int rc; int rc;
ut_init_bdev(NULL);
/* /*
* Create a tree of bdevs to test various open w/ write cases. * Create a tree of bdevs to test various open w/ write cases.
* *
@ -826,6 +864,8 @@ open_write_test(void)
free_bdev(bdev[1]); free_bdev(bdev[1]);
free_bdev(bdev[2]); free_bdev(bdev[2]);
free_bdev(bdev[3]); free_bdev(bdev[3]);
ut_fini_bdev();
} }
static void static void
@ -836,6 +876,8 @@ claim_test(void)
int rc; int rc;
uint32_t count; uint32_t count;
ut_init_bdev(NULL);
/* /*
* A vbdev that uses a read-only bdev may need it to remain read-only. * A vbdev that uses a read-only bdev may need it to remain read-only.
* To do so, it opens the bdev read-only, then claims it without * To do so, it opens the bdev read-only, then claims it without
@ -878,6 +920,7 @@ claim_test(void)
spdk_bdev_close(desc); spdk_bdev_close(desc);
free_bdev(bdev); free_bdev(bdev);
ut_fini_bdev();
} }
static void static void
@ -919,46 +962,44 @@ bytes_to_blocks_test(void)
static void static void
num_blocks_test(void) num_blocks_test(void)
{ {
struct spdk_bdev bdev; struct spdk_bdev *bdev;
struct spdk_bdev_desc *desc = NULL; struct spdk_bdev_desc *desc = NULL;
int rc; int rc;
memset(&bdev, 0, sizeof(bdev)); ut_init_bdev(NULL);
bdev.name = "num_blocks"; bdev = allocate_bdev("num_blocks");
bdev.fn_table = &fn_table;
bdev.module = &bdev_ut_if; spdk_bdev_notify_blockcnt_change(bdev, 50);
spdk_bdev_register(&bdev);
poll_threads();
spdk_bdev_notify_blockcnt_change(&bdev, 50);
/* Growing block number */ /* Growing block number */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 70) == 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 70) == 0);
/* Shrinking block number */ /* Shrinking block number */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 30) == 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 30) == 0);
rc = spdk_bdev_open_ext("num_blocks", false, bdev_open_cb1, &desc, &desc); rc = spdk_bdev_open_ext("num_blocks", false, bdev_open_cb1, &desc, &desc);
CU_ASSERT(rc == 0); CU_ASSERT(rc == 0);
SPDK_CU_ASSERT_FATAL(desc != NULL); SPDK_CU_ASSERT_FATAL(desc != NULL);
CU_ASSERT(&bdev == spdk_bdev_desc_get_bdev(desc)); CU_ASSERT(bdev == spdk_bdev_desc_get_bdev(desc));
/* Growing block number */ /* Growing block number */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 80) == 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 80) == 0);
/* Shrinking block number */ /* Shrinking block number */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 20) != 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 20) != 0);
g_event_type1 = 0xFF; g_event_type1 = 0xFF;
/* Growing block number */ /* Growing block number */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 90) == 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 90) == 0);
poll_threads(); poll_threads();
CU_ASSERT_EQUAL(g_event_type1, SPDK_BDEV_EVENT_RESIZE); CU_ASSERT_EQUAL(g_event_type1, SPDK_BDEV_EVENT_RESIZE);
g_event_type1 = 0xFF; g_event_type1 = 0xFF;
/* Growing block number and closing */ /* Growing block number and closing */
CU_ASSERT(spdk_bdev_notify_blockcnt_change(&bdev, 100) == 0); CU_ASSERT(spdk_bdev_notify_blockcnt_change(bdev, 100) == 0);
spdk_bdev_close(desc); spdk_bdev_close(desc);
spdk_bdev_unregister(&bdev, NULL, NULL); free_bdev(bdev);
ut_fini_bdev();
poll_threads(); poll_threads();
@ -1002,6 +1043,8 @@ alias_add_del_test(void)
struct spdk_bdev *bdev[3]; struct spdk_bdev *bdev[3];
int rc; int rc;
ut_init_bdev(NULL);
/* Creating and registering bdevs */ /* Creating and registering bdevs */
bdev[0] = allocate_bdev("bdev0"); bdev[0] = allocate_bdev("bdev0");
SPDK_CU_ASSERT_FATAL(bdev[0] != 0); SPDK_CU_ASSERT_FATAL(bdev[0] != 0);
@ -1082,6 +1125,8 @@ alias_add_del_test(void)
free(bdev[0]); free(bdev[0]);
free(bdev[1]); free(bdev[1]);
free(bdev[2]); free(bdev[2]);
ut_fini_bdev();
} }
static void static void
@ -1098,40 +1143,6 @@ io_done(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
} }
} }
static void
bdev_init_cb(void *arg, int rc)
{
CU_ASSERT(rc == 0);
}
static void
bdev_fini_cb(void *arg)
{
}
static void
ut_init_bdev(struct spdk_bdev_opts *opts)
{
int rc;
if (opts != NULL) {
rc = spdk_bdev_set_opts(opts);
CU_ASSERT(rc == 0);
}
rc = spdk_iobuf_initialize();
CU_ASSERT(rc == 0);
spdk_bdev_initialize(bdev_init_cb, NULL);
poll_threads();
}
static void
ut_fini_bdev(void)
{
spdk_bdev_finish(bdev_fini_cb, NULL);
spdk_iobuf_finish(bdev_fini_cb, NULL);
poll_threads();
}
struct bdev_ut_io_wait_entry { struct bdev_ut_io_wait_entry {
struct spdk_bdev_io_wait_entry entry; struct spdk_bdev_io_wait_entry entry;
struct spdk_io_channel *io_ch; struct spdk_io_channel *io_ch;