dm mpath: move trigger_event to system workqueue

The same workqueue is used both for sending uevents and processing queued I/O.
Deadlock has been reported in RHEL5 when sending a uevent was blocked waiting
for the queued I/O to be processed. Use scheduled_work() for the asynchronous
uevents instead.

Signed-off-by: Alasdair G Kergon <agk@redhat.com>

+4 -4
+4 -4
drivers/md/dm-mpath.c
··· 889 889 dm_path_uevent(DM_UEVENT_PATH_FAILED, m->ti, 890 890 pgpath->path.dev->name, m->nr_valid_paths); 891 891 892 - queue_work(kmultipathd, &m->trigger_event); 892 + schedule_work(&m->trigger_event); 893 893 queue_work(kmultipathd, &pgpath->deactivate_path); 894 894 895 895 out: ··· 932 932 dm_path_uevent(DM_UEVENT_PATH_REINSTATED, m->ti, 933 933 pgpath->path.dev->name, m->nr_valid_paths); 934 934 935 - queue_work(kmultipathd, &m->trigger_event); 935 + schedule_work(&m->trigger_event); 936 936 937 937 out: 938 938 spin_unlock_irqrestore(&m->lock, flags); ··· 976 976 977 977 spin_unlock_irqrestore(&m->lock, flags); 978 978 979 - queue_work(kmultipathd, &m->trigger_event); 979 + schedule_work(&m->trigger_event); 980 980 } 981 981 982 982 /* ··· 1006 1006 } 1007 1007 spin_unlock_irqrestore(&m->lock, flags); 1008 1008 1009 - queue_work(kmultipathd, &m->trigger_event); 1009 + schedule_work(&m->trigger_event); 1010 1010 return 0; 1011 1011 } 1012 1012