diff --git a/lib/ftl/ftl_io.c b/lib/ftl/ftl_io.c index 8a3552fe5..dafcc829c 100644 --- a/lib/ftl/ftl_io.c +++ b/lib/ftl/ftl_io.c @@ -294,6 +294,7 @@ ftl_io_init_internal(const struct ftl_io_init_opts *opts) io->rwb_batch = opts->rwb_batch; io->band = opts->band; io->md = opts->md; + io->iov = &io->iov_buf[0]; if (parent) { if (parent->flags & FTL_IO_VECTOR_LBA) { @@ -406,11 +407,9 @@ ftl_io_user_init(struct spdk_io_channel *_ioch, uint64_t lba, size_t num_blocks, ftl_io_init(io, dev, _ftl_user_cb, cb_ctx, 0, type); io->lba.single = lba; io->user_fn = cb_fn; - - if (ftl_io_init_iovec(io, iov, iov_cnt, num_blocks)) { - ftl_io_free(io); - return NULL; - } + io->iov = iov; + io->iov_cnt = iov_cnt; + io->num_blocks = num_blocks; ftl_trace_lba_io_init(io->dev, io); return io; diff --git a/lib/ftl/ftl_io.h b/lib/ftl/ftl_io.h index cb5778188..3b99fa35f 100644 --- a/lib/ftl/ftl_io.h +++ b/lib/ftl/ftl_io.h @@ -167,7 +167,11 @@ struct ftl_io { /* Number of blocks */ size_t num_blocks; - struct iovec iov[FTL_IO_MAX_IOVEC]; + /* IO vector pointer */ + struct iovec *iov; + + /* IO vector buffer for internal requests */ + struct iovec iov_buf[FTL_IO_MAX_IOVEC]; /* Metadata */ void *md;