bdev/split: use bdev_part interface to get split names

The base_bdev and vbdevs arrays are going away in the
common bdev layer in a future patch, so prepare for that
in the split RPCs to use the bdev_part interface instead
to get the names of the split bdevs created from the
base_bdev.

No change in observed functionality.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ib31807258b253ded3c9bac4f936ed57aa0df7534

Reviewed-on: https://review.gerrithub.io/420931
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Jim Harris 2018-07-31 13:54:24 -07:00
parent 01035cd49f
commit 43c8d0eb1e
3 changed files with 36 additions and 3 deletions

View File

@ -485,4 +485,18 @@ spdk_vbdev_split_destruct(const char *base_bdev_name)
return 0;
}
struct spdk_bdev_part_base *
spdk_vbdev_split_get_part_base(struct spdk_bdev *bdev)
{
struct spdk_vbdev_split_config *cfg;
cfg = vbdev_split_config_find_by_base_name(spdk_bdev_get_name(bdev));
if (cfg == NULL) {
return NULL;
}
return cfg->split_base;
}
SPDK_LOG_REGISTER_COMPONENT("vbdev_split", SPDK_LOG_VBDEV_SPLIT)

View File

@ -56,4 +56,13 @@ int create_vbdev_split(const char *base_bdev_name, unsigned split_count, uint64_
*/
int spdk_vbdev_split_destruct(const char *base_bdev_name);
/**
* Get the spdk_bdev_part_base associated with the given split base_bdev.
*
* \param base_bdev Bdev to get the part_base from
* \return pointer to the associated spdk_bdev_part_base
* \return NULL if the base_bdev is not being split by the split module
*/
struct spdk_bdev_part_base *spdk_vbdev_split_get_part_base(struct spdk_bdev *base_bdev);
#endif // SPDK_VBDEV_SPLIT_H

View File

@ -57,7 +57,6 @@ spdk_rpc_construct_split_vbdev(struct spdk_jsonrpc_request *request,
struct rpc_construct_split req = {};
struct spdk_json_write_ctx *w;
struct spdk_bdev *base_bdev;
size_t i;
int rc;
if (spdk_json_decode_object(params, rpc_construct_split_decoders,
@ -85,8 +84,19 @@ spdk_rpc_construct_split_vbdev(struct spdk_jsonrpc_request *request,
base_bdev = spdk_bdev_get_by_name(req.base_bdev);
if (base_bdev != NULL) {
for (i = 0; i < base_bdev->vbdevs_cnt; i++) {
spdk_json_write_string(w, spdk_bdev_get_name(base_bdev->vbdevs[i]));
struct spdk_bdev_part_base *split_base;
struct bdev_part_tailq *split_base_tailq;
struct spdk_bdev_part *split_part;
struct spdk_bdev *split_bdev;
split_base = spdk_vbdev_split_get_part_base(base_bdev);
assert(split_base != NULL);
split_base_tailq = spdk_bdev_part_base_get_tailq(split_base);
TAILQ_FOREACH(split_part, split_base_tailq, tailq) {
split_bdev = spdk_bdev_part_get_bdev(split_part);
spdk_json_write_string(w, spdk_bdev_get_name(split_bdev));
}
}