bdev/lvol: add more descriptive rpc error messages
Improve error messages where possible. Change-Id: I8f736fb6481d65b55e16e548fac0130cd152d3fa Signed-off-by: Karol Latecki <karol.latecki@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/461575 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
0965d63d3a
commit
c05355db23
@ -125,22 +125,23 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
|||||||
{
|
{
|
||||||
struct rpc_construct_lvol_store req = {};
|
struct rpc_construct_lvol_store req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
int rc;
|
int rc = 0;
|
||||||
enum lvs_clear_method clear_method;
|
enum lvs_clear_method clear_method;
|
||||||
|
|
||||||
if (spdk_json_decode_object(params, rpc_construct_lvol_store_decoders,
|
if (spdk_json_decode_object(params, rpc_construct_lvol_store_decoders,
|
||||||
SPDK_COUNTOF(rpc_construct_lvol_store_decoders),
|
SPDK_COUNTOF(rpc_construct_lvol_store_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.bdev_name);
|
bdev = spdk_bdev_get_by_name(req.bdev_name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("bdev '%s' does not exist\n", req.bdev_name);
|
SPDK_ERRLOG("bdev '%s' does not exist\n", req.bdev_name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response_fmt(request, -ENODEV, "Bdev %s not found", req.bdev_name);
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.clear_method != NULL) {
|
if (req.clear_method != NULL) {
|
||||||
@ -151,8 +152,8 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
|||||||
} else if (!strcasecmp(req.clear_method, "write_zeroes")) {
|
} else if (!strcasecmp(req.clear_method, "write_zeroes")) {
|
||||||
clear_method = LVS_CLEAR_WITH_WRITE_ZEROES;
|
clear_method = LVS_CLEAR_WITH_WRITE_ZEROES;
|
||||||
} else {
|
} else {
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, -EINVAL, "Invalid clear_method parameter");
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
clear_method = LVS_CLEAR_WITH_UNMAP;
|
clear_method = LVS_CLEAR_WITH_UNMAP;
|
||||||
@ -161,15 +162,14 @@ spdk_rpc_construct_lvol_store(struct spdk_jsonrpc_request *request,
|
|||||||
rc = vbdev_lvs_create(bdev, req.lvs_name, req.cluster_sz, clear_method,
|
rc = vbdev_lvs_create(bdev, req.lvs_name, req.cluster_sz, clear_method,
|
||||||
_spdk_rpc_lvol_store_construct_cb, request);
|
_spdk_rpc_lvol_store_construct_cb, request);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto invalid;
|
spdk_jsonrpc_send_error_response(request, -rc, spdk_strerror(rc));
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
free_rpc_construct_lvol_store(&req);
|
free_rpc_construct_lvol_store(&req);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
invalid:
|
cleanup:
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_construct_lvol_store(&req);
|
free_rpc_construct_lvol_store(&req);
|
||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("construct_lvol_store", spdk_rpc_construct_lvol_store, SPDK_RPC_RUNTIME)
|
SPDK_RPC_REGISTER("construct_lvol_store", spdk_rpc_construct_lvol_store, SPDK_RPC_RUNTIME)
|
||||||
@ -221,31 +221,26 @@ spdk_rpc_rename_lvol_store(struct spdk_jsonrpc_request *request,
|
|||||||
{
|
{
|
||||||
struct rpc_rename_lvol_store req = {};
|
struct rpc_rename_lvol_store req = {};
|
||||||
struct spdk_lvol_store *lvs;
|
struct spdk_lvol_store *lvs;
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (spdk_json_decode_object(params, rpc_rename_lvol_store_decoders,
|
if (spdk_json_decode_object(params, rpc_rename_lvol_store_decoders,
|
||||||
SPDK_COUNTOF(rpc_rename_lvol_store_decoders),
|
SPDK_COUNTOF(rpc_rename_lvol_store_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvs = vbdev_get_lvol_store_by_name(req.old_name);
|
lvs = vbdev_get_lvol_store_by_name(req.old_name);
|
||||||
if (lvs == NULL) {
|
if (lvs == NULL) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "no lvs existing for given name\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "no lvs existing for given name\n");
|
||||||
rc = -ENOENT;
|
spdk_jsonrpc_send_error_response_fmt(request, -ENOENT, "Lvol store %s not found", req.old_name);
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvs_rename(lvs, req.new_name, _spdk_rpc_rename_lvol_store_cb, request);
|
vbdev_lvs_rename(lvs, req.new_name, _spdk_rpc_rename_lvol_store_cb, request);
|
||||||
|
|
||||||
free_rpc_rename_lvol_store(&req);
|
cleanup:
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_rename_lvol_store(&req);
|
free_rpc_rename_lvol_store(&req);
|
||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("rename_lvol_store", spdk_rpc_rename_lvol_store, SPDK_RPC_RUNTIME)
|
SPDK_RPC_REGISTER("rename_lvol_store", spdk_rpc_rename_lvol_store, SPDK_RPC_RUNTIME)
|
||||||
@ -303,24 +298,20 @@ spdk_rpc_destroy_lvol_store(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_destroy_lvol_store_decoders),
|
SPDK_COUNTOF(rpc_destroy_lvol_store_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
goto invalid;
|
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvs_destruct(lvs, _spdk_rpc_lvol_store_destroy_cb, request);
|
vbdev_lvs_destruct(lvs, _spdk_rpc_lvol_store_destroy_cb, request);
|
||||||
|
|
||||||
free_rpc_destroy_lvol_store(&req);
|
cleanup:
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_destroy_lvol_store(&req);
|
free_rpc_destroy_lvol_store(&req);
|
||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("destroy_lvol_store", spdk_rpc_destroy_lvol_store, SPDK_RPC_RUNTIME)
|
SPDK_RPC_REGISTER("destroy_lvol_store", spdk_rpc_destroy_lvol_store, SPDK_RPC_RUNTIME)
|
||||||
@ -382,7 +373,7 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
{
|
{
|
||||||
struct rpc_construct_lvol_bdev req = {};
|
struct rpc_construct_lvol_bdev req = {};
|
||||||
enum lvol_clear_method clear_method;
|
enum lvol_clear_method clear_method;
|
||||||
int rc;
|
int rc = 0;
|
||||||
struct spdk_lvol_store *lvs = NULL;
|
struct spdk_lvol_store *lvs = NULL;
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Creating blob\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Creating blob\n");
|
||||||
@ -391,13 +382,15 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_construct_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_construct_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
goto invalid;
|
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.clear_method != NULL) {
|
if (req.clear_method != NULL) {
|
||||||
@ -408,8 +401,8 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
} else if (!strcasecmp(req.clear_method, "write_zeroes")) {
|
} else if (!strcasecmp(req.clear_method, "write_zeroes")) {
|
||||||
clear_method = LVOL_CLEAR_WITH_WRITE_ZEROES;
|
clear_method = LVOL_CLEAR_WITH_WRITE_ZEROES;
|
||||||
} else {
|
} else {
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, -EINVAL, "Invalid clean_method option");
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
clear_method = LVOL_CLEAR_WITH_DEFAULT;
|
clear_method = LVOL_CLEAR_WITH_DEFAULT;
|
||||||
@ -418,15 +411,11 @@ spdk_rpc_construct_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
rc = vbdev_lvol_create(lvs, req.lvol_name, req.size, req.thin_provision,
|
rc = vbdev_lvol_create(lvs, req.lvol_name, req.size, req.thin_provision,
|
||||||
clear_method, _spdk_rpc_construct_lvol_bdev_cb, request);
|
clear_method, _spdk_rpc_construct_lvol_bdev_cb, request);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto invalid;
|
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_rpc_construct_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_construct_lvol_bdev(&req);
|
free_rpc_construct_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -480,7 +469,6 @@ spdk_rpc_snapshot_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_snapshot_lvol_bdev req = {};
|
struct rpc_snapshot_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Snapshotting blob\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Snapshotting blob\n");
|
||||||
|
|
||||||
@ -488,31 +476,28 @@ spdk_rpc_snapshot_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_snapshot_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_snapshot_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.lvol_name);
|
bdev = spdk_bdev_get_by_name(req.lvol_name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "bdev '%s' does not exist\n", req.lvol_name);
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "bdev '%s' does not exist\n", req.lvol_name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
SPDK_ERRLOG("lvol does not exist\n");
|
SPDK_ERRLOG("lvol does not exist\n");
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_create_snapshot(lvol, req.snapshot_name, _spdk_rpc_snapshot_lvol_bdev_cb, request);
|
vbdev_lvol_create_snapshot(lvol, req.snapshot_name, _spdk_rpc_snapshot_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_snapshot_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_snapshot_lvol_bdev(&req);
|
free_rpc_snapshot_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -566,7 +551,6 @@ spdk_rpc_clone_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_clone_lvol_bdev req = {};
|
struct rpc_clone_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Cloning blob\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Cloning blob\n");
|
||||||
|
|
||||||
@ -574,31 +558,28 @@ spdk_rpc_clone_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_clone_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_clone_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.snapshot_name);
|
bdev = spdk_bdev_get_by_name(req.snapshot_name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "bdev '%s' does not exist\n", req.snapshot_name);
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "bdev '%s' does not exist\n", req.snapshot_name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
SPDK_ERRLOG("lvol does not exist\n");
|
SPDK_ERRLOG("lvol does not exist\n");
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_create_clone(lvol, req.clone_name, _spdk_rpc_clone_lvol_bdev_cb, request);
|
vbdev_lvol_create_clone(lvol, req.clone_name, _spdk_rpc_clone_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_clone_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_clone_lvol_bdev(&req);
|
free_rpc_clone_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,7 +633,6 @@ spdk_rpc_rename_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_rename_lvol_bdev req = {};
|
struct rpc_rename_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Renaming lvol\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Renaming lvol\n");
|
||||||
|
|
||||||
@ -660,31 +640,28 @@ spdk_rpc_rename_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_rename_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_rename_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.old_name);
|
bdev = spdk_bdev_get_by_name(req.old_name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("bdev '%s' does not exist\n", req.old_name);
|
SPDK_ERRLOG("bdev '%s' does not exist\n", req.old_name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
SPDK_ERRLOG("lvol does not exist\n");
|
SPDK_ERRLOG("lvol does not exist\n");
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_rename(lvol, req.new_name, _spdk_rpc_rename_lvol_bdev_cb, request);
|
vbdev_lvol_rename(lvol, req.new_name, _spdk_rpc_rename_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_rename_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_rename_lvol_bdev(&req);
|
free_rpc_rename_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -735,7 +712,6 @@ spdk_rpc_inflate_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_inflate_lvol_bdev req = {};
|
struct rpc_inflate_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Inflating lvol\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Inflating lvol\n");
|
||||||
|
|
||||||
@ -743,31 +719,28 @@ spdk_rpc_inflate_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_inflate_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_inflate_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.name);
|
bdev = spdk_bdev_get_by_name(req.name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
|
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
SPDK_ERRLOG("lvol does not exist\n");
|
SPDK_ERRLOG("lvol does not exist\n");
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_lvol_inflate(lvol, _spdk_rpc_inflate_lvol_bdev_cb, request);
|
spdk_lvol_inflate(lvol, _spdk_rpc_inflate_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_inflate_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_inflate_lvol_bdev(&req);
|
free_rpc_inflate_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -780,7 +753,6 @@ spdk_rpc_decouple_parent_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_inflate_lvol_bdev req = {};
|
struct rpc_inflate_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Decoupling parent of lvol\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Decoupling parent of lvol\n");
|
||||||
|
|
||||||
@ -788,31 +760,28 @@ spdk_rpc_decouple_parent_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_inflate_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_inflate_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.name);
|
bdev = spdk_bdev_get_by_name(req.name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
|
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
SPDK_ERRLOG("lvol does not exist\n");
|
SPDK_ERRLOG("lvol does not exist\n");
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_lvol_decouple_parent(lvol, _spdk_rpc_inflate_lvol_bdev_cb, request);
|
spdk_lvol_decouple_parent(lvol, _spdk_rpc_inflate_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_inflate_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
|
||||||
free_rpc_inflate_lvol_bdev(&req);
|
free_rpc_inflate_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -865,7 +834,6 @@ spdk_rpc_resize_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_resize_lvol_bdev req = {};
|
struct rpc_resize_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Resizing lvol\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Resizing lvol\n");
|
||||||
|
|
||||||
@ -873,31 +841,27 @@ spdk_rpc_resize_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_resize_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_resize_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.name);
|
bdev = spdk_bdev_get_by_name(req.name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_resize(lvol, req.size, _spdk_rpc_resize_lvol_bdev_cb, request);
|
vbdev_lvol_resize(lvol, req.size, _spdk_rpc_resize_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_resize_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_resize_lvol_bdev(&req);
|
free_rpc_resize_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -948,7 +912,6 @@ spdk_rpc_set_read_only_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_set_ro_lvol_bdev req = {};
|
struct rpc_set_ro_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc = 0;
|
|
||||||
|
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Setting lvol as read only\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Setting lvol as read only\n");
|
||||||
|
|
||||||
@ -956,37 +919,33 @@ spdk_rpc_set_read_only_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_set_ro_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_set_ro_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req.name == NULL) {
|
if (req.name == NULL) {
|
||||||
SPDK_ERRLOG("missing name param\n");
|
SPDK_ERRLOG("missing name param\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, -EINVAL, "Missing name parameter");
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.name);
|
bdev = spdk_bdev_get_by_name(req.name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_set_read_only(lvol, _spdk_rpc_set_ro_lvol_bdev_cb, request);
|
vbdev_lvol_set_read_only(lvol, _spdk_rpc_set_ro_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_set_ro_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_set_ro_lvol_bdev(&req);
|
free_rpc_set_ro_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1037,37 +996,32 @@ spdk_rpc_destroy_lvol_bdev(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_destroy_lvol_bdev req = {};
|
struct rpc_destroy_lvol_bdev req = {};
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
struct spdk_lvol *lvol;
|
struct spdk_lvol *lvol;
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (spdk_json_decode_object(params, rpc_destroy_lvol_bdev_decoders,
|
if (spdk_json_decode_object(params, rpc_destroy_lvol_bdev_decoders,
|
||||||
SPDK_COUNTOF(rpc_destroy_lvol_bdev_decoders),
|
SPDK_COUNTOF(rpc_destroy_lvol_bdev_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdev = spdk_bdev_get_by_name(req.name);
|
bdev = spdk_bdev_get_by_name(req.name);
|
||||||
if (bdev == NULL) {
|
if (bdev == NULL) {
|
||||||
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
SPDK_ERRLOG("no bdev for provided name %s\n", req.name);
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol = vbdev_lvol_get_from_bdev(bdev);
|
lvol = vbdev_lvol_get_from_bdev(bdev);
|
||||||
if (lvol == NULL) {
|
if (lvol == NULL) {
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, -ENODEV, spdk_strerror(ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
vbdev_lvol_destroy(lvol, _spdk_rpc_destroy_lvol_bdev_cb, request);
|
vbdev_lvol_destroy(lvol, _spdk_rpc_destroy_lvol_bdev_cb, request);
|
||||||
|
|
||||||
free_rpc_destroy_lvol_bdev(&req);
|
cleanup:
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_destroy_lvol_bdev(&req);
|
free_rpc_destroy_lvol_bdev(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1137,19 +1091,21 @@ spdk_rpc_get_lvol_stores(struct spdk_jsonrpc_request *request,
|
|||||||
SPDK_COUNTOF(rpc_get_lvol_stores_decoders),
|
SPDK_COUNTOF(rpc_get_lvol_stores_decoders),
|
||||||
&req)) {
|
&req)) {
|
||||||
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||||
goto invalid;
|
"spdk_json_decode_object failed");
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
rc = vbdev_get_lvol_store_by_uuid_xor_name(req.uuid, req.lvs_name, &lvs);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
goto invalid;
|
spdk_jsonrpc_send_error_response(request, rc, spdk_strerror(-rc));
|
||||||
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvs_bdev = vbdev_get_lvs_bdev_by_lvs(lvs);
|
lvs_bdev = vbdev_get_lvs_bdev_by_lvs(lvs);
|
||||||
if (lvs_bdev == NULL) {
|
if (lvs_bdev == NULL) {
|
||||||
rc = -ENODEV;
|
spdk_jsonrpc_send_error_response(request, ENODEV, spdk_strerror(-ENODEV));
|
||||||
goto invalid;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1173,13 +1129,7 @@ spdk_rpc_get_lvol_stores(struct spdk_jsonrpc_request *request,
|
|||||||
|
|
||||||
spdk_jsonrpc_end_result(request, w);
|
spdk_jsonrpc_end_result(request, w);
|
||||||
|
|
||||||
free_rpc_get_lvol_stores(&req);
|
cleanup:
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
|
||||||
spdk_strerror(-rc));
|
|
||||||
free_rpc_get_lvol_stores(&req);
|
free_rpc_get_lvol_stores(&req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user