FAILED: patch "[PATCH] xfs: fix ilock leak on error in xfs_dq_get_next_id" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 63320a0f70f66f311f4bccff3af0719c2119f46c
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026082058-bust-worst-3564@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 63320a0f70f66f311f4bccff3af0719c2119f46c Mon Sep 17 00:00:00 2001
From: Long Li <[email protected]>
Date: Mon, 27 Jul 2026 10:38:48 +0800
Subject: [PATCH] xfs: fix ilock leak on error in xfs_dq_get_next_id
xfs_dq_get_next_id() takes the quota inode ILOCK before calling xfs_iread_extents(). If xfs_iread_extents() fails, the function returns immediately without releasing the lock, leaking the quota inode ILOCK. This can leave the quota inode locked and cause subsequent quota operations to hang.
Fix this by jumping to a common unlock path on error instead of returning directly.
fs/xfs/xfs_dquot.c +2 -1
@@ -778,7 +778,7 @@ xfs_dq_get_next_id( lock_flags =xfs_ilock_data_map_shared (quotip); error =xfs_iread_extents (NULL , quotip,XFS_DATA_FORK );if (error) -return error; + goto out_unlock;if (xfs_iext_lookup_extent (quotip, "ip->i_df, start, &cur, &got)) {/* contiguous chunk, bump startoff for the id calculation */
@@ -789,6 +789,7 @@ xfs_dq_get_next_id( error = -ENOENT ; } +out_unlock:xfs_iunlock (quotip, lock_flags);return error;
Sasha Levin
maintainerPATCH 1/1 xfs: fix ilock leak on error in xfs_dq_get_next_id
From: Long Li <[email protected]>
[ Upstream commit 63320a0f70f66f311f4bccff3af0719c2119f46c ]
xfs_dq_get_next_id() takes the quota inode ILOCK before calling xfs_iread_extents(). If xfs_iread_extents() fails, the function returns immediately without releasing the lock, leaking the quota inode ILOCK. This can leave the quota inode locked and cause subsequent quota operations to hang.
Fix this by jumping to a common unlock path on error instead of returning directly.
--- fs/xfs/xfs_dquot.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/xfs/xfs_dquot.c +2 -1
@@ -745,7 +745,7 @@ xfs_dq_get_next_id(if (!(quotip->i_df.if_flags &XFS_IFEXTENTS )) { error =xfs_iread_extents (NULL , quotip,XFS_DATA_FORK );if (error) -return error; + goto out_unlock; }if (xfs_iext_lookup_extent (quotip, "ip->i_df, start, &cur, &got)) {
@@ -757,6 +757,7 @@ xfs_dq_get_next_id( error = -ENOENT ; } +out_unlock:xfs_iunlock (quotip, lock_flags);return error;
Signature · 1 line
2.53.0