- sumstatus = 0;
- for (passno = 1; passno <= 2; passno++) {
- if (setfsent() == 0)
- errexit("Can't open checklist file: %s\n", _PATH_FSTAB);
- while ((fsp = getfsent()) != 0) {
- if (strcmp(fsp->fs_type, FSTAB_RW) &&
- strcmp(fsp->fs_type, FSTAB_RO) &&
- strcmp(fsp->fs_type, FSTAB_RQ))
- continue;
- if (preen == 0 ||
- passno == 1 && fsp->fs_passno == 1) {
- name = blockcheck(fsp->fs_spec);
- if (name != NULL)
- checkfilesys(name);
- else if (preen)
- exit(8);
- } else if (passno == 2 && fsp->fs_passno > 1) {
- name = blockcheck(fsp->fs_spec);
- if (name == NULL) {
- pwarn("BAD DISK NAME %s\n",
- fsp->fs_spec);
- sumstatus |= 8;
- continue;
- }
- addpart(name, fsp->fs_file);
- }
- }
- }
- if (preen) {
- union wait status;
-
- if (maxrun == 0)
- maxrun = ndisks;
- if (maxrun > ndisks)
- maxrun = ndisks;
- nextdisk = disks;
- for (passno = 0; passno < maxrun; ++passno) {
- startdisk(nextdisk);
- nextdisk = nextdisk->next;
- }
- while ((pid = wait(&status)) != -1) {
- if (status.w_termsig)
- sumstatus |= 8;
- else
- sumstatus |= status.w_retcode;
- for (dk = disks; dk; dk = dk->next)
- if (dk->pid == pid)
- break;
- if (dk == 0) {
- printf("Unknown pid %d\n", pid);
- continue;
- }
- if (status.w_termsig) {
- printf("%s (%s): EXITED WITH SIGNAL %d\n",
- dk->part->name, dk->part->fsname,
- status.w_termsig);
- status.w_retcode = 8;
- }
- if (status.w_retcode != 0) {
- *badnext = dk->part;
- badnext = &dk->part->next;
- dk->part = dk->part->next;
- *badnext = NULL;
- } else
- dk->part = dk->part->next;
- dk->pid = 0;
- nrun--;
- if (dk->part == NULL)
- ndisks--;
-
- if (nextdisk == NULL) {
- if (dk->part)
- startdisk(dk);
- } else if (nrun < maxrun && nrun < ndisks) {
- for ( ;; ) {
- if ((nextdisk = nextdisk->next) == NULL)
- nextdisk = disks;
- if (nextdisk->part != NULL &&
- nextdisk->pid == 0)
- break;
- }
- startdisk(nextdisk);
- }
- }
- }
- if (sumstatus) {
- if (badlist == 0)
- exit(8);
- printf("THE FOLLOWING FILE SYSTEM%s HAD AN %s\n\t",
- badlist->next ? "S" : "", "UNEXPECTED INCONSISTENCY:");
- for (pt = badlist; pt; pt = pt->next)
- printf("%s (%s)%s", pt->name, pt->fsname,
- pt->next ? ", " : "\n");
- exit(8);
- }
- (void)endfsent();