Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Nov 2012 06:31:47 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r243017 - head/sbin/fsck_ffs
Message-ID:  <201211140631.qAE6Vl7t015984@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jeff
Date: Wed Nov 14 06:31:47 2012
New Revision: 243017
URL: http://svnweb.freebsd.org/changeset/base/243017

Log:
   - blk_equals() is too strict.  If the journal entry defines more frags
     than we're claiming it should still be considered an exact match.  This
     would previously leak frags that had been extended.
   - If there is a sequence number problem in the journal print the sequence
     numbers we've seen so far for debugging.
   - Clean up the block mask related debuging printfs.  Some are redundant.
  
  MFC after:	1 week

Modified:
  head/sbin/fsck_ffs/suj.c

Modified: head/sbin/fsck_ffs/suj.c
==============================================================================
--- head/sbin/fsck_ffs/suj.c	Wed Nov 14 06:23:32 2012	(r243016)
+++ head/sbin/fsck_ffs/suj.c	Wed Nov 14 06:31:47 2012	(r243017)
@@ -504,7 +504,7 @@ blk_equals(struct jblkrec *brec, ino_t i
 		return (0);
 	if (brec->jb_blkno + brec->jb_oldfrags != start)
 		return (0);
-	if (brec->jb_frags != frags)
+	if (brec->jb_frags < frags)
 		return (0);
 	return (1);
 }
@@ -551,7 +551,6 @@ blk_freemask(ufs2_daddr_t blk, ino_t ino
 		brec = (struct jblkrec *)srec->sr_rec;
 		/*
 		 * If the block overlaps but does not match
-		 * exactly it's a new allocation.  If it matches
 		 * exactly this record refers to the current
 		 * location.
 		 */
@@ -648,7 +647,8 @@ blk_free(ufs2_daddr_t bno, int mask, int
 	uint8_t *blksfree;
 
 	if (debug)
-		printf("Freeing %d frags at blk %jd\n", frags, bno);
+		printf("Freeing %d frags at blk %jd mask 0x%x\n",
+		    frags, bno, mask);
 	cg = dtog(fs, bno);
 	sc = cg_lookup(cg);
 	cgp = sc->sc_cgp;
@@ -1143,12 +1143,8 @@ ino_adjblks(struct suj_ino *sino)
 static void
 blk_free_visit(ino_t ino, ufs_lbn_t lbn, ufs2_daddr_t blk, int frags)
 {
-	int mask;
 
-	mask = blk_freemask(blk, ino, lbn, frags);
-	if (debug)
-		printf("blk %jd freemask 0x%X\n", blk, mask);
-	blk_free(blk, mask, frags);
+	blk_free(blk, blk_freemask(blk, ino, lbn, frags), frags);
 }
 
 /*
@@ -1163,8 +1159,6 @@ blk_free_lbn(ufs2_daddr_t blk, ino_t ino
 	int mask;
 
 	mask = blk_freemask(blk, ino, lbn, frags);
-	if (debug)
-		printf("blk %jd freemask 0x%X\n", blk, mask);
 	resid = 0;
 	if (lbn <= -NDADDR && follow && mask == 0)
 		indir_visit(ino, lbn, blk, &resid, blk_free_visit, VISIT_INDIR);
@@ -2334,6 +2328,10 @@ suj_prune(void)
 
 	}
 	if (newseq != oldseq) {
+		TAILQ_FOREACH(seg, &allsegs, ss_next) {
+			printf("%jd, ", seg->ss_rec.jsr_seq);
+		}
+		printf("\n");
 		err_suj("Journal file sequence mismatch %jd != %jd\n",
 		    newseq, oldseq);
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211140631.qAE6Vl7t015984>