| From stable+bounces-171740-greg=kroah.com@vger.kernel.org Tue Aug 19 05:06:15 2025 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 18 Aug 2025 23:06:06 -0400 |
| Subject: xfs: fully decouple XFS_IBULK* flags from XFS_IWALK* flags |
| To: stable@vger.kernel.org |
| Cc: Christoph Hellwig <hch@lst.de>, cen zhang <zzzccc427@gmail.com>, "Darrick J. Wong" <djwong@kernel.org>, Carlos Maiolino <cem@kernel.org>, Sasha Levin <sashal@kernel.org> |
| Message-ID: <20250819030606.304788-1-sashal@kernel.org> |
| |
| From: Christoph Hellwig <hch@lst.de> |
| |
| [ Upstream commit d2845519b0723c5d5a0266cbf410495f9b8fd65c ] |
| |
| Fix up xfs_inumbers to now pass in the XFS_IBULK* flags into the flags |
| argument to xfs_inobt_walk, which expects the XFS_IWALK* flags. |
| |
| Currently passing the wrong flags works for non-debug builds because |
| the only XFS_IWALK* flag has the same encoding as the corresponding |
| XFS_IBULK* flag, but in debug builds it can trigger an assert that no |
| incorrect flag is passed. Instead just extra the relevant flag. |
| |
| Fixes: 5b35d922c52798 ("xfs: Decouple XFS_IBULK flags from XFS_IWALK flags") |
| Cc: <stable@vger.kernel.org> # v5.19 |
| Reported-by: cen zhang <zzzccc427@gmail.com> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Darrick J. Wong <djwong@kernel.org> |
| Signed-off-by: Carlos Maiolino <cem@kernel.org> |
| [ Adjust context ] |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/xfs/xfs_itable.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/fs/xfs/xfs_itable.c |
| +++ b/fs/xfs/xfs_itable.c |
| @@ -422,11 +422,15 @@ xfs_inumbers( |
| .breq = breq, |
| }; |
| struct xfs_trans *tp; |
| + unsigned int iwalk_flags = 0; |
| int error = 0; |
| |
| if (xfs_bulkstat_already_done(breq->mp, breq->startino)) |
| return 0; |
| |
| + if (breq->flags & XFS_IBULK_SAME_AG) |
| + iwalk_flags |= XFS_IWALK_SAME_AG; |
| + |
| /* |
| * Grab an empty transaction so that we can use its recursive buffer |
| * locking abilities to detect cycles in the inobt without deadlocking. |
| @@ -435,7 +439,7 @@ xfs_inumbers( |
| if (error) |
| goto out; |
| |
| - error = xfs_inobt_walk(breq->mp, tp, breq->startino, breq->flags, |
| + error = xfs_inobt_walk(breq->mp, tp, breq->startino, iwalk_flags, |
| xfs_inumbers_walk, breq->icount, &ic); |
| xfs_trans_cancel(tp); |
| out: |