]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
getinfo_super1: Use MaxSector in place of sb->size
authorAlexander Lyakas <alex.bolshoy@gmail.com>
Mon, 6 Feb 2012 23:15:20 +0000 (10:15 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 6 Feb 2012 23:15:20 +0000 (10:15 +1100)
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>
super1.c

index 867aa58c0cf7875ce1d8526f19e54eafd7411710..d23d6e8e5464ebd734c35a884066ea482b2d8650 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -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);