From: Dave Chinner Date: Tue, 30 Oct 2018 21:54:59 +0000 (-0500) Subject: Revert "xfs_repair: treat zero da btree pointers as corruption" X-Git-Tag: v4.19.0-rc1~2 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fxfsprogs-dev.git;a=commitdiff_plain;h=71a6af8568127a546b282267e20653631a486cd6 Revert "xfs_repair: treat zero da btree pointers as corruption" This reverts commit 67a79e2cc9320aaf269cd00e9c8d16892931886d. A root LEAFN block can exist in a directory. When we convert from leaf format (LEAF1 - internal free list) to node format (LEAFN - external free list) the only change to the single root leaf block is that it's magic number is changed from LEAF1 to LEAFN. We don't actually end up with DA nodes in the tree until the LEAFN node is split, and that requires a couple more dirents to be added to the directory to fill the LEAFN block up completely. Then it will split and create a DA node root block pointing to multiple LEAFN leaf blocks. Hence restore the old behaviour where we skip the DA node tree rebuild if there is a LEAFN root block found as there is no tree to rebuild. Signed-off-by: Dave Chinner Reviewed-by: Eric Sandeen Signed-off-by: Eric Sandeen --- diff --git a/repair/dir2.c b/repair/dir2.c index 3374ae722..ba5763ed3 100644 --- a/repair/dir2.c +++ b/repair/dir2.c @@ -1242,11 +1242,11 @@ process_node_dir2( return 1; /* - * Directories with a root marked XFS_DIR2_LEAFN_MAGIC are corrupt + * Skip directories with a root marked XFS_DIR2_LEAFN_MAGIC */ if (bno == 0) { - err_release_da_cursor(mp, &da_cursor, 0); - return 1; + release_da_cursor(mp, &da_cursor, 0); + return 0; } else { /* * Now pass cursor and bno into leaf-block processing routine.