linux/drivers/md
Raz Ben-Jehuda(caro) 46031f9a38 [PATCH] md: allow reads that have bypassed the cache to be retried on failure
If a bypass-the-cache read fails, we simply try again through the cache.  If
it fails again it will trigger normal recovery precedures.

update 1:

From: NeilBrown <neilb@suse.de>

1/
  chunk_aligned_read and retry_aligned_read assume that
      data_disks == raid_disks - 1
  which is not true for raid6.
  So when an aligned read request bypasses the cache, we can get the wrong data.

2/ The cloned bio is being used-after-free in raid5_align_endio
   (to test BIO_UPTODATE).

3/ We forgot to add rdev->data_offset when submitting
   a bio for aligned-read

4/ clone_bio calls blk_recount_segments and then we change bi_bdev,
   so we need to invalidate the segment counts.

5/ We don't de-reference the rdev when the read completes.
   This means we need to record the rdev to so it is still
   available in the end_io routine.  Fortunately
   bi_next in the original bio is unused at this point so
   we can stuff it in there.

6/ We leak a cloned bio if the target rdev is not usable.

From: NeilBrown <neilb@suse.de>

update 2:

1/ When aligned requests fail (read error) they need to be retried
   via the normal method (stripe cache).  As we cannot be sure that
   we can process a single read in one go (we may not be able to
   allocate all the stripes needed) we store a bio-being-retried
   and a list of bioes-that-still-need-to-be-retried.
   When find a bio that needs to be retried, we should add it to
   the list, not to single-bio...

2/ We were never incrementing 'scnt' when resubmitting failed
   aligned requests.

[akpm@osdl.org: build fix]
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-10 09:57:20 -08: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 [PATCH] struct path: convert md 2006-12-08 08:28:47 -08:00
dm-bio-list.h [PATCH] dm: suspend: add noflush pushback 2006-12-08 08:29:09 -08:00
dm-bio-record.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dm-crypt.c [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm-emc.c [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-exception-store.c [PATCH] dm snapshot: fix metadata writing when suspending 2006-10-03 08:04:14 -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 [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-io.c [PATCH] dm io: fix bi_max_vecs 2006-12-08 08:29:08 -08:00
dm-io.h [PATCH] device-mapper: remove unused definition 2006-01-06 08:34:00 -08:00
dm-ioctl.c [PATCH] dm: ioctl: add noflush suspend 2006-12-08 08:29:09 -08:00
dm-linear.c [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm-log.c [PATCH] dm: raid1: reset sync_search on resume 2006-12-08 08:29:09 -08:00
dm-log.h [PATCH] dm: log: rename complete_resync_work 2006-12-08 08:29:09 -08:00
dm-mpath.c [PATCH] dm: mpath: use noflush suspending 2006-12-08 08:29:09 -08: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 [PATCH] dm: log: rename complete_resync_work 2006-12-08 08:29:09 -08:00
dm-round-robin.c [PATCH] struct path: rename DM's struct path 2006-12-08 08:28:40 -08:00
dm-snap.c [PATCH] make drivers/md/dm-snap.c:ksnapd static 2006-12-08 08:29:09 -08:00
dm-snap.h [PATCH] dm snapshot: add workqueue 2006-10-03 08:04:14 -07:00
dm-stripe.c [PATCH] dm: map and endio symbolic return codes 2006-12-08 08:29:09 -08:00
dm-table.c [PATCH] dm table: add target flush 2006-10-03 08:04:16 -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 [PATCH] dm: suspend: add noflush pushback 2006-12-08 08:29:09 -08:00
dm.h [PATCH] dm: suspend: add noflush pushback 2006-12-08 08:29:09 -08:00
faulty.c [PATCH] md: allow array level to be set textually via sysfs 2006-01-06 08:34:09 -08:00
Kconfig [PATCH] md: remove 'experimental' classification from raid5 reshape 2006-10-03 08:04:18 -07:00
kcopyd.c [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
kcopyd.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
linear.c [PATCH] md: define backing_dev_info.congested_fn for raid0 and linear 2006-10-03 08:04:18 -07:00
Makefile [PATCH] md: merge raid5 and raid6 code 2006-06-26 09:58:37 -07:00
md.c [PATCH] md: tidy up device-change notification when an md array is stopped 2006-12-10 09:57:20 -08: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 [PATCH] md: define backing_dev_info.congested_fn for raid0 and linear 2006-10-03 08:04:18 -07:00
raid1.c [PATCH] md: fix printk format warnings, seen on powerpc64: 2006-10-28 11:30:52 -07:00
raid5.c [PATCH] md: allow reads that have bypassed the cache to be retried on failure 2006-12-10 09:57:20 -08: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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6recov.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6sse1.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6sse2.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid6x86.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raid10.c [PATCH] md: fix printk format warnings, seen on powerpc64: 2006-10-28 11:30:52 -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