lkml.org 
[lkml]   [2019]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 139/258] lightnvm: pblk: fix resubmission of overwritten write err lbas
    Date
    From: Hans Holmberg <hans.holmberg@cnexlabs.com>

    [ Upstream commit c12fa401ac8c94a74aff68bb5736b3f1dc695fa8 ]

    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>
    ---
    drivers/lightnvm/pblk-write.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c
    index 879227d584e7..c3e038d4b22e 100644
    --- a/drivers/lightnvm/pblk-write.c
    +++ b/drivers/lightnvm/pblk-write.c
    @@ -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);
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-01-28 18:17    [W:4.016 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site