mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
ext4: mark fc as ineligible using an handle in ext4_xattr_set()
commit 04e6ce8f06d161399e5afde3df5dcfa9455b4952 upstream. Calling ext4_fc_mark_ineligible() with a NULL handle is racy and may result in a fast-commit being done before the filesystem is effectively marked as ineligible. This patch moves the call to this function so that an handle can be used. If a transaction fails to start, then there's not point in trying to mark the filesystem as ineligible, and an error will eventually be returned to user-space. Suggested-by: Jan Kara <jack@suse.cz> Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://patch.msgid.link/20240923104909.18342-3-luis.henriques@linux.dev Signed-off-by: Theodore Ts'o <tytso@mit.edu> Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ca083a08a6
commit
b1dd2ea55f
@@ -2505,6 +2505,8 @@ retry:
|
|||||||
|
|
||||||
error = ext4_xattr_set_handle(handle, inode, name_index, name,
|
error = ext4_xattr_set_handle(handle, inode, name_index, name,
|
||||||
value, value_len, flags);
|
value, value_len, flags);
|
||||||
|
ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR,
|
||||||
|
handle);
|
||||||
error2 = ext4_journal_stop(handle);
|
error2 = ext4_journal_stop(handle);
|
||||||
if (error == -ENOSPC &&
|
if (error == -ENOSPC &&
|
||||||
ext4_should_retry_alloc(sb, &retries))
|
ext4_should_retry_alloc(sb, &retries))
|
||||||
@@ -2512,7 +2514,6 @@ retry:
|
|||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = error2;
|
error = error2;
|
||||||
}
|
}
|
||||||
ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_XATTR, NULL);
|
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user