From 8e6a5601e49ac7d4ccdc7ee5eaf5fa6f64dd8f5c Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Wed, 15 May 2019 13:05:06 +0200 Subject: [PATCH] lib/ftl: allocate ftl_io inside ftl_io_user_init On the user IO path, the flow always follows the same procedure: allocate ftl_io and initialize it using ftl_io_user_init. There's no point in separating these two actions. Change-Id: I578347ccc7c85e5945368dd6bf76c58985af3939 Signed-off-by: Konrad Sztyber Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455523 Reviewed-by: Wojciech Malikowski Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Darek Stojaczyk Tested-by: SPDK CI Jenkins --- lib/ftl/ftl_core.c | 6 ++---- lib/ftl/ftl_io.c | 18 ++++++++++++------ lib/ftl/ftl_io.h | 7 +++---- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/ftl/ftl_core.c b/lib/ftl/ftl_core.c index ec30240ee..9b504528d 100644 --- a/lib/ftl/ftl_core.c +++ b/lib/ftl/ftl_core.c @@ -1629,12 +1629,11 @@ spdk_ftl_write(struct spdk_ftl_dev *dev, struct spdk_io_channel *ch, uint64_t lb return -EBUSY; } - io = ftl_io_alloc(ch); + io = ftl_io_user_init(ch, lba, lba_cnt, iov, iov_cnt, cb_fn, cb_arg, FTL_IO_WRITE); if (!io) { return -ENOMEM; } - ftl_io_user_init(dev, io, lba, lba_cnt, iov, iov_cnt, cb_fn, cb_arg, FTL_IO_WRITE); ftl_io_write(io); return 0; @@ -1682,12 +1681,11 @@ spdk_ftl_read(struct spdk_ftl_dev *dev, struct spdk_io_channel *ch, uint64_t lba return -EBUSY; } - io = ftl_io_alloc(ch); + io = ftl_io_user_init(ch, lba, lba_cnt, iov, iov_cnt, cb_fn, cb_arg, FTL_IO_READ); if (!io) { return -ENOMEM; } - ftl_io_user_init(dev, io, lba, lba_cnt, iov, iov_cnt, cb_fn, cb_arg, FTL_IO_READ); ftl_io_read(io); return 0; } diff --git a/lib/ftl/ftl_io.c b/lib/ftl/ftl_io.c index 570f6ea9d..cff86b830 100644 --- a/lib/ftl/ftl_io.c +++ b/lib/ftl/ftl_io.c @@ -273,13 +273,17 @@ ftl_io_erase_init(struct ftl_band *band, size_t lbk_cnt, spdk_ftl_fn cb) return io; } -void -ftl_io_user_init(struct spdk_ftl_dev *dev, struct ftl_io *io, uint64_t lba, size_t lbk_cnt, - struct iovec *iov, size_t iov_cnt, - spdk_ftl_fn cb_fn, void *cb_arg, int type) +struct ftl_io * +ftl_io_user_init(struct spdk_io_channel *_ioch, uint64_t lba, size_t lbk_cnt, struct iovec *iov, + size_t iov_cnt, spdk_ftl_fn cb_fn, void *cb_arg, int type) { - if (io->flags & FTL_IO_INITIALIZED) { - return; + struct ftl_io_channel *ioch = spdk_io_channel_get_ctx(_ioch); + struct spdk_ftl_dev *dev = ioch->dev; + struct ftl_io *io; + + io = ftl_io_alloc(_ioch); + if (spdk_unlikely(!io)) { + return NULL; } ftl_io_init(io, dev, cb_fn, cb_arg, 0, type); @@ -295,6 +299,8 @@ ftl_io_user_init(struct spdk_ftl_dev *dev, struct ftl_io *io, uint64_t lba, size } ftl_trace_lba_io_init(io->dev, io); + + return io; } static void diff --git a/lib/ftl/ftl_io.h b/lib/ftl/ftl_io.h index 4e4490957..c9c2451a6 100644 --- a/lib/ftl/ftl_io.h +++ b/lib/ftl/ftl_io.h @@ -275,13 +275,12 @@ void ftl_io_advance(struct ftl_io *io, size_t lbk_cnt); size_t ftl_iovec_num_lbks(struct iovec *iov, size_t iov_cnt); void *ftl_io_iovec_addr(struct ftl_io *io); size_t ftl_io_iovec_len_left(struct ftl_io *io); -struct ftl_io *ftl_io_init_internal(const struct ftl_io_init_opts *opts); struct ftl_io *ftl_io_rwb_init(struct spdk_ftl_dev *dev, struct ftl_band *band, struct ftl_rwb_batch *entry, spdk_ftl_fn cb); struct ftl_io *ftl_io_erase_init(struct ftl_band *band, size_t lbk_cnt, spdk_ftl_fn cb); -void ftl_io_user_init(struct spdk_ftl_dev *dev, struct ftl_io *io, uint64_t lba, size_t lbk_cnt, - struct iovec *iov, size_t iov_cnt, - spdk_ftl_fn fn, void *cb_arg, int type); +struct ftl_io *ftl_io_user_init(struct spdk_io_channel *ioch, uint64_t lba, size_t lbk_cnt, + struct iovec *iov, size_t iov_cnt, spdk_ftl_fn cb_fn, + void *cb_arg, int type); void *ftl_io_get_md(const struct ftl_io *io); void ftl_io_complete(struct ftl_io *io); void ftl_io_shrink_iovec(struct ftl_io *io, size_t lbk_cnt);