X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Finclude%2Flustre_quota.h;h=17ff2da6240cad6ece9ee171712b6ef74baec38b;hp=2bb8c2029fb9fdfaaf432ae965b1f667c442bcee;hb=917655fc2938b90a9c246dd2d58408c42aa1658d;hpb=5522990660248930108e84c89bc7e5807bda9ea0 diff --git a/lustre/include/lustre_quota.h b/lustre/include/lustre_quota.h index 2bb8c20..17ff2da 100644 --- a/lustre/include/lustre_quota.h +++ b/lustre/include/lustre_quota.h @@ -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. */ @@ -47,10 +47,6 @@ #define MAX_DQ_TIME 604800 /* (7*24*60*60) 1 week */ #endif -#ifndef LL_MAXQUOTAS -#define LL_MAXQUOTAS 2 -#endif - struct lquota_id_info; struct lquota_trans; @@ -63,6 +59,13 @@ union lquota_rec { struct lquota_acct_rec lqr_acct_rec; }; +/* flags for inode/block quota accounting */ +enum osd_qid_declare_flags { + OSD_QID_INODE = 1 << 0, + OSD_QID_BLK = 1 << 1, + OSD_QID_FORCE = 1 << 2, +}; + /* Index features supported by the global index objects * Only used for migration purpose and should be removed once on-disk migration * is no longer needed */ @@ -172,13 +175,22 @@ struct qsd_instance; * Below are the function prototypes to be used by OSD layer to manage quota * enforcement. Arguments are documented where each function is defined. */ +/* flags for quota local enforcement */ +enum osd_quota_local_flags { + QUOTA_FL_OVER_USRQUOTA = 1 << 0, + QUOTA_FL_OVER_GRPQUOTA = 1 << 1, + QUOTA_FL_SYNC = 1 << 2, + QUOTA_FL_OVER_PRJQUOTA = 1 << 3, +}; + struct qsd_instance *qsd_init(const struct lu_env *, char *, struct dt_device *, - struct proc_dir_entry *); + struct proc_dir_entry *, bool is_md); int qsd_prepare(const struct lu_env *, struct qsd_instance *); int qsd_start(const struct lu_env *, struct qsd_instance *); void qsd_fini(const struct lu_env *, struct qsd_instance *); int qsd_op_begin(const struct lu_env *, struct qsd_instance *, - struct lquota_trans *, struct lquota_id_info *, int *); + struct lquota_trans *, struct lquota_id_info *, + enum osd_quota_local_flags *); void qsd_op_end(const struct lu_env *, struct qsd_instance *, struct lquota_trans *); void qsd_op_adjust(const struct lu_env *, struct qsd_instance *, @@ -209,13 +221,13 @@ struct lquota_id_info { bool lqi_is_blk; }; -/* Since we enforce only inode quota in meta pool (MDTs), and block quota in - * data pool (OSTs), there are at most 4 quota ids being enforced in a single - * transaction, which is chown transaction: +/* With the DoM, both inode quota in meta pool and block quota in data pool + * will be enforced at MDT, there are at most 4 quota ids being enforced in + * a single transaction for inode and block quota, which is chown transaction: * original uid and gid, new uid and gid. * * This value might need to be revised when directory quota is added. */ -#define QUOTA_MAX_TRANSIDS 4 +#define QUOTA_MAX_TRANSIDS 8 /* all qids involved in a single transaction */ struct lquota_trans { @@ -223,11 +235,6 @@ struct lquota_trans { struct lquota_id_info lqt_ids[QUOTA_MAX_TRANSIDS]; }; -/* flags for quota local enforcement */ -#define QUOTA_FL_OVER_USRQUOTA 0x01 -#define QUOTA_FL_OVER_GRPQUOTA 0x02 -#define QUOTA_FL_SYNC 0x04 - #define IS_LQUOTA_RES(res) \ (res->lr_name.name[LUSTRE_RES_ID_SEQ_OFF] == FID_SEQ_QUOTA || \ res->lr_name.name[LUSTRE_RES_ID_SEQ_OFF] == FID_SEQ_QUOTA_GLB)