| From 1435fc00f13cfaa0b296ca4163464148d30c7917 Mon Sep 17 00:00:00 2001 |
| From: Eric Sandeen <sandeen@redhat.com> |
| Date: Sun, 15 Nov 2009 15:30:52 -0500 |
| Subject: [PATCH 65/85] ext4: journal all modifications in ext4_xattr_set_handle |
| |
| (cherry picked from commit 86ebfd08a1930ccedb8eac0aeb1ed4b8b6a41dbc) |
| |
| ext4_xattr_set_handle() was zeroing out an inode outside |
| of journaling constraints; this is one of the accesses that |
| was causing the crc errors in journal replay as seen in |
| kernel.org bugzilla #14354. |
| |
| Reviewed-by: Andreas Dilger <adilger@sun.com> |
| Signed-off-by: Eric Sandeen <sandeen@redhat.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| fs/ext4/xattr.c | 7 ++++--- |
| 1 file changed, 4 insertions(+), 3 deletions(-) |
| |
| --- a/fs/ext4/xattr.c |
| +++ b/fs/ext4/xattr.c |
| @@ -988,6 +988,10 @@ ext4_xattr_set_handle(handle_t *handle, |
| if (error) |
| goto cleanup; |
| |
| + error = ext4_journal_get_write_access(handle, is.iloc.bh); |
| + if (error) |
| + goto cleanup; |
| + |
| if (EXT4_I(inode)->i_state & EXT4_STATE_NEW) { |
| struct ext4_inode *raw_inode = ext4_raw_inode(&is.iloc); |
| memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size); |
| @@ -1013,9 +1017,6 @@ ext4_xattr_set_handle(handle_t *handle, |
| if (flags & XATTR_CREATE) |
| goto cleanup; |
| } |
| - error = ext4_journal_get_write_access(handle, is.iloc.bh); |
| - if (error) |
| - goto cleanup; |
| if (!value) { |
| if (!is.s.not_found) |
| error = ext4_xattr_ibody_set(handle, inode, &i, &is); |