pmem: bdev names for pmem bdevs

Signed-off-by: Piotr Pelplinski <piotr.pelplinski@intel.com>
Change-Id: Ifbb02f99cd2e5752b2bc9091733b87ddadec11a4

Reviewed-on: https://review.gerrithub.io/383895
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Piotr Pelplinski 2017-09-26 15:35:22 +02:00 committed by Daniel Verkamp
parent 5447fb12a9
commit e5b0dd6ead
5 changed files with 23 additions and 16 deletions

View File

@ -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);

View File

@ -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 */

View File

@ -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;
}

View File

@ -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):

View File

@ -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);