Fix is_resync_complete for RAID10

For RAID10, 'sync' numbers go up to the array size rather than the
component size.  is_resync_complete() needs to allow for this.

Reported-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2013-07-31 09:18:57 +10:00
parent 364a48c992
commit 71d68ff62f
1 changed files with 17 additions and 3 deletions

20
mdmon.h
View File

@ -91,7 +91,21 @@ extern int monitor_loop_cnt;
*/
static inline int is_resync_complete(struct mdinfo *array)
{
if (array->resync_start >= array->component_size)
return 1;
return 0;
unsigned long long sync_size = 0;
int ncopies, l;
switch(array->array.level) {
case 1:
case 4:
case 5:
case 6:
sync_size = array->component_size;
break;
case 10:
l = array->array.layout;
ncopies = (l & 0xff) * ((l >> 8) && 0xff);
sync_size = array->component_size * array->array.raid_disks;
sync_size /= ncopies;
break;
}
return array->resync_start >= sync_size;
}