Whamcloud - gitweb
LU-12036 ofd: add "no_precreate" mount option
[fs/lustre-release.git] / lustre / quota / lquota_internal.h
index 9309a90..f8f8340 100644 (file)
@@ -21,7 +21,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2012, 2014, Intel Corporation.
+ * Copyright (c) 2012, 2017, Intel Corporation.
  * Use is subject to license terms.
  */
 
@@ -31,7 +31,6 @@
 #ifndef _LQUOTA_INTERNAL_H
 #define _LQUOTA_INTERNAL_H
 
-#define QTYPE_NAME(qtype) ((qtype) == USRQUOTA ? "usr" : "grp")
 #define RES_NAME(res) ((res) == LQUOTA_RES_MD ? "md" : "dt")
 
 #define QIF_IFLAGS (QIF_INODES | QIF_ITIME | QIF_ILIMITS)
 enum lquota_local_oid {
        LQUOTA_USR_OID          = 1UL, /* slave index copy for user quota */
        LQUOTA_GRP_OID          = 2UL, /* slave index copy for group quota */
+       LQUOTA_PRJ_OID          = 3UL, /* slave index copy for project quota */
        /* all OIDs after this are allocated dynamically by the QMT */
        LQUOTA_GENERATED_OID    = 4096UL,
 };
 
+static inline __u32 qtype2slv_oid(int qtype)
+{
+       switch (qtype) {
+       case USRQUOTA:
+               return LQUOTA_USR_OID;
+       case GRPQUOTA:
+               return LQUOTA_GRP_OID;
+       case PRJQUOTA:
+               return LQUOTA_PRJ_OID;
+       }
+
+       /* should not come here, just make compile happy */
+       return LQUOTA_USR_OID;
+}
+
 /*
  * lquota_entry support
  */
@@ -65,8 +80,8 @@ struct lquota_entry_operations {
 
        /* Print debug information about a given lquota entry */
        void (*lqe_debug)(struct lquota_entry *, void *,
-                         struct libcfs_debug_msg_data *, const char *,
-                         va_list);
+                         struct libcfs_debug_msg_data *,
+                         struct va_format *vaf);
 };
 
 /* Per-ID information specific to the quota master target */
@@ -81,7 +96,7 @@ struct lquota_mst_entry {
        __u64                   lme_gracetime;
 
        /* last time we glimpsed */
-       __u64                   lme_revoke_time;
+       time64_t                lme_revoke_time;
 
        /* r/w semaphore used to protect concurrent access to the quota
         * parameters which are stored on disk */
@@ -122,16 +137,16 @@ struct lquota_slv_entry {
        __u64                   lse_usage;
 
        /* time to trigger quota adjust */
-       __u64                   lse_adjust_time;
+       time64_t                lse_adjust_time;
 
        /* return code of latest acquire RPC */
        int                     lse_acq_rc;
 
        /* when latest acquire RPC completed */
-       __u64                   lse_acq_time;
+       time64_t                lse_acq_time;
 
        /* when latest edquot set */
-       __u64                   lse_edquot_time;
+       time64_t                lse_edquot_time;
 };
 
 /* In-memory entry for each enforced quota id
@@ -163,11 +178,12 @@ struct lquota_entry {
        } u;
 
        /* flags describing the state of the lquota_entry */
-       unsigned long   lqe_enforced:1,/* quota enforced or not */
-                       lqe_uptodate:1,/* successfully read from disk */
-                       lqe_edquot:1,  /* id out of quota space on QMT */
-                       lqe_gl:1,      /* glimpse is in progress */
-                       lqe_nopreacq:1;/* pre-acquire disabled */
+       unsigned long   lqe_enforced:1,   /* quota enforced or not */
+                       lqe_uptodate:1,   /* successfully read from disk */
+                       lqe_edquot:1,     /* id out of quota space on QMT */
+                       lqe_gl:1,         /* glimpse is in progress */
+                       lqe_nopreacq:1,   /* pre-acquire disabled */
+                       lqe_is_default:1; /* the default quota is used */
 };
 
 /* Compartment within which lquota_entry are unique.
@@ -279,8 +295,20 @@ static inline void lqe_read_unlock(struct lquota_entry *lqe)
 #define LQUOTA_LEAST_QUNIT(type) \
        (type == LQUOTA_RES_MD ? (1 << 10) : toqb(OFD_MAX_BRW_SIZE))
 
-#define LQUOTA_OVER_FL(type) \
-       (type == USRQUOTA ? QUOTA_FL_OVER_USRQUOTA : QUOTA_FL_OVER_GRPQUOTA)
+static inline int lquota_over_fl(int qtype)
+{
+       switch (qtype) {
+       case USRQUOTA:
+               return QUOTA_FL_OVER_USRQUOTA;
+       case GRPQUOTA:
+               return QUOTA_FL_OVER_GRPQUOTA;
+       case PRJQUOTA:
+               return QUOTA_FL_OVER_PRJQUOTA;
+       }
+
+       /* should not come here, just make compile happy */
+       return QUOTA_FL_OVER_USRQUOTA;
+}
 
 /* Common data shared by quota-level handlers. This is allocated per-thread to
  * reduce stack consumption */
@@ -289,7 +317,6 @@ struct lquota_thread_info {
        struct lu_buf           qti_lb;
        struct lu_attr          qti_attr;
        struct dt_object_format qti_dof;
-       struct lustre_mdt_attrs qti_lma;
        struct lu_fid           qti_fid;
        char                    qti_buf[LQUOTA_NAME_MAX];
 };
@@ -307,15 +334,7 @@ extern struct lu_context_key lquota_thread_key;
 static inline
 struct lquota_thread_info *lquota_info(const struct lu_env *env)
 {
-       struct lquota_thread_info       *info;
-
-       info = lu_context_key_get(&env->le_ctx, &lquota_thread_key);
-       if (info == NULL) {
-               lu_env_refill((struct lu_env *)env);
-               info = lu_context_key_get(&env->le_ctx, &lquota_thread_key);
-       }
-       LASSERT(info);
-       return info;
+       return lu_env_info(env, &lquota_thread_key);
 }
 
 #define req_is_acq(flags)    ((flags & QUOTA_DQACQ_FL_ACQ) != 0)
@@ -339,7 +358,7 @@ void lquota_lqe_debug0(struct lquota_entry *lqe,
        __attribute__ ((format (printf, 3, 4)));
 
 #define LQUOTA_DEBUG_LIMIT(mask, lqe, fmt, a...) do {                          \
-       static cfs_debug_limit_state_t _lquota_cdls;                           \
+       static struct cfs_debug_limit_state _lquota_cdls;                      \
        LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, &_lquota_cdls);              \
        lquota_lqe_debug(&msgdata, mask, &_lquota_cdls, lqe, "$$$ "fmt" ",     \
                         ##a);                                                 \
@@ -367,8 +386,8 @@ void lquota_lqe_debug0(struct lquota_entry *lqe,
 /* lquota_lib.c */
 struct dt_object *acct_obj_lookup(const struct lu_env *, struct dt_device *,
                                  int);
-void lquota_generate_fid(struct lu_fid *, int, int, int);
-int lquota_extract_fid(const struct lu_fid *, int *, int *, int *);
+void lquota_generate_fid(struct lu_fid *, int, int);
+int lquota_extract_fid(const struct lu_fid *, int *, int *);
 const struct dt_index_features *glb_idx_feature(struct lu_fid *);
 
 /* lquota_entry.c */