Commit e1fa7e3c authored by Mateusz Kozlowski's avatar Mateusz Kozlowski Committed by Ben Walker
Browse files

lib/ftl: Add IO error handling in band write



Previous implementation would call the ftl_p2l_ckpt_issue regardless if
IO failed or not, at which point some of the context for retrying may be
lost. Adding the check early, so that the p2l checkpoint can continue
working on the assumption that it's working after a successful band
write.

Change-Id: Ia7683f067f625f28ce8a02b1bf1896629f14344b
Signed-off-by: default avatarMariusz Barczak <Mariusz.Barczak@solidigmtechnology.com>
Signed-off-by: default avatarMateusz Kozlowski <mateusz.kozlowski@solidigm.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/19255


Reviewed-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent f538c202
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -19,12 +19,21 @@ write_rq_end(struct spdk_bdev_io *bdev_io, bool success, void *arg)

	ftl_stats_bdev_io_completed(dev, rq->owner.compaction ? FTL_STATS_TYPE_CMP : FTL_STATS_TYPE_GC,
				    bdev_io);
	spdk_bdev_free_io(bdev_io);

	rq->success = success;

	if (spdk_likely(rq->success)) {
		ftl_p2l_ckpt_issue(rq);
	} else {
#ifdef SPDK_FTL_RETRY_ON_ERROR
		assert(rq->io.band->queue_depth > 0);
		rq->io.band->queue_depth--;
		rq->owner.cb(rq);

	spdk_bdev_free_io(bdev_io);
#else
		ftl_abort();
#endif
	}
}

static void