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:
parent
deb694403f
commit
56f61c8feb
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user