Author: scottl
Date: Tue Jan 22 07:38:43 2013
New Revision: 245778
URL: http://svnweb.freebsd.org/changeset/base/245778

Log:
  MFC r243017:
  
   - 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.

Modified:
  stable/9/sbin/fsck_ffs/suj.c
Directory Properties:
  stable/9/sbin/fsck_ffs/   (props changed)

Modified: stable/9/sbin/fsck_ffs/suj.c
==============================================================================
--- stable/9/sbin/fsck_ffs/suj.c        Tue Jan 22 07:32:26 2013        
(r245777)
+++ stable/9/sbin/fsck_ffs/suj.c        Tue Jan 22 07:38:43 2013        
(r245778)
@@ -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;
@@ -1140,12 +1140,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);
 }
 
 /*
@@ -1160,8 +1156,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);
@@ -2328,6 +2322,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);
        }
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to