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 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel