Commit 8d1993a5 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Tomasz Zawadzki
Browse files

module/raid: remove bdev pointer from base_bdev_info



There is a spdk_bdev_desc pointer in base_bdev_info, which is always set
together with the bdev pointer, so use that instead. It makes checking
whether a base bdev is present more consistent. Before, in some places
the bdev pointer was checked and in others the desc pointer.

Change-Id: I5ac305b7d4b07c609b759a59f7f0fa540532ea1e
Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18286


Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 973b0d62
Loading
Loading
Loading
Loading
+24 −25
Original line number Diff line number Diff line
@@ -179,7 +179,6 @@ raid_bdev_cleanup(struct raid_bdev *raid_bdev)
	assert(spdk_get_thread() == spdk_thread_get_app_thread());

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		assert(base_info->bdev == NULL);
		assert(base_info->desc == NULL);
		free(base_info->name);
	}
@@ -222,15 +221,13 @@ raid_bdev_free_base_bdev_resource(struct raid_base_bdev_info *base_info)
	free(base_info->name);
	base_info->name = NULL;

	if (base_info->bdev == NULL) {
	if (base_info->desc == NULL) {
		return;
	}

	assert(base_info->desc);
	spdk_bdev_module_release_bdev(base_info->bdev);
	spdk_bdev_module_release_bdev(spdk_bdev_desc_get_bdev(base_info->desc));
	spdk_bdev_close(base_info->desc);
	base_info->desc = NULL;
	base_info->bdev = NULL;

	assert(raid_bdev->num_base_bdevs_discovered);
	raid_bdev->num_base_bdevs_discovered--;
@@ -425,8 +422,8 @@ raid_bdev_submit_reset_request(struct raid_bdev_io *raid_io)
		if (ret == 0) {
			raid_io->base_bdev_io_submitted++;
		} else if (ret == -ENOMEM) {
			raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
						_raid_bdev_submit_reset_request);
			raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
						base_ch, _raid_bdev_submit_reset_request);
			return;
		} else {
			SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
@@ -534,11 +531,11 @@ _raid_bdev_io_type_supported(struct raid_bdev *raid_bdev, enum spdk_bdev_io_type
	}

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		if (base_info->bdev == NULL) {
		if (base_info->desc == NULL) {
			continue;
		}

		if (spdk_bdev_io_type_supported(base_info->bdev, io_type) == false) {
		if (spdk_bdev_io_type_supported(spdk_bdev_desc_get_bdev(base_info->desc), io_type) == false) {
			return false;
		}
	}
@@ -611,8 +608,8 @@ raid_bdev_write_info_json(struct raid_bdev *raid_bdev, struct spdk_json_write_ct
	spdk_json_write_name(w, "base_bdevs_list");
	spdk_json_write_array_begin(w);
	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		if (base_info->bdev) {
			spdk_json_write_string(w, base_info->bdev->name);
		if (base_info->desc) {
			spdk_json_write_string(w, spdk_bdev_desc_get_bdev(base_info->desc)->name);
		} else {
			spdk_json_write_null(w);
		}
@@ -673,8 +670,8 @@ raid_bdev_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *

	spdk_json_write_named_array_begin(w, "base_bdevs");
	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		if (base_info->bdev) {
			spdk_json_write_string(w, base_info->bdev->name);
		if (base_info->desc) {
			spdk_json_write_string(w, spdk_bdev_desc_get_bdev(base_info->desc)->name);
		}
	}
	spdk_json_write_array_end(w);
@@ -698,10 +695,10 @@ raid_bdev_get_memory_domains(void *ctx, struct spdk_memory_domain **domains, int

	/* First loop to get the number of memory domains */
	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		if (base_info->bdev == NULL) {
		if (base_info->desc == NULL) {
			continue;
		}
		rc = spdk_bdev_get_memory_domains(base_info->bdev, NULL, 0);
		rc = spdk_bdev_get_memory_domains(spdk_bdev_desc_get_bdev(base_info->desc), NULL, 0);
		if (rc < 0) {
			goto out;
		}
@@ -713,10 +710,10 @@ raid_bdev_get_memory_domains(void *ctx, struct spdk_memory_domain **domains, int
	}

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		if (base_info->bdev == NULL) {
		if (base_info->desc == NULL) {
			continue;
		}
		rc = spdk_bdev_get_memory_domains(base_info->bdev, domains, array_size);
		rc = spdk_bdev_get_memory_domains(spdk_bdev_desc_get_bdev(base_info->desc), domains, array_size);
		if (rc < 0) {
			goto out;
		}
@@ -1081,7 +1078,7 @@ raid_bdev_configure_md(struct raid_bdev *raid_bdev)
	uint8_t i;

	for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
		base_bdev = raid_bdev->base_bdev_info[i].bdev;
		base_bdev = spdk_bdev_desc_get_bdev(raid_bdev->base_bdev_info[i].desc);

		if (i == 0) {
			raid_bdev->bdev.md_len = spdk_bdev_get_md_size(base_bdev);
@@ -1122,17 +1119,19 @@ raid_bdev_configure(struct raid_bdev *raid_bdev)
	uint32_t blocklen = 0;
	struct spdk_bdev *raid_bdev_gen;
	struct raid_base_bdev_info *base_info;
	struct spdk_bdev *base_bdev;
	int rc = 0;

	assert(raid_bdev->state == RAID_BDEV_STATE_CONFIGURING);
	assert(raid_bdev->num_base_bdevs_discovered == raid_bdev->num_base_bdevs);

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		assert(base_info->bdev != NULL);
		assert(base_info->desc != NULL);
		base_bdev = spdk_bdev_desc_get_bdev(base_info->desc);
		/* Check blocklen for all base bdevs that it should be same */
		if (blocklen == 0) {
			blocklen = base_info->bdev->blocklen;
		} else if (blocklen != base_info->bdev->blocklen) {
			blocklen = base_bdev->blocklen;
		} else if (blocklen != base_bdev->blocklen) {
			/*
			 * Assumption is that all the base bdevs for any raid bdev should
			 * have same blocklen
@@ -1238,7 +1237,8 @@ raid_bdev_find_base_info_by_bdev(struct spdk_bdev *base_bdev)

	TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
		RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
			if (base_info->bdev == base_bdev) {
			if (base_info->desc != NULL &&
			    spdk_bdev_desc_get_bdev(base_info->desc) == base_bdev) {
				return base_info;
			}
		}
@@ -1518,7 +1518,7 @@ raid_bdev_configure_base_bdev(struct raid_base_bdev_info *base_info)

	assert(spdk_get_thread() == spdk_thread_get_app_thread());
	assert(base_info->name != NULL);
	assert(base_info->bdev == NULL);
	assert(base_info->desc == NULL);

	rc = spdk_bdev_open_ext(base_info->name, true, raid_bdev_event_base_bdev, NULL, &desc);
	if (rc != 0) {
@@ -1541,7 +1541,6 @@ raid_bdev_configure_base_bdev(struct raid_base_bdev_info *base_info)

	assert(raid_bdev->state != RAID_BDEV_STATE_ONLINE);

	base_info->bdev = bdev;
	base_info->desc = desc;
	base_info->blockcnt = bdev->blockcnt;
	raid_bdev->num_base_bdevs_discovered++;
@@ -1623,7 +1622,7 @@ raid_bdev_examine(struct spdk_bdev *bdev)

	TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
		RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
			if (base_info->bdev == NULL && base_info->name != NULL &&
			if (base_info->desc == NULL && base_info->name != NULL &&
			    strcmp(bdev->name, base_info->name) == 0) {
				raid_bdev_configure_base_bdev(base_info);
				break;
+0 −3
Original line number Diff line number Diff line
@@ -55,9 +55,6 @@ struct raid_base_bdev_info {
	/* name of the bdev */
	char			*name;

	/* pointer to base spdk bdev */
	struct spdk_bdev	*bdev;

	/* pointer to base bdev descriptor opened by raid bdev */
	struct spdk_bdev_desc	*desc;

+6 −5
Original line number Diff line number Diff line
@@ -125,8 +125,8 @@ concat_submit_rw_request(struct raid_bdev_io *raid_io)
	}

	if (ret == -ENOMEM) {
		raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
					_concat_submit_rw_request);
		raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
					base_ch, _concat_submit_rw_request);
	} else if (ret != 0) {
		SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
		assert(false);
@@ -259,8 +259,8 @@ concat_submit_null_payload_request(struct raid_bdev_io *raid_io)
		if (ret == 0) {
			raid_io->base_bdev_io_submitted++;
		} else if (ret == -ENOMEM) {
			raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
						_concat_submit_null_payload_request);
			raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
						base_ch, _concat_submit_null_payload_request);
			return;
		} else {
			SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
@@ -287,7 +287,8 @@ concat_start(struct raid_bdev *raid_bdev)

	int idx = 0;
	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		uint64_t strip_cnt = base_info->bdev->blockcnt >> raid_bdev->strip_size_shift;
		uint64_t strip_cnt = spdk_bdev_desc_get_bdev(base_info->desc)->blockcnt >>
				     raid_bdev->strip_size_shift;
		uint64_t pd_block_cnt = strip_cnt << raid_bdev->strip_size_shift;

		block_range[idx].start = total_blockcnt;
+5 −5
Original line number Diff line number Diff line
@@ -126,8 +126,8 @@ raid0_submit_rw_request(struct raid_bdev_io *raid_io)
	}

	if (ret == -ENOMEM) {
		raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
					_raid0_submit_rw_request);
		raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
					base_ch, _raid0_submit_rw_request);
	} else if (ret != 0) {
		SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
		assert(false);
@@ -323,8 +323,8 @@ raid0_submit_null_payload_request(struct raid_bdev_io *raid_io)
		if (ret == 0) {
			raid_io->base_bdev_io_submitted++;
		} else if (ret == -ENOMEM) {
			raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
						_raid0_submit_null_payload_request);
			raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
						base_ch, _raid0_submit_null_payload_request);
			return;
		} else {
			SPDK_ERRLOG("bdev io submit error not due to ENOMEM, it should not happen\n");
@@ -343,7 +343,7 @@ raid0_calculate_blockcnt(struct raid_bdev *raid_bdev)

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		/* Calculate minimum block count from all base bdevs */
		min_blockcnt = spdk_min(min_blockcnt, base_info->bdev->blockcnt);
		min_blockcnt = spdk_min(min_blockcnt, spdk_bdev_desc_get_bdev(base_info->desc)->blockcnt);
	}

	/*
+5 −5
Original line number Diff line number Diff line
@@ -84,8 +84,8 @@ raid1_submit_read_request(struct raid_bdev_io *raid_io)
	if (spdk_likely(ret == 0)) {
		raid_io->base_bdev_io_submitted++;
	} else if (spdk_unlikely(ret == -ENOMEM)) {
		raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
					_raid1_submit_rw_request);
		raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
					base_ch, _raid1_submit_rw_request);
		return 0;
	}

@@ -130,8 +130,8 @@ raid1_submit_write_request(struct raid_bdev_io *raid_io)
						  raid_io, &io_opts);
		if (spdk_unlikely(ret != 0)) {
			if (spdk_unlikely(ret == -ENOMEM)) {
				raid_bdev_queue_io_wait(raid_io, base_info->bdev, base_ch,
							_raid1_submit_rw_request);
				raid_bdev_queue_io_wait(raid_io, spdk_bdev_desc_get_bdev(base_info->desc),
							base_ch, _raid1_submit_rw_request);
				return 0;
			}

@@ -190,7 +190,7 @@ raid1_start(struct raid_bdev *raid_bdev)
	r1info->raid_bdev = raid_bdev;

	RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
		min_blockcnt = spdk_min(min_blockcnt, base_info->bdev->blockcnt);
		min_blockcnt = spdk_min(min_blockcnt, spdk_bdev_desc_get_bdev(base_info->desc)->blockcnt);
	}

	raid_bdev->bdev.blockcnt = min_blockcnt;
Loading