The dm_get_device in the linear constructor was wrong.
--- diff/drivers/md/dm-linear.c	2002-11-05 12:12:17.000000000 +0000
+++ source/drivers/md/dm-linear.c	2002-11-08 11:40:59.000000000 +0000
@@ -42,7 +42,7 @@
 		goto bad;
 	}
 
-	if (dm_get_device(ti, argv[0], ti->begin, ti->len,
+	if (dm_get_device(ti, argv[0], lc->start, ti->len,
 			  dm_table_get_mode(ti->table), &lc->dev)) {
 		ti->error = "dm-linear: Device lookup failed";
 		goto bad;