diff options
author | Eric Whitney <enwlinux@gmail.com> | 2016-11-14 21:48:35 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2016-11-14 21:48:35 -0500 |
commit | 88e0387769c4bc36c93d25329f6151fb3d6474b2 (patch) | |
tree | a26a2a7f891b03e155b560b249f24761282ebc11 | |
parent | eeca7ea1baa939c97d58ba821f8c6e683e4388f2 (diff) |
ext4: allow inode expansion for nojournal file systems
Runs of xfstest ext4/022 on nojournal file systems result in failures
because the inodes of some of its test files do not expand as expected.
The cause is a conditional in ext4_mark_inode_dirty() that prevents inode
expansion unless the test file system has a journal. Remove this
unnecessary restriction.
Signed-off-by: Eric Whitney <enwlinux@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | fs/ext4/inode.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index e821ee28fa33..b1b4c85bbae3 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5474,18 +5474,20 @@ int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode) err = ext4_reserve_inode_write(handle, inode, &iloc); if (err) return err; - if (ext4_handle_valid(handle) && - EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize && + if (EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize && !ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) { /* - * We need extra buffer credits since we may write into EA block + * In nojournal mode, we can immediately attempt to expand + * the inode. When journaled, we first need to obtain extra + * buffer credits since we may write into the EA block * with this same handle. If journal_extend fails, then it will * only result in a minor loss of functionality for that inode. * If this is felt to be critical, then e2fsck should be run to * force a large enough s_min_extra_isize. */ - if ((jbd2_journal_extend(handle, - EXT4_DATA_TRANS_BLOCKS(inode->i_sb))) == 0) { + if (!ext4_handle_valid(handle) || + jbd2_journal_extend(handle, + EXT4_DATA_TRANS_BLOCKS(inode->i_sb)) == 0) { ret = ext4_expand_extra_isize(inode, sbi->s_want_extra_isize, iloc, handle); |