Add scaffolding for handling md/dev-XXX/recovery_start
Prepare the code to handle saving a recovery checkpoint. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
b7941fd68d
commit
e1516be1db
|
@ -112,8 +112,10 @@ static void close_aa(struct active_array *aa)
|
|||
{
|
||||
struct mdinfo *d;
|
||||
|
||||
for (d = aa->info.devs; d; d = d->next)
|
||||
for (d = aa->info.devs; d; d = d->next) {
|
||||
close(d->recovery_fd);
|
||||
close(d->state_fd);
|
||||
}
|
||||
|
||||
close(aa->action_fd);
|
||||
close(aa->info.state_fd);
|
||||
|
@ -517,6 +519,9 @@ static void manage_new(struct mdstat_ent *mdstat,
|
|||
newd->state_fd = sysfs_open(new->devnum,
|
||||
newd->sys_name,
|
||||
"state");
|
||||
newd->recovery_fd = sysfs_open(new->devnum,
|
||||
newd->sys_name,
|
||||
"recovery_start");
|
||||
|
||||
newd->prev_state = read_dev_state(newd->state_fd);
|
||||
newd->curr_state = newd->prev_state;
|
||||
|
|
6
mdadm.h
6
mdadm.h
|
@ -146,7 +146,10 @@ struct mdinfo {
|
|||
*/
|
||||
int reshape_active;
|
||||
unsigned long long reshape_progress;
|
||||
unsigned long long resync_start;
|
||||
union {
|
||||
unsigned long long resync_start; /* per-array resync position */
|
||||
unsigned long long recovery_start; /* per-device rebuild position */
|
||||
};
|
||||
unsigned long safe_mode_delay; /* ms delay to mark clean */
|
||||
int new_level, delta_disks, new_layout, new_chunk;
|
||||
int errors;
|
||||
|
@ -168,6 +171,7 @@ struct mdinfo {
|
|||
struct mdinfo *next;
|
||||
|
||||
/* Device info for mdmon: */
|
||||
int recovery_fd;
|
||||
int state_fd;
|
||||
#define DS_FAULTY 1
|
||||
#define DS_INSYNC 2
|
||||
|
|
|
@ -208,8 +208,10 @@ static int read_and_act(struct active_array *a)
|
|||
a->info.resync_start = read_resync_start(a->resync_start_fd);
|
||||
for (mdi = a->info.devs; mdi ; mdi = mdi->next) {
|
||||
mdi->next_state = 0;
|
||||
if (mdi->state_fd >= 0)
|
||||
if (mdi->state_fd >= 0) {
|
||||
mdi->recovery_start = read_resync_start(mdi->recovery_fd);
|
||||
mdi->curr_state = read_dev_state(mdi->state_fd);
|
||||
}
|
||||
}
|
||||
|
||||
if (a->curr_state <= inactive &&
|
||||
|
|
Loading…
Reference in New Issue