• Eric Sandeen's avatar
    fs: fix iomap_bmap position calculation · 79b3dbe4
    Eric Sandeen authored
    The position calculation in iomap_bmap() shifts bno the wrong way,
    so we don't progress properly and end up re-mapping block zero
    over and over, yielding an unchanging physical block range as the
    logical block advances:
    
    # filefrag -Be file
     ext:   logical_offset:     physical_offset: length:   expected: flags:
       0:      0..       0:      21..        21:      1:             merged
       1:      1..       1:      21..        21:      1:         22: merged
    Discontinuity: Block 1 is at 21 (was 22)
       2:      2..       2:      21..        21:      1:         22: merged
    Discontinuity: Block 2 is at 21 (was 22)
       3:      3..       3:      21..        21:      1:         22: merged
    
    This breaks the FIBMAP interface for anyone using it (XFS), which
    in turn breaks LILO, zipl, etc.
    Bug-actually-spotted-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Fixes: 89eb1906 ("iomap: add an iomap-based bmap implementation")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    79b3dbe4
iomap.c 35.6 KB