static char *sccsid
= "@(#)icheck.c 1.8 (Berkeley) %G%";
struct dinode itab
[MAXIPG
];
daddr_t d
, cgd
, cbase
, b
;
printf("cannot open %s\n", file
);
bread(SBLOCK
, (char *)&sblock
, BSIZE
);
if (sblock
.fs_magic
!= FS_MAGIC
) {
printf("%s: bad magic number\n", file
);
for (n
= 0; n
< howmany(cssize(&sblock
), BSIZE
); n
++) {
sblock
.fs_csp
[n
] = (struct csum
*)calloc(1, BSIZE
);
bread(csaddr(&sblock
) + (n
* FRAG
),
(char *)sblock
.fs_csp
[n
], BSIZE
);
n
= (sblock
.fs_size
*FRAG
+ BITS
-1) / BITS
;
bmap
= malloc((unsigned)n
);
printf("Not enough core; duplicates unchecked\n");
for (i
=0; i
<(unsigned)n
; i
++)
for (c
=0; c
< sblock
.fs_ncg
; c
++) {
for (d
= cgbase(c
, &sblock
); d
< cgd
; d
+= FRAG
)
for (; cgd
< d
; cgd
+= FRAG
)
chk(cgd
, "inode", BSIZE
);
d
+= howmany(cssize(&sblock
), FSIZE
);
for (; cgd
< d
; cgd
+= FRAG
)
for (c
= 0; c
< sblock
.fs_ncg
; c
++) {
bread(cgimin(c
,&sblock
), (char *)itab
,
sblock
.fs_ipg
* sizeof (struct dinode
));
for (j
=0; j
< sblock
.fs_ipg
; j
++) {
bread(SBLOCK
, (char *)&sblock
, sizeof(sblock
));
for (c
= 0; c
< sblock
.fs_ncg
; c
++) {
cbase
= cgbase(c
,&sblock
);
bread(cgtod(c
,&sblock
), (char *)&cgrp
, sblock
.fs_cgsize
);
for (b
= 0; b
< sblock
.fs_fpg
; b
+= FRAG
) {
if (isblock(cgrp
.cg_free
, b
/ FRAG
)) {
chk(cbase
+b
, "block", BSIZE
);
for (d
= 0; d
< FRAG
; d
++)
if (isset(cgrp
.cg_free
, b
+d
)) {
chk(cbase
+b
+d
, "frag", FSIZE
);
i
= nrfile
+ ndfile
+ ncfile
+ nbfile
+ nmcfile
;
printf("files %6u (r=%u,d=%u,b=%u,c=%u,mc=%u)\n",
i
, nrfile
, ndfile
, nbfile
, ncfile
, nmcfile
);
printf("files %u (r=%u,d=%u,b=%u,c=%u,mc=%u)\n",
i
, nrfile
, ndfile
, nbfile
, ncfile
, nmcfile
);
n
= (nblock
+ nindir
+ niindir
) * FRAG
+ nfrag
;
printf("used %ld (i=%ld,ii=%ld,b=%ld,f=%ld)\n",
n
, nindir
, niindir
, nblock
, nfrag
);
printf("free %ld (b=%ld,f=%ld)\n", nffree
+ FRAG
* nbfree
,
printf("used %7ld (i=%ld,ii=%ld,b=%ld,f=%ld)\n",
n
, nindir
, niindir
, nblock
, nfrag
);
printf("free %7ld (b=%ld,f=%ld)\n", nffree
+ FRAG
* nbfree
,
for (d
= 0; d
< sblock
.fs_size
; d
++)
printf("%ld missing\n", d
);
printf("missing%5ld\n", n
);
register struct dinode
*ip
;
register int i
, j
, k
, siz
;
printf("bad mode %u\n", ino
);
for (i
= 0; i
< NDADDR
; i
++) {
chk(db
, "data (block)", siz
);
nfrag
+= howmany(siz
, FSIZE
);
for(i
= 0; i
< NIADDR
; i
++) {
if (chk(ib
, "1st indirect", BSIZE
))
bread(ib
, (char *)ind1
, BSIZE
);
for (j
= 0; j
< NINDIR
; j
++) {
siz
= dblksize(ip
, NDADDR
+ j
);
chk(ib
, "data (large)", siz
);
nfrag
+= howmany(siz
, FSIZE
);
if (chk(ib
, "2nd indirect", BSIZE
))
bread(ib
, (char *)ind2
, BSIZE
);
for (k
= 0; k
< NINDIR
; k
++) {
NDADDR
+ NINDIR
* (i
+ j
) + k
);
chk(ib
, "data (huge)", siz
);
nfrag
+= howmany(siz
, FSIZE
);
bno
<cgdmin(cg
,&sblock
) || bno
>= FRAG
* sblock
.fs_size
) {
printf("%ld bad; inode=%u, class=%s\n", bno
, ino
, s
);
printf("%ld dup block; inode=%u, class=%s\n",
for (n
= 0; n
< size
/ FSIZE
; n
++) {
if (duped(bno
+ n
, FSIZE
)) {
printf("%ld dup frag; inode=%u, class=%s\n",
for (n
=0; blist
[n
] != -1; n
++)
printf("%ld arg; inode=%u, class=%s\n", bno
, ino
, s
);
if (size
!= FSIZE
&& size
!= BSIZE
)
printf("bad size %d to duped\n", size
);
printf("bad bno %d to duped\n", bno
);
if (isblock(bmap
, bno
/FRAG
))
setblock(bmap
, bno
/FRAG
);
if ((i
= read(fi
, buf
, cnt
)) != cnt
) {