]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_repair: make directory freespace table CRC format aware.
authorDave Chinner <dchinner@redhat.com>
Fri, 7 Jun 2013 00:25:59 +0000 (10:25 +1000)
committerBen Myers <bpm@sgi.com>
Tue, 6 Aug 2013 20:46:35 +0000 (15:46 -0500)
We fail to take into account the format of the directory block when
reading the best free space form a directory data block for free
space block verification. This causes occasionaly failures in
xfstests.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
repair/phase6.c

index 1fdd4c8392df36808b440105b7c0eb49a4ab54f4..2905a1cff925bd2c61313b2b7853b7e6a52d95a1 100644 (file)
@@ -1395,6 +1395,7 @@ longform_dir2_entry_check_data(
        xfs_dir2_db_t           db;
        xfs_dir2_data_entry_t   *dep;
        xfs_dir2_data_unused_t  *dup;
+       struct xfs_dir2_data_free *bf;
        char                    *endptr;
        int                     error;
        xfs_fsblock_t           firstblock;
@@ -1808,7 +1809,10 @@ _("entry \"%s\" in dir inode %" PRIu64 " inconsistent with .. value (%" PRIu64 "
                libxfs_dir2_data_log_header(tp, bp);
        libxfs_bmap_finish(&tp, &flist, &committed);
        libxfs_trans_commit(tp, 0);
-       freetab->ents[db].v = be16_to_cpu(d->bestfree[0].length);
+
+       /* record the largest free space in the freetab for later checking */
+       bf = xfs_dir3_data_bestfree_p(d);
+       freetab->ents[db].v = be16_to_cpu(bf[0].length);
        freetab->ents[db].s = 0;
 }