[dm-devel] [PATCH] dm-mpath: requeue I/O during pg_init

Alasdair G Kergon agk at redhat.com
Tue Nov 5 15:35:15 UTC 2013


On Tue, Nov 05, 2013 at 02:10:55PM +0100, Hannes Reinecke wrote:
> On 11/05/2013 02:02 PM, Alasdair G Kergon wrote:
> > On Tue, Oct 01, 2013 at 11:49:56AM +0200, Hannes Reinecke wrote:
> >> --- a/drivers/md/dm-mpath.c
> >> +++ b/drivers/md/dm-mpath.c
> >> @@ -390,7 +390,11 @@ static int map_io(struct multipath *m, struct request *clone,
> >>  	if (was_queued)
> >>  		m->queue_size--;
> >>  
> >> -	if ((pgpath && m->queue_io) ||
> >> +	if (m->pg_init_required) {
> >> +		if (!m->pg_init_in_progress)
> >> +			queue_work(kmultipathd, &m->process_queued_ios);
> >> +		r = DM_MAPIO_REQUEUE;
> >> +	} else if ((pgpath && m->queue_io) ||
> >>  	    (!pgpath && m->queue_if_no_path)) {
> >>  		/* Queue for the daemon to resubmit */
> >>  		list_add_tail(&clone->queuelist, &m->queued_ios);
> > 
> > This sequence if...else if... is becoming more and more unreadable!
> > - Two cases now return REQUEUE; two cases now queue_work().
> > 
> > If it really can't be simplified, could we at least add some explanatory
> > comments inline?

For starters, this case is now handled by the new if test so can no longer trigger:

@@ -400,8 +400,7 @@ static int map_io(struct multipath *m, struct request *clone,
                /* 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) ||
-                   !m->queue_io)
+               if (!m->queue_io)
                        queue_work(kmultipathd, &m->process_queued_ios);
                pgpath = NULL;
                r = DM_MAPIO_SUBMITTED;

Alasdair




More information about the dm-devel mailing list