[dm-devel] [PATCH] 2.4: dm.c: Correct check of return from dm_table_find_target
Kevin Corry
corryk at us.ibm.com
Tue Mar 25 14:09:02 UTC 2003
In __map_buffer(), the call to dm_table_find_target() will never return a
NULL pointer (provided every DM device table has a valid "targets" array,
which should be the case). It may, however, return a pointer to a blank target
record (since there are always a KEYS_PER_NODE-multiple of target records
in the B-tree, but not all of these target records are necessarily used).
This will occur when DM receives an I/O request past the end of a device.
(You'd think this shouldn't happen, but it does - generic_make_request()
will allow an I/O one sector past the end of a device with an even number
of sectors.)
Instead of checking for a NULL return from dm_table_find_target(), check
for a valid "type" field in the returned target.
--- linux-2.4.20a/drivers/md/dm.c 2003/03/18 21:05:24
+++ linux-2.4.20b/drivers/md/dm.c 2003/03/25 17:25:41
@@ -351,7 +351,7 @@
struct dm_target *ti;
ti = dm_table_find_target(md->map, bh->b_rsector);
- if (!ti)
+ if (!ti->type)
return -EINVAL;
/* hook the end io request fn */
p
More information about the dm-devel
mailing list