diff mbox

[4/4] dm-mpath: move initial pg-init kick into __switch_pg()

Message ID 4B665768.40307@ct.jp.nec.com (mailing list archive)
State Deferred, archived
Delegated to: Alasdair Kergon
Headers show

Commit Message

Kiyoshi Ueda Feb. 1, 2010, 4:24 a.m. UTC
None
diff mbox

Patch

Index: 2.6.33-rc6/drivers/md/dm-mpath.c
===================================================================
--- 2.6.33-rc6.orig/drivers/md/dm-mpath.c
+++ 2.6.33-rc6/drivers/md/dm-mpath.c
@@ -256,14 +256,22 @@  static void __switch_pg(struct multipath
 
 	/* Must we initialise the PG first, and queue I/O till it's ready? */
 	if (m->hw_handler_name) {
-		m->pg_init_required = 1;
 		m->queue_io = 1;
+
+		/* Reset pg_init_count in 0 anyway to start a new pg-init */
+		m->pg_init_count = 0;
+		if (!m->pg_init_in_progress)
+			__pg_init(m);
+		else
+			/*
+			 * Mark to start a pg-init again when the current one
+			 * completes.
+			 */
+			m->pg_init_required = 1;
 	} else {
 		m->pg_init_required = 0;
 		m->queue_io = 0;
 	}
-
-	m->pg_init_count = 0;
 }
 
 static int __choose_path_in_pg(struct multipath *m, struct priority_group *pg,
@@ -365,9 +373,7 @@  static int map_io(struct multipath *m, s
 		/* Queue for the daemon to resubmit */
 		list_add_tail(&clone->queuelist, &m->queued_ios);
 		m->queue_size++;
-		if (m->pg_init_required && !m->pg_init_in_progress && pgpath)
-			__pg_init(m);
-		else if (!m->queue_io)
+		if (!m->queue_io)
 			queue_work(kmultipathd, &m->process_queued_ios);
 		pgpath = NULL;
 		r = DM_MAPIO_SUBMITTED;
@@ -473,9 +479,6 @@  static void process_queued_ios(struct wo
 	    (!pgpath && !m->queue_if_no_path))
 		must_queue = 0;
 
-	if (m->pg_init_required && !m->pg_init_in_progress && pgpath)
-		__pg_init(m);
-
 out:
 	spin_unlock_irqrestore(&m->lock, flags);
 	if (!must_queue)