Skip to content

Commit a25f0cb

Browse files
author
Sadegh Savari
committed
create hublvol for migration
1 parent 1e81506 commit a25f0cb

7 files changed

Lines changed: 50 additions & 18 deletions

File tree

include/spdk/lvol.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ int spdk_lvol_create(struct spdk_lvol_store *lvs, const char *name, uint64_t sz,
203203
bool thin_provisioned, enum lvol_clear_method clear_method,
204204
uint8_t geometry, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg);
205205

206-
int spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_complete cb_fn,
206+
int spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, const char *name, spdk_lvol_op_with_handle_complete cb_fn,
207207
void *cb_arg);
208208
/**
209209
* Create snapshot of given lvol.

lib/lvol/lvol.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,9 @@ lvol_create_open_cb(void *cb_arg, struct spdk_blob *blob, int lvolerrno)
11621162
lvol->blob = blob;
11631163
lvol->blob_id = spdk_blob_get_id(blob);
11641164
lvol->map_id = spdk_blob_get_map_id(blob);
1165-
lvs->lvol_map.lvol[lvol->map_id] = lvol;
1165+
if (!lvol->hublvol) {
1166+
lvs->lvol_map.lvol[lvol->map_id] = lvol;
1167+
}
11661168

11671169
TAILQ_INSERT_TAIL(&lvol->lvol_store->lvols, lvol, link);
11681170

@@ -1495,7 +1497,7 @@ spdk_lvol_create(struct spdk_lvol_store *lvs, const char *name, uint64_t sz, boo
14951497
}
14961498

14971499
int
1498-
spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg)
1500+
spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, const char *name, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg)
14991501
{
15001502
struct spdk_lvol_with_handle_req *req;
15011503
struct spdk_lvol *lvol;
@@ -1508,7 +1510,7 @@ spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_c
15081510
return -EINVAL;
15091511
}
15101512

1511-
rc = lvs_verify_lvol_name(lvs, "hublvol");
1513+
rc = lvs_verify_lvol_name(lvs, name);
15121514
if (rc < 0) {
15131515
return rc;
15141516
}
@@ -1521,7 +1523,7 @@ spdk_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_c
15211523
req->cb_fn = cb_fn;
15221524
req->cb_arg = cb_arg;
15231525

1524-
lvol = lvol_alloc(lvs, "hublvol", true, LVOL_CLEAR_WITH_DEFAULT, NULL);
1526+
lvol = lvol_alloc(lvs, name, true, LVOL_CLEAR_WITH_DEFAULT, NULL);
15251527
if (!lvol) {
15261528
free(req);
15271529
SPDK_ERRLOG("Cannot alloc memory for lvol base pointer\n");

module/bdev/lvol/vbdev_lvol.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2373,7 +2373,7 @@ vbdev_lvol_create(struct spdk_lvol_store *lvs, const char *name, uint64_t sz,
23732373
}
23742374

23752375
int
2376-
vbdev_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg)
2376+
vbdev_lvol_create_hublvol(struct spdk_lvol_store *lvs, const char *name, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg)
23772377
{
23782378
struct spdk_lvol_with_handle_req *req;
23792379
int rc;
@@ -2386,7 +2386,7 @@ vbdev_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_
23862386
req->cb_fn = cb_fn;
23872387
req->cb_arg = cb_arg;
23882388

2389-
rc = spdk_lvol_create_hublvol(lvs, _vbdev_lvol_create_cb, req);
2389+
rc = spdk_lvol_create_hublvol(lvs, name, _vbdev_lvol_create_cb, req);
23902390
if (rc != 0) {
23912391
free(req);
23922392
}

module/bdev/lvol/vbdev_lvol.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ int vbdev_lvol_create(struct spdk_lvol_store *lvs, const char *name, uint64_t sz
4141
spdk_lvol_op_with_handle_complete cb_fn,
4242
void *cb_arg);
4343

44-
int vbdev_lvol_create_hublvol(struct spdk_lvol_store *lvs, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg);
44+
int vbdev_lvol_create_hublvol(struct spdk_lvol_store *lvs, const char *name, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg);
4545
int vbdev_lvol_register(struct spdk_lvol_store *lvs, const char *name, const char *registered_uuid,
4646
uint64_t blobid, bool thin_provision, enum lvol_clear_method clear_method,
4747
int8_t lvol_priority_class, spdk_lvol_op_with_handle_complete cb_fn, void *cb_arg);

module/bdev/lvol/vbdev_lvol_rpc.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -434,18 +434,21 @@ SPDK_RPC_REGISTER("bdev_lvol_create", rpc_bdev_lvol_create, SPDK_RPC_RUNTIME)
434434
struct rpc_bdev_hublvol {
435435
char *uuid;
436436
char *lvs_name;
437+
char *name;
437438
};
438439

439440
static void
440441
free_rpc_bdev_hublvol(struct rpc_bdev_hublvol *req)
441442
{
442443
free(req->uuid);
443444
free(req->lvs_name);
445+
free(req->name);
444446
}
445447

446448
static const struct spdk_json_object_decoder rpc_bdev_hublvol_decoders[] = {
447449
{"uuid", offsetof(struct rpc_bdev_hublvol, uuid), spdk_json_decode_string, true},
448450
{"lvs_name", offsetof(struct rpc_bdev_hublvol, lvs_name), spdk_json_decode_string, true},
451+
{"name", offsetof(struct rpc_bdev_hublvol, name), spdk_json_decode_string, true},
449452
};
450453

451454
static void
@@ -493,7 +496,15 @@ rpc_bdev_lvol_create_hublvol(struct spdk_jsonrpc_request *request,
493496
goto cleanup;
494497
}
495498

496-
rc = vbdev_lvol_create_hublvol(lvs, rpc_bdev_hublvol_create_cb, request);
499+
if (req.name == NULL) {
500+
req.name = strdup("hublvol");
501+
if (req.name == NULL) {
502+
spdk_jsonrpc_send_error_response(request, -ENOMEM, spdk_strerror(ENOMEM));
503+
goto cleanup;
504+
}
505+
}
506+
507+
rc = vbdev_lvol_create_hublvol(lvs, req.name, rpc_bdev_hublvol_create_cb, request);
497508
if (rc < 0) {
498509
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
499510
goto cleanup;
@@ -547,7 +558,15 @@ rpc_bdev_lvol_delete_hublvol(struct spdk_jsonrpc_request *request,
547558
goto cleanup;
548559
}
549560

550-
lvol = spdk_lvol_get_by_names(lvs->name, "hublvol");
561+
if (req.name == NULL) {
562+
req.name = strdup("hublvol");
563+
if (req.name == NULL) {
564+
spdk_jsonrpc_send_error_response(request, -ENOMEM, spdk_strerror(ENOMEM));
565+
goto cleanup;
566+
}
567+
}
568+
569+
lvol = spdk_lvol_get_by_names(lvs->name, req.name);
551570
if (!lvol) {
552571
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
553572
goto cleanup;

python/spdk/rpc/lvol.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,13 @@ def bdev_lvol_add_clone(client, lvol_name=None, child_name=None):
425425
params = { 'lvol_name': lvol_name, 'child_name': child_name }
426426
return client.call('bdev_lvol_add_clone', params)
427427

428-
def bdev_lvol_create_hublvol(client, uuid=None, lvs_name=None):
428+
def bdev_lvol_create_hublvol(client, uuid=None, lvs_name=None, name=None):
429429
"""Create a logical volume on a logical volume store.
430430
431431
Args:
432432
uuid: UUID of logical volume store to create logical volume on (optional)
433433
lvs_name: name of logical volume store to create logical volume on (optional)
434+
name: name of the logical volume to create (optional)
434435
435436
Either uuid or lvs_name must be specified, but not both.
436437
@@ -445,14 +446,18 @@ def bdev_lvol_create_hublvol(client, uuid=None, lvs_name=None):
445446
params['uuid'] = uuid
446447
if lvs_name:
447448
params['lvs_name'] = lvs_name
449+
if name:
450+
params['name'] = name
451+
448452
return client.call('bdev_lvol_create_hublvol', params)
449453

450-
def bdev_lvol_delete_hublvol(client, uuid=None, lvs_name=None, ):
451-
"""Create a logical volume on a logical volume store.
454+
def bdev_lvol_delete_hublvol(client, uuid=None, lvs_name=None, name=None):
455+
"""Delete a logical volume from a logical volume store.
452456
453-
Args:
454-
uuid: UUID of logical volume store to create logical volume on (optional)
455-
lvs_name: name of logical volume store to create logical volume on (optional)
457+
Args:
458+
uuid: UUID of logical volume store to delete logical volume from (optional)
459+
lvs_name: name of logical volume store to delete logical volume from (optional)
460+
name: name of the logical volume to delete (optional)
456461
457462
Either uuid or lvs_name must be specified, but not both.
458463
@@ -467,6 +472,8 @@ def bdev_lvol_delete_hublvol(client, uuid=None, lvs_name=None, ):
467472
params['uuid'] = uuid
468473
if lvs_name:
469474
params['lvs_name'] = lvs_name
475+
if name:
476+
params['name'] = name
470477
return client.call('bdev_lvol_delete_hublvol', params)
471478

472479
def bdev_lvol_register(client, lvol_name, registered_uuid, blobid, thin_provision=False, uuid=None, lvs_name=None, clear_method=None, lvol_priority_class=0):

scripts/rpc.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,21 +2310,25 @@ def bdev_lvol_set_migration_flag(args):
23102310
def bdev_lvol_create_hublvol(args):
23112311
print_json(rpc.lvol.bdev_lvol_create_hublvol(args.client,
23122312
uuid=args.uuid,
2313-
lvs_name=args.lvs_name))
2313+
lvs_name=args.lvs_name,
2314+
name=args.name))
23142315

23152316
p = subparsers.add_parser('bdev_lvol_create_hublvol', help='Add a bdev with an logical volume backend')
23162317
p.add_argument('-u', '--uuid', help='lvol store UUID')
23172318
p.add_argument('-l', '--lvs-name', help='lvol store name')
2319+
p.add_argument('-n', '--name', help='lvol name')
23182320
p.set_defaults(func=bdev_lvol_create_hublvol)
23192321

23202322
def bdev_lvol_delete_hublvol(args):
23212323
print_json(rpc.lvol.bdev_lvol_delete_hublvol(args.client,
23222324
uuid=args.uuid,
2323-
lvs_name=args.lvs_name))
2325+
lvs_name=args.lvs_name,
2326+
name=args.name))
23242327

23252328
p = subparsers.add_parser('bdev_lvol_delete_hublvol', help='Add a bdev with an logical volume backend')
23262329
p.add_argument('-u', '--uuid', help='lvol store UUID')
23272330
p.add_argument('-l', '--lvs-name', help='lvol store name')
2331+
p.add_argument('-n', '--name', help='lvol name')
23282332
p.set_defaults(func=bdev_lvol_delete_hublvol)
23292333

23302334
def bdev_lvol_register(args):

0 commit comments

Comments
 (0)