dm: fix reload failure of 0 path multipath mapping on blk-mq devices
authorJunichi Nomura <j-nomura@ce.jp.nec.com>
Fri, 29 May 2015 08:51:03 +0000 (08:51 +0000)
committerMike Snitzer <snitzer@redhat.com>
Fri, 29 May 2015 17:41:16 +0000 (13:41 -0400)
commit15b94a690470038aa08247eedbebbe7e2218d5ee
treee3a715140ed69f9566e5fff834ef2daad742ade7
parente5d8de32cc02a259e1a237ab57cba00f2930fa6a
dm: fix reload failure of 0 path multipath mapping on blk-mq devices

dm-multipath accepts 0 path mapping.

  # echo '0 2097152 multipath 0 0 0 0' | dmsetup create newdev

Such a mapping can be used to release underlying devices while still
holding requests in its queue until working paths come back.

However, once the multipath device is created over blk-mq devices,
it rejects reloading of 0 path mapping:

  # echo '0 2097152 multipath 0 0 1 1 queue-length 0 1 1 /dev/sda 1' \
      | dmsetup create mpath1
  # echo '0 2097152 multipath 0 0 0 0' | dmsetup load mpath1
  device-mapper: reload ioctl on mpath1 failed: Invalid argument
  Command failed

With following kernel message:
  device-mapper: ioctl: can't change device type after initial table load.

DM tries to inherit the current table type using dm_table_set_type()
but it doesn't work as expected because of unnecessary check about
whether the target type is hybrid or not.

Hybrid type is for targets that work as either request-based or bio-based
and not required for blk-mq or non blk-mq checking.

Fixes: 65803c205983 ("dm table: train hybrid target type detection to select blk-mq if appropriate")
Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-table.c