| From 5930ea643805feb50a2f8383ae12eb6f10935e49 Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Wed, 31 Aug 2011 12:02:51 -0400 |
| Subject: ext4: call ext4_handle_dirty_metadata with correct inode in ext4_dx_add_entry |
| |
| From: Theodore Ts'o <tytso@mit.edu> |
| |
| commit 5930ea643805feb50a2f8383ae12eb6f10935e49 upstream. |
| |
| ext4_dx_add_entry manipulates bh2 and frames[0].bh, which are two buffer_heads |
| that point to directory blocks assigned to the directory inode. However, the |
| function calls ext4_handle_dirty_metadata with the inode of the file that's |
| being added to the directory, not the directory inode itself. Therefore, |
| correct the code to dirty the directory buffers with the directory inode, not |
| the file inode. |
| |
| Signed-off-by: Darrick J. Wong <djwong@us.ibm.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/ext4/namei.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/fs/ext4/namei.c |
| +++ b/fs/ext4/namei.c |
| @@ -1586,7 +1586,7 @@ static int ext4_dx_add_entry(handle_t *h |
| dxtrace(dx_show_index("node", frames[1].entries)); |
| dxtrace(dx_show_index("node", |
| ((struct dx_node *) bh2->b_data)->entries)); |
| - err = ext4_handle_dirty_metadata(handle, inode, bh2); |
| + err = ext4_handle_dirty_metadata(handle, dir, bh2); |
| if (err) |
| goto journal_error; |
| brelse (bh2); |
| @@ -1612,7 +1612,7 @@ static int ext4_dx_add_entry(handle_t *h |
| if (err) |
| goto journal_error; |
| } |
| - err = ext4_handle_dirty_metadata(handle, inode, frames[0].bh); |
| + err = ext4_handle_dirty_metadata(handle, dir, frames[0].bh); |
| if (err) { |
| ext4_std_error(inode->i_sb, err); |
| goto cleanup; |