dm table: rework reference counting fix
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 16 Mar 2009 17:44:26 +0000 (17:44 +0000)
committerAlasdair G Kergon <agk@redhat.com>
Mon, 16 Mar 2009 17:44:26 +0000 (17:44 +0000)
Fix an error introduced in dm-table-rework-reference-counting.patch.

When there is failure after table initialization, we need to use
dm_table_destroy, not dm_table_put, to free the table.

dm_table_put may be used only after dm_table_get.

Cc: Kiyoshi Ueda <k-ueda@ct.jp.nec.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Reviewed-by: Jonathan Brassow <jbrassow@redhat.com>
Reviewed-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-ioctl.c

index 977f36612e8374a010fb2447d3743873dc09b97a..f01096549a939b0ad4b1bccbc07546bc3d775d43 100644 (file)
@@ -1064,7 +1064,7 @@ static int table_load(struct dm_ioctl *param, size_t param_size)
 
        r = populate_table(t, param, param_size);
        if (r) {
-               dm_table_put(t);
+               dm_table_destroy(t);
                goto out;
        }
 
@@ -1072,7 +1072,7 @@ static int table_load(struct dm_ioctl *param, size_t param_size)
        hc = dm_get_mdptr(md);
        if (!hc || hc->md != md) {
                DMWARN("device has been removed from the dev hash table.");
-               dm_table_put(t);
+               dm_table_destroy(t);
                up_write(&_hash_lock);
                r = -ENXIO;
                goto out;