bdev/pmem: require name in construct_pmem_bdev RPC

Change-Id: I3cbb52cd9a4201704423b49eae74935b8a33b0fd
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/389903
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Daniel Verkamp 2017-11-30 14:25:28 -07:00 committed by Jim Harris
parent deb694403f
commit 56f61c8feb
9 changed files with 41 additions and 31 deletions

View File

@ -84,7 +84,7 @@ Example:
~~~
It is possible to create pmem bdev using SPDK RPC:
~~~
./scripts/rpc.py construct_pmem_bdev /path/to/pmem_pool
./scripts/rpc.py construct_pmem_bdev -n bdev_name /path/to/pmem_pool
~~~
## Null {#bdev_config_null}

View File

@ -51,8 +51,6 @@ struct pmem_disk {
static TAILQ_HEAD(, pmem_disk) g_pmem_disks = TAILQ_HEAD_INITIALIZER(g_pmem_disks);
static int pmem_disk_count = 0;
static int bdev_pmem_initialize(void);
static void bdev_pmem_finish(void);
@ -284,13 +282,20 @@ static const struct spdk_bdev_fn_table pmem_fn_table = {
};
int
spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev)
spdk_create_pmem_disk(const char *pmem_file, const char *name, struct spdk_bdev **bdev)
{
uint64_t num_blocks;
uint32_t block_size;
struct pmem_disk *pdisk;
int rc;
*bdev = NULL;
if (name == NULL) {
SPDK_ERRLOG("Missing name parameter for spdk_create_pmem_disk()\n");
return EINVAL;
}
if (pmemblk_check(pmem_file, 0) != 1) {
SPDK_ERRLOG("Pool '%s' check failed: %s\n", pmem_file, pmemblk_errormsg());
return EIO;
@ -325,12 +330,8 @@ spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev
free(pdisk);
return EINVAL;
}
if (name) {
pdisk->disk.name = spdk_sprintf_alloc("%s", name);
} else {
pdisk->disk.name = spdk_sprintf_alloc("pmem%d", pmem_disk_count);
}
pdisk->disk.name = strdup(name);
if (!pdisk->disk.name) {
pmemblk_close(pdisk->pool);
free(pdisk);
@ -338,8 +339,6 @@ spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev
}
pdisk->disk.product_name = "pmemblk disk";
pmem_disk_count++;
pdisk->disk.write_cache = 0;
pdisk->disk.blocklen = block_size;
pdisk->disk.blockcnt = num_blocks;

View File

@ -36,6 +36,6 @@
#include "spdk/bdev.h"
int spdk_create_pmem_disk(const char *pmem_file, char *name, struct spdk_bdev **bdev);
int spdk_create_pmem_disk(const char *pmem_file, const char *name, struct spdk_bdev **bdev);
#endif /* SPDK_BDEV_PMEM_H */

View File

@ -48,11 +48,12 @@ static void
free_rpc_construct_pmem_bdev(struct rpc_construct_pmem *req)
{
free(req->pmem_file);
free(req->name);
}
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},
{"name", offsetof(struct rpc_construct_pmem, name), spdk_json_decode_string},
};
static void

View File

@ -210,14 +210,15 @@ 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
params = {
'pmem_file': args.pmem_file,
'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.add_argument('-n', '--name', help='Block device name', required=True)
p.set_defaults(func=construct_pmem_bdev)
def construct_null_bdev(args):

View File

@ -45,7 +45,7 @@ for i in `seq 1 $TGT_NR`; do
luns=""
for j in `seq 1 $PMEM_PER_TGT`; do
$rpc_py create_pmem_pool /tmp/pool_file${i}_${j} $PMEM_SIZE $PMEM_BLOCK_SIZE
bdevs_name="$($rpc_py construct_pmem_bdev /tmp/pool_file${i}_${j})"
bdevs_name="$($rpc_py construct_pmem_bdev -n pmem${i}_${j} /tmp/pool_file${i}_${j})"
PMEM_BDEVS+="$bdevs_name "
luns+="$bdevs_name:$((j-1)) "
done

View File

@ -60,7 +60,7 @@ for i in `seq 1 $SUBSYS_NR`; do
bdevs=""
for c in `seq 1 $PMEM_PER_SUBSYS`; do
$rpc_py create_pmem_pool /tmp/pool_file${i}_${c} 32 512
bdevs+="$($rpc_py construct_pmem_bdev /tmp/pool_file${i}_${c}) "
bdevs+="$($rpc_py construct_pmem_bdev -n pmem${i}_${c} /tmp/pool_file${i}_${c}) "
done
$rpc_py construct_nvmf_subsystem nqn.2016-06.io.spdk:cnode$i "trtype:RDMA traddr:$NVMF_FIRST_TARGET_IP trsvcid:$NVMF_PORT" '' -a -s SPDK$i -n "$bdevs"
PMEM_BDEVS+=$bdevs

View File

@ -13,6 +13,7 @@ test_all=true
test_all_get=false
default_pool_file=$TEST_DIR/test/pmem/pool_file
obj_pool_file=$TEST_DIR/test/pmem/obj_pool_file
bdev_name=pmem0
function usage()
{
@ -459,7 +460,7 @@ function construct_pmem_bdev_tc2()
pmem_clean_pool_file
pmem_create_pool_file
if $rpc_py construct_pmem_bdev $TEST_DIR/non/existing/path/non_existent_file; then
if $rpc_py construct_pmem_bdev -n $bdev_name $TEST_DIR/non/existing/path/non_existent_file; then
error "Created pmem bdev w/out valid pool file!"
fi
@ -476,7 +477,7 @@ function construct_pmem_bdev_tc3()
pmem_print_tc_name ${FUNCNAME[0]}
truncate -s 32M $TEST_DIR/test/pmem/random_file
if $rpc_py construct_pmem_bdev $TEST_DIR/test/pmem/random_file; then
if $rpc_py construct_pmem_bdev -n $bdev_name $TEST_DIR/test/pmem/random_file; then
error "Created pmem bdev from random file!"
fi
@ -501,7 +502,7 @@ function construct_pmem_bdev_tc4()
truncate -s "32M" $obj_pool_file
fi
if $rpc_py construct_pmem_bdev $TEST_DIR/test/pmem/obj_pool_file; then
if $rpc_py construct_pmem_bdev -n $bdev_name $TEST_DIR/test/pmem/obj_pool_file; then
pmem_clean_pool_file $TEST_DIR/test/pmem/obj_pool_file
error "Created pmem bdev from obj type pmem file!"
fi
@ -521,7 +522,7 @@ function construct_pmem_bdev_tc5()
error "Failed to get pmem info!"
fi
pmem_bdev_name=$($rpc_py construct_pmem_bdev $default_pool_file)
pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file)
if [ $? != 0 ]; then
error "Failed to create pmem bdev"
fi
@ -553,7 +554,7 @@ function construct_pmem_bdev_tc6()
error "Failed to get info on pmem pool file!"
fi
pmem_bdev_name=$($rpc_py construct_pmem_bdev $default_pool_file)
pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file)
if [ $? != 0 ]; then
error "Failed to create pmem bdev!"
fi
@ -562,7 +563,7 @@ function construct_pmem_bdev_tc6()
error "Pmem bdev not found!"
fi
if $rpc_py construct_pmem_bdev $default_pool_file; then
if $rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file; then
error "Constructed pmem bdev with occupied path!"
fi
@ -593,7 +594,7 @@ function delete_bdev_tc1()
error "Failed to get pmem info!"
fi
pmem_bdev_name=$($rpc_py construct_pmem_bdev $default_pool_file)
pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file)
if [ $? != 0 ]; then
error "Failed to create pmem bdev!"
fi
@ -626,7 +627,7 @@ function delete_bdev_tc2()
error "Failed to get pmem info!"
fi
pmem_bdev_name=$($rpc_py construct_pmem_bdev $default_pool_file)
pmem_bdev_name=$($rpc_py construct_pmem_bdev -n $bdev_name $default_pool_file)
if [ $? != 0 ]; then
error "Failed to create pmem bdev"
fi

View File

@ -50,6 +50,8 @@ struct pmemblk {
uint8_t *buffer;
};
static const char *g_bdev_name = "pmem0";
/* PMEMblkpool is a typedef of struct pmemblk */
static PMEMblkpool g_pool_ok = {
.name = "/pools/ok_pool",
@ -429,8 +431,14 @@ ut_pmem_open_close(void)
CU_ASSERT_EQUAL(pools_cnt, g_opened_pools);
CU_ASSERT_NOT_EQUAL(rc, 0);
/* Open good pool */
/* Open pool with NULL name */
rc = spdk_create_pmem_disk(g_pool_ok.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, g_bdev_name, &bdev);
SPDK_CU_ASSERT_FATAL(bdev != NULL);
CU_ASSERT_TRUE(g_pool_ok.is_open);
CU_ASSERT_EQUAL(pools_cnt + 1, g_opened_pools);
@ -461,7 +469,7 @@ ut_pmem_write_read(void)
{ 0, 4 * g_pool_ok.bsize },
};
rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev);
rc = spdk_create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev);
CU_ASSERT_EQUAL(rc, 0);
SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40);
@ -635,7 +643,7 @@ ut_pmem_reset(void)
struct spdk_bdev *bdev;
int rc;
rc = spdk_create_pmem_disk(g_pool_ok.name, NULL, &bdev);
rc = spdk_create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev);
CU_ASSERT_EQUAL(rc, 0);
SPDK_CU_ASSERT_FATAL(bdev != NULL);
@ -655,7 +663,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, NULL, &bdev);
rc = spdk_create_pmem_disk(g_pool_ok.name, g_bdev_name, &bdev);
CU_ASSERT_EQUAL(rc, 0);
SPDK_CU_ASSERT_FATAL(bdev != NULL);
SPDK_CU_ASSERT_FATAL(g_pool_ok.nblock > 40);