summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ffs/pass5.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/fsck_ffs/pass5.c')
-rw-r--r--sbin/fsck_ffs/pass5.c70
1 files changed, 68 insertions, 2 deletions
diff --git a/sbin/fsck_ffs/pass5.c b/sbin/fsck_ffs/pass5.c
index d5edaac..e395625 100644
--- a/sbin/fsck_ffs/pass5.c
+++ b/sbin/fsck_ffs/pass5.c
@@ -53,12 +53,12 @@ void
pass5()
{
int c, blk, frags, basesize, sumsize, mapsize, savednrpos = 0;
- int inomapsize, blkmapsize;
+ int inomapsize, blkmapsize, astart, aend, ustart, uend;
struct fs *fs = &sblock;
struct cg *cg = &cgrp;
ufs_daddr_t dbase, dmax;
ufs_daddr_t d;
- long i, j, k;
+ long i, j, k, l, m, n;
struct csum *cs;
struct csum cstotal;
struct inodesc idesc[3];
@@ -314,6 +314,72 @@ pass5()
&cg_blktot(newcg)[0], (size_t)sumsize);
cgdirty();
}
+ if (debug) {
+ for (i = 0; i < inomapsize; i++) {
+ j = cg_inosused(newcg)[i];
+ k = cg_inosused(cg)[i];
+ if (j == k)
+ continue;
+ for (m = 0, l = 1; m < NBBY; m++, l <<= 1) {
+ if ((j & l) == (k & l))
+ continue;
+ n = c * fs->fs_ipg + i * NBBY + m;
+ if ((j & l) != 0)
+ pwarn("%s INODE %d MARKED %s\n",
+ "ALLOCATED", n, "FREE");
+ else
+ pwarn("%s INODE %d MARKED %s\n",
+ "UNALLOCATED", n, "USED");
+ }
+ }
+ astart = ustart = -1;
+ for (i = 0; i < blkmapsize; i++) {
+ j = cg_blksfree(cg)[i];
+ k = cg_blksfree(newcg)[i];
+ if (j == k)
+ continue;
+ for (m = 0, l = 1; m < NBBY; m++, l <<= 1) {
+ if ((j & l) == (k & l))
+ continue;
+ n = c * fs->fs_fpg + i * NBBY + m;
+ if ((j & l) != 0) {
+ if (astart == -1) {
+ astart = aend = n;
+ continue;
+ }
+ if (aend + 1 == n) {
+ aend = n;
+ continue;
+ }
+ pwarn("%s FRAGS %d-%d %s\n",
+ "ALLOCATED", astart, aend,
+ "MARKED FREE");
+ astart = aend = n;
+ } else {
+ if (ustart == -1) {
+ ustart = uend = n;
+ continue;
+ }
+ if (uend + 1 == n) {
+ uend = n;
+ continue;
+ }
+ pwarn("%s FRAGS %d-%d %s\n",
+ "UNALLOCATED", ustart, uend,
+ "MARKED USED");
+ ustart = uend = n;
+ }
+ }
+ }
+ if (astart != -1)
+ pwarn("%s FRAGS %d-%d %s\n",
+ "ALLOCATED", astart, aend,
+ "MARKED FREE");
+ if (ustart != -1)
+ pwarn("%s FRAGS %d-%d %s\n",
+ "UNALLOCATED", ustart, uend,
+ "MARKED USED");
+ }
if (usedsoftdep) {
for (i = 0; i < inomapsize; i++) {
j = cg_inosused(newcg)[i];
OpenPOWER on IntegriCloud