• Mikulas Patocka's avatar
    dm mirror log: clear log bits up to BITS_PER_LONG boundary · 90736eb3
    Mikulas Patocka authored
    Commit 85e123c2 ("dm mirror log: round up region bitmap size to
    BITS_PER_LONG") introduced a regression on 64-bit architectures in the
    lvm testsuite tests: lvcreate-mirror, mirror-names and vgsplit-operation.
    
    If the device is shrunk, we need to clear log bits beyond the end of the
    device. The code clears bits up to a 32-bit boundary and then calculates
    lc->sync_count by summing set bits up to a 64-bit boundary (the commit
    changed that; previously, this boundary was 32-bit too). So, it was using
    some non-zeroed bits in the calculation and this caused misbehavior.
    
    Fix this regression by clearing bits up to BITS_PER_LONG boundary.
    
    Fixes: 85e123c2 ("dm mirror log: round up region bitmap size to BITS_PER_LONG")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarBenjamin Marzinski <bmarzins@redhat.com>
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    90736eb3
dm-log.c 20.1 KB