Commit 54930dfe authored by Jeff Mahoney's avatar Jeff Mahoney Committed by Jan Kara

reiserfs: don't preallocate blocks for extended attributes

Most extended attributes will fit in a single block.  More importantly,
we drop the reference to the inode while holding the transaction open
so the preallocated blocks aren't released.  As a result, the inode
may be evicted before it's removed from the transaction's prealloc list
which can cause memory corruption.
Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent fd3cfad3
...@@ -1128,7 +1128,7 @@ static int determine_prealloc_size(reiserfs_blocknr_hint_t * hint) ...@@ -1128,7 +1128,7 @@ static int determine_prealloc_size(reiserfs_blocknr_hint_t * hint)
hint->prealloc_size = 0; hint->prealloc_size = 0;
if (!hint->formatted_node && hint->preallocate) { if (!hint->formatted_node && hint->preallocate) {
if (S_ISREG(hint->inode->i_mode) if (S_ISREG(hint->inode->i_mode) && !IS_PRIVATE(hint->inode)
&& hint->inode->i_size >= && hint->inode->i_size >=
REISERFS_SB(hint->th->t_super)->s_alloc_options. REISERFS_SB(hint->th->t_super)->s_alloc_options.
preallocmin * hint->inode->i_sb->s_blocksize) preallocmin * hint->inode->i_sb->s_blocksize)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment