[dm-devel] dm: fix blk-mq request-based DM queue initialization

Christoph Hellwig hch at lst.de
Thu Apr 30 08:23:16 UTC 2015


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 at lst.de>
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 at lst.de>

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 */




More information about the dm-devel mailing list