/* 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,
+ OSD_QID_INODE = BIT(0),
+ OSD_QID_BLK = BIT(1),
+ OSD_QID_FORCE = BIT(2),
};
/* Index features supported by the global index objects
/* 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,
+ QUOTA_FL_OVER_USRQUOTA = BIT(0),
+ QUOTA_FL_OVER_GRPQUOTA = BIT(1),
+ QUOTA_FL_SYNC = BIT(2),
+ QUOTA_FL_OVER_PRJQUOTA = BIT(3),
};
struct qsd_instance *qsd_init(const struct lu_env *, char *, struct dt_device *,
- struct proc_dir_entry *, bool is_md);
+ struct proc_dir_entry *, bool is_md, bool excl);
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 *);
struct lquota_trans *);
void qsd_op_adjust(const struct lu_env *, struct qsd_instance *,
union lquota_id *, int);
+int qsd_transfer(const struct lu_env *env, struct qsd_instance *qsd,
+ struct lquota_trans *trans, unsigned int qtype,
+ u64 orig_id, u64 new_id, u64 bspace,
+ struct lquota_id_info *qi);
+int qsd_reserve_or_free_quota(const struct lu_env *env,
+ struct qsd_instance *qsd,
+ struct lquota_id_info *qi);
/*
* Quota information attached to a transaction
* 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 8
+ * Given a parent dir and a sub dir, with different uid, gid and project id,
+ * need <parent,child> x <user,group,project> x <block,inode> = 12 ids */
+#define QUOTA_MAX_TRANSIDS 12
/* all qids involved in a single transaction */
struct lquota_trans {