tmp_suning_uos_patched/drivers/md
NeilBrown e7c0c3fa29 md/raid10: close race that lose writes lost when replacement completes.
When a replacement operation completes there is a small window
when the original device is marked 'faulty' and the replacement
still looks like a replacement.  The faulty should be removed and
the replacement moved in place very quickly, bit it isn't instant.

So the code write out to the array must handle the possibility that
the only working device for some slot in the replacement - but it
doesn't.  If the primary device is faulty it just gives up.  This
can lead to corruption.

So make the code more robust: if either  the primary or the
replacement is present and working, write to them.  Only when
neither are present do we give up.

This bug has been present since replacement was introduced in
3.3, so it is suitable for any -stable kernel since then.

Reported-by: "George Spelvin" <linux@horizon.com>
Cc: stable@vger.kernel.org
Signed-off-by: NeilBrown <neilb@suse.de>
2012-11-22 15:12:36 +11:00
..
persistent-data dm persistent data: convert to use le32_add_cpu 2012-10-12 16:59:47 +01:00
bitmap.c md/bitmap:Don't use IS_ERR to judge alloc_page(). 2012-10-11 13:45:36 +11:00
bitmap.h
dm-bio-prison.c dm thin: move bio_prison code to separate module 2012-10-12 21:02:13 +01:00
dm-bio-prison.h dm thin: move bio_prison code to separate module 2012-10-12 21:02:13 +01:00
dm-bio-record.h
dm-bufio.c dm: use ACCESS_ONCE for sysfs values 2012-10-12 16:59:46 +01:00
dm-bufio.h
dm-crypt.c block: Add bio_clone_bioset(), bio_clone_kmalloc() 2012-09-09 10:35:39 +02:00
dm-delay.c dm thin: commit before gathering status 2012-07-27 15:08:16 +01:00
dm-exception-store.c dm: replace simple_strtoul 2012-07-27 15:07:59 +01:00
dm-exception-store.h
dm-flakey.c dm thin: commit before gathering status 2012-07-27 15:08:16 +01:00
dm-io.c block: Generalized bio pool freeing 2012-09-09 10:35:38 +02:00
dm-ioctl.c dm thin: commit before gathering status 2012-07-27 15:08:16 +01:00
dm-kcopyd.c
dm-linear.c dm thin: commit before gathering status 2012-07-27 15:08:16 +01:00
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log.c dm: use memweight() 2012-07-30 17:25:16 -07:00
dm-mpath.c dm mpath: fix check for null mpio in end_io fn 2012-10-12 16:59:42 +01:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid1.c workqueue: deprecate flush[_delayed]_work_sync() 2012-08-20 14:51:24 -07:00
dm-raid.c DM RAID: Fix for "sync" directive ineffectiveness 2012-10-11 13:42:19 +11:00
dm-region-hash.c dm raid1: fix crash with mirror recovery and discard 2012-07-20 14:25:03 +01:00
dm-round-robin.c
dm-service-time.c
dm-snap-persistent.c
dm-snap-transient.c
dm-snap.c dm thin: commit before gathering status 2012-07-27 15:08:16 +01:00
dm-stripe.c workqueue: deprecate flush[_delayed]_work_sync() 2012-08-20 14:51:24 -07:00
dm-sysfs.c
dm-table.c dm: retain table limits when swapping to new table with no devices 2012-09-26 23:45:45 +01:00
dm-target.c
dm-thin-metadata.c dm thin metadata: introduce dm_pool_abort_metadata 2012-07-27 15:08:15 +01:00
dm-thin-metadata.h dm thin metadata: introduce dm_pool_abort_metadata 2012-07-27 15:08:15 +01:00
dm-thin.c dm thin: move bio_prison code to separate module 2012-10-12 21:02:13 +01:00
dm-uevent.c
dm-uevent.h
dm-verity.c dm: use ACCESS_ONCE for sysfs values 2012-10-12 16:59:46 +01:00
dm-zero.c
dm.c dm: store dm_target_io in bio front_pad 2012-10-12 21:02:15 +01:00
dm.h dm: retain table limits when swapping to new table with no devices 2012-09-26 23:45:45 +01:00
faulty.c md faulty: use disk_stack_limits() 2012-10-22 10:44:55 +11:00
Kconfig dm thin: move bio_prison code to separate module 2012-10-12 21:02:13 +01:00
linear.c md: linear supports TRIM 2012-10-11 13:08:44 +11:00
linear.h
Makefile dm thin: move bio_prison code to separate module 2012-10-12 21:02:13 +01:00
md.c md: make sure everything is freed when dm-raid stops an array. 2012-11-20 10:27:37 +11:00
md.h Subject: [PATCH] md:change resync_mismatches to atomic64_t to avoid races 2012-10-11 14:17:59 +11:00
multipath.c MD: change the parameter of md thread 2012-10-11 13:34:00 +11:00
multipath.h
raid0.c md: raid 0 supports TRIM 2012-10-11 13:25:44 +11:00
raid0.h
raid1.c md/raid1: Fix assembling of arrays containing Replacements. 2012-10-31 11:42:03 +11:00
raid1.h md/raid1: prevent merging too large request 2012-07-31 10:03:53 +10:00
raid5.c md/raid5: Make sure we clear R5_Discard when discard is finished. 2012-11-22 09:14:13 +11:00
raid5.h MD: raid5 trim support 2012-10-11 13:49:05 +11:00
raid10.c md/raid10: close race that lose writes lost when replacement completes. 2012-11-22 15:12:36 +11:00
raid10.h md/raid10: fix problem with on-stack allocation of r10bio structure. 2012-08-18 09:51:42 +10:00