mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +09:00
lightnvm: pblk: fix resubmission of overwritten write err lbas
[ Upstream commit c12fa401ac ]
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: Hans Holmberg <hans.holmberg@cnexlabs.com>
Reviewed-by: Javier González <javier@javigon.com>
Signed-off-by: Matias Bjørling <mb@lightnvm.io>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3d786b91cd
commit
10014ff04a
@@ -158,9 +158,11 @@ static void pblk_prepare_resubmit(struct pblk *pblk, unsigned int sentry,
|
||||
w_ctx = &entry->w_ctx;
|
||||
|
||||
/* Check if the lba has been overwritten */
|
||||
ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba);
|
||||
if (!pblk_ppa_comp(ppa_l2p, entry->cacheline))
|
||||
w_ctx->lba = ADDR_EMPTY;
|
||||
if (w_ctx->lba != ADDR_EMPTY) {
|
||||
ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba);
|
||||
if (!pblk_ppa_comp(ppa_l2p, entry->cacheline))
|
||||
w_ctx->lba = ADDR_EMPTY;
|
||||
}
|
||||
|
||||
/* Mark up the entry as submittable again */
|
||||
flags = READ_ONCE(w_ctx->flags);
|
||||
|
||||
Reference in New Issue
Block a user