dm table: an 'all_blk_mq' table must be loaded for a blk-mq DM device
authorBart Van Assche <bart.vanassche@sandisk.com>
Thu, 8 Dec 2016 00:56:06 +0000 (16:56 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Jan 2017 09:40:15 +0000 (10:40 +0100)
commit 301fc3f5efb98633115bd887655b19f42c6dfaa8 upstream.

When dm_table_set_type() is used by a target to establish a DM table's
type (e.g. DM_TYPE_MQ_REQUEST_BASED in the case of DM multipath) the
DM core must go on to verify that the devices in the table are
compatible with the established type.

Fixes: e83068a5 ("dm mpath: add optional "queue_mode" feature")
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/md/dm-table.c

index 53b817b..5ac239d 100644 (file)
@@ -981,6 +981,11 @@ verify_rq_based:
                t->all_blk_mq = true;
        }
 
+       if (t->type == DM_TYPE_MQ_REQUEST_BASED && !t->all_blk_mq) {
+               DMERR("table load rejected: all devices are not blk-mq request-stackable");
+               return -EINVAL;
+       }
+
        return 0;
 }