xref: /csrg-svn/sys/ufs/lfs/lfs_debug.c (revision 51488)
151186Sbostic /*
251186Sbostic  * Copyright (c) 1989, 1991 The Regents of the University of California.
351186Sbostic  * All rights reserved.
451186Sbostic  *
551186Sbostic  * %sccs.include.redist.c%
651186Sbostic  *
7*51488Sbostic  *	@(#)lfs_debug.c	5.4 (Berkeley) 11/01/91
851186Sbostic  */
951186Sbostic 
10*51488Sbostic #ifdef DEBUG
11*51488Sbostic #include <sys/param.h>
12*51488Sbostic #include <sys/namei.h>
13*51488Sbostic #include <sys/vnode.h>
1451186Sbostic 
15*51488Sbostic #include <ufs/quota.h>
16*51488Sbostic #include <ufs/inode.h>
17*51488Sbostic 
18*51488Sbostic #include <lfs/lfs.h>
19*51488Sbostic #include <lfs/lfs_extern.h>
20*51488Sbostic 
2151186Sbostic void
22*51488Sbostic lfs_dump_super(lfsp)
2351186Sbostic 	LFS *lfsp;
2451186Sbostic {
2551186Sbostic 	int i;
2651186Sbostic 
2751186Sbostic 	(void)printf("%s%lx\t%s%lx\t%s%d\t%s%d\n",
2851186Sbostic 		"magic    ", lfsp->lfs_magic,
2951186Sbostic 		"version  ", lfsp->lfs_version,
3051186Sbostic 		"size     ", lfsp->lfs_size,
3151186Sbostic 		"ssize    ", lfsp->lfs_ssize);
3251186Sbostic 	(void)printf("%s%d\t%s%d\t%s%d\t%s%d\n",
3351186Sbostic 		"dsize    ", lfsp->lfs_dsize,
3451186Sbostic 		"bsize    ", lfsp->lfs_bsize,
3551186Sbostic 		"fsize    ", lfsp->lfs_fsize,
3651186Sbostic 		"frag     ", lfsp->lfs_frag);
3751186Sbostic 
3851186Sbostic 	(void)printf("%s%d\t%s%d\t%s%d\t%s%d\n",
3951186Sbostic 		"minfree  ", lfsp->lfs_minfree,
4051186Sbostic 		"inopb    ", lfsp->lfs_inopb,
4151186Sbostic 		"ifpb     ", lfsp->lfs_ifpb,
4251186Sbostic 		"nindir   ", lfsp->lfs_nindir);
4351186Sbostic 
4451186Sbostic 	(void)printf("%s%d\t%s%d\t%s%d\n",
4551186Sbostic 		"nseg     ", lfsp->lfs_nseg,
4651186Sbostic 		"nspf     ", lfsp->lfs_nspf,
4751186Sbostic 		"segtabsz ", lfsp->lfs_segtabsz);
4851186Sbostic 
4951186Sbostic 	(void)printf("%s%lx\t%s%d\t%s%lx\t%s%d\n",
5051186Sbostic 		"segmask  ", lfsp->lfs_segmask,
5151186Sbostic 		"segshift ", lfsp->lfs_segshift,
5251186Sbostic 		"bmask    ", lfsp->lfs_bmask,
5351186Sbostic 		"bshift   ", lfsp->lfs_bshift);
5451186Sbostic 
5551186Sbostic 	(void)printf("%s%lx\t%s%d\t%s%lx\t%s%d\n",
5651186Sbostic 		"ffmask   ", lfsp->lfs_ffmask,
5751186Sbostic 		"ffshift  ", lfsp->lfs_ffshift,
5851186Sbostic 		"fbmask   ", lfsp->lfs_fbmask,
5951186Sbostic 		"fbshift  ", lfsp->lfs_fbshift);
6051186Sbostic 
6151186Sbostic 	(void)printf("%s%d\t%s%lx\n",
6251186Sbostic 		"fsbtodb  ", lfsp->lfs_fsbtodb,
6351186Sbostic 		"cksum    ", lfsp->lfs_cksum);
6451186Sbostic 
6551186Sbostic 	(void)printf("Superblock disk addresses:");
6651186Sbostic 	for (i = 0; i < LFS_MAXNUMSB; i++)
6751186Sbostic 		(void)printf(" %lx", lfsp->lfs_sboffs[i]);
6851186Sbostic 	(void)printf("\n");
6951186Sbostic 
7051186Sbostic 	(void)printf("Checkpoint Info\n");
7151186Sbostic 	(void)printf("%s%d\t%s%lx\t%s%d\n",
7251186Sbostic 		"free     ", lfsp->lfs_free,
7351186Sbostic 		"idaddr   ", lfsp->lfs_idaddr,
7451186Sbostic 		"ifile    ", lfsp->lfs_ifile);
7551186Sbostic 	(void)printf("%s%lx\t%s%d\t%s%lx\t%s%lx\n",
7651186Sbostic 		"bfree    ", lfsp->lfs_bfree,
7751186Sbostic 		"nfiles   ", lfsp->lfs_nfiles,
7851186Sbostic 		"lastseg  ", lfsp->lfs_lastseg,
7951186Sbostic 		"nextseg  ", lfsp->lfs_nextseg);
8051186Sbostic 	(void)printf("tstamp   %lx\n", lfsp->lfs_tstamp);
8151186Sbostic }
8251186Sbostic 
8351343Sbostic void
84*51488Sbostic lfs_dump_dinode(dip)
8551186Sbostic 	DINODE *dip;
8651186Sbostic {
8751186Sbostic 	int i;
8851186Sbostic 
8951186Sbostic 	(void)printf("%s%d\t%s%d\t%s%d\t%s%d\t%s%d\n",
9051186Sbostic 		"mode  ", dip->di_mode,
9151186Sbostic 		"nlink ", dip->di_nlink,
9251186Sbostic 		"uid   ", dip->di_uid,
9351186Sbostic 		"gid   ", dip->di_gid,
9451186Sbostic 		"size  ", dip->di_size);
9551186Sbostic 	(void)printf("inum  %d\n", dip->di_inum);
9651186Sbostic 	(void)printf("Direct Addresses\n");
9751186Sbostic 	for (i = 0; i < NDADDR; i++) {
9851186Sbostic 		(void)printf("\t%lx", dip->di_db[i]);
9951186Sbostic 		if ((i % 6) == 5)
10051186Sbostic 			(void)printf("\n");
10151186Sbostic 	}
10251186Sbostic 	for (i = 0; i < NIADDR; i++)
10351186Sbostic 		(void)printf("\t%lx", dip->di_ib[i]);
10451186Sbostic 	(void)printf("\n");
10551186Sbostic }
10651186Sbostic 
107*51488Sbostic /* XXX TEMPORARY */
108*51488Sbostic #include <sys/buf.h>
109*51488Sbostic #include <sys/mount.h>
110*51488Sbostic int
111*51488Sbostic lfs_umountdebug(mp)
112*51488Sbostic 	struct mount *mp;
11351186Sbostic {
114*51488Sbostic 	struct vnode *vp;
115*51488Sbostic 	int dirty;
116*51488Sbostic 
117*51488Sbostic 	dirty = 0;
118*51488Sbostic 	if ((mp->mnt_flag & MNT_MPBUSY) == 0)
119*51488Sbostic 		panic("umountdebug: not busy");
120*51488Sbostic loop:
121*51488Sbostic 	for (vp = mp->mnt_mounth; vp; vp = vp->v_mountf) {
122*51488Sbostic 		if (vget(vp))
123*51488Sbostic 			goto loop;
124*51488Sbostic 		dirty += lfs_vinvalbuf(vp);
125*51488Sbostic 		vput(vp);
126*51488Sbostic 		if (vp->v_mount != mp)
127*51488Sbostic 			goto loop;
128*51488Sbostic 	}
129*51488Sbostic 	return (dirty);
13051186Sbostic }
13151215Sbostic 
132*51488Sbostic int
133*51488Sbostic lfs_vinvalbuf(vp)
134*51488Sbostic 	register struct vnode *vp;
13551215Sbostic {
136*51488Sbostic 	register struct buf *bp;
137*51488Sbostic 	struct buf *nbp, *blist;
138*51488Sbostic 	int s, dirty = 0;
13951215Sbostic 
140*51488Sbostic 	for (;;) {
141*51488Sbostic 		if (blist = vp->v_dirtyblkhd)
142*51488Sbostic 			/* void */;
143*51488Sbostic 		else if (blist = vp->v_cleanblkhd)
144*51488Sbostic 			/* void */;
145*51488Sbostic 		else
146*51488Sbostic 			break;
147*51488Sbostic 		for (bp = blist; bp; bp = nbp) {
148*51488Sbostic printf("lfs_vinvalbuf: ino %d, lblkno %d, blkno %lx flags %xl\n",
149*51488Sbostic VTOI(vp)->i_number, bp->b_lblkno, bp->b_blkno, bp->b_flags);
150*51488Sbostic 			nbp = bp->b_blockf;
151*51488Sbostic 			s = splbio();
152*51488Sbostic 			if (bp->b_flags & B_BUSY) {
153*51488Sbostic printf("lfs_vinvalbuf: buffer busy, would normally sleep\n");
154*51488Sbostic /*
155*51488Sbostic 				bp->b_flags |= B_WANTED;
156*51488Sbostic 				sleep((caddr_t)bp, PRIBIO + 1);
157*51488Sbostic */
158*51488Sbostic 				splx(s);
159*51488Sbostic 				break;
160*51488Sbostic 			}
161*51488Sbostic 			bremfree(bp);
162*51488Sbostic 			bp->b_flags |= B_BUSY;
163*51488Sbostic 			splx(s);
164*51488Sbostic 			if (bp->b_flags & B_DELWRI) {
165*51488Sbostic 				dirty++;			/* XXX */
166*51488Sbostic printf("lfs_vinvalbuf: buffer dirty (DELWRI). would normally write\n");
167*51488Sbostic 				break;
168*51488Sbostic 			}
169*51488Sbostic 			if (bp->b_vp != vp)
170*51488Sbostic 				reassignbuf(bp, bp->b_vp);
171*51488Sbostic 			else
172*51488Sbostic 				bp->b_flags |= B_INVAL;
173*51488Sbostic 			brelse(bp);
174*51488Sbostic 		}
175*51488Sbostic 	}
176*51488Sbostic 	if (vp->v_dirtyblkhd || vp->v_cleanblkhd)
177*51488Sbostic 		panic("lfs_vinvalbuf: flush failed");
178*51488Sbostic 	return (dirty);
17951215Sbostic }
180*51488Sbostic #endif /* DEBUG */
181