getinfo_super1: Use MaxSector in place of sb->size

when deciding whether the array is clean or dirty, compare
sb->resync_offset against MaxSector and not against sb->size

With RAID6 resyncing and subsequent drive failures, it is possible to
reach the case, in which sb->resync_offset==sb->size. This happens
when resync is aborted due to drive failures, and immediately a
rebuild of a spare starts. In this case, mdadm was considered the
array as clean, while kernel was considering the array as dirty. It is
better for mdadm also to consider the array as dirty in this case.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Alexander Lyakas 2012-02-07 10:15:20 +11:00 committed by NeilBrown
parent f878b24226
commit d59770567c
1 changed files with 1 additions and 1 deletions

View File

@ -573,7 +573,7 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info, char *map)
info->array.utime = __le64_to_cpu(sb->utime);
info->array.chunk_size = __le32_to_cpu(sb->chunksize)*512;
info->array.state =
(__le64_to_cpu(sb->resync_offset) >= __le64_to_cpu(sb->size))
(__le64_to_cpu(sb->resync_offset) == MaxSector)
? 1 : 0;
info->data_offset = __le64_to_cpu(sb->data_offset);