• Mike Snitzer's avatar
    block: fix blk_stack_limits() regression due to lcm() change · e9637415
    Mike Snitzer authored
    Linux 3.19 commit 69c953c8 ("lib/lcm.c: lcm(n,0)=lcm(0,n) is 0, not n")
    caused blk_stack_limits() to not properly stack queue_limits for stacked
    devices (e.g. DM).
    
    Fix this regression by establishing lcm_not_zero() and switching
    blk_stack_limits() over to using it.
    
    DM uses blk_set_stacking_limits() to establish the initial top-level
    queue_limits that are then built up based on underlying devices' limits
    using blk_stack_limits().  In the case of optimal_io_size (io_opt)
    blk_set_stacking_limits() establishes a default value of 0.  With commit
    69c953c8, lcm(0, n) is no longer n, which compromises proper stacking of
    the underlying devices' io_opt.
    
    Test:
    $ modprobe scsi_debug dev_size_mb=10 num_tgts=1 opt_blks=1536
    $ cat /sys/block/sde/queue/optimal_io_size
    786432
    $ dmsetup create node --table "0 100 linear /dev/sde 0"
    
    Before this fix:
    $ cat /sys/block/dm-5/queue/optimal_io_size
    0
    
    After this fix:
    $ cat /sys/block/dm-5/queue/optimal_io_size
    786432
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@vger.kernel.org # 3.19+
    Acked-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    e9637415
blk-settings.c 27.2 KB