|
@@ -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
|