Browse Source

[PATCH] device-mapper: Trigger an event when a table is deleted

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.

Signed-Off-By: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
goggin, edward 20 năm trước cách đây
mục cha
commit
269fd2a6f8
1 tập tin đã thay đổi với 9 bổ sung0 xóa
  1. 9 0
      drivers/md/dm-ioctl.c

+ 9 - 0
drivers/md/dm-ioctl.c

@@ -230,11 +230,20 @@ static int dm_hash_insert(const char *name, const char *uuid, struct mapped_devi
 
 
 static void __hash_remove(struct hash_cell *hc)
 static void __hash_remove(struct hash_cell *hc)
 {
 {
+	struct dm_table *table;
+
 	/* remove from the dev hash */
 	/* remove from the dev hash */
 	list_del(&hc->uuid_list);
 	list_del(&hc->uuid_list);
 	list_del(&hc->name_list);
 	list_del(&hc->name_list);
 	unregister_with_devfs(hc);
 	unregister_with_devfs(hc);
 	dm_set_mdptr(hc->md, NULL);
 	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);
 	dm_put(hc->md);
 	if (hc->new_map)
 	if (hc->new_map)
 		dm_table_put(hc->new_map);
 		dm_table_put(hc->new_map);