Commit 0b64fd74 authored by Harshad Shirwadkar's avatar Harshad Shirwadkar Committed by Theodore Ts'o
Browse files

ext4: mark inode dirty before grabbing i_data_sem in ext4_setattr



Mark inode dirty first and then grab i_data_sem in ext4_setattr().

Signed-off-by: default avatarHarshad Shirwadkar <harshadshirwadkar@gmail.com>
Link: https://patch.msgid.link/20250508175908.1004880-4-harshadshirwadkar@gmail.com


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 4d326646
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -5568,9 +5568,7 @@ int ext4_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
			down_write(&EXT4_I(inode)->i_data_sem);
			old_disksize = EXT4_I(inode)->i_disksize;
			EXT4_I(inode)->i_disksize = attr->ia_size;
			rc = ext4_mark_inode_dirty(handle, inode);
			if (!error)
				error = rc;

			/*
			 * We have to update i_size under i_data_sem together
			 * with i_disksize to avoid races with writeback code
@@ -5581,6 +5579,9 @@ int ext4_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
			else
				EXT4_I(inode)->i_disksize = old_disksize;
			up_write(&EXT4_I(inode)->i_data_sem);
			rc = ext4_mark_inode_dirty(handle, inode);
			if (!error)
				error = rc;
			ext4_journal_stop(handle);
			if (error)
				goto out_mmap_sem;