xfs
[Top] [All Lists]

[patch 3/3] add a lock class for group/project dquots

To: xfs@xxxxxxxxxxx
Subject: [patch 3/3] add a lock class for group/project dquots
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Mon, 29 Dec 2008 17:18:05 -0500
References: <20081229221802.268877000@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.46-1
We can have both a user and a group/project dquot locked at the same time,
as long as the user dquot is locked first.  Tell lockdep about that fact
by making the group/project dquots a different lock class.


Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/quota/xfs_dquot.c
===================================================================
--- xfs.orig/fs/xfs/quota/xfs_dquot.c   2008-12-29 12:24:33.018737674 +0100
+++ xfs/fs/xfs/quota/xfs_dquot.c        2008-12-29 12:29:35.132612895 +0100
@@ -73,6 +73,8 @@ int xfs_dqreq_num;
 int xfs_dqerror_mod = 33;
 #endif
 
+static struct lock_class_key xfs_dquot_other_class;
+
 /*
  * Allocate and initialize a dquot. We don't always allocate fresh memory;
  * we try to reclaim a free dquot if the number of incore dquots are above
@@ -139,7 +141,15 @@ xfs_qm_dqinit(
                 ASSERT(dqp->q_trace);
                 xfs_dqtrace_entry(dqp, "DQRECLAIMED_INIT");
 #endif
-        }
+       }
+
+       /*
+        * In either case we need to make sure group quotas have a different
+        * lock class than user quotas, to make sure lockdep knows we can
+        * locks of one of each at the same time.
+        */
+       if (!(type & XFS_DQ_USER))
+               lockdep_set_class(&dqp->q_qlock, &xfs_dquot_other_class);
 
        /*
         * log item gets initialized later

-- 

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