Commit 43c8d0eb authored by Jim Harris's avatar Jim Harris
Browse files

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: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: Ib31807258b253ded3c9bac4f936ed57aa0df7534

Reviewed-on: https://review.gerrithub.io/420931


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 01035cd4
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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)
+9 −0
Original line number Diff line number Diff line
@@ -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
+13 −3
Original line number Diff line number Diff line
@@ -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));
		}
	}