linux-stable-rt/drivers/md
Krzysztof Wojcik 02214dc546 FIX: md: process hangs at wait_barrier after 0->10 takeover
Following symptoms were observed:
1. After raid0->raid10 takeover operation we have array with 2
missing disks.
When we add disk for rebuild, recovery process starts as expected
but it does not finish- it stops at about 90%, md126_resync process
hangs in "D" state.
2. Similar behavior is when we have mounted raid0 array and we
execute takeover to raid10. After this when we try to unmount array-
it causes process umount hangs in "D"

In scenarios above processes hang at the same function- wait_barrier
in raid10.c.
Process waits in macro "wait_event_lock_irq" until the
"!conf->barrier" condition will be true.
In scenarios above it never happens.

Reason was that at the end of level_store, after calling pers->run,
we call mddev_resume. This calls pers->quiesce(mddev, 0) with
RAID10, that calls lower_barrier.
However raise_barrier hadn't been called on that 'conf' yet,
so conf->barrier becomes negative, which is bad.

This patch introduces setting conf->barrier=1 after takeover
operation. It prevents to become barrier negative after call
lower_barrier().

Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2011-02-08 11:49:02 +11:00
..
Kconfig dm: raid456 basic support 2011-01-13 20:00:02 +00:00
Makefile dm: raid456 basic support 2011-01-13 20:00:02 +00:00
bitmap.c md: Don't let implementation detail of curr_resync leak out through sysfs. 2011-01-14 09:14:34 +11:00
bitmap.h
dm-bio-record.h
dm-crypt.c dm crypt: add loop aes iv generator 2011-01-13 19:59:55 +00:00
dm-delay.c dm: convert workqueues to alloc_ordered 2011-01-13 19:59:57 +00:00
dm-exception-store.c
dm-exception-store.h
dm-io.c
dm-ioctl.c dm ioctl: suppress needless warning messages 2011-01-13 19:59:55 +00:00
dm-kcopyd.c dm: use non reentrant workqueues if equivalent 2011-01-13 19:59:58 +00:00
dm-linear.c
dm-log-userspace-base.c dm log userspace: add version number to comms 2011-01-13 19:59:52 +00:00
dm-log-userspace-transfer.c dm log userspace: add version number to comms 2011-01-13 19:59:52 +00:00
dm-log-userspace-transfer.h
dm-log.c dm log: use PTR_ERR value instead of ENOMEM 2011-01-13 20:00:00 +00:00
dm-mpath.c dm mpath: delay activate_path retry on SCSI_DH_RETRY 2011-01-13 20:00:01 +00:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h
dm-queue-length.c
dm-raid.c dm: raid456 basic support 2011-01-13 20:00:02 +00:00
dm-raid1.c dm: use non reentrant workqueues if equivalent 2011-01-13 19:59:58 +00:00
dm-region-hash.c
dm-round-robin.c
dm-service-time.c
dm-snap-persistent.c dm snapshot: persistent make metadata_wq multithreaded 2011-01-13 19:59:59 +00:00
dm-snap-transient.c
dm-snap.c dm snapshot: avoid storing private suspended state 2011-01-13 19:59:59 +00:00
dm-stripe.c dm stripe: switch from local workqueue to system_wq 2011-01-13 19:59:57 +00:00
dm-sysfs.c
dm-table.c block: restore multiple bd_link_disk_holder() support 2011-01-14 18:44:22 +01:00
dm-target.c
dm-uevent.c
dm-uevent.h
dm-zero.c
dm.c dm: remove superfluous irq disablement in dm_request_fn 2011-01-13 20:00:00 +00:00
dm.h
faulty.c
linear.c
linear.h
md.c md_make_request: don't touch the bio after calling make_request 2011-02-08 09:53:28 +11:00
md.h md: Remove the AllReserved flag for component devices. 2011-01-31 12:10:09 +11:00
multipath.c
multipath.h
raid0.c Add raid1->raid0 takeover support 2011-01-31 13:47:13 +11:00
raid0.h
raid1.c md-new-param-to_sync_page_io 2011-01-14 09:14:33 +11:00
raid1.h
raid5.c md: don't abort checking spares as soon as one cannot be added. 2011-01-31 11:57:43 +11:00
raid5.h
raid10.c FIX: md: process hangs at wait_barrier after 0->10 takeover 2011-02-08 11:49:02 +11:00
raid10.h