From: Eryu Guan Date: Sun, 23 Aug 2015 23:21:01 +0000 (+1000) Subject: repair: fix wrong logic when validating node magic number X-Git-Tag: v4.2.0-rc3~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=621b5ffff91aade1c0998c685378bff15e869a94;p=thirdparty%2Fxfsprogs-dev.git repair: fix wrong logic when validating node magic number Magic number is wrong only when != XFS_DA_NODE_MAGIC and != XFS_DA3_NODE_MAGIC. This is triggered by shared/002 when testing 512 block size XFS. Phase 1 - find and verify superblock... Phase 2 - using internal log - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan (but don't clear) agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 bad magic number febe in block 64 (108) for directory inode 35 ...... Fix it by changing "||" to "&&". Signed-off-by: Eryu Guan Reviewed-by: Dave Chinner Signed-off-by: Dave Chinner --- diff --git a/repair/attr_repair.c b/repair/attr_repair.c index 62f80e7ab..83a07a80c 100644 --- a/repair/attr_repair.c +++ b/repair/attr_repair.c @@ -570,7 +570,7 @@ verify_da_path(xfs_mount_t *mp, * entry count, verify level */ bad = 0; - if (nodehdr.magic != XFS_DA_NODE_MAGIC || + if (nodehdr.magic != XFS_DA_NODE_MAGIC && nodehdr.magic != XFS_DA3_NODE_MAGIC) { do_warn( _("bad magic number %x in block %u (%" PRIu64 ") for directory inode %" PRIu64 "\n"),