dm mpath: only flush workqueue when needed
authorwuzhouhui <wuzhouhui14@mails.ucas.ac.cn>
Thu, 22 Mar 2018 14:22:38 +0000 (22:22 +0800)
committerMike Snitzer <snitzer@redhat.com>
Tue, 18 Dec 2018 14:02:25 +0000 (09:02 -0500)
The workqueues are shared by many multipath devices, only flush whole
workqueue when necessary.  Otherwise, we just flush works as needed.

Signed-off-by: wuzhouhui <wuzhouhui14@mails.ucas.ac.cn>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-mpath.c

index d6a6692..2ee5e35 100644 (file)
@@ -1211,14 +1211,16 @@ static void flush_multipath_work(struct multipath *m)
                set_bit(MPATHF_PG_INIT_DISABLED, &m->flags);
                smp_mb__after_atomic();
 
-               flush_workqueue(kmpath_handlerd);
+               if (atomic_read(&m->pg_init_in_progress))
+                       flush_workqueue(kmpath_handlerd);
                multipath_wait_for_pg_init_completion(m);
 
                clear_bit(MPATHF_PG_INIT_DISABLED, &m->flags);
                smp_mb__after_atomic();
        }
 
-       flush_workqueue(kmultipathd);
+       if (m->queue_mode == DM_TYPE_BIO_BASED)
+               flush_work(&m->process_queued_bios);
        flush_work(&m->trigger_event);
 }