ext3: journal all modifications in ext3_xattr_set_handle
PATCH 1/1 ext3: journal all modifications in ext3_xattr_set_handle
ext3_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.
Although ext3 doesn't have the crc issue, modifications out of journal control are a Bad Thing.
---
fs/ext3/xattr.c +0 -0
@@ -960,6 +960,10 @@ ext3_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
if (error) goto cleanup;
+ error = ext3_journal_get_write_access(handle, is.iloc.bh);
+ if (error)
+ goto cleanup;
+
if (EXT3_I(inode)->i_state & EXT3_STATE_NEW) {
struct ext3_inode *raw_inode = ext3_raw_inode(&is.iloc);
memset(raw_inode, 0, EXT3_SB(inode->i_sb)->s_inode_size);
@@ -985,9 +989,6 @@ ext3_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
if (flags & XATTR_CREATE)
goto cleanup;
}
- error = ext3_journal_get_write_access(handle, is.iloc.bh);
- if (error)
- goto cleanup;
if (!value) {
if (!is.s.not_found)
error = ext3_xattr_ibody_set(handle, inode, &i, &is);Quoted 10 lines · Eric Sandeen
ext3_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.Although ext3 doesn't have the crc issue, modifications out of journal control are a Bad Thing.
Signed-off-by Eric Sandeen <[email protected]>---
Thanks. Looks good. Queue up.
Honza
Quoted 27 lines
fs/ext3/xattr.c +4
-3@@ -960,6 +960,10 @@ ext3_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,if (error) goto cleanup; + error =ext3_journal_get_write_access (handle, is.iloc.bh); +if (error) + goto cleanup; +if (EXT3_I (inode)->i_state &EXT3_STATE_NEW ) {struct ext3_inode *raw_inode =ext3_raw_inode (&is.iloc);memset (raw_inode,0 ,EXT3_SB (inode->i_sb)->s_inode_size);@@ -985,9 +989,6 @@ ext3_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,if (flags &XATTR_CREATE ) goto cleanup; } - error =ext3_journal_get_write_access (handle, is.iloc.bh); -if (error) - goto cleanup;if (!value) {if (!is.s.not_found) error =ext3_xattr_ibody_set (handle, inode, &i, &is);
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR