linux/drivers/md
Jonathan Brassow f44db678ed dm raid1: handle resync failures
Device-mapper mirroring currently takes a best effort approach to
recovery - failures during mirror synchronization are completely ignored.
This means that regions are marked 'in-sync' and 'clean' and removed
from the hash list.  Future reads and writes that query the region
will incorrectly interpret the region as in-sync.

This patch handles failures during the recovery process.  If a failure
occurs, the region is marked as 'not-in-sync' (aka RH_NOSYNC) and added
to a new list 'failed_recovered_regions'.

Regions on the 'failed_recovered_regions' list are not marked as 'clean'
upon removal from the list.  Furthermore, if the DM_RAID1_HANDLE_ERRORS
flag is set, the region is marked as 'not-in-sync'.  This action prevents
any future read-balancing from choosing an invalid device because of the
'not-in-sync' status.

If "handle_errors" is not specified when creating a mirror (leaving the
DM_RAID1_HANDLE_ERRORS flag unset), failures will be ignored exactly as they
would be without this patch.  This is to preserve backwards compatibility with
user-space tools, such as 'pvmove'.  However, since future read-balancing
policies will rely on the correct sync status of a region, a user must choose
"handle_errors" when using read-balancing.

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 [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
.gitignore gitignore: misc files 2006-01-01 22:21:50 +01:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-crypt.c dm: disable barriers 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 [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-exception-store.c dm snapshot: permit invalid activation 2007-07-12 15:01:08 -07:00
dm-hw-handler.c BUG_ON() Conversion in md/dm-hw-handler.c 2006-03-24 18:36:27 +01:00
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 [PATCH] mark struct file_operations const 4 2007-02-12 09:48:45 -08:00
dm-linear.c [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm-log.c dm log: fix resume failed log device 2007-05-09 12:30:48 -07:00
dm-log.h [PATCH] dm: log: rename complete_resync_work 2006-12-08 08:29:09 -08:00
dm-mpath.c dm: disable barriers 2007-07-12 15:01:08 -07:00
dm-mpath.h [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-path-selector.c BUG_ON() Conversion in md/dm-path-selector.c 2006-03-26 18:21:58 +02:00
dm-path-selector.h [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-raid1.c dm raid1: handle resync failures 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: disable barriers 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 [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm-table.c dm: allow offline devices 2007-05-09 12:30:47 -07:00
dm-target.c [PATCH] dm: improve error message consistency 2006-06-26 09:58:36 -07:00
dm-zero.c [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm.c dm: disable barriers 2007-07-12 15:01:08 -07:00
dm.h dm: add ratelimit logging macros 2007-07-12 15:01:08 -07:00
faulty.c [PATCH] md: Don't assume that READ==0 and WRITE==1 - use the names explicitly 2006-12-13 09:05:48 -08:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
multipath.c [PATCH] md: fix up maintenance of ->degraded in multipath 2006-10-28 11:30:51 -07:00
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 [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6algos.c [PATCH] drivers/md/raid6algos.c: fix a NULL dereference 2006-06-23 07:43:08 -07:00
raid6altivec.uc [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6int.uc Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6mmx.c [PATCH] md: RAID6: clean up CPUID and FPU enter/exit code 2007-03-01 14:53:36 -08:00
raid6recov.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
xor.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00