• 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: Martin K. Petersen's avatarMartin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    e9637415
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
block Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
firmware Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
samples Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
tools Loading commit data...
usr Loading commit data...
virt/kvm Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...
REPORTING-BUGS Loading commit data...