All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 09/17] xfs: fold xfs_qm_dqattach_one into xfs_qm_dqget_inode
Date: Wed, 15 Oct 2025 14:13:19 -0700	[thread overview]
Message-ID: <20251015211319.GD2591640@frogsfrogsfrogs> (raw)
In-Reply-To: <20251013024851.4110053-10-hch@lst.de>

On Mon, Oct 13, 2025 at 11:48:10AM +0900, Christoph Hellwig wrote:
> xfs_qm_dqattach_one is a thin wrapper around xfs_qm_dqget_inode.  Move
> the extra asserts into xfs_qm_dqget_inode, drop the unneeded q_qlock
> roundtrip and merge the two functions.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Nice straightforward collapse there!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  fs/xfs/xfs_dquot.c |  9 ++++++---
>  fs/xfs/xfs_qm.c    | 40 +++-------------------------------------
>  2 files changed, 9 insertions(+), 40 deletions(-)
> 
> diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
> index a6030c53a1f9..fa493520bea6 100644
> --- a/fs/xfs/xfs_dquot.c
> +++ b/fs/xfs/xfs_dquot.c
> @@ -992,7 +992,7 @@ xfs_qm_dqget_inode(
>  	struct xfs_inode	*ip,
>  	xfs_dqtype_t		type,
>  	bool			can_alloc,
> -	struct xfs_dquot	**O_dqpp)
> +	struct xfs_dquot	**dqpp)
>  {
>  	struct xfs_mount	*mp = ip->i_mount;
>  	struct xfs_quotainfo	*qi = mp->m_quotainfo;
> @@ -1001,6 +1001,9 @@ xfs_qm_dqget_inode(
>  	xfs_dqid_t		id;
>  	int			error;
>  
> +	ASSERT(!*dqpp);
> +	xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
> +
>  	error = xfs_qm_dqget_checks(mp, type);
>  	if (error)
>  		return error;
> @@ -1063,8 +1066,8 @@ xfs_qm_dqget_inode(
>  	xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
>  	trace_xfs_dqget_miss(dqp);
>  found:
> -	*O_dqpp = dqp;
> -	mutex_lock(&dqp->q_qlock);
> +	trace_xfs_dqattach_get(dqp);
> +	*dqpp = dqp;
>  	return 0;
>  }
>  
> diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
> index 80c99ef91edb..9e173a4b18eb 100644
> --- a/fs/xfs/xfs_qm.c
> +++ b/fs/xfs/xfs_qm.c
> @@ -287,40 +287,6 @@ xfs_qm_unmount_quotas(
>  		xfs_qm_destroy_quotainos(mp->m_quotainfo);
>  }
>  
> -STATIC int
> -xfs_qm_dqattach_one(
> -	struct xfs_inode	*ip,
> -	xfs_dqtype_t		type,
> -	bool			doalloc,
> -	struct xfs_dquot	**IO_idqpp)
> -{
> -	struct xfs_dquot	*dqp;
> -	int			error;
> -
> -	ASSERT(!*IO_idqpp);
> -	xfs_assert_ilocked(ip, XFS_ILOCK_EXCL);
> -
> -	/*
> -	 * Find the dquot from somewhere. This bumps the reference count of
> -	 * dquot and returns it locked.  This can return ENOENT if dquot didn't
> -	 * exist on disk and we didn't ask it to allocate; ESRCH if quotas got
> -	 * turned off suddenly.
> -	 */
> -	error = xfs_qm_dqget_inode(ip, type, doalloc, &dqp);
> -	if (error)
> -		return error;
> -
> -	trace_xfs_dqattach_get(dqp);
> -
> -	/*
> -	 * dqget may have dropped and re-acquired the ilock, but it guarantees
> -	 * that the dquot returned is the one that should go in the inode.
> -	 */
> -	*IO_idqpp = dqp;
> -	mutex_unlock(&dqp->q_qlock);
> -	return 0;
> -}
> -
>  static bool
>  xfs_qm_need_dqattach(
>  	struct xfs_inode	*ip)
> @@ -360,7 +326,7 @@ xfs_qm_dqattach_locked(
>  	ASSERT(!xfs_is_metadir_inode(ip));
>  
>  	if (XFS_IS_UQUOTA_ON(mp) && !ip->i_udquot) {
> -		error = xfs_qm_dqattach_one(ip, XFS_DQTYPE_USER,
> +		error = xfs_qm_dqget_inode(ip, XFS_DQTYPE_USER,
>  				doalloc, &ip->i_udquot);
>  		if (error)
>  			goto done;
> @@ -368,7 +334,7 @@ xfs_qm_dqattach_locked(
>  	}
>  
>  	if (XFS_IS_GQUOTA_ON(mp) && !ip->i_gdquot) {
> -		error = xfs_qm_dqattach_one(ip, XFS_DQTYPE_GROUP,
> +		error = xfs_qm_dqget_inode(ip, XFS_DQTYPE_GROUP,
>  				doalloc, &ip->i_gdquot);
>  		if (error)
>  			goto done;
> @@ -376,7 +342,7 @@ xfs_qm_dqattach_locked(
>  	}
>  
>  	if (XFS_IS_PQUOTA_ON(mp) && !ip->i_pdquot) {
> -		error = xfs_qm_dqattach_one(ip, XFS_DQTYPE_PROJ,
> +		error = xfs_qm_dqget_inode(ip, XFS_DQTYPE_PROJ,
>  				doalloc, &ip->i_pdquot);
>  		if (error)
>  			goto done;
> -- 
> 2.47.3
> 
> 

  reply	other threads:[~2025-10-15 21:13 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-13  2:48 cleanup quota locking Christoph Hellwig
2025-10-13  2:48 ` [PATCH 01/17] xfs: make qi_dquots a 64-bit value Christoph Hellwig
2025-10-14 23:16   ` Darrick J. Wong
2025-10-15  4:48     ` Christoph Hellwig
2025-10-13  2:48 ` [PATCH 02/17] xfs: remove xfs_dqunlock and friends Christoph Hellwig
2025-10-14 23:17   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 03/17] xfs: don't lock the dquot before return in xqcheck_commit_dquot Christoph Hellwig
2025-10-14 23:22   ` Darrick J. Wong
2025-10-15  5:00     ` Christoph Hellwig
2025-10-15 20:27       ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 04/17] xfs: don't lock the dquot before return in xrep_quota_item Christoph Hellwig
2025-10-14 23:24   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 05/17] xfs: use a lockref for the xfs_dquot reference count Christoph Hellwig
2025-10-15 21:02   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 06/17] xfs: remove xfs_qm_dqput and optimize dropping dquot references Christoph Hellwig
2025-10-15 21:04   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 07/17] xfs: consolidate q_qlock locking in xfs_qm_dqget and xfs_qm_dqget_inode Christoph Hellwig
2025-10-15 21:05   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 08/17] xfs: xfs_qm_dqattach_one is never called with a non-NULL *IO_idqpp Christoph Hellwig
2025-10-14 23:27   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 09/17] xfs: fold xfs_qm_dqattach_one into xfs_qm_dqget_inode Christoph Hellwig
2025-10-15 21:13   ` Darrick J. Wong [this message]
2025-10-13  2:48 ` [PATCH 10/17] xfs: return the dquot unlocked from xfs_qm_dqget Christoph Hellwig
2025-10-15 21:17   ` Darrick J. Wong
2025-10-15 21:18     ` Darrick J. Wong
2025-10-16  4:21       ` Christoph Hellwig
2025-10-13  2:48 ` [PATCH 11/17] xfs: remove q_qlock locking in xfs_qm_scall_setqlim Christoph Hellwig
2025-10-15 21:17   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 12/17] xfs: push q_qlock acquisition from xchk_dquot_iter to the callers Christoph Hellwig
2025-10-15 21:19   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 13/17] xfs: move q_qlock locking into xchk_quota_item Christoph Hellwig
2025-10-15 21:19   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 14/17] xfs: move q_qlock locking into xqcheck_compare_dquot Christoph Hellwig
2025-10-15 21:20   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 15/17] xfs: move q_qlock acquisition into xqcheck_commit_dquot Christoph Hellwig
2025-10-15 21:20   ` Darrick J. Wong
2025-10-16  4:22     ` Christoph Hellwig
2025-10-13  2:48 ` [PATCH 16/17] xfs: move xfs_dquot_tree calls into xfs_qm_dqget_cache_{lookup,insert} Christoph Hellwig
2025-10-15 21:21   ` Darrick J. Wong
2025-10-13  2:48 ` [PATCH 17/17] xfs: reduce ilock roundtrips in xfs_qm_vop_dqalloc Christoph Hellwig
2025-10-15 21:27   ` Darrick J. Wong
2025-10-16  4:23     ` Christoph Hellwig
2025-10-16 15:59       ` Darrick J. Wong
2025-10-17  3:50         ` Christoph Hellwig
2025-10-17 23:09           ` Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251015211319.GD2591640@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=cem@kernel.org \
    --cc=hch@lst.de \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.