m->path_lock needs to be locked with spin_lock_irqsave() and unlocked with spin_lock_irqrestore(). [Kevin Corry] --- diff/drivers/md/dm-mpath.c 2004-01-16 14:39:33.000000000 +0000 +++ source/drivers/md/dm-mpath.c 2004-01-16 14:40:56.000000000 +0000 @@ -689,11 +689,11 @@ if (error) { struct path *path; - spin_lock(&m->path_lock); + spin_lock_irqsave(&m->path_lock, flags); path = __find_path(m, bio->bi_bdev); __fail_path(path); r = __remap_io(m, bio); - spin_unlock(&m->path_lock); + spin_unlock_irqrestore(&m->path_lock, flags); if (!r) { /* queue for the daemon to resubmit */