Change Monitor to take a struct context

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2012-07-09 17:20:19 +10:00
parent ef898ce65b
commit 95c5020544
3 changed files with 23 additions and 19 deletions

View File

@ -72,9 +72,10 @@ static void link_containers_with_subarrays(struct state *list);
int Monitor(struct mddev_dev *devlist, int Monitor(struct mddev_dev *devlist,
char *mailaddr, char *alert_cmd, char *mailaddr, char *alert_cmd,
int period, int daemonise, int scan, int oneshot, struct context *c,
int dosyslog, int test, char *pidfile, int increments, int daemonise, int oneshot,
int share, char *prefer) int dosyslog, char *pidfile, int increments,
int share)
{ {
/* /*
* Every few seconds, scan every md device looking for changes * Every few seconds, scan every md device looking for changes
@ -127,7 +128,7 @@ int Monitor(struct mddev_dev *devlist,
if (!mailaddr) { if (!mailaddr) {
mailaddr = conf_get_mailaddr(); mailaddr = conf_get_mailaddr();
if (mailaddr && ! scan) if (mailaddr && ! c->scan)
pr_err("Monitor using email address \"%s\" from config file\n", pr_err("Monitor using email address \"%s\" from config file\n",
mailaddr); mailaddr);
} }
@ -135,11 +136,11 @@ int Monitor(struct mddev_dev *devlist,
if (!alert_cmd) { if (!alert_cmd) {
alert_cmd = conf_get_program(); alert_cmd = conf_get_program();
if (alert_cmd && ! scan) if (alert_cmd && ! c->scan)
pr_err("Monitor using program \"%s\" from config file\n", pr_err("Monitor using program \"%s\" from config file\n",
alert_cmd); alert_cmd);
} }
if (scan && !mailaddr && !alert_cmd && !dosyslog) { if (c->scan && !mailaddr && !alert_cmd && !dosyslog) {
pr_err("No mail address or alert command - not monitoring.\n"); pr_err("No mail address or alert command - not monitoring.\n");
return 1; return 1;
} }
@ -155,7 +156,7 @@ int Monitor(struct mddev_dev *devlist,
} }
if (share) if (share)
if (check_one_sharer(scan)) if (check_one_sharer(c->scan))
return 1; return 1;
if (devlist == NULL) { if (devlist == NULL) {
@ -212,13 +213,13 @@ int Monitor(struct mddev_dev *devlist,
mdstat = mdstat_read(oneshot?0:1, 0); mdstat = mdstat_read(oneshot?0:1, 0);
for (st=statelist; st; st=st->next) for (st=statelist; st; st=st->next)
if (check_array(st, mdstat, test, &info, if (check_array(st, mdstat, c->test, &info,
increments, prefer)) increments, c->prefer))
anydegraded = 1; anydegraded = 1;
/* now check if there are any new devices found in mdstat */ /* now check if there are any new devices found in mdstat */
if (scan) if (c->scan)
new_found = add_new_arrays(mdstat, &statelist, test, new_found = add_new_arrays(mdstat, &statelist, c->test,
&info); &info);
/* If an array has active < raid && spare == 0 && spare_group != NULL /* If an array has active < raid && spare == 0 && spare_group != NULL
@ -231,9 +232,9 @@ int Monitor(struct mddev_dev *devlist,
if (oneshot) if (oneshot)
break; break;
else else
mdstat_wait(period); mdstat_wait(c->delay);
} }
test = 0; c->test = 0;
} }
for (st2 = statelist; st2; st2 = statelist) { for (st2 = statelist; st2; st2 = statelist) {
statelist = st2->next; statelist = st2->next;

View File

@ -1388,10 +1388,12 @@ int main(int argc, char *argv[])
else else
c.delay = 60; c.delay = 60;
} }
if (c.delay == 0)
c.delay = 60;
rv= Monitor(devlist, mailaddr, program, rv= Monitor(devlist, mailaddr, program,
c.delay?c.delay:60, daemonise, c.scan, oneshot, &c, daemonise, oneshot,
dosyslog, c.test, pidfile, increments, dosyslog, pidfile, increments,
spare_sharing, c.prefer); spare_sharing);
break; break;
case GROW: case GROW:

View File

@ -1120,9 +1120,10 @@ extern int Examine(struct mddev_dev *devlist, struct context *c,
struct supertype *forcest); struct supertype *forcest);
extern int Monitor(struct mddev_dev *devlist, extern int Monitor(struct mddev_dev *devlist,
char *mailaddr, char *alert_cmd, char *mailaddr, char *alert_cmd,
int period, int daemonise, int scan, int oneshot, struct context *c,
int dosyslog, int test, char *pidfile, int increments, int daemonise, int oneshot,
int share, char *prefer); int dosyslog, char *pidfile, int increments,
int share);
extern int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl); extern int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl);
extern int Kill_subarray(char *dev, char *subarray, int verbose); extern int Kill_subarray(char *dev, char *subarray, int verbose);