Commit 9a42d7fc authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Ben Walker
Browse files

lib/ftl: initialize LBA when allocating internal IOs



Initialize children IOs with the appropriate LBA of its parent when
allocating internal IOs.

Change-Id: I191ad741b9d88d7f18cae05982e0a06a8f371f78
Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458099


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarMateusz Kozlowski <mateusz.kozlowski@intel.com>
Reviewed-by: default avatarWojciech Malikowski <wojciech.malikowski@intel.com>
parent 4fd4e3db
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1039,7 +1039,7 @@ ftl_alloc_io_nv_cache(struct ftl_io *parent, size_t num_lbks)
		.parent		= parent,
		.data		= ftl_io_iovec_addr(parent),
		.lbk_cnt	= num_lbks,
		.flags		= FTL_IO_CACHE,
		.flags		= parent->flags | FTL_IO_CACHE,
	};

	return ftl_io_init_internal(&opts);
+11 −2
Original line number Diff line number Diff line
@@ -272,6 +272,7 @@ struct ftl_io *
ftl_io_init_internal(const struct ftl_io_init_opts *opts)
{
	struct ftl_io *io = opts->io;
	struct ftl_io *parent = opts->parent;
	struct spdk_ftl_dev *dev = opts->dev;
	struct iovec iov = {
		.iov_base = opts->data,
@@ -279,8 +280,8 @@ ftl_io_init_internal(const struct ftl_io_init_opts *opts)
	};

	if (!io) {
		if (opts->parent) {
			io = ftl_io_alloc_child(opts->parent);
		if (parent) {
			io = ftl_io_alloc_child(parent);
		} else {
			io = ftl_io_alloc(dev->ioch);
		}
@@ -297,6 +298,14 @@ ftl_io_init_internal(const struct ftl_io_init_opts *opts)
	io->band = opts->band;
	io->md = opts->md;

	if (parent) {
		if (parent->flags & FTL_IO_VECTOR_LBA) {
			io->lba.vector = parent->lba.vector + parent->pos;
		} else {
			io->lba.single = parent->lba.single + parent->pos;
		}
	}

	if (ftl_io_init_iovec(io, &iov, 1, opts->lbk_cnt)) {
		if (!opts->io) {
			ftl_io_free(io);