public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Ben Myers <bpm@sgi.com>
Cc: Christoph Hellwig <hch@infradead.org>, xfs@oss.sgi.com
Subject: Re: [patch 15/19] xfs: simplify xfs_qm_detach_gdquots
Date: Fri, 16 Dec 2011 11:48:45 +1100	[thread overview]
Message-ID: <20111216004845.GB23662@dastard> (raw)
In-Reply-To: <20111215164314.GI29840@sgi.com>

On Thu, Dec 15, 2011 at 10:43:14AM -0600, Ben Myers wrote:
> On Tue, Dec 06, 2011 at 04:58:21PM -0500, Christoph Hellwig wrote:
> > There is no reason to drop qi_dqlist_lock around calls to xfs_qm_dqrele
> > because the free list lock now nests inside qi_dqlist_lock and the
> > dquot lock.
> > 
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > Reviewed-by: Dave Chinner <dchinner@redhat.com>
> > 
> > ---
> >  fs/xfs/xfs_qm.c |   22 +++++-----------------
> >  1 file changed, 5 insertions(+), 17 deletions(-)
> > 
> > Index: xfs/fs/xfs/xfs_qm.c
> > ===================================================================
> > --- xfs.orig/fs/xfs/xfs_qm.c	2011-10-27 22:40:07.538179215 +0200
> > +++ xfs/fs/xfs/xfs_qm.c	2011-10-27 22:40:08.124671538 +0200
> > @@ -449,7 +449,6 @@ xfs_qm_detach_gdquots(
> >  {
> >  	struct xfs_quotainfo	*q = mp->m_quotainfo;
> >  	struct xfs_dquot	*dqp, *gdqp;
> > -	int			nrecl;
> >  
> >   again:
> >  	ASSERT(mutex_is_locked(&q->qi_dqlist_lock));
> > @@ -462,25 +461,14 @@ xfs_qm_detach_gdquots(
> >  			mutex_lock(&q->qi_dqlist_lock);
> >  			goto again;
> >  		}
> > -		if ((gdqp = dqp->q_gdquot)) {
> > -			xfs_dqlock(gdqp);
> 
> Why don't we need to take the dqlock on gdqp here before dropping the
> lock on dqp?

Because we have an active reference on it, it's guaranteed not to go
away from under us. Hence we don't need to lock it before we unlock
the dqp which holds that reference. As it is, the subsequent
xfs_qm_dqrele() takes the lock before dropping the reference we
currently hold.

> 
> > +
> > +		gdqp = dqp->q_gdquot;
> > +		if (gdqp)
> >  			dqp->q_gdquot = NULL;
> > -		}
> >  		xfs_dqunlock(dqp);
> >  
> > -		if (gdqp) {
> > -			/*
> > -			 * Can't hold the mplist lock across a dqput.
> > -			 * XXXmust convert to marker based iterations here.
> > -			 */
> > -			nrecl = q->qi_dqreclaims;
> > -			mutex_unlock(&q->qi_dqlist_lock);
> > -			xfs_qm_dqput(gdqp);
> > -
> > -			mutex_lock(&q->qi_dqlist_lock);
> > -			if (nrecl != q->qi_dqreclaims)
> 
> Why is it ok to ignore di_dqreclaims now?

That was there to tell us if the list we are traversing was modified
or not while we had the lock dropped. If is was, then out list next
pointer may not be valid, so we have to restart the traversal from
the start.

We don't drop the lock any more, so we know that the list cannot be
modified when we drop the current reference on the gdqp. Hence we
don't need the check anymore.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2011-12-16  0:48 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-06 21:58 [patch 00/19] Linux 3.3 patchqueue Christoph Hellwig
2011-12-06 21:58 ` [patch 01/19] xfs: remove the deprecated nodelaylog option Christoph Hellwig
2011-12-07 21:44   ` Ben Myers
2011-12-08 16:12     ` Christoph Hellwig
2011-12-08 16:14       ` Ben Myers
2011-12-06 21:58 ` [patch 02/19] xfs: cleanup the transaction commit path a bit Christoph Hellwig
2011-12-08 17:44   ` Ben Myers
2011-12-06 21:58 ` [patch 03/19] xfs: remove the lid_size field in struct log_item_desc Christoph Hellwig
2011-12-08 18:35   ` Ben Myers
2011-12-06 21:58 ` [patch 04/19] xfs: untange SYNC_WAIT and SYNC_TRYLOCK meanings for xfs_qm_dqflush Christoph Hellwig
2011-12-08 21:10   ` Ben Myers
2011-12-06 21:58 ` [patch 05/19] xfs: make sure to really flush all dquots in xfs_qm_quotacheck Christoph Hellwig
2011-12-08 21:36   ` Ben Myers
2011-12-06 21:58 ` [patch 06/19] xfs: remove xfs_qm_sync Christoph Hellwig
2011-12-12 18:25   ` Ben Myers
2011-12-06 21:58 ` [patch 07/19] xfs: remove the sync_mode argument to xfs_qm_dqflush_all Christoph Hellwig
2011-12-12 22:33   ` Ben Myers
2011-12-06 21:58 ` [patch 08/19] xfs: cleanup dquot locking helpers Christoph Hellwig
2011-12-12 23:12   ` Ben Myers
2011-12-06 21:58 ` [patch 09/19] xfs: cleanup xfs_qm_dqlookup Christoph Hellwig
2011-12-13 17:30   ` Ben Myers
2011-12-06 21:58 ` [patch 10/19] xfs: remove XFS_DQ_INACTIVE Christoph Hellwig
2011-12-13 20:26   ` Ben Myers
2011-12-06 21:58 ` [patch 11/19] xfs: implement lazy removal for the dquot freelist Christoph Hellwig
2011-12-14 22:13   ` Ben Myers
2011-12-06 21:58 ` [patch 12/19] xfs: flatten the dquot lock ordering Christoph Hellwig
2011-12-13 19:44   ` Dave Chinner
2011-12-14 22:18   ` Ben Myers
2011-12-15  3:13   ` Ben Myers
2011-12-06 21:58 ` [patch 13/19] xfs: nest qm_dqfrlist_lock inside the dquot qlock Christoph Hellwig
2011-12-15  3:02   ` Ben Myers
2011-12-06 21:58 ` [patch 14/19] xfs: simplify xfs_qm_dqattach_grouphint Christoph Hellwig
2011-12-15  4:55   ` Ben Myers
2011-12-06 21:58 ` [patch 15/19] xfs: simplify xfs_qm_detach_gdquots Christoph Hellwig
2011-12-15 16:43   ` Ben Myers
2011-12-16  0:48     ` Dave Chinner [this message]
2011-12-16 21:33       ` Ben Myers
2011-12-06 21:58 ` [patch 16/19] xfs: add a xfs_dqhold helper Christoph Hellwig
2011-12-15 16:56   ` Ben Myers
2011-12-06 21:58 ` [patch 17/19] xfs: merge xfs_qm_dqinit_core into the only caller Christoph Hellwig
2011-12-15 17:00   ` Ben Myers
2011-12-06 21:58 ` [patch 18/19] xfs: kill xfs_qm_idtodq Christoph Hellwig
2011-12-15 20:07   ` Ben Myers
2011-12-06 21:58 ` [patch 19/19] xfs: remove XFS_QMOPT_DQSUSER Christoph Hellwig
2011-12-15 20:22   ` Ben Myers

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=20111216004845.GB23662@dastard \
    --to=david@fromorbit.com \
    --cc=bpm@sgi.com \
    --cc=hch@infradead.org \
    --cc=xfs@oss.sgi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox