Whamcloud - gitweb
b=24037 Changes of 2.6.32 kernel.
[fs/lustre-release.git] / lustre / include / lustre_quota.h
index 82071a3..ee0ca22 100644 (file)
@@ -162,10 +162,6 @@ struct lustre_quota_info {
         lustre_quota_version_t qi_version;
 };
 
-#define DQ_STATUS_AVAIL         0x0     /* Available dquot */
-#define DQ_STATUS_SET           0x01    /* Sombody is setting dquot */
-#define DQ_STATUS_RECOVERY      0x02    /* dquot is in recovery */
-
 struct lustre_mem_dqblk {
         __u64 dqb_bhardlimit;  /**< absolute limit on disk blks alloc */
         __u64 dqb_bsoftlimit;  /**< preferred limit on disk blks */
@@ -183,7 +179,7 @@ struct lustre_dquot {
         /** Protect the data in lustre_dquot */
         cfs_semaphore_t dq_sem;
         /** Use count */
-        int dq_refcnt;
+        cfs_atomic_t dq_refcnt;
         /** Pointer of quota info it belongs to */
         struct lustre_quota_info *dq_info;
         /** Offset of dquot on disk */
@@ -192,8 +188,6 @@ struct lustre_dquot {
         unsigned int dq_id;
         /** Type fo quota (USRQUOTA, GRPQUOUTA) */
         int dq_type;
-        /** See DQ_STATUS_ */
-        unsigned short dq_status;
         /** See DQ_ in quota.h */
         unsigned long dq_flags;
         /** Diskquota usage */
@@ -232,17 +226,6 @@ int lustre_quota_convert(struct lustre_quota_info *lqi, int type);
 typedef int (*dqacq_handler_t) (struct obd_device * obd, struct qunit_data * qd,
                                 int opc);
 
-/*
-#ifdef HAVE_VFS_DQ_OFF
-#define LL_DQUOT_OFF(sb, remount)    vfs_dq_off(sb, remount)
-#else
-#define LL_DQUOT_OFF(sb, remount)    DQUOT_OFF(sb)
-#endif
-*/
-
-#define LL_DQUOT_OFF(sb)    DQUOT_OFF(sb)
-
-
 /* user quota is turned on on filter */
 #define LQC_USRQUOTA_FLAG (1 << 0)
 /* group quota is turned on on filter */
@@ -381,13 +364,20 @@ struct lustre_qunit_size {
         struct lustre_quota_ctxt *lqs_ctxt; /** quota ctxt */
 };
 
-#define LQS_IS_GRP(lqs)    ((lqs)->lqs_flags & LQUOTA_FLAGS_GRP)
-#define LQS_IS_ADJBLK(lqs) ((lqs)->lqs_flags & LQUOTA_FLAGS_ADJBLK)
-#define LQS_IS_ADJINO(lqs) ((lqs)->lqs_flags & LQUOTA_FLAGS_ADJINO)
+#define LQS_IS_GRP(lqs)      ((lqs)->lqs_flags & LQUOTA_FLAGS_GRP)
+#define LQS_IS_ADJBLK(lqs)   ((lqs)->lqs_flags & LQUOTA_FLAGS_ADJBLK)
+#define LQS_IS_ADJINO(lqs)   ((lqs)->lqs_flags & LQUOTA_FLAGS_ADJINO)
+#define LQS_IS_RECOVERY(lqs) ((lqs)->lqs_flags & LQUOTA_FLAGS_RECOVERY)
+#define LQS_IS_SETQUOTA(lqs) ((lqs)->lqs_flags & LQUOTA_FLAGS_SETQUOTA)
+
+#define LQS_SET_GRP(lqs)       ((lqs)->lqs_flags |= LQUOTA_FLAGS_GRP)
+#define LQS_SET_ADJBLK(lqs)    ((lqs)->lqs_flags |= LQUOTA_FLAGS_ADJBLK)
+#define LQS_SET_ADJINO(lqs)    ((lqs)->lqs_flags |= LQUOTA_FLAGS_ADJINO)
+#define LQS_SET_RECOVERY(lqs)  ((lqs)->lqs_flags |= LQUOTA_FLAGS_RECOVERY)
+#define LQS_SET_SETQUOTA(lqs)  ((lqs)->lqs_flags |= LQUOTA_FLAGS_SETQUOTA)
 
-#define LQS_SET_GRP(lqs)    ((lqs)->lqs_flags |= LQUOTA_FLAGS_GRP)
-#define LQS_SET_ADJBLK(lqs) ((lqs)->lqs_flags |= LQUOTA_FLAGS_ADJBLK)
-#define LQS_SET_ADJINO(lqs) ((lqs)->lqs_flags |= LQUOTA_FLAGS_ADJINO)
+#define LQS_CLEAR_RECOVERY(lqs)  ((lqs)->lqs_flags &= ~LQUOTA_FLAGS_RECOVERY)
+#define LQS_CLEAR_SETQUOTA(lqs)  ((lqs)->lqs_flags &= ~LQUOTA_FLAGS_SETQUOTA)
 
 /* In the hash for lustre_qunit_size, the key is decided by
  * grp_or_usr and uid/gid, in here, I combine these two values,
@@ -396,39 +386,25 @@ struct lustre_qunit_size {
 #define LQS_KEY_ID(key)      (key & 0xffffffff)
 #define LQS_KEY_GRP(key)     (key >> 32)
 
-static inline void __lqs_getref(struct lustre_qunit_size *lqs)
+static inline void lqs_getref(struct lustre_qunit_size *lqs)
 {
         int count = cfs_atomic_inc_return(&lqs->lqs_refcount);
 
-        if (count == 2) /* quota_create_lqs */
-                cfs_atomic_inc(&lqs->lqs_ctxt->lqc_lqs);
         CDEBUG(D_INFO, "lqs=%p refcount %d\n", lqs, count);
 }
 
-static inline void lqs_getref(struct lustre_qunit_size *lqs)
+static inline void lqs_putref(struct lustre_qunit_size *lqs)
 {
-        __lqs_getref(lqs);
-}
+        int count = cfs_atomic_read(&lqs->lqs_refcount);
 
-static inline void __lqs_putref(struct lustre_qunit_size *lqs)
-{
-        LASSERT(cfs_atomic_read(&lqs->lqs_refcount) > 0);
+        LASSERT(count > 0);
+        CDEBUG(D_INFO, "lqs=%p refcount %d\n", lqs, count - 1);
 
-        if (cfs_atomic_dec_return(&lqs->lqs_refcount) == 1)
+        if (cfs_atomic_dec_and_test(&lqs->lqs_refcount)) {
                 if (cfs_atomic_dec_and_test(&lqs->lqs_ctxt->lqc_lqs))
                         cfs_waitq_signal(&lqs->lqs_ctxt->lqc_lqs_waitq);
-        CDEBUG(D_INFO, "lqs=%p refcount %d\n",
-               lqs, cfs_atomic_read(&lqs->lqs_refcount));
-}
-
-static inline void lqs_putref(struct lustre_qunit_size *lqs)
-{
-        __lqs_putref(lqs);
-}
-
-static inline void lqs_initref(struct lustre_qunit_size *lqs)
-{
-        cfs_atomic_set(&lqs->lqs_refcount, 0);
+                OBD_FREE_PTR(lqs);
+        }
 }
 
 #else
@@ -559,7 +535,8 @@ typedef struct {
          */
         int (*quota_adjust_qunit) (struct obd_export *exp,
                                    struct quota_adjust_qunit *oqaq,
-                                   struct lustre_quota_ctxt *qctxt);
+                                   struct lustre_quota_ctxt *qctxt,
+                                   struct ptlrpc_request_set *rqset);
 
 } quota_interface_t;