Skip to content
  • Mike Snitzer's avatar
    dm mpath: only retry ioctl when no paths if queue_if_no_path set · 7ba10aa6
    Mike Snitzer authored
    When there are no paths and multipath receives an ioctl, it waits until
    a path becomes available.  This behaviour is incorrect if the
    "queue_if_no_path" setting was not specified, as then the ioctl should
    be rejected immediately, which this patch now does.
    
    commit 35991652
    
     ("dm mpath: allow ioctls to trigger pg init") should
    have checked if queue_if_no_path was configured before queueing IO.
    
    Checking for the queue_if_no_path feature, like is done in map_io(),
    allows the following table load to work without blocking in the
    multipath_ioctl retry loop:
    
      echo "0 1024 multipath 0 0 0 0" | dmsetup create mpath_nodevs
    
    Without this fix the multipath_ioctl will block with the following stack
    trace:
    
      blkid           D 0000000000000002     0 23936      1 0x00000000
       ffff8802b89e5cd8 0000000000000082 ffff8802b89e5fd8 0000000000012440
       ffff8802b89e4010 0000000000012440 0000000000012440 0000000000012440
       ffff8802b89e5fd8 0000000000012440 ffff88030c2aab30 ffff880325794040
      Call Trace:
       [<ffffffff814ce099>] schedule+0x29/0x70
       [<ffffffff814cc312>] schedule_timeout+0x182/0x2e0
       [<ffffffff8104dee0>] ? lock_timer_base+0x70/0x70
       [<ffffffff814cc48e>] schedule_timeout_uninterruptible+0x1e/0x20
       [<ffffffff8104f840>] msleep+0x20/0x30
       [<ffffffffa0000839>] multipath_ioctl+0x109/0x170 [dm_multipath]
       [<ffffffffa06bfb9c>] dm_blk_ioctl+0xbc/0xd0 [dm_mod]
       [<ffffffff8122a408>] __blkdev_driver_ioctl+0x28/0x30
       [<ffffffff8122a79e>] blkdev_ioctl+0xce/0x730
       [<ffffffff811970ac>] block_ioctl+0x3c/0x40
       [<ffffffff8117321c>] do_vfs_ioctl+0x8c/0x340
       [<ffffffff81166293>] ? sys_newfstat+0x33/0x40
       [<ffffffff81173571>] sys_ioctl+0xa1/0xb0
       [<ffffffff814d70a9>] system_call_fastpath+0x16/0x1b
    
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@vger.kernel.org # 3.5+
    Acked-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    7ba10aa6