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