diff options
Diffstat (limited to 'drivers/md/dm-mpath.c')
| -rw-r--r-- | drivers/md/dm-mpath.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index aa009e865871..ebfa411d1a7d 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -445,11 +445,11 @@ static int queue_if_no_path(struct multipath *m, unsigned queue_if_no_path,  	else  		m->saved_queue_if_no_path = queue_if_no_path;  	m->queue_if_no_path = queue_if_no_path; -	if (!m->queue_if_no_path) -		dm_table_run_md_queue_async(m->ti->table); -  	spin_unlock_irqrestore(&m->lock, flags); +	if (!queue_if_no_path) +		dm_table_run_md_queue_async(m->ti->table); +  	return 0;  } @@ -954,7 +954,7 @@ out:   */  static int reinstate_path(struct pgpath *pgpath)  { -	int r = 0; +	int r = 0, run_queue = 0;  	unsigned long flags;  	struct multipath *m = pgpath->pg->m; @@ -978,7 +978,7 @@ static int reinstate_path(struct pgpath *pgpath)  	if (!m->nr_valid_paths++) {  		m->current_pgpath = NULL; -		dm_table_run_md_queue_async(m->ti->table); +		run_queue = 1;  	} else if (m->hw_handler_name && (m->current_pg == pgpath->pg)) {  		if (queue_work(kmpath_handlerd, &pgpath->activate_path.work))  			m->pg_init_in_progress++; @@ -991,6 +991,8 @@ static int reinstate_path(struct pgpath *pgpath)  out:  	spin_unlock_irqrestore(&m->lock, flags); +	if (run_queue) +		dm_table_run_md_queue_async(m->ti->table);  	return r;  } | 

