Call dm_put_target_type() *after* calling the destructor. --- diff/drivers/md/dm-table.c 2002-11-18 10:45:12.000000000 +0000 +++ source/drivers/md/dm-table.c 2002-12-17 15:59:03.000000000 +0000 @@ -207,12 +207,12 @@ /* free the targets */ for (i = 0; i < t->num_targets; i++) { - struct dm_target *tgt = &t->targets[i]; - - dm_put_target_type(t->targets[i].type); + struct dm_target *tgt = t->targets + i; if (tgt->type->dtr) tgt->type->dtr(tgt); + + dm_put_target_type(tgt->type); } vfree(t->highs);