From 27b8f3feb682d59d1531ff35acea964695e0d73b Mon Sep 17 00:00:00 2001
From: girish <girish>
Date: Wed, 23 Jul 2008 19:23:29 +0000
Subject: [PATCH] ext3/ext4: orphan list corruption due bad inode (Patch from
 Q-leap) b=16360 i=adilger i=johann

---
 .../patches/ext3-check-bad-inode.patch        | 28 +++++++++++++++++++
 .../series/ldiskfs-2.6-rhel4.series           |  1 +
 .../series/ldiskfs-2.6-rhel5.series           |  1 +
 .../series/ldiskfs-2.6-sles10.series          |  1 +
 .../series/ldiskfs-2.6-suse.series            |  1 +
 .../series/ldiskfs-2.6.18-vanilla.series      |  1 +
 .../series/ldiskfs-2.6.22-vanilla.series      |  1 +
 7 files changed, 34 insertions(+)
 create mode 100644 ldiskfs/kernel_patches/patches/ext3-check-bad-inode.patch

diff --git a/ldiskfs/kernel_patches/patches/ext3-check-bad-inode.patch b/ldiskfs/kernel_patches/patches/ext3-check-bad-inode.patch
new file mode 100644
index 0000000000..7b0b046885
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext3-check-bad-inode.patch
@@ -0,0 +1,28 @@
+Index: linux-2.6.22/fs/ext3/namei.c
+===================================================================
+--- linux-2.6.22.orig/fs/ext3/namei.c	2007-11-15 13:41:18.000000000 +0100
++++ linux-2.6.22/fs/ext3/namei.c	2007-11-15 13:44:28.000000000 +0100
+@@ -1019,6 +1019,11 @@ static struct dentry *ext3_lookup(struct
+ 
+ 		if (!inode)
+ 			return ERR_PTR(-EACCES);
++
++		if (is_bad_inode(inode)) {
++			iput(inode);
++			return ERR_PTR(-ENOENT);
++		}
+ 	}
+ 	return d_splice_alias(inode, dentry);
+ }
+@@ -1054,6 +1059,11 @@ struct dentry *ext3_get_parent(struct de
+ 	if (!inode)
+ 		return ERR_PTR(-EACCES);
+ 
++	if (is_bad_inode(inode)) {
++		iput(inode);
++		return ERR_PTR(-ENOENT);
++	}
++
+ 	parent = d_alloc_anon(inode);
+ 	if (!parent) {
+ 		iput(inode);
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
index 4d64d37f95..c3152eada9 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
@@ -26,3 +26,4 @@ ext3-external-journal-2.6.9.patch
 ext3-max-dir-size.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-xattr-no-update-ctime-rhel4.patch
+ext3-check-bad-inode.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
index f0eb3a97fc..524491e4b2 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
@@ -23,3 +23,4 @@ ext3-max-dir-size.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-block-bitmap-validation-2.6-rhel5.patch
 ext3-xattr-no-update-ctime-2.6.22-vanilla.patch
+ext3-check-bad-inode.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
index 779e134694..c8d9b53f36 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
@@ -27,3 +27,4 @@ ext3-max-dir-size.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-block-bitmap-validation-2.6-sles10.patch
 ext3-xattr-no-update-ctime-2.6-sles10.patch
+ext3-check-bad-inode.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
index 1f728c01b6..b6d7bb03be 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
@@ -25,3 +25,4 @@ ext3-external-journal-2.6.5.patch
 ext3-max-dir-size-2.6.5-suse.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-xattr-no-update-ctime-suse.patch
+ext3-check-bad-inode.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
index a74d105ec1..cc890912ef 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
@@ -22,3 +22,4 @@ ext3-lookup-dotdot-2.6.9.patch
 ext3-max-dir-size.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-xattr-no-update-ctime-2.6.22-vanilla.patch
+ext3-check-bad-inode.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
index 46226a5129..65a6d4f0b1 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
@@ -23,3 +23,4 @@ ext3-export-journal-api.patch
 ext3-max-dir-size.patch
 ext3-print-inum-in-htree-warning.patch
 ext3-xattr-no-update-ctime-2.6.22-vanilla.patch
+ext3-check-bad-inode.patch
-- 
GitLab