xref: /csrg-svn/sys/ufs/lfs/lfs_debug.c (revision 53146)
151186Sbostic /*
251496Sbostic  * Copyright (c) 1991 The Regents of the University of California.
351186Sbostic  * All rights reserved.
451186Sbostic  *
551186Sbostic  * %sccs.include.redist.c%
651186Sbostic  *
7*53146Sbostic  *	@(#)lfs_debug.c	7.5 (Berkeley) 04/08/92
851186Sbostic  */
951186Sbostic 
1051488Sbostic #ifdef DEBUG
1151488Sbostic #include <sys/param.h>
1251488Sbostic #include <sys/namei.h>
1351488Sbostic #include <sys/vnode.h>
1451186Sbostic 
1551496Sbostic #include <ufs/ufs/quota.h>
1651496Sbostic #include <ufs/ufs/inode.h>
1751488Sbostic 
1851496Sbostic #include <ufs/lfs/lfs.h>
1951496Sbostic #include <ufs/lfs/lfs_extern.h>
2051488Sbostic 
2151186Sbostic void
2251488Sbostic lfs_dump_super(lfsp)
2351496Sbostic 	struct 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
8451488Sbostic lfs_dump_dinode(dip)
85*53146Sbostic 	struct dinode *dip;
8651186Sbostic {
8751186Sbostic 	int i;
8851186Sbostic 
8952083Sbostic 	(void)printf("%s%u\t%s%d\t%s%u\t%s%u\t%s%lu\n",
9051186Sbostic 		"mode  ", dip->di_mode,
9151186Sbostic 		"nlink ", dip->di_nlink,
9251186Sbostic 		"uid   ", dip->di_uid,
9351186Sbostic 		"gid   ", dip->di_gid,
9452083Sbostic 		"size  ", dip->di_size);
9552083Sbostic 	(void)printf("inum  %ld\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 
10751488Sbostic /* XXX TEMPORARY */
10851488Sbostic #include <sys/buf.h>
10951488Sbostic #include <sys/mount.h>
11051488Sbostic int
11151488Sbostic lfs_umountdebug(mp)
11251488Sbostic 	struct mount *mp;
11351186Sbostic {
11451488Sbostic 	struct vnode *vp;
11551488Sbostic 	int dirty;
11651488Sbostic 
11751488Sbostic 	dirty = 0;
11851488Sbostic 	if ((mp->mnt_flag & MNT_MPBUSY) == 0)
11951488Sbostic 		panic("umountdebug: not busy");
12051488Sbostic loop:
12151488Sbostic 	for (vp = mp->mnt_mounth; vp; vp = vp->v_mountf) {
12251488Sbostic 		if (vget(vp))
12351488Sbostic 			goto loop;
12451488Sbostic 		dirty += lfs_vinvalbuf(vp);
12551488Sbostic 		vput(vp);
12651488Sbostic 		if (vp->v_mount != mp)
12751488Sbostic 			goto loop;
12851488Sbostic 	}
12951488Sbostic 	return (dirty);
13051186Sbostic }
13151215Sbostic 
13251488Sbostic int
13351488Sbostic lfs_vinvalbuf(vp)
13451488Sbostic 	register struct vnode *vp;
13551215Sbostic {
13651488Sbostic 	register struct buf *bp;
13751488Sbostic 	struct buf *nbp, *blist;
13851488Sbostic 	int s, dirty = 0;
13951215Sbostic 
14051488Sbostic 	for (;;) {
14151488Sbostic 		if (blist = vp->v_dirtyblkhd)
14251488Sbostic 			/* void */;
14351488Sbostic 		else if (blist = vp->v_cleanblkhd)
14451488Sbostic 			/* void */;
14551488Sbostic 		else
14651488Sbostic 			break;
14751488Sbostic 		for (bp = blist; bp; bp = nbp) {
14851858Sbostic 	printf("lfs_vinvalbuf: ino %d, lblkno %d, blkno %lx flags %xl\n",
14951858Sbostic 	     VTOI(vp)->i_number, bp->b_lblkno, bp->b_blkno, bp->b_flags);
15051488Sbostic 			nbp = bp->b_blockf;
15151488Sbostic 			s = splbio();
15251488Sbostic 			if (bp->b_flags & B_BUSY) {
15351858Sbostic 	printf("lfs_vinvalbuf: buffer busy, would normally sleep\n");
15451488Sbostic /*
15551488Sbostic 				bp->b_flags |= B_WANTED;
15651488Sbostic 				sleep((caddr_t)bp, PRIBIO + 1);
15751488Sbostic */
15851488Sbostic 				splx(s);
15951488Sbostic 				break;
16051488Sbostic 			}
16151488Sbostic 			bremfree(bp);
16251488Sbostic 			bp->b_flags |= B_BUSY;
16351488Sbostic 			splx(s);
16451488Sbostic 			if (bp->b_flags & B_DELWRI) {
16551488Sbostic 				dirty++;			/* XXX */
16651858Sbostic 	printf("lfs_vinvalbuf: buffer dirty (DELWRI). would normally write\n");
16751488Sbostic 				break;
16851488Sbostic 			}
16951488Sbostic 			if (bp->b_vp != vp)
17051488Sbostic 				reassignbuf(bp, bp->b_vp);
17151488Sbostic 			else
17251488Sbostic 				bp->b_flags |= B_INVAL;
17351488Sbostic 			brelse(bp);
17451488Sbostic 		}
17551488Sbostic 	}
17651488Sbostic 	if (vp->v_dirtyblkhd || vp->v_cleanblkhd)
17751488Sbostic 		panic("lfs_vinvalbuf: flush failed");
17851488Sbostic 	return (dirty);
17951215Sbostic }
18051488Sbostic #endif /* DEBUG */
181