Kyle McMartin 9d6e5dc
From be31c919e6ff27f1a08bc3e0725c51935313b002 Mon Sep 17 00:00:00 2001
Kyle McMartin 9d6e5dc
From: Jan Kara <jack@suse.cz>
Kyle McMartin 9d6e5dc
Date: Tue, 27 Jul 2010 11:56:07 -0400
Kyle McMartin 9d6e5dc
Subject: ext4: Always journal quota file modifications
Kyle McMartin 9d6e5dc
Kyle McMartin 9d6e5dc
When journaled quota options are not specified, we do writes
Kyle McMartin 9d6e5dc
to quota files just in data=ordered mode. This actually causes
Kyle McMartin 9d6e5dc
warnings from JBD2 about dirty journaled buffer because ext4_getblk
Kyle McMartin 9d6e5dc
unconditionally treats a block allocated by it as metadata. Since
Kyle McMartin 9d6e5dc
quota actually is filesystem metadata, the easiest way to get rid
Kyle McMartin 9d6e5dc
of the warning is to always treat quota writes as metadata...
Kyle McMartin 9d6e5dc
Kyle McMartin 9d6e5dc
Signed-off-by: Jan Kara <jack@suse.cz>
Kyle McMartin 9d6e5dc
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Kyle McMartin 9d6e5dc
---
Kyle McMartin 9d6e5dc
 fs/ext4/super.c |   19 +++++--------------
Kyle McMartin 9d6e5dc
 1 files changed, 5 insertions(+), 14 deletions(-)
Kyle McMartin 9d6e5dc
Kyle McMartin 9d6e5dc
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
Kyle McMartin 9d6e5dc
index a45ced9..f12daa7 100644
Kyle McMartin 9d6e5dc
--- a/fs/ext4/super.c
Kyle McMartin 9d6e5dc
+++ b/fs/ext4/super.c
Kyle McMartin 9d6e5dc
@@ -4030,7 +4030,6 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type,
Kyle McMartin 9d6e5dc
 	ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
Kyle McMartin 9d6e5dc
 	int err = 0;
Kyle McMartin 9d6e5dc
 	int offset = off & (sb->s_blocksize - 1);
Kyle McMartin 9d6e5dc
-	int journal_quota = EXT4_SB(sb)->s_qf_names[type] != NULL;
Kyle McMartin 9d6e5dc
 	struct buffer_head *bh;
Kyle McMartin 9d6e5dc
 	handle_t *handle = journal_current_handle();
Kyle McMartin 9d6e5dc
 
Kyle McMartin 9d6e5dc
@@ -4055,24 +4054,16 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type,
Kyle McMartin 9d6e5dc
 	bh = ext4_bread(handle, inode, blk, 1, &err;;
Kyle McMartin 9d6e5dc
 	if (!bh)
Kyle McMartin 9d6e5dc
 		goto out;
Kyle McMartin 9d6e5dc
-	if (journal_quota) {
Kyle McMartin 9d6e5dc
-		err = ext4_journal_get_write_access(handle, bh);
Kyle McMartin 9d6e5dc
-		if (err) {
Kyle McMartin 9d6e5dc
-			brelse(bh);
Kyle McMartin 9d6e5dc
-			goto out;
Kyle McMartin 9d6e5dc
-		}
Kyle McMartin 9d6e5dc
+	err = ext4_journal_get_write_access(handle, bh);
Kyle McMartin 9d6e5dc
+	if (err) {
Kyle McMartin 9d6e5dc
+		brelse(bh);
Kyle McMartin 9d6e5dc
+		goto out;
Kyle McMartin 9d6e5dc
 	}
Kyle McMartin 9d6e5dc
 	lock_buffer(bh);
Kyle McMartin 9d6e5dc
 	memcpy(bh->b_data+offset, data, len);
Kyle McMartin 9d6e5dc
 	flush_dcache_page(bh->b_page);
Kyle McMartin 9d6e5dc
 	unlock_buffer(bh);
Kyle McMartin 9d6e5dc
-	if (journal_quota)
Kyle McMartin 9d6e5dc
-		err = ext4_handle_dirty_metadata(handle, NULL, bh);
Kyle McMartin 9d6e5dc
-	else {
Kyle McMartin 9d6e5dc
-		/* Always do at least ordered writes for quotas */
Kyle McMartin 9d6e5dc
-		err = ext4_jbd2_file_inode(handle, inode);
Kyle McMartin 9d6e5dc
-		mark_buffer_dirty(bh);
Kyle McMartin 9d6e5dc
-	}
Kyle McMartin 9d6e5dc
+	err = ext4_handle_dirty_metadata(handle, NULL, bh);
Kyle McMartin 9d6e5dc
 	brelse(bh);
Kyle McMartin 9d6e5dc
 out:
Kyle McMartin 9d6e5dc
 	if (err) {
Kyle McMartin 9d6e5dc
-- 
Kyle McMartin 9d6e5dc
1.7.3.3
Kyle McMartin 9d6e5dc