Make sure resync_start is initialised properly and maintained properly

Signed-off-by: Neil Brown <neilb@suse.de>
This commit is contained in:
Neil Brown 2008-07-18 16:37:04 +10:00
parent 120f767760
commit 103f2410ec
5 changed files with 10 additions and 5 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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) &&