int Monitor(struct mddev_dev *devlist,
char *mailaddr, char *alert_cmd,
- int period, int daemonise, int scan, int oneshot,
- int dosyslog, int test, char *pidfile, int increments,
- int share, char *prefer)
+ struct context *c,
+ int daemonise, int oneshot,
+ int dosyslog, char *pidfile, int increments,
+ int share)
{
/*
* Every few seconds, scan every md device looking for changes
if (!mailaddr) {
mailaddr = conf_get_mailaddr();
- if (mailaddr && ! scan)
- fprintf(stderr, Name ": Monitor using email address \"%s\" from config file\n",
+ if (mailaddr && ! c->scan)
+ pr_err("Monitor using email address \"%s\" from config file\n",
mailaddr);
}
mailfrom = conf_get_mailfrom();
if (!alert_cmd) {
alert_cmd = conf_get_program();
- if (alert_cmd && ! scan)
- fprintf(stderr, Name ": Monitor using program \"%s\" from config file\n",
+ if (alert_cmd && ! c->scan)
+ pr_err("Monitor using program \"%s\" from config file\n",
alert_cmd);
}
- if (scan && !mailaddr && !alert_cmd && !dosyslog) {
- fprintf(stderr, Name ": No mail address or alert command - not monitoring.\n");
+ if (c->scan && !mailaddr && !alert_cmd && !dosyslog) {
+ pr_err("No mail address or alert command - not monitoring.\n");
return 1;
}
info.alert_cmd = alert_cmd;
}
if (share)
- if (check_one_sharer(scan))
+ if (check_one_sharer(c->scan))
return 1;
if (devlist == NULL) {
continue;
if (strcasecmp(mdlist->devname, "<ignore>") == 0)
continue;
- st = calloc(1, sizeof *st);
- if (st == NULL)
- continue;
+ st = xcalloc(1, sizeof *st);
if (mdlist->devname[0] == '/')
- st->devname = strdup(mdlist->devname);
+ st->devname = xstrdup(mdlist->devname);
else {
- st->devname = malloc(8+strlen(mdlist->devname)+1);
+ st->devname = xmalloc(8+strlen(mdlist->devname)+1);
strcpy(strcpy(st->devname, "/dev/md/"),
mdlist->devname);
}
st->percent = RESYNC_UNKNOWN;
st->expected_spares = mdlist->spare_disks;
if (mdlist->spare_group)
- st->spare_group = strdup(mdlist->spare_group);
+ st->spare_group = xstrdup(mdlist->spare_group);
statelist = st;
}
} else {
struct mddev_dev *dv;
for (dv=devlist ; dv; dv=dv->next) {
struct mddev_ident *mdlist = conf_get_ident(dv->devname);
- struct state *st = calloc(1, sizeof *st);
- if (st == NULL)
- continue;
- st->devname = strdup(dv->devname);
+ struct state *st = xcalloc(1, sizeof *st);
+ st->devname = xstrdup(dv->devname);
st->next = statelist;
st->devnum = INT_MAX;
st->percent = RESYNC_UNKNOWN;
if (mdlist) {
st->expected_spares = mdlist->spare_disks;
if (mdlist->spare_group)
- st->spare_group = strdup(mdlist->spare_group);
+ st->spare_group = xstrdup(mdlist->spare_group);
}
statelist = st;
}
mdstat = mdstat_read(oneshot?0:1, 0);
for (st=statelist; st; st=st->next)
- if (check_array(st, mdstat, test, &info,
- increments, prefer))
+ if (check_array(st, mdstat, c->test, &info,
+ increments, c->prefer))
anydegraded = 1;
/* now check if there are any new devices found in mdstat */
- if (scan)
- new_found = add_new_arrays(mdstat, &statelist, test,
+ if (c->scan)
+ new_found = add_new_arrays(mdstat, &statelist, c->test,
&info);
/* If an array has active < raid && spare == 0 && spare_group != NULL
if (oneshot)
break;
else
- mdstat_wait(period);
+ mdstat_wait(c->delay);
}
- test = 0;
+ c->test = 0;
}
for (st2 = statelist; st2; st2 = statelist) {
statelist = st2->next;
rv = stat(dir, &buf);
if (rv != -1) {
if (scan) {
- fprintf(stderr, Name ": Only one "
+ pr_err("Only one "
"autorebuild process allowed"
" in scan mode, aborting\n");
fclose(fp);
return 1;
} else {
- fprintf(stderr, Name ": Warning: One"
+ pr_err("Warning: One"
" autorebuild process already"
" running.\n");
}
if (scan) {
if (mkdir(MDMON_DIR, S_IRWXU) < 0 &&
errno != EEXIST) {
- fprintf(stderr, Name ": Can't create "
+ pr_err("Can't create "
"autorebuild.pid file\n");
} else {
fp = fopen(path, "w");
if (!fp)
- fprintf(stderr, Name ": Cannot create"
+ pr_err("Cannot create"
" autorebuild.pid"
"file\n");
else {
(strcmp(mse->level, "raid0") != 0 &&
strcmp(mse->level, "linear") != 0))
) {
- struct state *st = calloc(1, sizeof *st);
+ struct state *st = xcalloc(1, sizeof *st);
mdu_array_info_t array;
int fd;
- if (st == NULL)
- continue;
- st->devname = strdup(get_md_name(mse->devnum));
+ st->devname = xstrdup(get_md_name(mse->devnum));
if ((fd = open(st->devname, O_RDONLY)) < 0 ||
ioctl(fd, GET_ARRAY_INFO, &array)< 0) {
/* no such array */
int rv = 1;
if (stat(dev, &stb) != 0) {
- fprintf(stderr, Name ": Cannot find %s: %s\n", dev,
+ pr_err("Cannot find %s: %s\n", dev,
strerror(errno));
return 2;
}
fd = open(dev, O_RDONLY);
if (fd < 0) {
if (verbose)
- fprintf(stderr, Name ": Couldn't open %s: %s\n", dev, strerror(errno));
+ pr_err("Couldn't open %s: %s\n", dev, strerror(errno));
return 1;
}
mdi = sysfs_read(fd, devnum, GET_VERSION|GET_LEVEL|GET_SAFEMODE);
if (!mdi) {
if (verbose)
- fprintf(stderr, Name ": Failed to read sysfs attributes for "
- "%s\n", dev);
+ pr_err("Failed to read sysfs attributes for "
+ "%s\n", dev);
close(fd);
return 0;
}
} else
rv = 1;
if (rv && verbose)
- fprintf(stderr, Name ": Error waiting for %s to be clean\n",
+ pr_err("Error waiting for %s to be clean\n",
dev);
/* restore the original safe_mode_delay */