Use a rw_semaphore in dm_target.c rather than a rwlock_t, just to keep
in line with dm.c
--- diff/drivers/md/dm-target.c	2002-12-12 17:02:51.000000000 +0000
+++ source/drivers/md/dm-target.c	2002-12-12 17:02:10.000000000 +0000
@@ -18,7 +18,7 @@
 };
 
 static LIST_HEAD(_targets);
-static rwlock_t _lock = RW_LOCK_UNLOCKED;
+static DECLARE_RWSEM(_lock);
 
 #define DM_MOD_NAME_SIZE 32
 
@@ -41,24 +41,24 @@
 {
 	struct tt_internal *ti;
 
-	read_lock(&_lock);
+	down_read(&_lock);
 	ti = __find_target_type(name);
 
 	if (ti) {
 		if (!atomic_read(&ti->use_count)) {
-			read_unlock(&_lock);
-			write_lock(&_lock);
+			up_read(&_lock);
+			down_write(&_lock);
 
 			if (!atomic_read(&ti->use_count) && ti->tt.module)
 				__MOD_INC_USE_COUNT(ti->tt.module);
 
-			write_unlock(&_lock);
-			read_lock(&_lock);
+			up_write(&_lock);
+			down_read(&_lock);
 		}
 
 		atomic_inc(&ti->use_count);
 	}
-	read_unlock(&_lock);
+	up_read(&_lock);
 
 	return ti;
 }
@@ -93,12 +93,12 @@
 {
 	struct tt_internal *ti = (struct tt_internal *) t;
 
-	read_lock(&_lock);
+	down_read(&_lock);
 
 	if (atomic_dec_and_test(&ti->use_count) && ti->tt.module)
 		__MOD_DEC_USE_COUNT(ti->tt.module);
 
-	read_unlock(&_lock);
+	up_read(&_lock);
 }
 
 static struct tt_internal *alloc_target(struct target_type *t)
@@ -122,13 +122,13 @@
 	if (!ti)
 		return -ENOMEM;
 
-	write_lock(&_lock);
+	down_write(&_lock);
 	if (__find_target_type(t->name))
 		rv = -EEXIST;
 	else
 		list_add(&ti->list, &_targets);
 
-	write_unlock(&_lock);
+	up_write(&_lock);
 	return rv;
 }
 
@@ -136,21 +136,21 @@
 {
 	struct tt_internal *ti;
 
-	write_lock(&_lock);
+	down_write(&_lock);
 	if (!(ti = __find_target_type(t->name))) {
-		write_unlock(&_lock);
+		up_write(&_lock);
 		return -EINVAL;
 	}
 
 	if (atomic_read(&ti->use_count)) {
-		write_unlock(&_lock);
+		up_write(&_lock);
 		return -ETXTBSY;
 	}
 
 	list_del(&ti->list);
 	kfree(ti);
 
-	write_unlock(&_lock);
+	up_write(&_lock);
 	return 0;
 }