aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2011-08-31 12:02:51 -0400
committerTheodore Ts'o <tytso@mit.edu>2011-08-31 12:02:51 -0400
commit5930ea643805feb50a2f8383ae12eb6f10935e49 (patch)
tree9052dd47da0d9d6796342a07ebffe0329647b9cb
parentf9287c1f2d329f4d78a3bbc9cf0db0ebae6f146a (diff)
ext4: call ext4_handle_dirty_metadata with correct inode in ext4_dx_add_entry
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> Cc: stable@kernel.org
-rw-r--r--fs/ext4/namei.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index f0abe432313..a067835bbac 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1585,7 +1585,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
1585 dxtrace(dx_show_index("node", frames[1].entries)); 1585 dxtrace(dx_show_index("node", frames[1].entries));
1586 dxtrace(dx_show_index("node", 1586 dxtrace(dx_show_index("node",
1587 ((struct dx_node *) bh2->b_data)->entries)); 1587 ((struct dx_node *) bh2->b_data)->entries));
1588 err = ext4_handle_dirty_metadata(handle, inode, bh2); 1588 err = ext4_handle_dirty_metadata(handle, dir, bh2);
1589 if (err) 1589 if (err)
1590 goto journal_error; 1590 goto journal_error;
1591 brelse (bh2); 1591 brelse (bh2);
@@ -1611,7 +1611,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
1611 if (err) 1611 if (err)
1612 goto journal_error; 1612 goto journal_error;
1613 } 1613 }
1614 err = ext4_handle_dirty_metadata(handle, inode, frames[0].bh); 1614 err = ext4_handle_dirty_metadata(handle, dir, frames[0].bh);
1615 if (err) { 1615 if (err) {
1616 ext4_std_error(inode->i_sb, err); 1616 ext4_std_error(inode->i_sb, err);
1617 goto cleanup; 1617 goto cleanup;