lib/ftl: Avoid splitting read's in case contiguous PPAs

Change-Id: I026902096686da37c0ca7086bb5d91b35d90ffa6
Signed-off-by: Wojciech Malikowski <wojciech.malikowski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447340
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Young Tack Jin <youngtack.jin@circuitblvd.com>
Reviewed-by: Claire Jihyun In <claire.in@circuitblvd.com>
This commit is contained in:
Wojciech Malikowski 2019-03-07 10:34:38 -05:00 committed by Jim Harris
parent 07a05093a8
commit cfdc60c05a

View File

@ -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