1
linux/drivers/md
NeilBrown a9701a3047 [PATCH] md: support BIO_RW_BARRIER for md/raid1
We can only accept BARRIER requests if all slaves handle
barriers, and that can, of course, change with time....

So we keep track of whether the whole array seems safe for barriers,
and also whether each individual rdev handles barriers.

We initially assumes barriers are OK.

When writing the superblock we try a barrier, and if that fails, we flag
things for no-barriers.  This will usually clear the flags fairly quickly.

If writing the superblock finds that BIO_RW_BARRIER is -ENOTSUPP, we need to
resubmit, so introduce function "md_super_wait" which waits for requests to
finish, and retries ENOTSUPP requests without the barrier flag.

When writing the real raid1, write requests which were BIO_RW_BARRIER but
which aresn't supported need to be retried.  So raid1d is enhanced to do this,
and when any bio write completes (i.e.  no retry needed) we remove it from the
r1bio, so that devices needing retry are easy to find.

We should hardly ever get -ENOTSUPP errors when writing data to the raid.
It should only happen if:
  1/ the device used to support BARRIER, but now doesn't.  Few devices
     change like this, though raid1 can!
or
  2/ the array has no persistent superblock, so there was no opportunity to
     pre-test for barriers when writing the superblock.

Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-11-09 07:56:38 -08:00
..
raid6test [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
bitmap.c [PATCH] md: support BIO_RW_BARRIER for md/raid1 2005-11-09 07:56:38 -08:00
dm-bio-list.h
dm-bio-record.h
dm-crypt.c [PATCH] Use sg_set_buf/sg_init_one where applicable 2005-10-30 11:19:43 +11:00
dm-emc.c [PATCH] device-mapper dm-emc: Fix a memset 2005-05-05 16:36:46 -07:00
dm-exception-store.c [PATCH] vfree and kfree cleanup in drivers/ 2005-09-10 10:06:30 -07:00
dm-hw-handler.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm-hw-handler.h
dm-io.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
dm-io.h
dm-ioctl.c [PATCH] device-mapper: Trigger an event when a table is deleted 2005-09-28 07:46:42 -07:00
dm-linear.c
dm-log.c
dm-log.h
dm-mpath.c [PATCH] device-mapper: Fix queue_if_no_path initialisation 2005-09-28 07:46:42 -07:00
dm-mpath.h
dm-path-selector.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm-path-selector.h
dm-raid1.c [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
dm-round-robin.c
dm-snap.c [PATCH] device-mapper snapshots: Handle origin extension 2005-07-12 16:19:11 -07:00
dm-snap.h
dm-stripe.c
dm-table.c [PATCH] device-mapper: fix deadlocks in core (prep) 2005-07-28 21:46:03 -07:00
dm-target.c
dm-zero.c [PATCH] device-mapper: Some missing statics 2005-05-05 16:36:46 -07:00
dm.c [PATCH] kill bio->bi_set 2005-09-07 16:57:20 -07:00
dm.h
faulty.c
Kconfig
kcopyd.c
kcopyd.h
linear.c [BLOCK] Unify the seperate read/write io stat fields into arrays 2005-11-01 09:26:16 +01:00
Makefile [PATCH] md: optimised resync using Bitmap based intent logging 2005-06-21 19:07:43 -07:00
md.c [PATCH] md: support BIO_RW_BARRIER for md/raid1 2005-11-09 07:56:38 -08:00
mktables.c
multipath.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
raid0.c [BLOCK] Unify the seperate read/write io stat fields into arrays 2005-11-01 09:26:16 +01:00
raid1.c [PATCH] md: support BIO_RW_BARRIER for md/raid1 2005-11-09 07:56:38 -08:00
raid5.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
raid6.h [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6algos.c [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6altivec.uc [PATCH] RAID6 Altivec fix 2005-09-17 11:49:58 -07:00
raid6int.uc
raid6main.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
raid6mmx.c
raid6recov.c
raid6sse1.c
raid6sse2.c
raid6x86.h
raid10.c [PATCH] md: convert 'faulty' and 'in_sync' fields to bits in 'flags' field 2005-11-09 07:56:38 -08:00
unroll.pl
xor.c