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