rpc/vhost: unify RPC "remove_vhost_controller" for all backends
replaced "remove_vhost_scsi_controller" and "remove_vhost_blk_controller" with "remove_vhost_controller". Change-Id: I6f4b180054c13f25aae992e9be50375d3750a376 Signed-off-by: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com> Reviewed-on: https://review.gerrithub.io/377197 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
65b6d8f495
commit
c63d9de433
@ -822,12 +822,19 @@ spdk_vhost_shutdown_cb(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
spdk_vhost_dump_config_json(struct spdk_vhost_dev *vdev, struct spdk_json_write_ctx *w)
|
spdk_vhost_dump_config_json(struct spdk_vhost_dev *vdev,
|
||||||
|
struct spdk_json_write_ctx *w)
|
||||||
{
|
{
|
||||||
assert(vdev->backend->dump_config_json != NULL);
|
assert(vdev->backend->dump_config_json != NULL);
|
||||||
vdev->backend->dump_config_json(vdev, w);
|
vdev->backend->dump_config_json(vdev, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
spdk_remove_vhost_controller(struct spdk_vhost_dev *vdev)
|
||||||
|
{
|
||||||
|
return vdev->backend->vhost_remove_controller(vdev);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
new_connection(int vid)
|
new_connection(int vid)
|
||||||
{
|
{
|
||||||
|
@ -623,6 +623,7 @@ static const struct spdk_vhost_dev_backend vhost_blk_device_backend = {
|
|||||||
.new_device = new_device,
|
.new_device = new_device,
|
||||||
.destroy_device = destroy_device,
|
.destroy_device = destroy_device,
|
||||||
.dump_config_json = spdk_vhost_blk_dump_config_json,
|
.dump_config_json = spdk_vhost_blk_dump_config_json,
|
||||||
|
.vhost_remove_controller = spdk_vhost_blk_destroy,
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -99,6 +99,7 @@ struct spdk_vhost_dev_backend {
|
|||||||
spdk_vhost_event_fn destroy_device;
|
spdk_vhost_event_fn destroy_device;
|
||||||
|
|
||||||
void (*dump_config_json)(struct spdk_vhost_dev *vdev, struct spdk_json_write_ctx *w);
|
void (*dump_config_json)(struct spdk_vhost_dev *vdev, struct spdk_json_write_ctx *w);
|
||||||
|
int (*vhost_remove_controller)(struct spdk_vhost_dev *vdev);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_vhost_dev {
|
struct spdk_vhost_dev {
|
||||||
@ -151,5 +152,6 @@ void spdk_vhost_dump_config_json(struct spdk_vhost_dev *vdev, struct spdk_json_w
|
|||||||
void spdk_vhost_dev_backend_event_done(void *event_ctx, int response);
|
void spdk_vhost_dev_backend_event_done(void *event_ctx, int response);
|
||||||
void spdk_vhost_lock(void);
|
void spdk_vhost_lock(void);
|
||||||
void spdk_vhost_unlock(void);
|
void spdk_vhost_unlock(void);
|
||||||
|
int spdk_remove_vhost_controller(struct spdk_vhost_dev *vdev);
|
||||||
|
|
||||||
#endif /* SPDK_VHOST_INTERNAL_H */
|
#endif /* SPDK_VHOST_INTERNAL_H */
|
||||||
|
@ -101,91 +101,6 @@ invalid:
|
|||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("construct_vhost_scsi_controller", spdk_rpc_construct_vhost_scsi_controller)
|
SPDK_RPC_REGISTER("construct_vhost_scsi_controller", spdk_rpc_construct_vhost_scsi_controller)
|
||||||
|
|
||||||
struct rpc_remove_vhost_scsi_ctrlr {
|
|
||||||
char *ctrlr;
|
|
||||||
|
|
||||||
struct spdk_jsonrpc_request *request;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
free_rpc_remove_vhost_scsi_ctrlr(struct rpc_remove_vhost_scsi_ctrlr *req)
|
|
||||||
{
|
|
||||||
free(req->ctrlr);
|
|
||||||
free(req);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct spdk_json_object_decoder rpc_remove_vhost_ctrlr[] = {
|
|
||||||
{"ctrlr", offsetof(struct rpc_remove_vhost_scsi_ctrlr, ctrlr), spdk_json_decode_string },
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
|
||||||
spdk_rpc_remove_vhost_scsi_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
|
||||||
{
|
|
||||||
struct rpc_remove_vhost_scsi_ctrlr *ctx = arg;
|
|
||||||
struct spdk_jsonrpc_request *request = ctx->request;
|
|
||||||
struct spdk_json_write_ctx *w;
|
|
||||||
int rc;
|
|
||||||
char buf[64];
|
|
||||||
|
|
||||||
rc = spdk_vhost_scsi_dev_remove(vdev);
|
|
||||||
if (rc < 0) {
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
free_rpc_remove_vhost_scsi_ctrlr(ctx);
|
|
||||||
|
|
||||||
w = spdk_jsonrpc_begin_result(request);
|
|
||||||
if (w == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
spdk_json_write_bool(w, true);
|
|
||||||
spdk_jsonrpc_end_result(request, w);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
free_rpc_remove_vhost_scsi_ctrlr(ctx);
|
|
||||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
spdk_rpc_remove_vhost_scsi_controller(struct spdk_jsonrpc_request *request,
|
|
||||||
const struct spdk_json_val *params)
|
|
||||||
{
|
|
||||||
struct rpc_remove_vhost_scsi_ctrlr *req;
|
|
||||||
char buf[64];
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
req = calloc(1, sizeof(*req));
|
|
||||||
if (req == NULL) {
|
|
||||||
rc = -ENOMEM;
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
req->request = request;
|
|
||||||
if (spdk_json_decode_object(params, rpc_remove_vhost_ctrlr,
|
|
||||||
SPDK_COUNTOF(rpc_remove_vhost_ctrlr),
|
|
||||||
req)) {
|
|
||||||
SPDK_DEBUGLOG(SPDK_TRACE_VHOST_RPC, "spdk_json_decode_object failed\n");
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto invalid;
|
|
||||||
}
|
|
||||||
|
|
||||||
spdk_vhost_call_external_event(req->ctrlr, spdk_rpc_remove_vhost_scsi_controller_cb, req);
|
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
if (req) {
|
|
||||||
free_rpc_remove_vhost_scsi_ctrlr(req);
|
|
||||||
}
|
|
||||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
|
||||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
|
||||||
}
|
|
||||||
SPDK_RPC_REGISTER("remove_vhost_scsi_controller", spdk_rpc_remove_vhost_scsi_controller)
|
|
||||||
|
|
||||||
|
|
||||||
struct rpc_add_vhost_scsi_ctrlr_lun {
|
struct rpc_add_vhost_scsi_ctrlr_lun {
|
||||||
char *ctrlr;
|
char *ctrlr;
|
||||||
uint32_t scsi_dev_num;
|
uint32_t scsi_dev_num;
|
||||||
@ -454,38 +369,43 @@ invalid:
|
|||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("construct_vhost_blk_controller", spdk_rpc_construct_vhost_blk_controller)
|
SPDK_RPC_REGISTER("construct_vhost_blk_controller", spdk_rpc_construct_vhost_blk_controller)
|
||||||
|
|
||||||
struct rpc_remove_vhost_blk_ctrlr {
|
struct rpc_remove_vhost_ctrlr {
|
||||||
char *ctrlr;
|
char *ctrlr;
|
||||||
|
|
||||||
struct spdk_jsonrpc_request *request;
|
struct spdk_jsonrpc_request *request;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct spdk_json_object_decoder rpc_remove_vhost_blk_ctrlr[] = {
|
static const struct spdk_json_object_decoder rpc_remove_vhost_ctrlr[] = {
|
||||||
{"ctrlr", offsetof(struct rpc_remove_vhost_blk_ctrlr, ctrlr), spdk_json_decode_string },
|
{"ctrlr", offsetof(struct rpc_remove_vhost_ctrlr, ctrlr), spdk_json_decode_string },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_rpc_remove_vhost_blk_ctrlr(struct rpc_remove_vhost_blk_ctrlr *req)
|
free_rpc_remove_vhost_ctrlr(struct rpc_remove_vhost_ctrlr *req)
|
||||||
{
|
{
|
||||||
free(req->ctrlr);
|
free(req->ctrlr);
|
||||||
free(req);
|
free(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
spdk_rpc_remove_vhost_blk_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
spdk_rpc_remove_vhost_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||||
{
|
{
|
||||||
struct rpc_remove_vhost_blk_ctrlr *ctx = arg;
|
struct rpc_remove_vhost_ctrlr *ctx = arg;
|
||||||
struct spdk_jsonrpc_request *request = ctx->request;
|
struct spdk_jsonrpc_request *request = ctx->request;
|
||||||
struct spdk_json_write_ctx *w;
|
struct spdk_json_write_ctx *w;
|
||||||
int rc;
|
int rc;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
|
||||||
rc = spdk_vhost_blk_destroy(vdev);
|
if (vdev == NULL) {
|
||||||
|
rc = -ENODEV;
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = spdk_remove_vhost_controller(vdev);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto invalid;
|
goto invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_rpc_remove_vhost_blk_ctrlr(ctx);
|
free_rpc_remove_vhost_ctrlr(ctx);
|
||||||
|
|
||||||
w = spdk_jsonrpc_begin_result(request);
|
w = spdk_jsonrpc_begin_result(request);
|
||||||
if (w == NULL) {
|
if (w == NULL) {
|
||||||
@ -497,7 +417,7 @@ spdk_rpc_remove_vhost_blk_controller_cb(struct spdk_vhost_dev *vdev, void *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
invalid:
|
invalid:
|
||||||
free_rpc_remove_vhost_blk_ctrlr(ctx);
|
free_rpc_remove_vhost_ctrlr(ctx);
|
||||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||||
spdk_jsonrpc_send_error_response(request,
|
spdk_jsonrpc_send_error_response(request,
|
||||||
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||||
@ -505,10 +425,10 @@ invalid:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
spdk_rpc_remove_vhost_blk_controller(struct spdk_jsonrpc_request *request,
|
spdk_rpc_remove_vhost_controller(struct spdk_jsonrpc_request *request,
|
||||||
const struct spdk_json_val *params)
|
const struct spdk_json_val *params)
|
||||||
{
|
{
|
||||||
struct rpc_remove_vhost_blk_ctrlr *req;
|
struct rpc_remove_vhost_ctrlr *req;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -519,26 +439,26 @@ spdk_rpc_remove_vhost_blk_controller(struct spdk_jsonrpc_request *request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
req->request = request;
|
req->request = request;
|
||||||
if (spdk_json_decode_object(params, rpc_remove_vhost_blk_ctrlr,
|
if (spdk_json_decode_object(params, rpc_remove_vhost_ctrlr,
|
||||||
SPDK_COUNTOF(rpc_remove_vhost_blk_ctrlr), req)) {
|
SPDK_COUNTOF(rpc_remove_vhost_ctrlr), req)) {
|
||||||
SPDK_DEBUGLOG(SPDK_TRACE_VHOST_RPC, "spdk_json_decode_object failed\n");
|
SPDK_DEBUGLOG(SPDK_TRACE_VHOST_RPC, "spdk_json_decode_object failed\n");
|
||||||
rc = -EINVAL;
|
rc = -EINVAL;
|
||||||
goto invalid;
|
goto invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
spdk_vhost_call_external_event(req->ctrlr, spdk_rpc_remove_vhost_blk_controller_cb, req);
|
spdk_vhost_call_external_event(req->ctrlr, spdk_rpc_remove_vhost_controller_cb, req);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
invalid:
|
invalid:
|
||||||
if (req) {
|
if (req) {
|
||||||
free_rpc_remove_vhost_blk_ctrlr(req);
|
free_rpc_remove_vhost_ctrlr(req);
|
||||||
}
|
}
|
||||||
spdk_strerror_r(-rc, buf, sizeof(buf));
|
spdk_strerror_r(-rc, buf, sizeof(buf));
|
||||||
spdk_jsonrpc_send_error_response(request,
|
spdk_jsonrpc_send_error_response(request,
|
||||||
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
SPDK_JSONRPC_ERROR_INVALID_PARAMS, buf);
|
||||||
|
|
||||||
}
|
}
|
||||||
SPDK_RPC_REGISTER("remove_vhost_blk_controller", spdk_rpc_remove_vhost_blk_controller)
|
SPDK_RPC_REGISTER("remove_vhost_controller", spdk_rpc_remove_vhost_controller)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
spdk_rpc_get_vhost_controllers(struct spdk_jsonrpc_request *request,
|
spdk_rpc_get_vhost_controllers(struct spdk_jsonrpc_request *request,
|
||||||
|
@ -109,6 +109,7 @@ const struct spdk_vhost_dev_backend spdk_vhost_scsi_device_backend = {
|
|||||||
.new_device = new_device,
|
.new_device = new_device,
|
||||||
.destroy_device = destroy_device,
|
.destroy_device = destroy_device,
|
||||||
.dump_config_json = spdk_vhost_scsi_config_json,
|
.dump_config_json = spdk_vhost_scsi_config_json,
|
||||||
|
.vhost_remove_controller = spdk_vhost_scsi_dev_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -555,14 +555,6 @@ p.add_argument('ctrlr', help='controller name')
|
|||||||
p.add_argument('--cpumask', help='cpu mask for this controller')
|
p.add_argument('--cpumask', help='cpu mask for this controller')
|
||||||
p.set_defaults(func=construct_vhost_scsi_controller)
|
p.set_defaults(func=construct_vhost_scsi_controller)
|
||||||
|
|
||||||
def remove_vhost_scsi_controller(args):
|
|
||||||
params = {'ctrlr': args.ctrlr}
|
|
||||||
jsonrpc_call('remove_vhost_scsi_controller', params)
|
|
||||||
|
|
||||||
p = subparsers.add_parser('remove_vhost_scsi_controller', help='Remove vhost controller')
|
|
||||||
p.add_argument('ctrlr', help='controller name')
|
|
||||||
p.set_defaults(func=remove_vhost_scsi_controller)
|
|
||||||
|
|
||||||
def add_vhost_scsi_lun(args):
|
def add_vhost_scsi_lun(args):
|
||||||
params = {
|
params = {
|
||||||
'ctrlr': args.ctrlr,
|
'ctrlr': args.ctrlr,
|
||||||
@ -607,20 +599,20 @@ p.add_argument('--cpumask', help='cpu mask for this controller')
|
|||||||
p.add_argument("-r", "--readonly", action='store_true', help='Set controller as read-only')
|
p.add_argument("-r", "--readonly", action='store_true', help='Set controller as read-only')
|
||||||
p.set_defaults(func=construct_vhost_blk_controller)
|
p.set_defaults(func=construct_vhost_blk_controller)
|
||||||
|
|
||||||
def remove_vhost_blk_controller(args):
|
|
||||||
params = {'ctrlr': args.ctrlr}
|
|
||||||
jsonrpc_call('remove_vhost_blk_controller', params)
|
|
||||||
|
|
||||||
p = subparsers.add_parser('remove_vhost_blk_controller', help='Remove a vhost block controller')
|
|
||||||
p.add_argument('ctrlr', help='controller name')
|
|
||||||
p.set_defaults(func=remove_vhost_blk_controller)
|
|
||||||
|
|
||||||
def get_vhost_controllers(args):
|
def get_vhost_controllers(args):
|
||||||
print_dict(jsonrpc_call('get_vhost_controllers'))
|
print_dict(jsonrpc_call('get_vhost_controllers'))
|
||||||
|
|
||||||
p = subparsers.add_parser('get_vhost_controllers', help='List vhost controllers')
|
p = subparsers.add_parser('get_vhost_controllers', help='List vhost controllers')
|
||||||
p.set_defaults(func=get_vhost_controllers)
|
p.set_defaults(func=get_vhost_controllers)
|
||||||
|
|
||||||
|
def remove_vhost_controller(args):
|
||||||
|
params = {'ctrlr': args.ctrlr}
|
||||||
|
jsonrpc_call('remove_vhost_controller', params)
|
||||||
|
|
||||||
|
p = subparsers.add_parser('remove_vhost_controller', help='Remove a vhost controller')
|
||||||
|
p.add_argument('ctrlr', help='controller name')
|
||||||
|
p.set_defaults(func=remove_vhost_controller)
|
||||||
|
|
||||||
def get_rpc_methods(args):
|
def get_rpc_methods(args):
|
||||||
print_dict(jsonrpc_call('get_rpc_methods'))
|
print_dict(jsonrpc_call('get_rpc_methods'))
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ for vm_conf in ${vms[@]}; do
|
|||||||
$rpc_py construct_vhost_blk_controller naa.$disk.${conf[0]} $disk
|
$rpc_py construct_vhost_blk_controller naa.$disk.${conf[0]} $disk
|
||||||
else
|
else
|
||||||
echo "INFO: Trying to remove nonexistent controller"
|
echo "INFO: Trying to remove nonexistent controller"
|
||||||
if $rpc_py remove_vhost_scsi_controller unk0 > /dev/null; then
|
if $rpc_py remove_vhost_controller unk0 > /dev/null; then
|
||||||
echo "ERROR: Removing nonexistent controller succeeded, but it shouldn't"
|
echo "ERROR: Removing nonexistent controller succeeded, but it shouldn't"
|
||||||
false
|
false
|
||||||
fi
|
fi
|
||||||
@ -354,12 +354,11 @@ if ! $no_shutdown; then
|
|||||||
for disk in "${disks[@]}"; do
|
for disk in "${disks[@]}"; do
|
||||||
disk=${disk%%_*}
|
disk=${disk%%_*}
|
||||||
echo "INFO: Removing all vhost devices from controller naa.$disk.${conf[0]}"
|
echo "INFO: Removing all vhost devices from controller naa.$disk.${conf[0]}"
|
||||||
if [[ "$test_type" == "spdk_vhost_blk" ]]; then
|
if [[ "$test_type" == "spdk_vhost_scsi" ]]; then
|
||||||
$rpc_py remove_vhost_blk_controller naa.$disk.${conf[0]}
|
|
||||||
else
|
|
||||||
$rpc_py remove_vhost_scsi_dev naa.$disk.${conf[0]} 0
|
$rpc_py remove_vhost_scsi_dev naa.$disk.${conf[0]} 0
|
||||||
$rpc_py remove_vhost_scsi_controller naa.$disk.${conf[0]}
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
$rpc_py remove_vhost_controller naa.$disk.${conf[0]}
|
||||||
done
|
done
|
||||||
done <<< "${conf[2]}"
|
done <<< "${conf[2]}"
|
||||||
done
|
done
|
||||||
|
@ -223,13 +223,13 @@ if [[ "$ctrl_type" == "vhost_scsi" ]]; then
|
|||||||
echo -e "\tINFO: Removed device $j"
|
echo -e "\tINFO: Removed device $j"
|
||||||
done
|
done
|
||||||
echo "Removing vhost SCSI controller naa.0.$i"
|
echo "Removing vhost SCSI controller naa.0.$i"
|
||||||
$rpc_py remove_vhost_scsi_controller naa.0.$i
|
$rpc_py remove_vhost_controller naa.0.$i
|
||||||
done
|
done
|
||||||
elif [[ "$ctrl_type" == "vhost_blk" ]]; then
|
elif [[ "$ctrl_type" == "vhost_blk" ]]; then
|
||||||
for (( i=0; i<$vm_count; i++)); do
|
for (( i=0; i<$vm_count; i++)); do
|
||||||
for (( j=0; j<${#bdevs[@]}; j++)); do
|
for (( j=0; j<${#bdevs[@]}; j++)); do
|
||||||
echo "INFO: Removing vhost BLK controller naa.$j.$i"
|
echo "INFO: Removing vhost BLK controller naa.$j.$i"
|
||||||
$rpc_py remove_vhost_blk_controller naa.$j.$i
|
$rpc_py remove_vhost_controller naa.$j.$i
|
||||||
echo -e "\tINFO: Removed naa.$j.$i"
|
echo -e "\tINFO: Removed naa.$j.$i"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
Loading…
Reference in New Issue
Block a user