Whamcloud - gitweb
LU-12349 llite: console message for disabled flock call
[fs/lustre-release.git] / lustre / include / uapi / linux / lustre / lustre_user.h
index 29e5260..66c8fd1 100644 (file)
@@ -132,6 +132,7 @@ enum obd_statfs_state {
        OS_STATE_ENOSPC         = 0x00000020, /**< not enough free space */
        OS_STATE_ENOINO         = 0x00000040, /**< not enough inodes */
        OS_STATE_SUM            = 0x00000100, /**< aggregated for all tagrets */
+       OS_STATE_NONROT         = 0x00000200, /**< non-rotational device */
 };
 
 /** filesystem statistics/attributes for target device */
@@ -392,6 +393,7 @@ enum ll_lease_flags {
        LL_LEASE_RESYNC_DONE    = 0x2,
        LL_LEASE_LAYOUT_MERGE   = 0x4,
        LL_LEASE_LAYOUT_SPLIT   = 0x8,
+       LL_LEASE_PCC_ATTACH     = 0x10,
 };
 
 #define IOC_IDS_MAX    4096
@@ -479,7 +481,10 @@ struct ll_ioc_lease_id {
 #define LL_IOC_GETPARENT               _IOWR('f', 249, struct getparent)
 #define LL_IOC_LADVISE                 _IOR('f', 250, struct llapi_lu_ladvise)
 #define LL_IOC_HEAT_GET                        _IOWR('f', 251, struct lu_heat)
-#define LL_IOC_HEAT_SET                        _IOW('f', 252, long)
+#define LL_IOC_HEAT_SET                        _IOW('f', 251, __u64)
+#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)
 
 #ifndef        FS_IOC_FSGETXATTR
 /*
@@ -533,6 +538,7 @@ struct fsxattr {
 #define LL_FILE_READAHEA        0x00000004
 #define LL_FILE_LOCKED_DIRECTIO 0x00000008 /* client-side locks with dio */
 #define LL_FILE_LOCKLESS_IO     0x00000010 /* server-side locks with cio */
+#define LL_FILE_FLOCK_WARNING   0x00000020 /* warned about disabled flock */
 
 #define LOV_USER_MAGIC_V1      0x0BD10BD0
 #define LOV_USER_MAGIC         LOV_USER_MAGIC_V1
@@ -547,11 +553,11 @@ struct fsxattr {
 #define LMV_USER_MAGIC_V0      0x0CD20CD0    /* old default lmv magic*/
 #define LMV_USER_MAGIC_SPECIFIC        0x0CD40CD0
 
-#define LOV_PATTERN_NONE       0x000
-#define LOV_PATTERN_RAID0      0x001
-#define LOV_PATTERN_RAID1      0x002
-#define LOV_PATTERN_MDT                0x100
-#define LOV_PATTERN_CMOBD      0x200
+#define LOV_PATTERN_NONE               0x000
+#define LOV_PATTERN_RAID0              0x001
+#define LOV_PATTERN_RAID1              0x002
+#define LOV_PATTERN_MDT                        0x100
+#define LOV_PATTERN_OVERSTRIPING       0x200
 
 #define LOV_PATTERN_F_MASK     0xffff0000
 #define LOV_PATTERN_F_HOLE     0x40000000 /* there is hole in LOV EA */
@@ -563,9 +569,22 @@ struct fsxattr {
 static inline bool lov_pattern_supported(__u32 pattern)
 {
        return (pattern & ~LOV_PATTERN_F_RELEASED) == LOV_PATTERN_RAID0 ||
+              (pattern & ~LOV_PATTERN_F_RELEASED) ==
+                       (LOV_PATTERN_RAID0 | LOV_PATTERN_OVERSTRIPING) ||
               (pattern & ~LOV_PATTERN_F_RELEASED) == LOV_PATTERN_MDT;
 }
 
+/* RELEASED and MDT patterns are not valid in many places, so rather than
+ * having many extra checks on lov_pattern_supported, we have this separate
+ * check for non-released, non-DOM components
+ */
+static inline bool lov_pattern_supported_normal_comp(__u32 pattern)
+{
+       return pattern == LOV_PATTERN_RAID0 ||
+              pattern == (LOV_PATTERN_RAID0 | LOV_PATTERN_OVERSTRIPING);
+
+}
+
 #define LOV_MAXPOOLNAME 15
 #define LOV_POOLNAMEF "%.15s"
 
@@ -581,7 +600,7 @@ static inline bool lov_pattern_supported(__u32 pattern)
  * allocation that is sufficient for the current generation of systems.
  *
  * (max buffer size - lov+rpc header) / sizeof(struct lov_ost_data_v1) */
-#define LOV_MAX_STRIPE_COUNT 2000  /* ((12 * 4096 - 256) / 24) */
+#define LOV_MAX_STRIPE_COUNT 2000  /* ~((12 * 4096 - 256) / 24) */
 #define LOV_ALL_STRIPES       0xffff /* only valid for directories */
 #define LOV_V1_INSANE_STRIPE_COUNT 65532 /* maximum stripe count bz13933 */
 
@@ -791,11 +810,16 @@ enum lmv_hash_type {
        LMV_HASH_TYPE_UNKNOWN   = 0,    /* 0 is reserved for testing purpose */
        LMV_HASH_TYPE_ALL_CHARS = 1,
        LMV_HASH_TYPE_FNV_1A_64 = 2,
+       LMV_HASH_TYPE_SPACE     = 3,    /*
+                                        * distribute subdirs among all MDTs
+                                        * with balanced space usage.
+                                        */
        LMV_HASH_TYPE_MAX,
 };
 
 #define LMV_HASH_NAME_ALL_CHARS        "all_char"
 #define LMV_HASH_NAME_FNV_1A_64        "fnv_1a_64"
+#define LMV_HASH_NAME_SPACE    "space"
 
 extern char *mdt_hash_name[LMV_HASH_TYPE_MAX];
 
@@ -825,7 +849,7 @@ struct lmv_user_md_v1 {
        __u32   lum_stripe_count;  /* dirstripe count */
        __u32   lum_stripe_offset; /* MDT idx for default dirstripe */
        __u32   lum_hash_type;     /* Dir stripe policy */
-       __u32   lum_type;         /* LMV type: default or normal */
+       __u32   lum_type;         /* LMV type: default */
        __u32   lum_padding1;
        __u32   lum_padding2;
        __u32   lum_padding3;
@@ -843,6 +867,15 @@ static inline __u32 lmv_foreign_to_md_stripes(__u32 size)
               sizeof(struct lmv_user_mds_data);
 }
 
+/*
+ * NB, historically default layout didn't set type, but use XATTR name to differ
+ * from normal layout, for backward compatibility, define LMV_TYPE_DEFAULT 0x0,
+ * and still use the same method.
+ */
+enum lmv_type {
+       LMV_TYPE_DEFAULT = 0x0000,
+};
+
 static inline int lmv_user_md_size(int stripes, int lmm_magic)
 {
        int size = sizeof(struct lmv_user_md);
@@ -1186,12 +1219,15 @@ enum la_valid {
 #define MDS_OPEN_RELEASE   02000000000000ULL /* Open the file for HSM release */
 
 #define MDS_OPEN_RESYNC    04000000000000ULL /* FLR: file resync */
+#define MDS_OPEN_PCC      010000000000000ULL /* PCC: auto RW-PCC cache attach
+                                             * for newly created file */
 
 /* lustre internal open flags, which should not be set from user space */
 #define MDS_OPEN_FL_INTERNAL (MDS_OPEN_HAS_EA | MDS_OPEN_HAS_OBJS |    \
                              MDS_OPEN_OWNEROVERRIDE | MDS_OPEN_LOCK |  \
                              MDS_OPEN_BY_FID | MDS_OPEN_LEASE |        \
-                             MDS_OPEN_RELEASE | MDS_OPEN_RESYNC)
+                             MDS_OPEN_RELEASE | MDS_OPEN_RESYNC |      \
+                             MDS_OPEN_PCC)
 
 
 /********* Changelogs **********/
@@ -2240,8 +2276,10 @@ enum lu_heat_flag_bit {
        LU_HEAT_FLAG_BIT_CLEAR,
 };
 
-#define LU_HEAT_FLAG_CLEAR     (1 << LU_HEAT_FLAG_BIT_CLEAR)
-#define LU_HEAT_FLAG_OFF       (1 << LU_HEAT_FLAG_BIT_OFF)
+enum lu_heat_flag {
+       LU_HEAT_FLAG_OFF        = 1ULL << LU_HEAT_FLAG_BIT_OFF,
+       LU_HEAT_FLAG_CLEAR      = 1ULL << LU_HEAT_FLAG_BIT_CLEAR,
+};
 
 enum obd_heat_type {
        OBD_HEAT_READSAMPLE     = 0,
@@ -2264,6 +2302,62 @@ struct lu_heat {
        __u64 lh_heat[0];
 };
 
+enum lu_pcc_type {
+       LU_PCC_NONE = 0,
+       LU_PCC_READWRITE,
+       LU_PCC_MAX
+};
+
+static inline const char *pcc_type2string(enum lu_pcc_type type)
+{
+       switch (type) {
+       case LU_PCC_NONE:
+               return "none";
+       case LU_PCC_READWRITE:
+               return "readwrite";
+       default:
+               return "fault";
+       }
+}
+
+struct lu_pcc_attach {
+       __u32 pcca_type; /* PCC type */
+       __u32 pcca_id; /* archive ID for readwrite, group ID for readonly */
+};
+
+enum lu_pcc_detach_opts {
+       PCC_DETACH_OPT_NONE = 0, /* Detach only, keep the PCC copy */
+       PCC_DETACH_OPT_UNCACHE, /* Remove the cached file after detach */
+};
+
+struct lu_pcc_detach_fid {
+       /* fid of the file to detach */
+       struct lu_fid   pccd_fid;
+       __u32           pccd_opt;
+};
+
+struct lu_pcc_detach {
+       __u32           pccd_opt;
+};
+
+enum lu_pcc_state_flags {
+       PCC_STATE_FL_NONE               = 0x0,
+       /* The inode attr is cached locally */
+       PCC_STATE_FL_ATTR_VALID         = 0x01,
+       /* The file is being attached into PCC */
+       PCC_STATE_FL_ATTACHING          = 0x02,
+       /* Allow to auto attach at open */
+       PCC_STATE_FL_OPEN_ATTACH        = 0x04,
+};
+
+struct lu_pcc_state {
+       __u32   pccs_type; /* enum lu_pcc_type */
+       __u32   pccs_open_count;
+       __u32   pccs_flags; /* enum lu_pcc_state_flags */
+       __u32   pccs_padding;
+       char    pccs_path[PATH_MAX];
+};
+
 #if defined(__cplusplus)
 }
 #endif