When doing multiregion writes in dm-io.c the dpages struct wasn't
being rewound for each region.
--- diff/drivers/md/dm-io.c	2003-12-29 10:15:10.000000000 +0000
+++ source/drivers/md/dm-io.c	2004-01-15 11:45:54.000000000 +0000
@@ -483,10 +483,17 @@
 			struct io *io)
 {
 	int i;
+	struct dpages old_pages = *dp;
 
-	for (i = 0; i < num_regions; i++)
+	/*
+	 * For multiple regions we need to be careful to rewind
+	 * the dp object for each call to do_region.
+	 */
+	for (i = 0; i < num_regions; i++) {
+		*dp = old_pages;
 		if (where[i].count)
 			do_region(rw, i, where + i, dp, io);
+	}
 
 	/*
 	 * Drop the extra refence that we were holding to avoid