|
|
1.1 ! root 1: /* ! 2: * read device tables ! 3: */ ! 4: ! 5: #include <libc.h> ! 6: #include <ctype.h> ! 7: #include <fio.h> ! 8: #include "mkconf.h" ! 9: ! 10: #define MAXDEV 100 /* highest allowed major dev number */ ! 11: ! 12: Devtab bdevsw[MAXDEV]; ! 13: int nblk; ! 14: Devtab cdevsw[MAXDEV]; ! 15: int nchr; ! 16: Devtab fstypsw[MAXDEV]; ! 17: int nfs; ! 18: Devtab ldispsw[MAXDEV]; ! 19: int nld; ! 20: Devtab mscpsw[MAXDEV]; ! 21: int nmscp; ! 22: ! 23: #define BIGARGS 5 ! 24: ! 25: readtab(f) ! 26: char *f; ! 27: { ! 28: int fd; ! 29: register char *p; ! 30: char *args[BIGARGS]; ! 31: ! 32: if ((fd = open(f, 0)) < 0) { ! 33: perror(f); ! 34: exit(1); ! 35: } ! 36: while ((p = Frdline(fd)) != NULL) { ! 37: while (isspace(*p)) ! 38: p++; ! 39: if (*p == '#' || *p == 0) ! 40: continue; ! 41: if (crack(p, args, BIGARGS) != 3) { ! 42: fprint(STDERR, "%s: bad line: %s\n", f, p); ! 43: errs++; ! 44: continue; ! 45: } ! 46: if (strcmp(args[0], "bdev") == 0) ! 47: newent(bdevsw, &nblk, "bdev", args[1], args[2]); ! 48: else if (strcmp(args[0], "cdev") == 0) ! 49: newent(cdevsw, &nchr, "cdev", args[1], args[2]); ! 50: else if (strcmp(args[0], "fs") == 0) ! 51: newent(fstypsw, &nfs, "fs", args[1], args[2]); ! 52: else if (strcmp(args[0], "ld") == 0) ! 53: newent(ldispsw, &nld, "ld", args[1], args[2]); ! 54: else if (strcmp(args[0], "mscp") == 0) ! 55: newent(mscpsw, &nmscp, "mscp", args[1], args[2]); ! 56: else { ! 57: fprint(STDERR, "%s: unknown table %s\n", f, args[0]); ! 58: errs++; ! 59: } ! 60: } ! 61: close(fd); ! 62: } ! 63: ! 64: newent(tab, max, tnam, num, name) ! 65: Devtab *tab; ! 66: int *max; ! 67: char *tnam; ! 68: char *num, *name; ! 69: { ! 70: register Mdev *mp; ! 71: register int i; ! 72: ! 73: i = atoi(num); ! 74: if (i < 0 || i >= MAXDEV) { ! 75: fprint(STDERR, "%s %d %s: devno out of range\n", tnam, i, name); ! 76: errs++; ! 77: return; ! 78: } ! 79: if ((mp = mdlook(name)) == NULL) { ! 80: fprint(STDERR, "%s: no such %s\n", name, tnam); ! 81: errs++; ! 82: return; ! 83: } ! 84: if (tab[i].dev) { ! 85: fprint(STDERR, "%s %d %s: dup %s\n", tnam, i, name, tnam); ! 86: errs++; ! 87: return; ! 88: } ! 89: tab[i].dev = mp; ! 90: if (*max < i) ! 91: *max = i; ! 92: } ! 93: ! 94: devtfix(dp) ! 95: register Dev *dp; ! 96: { ! 97: register int i; ! 98: register Mdev *mp; ! 99: ! 100: mp = dp->mdev; ! 101: if (mp->flags & FTBDONE) ! 102: return; ! 103: for (i = 0; i <= nblk; i++) ! 104: if (bdevsw[i].dev == mp) ! 105: bdevsw[i].used = 1; ! 106: for (i = 0; i <= nchr; i++) ! 107: if (cdevsw[i].dev == mp) ! 108: cdevsw[i].used = 1; ! 109: for (i = 0; i <= nfs; i++) ! 110: if (fstypsw[i].dev == mp) ! 111: fstypsw[i].used = 1; ! 112: for (i = 0; i <= nld; i++) ! 113: if (ldispsw[i].dev == mp) ! 114: ldispsw[i].used = 1; ! 115: for (i = 0; i <= nmscp; i++) ! 116: if (mscpsw[i].dev == mp) ! 117: mscpsw[i].used = 1; ! 118: mp->flags |= FTBDONE; ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.