1 /*- 2 * Copyright (c) 1992, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)print.c 8.1 (Berkeley) 06/04/93"; 10 #endif /* not lint */ 11 12 #include <sys/param.h> 13 #include <sys/ucred.h> 14 #include <sys/mount.h> 15 #include <sys/time.h> 16 17 #include <ufs/ufs/dinode.h> 18 #include <ufs/lfs/lfs.h> 19 20 #include <stdlib.h> 21 #include <stdio.h> 22 #include "clean.h" 23 24 /* 25 * Print out a summary block; return number of blocks in segment; 0 26 * for empty segment or corrupt segment. 27 * Returns a pointer to the array of inode addresses. 28 */ 29 int 30 dump_summary(lfsp, sp, flags, iaddrp) 31 struct lfs *lfsp; 32 SEGSUM *sp; 33 u_long flags; 34 daddr_t **iaddrp; 35 { 36 int i, j, numblocks; 37 daddr_t *dp; 38 39 FINFO *fp; 40 int ck; 41 42 if (sp->ss_sumsum != (ck = cksum(&sp->ss_datasum, 43 LFS_SUMMARY_SIZE - sizeof(sp->ss_sumsum)))) 44 return(-1); 45 46 if (flags & DUMP_SUM_HEADER) { 47 (void)printf(" %s0x%X\t%s%d\t%s%d\n %s0x%X\t%s0x%X", 48 "next ", sp->ss_next, 49 "nfinfo ", sp->ss_nfinfo, 50 "ninos ", sp->ss_ninos, 51 "sumsum ", sp->ss_sumsum, 52 "datasum ", sp->ss_datasum ); 53 (void)printf("\tcreate %s", ctime((time_t *)&sp->ss_create)); 54 } 55 56 numblocks = (sp->ss_ninos + INOPB(lfsp) - 1) / INOPB(lfsp); 57 58 /* Dump out inode disk addresses */ 59 if (flags & DUMP_INODE_ADDRS) 60 printf(" Inode addresses:"); 61 62 dp = (daddr_t *)((caddr_t)sp + LFS_SUMMARY_SIZE); 63 for (--dp, i = 0; i < sp->ss_ninos; --dp) 64 if (flags & DUMP_INODE_ADDRS) { 65 (void)printf("\t0x%lx", *dp); 66 if (++i % 7 == 0) 67 (void)printf("\n"); 68 } else 69 ++i; 70 if (iaddrp) 71 *iaddrp = ++dp; 72 if (flags & DUMP_INODE_ADDRS) 73 printf("\n"); 74 75 for (fp = (FINFO *)(sp + 1), i = 0; i < sp->ss_nfinfo; ++i) { 76 numblocks += fp->fi_nblocks; 77 if (flags & DUMP_FINFOS) { 78 (void)printf(" %s%d version %d nblocks %d\n", 79 "FINFO for inode: ", fp->fi_ino, 80 fp->fi_version, fp->fi_nblocks); 81 dp = &(fp->fi_blocks[0]); 82 for (j = 0; j < fp->fi_nblocks; j++, dp++) { 83 (void)printf("\t%d", *dp); 84 if ((j % 8) == 7) 85 (void)printf("\n"); 86 } 87 if ((j % 8) != 0) 88 (void)printf("\n"); 89 fp = (FINFO *)dp; 90 } else { 91 fp = (FINFO *)(&fp->fi_blocks[fp->fi_nblocks]); 92 } 93 } 94 return (numblocks); 95 } 96 97 #ifdef VERBOSE 98 void 99 dump_cleaner_info(ipage) 100 void *ipage; 101 { 102 CLEANERINFO *cip; 103 104 cip = (CLEANERINFO *)ipage; 105 (void)printf("segments clean\t%d\tsegments dirty\t%d\n\n", 106 cip->clean, cip->dirty); 107 } 108 109 void 110 dump_super(lfsp) 111 struct lfs *lfsp; 112 { 113 int i; 114 115 (void)printf("%s0x%X\t%s0x%X\t%s%d\t%s%d\n", 116 "magic ", lfsp->lfs_magic, 117 "version ", lfsp->lfs_version, 118 "size ", lfsp->lfs_size, 119 "ssize ", lfsp->lfs_ssize); 120 (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", 121 "dsize ", lfsp->lfs_dsize, 122 "bsize ", lfsp->lfs_bsize, 123 "fsize ", lfsp->lfs_fsize, 124 "frag ", lfsp->lfs_frag); 125 126 (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", 127 "minfree ", lfsp->lfs_minfree, 128 "inopb ", lfsp->lfs_inopb, 129 "ifpb ", lfsp->lfs_ifpb, 130 "nindir ", lfsp->lfs_nindir); 131 132 (void)printf("%s%d\t\t%s%d\t%s%d\t%s%d\n", 133 "nseg ", lfsp->lfs_nseg, 134 "nspf ", lfsp->lfs_nspf, 135 "cleansz ", lfsp->lfs_cleansz, 136 "segtabsz ", lfsp->lfs_segtabsz); 137 138 (void)printf("%s0x%X\t%s%d\t%s0x%X\t%s%d\n", 139 "segmask ", lfsp->lfs_segmask, 140 "segshift ", lfsp->lfs_segshift, 141 "bmask ", lfsp->lfs_bmask, 142 "bshift ", lfsp->lfs_bshift); 143 144 (void)printf("%s0x%X\t\t%s%d\t%s0x%X\t%s%d\n", 145 "ffmask ", lfsp->lfs_ffmask, 146 "ffshift ", lfsp->lfs_ffshift, 147 "fbmask ", lfsp->lfs_fbmask, 148 "fbshift ", lfsp->lfs_fbshift); 149 150 (void)printf("%s%d\t\t%s0x%X\t%s0x%qx\n", 151 "fsbtodb ", lfsp->lfs_fsbtodb, 152 "cksum ", lfsp->lfs_cksum, 153 "maxfilesize ", lfsp->lfs_maxfilesize); 154 155 (void)printf("Superblock disk addresses:\t"); 156 for (i = 0; i < LFS_MAXNUMSB; i++) { 157 (void)printf(" 0x%X", lfsp->lfs_sboffs[i]); 158 if ( i == (LFS_MAXNUMSB >> 1)) 159 (void)printf("\n\t\t\t\t"); 160 } 161 (void)printf("\n"); 162 163 (void)printf("Checkpoint Info\n"); 164 (void)printf("%s%d\t%s0x%X\t%s%d\n", 165 "free ", lfsp->lfs_free, 166 "idaddr ", lfsp->lfs_idaddr, 167 "ifile ", lfsp->lfs_ifile); 168 (void)printf("%s%d\t%s%d\t%s%d\n", 169 "bfree ", lfsp->lfs_bfree, 170 "avail ", lfsp->lfs_avail, 171 "uinodes ", lfsp->lfs_uinodes); 172 (void)printf("%s%d\t%s0x%X\t%s0x%X\n%s0x%X\t%s0x%X\t", 173 "nfiles ", lfsp->lfs_nfiles, 174 "lastseg ", lfsp->lfs_lastseg, 175 "nextseg ", lfsp->lfs_nextseg, 176 "curseg ", lfsp->lfs_curseg, 177 "offset ", lfsp->lfs_offset); 178 (void)printf("tstamp %s", ctime((time_t *)&lfsp->lfs_tstamp)); 179 (void)printf("\nIn-Memory Information\n"); 180 (void)printf("%s%d\t%s0x%X\t%s%d\t%s%d\t%s%d\n", 181 "seglock ", lfsp->lfs_seglock, 182 "iocount ", lfsp->lfs_iocount, 183 "writer ", lfsp->lfs_writer, 184 "dirops ", lfsp->lfs_dirops, 185 "doifile ", lfsp->lfs_doifile ); 186 (void)printf("%s%d\t%s%d\t%s0x%X\t%s%d\n", 187 "nactive ", lfsp->lfs_nactive, 188 "fmod ", lfsp->lfs_fmod, 189 "clean ", lfsp->lfs_clean, 190 "ronly ", lfsp->lfs_ronly); 191 } 192 #endif /* VERBOSE */ 193