Milan Broz
b35f8caa08
dm crypt: wait for endio to complete before destruction
...
The following oops has been reported when dm-crypt runs over a loop device.
...
[ 70.381058] Process loop0 (pid: 4268, ti=cf3b2000 task=cf1cc1f0 task.ti=cf3b2000)
...
[ 70.381058] Call Trace:
[ 70.381058] [<d0d76601>] ? crypt_dec_pending+0x5e/0x62 [dm_crypt]
[ 70.381058] [<d0d767b8>] ? crypt_endio+0xa2/0xaa [dm_crypt]
[ 70.381058] [<d0d76716>] ? crypt_endio+0x0/0xaa [dm_crypt]
[ 70.381058] [<c01a2f24>] ? bio_endio+0x2b/0x2e
[ 70.381058] [<d0806530>] ? dec_pending+0x224/0x23b [dm_mod]
[ 70.381058] [<d08066e4>] ? clone_endio+0x79/0xa4 [dm_mod]
[ 70.381058] [<d080666b>] ? clone_endio+0x0/0xa4 [dm_mod]
[ 70.381058] [<c01a2f24>] ? bio_endio+0x2b/0x2e
[ 70.381058] [<c02bad86>] ? loop_thread+0x380/0x3b7
[ 70.381058] [<c02ba8a1>] ? do_lo_send_aops+0x0/0x165
[ 70.381058] [<c013754f>] ? autoremove_wake_function+0x0/0x33
[ 70.381058] [<c02baa06>] ? loop_thread+0x0/0x3b7
When a table is being replaced, it waits for I/O to complete
before destroying the mempool, but the endio function doesn't
call mempool_free() until after completing the bio.
Fix it by swapping the order of those two operations.
The same problem occurs in dm.c with md referenced after dec_pending.
Again, we swap the order.
Cc: stable@kernel.org
Signed-off-by: Milan Broz <mbroz@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
2009-03-16 17:44:36 +00:00
..
raid6test
md: raid6: clean up the style of raid6test/test.c
2008-02-06 10:41:18 -08:00
.gitignore
bitmap.c
md: use list_for_each_entry macro directly
2009-01-09 08:31:08 +11:00
dm-bio-list.h
dm-bio-record.h
dm-crypt.c
dm crypt: wait for endio to complete before destruction
2009-03-16 17:44:36 +00:00
dm-delay.c
dm: consolidate target deregistration error handling
2009-01-06 03:04:58 +00:00
dm-exception-store.c
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-exception-store.h
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-io.c
dm io: respect BIO_MAX_PAGES limit
2009-03-16 17:44:30 +00:00
dm-ioctl.c
dm table: rework reference counting fix
2009-03-16 17:44:26 +00:00
dm-kcopyd.c
block: fix bad definition of BIO_RW_SYNC
2009-02-18 10:32:00 +01:00
dm-linear.c
dm: support barriers on simple devices
2009-01-06 03:05:09 +00:00
dm-log.c
dm log: ensure log bitmap fits on log device
2009-01-06 03:05:02 +00:00
dm-mpath.c
dm mpath: move trigger_event to system workqueue
2009-01-06 03:05:13 +00:00
dm-mpath.h
dm mpath: remove is_active from struct dm_path
2008-10-10 13:36:58 +01:00
dm-path-selector.c
dm: remove dm header from targets
2008-10-21 17:44:59 +01:00
dm-path-selector.h
dm-raid1.c
dm log: move region_size validation
2009-01-06 03:05:01 +00:00
dm-region-hash.c
dm raid1: separate region_hash interface part1
2008-10-21 17:45:06 +01:00
dm-round-robin.c
dm: remove dm header from targets
2008-10-21 17:44:59 +01:00
dm-snap-persistent.c
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-snap-transient.c
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-snap.c
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-snap.h
dm snapshot: extend exception store functions
2009-01-06 03:05:19 +00:00
dm-stripe.c
dm: consolidate target deregistration error handling
2009-01-06 03:04:58 +00:00
dm-sysfs.c
dm: add name and uuid to sysfs
2009-01-06 03:05:12 +00:00
dm-table.c
dm table: rework reference counting
2009-01-06 03:05:10 +00:00
dm-target.c
dm: consolidate target deregistration error handling
2009-01-06 03:04:58 +00:00
dm-uevent.c
md: replace remaining __FUNCTION__ occurrences
2008-04-28 08:58:42 -07:00
dm-uevent.h
dm-zero.c
dm: consolidate target deregistration error handling
2009-01-06 03:04:58 +00:00
dm.c
dm crypt: wait for endio to complete before destruction
2009-03-16 17:44:36 +00:00
dm.h
dm: add name and uuid to sysfs
2009-01-06 03:05:12 +00:00
faulty.c
md: use list_for_each_entry macro directly
2009-01-09 08:31:08 +11:00
Kconfig
raid, fastboot: hide RAID autodetect option if MD is compiled as a module
2008-10-12 08:25:14 -07:00
linear.c
md: Fix a bug in linear.c causing which_dev() to return the wrong device.
2009-02-06 15:10:52 +11:00
Makefile
dm snapshot: split out exception store implementations
2009-01-06 03:05:17 +00:00
md.c
md: fix deadlock when stopping arrays
2009-03-04 00:57:25 -07:00
mktables.c
md: raid6: Fix mktable.c
2008-02-06 10:41:18 -08:00
multipath.c
md: use list_for_each_entry macro directly
2009-01-09 08:31:08 +11:00
raid0.c
md: use list_for_each_entry macro directly
2009-01-09 08:31:08 +11:00
raid1.c
md: avoid races when stopping resync.
2009-02-25 13:18:47 +11:00
raid5.c
md: use list_for_each_entry macro directly
2009-01-09 08:31:08 +11:00
raid6.h
md: Remove unnecessary #includes, #defines, and function declarations.
2008-10-13 11:55:12 +11:00
raid6algos.c
drivers/md: use time_before, time_before_eq, etc
2008-04-28 08:58:42 -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
md: avoid races when stopping resync.
2009-02-25 13:18:47 +11:00
unroll.pl