summaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-12-30 13:42:37 +1100
committerNeilBrown <neilb@suse.de>2009-12-30 13:42:37 +1100
commitc1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e (patch)
tree29f137783fd18fa14d1f96758bba3d15212a7904 /util.c
parent076515ba5042459c17eb5718483ed09c9e567f5d (diff)
parent1e5c69836d4d0b6dcaef8fc187e6bf2841eb57f6 (diff)
downloadmdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.tar.gz
mdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.tar.xz
mdadm-c1e3ab8c1e76f4ae71ab23bcf5e8c2bf8bd3774e.zip
Merge branch 'master' of git://github.com/djbw/mdadm
Diffstat (limited to 'util.c')
-rw-r--r--util.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/util.c b/util.c
index 67c3550..5feec43 100644
--- a/util.c
+++ b/util.c
@@ -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);