android_kernel_motorola_sm6225/drivers/md
NeilBrown c03f6a1969 md: update sync_completed and reshape_position even more often.
There are circumstances when a user-space process might need to
"oversee" a resync/reshape process.  For example when doing an
in-place reshape of a raid5, it is prudent to take a backup of each
section before reshaping it as this is the only way to provide
safety against an unplanned shutdown (i.e. crash/power failure).

The sync_max sysfs value can be used to stop the resync from
advancing beyond a particular point.
So user-space can:
  suspend IO to the first section and back it up
  set 'sync_max' to the end of the section
  wait for 'sync_completed' to reach that point
  resume IO on the first section and move on to the next section.

However this process requires the kernel and user-space to run in
lock-step which could introduce unnecessary delays.

It would be better if a 'double buffered' approach could be used with
userspace and kernel space working on different sections with the
'next' section always ready when the 'current' section is finished.

One problem with implementing this is that sync_completed is only
guaranteed to be updated when the sync process reaches sync_max.
(it is updated on a time basis at other times, but it is hard to rely
on that).  This defeats some of the double buffering.

With this patch, sync_completed (and reshape_position) get updated as
the current position approaches sync_max, so there is room for
userspace to advance sync_max early without losing updates.

To be precise, sync_completed is updated when the current sync
position reaches half way between the current value of sync_completed
and the value of sync_max.  This will usually be a good time for user
space to update sync_max.

If sync_max does not get updated, the updates to sync_completed
(together with associated metadata updates) will occur at an
exponentially increasing frequency which will get unreasonably fast
(one update every page) immediately before the process hits sync_max
and stops.  So the update rate will be unreasonably fast only for an
insignificant period of time.

Signed-off-by: NeilBrown <neilb@suse.de>
2009-04-17 11:06:30 +10:00
..
raid6test md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
.gitignore gitignore: misc files 2006-01-01 22:21:50 +01:00
bitmap.c md: improve usefulness and accuracy of sysfs file md/sync_completed. 2009-04-14 16:28:34 +10:00
bitmap.h md: move headers out of include/linux/raid/ 2009-03-31 14:27:03 +11:00
dm-bio-list.h dm: bio list add bio_list_add_head 2009-04-02 19:55:36 +01:00
dm-bio-record.h dm: preserve bi_io_vec when resubmitting bios 2009-04-02 19:55:23 +01:00
dm-crypt.c dm crypt: use kzfree 2009-04-02 19:55:28 +01:00
dm-delay.c dm: consolidate target deregistration error handling 2009-01-06 03:04:58 +00:00
dm-exception-store.c dm snapshot: move ctr parsing to exception store 2009-04-02 19:55:34 +01:00
dm-exception-store.h dm snapshot: move status to exception store 2009-04-02 19:55:35 +01:00
dm-io.c dm io: make sync_io uninterruptible 2009-04-02 19:55:24 +01:00
dm-ioctl.c dm: add integrity support 2009-04-09 00:27:12 +01:00
dm-kcopyd.c dm kcopyd: fix callback race 2009-04-09 00:27:17 +01:00
dm-linear.c dm: remove limited barrier support 2009-04-09 00:27:13 +01:00
dm-log.c dm log: remove struct dm_dirty_log_internal 2009-04-02 19:55:30 +01:00
dm-mpath.c dm mpath: move trigger_event to system workqueue 2009-01-06 03:05:13 +00:00
dm-mpath.h dm mpath: remove is_active from struct dm_path 2008-10-10 13:36:58 +01:00
dm-path-selector.c dm: path selector use module refcount directly 2009-04-02 19:55:27 +01: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: add is_remote_recovering hook for clusters 2009-04-02 19:55:30 +01:00
dm-region-hash.c dm raid1: separate region_hash interface part1 2008-10-21 17:45:06 +01:00
dm-round-robin.c dm: remove dm header from targets 2008-10-21 17:44:59 +01:00
dm-snap-persistent.c dm snapshot: persistent fix dtr cleanup 2009-04-02 19:55:35 +01:00
dm-snap-transient.c dm snapshot: move status to exception store 2009-04-02 19:55:35 +01:00
dm-snap.c dm snapshot: move status to exception store 2009-04-02 19:55:35 +01:00
dm-stripe.c dm: consolidate target deregistration error handling 2009-01-06 03:04:58 +00:00
dm-sysfs.c dm: add name and uuid to sysfs 2009-01-06 03:05:12 +00:00
dm-table.c dm: remove limited barrier support 2009-04-09 00:27:13 +01:00
dm-target.c dm target: remove struct tt_internal 2009-04-02 19:55:28 +01:00
dm-uevent.c md: replace remaining __FUNCTION__ occurrences 2008-04-28 08:58:42 -07:00
dm-uevent.h dm: uevent generate events 2007-10-20 02:01:26 +01:00
dm-zero.c dm: consolidate target deregistration error handling 2009-01-06 03:04:58 +00:00
dm.c dm: implement basic barrier support 2009-04-09 00:27:16 +01:00
dm.h dm: remove limited barrier support 2009-04-09 00:27:13 +01:00
faulty.c md: centralize ->array_sectors modifications 2009-03-31 14:59:03 +11:00
Kconfig md: remove CONFIG_MD_RAID_RESHAPE config option. 2009-03-31 15:27:05 +11:00
linear.c md: centralize ->array_sectors modifications 2009-03-31 14:59:03 +11:00
linear.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
Makefile md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
md.c md: update sync_completed and reshape_position even more often. 2009-04-17 11:06:30 +10:00
md.h md: tiny md.h cleanups 2009-04-14 12:01:53 +10:00
mktables.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
multipath.c md: centralize ->array_sectors modifications 2009-03-31 14:59:03 +11:00
multipath.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
raid0.c md: 'array_size' sysfs attribute 2009-03-31 15:00:31 +11:00
raid0.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
raid1.c md/raid1: fix build breakage 2009-04-06 14:40:07 -07:00
raid1.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
raid5.c md: update sync_completed and reshape_position even more often. 2009-04-17 11:06:30 +10:00
raid5.h md/raid5 revise rules for when to update metadata during reshape 2009-03-31 15:28:40 +11:00
raid6algos.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6altivec.uc md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6int.uc md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6mmx.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6recov.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6sse1.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6sse2.c md/raid6: move raid6 data processing to raid6_pq.ko 2009-03-31 15:09:39 +11:00
raid6x86.h md: fix typo in FSF address 2009-03-31 14:57:37 +11:00
raid10.c md: 'array_size' sysfs attribute 2009-03-31 15:00:31 +11:00
raid10.h md: move lots of #include lines out of .h files and into .c 2009-03-31 14:33:13 +11:00
unroll.pl Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00