Commit 35a054db authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Jim Harris
Browse files

raid: utility function to get a base bdev in io context



This will be used to get a pointer to struct raid_base_bdev_info from
I/O completion context when we only have the spdk_bdev.

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


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent cb768e81
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -137,6 +137,25 @@ raid_bdev_channel_get_module_ctx(struct raid_bdev_io_channel *raid_ch)
	return spdk_io_channel_get_ctx(raid_ch->module_channel);
}

struct raid_base_bdev_info *
raid_bdev_channel_get_base_info(struct raid_bdev_io_channel *raid_ch, struct spdk_bdev *base_bdev)
{
	struct spdk_io_channel *ch = spdk_io_channel_from_ctx(raid_ch);
	struct raid_bdev *raid_bdev = spdk_io_channel_get_io_device(ch);
	uint8_t i;

	for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
		struct raid_base_bdev_info *base_info = &raid_bdev->base_bdev_info[i];

		if (base_info->is_configured &&
		    spdk_bdev_desc_get_bdev(base_info->desc) == base_bdev) {
			return base_info;
		}
	}

	return NULL;
}

/* Function declarations */
static void	raid_bdev_examine(struct spdk_bdev *bdev);
static int	raid_bdev_init(void);
+2 −0
Original line number Diff line number Diff line
@@ -362,6 +362,8 @@ void raid_bdev_module_stop_done(struct raid_bdev *raid_bdev);
struct spdk_io_channel *raid_bdev_channel_get_base_channel(struct raid_bdev_io_channel *raid_ch,
		uint8_t idx);
void *raid_bdev_channel_get_module_ctx(struct raid_bdev_io_channel *raid_ch);
struct raid_base_bdev_info *raid_bdev_channel_get_base_info(struct raid_bdev_io_channel *raid_ch,
		struct spdk_bdev *base_bdev);
void raid_bdev_process_request_complete(struct raid_bdev_process_request *process_req, int status);
void raid_bdev_io_init(struct raid_bdev_io *raid_io, struct raid_bdev_io_channel *raid_ch,
		       enum spdk_bdev_io_type type, uint64_t offset_blocks,
+7 −0
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ raid_test_create_raid_bdev(struct raid_params *params, struct raid_bdev_module *

		bdev = calloc(1, sizeof(*bdev));
		SPDK_CU_ASSERT_FATAL(bdev != NULL);
		bdev->ctxt = base_info;
		bdev->blockcnt = params->base_bdev_blockcnt;
		bdev->blocklen = raid_bdev->bdev.blocklen;
		bdev->md_len = raid_bdev->bdev.md_len;
@@ -283,3 +284,9 @@ raid_bdev_io_complete_part(struct raid_bdev_io *raid_io, uint64_t completed,
		return false;
	}
}

struct raid_base_bdev_info *
raid_bdev_channel_get_base_info(struct raid_bdev_io_channel *raid_ch, struct spdk_bdev *base_bdev)
{
	return base_bdev->ctxt;
}