Whamcloud - gitweb
LU-13826 utils: fix compatibility for LL_IOC_MDC_GETINFO
[fs/lustre-release.git] / lustre / include / uapi / linux / lustre / lustre_user.h
index e520f88..e3553cf 100644 (file)
@@ -50,6 +50,7 @@
 #include <linux/types.h>
 #include <linux/unistd.h>
 #include <linux/lustre/lustre_fiemap.h>
+#include <linux/lustre/lustre_ver.h>
 
 #ifndef __KERNEL__
 # define __USE_ISOC99  1
@@ -235,11 +236,14 @@ struct statx {
 
 #define STATX_ATTR_AUTOMOUNT           0x00001000 /* Dir: Automount trigger */
 
-#endif
+#define AT_STATX_SYNC_TYPE     0x6000  /* Type of synchronisation required from statx() */
+#define AT_STATX_SYNC_AS_STAT  0x0000  /* - Do whatever stat() does */
+#define AT_STATX_FORCE_SYNC    0x2000  /* - Force the attributes to be sync'd with the server */
+#define AT_STATX_DONT_SYNC     0x4000  /* - Don't sync attributes with the server */
 
-typedef struct statx lstatx_t;
+#endif /* STATX_BASIC_STATS */
 
-#define HAVE_LOV_USER_MDS_DATA
+typedef struct statx lstatx_t;
 
 #define LUSTRE_EOF 0xffffffffffffffffULL
 
@@ -252,15 +256,15 @@ typedef struct statx lstatx_t;
 #define LUSTRE_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_DEVICE_ORDER)
 
 enum obd_statfs_state {
-       OS_STATE_DEGRADED       = 0x00000001, /**< RAID degraded/rebuilding */
-       OS_STATE_READONLY       = 0x00000002, /**< filesystem is read-only */
-       OS_STATE_NOPRECREATE    = 0x00000004, /**< no object precreation */
-       OS_STATE_UNUSED1        = 0x00000008, /**< obsolete 1.6, was EROFS=30 */
-       OS_STATE_UNUSED2        = 0x00000010, /**< obsolete 1.6, was EROFS=30 */
-       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 */
+       OS_STATFS_DEGRADED      = 0x00000001, /**< RAID degraded/rebuilding */
+       OS_STATFS_READONLY      = 0x00000002, /**< filesystem is read-only */
+       OS_STATFS_NOPRECREATE   = 0x00000004, /**< no object precreation */
+       OS_STATFS_UNUSED1       = 0x00000008, /**< obsolete 1.6, was EROFS=30 */
+       OS_STATFS_UNUSED2       = 0x00000010, /**< obsolete 1.6, was EROFS=30 */
+       OS_STATFS_ENOSPC        = 0x00000020, /**< not enough free space */
+       OS_STATFS_ENOINO        = 0x00000040, /**< not enough inodes */
+       OS_STATFS_SUM           = 0x00000100, /**< aggregated for all tagrets */
+       OS_STATFS_NONROT        = 0x00000200, /**< non-rotational device */
 };
 
 /** filesystem statistics/attributes for target device */
@@ -275,7 +279,7 @@ struct obd_statfs {
        __u32           os_bsize;       /* block size in bytes for os_blocks */
        __u32           os_namelen;     /* maximum length of filename in bytes*/
        __u64           os_maxbytes;    /* maximum object size in bytes */
-       __u32           os_state;       /**< obd_statfs_state OS_STATE_* flag */
+       __u32           os_state;       /**< obd_statfs_state OS_STATFS_* */
        __u32           os_fprecreated; /* objs available now to the caller */
                                        /* used in QoS code to find preferred
                                         * OSTs */
@@ -419,8 +423,9 @@ enum lma_incompat {
                                                 is on the remote MDT */
        LMAI_STRIPED            = 0x00000008, /* striped directory inode */
        LMAI_ORPHAN             = 0x00000010, /* inode is orphan */
+       LMAI_ENCRYPT            = 0x00000020, /* inode is encrypted */
        LMA_INCOMPAT_SUPP       = (LMAI_AGENT | LMAI_REMOTE_PARENT | \
-                                  LMAI_STRIPED | LMAI_ORPHAN)
+                                  LMAI_STRIPED | LMAI_ORPHAN | LMAI_ENCRYPT)
 };
 
 
@@ -642,8 +647,6 @@ struct fsxattr {
 #define FS_IOC_FSGETXATTR              _IOR('X', 31, struct fsxattr)
 #define FS_IOC_FSSETXATTR              _IOW('X', 32, struct fsxattr)
 #endif
-#define LL_IOC_FSGETXATTR              FS_IOC_FSGETXATTR
-#define LL_IOC_FSSETXATTR              FS_IOC_FSSETXATTR
 #ifndef FS_XFLAG_PROJINHERIT
 #define FS_XFLAG_PROJINHERIT           0x00000200
 #endif
@@ -656,12 +659,12 @@ struct fsxattr {
 #define IOC_MDC_TYPE           'i'
 #define IOC_MDC_LOOKUP         _IOWR(IOC_MDC_TYPE, 20, struct obd_device *)
 #define IOC_MDC_GETFILESTRIPE  _IOWR(IOC_MDC_TYPE, 21, struct lov_user_md *)
-#ifdef HAVE_LOV_USER_MDS_DATA
-#define IOC_MDC_GETFILEINFO_OLD        _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data_v1 *)
-#define IOC_MDC_GETFILEINFO    _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data)
-#define LL_IOC_MDC_GETINFO_OLD _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data_v1 *)
-#define LL_IOC_MDC_GETINFO     _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data)
-#endif
+#define IOC_MDC_GETFILEINFO_V1 _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data_v1 *)
+#define IOC_MDC_GETFILEINFO_V2 _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data)
+#define LL_IOC_MDC_GETINFO_V1  _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data_v1 *)
+#define LL_IOC_MDC_GETINFO_V2  _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data)
+#define IOC_MDC_GETFILEINFO    IOC_MDC_GETFILEINFO_V1
+#define LL_IOC_MDC_GETINFO     LL_IOC_MDC_GETINFO_V1
 
 #define MAX_OBD_NAME 128 /* If this changes, a NEW ioctl must be added */
 
@@ -683,7 +686,6 @@ struct fsxattr {
 #define LL_FILE_GROUP_LOCKED    0x00000002
 #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
@@ -964,7 +966,6 @@ static inline __u32 lov_user_md_size(__u16 stripes, __u32 lmm_magic)
 /* Compile with -D_LARGEFILE64_SOURCE or -D_GNU_SOURCE (or #define) to
  * use this.  It is unsafe to #define those values in this header as it
  * is possible the application has already #included <sys/stat.h>. */
-#ifdef HAVE_LOV_USER_MDS_DATA
 #define lov_user_mds_data lov_user_mds_data_v2
 struct lov_user_mds_data_v1 {
        lstat_t lmd_st;                 /* MDS stat struct */
@@ -979,7 +980,6 @@ struct lov_user_mds_data_v2 {
        __u32 lmd_padding;              /* unused */
        struct lov_user_md_v1 lmd_lmm;  /* LOV EA user data */
 } __attribute__((packed));
-#endif
 
 struct lmv_user_mds_data {
        struct lu_fid   lum_fid;
@@ -1014,6 +1014,9 @@ static inline bool lmv_is_known_hash_type(__u32 type)
               (type & LMV_HASH_TYPE_MASK) == LMV_HASH_TYPE_CRUSH;
 }
 
+#define LMV_HASH_FLAG_MERGE            0x04000000
+#define LMV_HASH_FLAG_SPLIT            0x08000000
+
 /* The striped directory has ever lost its master LMV EA, then LFSCK
  * re-generated it. This flag is used to indicate such case. It is an
  * on-disk flag. */
@@ -1022,7 +1025,39 @@ static inline bool lmv_is_known_hash_type(__u32 type)
 #define LMV_HASH_FLAG_BAD_TYPE         0x20000000
 #define LMV_HASH_FLAG_MIGRATION                0x80000000
 
-#define LMV_HASH_FLAG_LAYOUT_CHANGE    LMV_HASH_FLAG_MIGRATION
+#define LMV_HASH_FLAG_LAYOUT_CHANGE    \
+       (LMV_HASH_FLAG_MIGRATION | LMV_HASH_FLAG_SPLIT | LMV_HASH_FLAG_MERGE)
+
+/* both SPLIT and MIGRATION are set for directory split */
+static inline bool lmv_hash_is_splitting(__u32 hash)
+{
+       return (hash & LMV_HASH_FLAG_LAYOUT_CHANGE) ==
+              (LMV_HASH_FLAG_SPLIT | LMV_HASH_FLAG_MIGRATION);
+}
+
+/* both MERGE and MIGRATION are set for directory merge */
+static inline bool lmv_hash_is_merging(__u32 hash)
+{
+       return (hash & LMV_HASH_FLAG_LAYOUT_CHANGE) ==
+              (LMV_HASH_FLAG_MERGE | LMV_HASH_FLAG_MIGRATION);
+}
+
+/* only MIGRATION is set for directory migration */
+static inline bool lmv_hash_is_migrating(__u32 hash)
+{
+       return (hash & LMV_HASH_FLAG_LAYOUT_CHANGE) == LMV_HASH_FLAG_MIGRATION;
+}
+
+static inline bool lmv_hash_is_restriping(__u32 hash)
+{
+       return lmv_hash_is_splitting(hash) || lmv_hash_is_merging(hash);
+}
+
+static inline bool lmv_hash_is_layout_changing(__u32 hash)
+{
+       return lmv_hash_is_splitting(hash) || lmv_hash_is_merging(hash) ||
+              lmv_hash_is_migrating(hash);
+}
 
 extern char *mdt_hash_name[LMV_HASH_TYPE_MAX];
 
@@ -1199,7 +1234,10 @@ static inline __u64 lustre_stoqb(__kernel_size_t space)
 #define LUSTRE_Q_FINVALIDATE 0x80000c     /* deprecated as of 2.4 */
 #define LUSTRE_Q_GETDEFAULT  0x80000d     /* get default quota */
 #define LUSTRE_Q_SETDEFAULT  0x80000e     /* set default quota */
-
+#define LUSTRE_Q_GETQUOTAPOOL  0x80000f  /* get user pool quota */
+#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 */
 /* 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.
@@ -1225,6 +1263,12 @@ static inline __u64 lustre_stoqb(__kernel_size_t space)
  * */
 #define LQUOTA_FLAG_DEFAULT    0x0001
 
+#define LUSTRE_Q_CMD_IS_POOL(cmd)              \
+       (cmd == LUSTRE_Q_GETQUOTAPOOL ||        \
+        cmd == LUSTRE_Q_SETQUOTAPOOL ||        \
+        cmd == LUSTRE_Q_SETINFOPOOL ||         \
+        cmd == LUSTRE_Q_GETINFOPOOL)
+
 #define ALLQUOTA 255       /* set all quota */
 static inline const char *qtype_name(int qtype)
 {
@@ -1240,7 +1284,6 @@ static inline const char *qtype_name(int qtype)
 }
 
 #define IDENTITY_DOWNCALL_MAGIC 0x6d6dd629
-#define SEPOL_DOWNCALL_MAGIC 0x8b8bb842
 
 /* permission */
 #define N_PERMS_MAX      64
@@ -1262,10 +1305,23 @@ struct identity_downcall_data {
        __u32                            idd_groups[0];
 };
 
+#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 16, 53, 0)
+/* old interface struct is deprecated in 2.14 */
+#define SEPOL_DOWNCALL_MAGIC_OLD 0x8b8bb842
+struct sepol_downcall_data_old {
+       __u32           sdd_magic;
+       __s64           sdd_sepol_mtime;
+       __u16           sdd_sepol_len;
+       char            sdd_sepol[0];
+};
+#endif
+
+#define SEPOL_DOWNCALL_MAGIC 0x8b8bb843
 struct sepol_downcall_data {
        __u32           sdd_magic;
-       __kernel_time_t sdd_sepol_mtime;
        __u16           sdd_sepol_len;
+       __u16           sdd_padding1;
+       __s64           sdd_sepol_mtime;
        char            sdd_sepol[0];
 };
 
@@ -1305,9 +1361,9 @@ struct obd_dqinfo {
 
 /* XXX: same as if_dqblk struct in kernel, plus one padding */
 struct obd_dqblk {
-       __u64 dqb_bhardlimit;
-       __u64 dqb_bsoftlimit;
-       __u64 dqb_curspace;
+       __u64 dqb_bhardlimit;   /* kbytes unit */
+       __u64 dqb_bsoftlimit;   /* kbytes unit */
+       __u64 dqb_curspace;     /* bytes unit */
        __u64 dqb_ihardlimit;
        __u64 dqb_isoftlimit;
        __u64 dqb_curinodes;
@@ -1335,6 +1391,7 @@ struct if_quotactl {
        struct obd_dqblk        qc_dqblk;
        char                    obd_type[16];
        struct obd_uuid         obd_uuid;
+       char                    qc_poolname[0];
 };
 
 /* swap layout flags */
@@ -1379,6 +1436,7 @@ enum la_valid {
        LA_LAYOUT_VERSION = 1 << 16,    /* 0x10000 */
        LA_LSIZE        = 1 << 17,      /* 0x20000 */
        LA_LBLOCKS      = 1 << 18,      /* 0x40000 */
+       LA_BTIME        = 1 << 19,      /* 0x80000 */
        /**
         * Attributes must be transmitted to OST objects
         */
@@ -2383,31 +2441,6 @@ struct hsm_copy {
        struct hsm_action_item  hc_hai;
 };
 
-/* JSON objects */
-enum llapi_json_types {
-       LLAPI_JSON_INTEGER = 1,
-       LLAPI_JSON_BIGNUM,
-       LLAPI_JSON_REAL,
-       LLAPI_JSON_STRING
-};
-
-struct llapi_json_item {
-       char                    *lji_key;
-       __u32                   lji_type;
-       union {
-               int     lji_integer;
-               __u64   lji_u64;
-               double  lji_real;
-               char    *lji_string;
-       };
-       struct llapi_json_item  *lji_next;
-};
-
-struct llapi_json_item_list {
-       int                     ljil_item_count;
-       struct llapi_json_item  *ljil_items;
-};
-
 enum lu_ladvise_type {
        LU_LADVISE_INVALID      = 0,
        LU_LADVISE_WILLREAD     = 1,