diff options
| author | Mike Anderson <andmike@linux.vnet.ibm.com> | 2009-12-10 18:52:20 -0500 |
|---|---|---|
| committer | Alasdair G Kergon <agk@redhat.com> | 2009-12-10 18:52:20 -0500 |
| commit | c50abeb38026ea721a812cf8a9b2fac5d3b7684b (patch) | |
| tree | 755a412a2aa8bacf35a278f1009229c64424b03c | |
| parent | 432a212c0dd0f4ca386cf37c5b740ac9dbda4479 (diff) | |
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>
| -rw-r--r-- | drivers/md/dm-ioctl.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index bf3d19a0fb78..d06dd39856f3 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c | |||
| @@ -1303,6 +1303,11 @@ static int target_message(struct dm_ioctl *param, size_t param_size) | |||
| 1303 | if (!table) | 1303 | if (!table) |
| 1304 | goto out_argv; | 1304 | goto out_argv; |
| 1305 | 1305 | ||
| 1306 | if (dm_deleting_md(md)) { | ||
| 1307 | r = -ENXIO; | ||
| 1308 | goto out_table; | ||
| 1309 | } | ||
| 1310 | |||
| 1306 | ti = dm_table_find_target(table, tmsg->sector); | 1311 | ti = dm_table_find_target(table, tmsg->sector); |
| 1307 | if (!dm_target_is_valid(ti)) { | 1312 | if (!dm_target_is_valid(ti)) { |
| 1308 | DMWARN("Target message sector outside device."); | 1313 | DMWARN("Target message sector outside device."); |
| @@ -1314,6 +1319,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size) | |||
| 1314 | r = -EINVAL; | 1319 | r = -EINVAL; |
| 1315 | } | 1320 | } |
| 1316 | 1321 | ||
| 1322 | out_table: | ||
| 1317 | dm_table_put(table); | 1323 | dm_table_put(table); |
| 1318 | out_argv: | 1324 | out_argv: |
| 1319 | kfree(argv); | 1325 | kfree(argv); |
