bdev/rbd: add JSON config dump

Change-Id: I3122c899f76c1ce1eb422bcf73af87d1b41b9364
Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/401223
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Pawel Wodkowski 2018-02-23 20:05:47 +01:00 committed by Jim Harris
parent e301860fb3
commit 13a05f59cc
5 changed files with 38 additions and 6 deletions

View File

@ -557,16 +557,36 @@ bdev_rbd_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
return 0;
}
static void
bdev_rbd_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
{
struct bdev_rbd *rbd = bdev->ctxt;
spdk_json_write_object_begin(w);
spdk_json_write_named_string(w, "method", "construct_rbd_bdev");
spdk_json_write_named_object_begin(w, "params");
spdk_json_write_named_string(w, "name", bdev->name);
spdk_json_write_named_string(w, "pool_name", rbd->pool_name);
spdk_json_write_named_string(w, "rbd_name", rbd->rbd_name);
spdk_json_write_object_end(w);
spdk_json_write_object_end(w);
}
static const struct spdk_bdev_fn_table rbd_fn_table = {
.destruct = bdev_rbd_destruct,
.submit_request = bdev_rbd_submit_request,
.io_type_supported = bdev_rbd_io_type_supported,
.get_io_channel = bdev_rbd_get_io_channel,
.dump_info_json = bdev_rbd_dump_info_json,
.write_config_json = bdev_rbd_write_config_json,
};
struct spdk_bdev *
spdk_bdev_rbd_create(const char *pool_name, const char *rbd_name, uint32_t block_size)
spdk_bdev_rbd_create(const char *name, const char *pool_name, const char *rbd_name,
uint32_t block_size)
{
struct bdev_rbd *rbd;
int ret;
@ -600,7 +620,11 @@ spdk_bdev_rbd_create(const char *pool_name, const char *rbd_name, uint32_t block
return NULL;
}
if (name) {
rbd->disk.name = strdup(name);
} else {
rbd->disk.name = spdk_sprintf_alloc("Ceph%d", bdev_rbd_count);
}
if (!rbd->disk.name) {
bdev_rbd_free(rbd);
return NULL;
@ -684,7 +708,7 @@ bdev_rbd_library_init(void)
}
}
if (spdk_bdev_rbd_create(pool_name, rbd_name, block_size) == NULL) {
if (spdk_bdev_rbd_create(NULL, pool_name, rbd_name, block_size) == NULL) {
rc = -1;
goto end;
}

View File

@ -38,7 +38,7 @@
#include "spdk/bdev.h"
struct spdk_bdev *spdk_bdev_rbd_create(const char *pool_name, const char *rbd_name,
uint32_t block_size);
struct spdk_bdev *spdk_bdev_rbd_create(const char *name, const char *pool_name,
const char *rbd_name, uint32_t block_size);
#endif // SPDK_BDEV_RBD_H

View File

@ -38,6 +38,7 @@
#include "spdk_internal/log.h"
struct rpc_construct_rbd {
char *name;
char *pool_name;
char *rbd_name;
uint32_t block_size;
@ -46,11 +47,13 @@ struct rpc_construct_rbd {
static void
free_rpc_construct_rbd(struct rpc_construct_rbd *req)
{
free(req->name);
free(req->pool_name);
free(req->rbd_name);
}
static const struct spdk_json_object_decoder rpc_construct_rbd_decoders[] = {
{"name", offsetof(struct rpc_construct_rbd, name), spdk_json_decode_string, true},
{"pool_name", offsetof(struct rpc_construct_rbd, pool_name), spdk_json_decode_string},
{"rbd_name", offsetof(struct rpc_construct_rbd, rbd_name), spdk_json_decode_string},
{"block_size", offsetof(struct rpc_construct_rbd, block_size), spdk_json_decode_uint32},
@ -71,7 +74,7 @@ spdk_rpc_construct_rbd_bdev(struct spdk_jsonrpc_request *request,
goto invalid;
}
bdev = spdk_bdev_rbd_create(req.pool_name, req.rbd_name, req.block_size);
bdev = spdk_bdev_rbd_create(req.name, req.pool_name, req.rbd_name, req.block_size);
if (bdev == NULL) {
goto invalid;
}

View File

@ -85,6 +85,7 @@ if __name__ == "__main__":
p = subparsers.add_parser('construct_rbd_bdev',
help='Add a bdev with ceph rbd backend')
p.add_argument('-b', '--name', help="Name of the bdev", required=False)
p.add_argument('pool_name', help='rbd pool name')
p.add_argument('rbd_name', help='rbd image name')
p.add_argument('block_size', help='rbd block size', type=int)

View File

@ -56,6 +56,10 @@ def construct_rbd_bdev(args):
'rbd_name': args.rbd_name,
'block_size': args.block_size,
}
if args.name:
params['name'] = args.name
print_array(args.client.call(
'construct_rbd_bdev', params))