Get rid of global _io_lock spinlock.
--- diff/drivers/md/dm-iostats.c	2002-12-16 11:18:35.000000000 +0000
+++ source/drivers/md/dm-iostats.c	2002-12-16 11:18:45.000000000 +0000
@@ -41,6 +41,8 @@
 #define	MAX_COUNT	((count_t) - 1)
 
 struct iostats_avg_c {
+	spinlock_t lock;
+
 	struct dm_dev *dev;
 	uint32_t reads;
 	uint32_t writes;
@@ -117,6 +119,7 @@
 	if (!r) {
 		struct iostats_avg_c *ic = ti->private;
 
+		ic->lock = SPIN_LOCK_UNLOCKED;
 		ic->reads = 0;
 		ic->writes = 0;
 		ic->total_r = 0;
@@ -153,9 +156,6 @@
 	return 1;
 }
 
-/* FIXME: should be a target lock */
-static spinlock_t	_io_lock = SPIN_LOCK_UNLOCKED;
-
 /* average latency stats end_io function */
 static void iostats_avg_end_io(struct buffer_head *bh, int uptodate)
 {
@@ -164,7 +164,7 @@
 	struct dm_iostats *io = bh->b_private;
 	struct iostats_avg_c *ic = io->ti->private;
 
-	spin_lock_irqsave(&_io_lock, flags);
+	spin_lock_irqsave(&ic->lock, flags);
 
 	/* average io latency; ignore an io on jiffies overflow */
 	if (jiffies >= io->start_io) {
@@ -189,7 +189,7 @@
 		}
 	}
 
-	spin_unlock_irqrestore(&_io_lock, flags);
+	spin_unlock_irqrestore(&ic->lock, flags);
 
 	bh->b_end_io = io->end_io;
 	bh->b_private = io->context;