mirror of
https://github.com/torvalds/linux
synced 2024-10-03 01:43:05 +00:00
Bug fixes for 6.10-rc5:
* Fix assertion failure due to a race between unlink and cluster buffer instantiation. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQjMC4mbgVeU7MxEIYH7y4RirJu9AUCZnF9DgAKCRAH7y4RirJu 9MDAAP4oMBgM45sF7Y579EvUcAxLx01ZIcKy7t8dXmDRTN4C2gD/aECnpkAH2vlF jzgH28ULTLZjfOPFP6ighlEnpYcqYAk= =dkdo -----END PGP SIGNATURE----- Merge tag 'xfs-6.10-fixes-4' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux Pull xfs fix from Chandan Babu: - Fix assertion failure due to a race between unlink and cluster buffer instantiation. * tag 'xfs-6.10-fixes-4' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux: xfs: fix unlink vs cluster buffer instantiation race
This commit is contained in:
commit
563a50672d
|
@ -2548,11 +2548,26 @@ xfs_ifree_cluster(
|
||||||
* This buffer may not have been correctly initialised as we
|
* This buffer may not have been correctly initialised as we
|
||||||
* didn't read it from disk. That's not important because we are
|
* didn't read it from disk. That's not important because we are
|
||||||
* only using to mark the buffer as stale in the log, and to
|
* only using to mark the buffer as stale in the log, and to
|
||||||
* attach stale cached inodes on it. That means it will never be
|
* attach stale cached inodes on it.
|
||||||
* dispatched for IO. If it is, we want to know about it, and we
|
*
|
||||||
* want it to fail. We can acheive this by adding a write
|
* For the inode that triggered the cluster freeing, this
|
||||||
* verifier to the buffer.
|
* attachment may occur in xfs_inode_item_precommit() after we
|
||||||
|
* have marked this buffer stale. If this buffer was not in
|
||||||
|
* memory before xfs_ifree_cluster() started, it will not be
|
||||||
|
* marked XBF_DONE and this will cause problems later in
|
||||||
|
* xfs_inode_item_precommit() when we trip over a (stale, !done)
|
||||||
|
* buffer to attached to the transaction.
|
||||||
|
*
|
||||||
|
* Hence we have to mark the buffer as XFS_DONE here. This is
|
||||||
|
* safe because we are also marking the buffer as XBF_STALE and
|
||||||
|
* XFS_BLI_STALE. That means it will never be dispatched for
|
||||||
|
* IO and it won't be unlocked until the cluster freeing has
|
||||||
|
* been committed to the journal and the buffer unpinned. If it
|
||||||
|
* is written, we want to know about it, and we want it to
|
||||||
|
* fail. We can acheive this by adding a write verifier to the
|
||||||
|
* buffer.
|
||||||
*/
|
*/
|
||||||
|
bp->b_flags |= XBF_DONE;
|
||||||
bp->b_ops = &xfs_inode_buf_ops;
|
bp->b_ops = &xfs_inode_buf_ops;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue