android_kernel_xiaomi_sm8350/drivers/md
Jun'ichi Nomura 512875bd96 dm: table detect io beyond device
This patch fixes a panic on shrinking a DM device if there is
outstanding I/O to the part of the device that is being removed.
(Normally this doesn't happen - a filesystem would be resized first,
for example.)

The bug is that __clone_and_map() assumes dm_table_find_target()
always returns a valid pointer.  It may fail if a bio arrives from the
block layer but its target sector is no longer included in the DM
btree.

This patch appends an empty entry to table->targets[] which will
be returned by a lookup beyond the end of the device.

After calling dm_table_find_target(), __clone_and_map() and target_message()
check for this condition using
dm_target_is_valid().

Sample test script to trigger oops:
2007-12-20 17:32:08 +00:00
..
raid6test
.gitignore
bitmap.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
dm-bio-list.h dm: bio_list macro renaming 2007-10-20 02:01:11 +01:00
dm-bio-record.h
dm-crypt.c [CRYPTO] users: Fix up scatterlist conversion errors 2007-10-27 00:52:07 -07:00
dm-delay.c dm: bio_list macro renaming 2007-10-20 02:01:11 +01:00
dm-emc.c dm mpath: emc fix an error message 2007-10-20 02:01:12 +01:00
dm-exception-store.c dm: fix memory leak in dm_create_persistent() when starting metadata update thread fails 2007-07-18 08:38:22 -07:00
dm-hw-handler.c dm: use kzalloc 2007-10-20 02:01:07 +01:00
dm-hw-handler.h dm mpath: add retry pg init 2007-10-20 02:01:18 +01:00
dm-io.c Drop 'size' argument from bio_endio and bi_end_io 2007-10-10 09:25:57 +02:00
dm-io.h
dm-ioctl.c dm: table detect io beyond device 2007-12-20 17:32:08 +00:00
dm-linear.c
dm-log.c dm log: split suspend 2007-10-20 02:01:21 +01:00
dm-log.h dm log: split suspend 2007-10-20 02:01:21 +01:00
dm-mpath-hp-sw.c dm mpath: hp retry if not ready 2007-10-20 02:01:20 +01:00
dm-mpath-rdac.c dm mpath: rdac fix init race 2007-10-20 02:00:57 +01:00
dm-mpath.c dm mpath: send uevents 2007-10-20 02:01:27 +01:00
dm-mpath.h
dm-path-selector.c dm: use kzalloc 2007-10-20 02:01:07 +01:00
dm-path-selector.h
dm-raid1.c dm raid1: add mirror_set to struct mirror 2007-10-20 02:01:22 +01:00
dm-round-robin.c
dm-snap.c dm: use is_power_of_2 2007-10-20 02:01:06 +01:00
dm-snap.h
dm-stripe.c dm: use is_power_of_2 2007-10-20 02:01:06 +01:00
dm-table.c dm: table detect io beyond device 2007-12-20 17:32:08 +00:00
dm-target.c dm: use kzalloc 2007-10-20 02:01:07 +01:00
dm-uevent.c dm: uevent generate events 2007-10-20 02:01:26 +01:00
dm-uevent.h dm: uevent generate events 2007-10-20 02:01:26 +01:00
dm-zero.c Drop 'size' argument from bio_endio and bi_end_io 2007-10-10 09:25:57 +02:00
dm.c dm: table detect io beyond device 2007-12-20 17:32:08 +00:00
dm.h dm: table detect io beyond device 2007-12-20 17:32:08 +00:00
faulty.c Drop 'size' argument from bio_endio and bi_end_io 2007-10-10 09:25:57 +02:00
Kconfig dm: add uevent to core 2007-10-20 02:01:24 +01:00
kcopyd.c kcopyd use mutex instead of semaphore 2007-10-20 02:01:08 +01:00
kcopyd.h
linear.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
Makefile dm: add uevent to core 2007-10-20 02:01:24 +01:00
md.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
mktables.c
multipath.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
raid0.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
raid1.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
raid5.c raid5: fix unending write sequence 2007-11-14 18:45:39 -08:00
raid6.h
raid6algos.c x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
raid6altivec.uc
raid6int.uc
raid6mmx.c x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
raid6recov.c
raid6sse1.c x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
raid6sse2.c x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
raid6x86.h x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
raid10.c Add UNPLUG traces to all appropriate places 2007-11-09 13:41:32 +01:00
unroll.pl