bdev: add delete_iscsi_bdev call
Since delete_bdev should be used only for debug purpose, this patch adds delete call specific for iSCSI bdev. No changes in spdkcli, since it is not implemented yet. Tests unchanged, because test is only done by running bdevperf and exiting. Without time to delete_iscsi_bdev. Change-Id: I8341bfb65932a1deb1fb6463e11ef932d6f6d597 Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/415678 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
0847ad90fd
commit
6be654aad7
@ -751,6 +751,17 @@ err:
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
delete_iscsi_disk(struct spdk_bdev *bdev, spdk_delete_iscsi_complete cb_fn, void *cb_arg)
|
||||
{
|
||||
if (!bdev || bdev->module != &g_iscsi_bdev_module) {
|
||||
cb_fn(cb_arg, -ENODEV);
|
||||
return;
|
||||
}
|
||||
|
||||
spdk_bdev_unregister(bdev, cb_fn, cb_arg);
|
||||
}
|
||||
|
||||
static void
|
||||
bdev_iscsi_initialize_cb(void *cb_arg, struct spdk_bdev *bdev, int status)
|
||||
{
|
||||
|
@ -36,6 +36,8 @@
|
||||
|
||||
#include "spdk/bdev.h"
|
||||
|
||||
typedef void (*spdk_delete_iscsi_complete)(void *cb_arg, int bdeverrno);
|
||||
|
||||
/**
|
||||
* SPDK bdev iSCSI callback type.
|
||||
*
|
||||
@ -61,4 +63,13 @@ typedef void (*spdk_bdev_iscsi_create_cb)(void *cb_arg, struct spdk_bdev *bdev,
|
||||
int create_iscsi_disk(const char *bdev_name, const char *initiator_iqn, const char *url,
|
||||
spdk_bdev_iscsi_create_cb cb_fn, void *cb_arg);
|
||||
|
||||
/**
|
||||
* Delete iSCSI bdev.
|
||||
*
|
||||
* \param bdev Pointer to iSCSI bdev.
|
||||
* \param cb_fn Completion callback
|
||||
* \param cb_arg Completion callback custom arguments
|
||||
*/
|
||||
void delete_iscsi_disk(struct spdk_bdev *bdev, spdk_delete_iscsi_complete cb_fn, void *cb_arg);
|
||||
|
||||
#endif // SPDK_BDEV_ISCSI_H
|
||||
|
@ -111,3 +111,65 @@ invalid:
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
||||
}
|
||||
SPDK_RPC_REGISTER("construct_iscsi_bdev", spdk_rpc_construct_iscsi_bdev, SPDK_RPC_RUNTIME)
|
||||
|
||||
struct rpc_delete_iscsi {
|
||||
char *name;
|
||||
};
|
||||
|
||||
static void
|
||||
free_rpc_delete_iscsi(struct rpc_delete_iscsi *r)
|
||||
{
|
||||
free(r->name);
|
||||
}
|
||||
|
||||
static const struct spdk_json_object_decoder rpc_delete_iscsi_decoders[] = {
|
||||
{"name", offsetof(struct rpc_delete_iscsi, name), spdk_json_decode_string},
|
||||
};
|
||||
|
||||
static void
|
||||
_spdk_rpc_delete_iscsi_bdev_cb(void *cb_arg, int bdeverrno)
|
||||
{
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
struct spdk_json_write_ctx *w;
|
||||
|
||||
w = spdk_jsonrpc_begin_result(request);
|
||||
if (w == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
spdk_json_write_bool(w, bdeverrno == 0);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_rpc_delete_iscsi_bdev(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_delete_iscsi req = {NULL};
|
||||
struct spdk_bdev *bdev;
|
||||
int rc;
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_delete_iscsi_decoders,
|
||||
SPDK_COUNTOF(rpc_delete_iscsi_decoders),
|
||||
&req)) {
|
||||
rc = -EINVAL;
|
||||
goto invalid;
|
||||
}
|
||||
|
||||
bdev = spdk_bdev_get_by_name(req.name);
|
||||
if (bdev == NULL) {
|
||||
rc = -ENODEV;
|
||||
goto invalid;
|
||||
}
|
||||
|
||||
delete_iscsi_disk(bdev, _spdk_rpc_delete_iscsi_bdev_cb, request);
|
||||
|
||||
free_rpc_delete_iscsi(&req);
|
||||
|
||||
return;
|
||||
|
||||
invalid:
|
||||
free_rpc_delete_iscsi(&req);
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS, spdk_strerror(-rc));
|
||||
}
|
||||
SPDK_RPC_REGISTER("delete_iscsi_bdev", spdk_rpc_delete_iscsi_bdev, SPDK_RPC_RUNTIME)
|
||||
|
@ -262,6 +262,15 @@ if __name__ == "__main__":
|
||||
p.add_argument('--url', help="iSCSI Lun URL", required=True)
|
||||
p.set_defaults(func=construct_iscsi_bdev)
|
||||
|
||||
@call_cmd
|
||||
def delete_iscsi_bdev(args):
|
||||
rpc.bdev.delete_iscsi_bdev(args.client,
|
||||
name=args.name)
|
||||
|
||||
p = subparsers.add_parser('delete_iscsi_bdev', help='Delete an iSCSI bdev')
|
||||
p.add_argument('name', help='iSCSI bdev name')
|
||||
p.set_defaults(func=delete_iscsi_bdev)
|
||||
|
||||
@call_cmd
|
||||
def construct_pmem_bdev(args):
|
||||
print_array(rpc.bdev.construct_pmem_bdev(args.client,
|
||||
|
@ -187,6 +187,16 @@ def construct_iscsi_bdev(client, name, url, initiator_iqn):
|
||||
return client.call('construct_iscsi_bdev', params)
|
||||
|
||||
|
||||
def delete_iscsi_bdev(client, name):
|
||||
"""Remove iSCSI bdev from the system.
|
||||
|
||||
Args:
|
||||
bdev_name: name of iSCSI bdev to delete
|
||||
"""
|
||||
params = {'name': name}
|
||||
return client.call('delete_iscsi_bdev', params)
|
||||
|
||||
|
||||
def construct_pmem_bdev(client, pmem_file, name):
|
||||
"""Construct a libpmemblk block device.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user