From e5b0dd6ead22964cce87617d2b6fe7e4fd8d3235 Mon Sep 17 00:00:00 2001 From: Piotr Pelplinski Date: Tue, 26 Sep 2017 15:35:22 +0200 Subject: [PATCH] pmem: bdev names for pmem bdevs Signed-off-by: Piotr Pelplinski Change-Id: Ifbb02f99cd2e5752b2bc9091733b87ddadec11a4 Reviewed-on: https://review.gerrithub.io/383895 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp --- lib/bdev/pmem/bdev_pmem.c | 10 ++++++---- lib/bdev/pmem/bdev_pmem.h | 2 +- lib/bdev/pmem/bdev_pmem_rpc.c | 4 +++- scripts/rpc.py | 3 +++ test/unit/lib/bdev/pmem/bdev_pmem_ut.c | 20 ++++++++++---------- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/bdev/pmem/bdev_pmem.c b/lib/bdev/pmem/bdev_pmem.c index d0586204f..de212eb00 100644 --- a/lib/bdev/pmem/bdev_pmem.c +++ b/lib/bdev/pmem/bdev_pmem.c @@ -290,7 +290,7 @@ static const struct spdk_bdev_fn_table pmem_fn_table = { }; int -spdk_create_pmem_disk(const char *pmem_file, struct spdk_bdev **bdev) +spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev) { uint64_t num_blocks; uint32_t block_size; @@ -330,9 +330,11 @@ spdk_create_pmem_disk(const char *pmem_file, struct spdk_bdev **bdev) free(pdisk); return EINVAL; } - - - pdisk->disk.name = spdk_sprintf_alloc("pmem%d", pmem_disk_count); + if (name) { + pdisk->disk.name = spdk_sprintf_alloc("%s", name); + } else { + pdisk->disk.name = spdk_sprintf_alloc("pmem%d", pmem_disk_count); + } if (!pdisk->disk.name) { pmemblk_close(pdisk->pool); diff --git a/lib/bdev/pmem/bdev_pmem.h b/lib/bdev/pmem/bdev_pmem.h index 79742ad63..9ce602143 100644 --- a/lib/bdev/pmem/bdev_pmem.h +++ b/lib/bdev/pmem/bdev_pmem.h @@ -36,6 +36,6 @@ #include "spdk/bdev.h" -int spdk_create_pmem_disk(const char *pmem_file, struct spdk_bdev **bdev); +int spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev); #endif /* SPDK_BDEV_PMEM_H */ diff --git a/lib/bdev/pmem/bdev_pmem_rpc.c b/lib/bdev/pmem/bdev_pmem_rpc.c index 058c29ab0..f2f040245 100644 --- a/lib/bdev/pmem/bdev_pmem_rpc.c +++ b/lib/bdev/pmem/bdev_pmem_rpc.c @@ -41,6 +41,7 @@ struct rpc_construct_pmem { char *pmem_file; + char *name; }; static void @@ -51,6 +52,7 @@ free_rpc_construct_pmem_bdev(struct rpc_construct_pmem *req) static const struct spdk_json_object_decoder rpc_construct_pmem_decoders[] = { {"pmem_file", offsetof(struct rpc_construct_pmem, pmem_file), spdk_json_decode_string}, + {"name", offsetof(struct rpc_construct_pmem, name), spdk_json_decode_string, true}, }; static void @@ -70,7 +72,7 @@ spdk_rpc_construct_pmem_bdev(struct spdk_jsonrpc_request *request, rc = EINVAL; goto invalid; } - rc = spdk_create_pmem_disk(req.pmem_file, &bdev); + rc = spdk_create_pmem_disk(req.pmem_file, req.name, &bdev); if (rc != 0) { goto invalid; } diff --git a/scripts/rpc.py b/scripts/rpc.py index 70b0532ff..7a7d6b5f5 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -211,10 +211,13 @@ p.set_defaults(func=delete_pmem_pool) def construct_pmem_bdev(args): params = {'pmem_file': args.pmem_file} + if args.name: + params['name'] = args.name print_array(jsonrpc_call('construct_pmem_bdev', params)) p = subparsers.add_parser('construct_pmem_bdev', help='Add a bdev with pmem backend') p.add_argument('pmem_file', help='Path to pmemblk pool file') +p.add_argument('-n', '--name', help='Block device name', required=False) p.set_defaults(func=construct_pmem_bdev) def construct_null_bdev(args): diff --git a/test/unit/lib/bdev/pmem/bdev_pmem_ut.c b/test/unit/lib/bdev/pmem/bdev_pmem_ut.c index 9617e5b1a..80e315cce 100644 --- a/test/unit/lib/bdev/pmem/bdev_pmem_ut.c +++ b/test/unit/lib/bdev/pmem/bdev_pmem_ut.c @@ -385,45 +385,45 @@ ut_pmem_open_close(void) pools_cnt = g_opened_pools; /* Try opening with NULL name */ - rc = spdk_create_pmem_disk(NULL, &bdev); + rc = spdk_create_pmem_disk(NULL, NULL, &bdev); CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open non-existent pool */ - rc = spdk_create_pmem_disk("non existent pool", &bdev); + rc = spdk_create_pmem_disk("non existent pool", NULL, &bdev); CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open inconsistent pool */ - rc = spdk_create_pmem_disk(g_pool_inconsistent.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_inconsistent.name, NULL, &bdev); CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open consistent pool fail the open from unknown reason. */ g_pmemblk_open_allow_open = false; - rc = spdk_create_pmem_disk(g_pool_inconsistent.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_inconsistent.name, NULL, &bdev); g_pmemblk_open_allow_open = true; CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open pool with nblocks = 0 */ - rc = spdk_create_pmem_disk(g_pool_nblock_0.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_nblock_0.name, NULL, &bdev); CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open pool with bsize = 0 */ - rc = spdk_create_pmem_disk(g_pool_bsize_0.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_bsize_0.name, NULL, &bdev); CU_ASSERT_PTR_NULL(bdev); CU_ASSERT_EQUAL(pools_cnt, g_opened_pools); CU_ASSERT_NOT_EQUAL(rc, 0); /* Open good pool */ - rc = spdk_create_pmem_disk(g_pool_ok.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev); SPDK_CU_ASSERT_FATAL(bdev != NULL); CU_ASSERT_TRUE(g_pool_ok.is_open); CU_ASSERT_EQUAL(pools_cnt + 1, g_opened_pools); @@ -454,7 +454,7 @@ ut_pmem_write_read(void) { 0, 4 * g_pool_ok.bsize }, }; - rc = spdk_create_pmem_disk(g_pool_ok.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev); CU_ASSERT_EQUAL(rc, 0); SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40); @@ -628,7 +628,7 @@ ut_pmem_reset(void) struct spdk_bdev *bdev; int rc; - rc = spdk_create_pmem_disk(g_pool_ok.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev); CU_ASSERT_EQUAL(rc, 0); SPDK_CU_ASSERT_FATAL(bdev != NULL); @@ -648,7 +648,7 @@ ut_pmem_unmap_write_zero(int16_t io_type) int rc; CU_ASSERT(io_type == SPDK_BDEV_IO_TYPE_UNMAP || io_type == SPDK_BDEV_IO_TYPE_WRITE_ZEROES); - rc = spdk_create_pmem_disk(g_pool_ok.name, &bdev); + rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev); CU_ASSERT_EQUAL(rc, 0); SPDK_CU_ASSERT_FATAL(bdev != NULL); SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40);