From 103f2410ec581620367d6fde67a3a62f077062a7 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Fri, 18 Jul 2008 16:37:04 +1000 Subject: [PATCH] Make sure resync_start is initialised properly and maintained properly Signed-off-by: Neil Brown --- Create.c | 8 +++++--- managemon.c | 2 +- mdmon.h | 1 + monitor.c | 2 +- super-ddf.c | 2 ++ 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Create.c b/Create.c index c51b7eb0..b2edc7d6 100644 --- a/Create.c +++ b/Create.c @@ -448,11 +448,13 @@ int Create(struct supertype *st, char *mddev, int mdfd, ( level <= 0 ) || assume_clean - ) + ) { info.array.state = 1; /* clean, but one+ drive will be missing*/ - else + info.resync_start = ~0ULL; + } else { info.array.state = 0; /* not clean, but no errors */ - + info.resync_start = 0; + } if (level == 10) { /* for raid10, the bitmap size is the capacity of the array, * which is array.size * raid_disks / ncopies; diff --git a/managemon.c b/managemon.c index 94fbcb2c..447d8ea0 100644 --- a/managemon.c +++ b/managemon.c @@ -379,7 +379,7 @@ static void manage_new(struct mdstat_ent *mdstat, new->action_fd = sysfs_open(new->devnum, NULL, "sync_action"); new->info.state_fd = sysfs_open(new->devnum, NULL, "array_state"); new->resync_start_fd = sysfs_open(new->devnum, NULL, "resync_start"); - new->resync_start = 0; + get_resync_start(new); dprintf("%s: inst: %d action: %d state: %d\n", __func__, atoi(inst), new->action_fd, new->info.state_fd); diff --git a/mdmon.h b/mdmon.h index 02cdb094..a1f0379b 100644 --- a/mdmon.h +++ b/mdmon.h @@ -56,6 +56,7 @@ void do_monitor(struct supertype *container); void do_manager(struct supertype *container); int read_dev_state(int fd); +int get_resync_start(struct active_array *a); struct mdstat_ent *mdstat_read(int hold, int start); diff --git a/monitor.c b/monitor.c index d6b1fbe1..31488965 100644 --- a/monitor.c +++ b/monitor.c @@ -48,7 +48,7 @@ static int read_attr(char *buf, int len, int fd) } -static int get_resync_start(struct active_array *a) +int get_resync_start(struct active_array *a) { char buf[30]; int n; diff --git a/super-ddf.c b/super-ddf.c index cb7f67c4..5d387504 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -1286,6 +1286,8 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info) // info->disk.raid_disk = find refnum in the table and use index; // info->disk.state = ???; + info->container_member = ddf->currentconf->vcnum; + info->resync_start = 0; if (!(ddf->virt->entries[info->container_member].state & DDF_state_inconsistent) && -- 2.39.2