If anything is waiting on a device's table when the device is removed, we must first wake it up so it will release its reference. Otherwise the table's reference count will not drop to zero and the table will not get removed. From: "goggin, edward" Signed-Off-By: Alasdair G Kergon --- diff/drivers/md/dm-ioctl.c 2005-06-17 20:48:29.000000000 +0100 +++ source/drivers/md/dm-ioctl.c 2005-07-19 02:26:16.000000000 +0100 @@ -238,11 +238,20 @@ static void __hash_remove(struct hash_cell *hc) { + struct dm_table *table; + /* remove from the dev hash */ list_del(&hc->uuid_list); list_del(&hc->name_list); unregister_with_devfs(hc); dm_set_mdptr(hc->md, NULL); + + table = dm_get_table(hc->md); + if (table) { + dm_table_event(table); + dm_table_put(table); + } + dm_put(hc->md); if (hc->new_map) dm_table_put(hc->new_map);