• Heinz Mauelshagen's avatar
    dm cache: fix truncation bug when copying a block to/from >2TB fast device · 8b9d9666
    Heinz Mauelshagen authored
    During demotion or promotion to a cache's >2TB fast device we must not
    truncate the cache block's associated sector to 32bits.  The 32bit
    temporary result of from_cblock() caused a 32bit multiplication when
    calculating the sector of the fast device in issue_copy_real().
    
    Use an intermediate 64bit type to store the 32bit from_cblock() to allow
    for proper 64bit multiplication.
    
    Here is an example of how this bug manifests on an ext4 filesystem:
    
     EXT4-fs error (device dm-0): ext4_mb_generate_buddy:756: group 17136, 32768 clusters in bitmap, 30688 in gd; block bitmap corrupt.
     JBD2: Spotted dirty metadata buffer (dev = dm-0, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
    Signed-off-by: default avatarHeinz Mauelshagen <heinzm@redhat.com>
    Acked-by: default avatarJoe Thornber <ejt@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@vger.kernel.org
    8b9d9666
dm-cache-target.c 77 KB