diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2013-03-15 11:08:27 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2013-03-15 11:08:27 -0400 |
commit | ad802b10e8e1ac475cfd04fa1691b21b7b570b81 (patch) | |
tree | 987fa230f3283ced150a15c5de0bdd74de0fd687 | |
parent | e338afcb163ba3a3187f07f1fa750ee82d95912a (diff) | |
download | longterm-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.patch | 48 | ||||
-rw-r--r-- | queue/ext4-don-t-dereference-null-pointer-when-make_indexe.patch | 41 | ||||
-rw-r--r-- | queue/series | 2 |
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 |