• Javier González's avatar
    lightnvm: pblk: advance bio according to lba index · 75cb8e93
    Javier González authored
    When a lba either hits the cache or corresponds to an empty entry in the
    L2P table, we need to advance the bio according to the position in which
    the lba is located. Otherwise, we will copy data in the wrong page, thus
    causing data corruption for the application.
    
    In case of a cache hit, we assumed that bio->bi_iter.bi_idx would
    contain the correct index, but this is no necessarily true. Instead, use
    the local bio advance counter and iterator. This guarantees that lbas
    hitting the cache are copied into the right bv_page.
    
    In case of an empty L2P entry, we omitted to advance the bio. In the
    cases when the same I/O also contains a cache hit, data corresponding
    to this lba will be copied to the wrong bv_page. Fix this by advancing
    the bio as we do in the case of a cache hit.
    
    Fixes: a4bd217b lightnvm: physical block device (pblk) target
    Signed-off-by: default avatarJavier González <javier@javigon.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    75cb8e93
pblk-rb.c 21.4 KB