Commit | Line | Data |
---|---|---|
36da3c53 KB |
1 | /*- |
2 | * Copyright (c) 1992 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * %sccs.include.redist.c% | |
6 | */ | |
7 | ||
8 | #ifndef lint | |
875ef07c | 9 | static char sccsid[] = "@(#)print.c 5.2 (Berkeley) %G%"; |
36da3c53 KB |
10 | #endif /* not lint */ |
11 | ||
12 | #include <sys/param.h> | |
13 | #include <sys/ucred.h> | |
14 | #include <sys/mount.h> | |
15 | #include <sys/time.h> | |
16 | ||
17 | #include <ufs/ufs/dinode.h> | |
18 | #include <ufs/lfs/lfs.h> | |
19 | ||
20 | #include <stdlib.h> | |
21 | #include <stdio.h> | |
22 | #include "clean.h" | |
23 | ||
24 | /* | |
25 | * Print out a summary block; return number of blocks in segment; 0 | |
26 | * for empty segment or corrupt segment. | |
27 | * Returns a pointer to the array of inode addresses. | |
28 | */ | |
29 | int | |
30 | dump_summary(lfsp, sp, flags, iaddrp) | |
31 | struct lfs *lfsp; | |
32 | SEGSUM *sp; | |
33 | u_long flags; | |
34 | daddr_t **iaddrp; | |
35 | { | |
36 | int i, j, numblocks; | |
37 | daddr_t *dp; | |
38 | ||
39 | FINFO *fp; | |
40 | int ck; | |
41 | ||
42 | if (sp->ss_sumsum != (ck = cksum(&sp->ss_datasum, | |
43 | LFS_SUMMARY_SIZE - sizeof(sp->ss_sumsum)))) | |
44 | return(-1); | |
45 | ||
46 | if (flags & DUMP_SUM_HEADER) { | |
47 | (void)printf(" %s0x%X\t%s%d\t%s%d\n %s0x%X\t%s0x%X", | |
48 | "next ", sp->ss_next, | |
49 | "nfinfo ", sp->ss_nfinfo, | |
50 | "ninos ", sp->ss_ninos, | |
51 | "sumsum ", sp->ss_sumsum, | |
52 | "datasum ", sp->ss_datasum ); | |
53 | (void)printf("\tcreate %s", ctime((time_t *)&sp->ss_create)); | |
54 | } | |
55 | ||
56 | numblocks = (sp->ss_ninos + INOPB(lfsp) - 1) / INOPB(lfsp); | |
57 | ||
58 | /* Dump out inode disk addresses */ | |
59 | if (flags & DUMP_INODE_ADDRS) | |
60 | printf(" Inode addresses:"); | |
61 | ||
62 | dp = (daddr_t *)((caddr_t)sp + LFS_SUMMARY_SIZE); | |
63 | for (--dp, i = 0; i < sp->ss_ninos; --dp) | |
64 | if (flags & DUMP_INODE_ADDRS) { | |
65 | (void)printf("\t0x%lx", *dp); | |
66 | if (++i % 7 == 0) | |
67 | (void)printf("\n"); | |
68 | } else | |
69 | ++i; | |
70 | if (iaddrp) | |
71 | *iaddrp = ++dp; | |
72 | if (flags & DUMP_INODE_ADDRS) | |
73 | printf("\n"); | |
74 | ||
75 | for (fp = (FINFO *)(sp + 1), i = 0; i < sp->ss_nfinfo; ++i) { | |
76 | numblocks += fp->fi_nblocks; | |
77 | if (flags & DUMP_FINFOS) { | |
78 | (void)printf(" %s%d version %d nblocks %d\n", | |
79 | "FINFO for inode: ", fp->fi_ino, | |
80 | fp->fi_version, fp->fi_nblocks); | |
81 | dp = &(fp->fi_blocks[0]); | |
82 | for (j = 0; j < fp->fi_nblocks; j++, dp++) { | |
83 | (void)printf("\t%d", *dp); | |
84 | if ((j % 8) == 7) | |
85 | (void)printf("\n"); | |
86 | } | |
87 | if ((j % 8) != 0) | |
88 | (void)printf("\n"); | |
89 | fp = (FINFO *)dp; | |
90 | } else { | |
91 | fp = (FINFO *)(&fp->fi_blocks[fp->fi_nblocks]); | |
92 | } | |
93 | } | |
94 | return (numblocks); | |
95 | } | |
96 | ||
97 | #ifdef VERBOSE | |
98 | void | |
99 | dump_cleaner_info(ipage) | |
100 | void *ipage; | |
101 | { | |
102 | CLEANERINFO *cip; | |
103 | ||
104 | cip = (CLEANERINFO *)ipage; | |
105 | (void)printf("segments clean\t%d\tsegments dirty\t%d\n\n", | |
106 | cip->clean, cip->dirty); | |
107 | } | |
108 | ||
109 | void | |
110 | dump_super(lfsp) | |
111 | struct lfs *lfsp; | |
112 | { | |
113 | int i; | |
114 | ||
115 | (void)printf("%s0x%X\t%s0x%X\t%s%d\t%s%d\n", | |
116 | "magic ", lfsp->lfs_magic, | |
117 | "version ", lfsp->lfs_version, | |
118 | "size ", lfsp->lfs_size, | |
119 | "ssize ", lfsp->lfs_ssize); | |
120 | (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", | |
121 | "dsize ", lfsp->lfs_dsize, | |
122 | "bsize ", lfsp->lfs_bsize, | |
123 | "fsize ", lfsp->lfs_fsize, | |
124 | "frag ", lfsp->lfs_frag); | |
125 | ||
126 | (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", | |
127 | "minfree ", lfsp->lfs_minfree, | |
128 | "inopb ", lfsp->lfs_inopb, | |
129 | "ifpb ", lfsp->lfs_ifpb, | |
130 | "nindir ", lfsp->lfs_nindir); | |
131 | ||
132 | (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", | |
133 | "nseg ", lfsp->lfs_nseg, | |
134 | "nspf ", lfsp->lfs_nspf, | |
135 | "cleansz ", lfsp->lfs_cleansz, | |
136 | "segtabsz ", lfsp->lfs_segtabsz); | |
137 | ||
138 | (void)printf("%s0x%X\t%s%d\t%s0x%X\t%s%d\n", | |
139 | "segmask ", lfsp->lfs_segmask, | |
140 | "segshift ", lfsp->lfs_segshift, | |
141 | "bmask ", lfsp->lfs_bmask, | |
142 | "bshift ", lfsp->lfs_bshift); | |
143 | ||
144 | (void)printf("%s0x%X\t\t%s%d\t%s0x%X\t%s%d\n", | |
145 | "ffmask ", lfsp->lfs_ffmask, | |
146 | "ffshift ", lfsp->lfs_ffshift, | |
147 | "fbmask ", lfsp->lfs_fbmask, | |
148 | "fbshift ", lfsp->lfs_fbshift); | |
149 | ||
150 | (void)printf("%s%d\t\t%s0x%X\t%s0x%qx\n", | |
151 | "fsbtodb ", lfsp->lfs_fsbtodb, | |
152 | "cksum ", lfsp->lfs_cksum, | |
153 | "maxfilesize ", lfsp->lfs_maxfilesize); | |
154 | ||
155 | (void)printf("Superblock disk addresses:\t"); | |
156 | for (i = 0; i < LFS_MAXNUMSB; i++) { | |
157 | (void)printf(" 0x%X", lfsp->lfs_sboffs[i]); | |
158 | if ( i == (LFS_MAXNUMSB >> 1)) | |
159 | (void)printf("\n\t\t\t\t"); | |
160 | } | |
161 | (void)printf("\n"); | |
162 | ||
163 | (void)printf("Checkpoint Info\n"); | |
164 | (void)printf("%s%d\t%s0x%X\t%s%d\n", | |
165 | "free ", lfsp->lfs_free, | |
166 | "idaddr ", lfsp->lfs_idaddr, | |
167 | "ifile ", lfsp->lfs_ifile); | |
875ef07c | 168 | (void)printf("%s%d\t%s%d\t%s%d\n", |
36da3c53 | 169 | "bfree ", lfsp->lfs_bfree, |
875ef07c KB |
170 | "avail ", lfsp->lfs_avail, |
171 | "uinodes ", lfsp->lfs_uinodes); | |
172 | (void)printf("%s%d\t%s0x%X\t%s0x%X\n%s0x%X\t%s0x%X\t", | |
36da3c53 KB |
173 | "nfiles ", lfsp->lfs_nfiles, |
174 | "lastseg ", lfsp->lfs_lastseg, | |
175 | "nextseg ", lfsp->lfs_nextseg, | |
176 | "curseg ", lfsp->lfs_curseg, | |
177 | "offset ", lfsp->lfs_offset); | |
178 | (void)printf("tstamp %s", ctime((time_t *)&lfsp->lfs_tstamp)); | |
179 | (void)printf("\nIn-Memory Information\n"); | |
180 | (void)printf("%s%d\t%s0x%X\t%s%d\t%s%d\t%s%d\n", | |
181 | "seglock ", lfsp->lfs_seglock, | |
182 | "iocount ", lfsp->lfs_iocount, | |
183 | "writer ", lfsp->lfs_writer, | |
184 | "dirops ", lfsp->lfs_dirops, | |
185 | "doifile ", lfsp->lfs_doifile ); | |
875ef07c KB |
186 | (void)printf("%s%d\t%s%d\t%s0x%X\t%s%d\n", |
187 | "nactive ", lfsp->lfs_nactive, | |
36da3c53 KB |
188 | "fmod ", lfsp->lfs_fmod, |
189 | "clean ", lfsp->lfs_clean, | |
190 | "ronly ", lfsp->lfs_ronly); | |
191 | } | |
192 | #endif /* VERBOSE */ |