]> xenbits.xensource.com Git - arm/linux.git/commitdiff
lightnvm: pblk: fix resubmission of overwritten write err lbas
authorHans Holmberg <hans.holmberg@cnexlabs.com>
Tue, 11 Dec 2018 19:16:10 +0000 (20:16 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 11 Dec 2018 19:22:33 +0000 (12:22 -0700)
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>
drivers/lightnvm/pblk-write.c

index fa8726493b39f629422311428ee195f4d640e83b..3ddd16f471066efb624e6b0dbf857ad2d1158d90 100644 (file)
@@ -148,9 +148,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);