From cfdc60c05a0bfe1db7a51b4725f3ed678d838d79 Mon Sep 17 00:00:00 2001 From: Wojciech Malikowski Date: Thu, 7 Mar 2019 10:34:38 -0500 Subject: [PATCH] lib/ftl: Avoid splitting read's in case contiguous PPAs Change-Id: I026902096686da37c0ca7086bb5d91b35d90ffa6 Signed-off-by: Wojciech Malikowski Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447340 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Ben Walker Reviewed-by: Konrad Sztyber Reviewed-by: Young Tack Jin Reviewed-by: Claire Jihyun In --- lib/ftl/ftl_core.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/ftl/ftl_core.c b/lib/ftl/ftl_core.c index a938d8163..e0618b7f9 100644 --- a/lib/ftl/ftl_core.c +++ b/lib/ftl/ftl_core.c @@ -784,9 +784,10 @@ ftl_lba_read_next_ppa(struct ftl_io *io, struct ftl_ppa *ppa, size_t lbk, void *ctx) { struct spdk_ftl_dev *dev = io->dev; - *ppa = ftl_l2p_get(dev, io->lba + lbk); + struct ftl_ppa next_ppa; + size_t i; - (void) ctx; + *ppa = ftl_l2p_get(dev, io->lba + lbk); SPDK_DEBUGLOG(SPDK_LOG_FTL_CORE, "Read ppa:%lx, lba:%lu\n", ppa->ppa, io->lba); @@ -806,8 +807,19 @@ ftl_lba_read_next_ppa(struct ftl_io *io, struct ftl_ppa *ppa, return -EAGAIN; } - /* We want to read one lbk at a time */ - return 1; + for (i = 1; i < ftl_io_iovec_len_left(io); ++i) { + next_ppa = ftl_l2p_get(dev, io->lba + lbk + i); + + if (ftl_ppa_invalid(next_ppa) || ftl_ppa_cached(next_ppa)) { + break; + } + + if (ftl_ppa_addr_pack(dev, *ppa) + i != ftl_ppa_addr_pack(dev, next_ppa)) { + break; + } + } + + return i; } static void