Commit 93939df4 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Jim Harris
Browse files

bdev/nvme: fix multipath json dump



Previously multipath configuration was dumped as information (on
bdev_get_bdevs via spdk_bdev_dump_info_json) whereas it should be
also dumped as configuration (on save_config via bdev_nvme_config_json).
This allows to restore the state from dumped json properly.

Change-Id: Ic965369e6e336b206d3076618b8dc43b1f9d6453
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25760


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
parent e1d04437
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -9061,6 +9061,32 @@ bdev_nvme_hotplug_config_json(struct spdk_json_write_ctx *w)
	spdk_json_write_object_end(w);
}

static void
bdev_nvme_multipath_config_json(struct nvme_bdev *nbdev, struct spdk_json_write_ctx *w)
{
	/* Skip dump if it is matching the default conf. */
	if (nbdev->mp_policy == BDEV_NVME_MP_POLICY_ACTIVE_PASSIVE &&
	    nbdev->mp_selector == BDEV_NVME_MP_SELECTOR_ROUND_ROBIN && nbdev->rr_min_io == UINT32_MAX) {
		return;
	}

	spdk_json_write_object_begin(w);
	spdk_json_write_named_string(w, "method", "bdev_nvme_set_multipath_policy");

	spdk_json_write_named_object_begin(w, "params");
	spdk_json_write_named_string(w, "name", nbdev->disk.name);
	spdk_json_write_named_string(w, "policy", nvme_bdev_get_mp_policy_str(nbdev));
	if (nbdev->mp_policy == BDEV_NVME_MP_POLICY_ACTIVE_ACTIVE) {
		spdk_json_write_named_string(w, "selector", nvme_bdev_get_mp_selector_str(nbdev));
		if (nbdev->mp_selector == BDEV_NVME_MP_SELECTOR_ROUND_ROBIN) {
			spdk_json_write_named_uint32(w, "rr_min_io", nbdev->rr_min_io);
		}
	}

	spdk_json_write_object_end(w);
	spdk_json_write_object_end(w);
}

static int
bdev_nvme_config_json(struct spdk_json_write_ctx *w)
{
@@ -9074,6 +9100,8 @@ bdev_nvme_config_json(struct spdk_json_write_ctx *w)
	pthread_mutex_lock(&g_bdev_nvme_mutex);

	TAILQ_FOREACH(nbdev_ctrlr, &g_nvme_bdev_ctrlrs, tailq) {
		struct nvme_bdev *nbdev;

		TAILQ_FOREACH(nvme_ctrlr, &nbdev_ctrlr->ctrlrs, tailq) {
			path_id = nvme_ctrlr->active_path_id;
			assert(path_id == TAILQ_FIRST(&nvme_ctrlr->trids));
@@ -9089,6 +9117,10 @@ bdev_nvme_config_json(struct spdk_json_write_ctx *w)
			nvme_ctrlr_cuse_config_json(w, nvme_ctrlr);
#endif
		}

		TAILQ_FOREACH(nbdev, &nbdev_ctrlr->bdevs, tailq) {
			bdev_nvme_multipath_config_json(nbdev, w);
		}
	}

	TAILQ_FOREACH(ctx, &g_discovery_ctxs, tailq) {