Commit | Line | Data |
---|---|---|
7dcbcb85 | 1 | /* |
42e3d5a4 | 2 | * Copyright (c) 1991 The Regents of the University of California. |
7dcbcb85 KB |
3 | * All rights reserved. |
4 | * | |
5 | * %sccs.include.redist.c% | |
6 | * | |
6c4c42b6 | 7 | * @(#)lfs_debug.c 7.4 (Berkeley) %G% |
7dcbcb85 KB |
8 | */ |
9 | ||
b5652ce3 KB |
10 | #ifdef DEBUG |
11 | #include <sys/param.h> | |
12 | #include <sys/namei.h> | |
13 | #include <sys/vnode.h> | |
14 | ||
42e3d5a4 KB |
15 | #include <ufs/ufs/quota.h> |
16 | #include <ufs/ufs/inode.h> | |
b5652ce3 | 17 | |
42e3d5a4 KB |
18 | #include <ufs/lfs/lfs.h> |
19 | #include <ufs/lfs/lfs_extern.h> | |
7dcbcb85 KB |
20 | |
21 | void | |
b5652ce3 | 22 | lfs_dump_super(lfsp) |
42e3d5a4 | 23 | struct lfs *lfsp; |
7dcbcb85 KB |
24 | { |
25 | int i; | |
26 | ||
27 | (void)printf("%s%lx\t%s%lx\t%s%d\t%s%d\n", | |
28 | "magic ", lfsp->lfs_magic, | |
29 | "version ", lfsp->lfs_version, | |
30 | "size ", lfsp->lfs_size, | |
31 | "ssize ", lfsp->lfs_ssize); | |
32 | (void)printf("%s%d\t%s%d\t%s%d\t%s%d\n", | |
33 | "dsize ", lfsp->lfs_dsize, | |
34 | "bsize ", lfsp->lfs_bsize, | |
35 | "fsize ", lfsp->lfs_fsize, | |
36 | "frag ", lfsp->lfs_frag); | |
37 | ||
38 | (void)printf("%s%d\t%s%d\t%s%d\t%s%d\n", | |
39 | "minfree ", lfsp->lfs_minfree, | |
40 | "inopb ", lfsp->lfs_inopb, | |
41 | "ifpb ", lfsp->lfs_ifpb, | |
42 | "nindir ", lfsp->lfs_nindir); | |
43 | ||
44 | (void)printf("%s%d\t%s%d\t%s%d\n", | |
45 | "nseg ", lfsp->lfs_nseg, | |
46 | "nspf ", lfsp->lfs_nspf, | |
47 | "segtabsz ", lfsp->lfs_segtabsz); | |
48 | ||
49 | (void)printf("%s%lx\t%s%d\t%s%lx\t%s%d\n", | |
50 | "segmask ", lfsp->lfs_segmask, | |
51 | "segshift ", lfsp->lfs_segshift, | |
52 | "bmask ", lfsp->lfs_bmask, | |
53 | "bshift ", lfsp->lfs_bshift); | |
54 | ||
55 | (void)printf("%s%lx\t%s%d\t%s%lx\t%s%d\n", | |
56 | "ffmask ", lfsp->lfs_ffmask, | |
57 | "ffshift ", lfsp->lfs_ffshift, | |
58 | "fbmask ", lfsp->lfs_fbmask, | |
59 | "fbshift ", lfsp->lfs_fbshift); | |
60 | ||
61 | (void)printf("%s%d\t%s%lx\n", | |
62 | "fsbtodb ", lfsp->lfs_fsbtodb, | |
63 | "cksum ", lfsp->lfs_cksum); | |
64 | ||
65 | (void)printf("Superblock disk addresses:"); | |
66 | for (i = 0; i < LFS_MAXNUMSB; i++) | |
67 | (void)printf(" %lx", lfsp->lfs_sboffs[i]); | |
68 | (void)printf("\n"); | |
69 | ||
70 | (void)printf("Checkpoint Info\n"); | |
71 | (void)printf("%s%d\t%s%lx\t%s%d\n", | |
72 | "free ", lfsp->lfs_free, | |
73 | "idaddr ", lfsp->lfs_idaddr, | |
74 | "ifile ", lfsp->lfs_ifile); | |
75 | (void)printf("%s%lx\t%s%d\t%s%lx\t%s%lx\n", | |
76 | "bfree ", lfsp->lfs_bfree, | |
77 | "nfiles ", lfsp->lfs_nfiles, | |
78 | "lastseg ", lfsp->lfs_lastseg, | |
79 | "nextseg ", lfsp->lfs_nextseg); | |
80 | (void)printf("tstamp %lx\n", lfsp->lfs_tstamp); | |
81 | } | |
82 | ||
2b62f83c | 83 | void |
b5652ce3 | 84 | lfs_dump_dinode(dip) |
7dcbcb85 KB |
85 | DINODE *dip; |
86 | { | |
87 | int i; | |
88 | ||
6c4c42b6 | 89 | (void)printf("%s%u\t%s%d\t%s%u\t%s%u\t%s%lu\n", |
7dcbcb85 KB |
90 | "mode ", dip->di_mode, |
91 | "nlink ", dip->di_nlink, | |
92 | "uid ", dip->di_uid, | |
93 | "gid ", dip->di_gid, | |
6c4c42b6 KB |
94 | "size ", dip->di_size); |
95 | (void)printf("inum %ld\n", dip->di_inum); | |
7dcbcb85 KB |
96 | (void)printf("Direct Addresses\n"); |
97 | for (i = 0; i < NDADDR; i++) { | |
98 | (void)printf("\t%lx", dip->di_db[i]); | |
99 | if ((i % 6) == 5) | |
100 | (void)printf("\n"); | |
101 | } | |
102 | for (i = 0; i < NIADDR; i++) | |
103 | (void)printf("\t%lx", dip->di_ib[i]); | |
104 | (void)printf("\n"); | |
105 | } | |
106 | ||
b5652ce3 KB |
107 | /* XXX TEMPORARY */ |
108 | #include <sys/buf.h> | |
109 | #include <sys/mount.h> | |
110 | int | |
111 | lfs_umountdebug(mp) | |
112 | struct mount *mp; | |
7dcbcb85 | 113 | { |
b5652ce3 KB |
114 | struct vnode *vp; |
115 | int dirty; | |
116 | ||
117 | dirty = 0; | |
118 | if ((mp->mnt_flag & MNT_MPBUSY) == 0) | |
119 | panic("umountdebug: not busy"); | |
120 | loop: | |
121 | for (vp = mp->mnt_mounth; vp; vp = vp->v_mountf) { | |
122 | if (vget(vp)) | |
123 | goto loop; | |
124 | dirty += lfs_vinvalbuf(vp); | |
125 | vput(vp); | |
126 | if (vp->v_mount != mp) | |
127 | goto loop; | |
128 | } | |
129 | return (dirty); | |
7dcbcb85 | 130 | } |
275ca4f0 | 131 | |
b5652ce3 KB |
132 | int |
133 | lfs_vinvalbuf(vp) | |
134 | register struct vnode *vp; | |
275ca4f0 | 135 | { |
b5652ce3 KB |
136 | register struct buf *bp; |
137 | struct buf *nbp, *blist; | |
138 | int s, dirty = 0; | |
275ca4f0 | 139 | |
b5652ce3 KB |
140 | for (;;) { |
141 | if (blist = vp->v_dirtyblkhd) | |
142 | /* void */; | |
143 | else if (blist = vp->v_cleanblkhd) | |
144 | /* void */; | |
145 | else | |
146 | break; | |
147 | for (bp = blist; bp; bp = nbp) { | |
6f75d57e KB |
148 | printf("lfs_vinvalbuf: ino %d, lblkno %d, blkno %lx flags %xl\n", |
149 | VTOI(vp)->i_number, bp->b_lblkno, bp->b_blkno, bp->b_flags); | |
b5652ce3 KB |
150 | nbp = bp->b_blockf; |
151 | s = splbio(); | |
152 | if (bp->b_flags & B_BUSY) { | |
6f75d57e | 153 | printf("lfs_vinvalbuf: buffer busy, would normally sleep\n"); |
b5652ce3 KB |
154 | /* |
155 | bp->b_flags |= B_WANTED; | |
156 | sleep((caddr_t)bp, PRIBIO + 1); | |
157 | */ | |
158 | splx(s); | |
159 | break; | |
160 | } | |
161 | bremfree(bp); | |
162 | bp->b_flags |= B_BUSY; | |
163 | splx(s); | |
164 | if (bp->b_flags & B_DELWRI) { | |
165 | dirty++; /* XXX */ | |
6f75d57e | 166 | printf("lfs_vinvalbuf: buffer dirty (DELWRI). would normally write\n"); |
b5652ce3 KB |
167 | break; |
168 | } | |
169 | if (bp->b_vp != vp) | |
170 | reassignbuf(bp, bp->b_vp); | |
171 | else | |
172 | bp->b_flags |= B_INVAL; | |
173 | brelse(bp); | |
174 | } | |
175 | } | |
176 | if (vp->v_dirtyblkhd || vp->v_cleanblkhd) | |
177 | panic("lfs_vinvalbuf: flush failed"); | |
178 | return (dirty); | |
275ca4f0 | 179 | } |
b5652ce3 | 180 | #endif /* DEBUG */ |