Can't call dm_table_event() while holding a spinlock with interrupts
disabled.  [Kevin Corry]
--- diff/drivers/md/dm-mpath.c	2004-02-13 15:51:23.000000000 +0000
+++ source/drivers/md/dm-mpath.c	2004-02-13 15:52:03.000000000 +0000
@@ -409,6 +409,7 @@
 	unsigned long flags;
 	struct multipath *m;
 	unsigned interval = 0;
+	int event;
 
 	down(&_mpath_lock);
 	list_for_each_entry (m, &_mpaths, list) {
@@ -417,12 +418,16 @@
 		submit_ios(bio_list_get(&m->test_ios));
 
 		spin_lock_irqsave(&m->lock, flags);
+		event = 0;
 		if (m->trigger_event) {
-			dm_table_event(m->ti->table);
+			event = 1;
 			m->trigger_event = 0;
 		}
 		spin_unlock_irqrestore(&m->lock, flags);
 
+		if (event)
+			dm_table_event(m->ti->table);
+
 		interval = min_not_zero(interval, m->test_interval);
 	}
 	up(&_mpath_lock);
