Change _mpath_lock from a spinlock to a semaphore.  [Kevin Corry]
--- diff/drivers/md/dm-mpath.c	2004-02-10 15:34:16.000000000 +0000
+++ source/drivers/md/dm-mpath.c	2004-02-13 15:51:23.000000000 +0000
@@ -305,7 +305,7 @@
 static struct dm_daemon _kmpathd;
 
 static LIST_HEAD(_mpaths);
-static spinlock_t _mpath_lock = SPIN_LOCK_UNLOCKED;
+static DECLARE_MUTEX(_mpath_lock);
 
 static void submit_ios(struct bio *bio)
 {
@@ -410,7 +410,7 @@
 	struct multipath *m;
 	unsigned interval = 0;
 
-	spin_lock(&_mpath_lock);
+	down(&_mpath_lock);
 	list_for_each_entry (m, &_mpaths, list) {
 		dispatch_failed_ios(m);
 		iterate_paths(m, test_path);
@@ -425,7 +425,7 @@
 
 		interval = min_not_zero(interval, m->test_interval);
 	}
-	spin_unlock(&_mpath_lock);
+	up(&_mpath_lock);
 
 	blk_run_queues();
 
@@ -690,9 +690,9 @@
 	ti->private = m;
 	m->ti = ti;
 
-	spin_lock(&_mpath_lock);
+	down(&_mpath_lock);
 	list_add(&m->list, &_mpaths);
-	spin_unlock(&_mpath_lock);
+	up(&_mpath_lock);
 
 	return 0;
 
@@ -705,9 +705,9 @@
 {
 	struct multipath *m = (struct multipath *) ti->private;
 
-	spin_lock(&_mpath_lock);
+	down(&_mpath_lock);
 	list_del(&m->list);
-	spin_unlock(&_mpath_lock);
+	up(&_mpath_lock);
 
 	free_multipath(m);
 }
