diff options
author | NeilBrown <neilb@suse.de> | 2009-12-30 13:42:37 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-12-30 13:42:37 +1100 |
commit | c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e (patch) | |
tree | 29f137783fd18fa14d1f96758bba3d15212a7904 /util.c | |
parent | 076515ba5042459c17eb5718483ed09c9e567f5d (diff) | |
parent | 1e5c69836d4d0b6dcaef8fc187e6bf2841eb57f6 (diff) | |
download | mdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.tar.gz |
Merge branch 'master' of git://github.com/djbw/mdadm
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -1338,8 +1338,11 @@ int add_disk(int mdfd, struct supertype *st, int rv; #ifndef MDASSEMBLE if (st->ss->external) { - rv = sysfs_add_disk(sra, info, - info->disk.state & (1<<MD_DISK_SYNC)); + if (info->disk.state & (1<<MD_DISK_SYNC)) + info->recovery_start = MaxSector; + else + info->recovery_start = 0; + rv = sysfs_add_disk(sra, info, 0); if (! rv) { struct mdinfo *sd2; for (sd2 = sra->devs; sd2; sd2=sd2->next) @@ -1383,10 +1386,25 @@ int set_array_info(int mdfd, struct supertype *st, struct mdinfo *info) return rv; } +unsigned long long min_recovery_start(struct mdinfo *array) +{ + /* find the minimum recovery_start in an array for metadata + * formats that only record per-array recovery progress instead + * of per-device + */ + unsigned long long recovery_start = MaxSector; + struct mdinfo *d; + + for (d = array->devs; d; d = d->next) + recovery_start = min(recovery_start, d->recovery_start); + + return recovery_start; +} + char *devnum2devname(int num) { char name[100]; - if (num > 0) + if (num >= 0) sprintf(name, "md%d", num); else sprintf(name, "md_d%d", -1-num); |