lvol: add option to change clear method for lvol store creation
Default 'unmap' option stays as it was. 'Write_zeroes' comes useful when one wants to make sure that data presented from lvol bdevs on initial creation presents 0's. 'None' will be used for performance tests, when whole device is preconditioned before creating lvol store. Instead of performing preconditioning on each lvol bdev after its creation. Change-Id: Ic5a5985e42a84f038a882bbe6f881624ae96242c Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/c/442881 (master) Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447460 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
010e9a7338
commit
e5c6a69ed5
@ -2,6 +2,11 @@
|
||||
|
||||
## v19.01.1: (Upcoming Release)
|
||||
|
||||
### logical volumes
|
||||
|
||||
Added option to change method for erasing data region on lvol store creation.
|
||||
Default of unmapping can now be changed to writing zeroes or no operation.
|
||||
|
||||
## v19.01:
|
||||
|
||||
### ocf bdev
|
||||
|
@ -205,7 +205,7 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
|
||||
timing_enter lvol
|
||||
test_cases="1,50,51,52,53,100,101,102,150,200,201,250,251,252,253,254,255,"
|
||||
test_cases+="300,301,450,451,452,550,551,552,553,"
|
||||
test_cases+="600,601,650,651,652,654,655,"
|
||||
test_cases+="600,601,602,650,651,652,654,655,"
|
||||
test_cases+="700,701,702,750,751,752,753,754,755,756,757,758,759,760,"
|
||||
test_cases+="800,801,802,803,804,10000"
|
||||
run_test suite ./test/lvol/lvol.sh --test-cases=$test_cases
|
||||
|
@ -4499,6 +4499,7 @@ Name | Optional | Type | Description
|
||||
bdev_name | Required | string | Bdev on which to construct logical volume store
|
||||
lvs_name | Required | string | Name of the logical volume store to create
|
||||
cluster_sz | Optional | number | Cluster size of the logical volume store in bytes
|
||||
clear_method | Optional | string | Change clear method for data region. Available: none, unmap (default), write_zeroes
|
||||
|
||||
### Response
|
||||
|
||||
@ -4515,6 +4516,7 @@ Example request:
|
||||
"params": {
|
||||
"lvs_name": "LVS0",
|
||||
"bdev_name": "Malloc0"
|
||||
"clear_method": "write_zeroes"
|
||||
}
|
||||
}
|
||||
~~~
|
||||
|
@ -10,6 +10,7 @@ The Logical Volumes library is a flexible storage space management system. It pr
|
||||
* Type name: struct spdk_lvol_store
|
||||
|
||||
A logical volume store uses the super blob feature of blobstore to hold uuid (and in future other metadata). Blobstore types are implemented in blobstore itself, and saved on disk. An lvolstore will generate a UUID on creation, so that it can be uniquely identified from other lvolstores.
|
||||
By default when creating lvol store data region is unmapped. Optional --clear-method parameter can be passed on creation to change that behavior to writing zeroes or performing no operation.
|
||||
|
||||
## Logical volume {#lvol}
|
||||
|
||||
@ -84,6 +85,7 @@ construct_lvol_store [-h] [-c CLUSTER_SZ] bdev_name lvs_name
|
||||
Optional parameters:
|
||||
-h show help
|
||||
-c CLUSTER_SZ Specifies the size of cluster. By default its 4MiB.
|
||||
--clear-method specify data region clear method "none", "unmap" (default), "write_zeroes"
|
||||
destroy_lvol_store [-h] [-u UUID] [-l LVS_NAME]
|
||||
Destroy lvolstore on specified bdev. Removes lvolstore along with lvols on
|
||||
it. User can identify lvol store by UUID or its name. Note that destroying
|
||||
|
@ -77,6 +77,12 @@ enum blob_clear_method {
|
||||
BLOB_CLEAR_WITH_WRITE_ZEROES,
|
||||
};
|
||||
|
||||
enum bs_clear_method {
|
||||
BS_CLEAR_WITH_UNMAP,
|
||||
BS_CLEAR_WITH_WRITE_ZEROES,
|
||||
BS_CLEAR_WITH_NONE,
|
||||
};
|
||||
|
||||
struct spdk_blob_store;
|
||||
struct spdk_io_channel;
|
||||
struct spdk_blob;
|
||||
@ -206,6 +212,9 @@ struct spdk_bs_opts {
|
||||
/** Maximum simultaneous operations per channel */
|
||||
uint32_t max_channel_ops;
|
||||
|
||||
/** Clear method */
|
||||
enum bs_clear_method clear_method;
|
||||
|
||||
/** Blobstore type */
|
||||
struct spdk_bs_type bstype;
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#define SPDK_LVOL_H
|
||||
|
||||
#include "spdk/stdinc.h"
|
||||
#include "spdk/blob.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -55,6 +56,11 @@ enum lvol_clear_method {
|
||||
LVOL_CLEAR_WITH_WRITE_ZEROES,
|
||||
};
|
||||
|
||||
enum lvs_clear_method {
|
||||
LVS_CLEAR_WITH_UNMAP = BS_CLEAR_WITH_UNMAP,
|
||||
LVS_CLEAR_WITH_WRITE_ZEROES = BS_CLEAR_WITH_WRITE_ZEROES,
|
||||
LVS_CLEAR_WITH_NONE = BS_CLEAR_WITH_NONE,
|
||||
};
|
||||
|
||||
/* Must include null terminator. */
|
||||
#define SPDK_LVS_NAME_MAX 64
|
||||
@ -64,8 +70,9 @@ enum lvol_clear_method {
|
||||
* Parameters for lvolstore initialization.
|
||||
*/
|
||||
struct spdk_lvs_opts {
|
||||
uint32_t cluster_sz;
|
||||
char name[SPDK_LVS_NAME_MAX];
|
||||
uint32_t cluster_sz;
|
||||
enum lvs_clear_method clear_method;
|
||||
char name[SPDK_LVS_NAME_MAX];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -205,7 +205,7 @@ end:
|
||||
|
||||
int
|
||||
vbdev_lvs_create(struct spdk_bdev *base_bdev, const char *name, uint32_t cluster_sz,
|
||||
spdk_lvs_op_with_handle_complete cb_fn, void *cb_arg)
|
||||
enum lvs_clear_method clear_method, spdk_lvs_op_with_handle_complete cb_fn, void *cb_arg)
|
||||
{
|
||||
struct spdk_bs_dev *bs_dev;
|
||||
struct spdk_lvs_with_handle_req *lvs_req;
|
||||
@ -223,6 +223,10 @@ vbdev_lvs_create(struct spdk_bdev *base_bdev, const char *name, uint32_t cluster
|
||||
opts.cluster_sz = cluster_sz;
|
||||
}
|
||||
|
||||
if (clear_method != 0) {
|
||||
opts.clear_method = clear_method;
|
||||
}
|
||||
|
||||
if (name == NULL) {
|
||||
SPDK_ERRLOG("missing name param\n");
|
||||
return -EINVAL;
|
||||
|
@ -48,7 +48,7 @@ struct lvol_store_bdev {
|
||||
};
|
||||
|
||||
int vbdev_lvs_create(struct spdk_bdev *base_bdev, const char *name, uint32_t cluster_sz,
|
||||
spdk_lvs_op_with_handle_complete cb_fn, void *cb_arg);
|
||||
enum lvs_clear_method clear_method, spdk_lvs_op_with_handle_complete cb_fn, void *cb_arg);
|
||||
void vbdev_lvs_destruct(struct spdk_lvol_store *lvs, spdk_lvs_op_complete cb_fn, void *cb_arg);
|
||||
void vbdev_lvs_unload(struct spdk_lvol_store *lvs, spdk_lvs_op_complete cb_fn, void *cb_arg);
|
||||
|
||||
|
@ -44,6 +44,7 @@ struct rpc_construct_lvol_store {
|
||||
char *lvs_name;
|
||||
char *bdev_name;
|
||||
uint32_t cluster_sz;
|
||||
char *clear_method;
|
||||
};
|
||||
|
||||
static int
|
||||
@ -81,12 +82,14 @@ free_rpc_construct_lvol_store(struct rpc_construct_lvol_store *req)
|
||||
{
|
||||
free(req->bdev_name);
|
||||
free(req->lvs_name);
|
||||
free(req->clear_method);
|
||||
}
|
||||
|
||||
static const struct spdk_json_object_decoder rpc_construct_lvol_store_decoders[] = {
|
||||
{"bdev_name", offsetof(struct rpc_construct_lvol_store, bdev_name), spdk_json_decode_string},
|
||||
{"cluster_sz", offsetof(struct rpc_construct_lvol_store, cluster_sz), spdk_json_decode_uint32, true},
|
||||
{"lvs_name", offsetof(struct rpc_construct_lvol_store, lvs_name), spdk_json_decode_string},
|
||||
{"clear_method", offsetof(struct rpc_construct_lvol_store, clear_method), spdk_json_decode_string, true},
|
||||
};
|
||||
|
||||
static void
|
||||
@ -123,6 +126,7 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_construct_lvol_store req = {};
|
||||
struct spdk_bdev *bdev;
|
||||
int rc;
|
||||
enum lvs_clear_method clear_method;
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_construct_lvol_store_decoders,
|
||||
SPDK_COUNTOF(rpc_construct_lvol_store_decoders),
|
||||
@ -150,8 +154,23 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
||||
goto invalid;
|
||||
}
|
||||
|
||||
rc = vbdev_lvs_create(bdev, req.lvs_name, req.cluster_sz, _spdk_rpc_lvol_store_construct_cb,
|
||||
request);
|
||||
if (req.clear_method != NULL) {
|
||||
if (!strcasecmp(req.clear_method, "none")) {
|
||||
clear_method = LVS_CLEAR_WITH_NONE;
|
||||
} else if (!strcasecmp(req.clear_method, "unmap")) {
|
||||
clear_method = LVS_CLEAR_WITH_UNMAP;
|
||||
} else if (!strcasecmp(req.clear_method, "write_zeroes")) {
|
||||
clear_method = LVS_CLEAR_WITH_WRITE_ZEROES;
|
||||
} else {
|
||||
rc = -EINVAL;
|
||||
goto invalid;
|
||||
}
|
||||
} else {
|
||||
clear_method = LVS_CLEAR_WITH_UNMAP;
|
||||
}
|
||||
|
||||
rc = vbdev_lvs_create(bdev, req.lvs_name, req.cluster_sz, clear_method,
|
||||
_spdk_rpc_lvol_store_construct_cb, request);
|
||||
if (rc < 0) {
|
||||
goto invalid;
|
||||
}
|
||||
|
@ -2421,6 +2421,7 @@ spdk_bs_opts_init(struct spdk_bs_opts *opts)
|
||||
opts->num_md_pages = SPDK_BLOB_OPTS_NUM_MD_PAGES;
|
||||
opts->max_md_ops = SPDK_BLOB_OPTS_MAX_MD_OPS;
|
||||
opts->max_channel_ops = SPDK_BLOB_OPTS_DEFAULT_CHANNEL_OPS;
|
||||
opts->clear_method = BS_CLEAR_WITH_UNMAP;
|
||||
memset(&opts->bstype, 0, sizeof(opts->bstype));
|
||||
opts->iter_cb_fn = NULL;
|
||||
opts->iter_cb_arg = NULL;
|
||||
@ -3694,8 +3695,14 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
||||
|
||||
/* Clear metadata space */
|
||||
spdk_bs_batch_write_zeroes_dev(batch, 0, num_md_lba);
|
||||
/* Trim data clusters */
|
||||
spdk_bs_batch_unmap_dev(batch, num_md_lba, ctx->bs->dev->blockcnt - num_md_lba);
|
||||
|
||||
if (opts.clear_method == BS_CLEAR_WITH_UNMAP) {
|
||||
/* Trim data clusters */
|
||||
spdk_bs_batch_unmap_dev(batch, num_md_lba, ctx->bs->dev->blockcnt - num_md_lba);
|
||||
} else if (opts.clear_method == BS_CLEAR_WITH_WRITE_ZEROES) {
|
||||
/* Write_zeroes to data clusters */
|
||||
spdk_bs_batch_write_zeroes_dev(batch, num_md_lba, ctx->bs->dev->blockcnt - num_md_lba);
|
||||
}
|
||||
|
||||
spdk_bs_batch_close(batch);
|
||||
}
|
||||
|
@ -556,6 +556,7 @@ void
|
||||
spdk_lvs_opts_init(struct spdk_lvs_opts *o)
|
||||
{
|
||||
o->cluster_sz = SPDK_LVS_OPTS_CLUSTER_SZ;
|
||||
o->clear_method = LVS_CLEAR_WITH_UNMAP;
|
||||
memset(o->name, 0, sizeof(o->name));
|
||||
}
|
||||
|
||||
@ -565,6 +566,7 @@ _spdk_setup_lvs_opts(struct spdk_bs_opts *bs_opts, struct spdk_lvs_opts *o)
|
||||
assert(o != NULL);
|
||||
spdk_lvs_bs_opts_init(bs_opts);
|
||||
bs_opts->cluster_sz = o->cluster_sz;
|
||||
bs_opts->clear_method = (enum bs_clear_method)o->clear_method;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -1063,12 +1063,15 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
|
||||
print(rpc.lvol.construct_lvol_store(args.client,
|
||||
bdev_name=args.bdev_name,
|
||||
lvs_name=args.lvs_name,
|
||||
cluster_sz=args.cluster_sz))
|
||||
cluster_sz=args.cluster_sz,
|
||||
clear_method=args.clear_method))
|
||||
|
||||
p = subparsers.add_parser('construct_lvol_store', help='Add logical volume store on base bdev')
|
||||
p.add_argument('bdev_name', help='base bdev name')
|
||||
p.add_argument('lvs_name', help='name for lvol store')
|
||||
p.add_argument('-c', '--cluster-sz', help='size of cluster (in bytes)', type=int, required=False)
|
||||
p.add_argument('--clear-method', help="""Change clear method for data region.
|
||||
Available: none, unmap, write_zeroes""", required=False)
|
||||
p.set_defaults(func=construct_lvol_store)
|
||||
|
||||
def rename_lvol_store(args):
|
||||
|
@ -1,10 +1,11 @@
|
||||
def construct_lvol_store(client, bdev_name, lvs_name, cluster_sz=None):
|
||||
def construct_lvol_store(client, bdev_name, lvs_name, cluster_sz=None, clear_method=None):
|
||||
"""Construct a logical volume store.
|
||||
|
||||
Args:
|
||||
bdev_name: bdev on which to construct logical volume store
|
||||
lvs_name: name of the logical volume store to create
|
||||
cluster_sz: cluster size of the logical volume store in bytes (optional)
|
||||
clear_method: Change clear method for data region. Available: none, unmap, write_zeroes (optional)
|
||||
|
||||
Returns:
|
||||
UUID of created logical volume store.
|
||||
@ -12,6 +13,8 @@ def construct_lvol_store(client, bdev_name, lvs_name, cluster_sz=None):
|
||||
params = {'bdev_name': bdev_name, 'lvs_name': lvs_name}
|
||||
if cluster_sz:
|
||||
params['cluster_sz'] = cluster_sz
|
||||
if clear_method:
|
||||
params['clear_method'] = clear_method
|
||||
return client.call('construct_lvol_store', params)
|
||||
|
||||
|
||||
|
@ -112,12 +112,16 @@ class Commands_Rpc(object):
|
||||
output = self.rpc.construct_malloc_bdev(total_size, block_size)[0]
|
||||
return output.rstrip('\n')
|
||||
|
||||
def construct_lvol_store(self, base_name, lvs_name, cluster_size=None):
|
||||
def construct_lvol_store(self, base_name, lvs_name, cluster_size=None, clear_method=None):
|
||||
print("INFO: RPC COMMAND construct_lvol_store")
|
||||
if cluster_size:
|
||||
output = self.rpc.construct_lvol_store(base_name,
|
||||
lvs_name,
|
||||
"-c {cluster_sz}".format(cluster_sz=cluster_size))[0]
|
||||
elif clear_method:
|
||||
output = self.rpc.construct_lvol_store(base_name,
|
||||
lvs_name,
|
||||
"--clear-method {clear_m}".format(clear_m=clear_method))[0]
|
||||
else:
|
||||
output = self.rpc.construct_lvol_store(base_name, lvs_name)[0]
|
||||
return output.rstrip('\n')
|
||||
|
@ -121,6 +121,7 @@ def case_message(func):
|
||||
553: 'unregister_lvol_bdev',
|
||||
600: 'construct_lvol_store_with_cluster_size_max',
|
||||
601: 'construct_lvol_store_with_cluster_size_min',
|
||||
602: 'construct_lvol_store_with_all_clear_methods',
|
||||
650: 'thin_provisioning_check_space',
|
||||
651: 'thin_provisioning_read_empty_bdev',
|
||||
652: 'thin_provisionind_data_integrity_test',
|
||||
@ -1023,6 +1024,43 @@ class TestCases(object):
|
||||
# - Error code response printed to stdout
|
||||
return fail_count
|
||||
|
||||
@case_message
|
||||
def test_case602(self):
|
||||
"""
|
||||
construct_lvol_store_with_all_clear_methods
|
||||
|
||||
Call construct_lvol_store with all options for clear methods.
|
||||
"""
|
||||
fail_count = 0
|
||||
# Create malloc bdev
|
||||
base_name = self.c.construct_malloc_bdev(self.total_size,
|
||||
self.block_size)
|
||||
# Construct lvol store with clear method 'none'
|
||||
lvol_uuid = self.c.construct_lvol_store(base_name, self.lvs_name, clear_method="none")
|
||||
fail_count += self.c.check_get_lvol_stores(base_name, lvol_uuid)
|
||||
fail_count += self.c.delete_malloc_bdev(base_name)
|
||||
|
||||
# Create malloc bdev
|
||||
base_name = self.c.construct_malloc_bdev(self.total_size,
|
||||
self.block_size)
|
||||
# Construct lvol store with clear method 'unmap'
|
||||
lvol_uuid = self.c.construct_lvol_store(base_name, self.lvs_name, clear_method="unmap")
|
||||
fail_count += self.c.check_get_lvol_stores(base_name, lvol_uuid)
|
||||
fail_count += self.c.delete_malloc_bdev(base_name)
|
||||
|
||||
# Create malloc bdev
|
||||
base_name = self.c.construct_malloc_bdev(self.total_size,
|
||||
self.block_size)
|
||||
# Construct lvol store with clear method 'write_zeroes'
|
||||
lvol_uuid = self.c.construct_lvol_store(base_name, self.lvs_name, clear_method="write_zeroes")
|
||||
fail_count += self.c.check_get_lvol_stores(base_name, lvol_uuid)
|
||||
fail_count += self.c.delete_malloc_bdev(base_name)
|
||||
|
||||
# Expected result:
|
||||
# - construct lvol store return code != 0
|
||||
# - Error code response printed to stdout
|
||||
return fail_count
|
||||
|
||||
@case_message
|
||||
def test_case650(self):
|
||||
"""
|
||||
|
@ -705,7 +705,8 @@ ut_lvs_destroy(void)
|
||||
struct spdk_lvol_store *lvs;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -738,7 +739,8 @@ ut_lvol_init(void)
|
||||
int rc;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -772,7 +774,8 @@ ut_lvol_snapshot(void)
|
||||
struct spdk_lvol *lvol = NULL;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -821,7 +824,8 @@ ut_lvol_clone(void)
|
||||
struct spdk_lvol *clone = NULL;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -886,7 +890,8 @@ ut_lvol_hotremove(void)
|
||||
lvol_already_opened = false;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -979,7 +984,8 @@ ut_lvol_rename(void)
|
||||
int rc;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1043,7 +1049,8 @@ ut_lvol_destroy(void)
|
||||
int rc;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1097,7 +1104,8 @@ ut_lvol_resize(void)
|
||||
int rc = 0;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1142,7 +1150,8 @@ ut_lvol_set_read_only(void)
|
||||
int rc = 0;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1181,7 +1190,8 @@ ut_lvs_unload(void)
|
||||
struct spdk_lvol_store *lvs;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1216,7 +1226,8 @@ ut_lvs_init(void)
|
||||
/* spdk_lvs_init() fails */
|
||||
lvol_store_initialize_fail = true;
|
||||
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc != 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
CU_ASSERT(g_lvol_store == NULL);
|
||||
@ -1226,7 +1237,8 @@ ut_lvs_init(void)
|
||||
/* spdk_lvs_init_cb() fails */
|
||||
lvol_store_initialize_cb_fail = true;
|
||||
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno != 0);
|
||||
CU_ASSERT(g_lvol_store == NULL);
|
||||
@ -1234,7 +1246,8 @@ ut_lvs_init(void)
|
||||
lvol_store_initialize_cb_fail = false;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
@ -1244,7 +1257,8 @@ ut_lvs_init(void)
|
||||
g_lvol_store = NULL;
|
||||
|
||||
/* Bdev with lvol store already claimed */
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "lvs", 0, LVS_CLEAR_WITH_UNMAP, lvol_store_op_with_handle_complete,
|
||||
NULL);
|
||||
CU_ASSERT(rc != 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
CU_ASSERT(g_lvol_store == NULL);
|
||||
@ -1379,7 +1393,8 @@ ut_lvs_rename(void)
|
||||
struct spdk_lvol_store *lvs;
|
||||
|
||||
/* Lvol store is successfully created */
|
||||
rc = vbdev_lvs_create(&g_bdev, "old_lvs_name", 0, lvol_store_op_with_handle_complete, NULL);
|
||||
rc = vbdev_lvs_create(&g_bdev, "old_lvs_name", 0, LVS_CLEAR_WITH_UNMAP,
|
||||
lvol_store_op_with_handle_complete, NULL);
|
||||
CU_ASSERT(rc == 0);
|
||||
CU_ASSERT(g_lvserrno == 0);
|
||||
SPDK_CU_ASSERT_FATAL(g_lvol_store != NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user