Commit 1ceecb53 authored by Harshad Shirwadkar's avatar Harshad Shirwadkar Committed by Theodore Ts'o
Browse files

ext4: fix inode dirty check in case of fast commits



In case of fast commits, determine if the inode is dirty by checking
if the inode is on fast commit list. This also helps us get rid of
ext4_inode_info.i_fc_committed_subtid field.

Reported-by: default avatarAndrea Righi <andrea.righi@canonical.com>
Tested-by: default avatarAndrea Righi <andrea.righi@canonical.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarHarshad Shirwadkar <harshadshirwadkar@gmail.com>
Link: https://lore.kernel.org/r/20201106035911.1942128-18-harshadshirwadkar@gmail.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent a3114fe7
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1028,9 +1028,6 @@ struct ext4_inode_info {
					 * protected by sbi->s_fc_lock.
					 */

	/* Fast commit subtid when this inode was committed */
	unsigned int i_fc_committed_subtid;

	/* Start of lblk range that needs to be committed in this fast commit */
	ext4_lblk_t i_fc_lblk_start;

+0 −3
Original line number Diff line number Diff line
@@ -152,7 +152,6 @@ void ext4_fc_init_inode(struct inode *inode)
	INIT_LIST_HEAD(&ei->i_fc_list);
	init_waitqueue_head(&ei->i_fc_wait);
	atomic_set(&ei->i_fc_updates, 0);
	ei->i_fc_committed_subtid = 0;
}

/* This function must be called with sbi->s_fc_lock held. */
@@ -1037,8 +1036,6 @@ static int ext4_fc_perform_commit(journal_t *journal)
		if (ret)
			goto out;
		spin_lock(&sbi->s_fc_lock);
		EXT4_I(inode)->i_fc_committed_subtid =
			atomic_read(&sbi->s_fc_subtid);
	}
	spin_unlock(&sbi->s_fc_lock);

+1 −2
Original line number Diff line number Diff line
@@ -3312,8 +3312,7 @@ static bool ext4_inode_datasync_dirty(struct inode *inode)
			EXT4_I(inode)->i_datasync_tid))
			return false;
		if (test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT))
			return atomic_read(&EXT4_SB(inode->i_sb)->s_fc_subtid) <
				EXT4_I(inode)->i_fc_committed_subtid;
			return !list_empty(&EXT4_I(inode)->i_fc_list);
		return true;
	}