#define LL_IOC_PCC_DETACH _IOW('f', 252, struct lu_pcc_detach)
#define LL_IOC_PCC_DETACH_BY_FID _IOW('f', 252, struct lu_pcc_detach_fid)
#define LL_IOC_PCC_STATE _IOR('f', 252, struct lu_pcc_state)
+#define LL_IOC_PROJECT _IOW('f', 253, struct lu_project)
#ifndef FS_IOC_FSGETXATTR
/*
#define LOV_OFFSET_DEFAULT ((__u16)-1)
#define LMV_OFFSET_DEFAULT ((__u32)-1)
-#define LOV_QOS_DEF_THRESHOLD_RR_PCT 17
-#define LMV_QOS_DEF_THRESHOLD_RR_PCT 5
-
-#define LOV_QOS_DEF_PRIO_FREE 90
-#define LMV_QOS_DEF_PRIO_FREE 90
-
static inline bool lov_pattern_supported(__u32 pattern)
{
return (pattern & ~LOV_PATTERN_F_RELEASED) == LOV_PATTERN_RAID0 ||
* on-disk data for lcm_flags. Valid if lcm_magic is LOV_MAGIC_COMP_V1.
*/
enum lov_comp_md_flags {
- /* the least 2 bits are used by FLR to record file state */
- LCM_FL_NONE = 0,
- LCM_FL_RDONLY = 1,
- LCM_FL_WRITE_PENDING = 2,
- LCM_FL_SYNC_PENDING = 3,
- LCM_FL_FLR_MASK = 0x3,
+ /* the least 4 bits are used by FLR to record file state */
+ LCM_FL_NONE = 0x0,
+ LCM_FL_RDONLY = 0x1,
+ LCM_FL_WRITE_PENDING = 0x2,
+ LCM_FL_SYNC_PENDING = 0x3,
+ LCM_FL_PCC_RDONLY = 0x8,
+ LCM_FL_FLR_MASK = 0xB,
};
struct lov_comp_md_v1 {
"crush",
};
-#define LMV_HASH_TYPE_DEFAULT LMV_HASH_TYPE_FNV_1A_64
+#define LMV_HASH_TYPE_DEFAULT LMV_HASH_TYPE_CRUSH
/* Right now only the lower part(0-16bits) of lmv_hash_type is being used,
* and the higher part will be the flag to indicate the status of object,
(type & LMV_HASH_TYPE_MASK) == LMV_HASH_TYPE_CRUSH;
}
+/* fixed layout, such directories won't split automatically */
+/* NB, update LMV_HASH_FLAG_KNOWN when adding new flag */
+#define LMV_HASH_FLAG_FIXED 0x02000000
#define LMV_HASH_FLAG_MERGE 0x04000000
#define LMV_HASH_FLAG_SPLIT 0x08000000
#define LMV_HASH_FLAG_LAYOUT_CHANGE \
(LMV_HASH_FLAG_MIGRATION | LMV_HASH_FLAG_SPLIT | LMV_HASH_FLAG_MERGE)
+#define LMV_HASH_FLAG_KNOWN 0xfe000000
+
/* both SPLIT and MIGRATION are set for directory split */
static inline bool lmv_hash_is_splitting(__u32 hash)
{
#define LUSTRE_Q_SETQUOTAPOOL 0x800010 /* set user pool quota */
#define LUSTRE_Q_GETINFOPOOL 0x800011 /* get pool quota info */
#define LUSTRE_Q_SETINFOPOOL 0x800012 /* set pool quota info */
+#define LUSTRE_Q_GETDEFAULT_POOL 0x800013 /* get default pool quota*/
+#define LUSTRE_Q_SETDEFAULT_POOL 0x800014 /* set default pool quota */
/* In the current Lustre implementation, the grace time is either the time
* or the timestamp to be used after some quota ID exceeds the soft limt,
* 48 bits should be enough, its high 16 bits can be used as quota flags.
(cmd == LUSTRE_Q_GETQUOTAPOOL || \
cmd == LUSTRE_Q_SETQUOTAPOOL || \
cmd == LUSTRE_Q_SETINFOPOOL || \
- cmd == LUSTRE_Q_GETINFOPOOL)
+ cmd == LUSTRE_Q_GETINFOPOOL || \
+ cmd == LUSTRE_Q_SETDEFAULT_POOL || \
+ cmd == LUSTRE_Q_GETDEFAULT_POOL)
#define ALLQUOTA 255 /* set all quota */
static inline const char *qtype_name(int qtype)
CL_RESYNC = 22, /* FLR: file was resync-ed */
CL_GETXATTR = 23,
CL_DN_OPEN = 24, /* denied open */
- CL_LAST
+ CL_LAST,
};
static inline const char *changelog_type2str(int type) {
char pccs_path[PATH_MAX];
};
+enum lu_project_type {
+ LU_PROJECT_NONE = 0,
+ LU_PROJECT_SET,
+ LU_PROJECT_GET,
+ LU_PROJECT_MAX
+};
+
+struct lu_project {
+ __u32 project_type; /* enum lu_project_type */
+ __u32 project_id;
+ __u32 project_xflags;
+ __u32 project_reserved;
+ char project_name[NAME_MAX + 1];
+};
+
struct fid_array {
__u32 fa_nr;
/* make header's size equal lu_fid */