Browse Source

dm ioctl: forbid messages to devices being deleted

Once we begin deleting a device, prevent any further messages being sent
to targets of its table (to avoid races).

Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Mike Anderson 15 năm trước cách đây
mục cha
commit
c50abeb380
1 tập tin đã thay đổi với 6 bổ sung0 xóa
  1. 6 0
      drivers/md/dm-ioctl.c

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

@@ -1303,6 +1303,11 @@ static int target_message(struct dm_ioctl *param, size_t param_size)
 	if (!table)
 	if (!table)
 		goto out_argv;
 		goto out_argv;
 
 
+	if (dm_deleting_md(md)) {
+		r = -ENXIO;
+		goto out_table;
+	}
+
 	ti = dm_table_find_target(table, tmsg->sector);
 	ti = dm_table_find_target(table, tmsg->sector);
 	if (!dm_target_is_valid(ti)) {
 	if (!dm_target_is_valid(ti)) {
 		DMWARN("Target message sector outside device.");
 		DMWARN("Target message sector outside device.");
@@ -1314,6 +1319,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size)
 		r = -EINVAL;
 		r = -EINVAL;
 	}
 	}
 
 
+ out_table:
 	dm_table_put(table);
 	dm_table_put(table);
  out_argv:
  out_argv:
 	kfree(argv);
 	kfree(argv);