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