Commit c12fa401 authored by Hans Holmberg's avatar Hans Holmberg Committed by Jens Axboe

lightnvm: pblk: fix resubmission of overwritten write err lbas

Make sure we only look up valid lba addresses on the resubmission path.

If an lba is invalidated in the write buffer, that sector will be
submitted to disk (as it is already mapped to a ppa), and that write
might fail, resulting in a crash when trying to look up the lba in the
mapping table (as the lba is marked as invalid).
Signed-off-by: default avatarHans Holmberg <hans.holmberg@cnexlabs.com>
Reviewed-by: default avatarJavier González <javier@javigon.com>
Signed-off-by: default avatarMatias Bjørling <mb@lightnvm.io>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 96076f7d
...@@ -148,9 +148,11 @@ static void pblk_prepare_resubmit(struct pblk *pblk, unsigned int sentry, ...@@ -148,9 +148,11 @@ static void pblk_prepare_resubmit(struct pblk *pblk, unsigned int sentry,
w_ctx = &entry->w_ctx; w_ctx = &entry->w_ctx;
/* Check if the lba has been overwritten */ /* Check if the lba has been overwritten */
ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba); if (w_ctx->lba != ADDR_EMPTY) {
if (!pblk_ppa_comp(ppa_l2p, entry->cacheline)) ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba);
w_ctx->lba = ADDR_EMPTY; if (!pblk_ppa_comp(ppa_l2p, entry->cacheline))
w_ctx->lba = ADDR_EMPTY;
}
/* Mark up the entry as submittable again */ /* Mark up the entry as submittable again */
flags = READ_ONCE(w_ctx->flags); flags = READ_ONCE(w_ctx->flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment