summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2013-03-15 11:08:27 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2013-03-15 11:08:27 -0400
commitad802b10e8e1ac475cfd04fa1691b21b7b570b81 (patch)
tree987fa230f3283ced150a15c5de0bdd74de0fd687
parente338afcb163ba3a3187f07f1fa750ee82d95912a (diff)
downloadlongterm-queue-2.6.34-ad802b10e8e1ac475cfd04fa1691b21b7b570b81.tar.gz
add Ext4:can not rm directories patches nominated by Ted
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--queue/ext4-Fix-fs-corruption-when-make_indexed_dir-fails.patch48
-rw-r--r--queue/ext4-don-t-dereference-null-pointer-when-make_indexe.patch41
-rw-r--r--queue/series2
3 files changed, 91 insertions, 0 deletions
diff --git a/queue/ext4-Fix-fs-corruption-when-make_indexed_dir-fails.patch b/queue/ext4-Fix-fs-corruption-when-make_indexed_dir-fails.patch
new file mode 100644
index 0000000..fad0121
--- /dev/null
+++ b/queue/ext4-Fix-fs-corruption-when-make_indexed_dir-fails.patch
@@ -0,0 +1,48 @@
+From da270384200e4b1bf15d898fced6878643c95d44 Mon Sep 17 00:00:00 2001
+From: Jan Kara <jack@suse.cz>
+Date: Tue, 3 May 2011 11:05:55 -0400
+Subject: [PATCH] ext4: Fix fs corruption when make_indexed_dir() fails
+
+commit 7ad8e4e6ae2a7c95445ee1715b1714106fb95037 upstream.
+
+When make_indexed_dir() fails (e.g. because of ENOSPC) after it has
+allocated block for index tree root, we did not properly mark all
+changed buffers dirty. This lead to only some of these buffers being
+written out and thus effectively corrupting the directory.
+
+Fix the issue by marking all changed data dirty even in the error
+failure case.
+
+Signed-off-by: Jan Kara <jack@suse.cz>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 2f31631..caa3c77 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -1452,9 +1452,19 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
+ frame->bh = bh;
+ bh = bh2;
+ de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
+- dx_release (frames);
+- if (!(de))
++ if (!de) {
++ /*
++ * Even if the block split failed, we have to properly write
++ * out all the changes we did so far. Otherwise we can end up
++ * with corrupted filesystem.
++ */
++ ext4_mark_inode_dirty(handle, dir);
++ ext4_handle_dirty_metadata(handle, dir, frame->bh);
++ ext4_handle_dirty_metadata(handle, dir, bh);
++ dx_release(frames);
+ return retval;
++ }
++ dx_release(frames);
+
+ retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
+ brelse(bh);
+--
+1.8.1.2
+
diff --git a/queue/ext4-don-t-dereference-null-pointer-when-make_indexe.patch b/queue/ext4-don-t-dereference-null-pointer-when-make_indexe.patch
new file mode 100644
index 0000000..fd4f84a
--- /dev/null
+++ b/queue/ext4-don-t-dereference-null-pointer-when-make_indexe.patch
@@ -0,0 +1,41 @@
+From 6a66356c4993294ea7de22483c224acc0d44511b Mon Sep 17 00:00:00 2001
+From: Allison Henderson <achender@linux.vnet.ibm.com>
+Date: Sun, 15 May 2011 00:19:41 -0400
+Subject: [PATCH] ext4: don't dereference null pointer when make_indexed_dir()
+ fails
+
+commit 6976a6f2acde2b0443cd64f1d08af90630e4ce81 upstream.
+
+Fix for a null pointer bug found while running punch hole tests
+
+Signed-off-by: Allison Henderson <achender@us.ibm.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
+
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index caa3c77..41198b3 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -1451,6 +1451,10 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
+ frame->at = entries;
+ frame->bh = bh;
+ bh = bh2;
++
++ ext4_handle_dirty_metadata(handle, dir, frame->bh);
++ ext4_handle_dirty_metadata(handle, dir, bh);
++
+ de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
+ if (!de) {
+ /*
+@@ -1459,8 +1463,6 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
+ * with corrupted filesystem.
+ */
+ ext4_mark_inode_dirty(handle, dir);
+- ext4_handle_dirty_metadata(handle, dir, frame->bh);
+- ext4_handle_dirty_metadata(handle, dir, bh);
+ dx_release(frames);
+ return retval;
+ }
+--
+1.8.1.2
+
diff --git a/queue/series b/queue/series
index a79d709..981e29b 100644
--- a/queue/series
+++ b/queue/series
@@ -3,3 +3,5 @@ staging-comedi-ni_labpc-correct-differential-channel.patch
staging-comedi-ni_labpc-set-up-command4-register-aft.patch
hugetlb-fix-resv_map-leak-in-error-path.patch
mm-fix-vma_resv_map-NULL-pointer.patch
+ext4-Fix-fs-corruption-when-make_indexed_dir-fails.patch
+ext4-don-t-dereference-null-pointer-when-make_indexe.patch