|
|
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.