• Coly Li's avatar
    bcache: fix fifo index swapping condition in journal_pin_cmp() · c0e0954e
    Coly Li authored
    Fifo structure journal.pin is implemented by a cycle buffer, if the back
    index reaches highest location of the cycle buffer, it will be swapped
    to 0. Once the swapping happens, it means a smaller fifo index might be
    associated to a newer journal entry. So the btree node with oldest
    journal entry won't be selected in bch_btree_leaf_dirty() to reference
    the dirty B+tree leaf node. This problem may cause bcache journal won't
    protect unflushed oldest B+tree dirty leaf node in power failure, and
    this B+tree leaf node is possible to beinconsistent after reboot from
    power failure.
    
    This patch fixes the fifo index comparing logic in journal_pin_cmp(),
    to avoid potential corrupted B+tree leaf node when the back index of
    journal pin is swapped.
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    c0e0954e
btree.c 60.8 KB