| To: | xfs@xxxxxxxxxxx |
|---|---|
| Subject: | [PATCH 21/45] xfs: cleanup xfs_qm_dqlookup |
| From: | Christoph Hellwig <hch@xxxxxxxxxxxxx> |
| Date: | Fri, 28 Oct 2011 05:54:44 -0400 |
| References: | <20111028095423.796574703@xxxxxxxxxxxxxxxxxxxxxx> |
| User-agent: | quilt/0.48-1 |
Rearrange the code to avoid the conditional locking around the
flist_locked variable. This means we lose a (rather pointless)
assert, and hold the freelist lock a bit longer for one corner
case.
Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
fs/xfs/xfs_dquot.c | 25 +++++--------------------
1 file changed, 5 insertions(+), 20 deletions(-)
Index: xfs/fs/xfs/xfs_dquot.c
===================================================================
--- xfs.orig/fs/xfs/xfs_dquot.c 2011-10-27 22:40:02.250173174 +0200
+++ xfs/fs/xfs/xfs_dquot.c 2011-10-27 22:40:02.770171231 +0200
@@ -710,12 +710,9 @@ xfs_qm_dqlookup(
xfs_dquot_t **O_dqpp)
{
xfs_dquot_t *dqp;
- uint flist_locked;
ASSERT(mutex_is_locked(&qh->qh_lock));
- flist_locked = B_FALSE;
-
/*
* Traverse the hashchain looking for a match
*/
@@ -750,31 +747,19 @@ xfs_qm_dqlookup(
xfs_dqlock(dqp);
dqp->dq_flags &= ~(XFS_DQ_WANT);
}
- flist_locked = B_TRUE;
- }
-
- /*
- * id couldn't have changed; we had the hashlock all
- * along
- */
- ASSERT(be32_to_cpu(dqp->q_core.d_id) == id);
- if (flist_locked) {
- if (dqp->q_nrefs != 0) {
-
mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock);
- flist_locked = B_FALSE;
- } else {
+ if (dqp->q_nrefs == 0) {
/* take it off the freelist */
trace_xfs_dqlookup_freelist(dqp);
list_del_init(&dqp->q_freelist);
xfs_Gqm->qm_dqfrlist_cnt--;
}
+ XFS_DQHOLD(dqp);
+ mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock);
+ } else {
+ XFS_DQHOLD(dqp);
}
- XFS_DQHOLD(dqp);
-
- if (flist_locked)
- mutex_unlock(&xfs_Gqm->qm_dqfrlist_lock);
/*
* move the dquot to the front of the hashchain
*/
|
| Previous by Date: | [PATCH 22/45] xfs: remove XFS_DQ_INACTIVE, Christoph Hellwig |
|---|---|
| Next by Date: | [PATCH 28/45] xfs: kill xfs_qm_dqinit_core, Christoph Hellwig |
| Previous by Thread: | [PATCH 22/45] xfs: remove XFS_DQ_INACTIVE, Christoph Hellwig |
| Next by Thread: | [PATCH 28/45] xfs: kill xfs_qm_dqinit_core, Christoph Hellwig |
| Indexes: | [Date] [Thread] [Top] [All Lists] |