suspend_lock doesn't need to be rw --- diff/drivers/md/dm.c 2005-07-11 20:54:33.000000000 +0100 +++ source/drivers/md/dm.c 2005-07-11 20:54:18.000000000 +0100 @@ -58,7 +58,7 @@ struct mapped_device { struct rw_semaphore io_lock; - struct rw_semaphore suspend_lock; + struct semaphore suspend_lock; rwlock_t map_lock; atomic_t holders; @@ -748,7 +748,7 @@ memset(md, 0, sizeof(*md)); init_rwsem(&md->io_lock); - init_rwsem(&md->suspend_lock); + init_MUTEX(&md->suspend_lock); rwlock_init(&md->map_lock); atomic_set(&md->holders, 1); atomic_set(&md->event_nr, 0); @@ -965,7 +965,7 @@ { int r = -EINVAL; - down_write(&md->suspend_lock); + down(&md->suspend_lock); /* device must be suspended */ if (!dm_suspended(md)) @@ -975,7 +975,7 @@ r = __bind(md, table); out: - up_write(&md->suspend_lock); + up(&md->suspend_lock); return r; } @@ -1037,7 +1037,7 @@ DECLARE_WAITQUEUE(wait, current); int r = -EINVAL; - down_write(&md->suspend_lock); + down(&md->suspend_lock); if (dm_suspended(md)) goto out; @@ -1100,7 +1100,7 @@ out: dm_table_put(map); - up_write(&md->suspend_lock); + up(&md->suspend_lock); return r; } @@ -1110,7 +1110,7 @@ struct bio *def; struct dm_table *map = NULL; - down_write(&md->suspend_lock); + down(&md->suspend_lock); if (!dm_suspended(md)) goto out; @@ -1137,7 +1137,7 @@ out: dm_table_put(map); - up_write(&md->suspend_lock); + up(&md->suspend_lock); return r; }