On Thu, Apr 30, 2015 at 09:22:00AM +0200, Christoph Hellwig wrote: > Well - we're obviously trying to reinitialize it here and only error > out very low level with your patch. What I mean is that we shouldn't > even try to reinitialize it at a much higher level, so we don't need > this blk-mq specific hack down here. FYI, this fixes the isssue for me and seems to be "more correct" at a higher level: --- From: Christoph Hellwig <hch@xxxxxx> Subject: [PATCH] dm: only initialize request_queue once We should only inіnitialize the request_queue on the initial table load when we assing the device type. Signed-off-by: Christoph Hellwig <hch@xxxxxx> diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index c8a18e4..de92662 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c @@ -1298,21 +1298,22 @@ static int table_load(struct dm_ioctl *param, size_t param_size) goto err_unlock_md_type; } - if (dm_get_md_type(md) == DM_TYPE_NONE) + if (dm_get_md_type(md) == DM_TYPE_NONE) { /* Initial table load: acquire type of table. */ dm_set_md_type(md, dm_table_get_type(t)); - else if (dm_get_md_type(md) != dm_table_get_type(t)) { + + /* setup md->queue to reflect md's type (may block) */ + r = dm_setup_md_queue(md); + if (r) { + DMWARN("unable to set up device queue for new table."); + goto err_unlock_md_type; + } + } else if (dm_get_md_type(md) != dm_table_get_type(t)) { DMWARN("can't change device type after initial table load."); r = -EINVAL; goto err_unlock_md_type; } - /* setup md->queue to reflect md's type (may block) */ - r = dm_setup_md_queue(md); - if (r) { - DMWARN("unable to set up device queue for new table."); - goto err_unlock_md_type; - } dm_unlock_md_type(md); /* stage inactive table */ -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel