On Sun, Feb 19, 2012 at 09:28:20PM -0500, Christoph Hellwig wrote:
> Replace the global dquot lru lists with a per-filesystem one.
>
> Note that the shrinker isn't wire up to the per-superblock VFS shrinker
> infrastructure as would have problems summing up and splitting the counts
> for inodes and dquots. I don't think this is a major problem as the quota
> cache isn't as interwinded with the inode cache as the dentry cache is,
> because an inode that is dropped from the cache will generally release
> a dquot reference, but most of the time it won't be the last one.
>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
>
...
> @@ -1126,6 +1129,7 @@ xfs_qm_dqpurge(
> {
> struct xfs_mount *mp = dqp->q_mount;
> struct xfs_dqhash *qh = dqp->q_hash;
> + struct xfs_quotainfo *qi = mp->m_quotainfo;
>
> xfs_dqlock(dqp);
>
> @@ -1176,22 +1180,21 @@ xfs_qm_dqpurge(
> qh->qh_version++;
> mutex_unlock(&qh->qh_lock);
>
> - mutex_lock(&mp->m_quotainfo->qi_dqlist_lock);
> + mutex_lock(&qi->qi_dqlist_lock);
> list_del_init(&dqp->q_mplist);
> - mp->m_quotainfo->qi_dqreclaims++;
> - mp->m_quotainfo->qi_dquots--;
> - mutex_unlock(&mp->m_quotainfo->qi_dqlist_lock);
> + qi->qi_dqreclaims++;
> + qi->qi_dquots--;
> + mutex_unlock(&qi->qi_dqlist_lock);
>
> /*
> * We move dquots to the freelist as soon as their reference count
> * hits zero, so it really should be on the freelist here.
> */
> - mutex_lock(&xfs_Gqm->qm_dqfrlist_lock);
> - ASSERT(!list_empty(&dqp->q_freelist));
> - list_del_init(&dqp->q_freelist);
> - xfs_Gqm->qm_dqfrlist_cnt--;
> - XFS_STATS_DEC(xs_qm_dquot_unused);
Looks like you have removed this decrement of xs_qm_dquot_unused. You
didn't mention it in your commit message, so I am not sure if it is
intentional.
Other than that, this patch looks good.
Reviewed-by: Ben Myers <bpm@xxxxxxx>
|