bdev/rpc: add driver-specific data to get_bdevs

Change-Id: Ieb37c9fdb55b36b62adcb421ab1d0426052d23a4
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-11-18 10:22:58 -07:00 committed by Jim Harris
parent 9ec380ba90
commit cf3fb7bb7d
6 changed files with 47 additions and 0 deletions

View File

@ -56,6 +56,7 @@
struct spdk_bdev_io; struct spdk_bdev_io;
struct spdk_bdev_fn_table; struct spdk_bdev_fn_table;
struct spdk_json_write_ctx;
/** /**
* \brief SPDK block device. * \brief SPDK block device.
@ -286,6 +287,8 @@ struct spdk_bdev *spdk_bdev_next(struct spdk_bdev *prev);
bool spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type); bool spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type);
int spdk_bdev_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w);
struct spdk_bdev_io *spdk_bdev_read(struct spdk_bdev *bdev, struct spdk_io_channel *ch, struct spdk_bdev_io *spdk_bdev_read(struct spdk_bdev *bdev, struct spdk_io_channel *ch,
void *buf, uint64_t offset, uint64_t nbytes, void *buf, uint64_t offset, uint64_t nbytes,
spdk_bdev_io_completion_cb cb, void *cb_arg); spdk_bdev_io_completion_cb cb, void *cb_arg);

View File

@ -511,6 +511,16 @@ spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_ty
return bdev->fn_table->io_type_supported(bdev, io_type); return bdev->fn_table->io_type_supported(bdev, io_type);
} }
int
spdk_bdev_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
{
if (bdev->fn_table->dump_config_json) {
return bdev->fn_table->dump_config_json(bdev, w);
}
return 0;
}
struct spdk_io_channel * struct spdk_io_channel *
spdk_bdev_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) spdk_bdev_get_io_channel(struct spdk_bdev *bdev, uint32_t priority)
{ {

View File

@ -139,6 +139,15 @@ struct spdk_bdev_fn_table {
/** Get an I/O channel for the specific bdev for the calling thread. */ /** Get an I/O channel for the specific bdev for the calling thread. */
struct spdk_io_channel *(*get_io_channel)(struct spdk_bdev *bdev, uint32_t priority); struct spdk_io_channel *(*get_io_channel)(struct spdk_bdev *bdev, uint32_t priority);
/**
* Output driver-specific configuration to a JSON stream. Optional - may be NULL.
*
* The JSON write context will be initialized with an open object, so the bdev
* driver should write a name (based on the driver name) followed by a JSON value
* (most likely another nested object).
*/
int (*dump_config_json)(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w);
}; };
void spdk_bdev_register(struct spdk_bdev *bdev); void spdk_bdev_register(struct spdk_bdev *bdev);

View File

@ -45,6 +45,7 @@
#include "spdk/conf.h" #include "spdk/conf.h"
#include "spdk/endian.h" #include "spdk/endian.h"
#include "spdk/bdev.h" #include "spdk/bdev.h"
#include "spdk/json.h"
#include "spdk/nvme.h" #include "spdk/nvme.h"
#include "spdk/io_channel.h" #include "spdk/io_channel.h"
@ -332,11 +333,28 @@ blockdev_nvme_get_io_channel(struct spdk_bdev *bdev, uint32_t priority)
return spdk_get_io_channel(nvme_bdev->ctrlr, priority, false, NULL); return spdk_get_io_channel(nvme_bdev->ctrlr, priority, false, NULL);
} }
static int
blockdev_nvme_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
{
struct nvme_blockdev *nvme_bdev = (struct nvme_blockdev *)bdev;
spdk_json_write_name(w, "nvme");
spdk_json_write_object_begin(w);
spdk_json_write_name(w, "nsid");
spdk_json_write_uint32(w, spdk_nvme_ns_get_id(nvme_bdev->ns));
spdk_json_write_object_end(w);
return 0;
}
static const struct spdk_bdev_fn_table nvmelib_fn_table = { static const struct spdk_bdev_fn_table nvmelib_fn_table = {
.destruct = blockdev_nvme_destruct, .destruct = blockdev_nvme_destruct,
.submit_request = blockdev_nvme_submit_request, .submit_request = blockdev_nvme_submit_request,
.io_type_supported = blockdev_nvme_io_type_supported, .io_type_supported = blockdev_nvme_io_type_supported,
.get_io_channel = blockdev_nvme_get_io_channel, .get_io_channel = blockdev_nvme_get_io_channel,
.dump_config_json = blockdev_nvme_dump_config_json,
}; };
static bool static bool

View File

@ -74,6 +74,11 @@ spdk_rpc_get_bdevs(struct spdk_jsonrpc_server_conn *conn,
spdk_json_write_name(w, "claimed"); spdk_json_write_name(w, "claimed");
spdk_json_write_bool(w, bdev->claimed); spdk_json_write_bool(w, bdev->claimed);
spdk_json_write_name(w, "driver_specific");
spdk_json_write_object_begin(w);
spdk_bdev_dump_config_json(bdev, w);
spdk_json_write_object_end(w);
spdk_json_write_object_end(w); spdk_json_write_object_end(w);
} }
spdk_json_write_array_end(w); spdk_json_write_array_end(w);

View File

@ -40,6 +40,8 @@ echo "iscsi_tgt is listening. Running tests..."
$rpc_config_py $rpc_py $rpc_config_py $rpc_py
$rpc_py get_bdevs
trap - SIGINT SIGTERM EXIT trap - SIGINT SIGTERM EXIT
iscsicleanup iscsicleanup