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: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458099 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Mateusz Kozlowski <mateusz.kozlowski@intel.com> Reviewed-by: Wojciech Malikowski <wojciech.malikowski@intel.com>
This commit is contained in:
parent
4fd4e3db5f
commit
9a42d7fc30
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user