xfs
[Top] [All Lists]

Re: [PATCH 2/9] xfs: use per-filesystem radix trees for dquot lookup

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH 2/9] xfs: use per-filesystem radix trees for dquot lookup
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 16 Feb 2012 09:21:11 +1100
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20120215023147.038502020@xxxxxxxxxxxxxxxxxxxxxx>
References: <20120215022926.577682146@xxxxxxxxxxxxxxxxxxxxxx> <20120215023147.038502020@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Tue, Feb 14, 2012 at 09:29:28PM -0500, Christoph Hellwig wrote:
> Replace the global hash tables for looking up in-memory dquot structures
> with per-filesystem radix trees to allow scaling to a large number of
> in-memory dquot structures.

And simplifies the code a lot. Only minor comments about using
local quotainfo variables below.

> @@ -1593,10 +1515,10 @@ xfs_qm_dqfree_one(
>       struct xfs_mount        *mp = dqp->q_mount;
>       struct xfs_quotainfo    *qi = mp->m_quotainfo;
>  
> -     mutex_lock(&dqp->q_hash->qh_lock);
> -     list_del_init(&dqp->q_hashlist);
> -     dqp->q_hash->qh_version++;
> -     mutex_unlock(&dqp->q_hash->qh_lock);
> +     mutex_lock(&mp->m_quotainfo->qi_tree_lock);
> +     radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags),
> +                       be32_to_cpu(dqp->q_core.d_id));
> +     mutex_unlock(&mp->m_quotainfo->qi_tree_lock);

qi->qi_tree_lock, as the local variable is already set up.

> @@ -672,10 +618,9 @@ xfs_qm_dqget(
>       uint            flags,    /* DQALLOC, DQSUSER, DQREPAIR, DOWARN */
>       xfs_dquot_t     **O_dqpp) /* OUT : locked incore dquot */
>  {
> -     xfs_dquot_t     *dqp, *dqp1;
> -     xfs_dqhash_t    *h;
> -     uint            version;
> -     int             error;
> +     struct radix_tree_root *tree = XFS_DQUOT_TREE(mp, type);
> +     struct xfs_dquot        *dqp;
> +     int                     error;

Add a quotainfo local variable and use it in the function?

> @@ -1171,10 +1078,10 @@ xfs_qm_dqpurge(
>       xfs_dqfunlock(dqp);
>       xfs_dqunlock(dqp);
>  
> -     mutex_lock(&qh->qh_lock);
> -     list_del_init(&dqp->q_hashlist);
> -     qh->qh_version++;
> -     mutex_unlock(&qh->qh_lock);
> +     mutex_lock(&mp->m_quotainfo->qi_tree_lock);
> +     radix_tree_delete(XFS_DQUOT_TREE(mp, dqp->q_core.d_flags),
> +                       be32_to_cpu(dqp->q_core.d_id));
> +     mutex_unlock(&mp->m_quotainfo->qi_tree_lock);

qi->qi_tree_lock as it is already there and used for all the other
quotainfo references.

Otherwise looks good.

Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>