From: Chris Wright Date: Wed, 28 Jun 2006 18:02:49 +0000 (-0700) Subject: xfs corruption fix, fwd from Nathan Scott X-Git-Tag: v2.6.17.2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f88836164f687c3664c1e47832697939483ef4ed;p=thirdparty%2Fkernel%2Fstable-queue.git xfs corruption fix, fwd from Nathan Scott --- diff --git a/queue-2.6.17/series b/queue-2.6.17/series new file mode 100644 index 00000000000..cf28666aa43 --- /dev/null +++ b/queue-2.6.17/series @@ -0,0 +1 @@ +xfs-corruption-fix-for-next-stable-release.patch diff --git a/queue-2.6.17/xfs-corruption-fix-for-next-stable-release.patch b/queue-2.6.17/xfs-corruption-fix-for-next-stable-release.patch new file mode 100644 index 00000000000..52665c479b2 --- /dev/null +++ b/queue-2.6.17/xfs-corruption-fix-for-next-stable-release.patch @@ -0,0 +1,35 @@ +From stable-bounces@linux.kernel.org Tue Jun 27 15:35:25 2006 +Date: Wed, 28 Jun 2006 08:34:44 +1000 +From: Nathan Scott +To: stable@kernel.org +Cc: +Subject: [stable] XFS corruption fix for next stable release + +From: Mandy Kirkconnell + +Fix nused counter. It's currently getting set to -1 rather than getting +decremented by 1. Since nused never reaches 0, the "if (!free->hdr.nused)" +check in xfs_dir2_leafn_remove() fails every time and xfs_dir2_shrink_inode() +doesn't get called when it should. This causes extra blocks to be left on +an empty directory and the directory in unable to be converted back to +inline extent mode. + +Signed-off-by: Mandy Kirkconnell +Signed-off-by: Nathan Scott +Signed-off-by: Chris Wright + +--- + fs/xfs/xfs_dir2_node.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- linux-2.6.17.2.orig/fs/xfs/xfs_dir2_node.c ++++ linux-2.6.17.2/fs/xfs/xfs_dir2_node.c +@@ -970,7 +970,7 @@ xfs_dir2_leafn_remove( + /* + * One less used entry in the free table. + */ +- free->hdr.nused = cpu_to_be32(-1); ++ be32_add(&free->hdr.nused, -1); + xfs_dir2_free_log_header(tp, fbp); + /* + * If this was the last entry in the table, we can