From: Nathan Scott Date: Fri, 28 Sep 2001 00:30:25 +0000 (+0000) Subject: fix xfs_repair bug in handling a corrupt root directory inode with multiple "lost... X-Git-Tag: v2.0.0~46 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3079c6c09eacd6eeaacbfaae808b69b3deca8f78;p=thirdparty%2Fxfsprogs-dev.git fix xfs_repair bug in handling a corrupt root directory inode with multiple "lost+found" entries. --- diff --git a/doc/CHANGES b/doc/CHANGES index 64b436e54..3eaed2611 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,3 +1,7 @@ +xfsprogs-current + - fix xfs_repair bug in handling a corrupt root directory + inode with multiple "lost+found" entries + xfsprogs-1.3.8 (19 September 2001) - rewrote the LVM support used by mkfs.xfs to call external lvdisplay program to get volume geometry (mkp@mkp.net) diff --git a/repair/phase4.c b/repair/phase4.c index d665b0a0f..41103ff84 100644 --- a/repair/phase4.c +++ b/repair/phase4.c @@ -1019,7 +1019,7 @@ delete_orphanage(xfs_mount_t *mp) else res = shortform_delete_orphanage(mp, ino, dino, dbp, &dirty); - ASSERT((res == 0 && dirty == 0) || (res == 1 && dirty == 1)); + ASSERT((res == 0 && dirty == 0) || (res > 0 && dirty == 1)); break; default: break; @@ -1028,12 +1028,12 @@ delete_orphanage(xfs_mount_t *mp) if (res) { switch (dino->di_core.di_version) { case XFS_DINODE_VERSION_1: - INT_MOD(dino->di_core.di_onlink, ARCH_CONVERT, -1); + INT_MOD(dino->di_core.di_onlink, ARCH_CONVERT, -res); INT_SET(dino->di_core.di_nlink, ARCH_CONVERT, INT_GET(dino->di_core.di_onlink, ARCH_CONVERT)); break; case XFS_DINODE_VERSION_2: - INT_MOD(dino->di_core.di_nlink, ARCH_CONVERT, -1); + INT_MOD(dino->di_core.di_nlink, ARCH_CONVERT, -res); break; default: do_error("unknown version #%d in root inode\n",