Jan Kara wrote: > 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@xxxxxxx> Seems like a good approach to me, thanks Jan. (aside: how big an impact does this have on journal traffic for a busy quota-controlled fs?) Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > --- > fs/ext4/super.c | 19 +++++-------------- > 1 files changed, 5 insertions(+), 14 deletions(-) > > Ted, this patch fixes some JBD2 warning for me when running XFSQA > with quotas enabled. I think this is a move into a direction you are > trying to achieve as well. Will you merge the patch or should I do it? > > Honza > > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > index 4e8983a..a8cea08 100644 > --- a/fs/ext4/super.c > +++ b/fs/ext4/super.c > @@ -4030,7 +4030,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(); > > @@ -4055,24 +4054,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) { -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html