Whamcloud - gitweb
LU-2361 quota: quiet warning when acct isn't enabled
[fs/lustre-release.git] / lustre / quota / lquota_internal.h
index 7fedd29..de3e294 100644 (file)
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2012 Whamcloud, Inc.
+ * Copyright (c) 2012, Intel Corporation.
  * Use is subject to license terms.
  */
 
 #include <obd.h>
-#include <lquota.h>
+#include <lustre_quota.h>
 
 #ifndef _LQUOTA_INTERNAL_H
 #define _LQUOTA_INTERNAL_H
@@ -85,7 +85,7 @@ struct lquota_mst_entry {
 
        /* r/w semaphore used to protect concurrent access to the quota
         * parameters which are stored on disk */
-       cfs_rw_semaphore_t      lme_sem;
+       struct rw_semaphore     lme_sem;
 
        /* quota space that may be released after glimpse */
        __u64                   lme_may_rel;
@@ -113,7 +113,7 @@ struct lquota_slv_entry {
        unsigned int            lse_pending_req;
 
        /* rw spinlock protecting in-memory counters (i.e. lse_pending*) */
-       cfs_rwlock_t            lse_lock;
+       rwlock_t                lse_lock;
 
        /* waiter for pending request done */
        cfs_waitq_t             lse_waiters;
@@ -123,6 +123,12 @@ struct lquota_slv_entry {
 
        /* time to trigger quota adjust */
        __u64                   lse_adjust_time;
+
+       /* return code of latest acquire RPC */
+       int                     lse_acq_rc;
+
+       /* when latest acquire RPC completed */
+       __u64                   lse_acq_time;
 };
 
 /* In-memory entry for each enforced quota id
@@ -200,6 +206,8 @@ struct lquota_site {
 #define lqe_usage              u.se.lse_usage
 #define lqe_adjust_time                u.se.lse_adjust_time
 #define lqe_lockh              u.se.lse_lockh
+#define lqe_acq_rc             u.se.lse_acq_rc
+#define lqe_acq_time           u.se.lse_acq_time
 
 #define LQUOTA_BUMP_VER 0x1
 #define LQUOTA_SET_VER  0x2
@@ -207,11 +215,13 @@ struct lquota_site {
 /* helper routine to get/put reference on lquota_entry */
 static inline void lqe_getref(struct lquota_entry *lqe)
 {
+       LASSERT(lqe != NULL);
        cfs_atomic_inc(&lqe->lqe_ref);
 }
 
 static inline void lqe_putref(struct lquota_entry *lqe)
 {
+       LASSERT(lqe != NULL);
        LASSERT(atomic_read(&lqe->lqe_ref) > 0);
        if (atomic_dec_and_test(&lqe->lqe_ref))
                OBD_FREE_PTR(lqe);
@@ -226,33 +236,33 @@ static inline int lqe_is_master(struct lquota_entry *lqe)
 static inline void lqe_write_lock(struct lquota_entry *lqe)
 {
        if (lqe_is_master(lqe))
-               cfs_down_write(&lqe->lqe_sem);
+               down_write(&lqe->lqe_sem);
        else
-               cfs_write_lock(&lqe->lqe_lock);
+               write_lock(&lqe->lqe_lock);
 }
 
 static inline void lqe_write_unlock(struct lquota_entry *lqe)
 {
        if (lqe_is_master(lqe))
-               cfs_up_write(&lqe->lqe_sem);
+               up_write(&lqe->lqe_sem);
        else
-               cfs_write_unlock(&lqe->lqe_lock);
+               write_unlock(&lqe->lqe_lock);
 }
 
 static inline void lqe_read_lock(struct lquota_entry *lqe)
 {
        if (lqe_is_master(lqe))
-               cfs_down_read(&lqe->lqe_sem);
+               down_read(&lqe->lqe_sem);
        else
-               cfs_read_lock(&lqe->lqe_lock);
+               read_lock(&lqe->lqe_lock);
 }
 
 static inline void lqe_read_unlock(struct lquota_entry *lqe)
 {
        if (lqe_is_master(lqe))
-               cfs_up_read(&lqe->lqe_sem);
+               up_read(&lqe->lqe_sem);
        else
-               cfs_read_unlock(&lqe->lqe_lock);
+               read_unlock(&lqe->lqe_lock);
 }
 
 /*
@@ -263,6 +273,9 @@ static inline void lqe_read_unlock(struct lquota_entry *lqe)
 #define LQUOTA_LEAST_QUNIT(type) \
        (type == LQUOTA_RES_MD ? (1 << 10) : toqb(PTLRPC_MAX_BRW_SIZE))
 
+#define LQUOTA_OVER_FL(type) \
+       (type == USRQUOTA ? QUOTA_FL_OVER_USRQUOTA : QUOTA_FL_OVER_GRPQUOTA)
+
 /* Common data shared by quota-level handlers. This is allocated per-thread to
  * reduce stack consumption */
 struct lquota_thread_info {
@@ -299,6 +312,11 @@ struct lquota_thread_info *lquota_info(const struct lu_env *env)
        return info;
 }
 
+#define req_is_acq(flags)    ((flags & QUOTA_DQACQ_FL_ACQ) != 0)
+#define req_is_preacq(flags) ((flags & QUOTA_DQACQ_FL_PREACQ) != 0)
+#define req_is_rel(flags)    ((flags & QUOTA_DQACQ_FL_REL) != 0)
+#define req_has_rep(flags)   ((flags & QUOTA_DQACQ_FL_REPORT) != 0)
+
 /* debugging macros */
 #ifdef LIBCFS_DEBUG
 #define lquota_lqe_debug(msgdata, mask, cdls, lqe, fmt, a...) do {      \
@@ -376,7 +394,8 @@ int lquota_disk_for_each_slv(const struct lu_env *, struct dt_object *,
                             struct lu_fid *, lquota_disk_slv_cb_t, void *);
 struct dt_object *lquota_disk_slv_find(const struct lu_env *,
                                       struct dt_device *, struct dt_object *,
-                                      struct lu_fid *, struct obd_uuid *);
+                                      const struct lu_fid *,
+                                      struct obd_uuid *);
 int lquota_disk_read(const struct lu_env *, struct dt_object *,
                     union lquota_id *, struct dt_rec *);
 int lquota_disk_declare_write(const struct lu_env *, struct thandle *,