Can't call dm_table_event() while holding a spinlock with interrupts disabled. [Kevin Corry] --- diff/drivers/md/dm-mpath.c 2004-02-18 09:17:07.000000000 +0000 +++ source/drivers/md/dm-mpath.c 2004-02-18 09:17:18.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);