Change _mpath_lock from a spinlock to a semaphore. [Kevin Corry] --- diff/drivers/md/dm-mpath.c 2004-02-18 09:16:25.000000000 +0000 +++ source/drivers/md/dm-mpath.c 2004-02-18 09:17:07.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); }