linux/drivers/md
Jonathan Brassow 943317efdb dm raid1: clear region outside spinlock
A clear_region function is permitted to block (in practice, rare) but gets
called in rh_update_states() with a spinlock held.

The bits being marked and cleared by the above functions are used
to update the on-disk log, but are never read directly.  We can
perform these operations outside the spinlock since the
bits are only changed within one thread viz.
   - mark_region in rh_inc()
   - clear_region in rh_update_states().

So, we grab the clean_regions list items via list_splice() within the
spinlock and defer clear_region() until we iterate over the list for
deletion - similar to how the recovered_regions list is already handled.
We then move the flush() call down to ensure it encapsulates the changes
which are done by the later calls to clear_region().

Signed-off-by: Jonathan Brassow <jbrassow@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-12 15:01:08 -07:00
..
raid6test
.gitignore
bitmap.c md: don't write more than is required of the last page of a bitmap 2007-05-23 20:14:14 -07:00
dm-bio-list.h dm: bio_list prefetch removal 2007-07-12 15:01:08 -07:00
dm-bio-record.h
dm-crypt.c dm: use kmem_cache macro 2007-07-12 15:01:08 -07:00
dm-delay.c dm delay: cleanup 2007-07-12 15:01:08 -07:00
dm-emc.c
dm-exception-store.c dm snapshot: permit invalid activation 2007-07-12 15:01:08 -07:00
dm-hw-handler.c
dm-hw-handler.h dm mpath: log device name 2007-05-09 12:30:46 -07:00
dm-io.c dm io: fix panic on large request 2007-07-12 15:01:08 -07:00
dm-io.h dm io: remove old interface 2007-05-09 12:30:47 -07:00
dm-ioctl.c
dm-linear.c
dm-log.c dm log: fix resume failed log device 2007-05-09 12:30:48 -07:00
dm-log.h
dm-mpath.c dm: remove duplicate module name from error msgs 2007-07-12 15:01:08 -07:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-raid1.c dm raid1: clear region outside spinlock 2007-07-12 15:01:08 -07:00
dm-round-robin.c dm: remove duplicate module name from error msgs 2007-07-12 15:01:08 -07:00
dm-snap.c dm snapshot: permit invalid activation 2007-07-12 15:01:08 -07:00
dm-snap.h dm: use kmem_cache macro 2007-07-12 15:01:08 -07:00
dm-stripe.c
dm-table.c dm: allow offline devices 2007-05-09 12:30:47 -07:00
dm-target.c
dm-zero.c
dm.c dm: use kmem_cache macro 2007-07-12 15:01:08 -07:00
dm.h
faulty.c
Kconfig dm: delay target 2007-05-09 12:30:47 -07:00
kcopyd.c dm: use kmem_cache macro 2007-07-12 15:01:08 -07:00
kcopyd.h
linear.c md: fix bug with linear hot-add and elsewhere 2007-05-23 20:14:14 -07:00
Makefile dm: delay target 2007-05-09 12:30:47 -07:00
md.c md: fix bug with linear hot-add and elsewhere 2007-05-23 20:14:14 -07:00
mktables.c
multipath.c
raid0.c md: avoid overflow in raid0 calculation with large components 2007-05-23 20:14:14 -07:00
raid1.c md: fix bug in error handling during raid1 repair 2007-06-16 13:16:15 -07:00
raid5.c Revert "md: improve partition detection in md array" 2007-05-09 18:51:36 -07:00
raid6.h
raid6algos.c
raid6altivec.uc
raid6int.uc
raid6mmx.c [PATCH] md: RAID6: clean up CPUID and FPU enter/exit code 2007-03-01 14:53:36 -08:00
raid6recov.c
raid6sse1.c [PATCH] md: RAID6: clean up CPUID and FPU enter/exit code 2007-03-01 14:53:36 -08:00
raid6sse2.c [PATCH] md: RAID6: clean up CPUID and FPU enter/exit code 2007-03-01 14:53:36 -08:00
raid6x86.h [PATCH] md: RAID6: clean up CPUID and FPU enter/exit code 2007-03-01 14:53:36 -08:00
raid10.c md: fix two raid10 bugs 2007-06-16 13:16:15 -07:00
unroll.pl
xor.c