diff options
author | Jan Kara <jack@suse.cz> | 2010-07-27 17:56:07 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2010-07-27 17:56:07 +0200 |
commit | 62d2b5f2dcd3707b070efb16bbfdf6947c38c194 (patch) | |
tree | 4e721db0ab4893f6d619d20d10c1a635da079700 /fs/ext4 | |
parent | ext4: Fix potential memory leak in ext4_fill_super (diff) | |
download | linux-62d2b5f2dcd3707b070efb16bbfdf6947c38c194.tar.xz linux-62d2b5f2dcd3707b070efb16bbfdf6947c38c194.zip |
ext4: Always journal quota file modifications
When journaled quota options are not specified, we do writes
to quota files just in data=ordered mode. This actually causes
warnings from JBD2 about dirty journaled buffer because ext4_getblk
unconditionally treats a block allocated by it as metadata. Since
quota actually is filesystem metadata, the easiest way to get rid
of the warning is to always treat quota writes as metadata...
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/super.c | 19 |
1 files changed, 5 insertions, 14 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d573f6c1a4de..c1036bc8a539 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -4138,7 +4138,6 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type, ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb); int err = 0; int offset = off & (sb->s_blocksize - 1); - int journal_quota = EXT4_SB(sb)->s_qf_names[type] != NULL; struct buffer_head *bh; handle_t *handle = journal_current_handle(); @@ -4163,24 +4162,16 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type, bh = ext4_bread(handle, inode, blk, 1, &err); if (!bh) goto out; - if (journal_quota) { - err = ext4_journal_get_write_access(handle, bh); - if (err) { - brelse(bh); - goto out; - } + err = ext4_journal_get_write_access(handle, bh); + if (err) { + brelse(bh); + goto out; } lock_buffer(bh); memcpy(bh->b_data+offset, data, len); flush_dcache_page(bh->b_page); unlock_buffer(bh); - if (journal_quota) - err = ext4_handle_dirty_metadata(handle, NULL, bh); - else { - /* Always do at least ordered writes for quotas */ - err = ext4_jbd2_file_inode(handle, inode); - mark_buffer_dirty(bh); - } + err = ext4_handle_dirty_metadata(handle, NULL, bh); brelse(bh); out: if (err) { |