Mikulas Patocka
340cd44451
dm kcopyd: fix callback race
...
If the thread calling dm_kcopyd_copy is delayed due to scheduling inside
split_job/segment_complete and the subjobs complete before the loop in
split_job completes, the kcopyd callback could be invoked from the
thread that called dm_kcopyd_copy instead of the kcopyd workqueue.
dm_kcopyd_copy -> split_job -> segment_complete -> job->fn()
Snapshots depend on the fact that callbacks are called from the singlethreaded
kcopyd workqueue and expect that there is no racing between individual
callbacks. The racing between callbacks can lead to corruption of exception
store and it can also mean that exception store callbacks are called twice
for the same exception - a likely reason for crashes reported inside
pending_complete() / remove_exception().
This patch fixes two problems:
1. job->fn being called from the thread that submitted the job (see above).
- Fix: hand over the completion callback to the kcopyd thread.
2. job->fn(read_err, write_err, job->context); in segment_complete
reports the error of the last subjob, not the union of all errors.
- Fix: pass job->write_err to the callback to report all error bits
(it is done already in run_complete_job)
Cc: stable@kernel.org
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
2009-04-09 00:27:17 +01:00
..
raid6test
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
.gitignore
bitmap.c
md: Make mddev->size sector-based.
2009-03-31 14:33:13 +11:00
bitmap.h
md: move headers out of include/linux/raid/
2009-03-31 14:27:03 +11:00
dm-bio-list.h
dm: bio list add bio_list_add_head
2009-04-02 19:55:36 +01:00
dm-bio-record.h
dm: preserve bi_io_vec when resubmitting bios
2009-04-02 19:55:23 +01:00
dm-crypt.c
dm crypt: use kzfree
2009-04-02 19:55:28 +01:00
dm-delay.c
dm: consolidate target deregistration error handling
2009-01-06 03:04:58 +00:00
dm-exception-store.c
dm snapshot: move ctr parsing to exception store
2009-04-02 19:55:34 +01:00
dm-exception-store.h
dm snapshot: move status to exception store
2009-04-02 19:55:35 +01:00
dm-io.c
dm io: make sync_io uninterruptible
2009-04-02 19:55:24 +01:00
dm-ioctl.c
dm: add integrity support
2009-04-09 00:27:12 +01:00
dm-kcopyd.c
dm kcopyd: fix callback race
2009-04-09 00:27:17 +01:00
dm-linear.c
dm: remove limited barrier support
2009-04-09 00:27:13 +01:00
dm-log.c
dm log: remove struct dm_dirty_log_internal
2009-04-02 19:55:30 +01: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: path selector use module refcount directly
2009-04-02 19:55:27 +01:00
dm-path-selector.h
dm-raid1.c
dm raid1: add is_remote_recovering hook for clusters
2009-04-02 19:55:30 +01: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: persistent fix dtr cleanup
2009-04-02 19:55:35 +01:00
dm-snap-transient.c
dm snapshot: move status to exception store
2009-04-02 19:55:35 +01:00
dm-snap.c
dm snapshot: move status to exception store
2009-04-02 19:55:35 +01: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: remove limited barrier support
2009-04-09 00:27:13 +01:00
dm-target.c
dm target: remove struct tt_internal
2009-04-02 19:55:28 +01: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: implement basic barrier support
2009-04-09 00:27:16 +01:00
dm.h
dm: remove limited barrier support
2009-04-09 00:27:13 +01:00
faulty.c
md: centralize ->array_sectors modifications
2009-03-31 14:59:03 +11:00
Kconfig
md: remove CONFIG_MD_RAID_RESHAPE config option.
2009-03-31 15:27:05 +11:00
linear.c
md: centralize ->array_sectors modifications
2009-03-31 14:59:03 +11:00
linear.h
md: move lots of #include lines out of .h files and into .c
2009-03-31 14:33:13 +11:00
Makefile
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
md.c
Merge branch 'for-linus' of git://neil.brown.name/md
2009-04-03 09:08:19 -07:00
md.h
md: add explicit method to signal the end of a reshape.
2009-03-31 15:15:05 +11:00
mktables.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
multipath.c
md: centralize ->array_sectors modifications
2009-03-31 14:59:03 +11:00
multipath.h
md: move lots of #include lines out of .h files and into .c
2009-03-31 14:33:13 +11:00
raid0.c
md: 'array_size' sysfs attribute
2009-03-31 15:00:31 +11:00
raid0.h
md: move lots of #include lines out of .h files and into .c
2009-03-31 14:33:13 +11:00
raid1.c
md/raid1: fix build breakage
2009-04-06 14:40:07 -07:00
raid1.h
md: move lots of #include lines out of .h files and into .c
2009-03-31 14:33:13 +11:00
raid5.c
md/raid5 revise rules for when to update metadata during reshape
2009-03-31 15:28:40 +11:00
raid5.h
md/raid5 revise rules for when to update metadata during reshape
2009-03-31 15:28:40 +11:00
raid6algos.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6altivec.uc
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6int.uc
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6mmx.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6recov.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6sse1.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6sse2.c
md/raid6: move raid6 data processing to raid6_pq.ko
2009-03-31 15:09:39 +11:00
raid6x86.h
md: fix typo in FSF address
2009-03-31 14:57:37 +11:00
raid10.c
md: 'array_size' sysfs attribute
2009-03-31 15:00:31 +11:00
raid10.h
md: move lots of #include lines out of .h files and into .c
2009-03-31 14:33:13 +11:00
unroll.pl