• Mike Snitzer's avatar
    dm thin: fix pool_io_hints to avoid looking at max_hw_sectors · d200c30e
    Mike Snitzer authored
    Simplify the pool_io_hints code that works to establish a max_sectors
    value that is a power-of-2 factor of the thin-pool's blocksize.  The
    biggest associated improvement is that the DM thin-pool is no longer
    concerning itself with the data device's max_hw_sectors when adjusting
    max_sectors.
    
    This fixes the relative fragility of the original "dm thin: adjust
    max_sectors_kb based on thinp blocksize" commit that only became
    apparent when testing was performed using a DM thin-pool ontop of a
    virtio_blk device.  One proposed upstream patch detailed the problems
    inherent in virtio_blk: https://lkml.org/lkml/2014/11/20/611
    
    So even though virtio_blk incorrectly set its max_hw_sectors it actually
    helped make it clear that we need DM thinp to be tolerant of any future
    Linux driver that incorrectly sets max_hw_sectors.
    
    We only need to be concerned with modifying the thin-pool device's
    max_sectors limit if it is smaller than the thin-pool's blocksize.  In
    this case the value of max_sectors does become a limiting factor when
    upper layers (e.g. filesystems) construct their bios.  But if the
    hardware can support IOs larger than the thin-pool's blocksize the user
    is encouraged to adjust the thin-pool's data device's max_sectors
    accordingly -- doing so will enable the thin-pool to inherit the
    established user-defined max_sectors.
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    d200c30e
dm-thin.c 101 KB