--- linux-last/drivers/md/dm.c	Fri Nov  2 13:20:42 2001
+++ linux/drivers/md/dm.c	Fri Nov  2 14:03:15 2001
@@ -609,7 +609,7 @@
 {
 	struct list_head *tmp;
 
-	for (tmp = devices->next; tmp != devices; tmp = tmp->next) {
+	list_for_each(tmp, devices) {
 		struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
 		close_dev(dd);
 	}
@@ -623,7 +623,7 @@
 	int r = 0;
 	struct list_head *tmp;
 
-	for (tmp = devices->next; tmp != devices; tmp = tmp->next) {
+	list_for_each(tmp, devices) {
 		struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
 		if ((r = open_dev(dd)))
 			goto bad;
@@ -665,7 +665,7 @@
 	int result = INT_MAX, size;
 	struct list_head *tmp;
 
-	for (tmp = devices->next; tmp != devices; tmp = tmp->next) {
+	list_for_each(tmp, devices) {
 		struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
 		size = get_hardsect_size(dd->dev);
 		if (size < result)
--- linux-last/drivers/md/dm-table.c	Fri Nov  2 13:07:57 2001
+++ linux/drivers/md/dm-table.c	Fri Nov  2 14:01:36 2001
@@ -137,10 +137,12 @@
 	if (t->depth >= 2)
 		vfree(t->index[t->depth - 2]);
 
-
 	/* free the targets */
 	for (i = 0; i < t->num_targets; i++) {
 		struct target *tgt = &t->targets[i];
+
+		dm_put_target_type(t->targets[i].type);
+
 		if (tgt->type->dtr)
 			tgt->type->dtr(t, tgt->private);
 	}
@@ -211,8 +213,7 @@
 {
 	struct list_head *tmp;
 
-	for (tmp = l->next; tmp != l; tmp = tmp->next) {
-
+	list_for_each(tmp, l) {
 		struct dm_dev *dd = list_entry(tmp, struct dm_dev, list);
 		if (dd->dev == dev)
 			return dd;
--- linux-last/drivers/md/dm-target.c	Fri Nov  2 13:07:57 2001
+++ linux/drivers/md/dm-target.c	Fri Nov  2 13:52:32 2001
@@ -24,9 +24,9 @@
 	struct list_head *tmp;
 	struct tt_internal *ti;
 
-	for(tmp = _targets.next; tmp != &_targets; tmp = tmp->next) {
-
+	list_for_each(tmp, &_targets) {
 		ti = list_entry(tmp, struct tt_internal, list);
+
 		if (!strcmp(name, ti->tt.name))
 			return ti;
 	}
@@ -72,7 +72,7 @@
 		ti = get_target_type(name);
 	}
 
-	return ti ? &ti->tt : 0;
+	return ti ? &ti->tt : NULL;
 }
 
 void dm_put_target_type(struct target_type *t)
--- linux-last/drivers/md/dm-linear.c	Fri Nov  2 13:07:57 2001
+++ linux/drivers/md/dm-linear.c	Fri Nov  2 14:11:26 2001
@@ -92,15 +92,15 @@
 	int r;
 
 	if ((r = dm_register_target(&linear_target)) < 0)
-		printk(KERN_ERR "Device mapper: Linear: register failed\n");
+		WARN("linear target register failed");
 
 	return r;
 }
 
 static void __exit linear_exit(void)
 {
-	if (dm_unregister_target(&linear_target) < 0)
-		printk(KERN_ERR "Device mapper: Linear: unregister failed\n");
+	if (dm_unregister_target(&linear_target))
+		WARN("linear target unregister failed");
 }
 
 module_init(linear_init);
