parameterize BSIZE, FSIZE, and FRAG into fs_bsize, fs_fsize, and fs_frag
[unix-history] / usr / src / sbin / dumpfs / dumpfs.c
CommitLineData
b6407c9d
KM
1static char *sccsid = "@(#)dumpfs.c 1.6 (Berkeley) %G%";
2
4abe96a0
KM
3#include "../h/param.h"
4#include "../h/fs.h"
56d45dcd 5#include "../h/inode.h"
4abe96a0
KM
6
7/*
8 * dumpfs
9 */
10
11union {
12 struct fs fs;
b6407c9d 13 char pad[MAXBSIZE];
4abe96a0
KM
14} fsun;
15#define afs fsun.fs
16
4abe96a0
KM
17union {
18 struct cg cg;
b6407c9d 19 char pad[MAXBSIZE];
4abe96a0
KM
20} cgun;
21#define acg cgun.cg
22
23main(argc, argv)
24 char **argv;
25{
743f1ef7 26 int i, j, k;
4abe96a0
KM
27
28 close(0);
29 if (open(argv[1], 0) != 0)
30 perror(argv[1]), exit(1);
b6407c9d
KM
31 lseek(0, SBLOCK * DEV_BSIZE, 0);
32 if (read(0, &afs, MAXBSIZE) != MAXBSIZE)
4abe96a0
KM
33 perror(argv[1]), exit(1);
34 printf("magic\t%x\n", afs.fs_magic);
35 printf("sblkno\t%d\n", afs.fs_sblkno);
36 printf("time\t%s", ctime(&afs.fs_time));
37 printf("size\t%d\n", afs.fs_size);
0947395d 38 printf("blocks\t%d\n", afs.fs_dsize);
4abe96a0 39 printf("ncg\t%d\n", afs.fs_ncg);
b6407c9d
KM
40 printf("bsize\t%d\n", afs.fs_bsize);
41 printf("fsize\t%d\n", afs.fs_fsize);
42 printf("frag\t%d\n", afs.fs_frag);
43 printf("minfree\t%d%%\n", afs.fs_minfree);
44 printf("rotdelay %dms\n", afs.fs_rotdelay);
45 printf("csaddr\t%d\n", afs.fs_csaddr);
4abe96a0
KM
46 printf("cssize\t%d\n", afs.fs_cssize);
47 printf("cgsize\t%d\n", afs.fs_cgsize);
48 printf("ntrak\t%d\nnsect\t%d\nspc\t%d\nncyl\t%d\n",
49 afs.fs_ntrak, afs.fs_nsect, afs.fs_spc, afs.fs_ncyl);
50 printf("cpg\t%d\nfpg\t%d\nipg\t%d\n",
51 afs.fs_cpg, afs.fs_fpg, afs.fs_ipg);
0947395d
KM
52 printf("ndir\t%d\nnffree\t%d\nnbfree\t%d\nnifree\t%d\n",
53 afs.fs_cstotal.cs_ndir, afs.fs_cstotal.cs_nffree,
54 afs.fs_cstotal.cs_nbfree, afs.fs_cstotal.cs_nifree);
743f1ef7
KM
55 printf("cgrotor\t%d\nblocks available in each rotational position",
56 afs.fs_cgrotor);
57 for (i = 0; i < NRPOS; i++) {
58 if (afs.fs_postbl[i] > -1)
59 printf("\nposition %d:\t", i);
60 for (j = afs.fs_postbl[i], k = 1; j > -1;
61 j = afs.fs_rotbl[j], k++) {
62 if (k % 15 == 0)
63 printf("\n\t\t");
64 printf("%4d", j);
65 }
66 }
0947395d 67 printf("\ncs[].cs_(nbfree,ndir,nifree,nffree):\n\t");
b6407c9d
KM
68 for (i = 0; i < howmany(afs.fs_cssize, afs.fs_bsize); i++) {
69 afs.fs_csp[i] = (struct csum *)calloc(1, afs.fs_bsize);
70 lseek(0, fsbtodb(&afs, (afs.fs_csaddr + (i * afs.fs_frag))) *
71 DEV_BSIZE, 0);
72 if (read(0, afs.fs_csp[i], afs.fs_bsize) != afs.fs_bsize)
743f1ef7
KM
73 perror(argv[1]), exit(1);
74 }
4abe96a0 75 for (i = 0; i < afs.fs_ncg; i++) {
b6407c9d 76 struct csum *cs = &afs.fs_cs(&afs, i);
0947395d 77 if (i && i % 4 == 0)
4abe96a0 78 printf("\n\t");
0947395d
KM
79 printf("(%d,%d,%d,%d) ",
80 cs->cs_nbfree, cs->cs_ndir, cs->cs_nifree, cs->cs_nffree);
4abe96a0
KM
81 }
82 printf("\n");
83 printf("fmod\t%d\n", afs.fs_fmod);
84 printf("ronly\t%d\n", afs.fs_ronly);
85 printf("\n");
86 for (i = 0; i < afs.fs_ncg; i++)
87 dumpcg(i);
88};
89
90dumpcg(c)
91 int c;
92{
93 int i,j;
94
95 printf("\ncg %d:\n", c);
b6407c9d 96 lseek(0, fsbtodb(&afs, cgtod(c,&afs)) * DEV_BSIZE, 0);
4abe96a0 97 printf("tell\t%x\n", tell(0));
b6407c9d 98 if (read(0, (char *)&acg, afs.fs_bsize) != afs.fs_bsize) {
4abe96a0
KM
99 printf("\terror reading cg\n");
100 return;
101 }
102 printf("magic\t%x\ntime\t%s", acg.cg_magic, ctime(&acg.cg_time));
103 printf("cgx\t%d\nncyl\t%d\nniblk\t%d\nndblk\t%d\n",
104 acg.cg_cgx, acg.cg_ncyl, acg.cg_niblk, acg.cg_ndblk);
743f1ef7 105 printf("nifree\t%d\nndir\t%d\nnffree\t%d\nnbfree\t%d\n",
0947395d
KM
106 acg.cg_cs.cs_nifree, acg.cg_cs.cs_ndir,
107 acg.cg_cs.cs_nffree, acg.cg_cs.cs_nbfree);
743f1ef7
KM
108 printf("rotor\t%d\nirotor\t%d\nfrotor\t%d\nfrsum",
109 acg.cg_rotor, acg.cg_irotor, acg.cg_frotor);
b6407c9d 110 for (i = 1, j = 0; i < afs.fs_frag; i++) {
f3c028b7
KM
111 printf("\t%d", acg.cg_frsum[i]);
112 j += i * acg.cg_frsum[i];
113 }
114 printf("\nsum of frsum: %d\niused:\t", j);
4abe96a0
KM
115 pbits(acg.cg_iused, afs.fs_ipg);
116 printf("free:\t");
117 pbits(acg.cg_free, afs.fs_fpg);
118 printf("b:\n");
119 for (i = 0; i < afs.fs_cpg; i++) {
120 printf(" c%d:\t", i);
121 for (j = 0; j < NRPOS; j++)
122 printf(" %d", acg.cg_b[i][j]);
123 printf("\n");
124 }
125};
126
4abe96a0
KM
127pbits(cp, max)
128 register char *cp;
129 int max;
130{
131 register int i;
132 int count = 0, j;
133
134 for (i = 0; i < max; i++)
135 if (isset(cp, i)) {
136 if (count)
137 printf(",%s", count %10 == 9 ? "\n\t" : " ");
138 count++;
139 printf("%d", i);
140 j = i;
141 while ((i+1)<max && isset(cp, i+1))
142 i++;
143 if (i != j)
144 printf("-%d", i);
145 }
146 printf("\n");
147}