Whamcloud - gitweb
LU-11213 uapi: Remove unused CONNECT flag
[fs/lustre-release.git] / lustre / include / uapi / linux / lustre / lustre_idl.h
index ff8ab1a..372d0de 100644 (file)
@@ -173,12 +173,14 @@ extern void lustre_loa_init(struct lustre_ost_attrs *loa,
                            const struct lu_fid *fid,
                            __u32 compat, __u32 incompat);
 
-/* copytool uses a 32b bitmask field to encode archive-Ids during register
- * with MDT thru kuc.
+/* copytool can use any nonnegative integer to represent archive-Ids during
+ * register with MDT thru kuc.
  * archive num = 0 => all
- * archive num from 1 to 32
+ * archive num from 1 to MAX_U32
  */
-#define LL_HSM_MAX_ARCHIVE (sizeof(__u32) * 8)
+#define LL_HSM_ORIGIN_MAX_ARCHIVE      (sizeof(__u32) * 8)
+/* the max count of archive ids that one agent can support */
+#define LL_HSM_MAX_ARCHIVES_PER_AGENT  1024
 
 /**
  * HSM on-disk attributes stored in a separate xattr.
@@ -532,12 +534,15 @@ static inline size_t lu_dirent_calc_size(size_t namelen, __u16 attr)
 
        if (attr & LUDA_TYPE) {
                const size_t align = sizeof(struct luda_type) - 1;
-                size = (sizeof(struct lu_dirent) + namelen + align) & ~align;
-                size += sizeof(struct luda_type);
-        } else
-                size = sizeof(struct lu_dirent) + namelen;
 
-        return (size + 7) & ~7;
+               size = (sizeof(struct lu_dirent) + namelen + 1 + align) &
+                      ~align;
+               size += sizeof(struct luda_type);
+       } else {
+               size = sizeof(struct lu_dirent) + namelen + 1;
+       }
+
+       return (size + 7) & ~7;
 }
 
 #define MDS_DIR_END_OFF 0xfffffffffffffffeULL
@@ -824,10 +829,16 @@ struct ptlrpc_body_v2 {
 #define OBD_CONNECT2_LOCKAHEAD          0x2ULL /* ladvise lockahead v2 */
 #define OBD_CONNECT2_DIR_MIGRATE        0x4ULL /* migrate striped dir */
 #define OBD_CONNECT2_SUM_STATFS                0x8ULL /* MDT return aggregated stats */
+#define OBD_CONNECT2_OVERSTRIPING      0x10ULL /* OST overstriping support */
 #define OBD_CONNECT2_FLR               0x20ULL /* FLR support */
 #define OBD_CONNECT2_WBC_INTENTS       0x40ULL /* create/unlink/... intents for wbc, also operations under client-held parent locks */
 #define OBD_CONNECT2_LOCK_CONVERT      0x80ULL /* IBITS lock convert support */
 #define OBD_CONNECT2_ARCHIVE_ID_ARRAY  0x100ULL /* store HSM archive_id in array */
+#define OBD_CONNECT2_INC_XID           0x200ULL /* Increasing xid */
+#define OBD_CONNECT2_SELINUX_POLICY    0x400ULL /* has client SELinux policy */
+#define OBD_CONNECT2_LSOM              0x800ULL /* LSOM support */
+#define OBD_CONNECT2_PCC               0x1000ULL /* Persistent Client Cache */
+#define OBD_CONNECT2_ASYNC_DISCARD     0x4000ULL /* support async DoM data discard */
 
 /* XXX README XXX:
  * Please DO NOT add flag values here before first ensuring that this same
@@ -878,10 +889,17 @@ struct ptlrpc_body_v2 {
                                OBD_CONNECT_GRANT_PARAM | \
                                OBD_CONNECT_SHORTIO | OBD_CONNECT_FLAGS2)
 
-#define MDT_CONNECT_SUPPORTED2 (OBD_CONNECT2_FILE_SECCTX | OBD_CONNECT2_FLR | \
-                                OBD_CONNECT2_SUM_STATFS | \
+#define MDT_CONNECT_SUPPORTED2 (OBD_CONNECT2_FILE_SECCTX | \
+                               OBD_CONNECT2_DIR_MIGRATE | \
+                               OBD_CONNECT2_SUM_STATFS | \
+                               OBD_CONNECT2_OVERSTRIPING | \
+                               OBD_CONNECT2_FLR |\
                                OBD_CONNECT2_LOCK_CONVERT | \
-                               OBD_CONNECT2_DIR_MIGRATE)
+                               OBD_CONNECT2_ARCHIVE_ID_ARRAY | \
+                               OBD_CONNECT2_SELINUX_POLICY | \
+                               OBD_CONNECT2_LSOM | \
+                               OBD_CONNECT2_ASYNC_DISCARD | \
+                               OBD_CONNECT2_PCC)
 
 #define OST_CONNECT_SUPPORTED  (OBD_CONNECT_SRVLOCK | OBD_CONNECT_GRANT | \
                                OBD_CONNECT_REQPORTAL | OBD_CONNECT_VERSION | \
@@ -1075,6 +1093,9 @@ enum obdo_flags {
                              OBD_FL_CKSUM_CRC32C | OBD_FL_CKSUM_T10IP512 |
                              OBD_FL_CKSUM_T10IP4K | OBD_FL_CKSUM_T10CRC512 |
                              OBD_FL_CKSUM_T10CRC4K,
+
+       OBD_FL_NO_QUOTA_ALL = OBD_FL_NO_USRQUOTA | OBD_FL_NO_GRPQUOTA |
+                             OBD_FL_NO_PRJQUOTA,
 };
 
 /*
@@ -1095,6 +1116,8 @@ enum obdo_flags {
 #define LOV_MAGIC_SPECIFIC     (0x0BD50000 | LOV_MAGIC_MAGIC)
 #define LOV_MAGIC              LOV_MAGIC_V1
 #define LOV_MAGIC_COMP_V1      (0x0BD60000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_FOREIGN      (0x0BD70000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_SEL          (0x0BD80000 | LOV_MAGIC_MAGIC)
 
 /*
  * magic for fully defined striping
@@ -1284,6 +1307,7 @@ lov_mds_md_max_stripe_count(size_t buf_size, __u32 lmm_magic)
 #define OBD_MD_DEFAULT_MEA   (0x0040000000000000ULL) /* default MEA */
 #define OBD_MD_FLOSTLAYOUT   (0x0080000000000000ULL) /* contain ost_layout */
 #define OBD_MD_FLPROJID      (0x0100000000000000ULL) /* project ID */
+#define OBD_MD_SECCTX        (0x0200000000000000ULL) /* embed security xattr */
 
 #define OBD_MD_FLALLQUOTA (OBD_MD_FLUSRQUOTA | \
                           OBD_MD_FLGRPQUOTA | \
@@ -1618,6 +1642,7 @@ enum mds_cmd {
        MDS_HSM_CT_REGISTER     = 59,
        MDS_HSM_CT_UNREGISTER   = 60,
        MDS_SWAP_LAYOUTS        = 61,
+       MDS_RMFID               = 62,
        MDS_LAST_OPC
 };
 
@@ -1666,29 +1691,31 @@ enum mds_reint_op {
 #define DISP_OPEN_DENY      0x10000000
 
 /* INODE LOCK PARTS */
-#define MDS_INODELOCK_LOOKUP 0x000001  /* For namespace, dentry etc, and also
-                                        * was used to protect permission (mode,
-                                        * owner, group etc) before 2.4. */
-#define MDS_INODELOCK_UPDATE 0x000002  /* size, links, timestamps */
-#define MDS_INODELOCK_OPEN   0x000004  /* For opened files */
-#define MDS_INODELOCK_LAYOUT 0x000008  /* for layout */
-
-/* The PERM bit is added int 2.4, and it is used to protect permission(mode,
- * owner, group, acl etc), so to separate the permission from LOOKUP lock.
- * Because for remote directories(in DNE), these locks will be granted by
- * different MDTs(different ldlm namespace).
- *
- * For local directory, MDT will always grant UPDATE_LOCK|PERM_LOCK together.
- * For Remote directory, the master MDT, where the remote directory is, will
- * grant UPDATE_LOCK|PERM_LOCK, and the remote MDT, where the name entry is,
- * will grant LOOKUP_LOCK. */
-#define MDS_INODELOCK_PERM   0x000010
-#define MDS_INODELOCK_XATTR  0x000020  /* extended attributes */
-#define MDS_INODELOCK_DOM    0x000040 /* Data for data-on-mdt files */
-
-#define MDS_INODELOCK_MAXSHIFT 6
+enum mds_ibits_locks {
+       MDS_INODELOCK_LOOKUP    = 0x000001, /* For namespace, dentry etc.  Was
+                                            * used to protect permission (mode,
+                                            * owner, group, etc) before 2.4. */
+       MDS_INODELOCK_UPDATE    = 0x000002, /* size, links, timestamps */
+       MDS_INODELOCK_OPEN      = 0x000004, /* For opened files */
+       MDS_INODELOCK_LAYOUT    = 0x000008, /* for layout */
+
+       /* The PERM bit is added in 2.4, and is used to protect permission
+        * (mode, owner, group, ACL, etc.) separate from LOOKUP lock.
+        * For remote directories (in DNE) these locks will be granted by
+        * different MDTs (different LDLM namespace).
+        *
+        * For local directory, the MDT always grants UPDATE|PERM together.
+        * For remote directory, master MDT (where remote directory is) grants
+        * UPDATE|PERM, and remote MDT (where name entry is) grants LOOKUP_LOCK.
+        */
+       MDS_INODELOCK_PERM      = 0x000010,
+       MDS_INODELOCK_XATTR     = 0x000020, /* non-permission extended attrs */
+       MDS_INODELOCK_DOM       = 0x000040, /* Data for Data-on-MDT files */
+       /* Do not forget to increase MDS_INODELOCK_NUMBITS when adding bits */
+};
+#define MDS_INODELOCK_NUMBITS 7
 /* This FULL lock is useful to take on unlink sort of operations */
-#define MDS_INODELOCK_FULL ((1<<(MDS_INODELOCK_MAXSHIFT+1))-1)
+#define MDS_INODELOCK_FULL ((1 << MDS_INODELOCK_NUMBITS) - 1)
 /* DOM lock shouldn't be canceled early, use this macro for ELC */
 #define MDS_INODELOCK_ELC (MDS_INODELOCK_FULL & ~MDS_INODELOCK_DOM)
 
@@ -1710,17 +1737,17 @@ enum {
 enum {
        /* these should be identical to their EXT4_*_FL counterparts, they are
         * redefined here only to avoid dragging in fs/ext4/ext4.h */
-       LUSTRE_SYNC_FL = 0x00000008, /* Synchronous updates */
-       LUSTRE_IMMUTABLE_FL = 0x00000010, /* Immutable file */
-       LUSTRE_APPEND_FL = 0x00000020, /* writes to file may only append */
-       LUSTRE_NODUMP_FL = 0x00000040, /* do not dump file */
-       LUSTRE_NOATIME_FL = 0x00000080, /* do not update atime */
-       LUSTRE_INDEX_FL = 0x00001000, /* hash-indexed directory */
-       LUSTRE_DIRSYNC_FL = 0x00010000, /* dirsync behaviour (dir only) */
-       LUSTRE_TOPDIR_FL = 0x00020000, /* Top of directory hierarchies*/
-       LUSTRE_DIRECTIO_FL = 0x00100000, /* Use direct i/o */
-       LUSTRE_INLINE_DATA_FL = 0x10000000, /* Inode has inline data. */
-       LUSTRE_PROJINHERIT_FL = 0x20000000, /* Create with parents projid */
+       LUSTRE_SYNC_FL          = 0x00000008, /* Synchronous updates */
+       LUSTRE_IMMUTABLE_FL     = 0x00000010, /* Immutable file */
+       LUSTRE_APPEND_FL        = 0x00000020, /* file writes may only append */
+       LUSTRE_NODUMP_FL        = 0x00000040, /* do not dump file */
+       LUSTRE_NOATIME_FL       = 0x00000080, /* do not update atime */
+       LUSTRE_INDEX_FL         = 0x00001000, /* hash-indexed directory */
+       LUSTRE_DIRSYNC_FL       = 0x00010000, /* dirsync behaviour (dir only) */
+       LUSTRE_TOPDIR_FL        = 0x00020000, /* Top of directory hierarchies*/
+       LUSTRE_DIRECTIO_FL      = 0x00100000, /* Use direct i/o */
+       LUSTRE_INLINE_DATA_FL   = 0x10000000, /* Inode has inline data. */
+       LUSTRE_PROJINHERIT_FL   = 0x20000000, /* Create with parents projid */
 
        /* These flags will not be identical to any EXT4_*_FL counterparts,
         * and only reserved for lustre purpose. Note: these flags might
@@ -1729,10 +1756,10 @@ enum {
         * wired by la_flags see osd_attr_get().
         * 2. If these flags needs to be stored into inode, they will be
         * stored in LMA. see LMAI_XXXX */
-       LUSTRE_ORPHAN_FL = 0x00002000,
-       LUSTRE_SET_SYNC_FL = 0x00040000, /* Synchronous setattr on OSTs */
+       LUSTRE_ORPHAN_FL        = 0x00002000,
+       LUSTRE_SET_SYNC_FL      = 0x00040000, /* Synchronous setattr on OSTs */
 
-       LUSTRE_LMA_FL_MASKS = LUSTRE_ORPHAN_FL,
+       LUSTRE_LMA_FL_MASKS     = LUSTRE_ORPHAN_FL,
 };
 
 #ifndef FS_XFLAG_SYNC
@@ -1930,6 +1957,7 @@ enum mds_op_bias {
        MDS_CLOSE_RESYNC_DONE   = 1 << 16,
        MDS_CLOSE_LAYOUT_SPLIT  = 1 << 17,
        MDS_TRUNC_KEEP_LEASE    = 1 << 18,
+       MDS_PCC_ATTACH          = 1 << 19,
 };
 
 #define MDS_CLOSE_INTENT (MDS_HSM_RELEASE | MDS_CLOSE_LAYOUT_SWAP |         \
@@ -1952,7 +1980,10 @@ struct mdt_rec_create {
        struct lu_fid   cr_fid2;
        struct lustre_handle cr_open_handle_old; /* in case of open replay */
        __s64           cr_time;
-       __u64           cr_rdev;
+       union {
+               __u64           cr_rdev;
+               __u32           cr_archive_id;
+       };
        __u64           cr_ioepoch;
        __u64           cr_padding_1;   /* rr_blocks */
        __u32           cr_mode;
@@ -2101,7 +2132,8 @@ struct mdt_rec_resync {
        __u32           rs_padding6;    /* rr_flags */
        __u32           rs_padding7;    /* rr_flags_h */
        __u32           rs_padding8;    /* rr_umask */
-       __u32           rs_padding9;    /* rr_padding_4 */
+       __u16           rs_mirror_id;
+       __u16           rs_padding9;    /* rr_padding_4 */
 };
 
 /*
@@ -2135,9 +2167,12 @@ struct mdt_rec_reint {
        __u32           rr_flags;
        __u32           rr_flags_h;
        __u32           rr_umask;
-       __u32           rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
+       __u16           rr_mirror_id;
+       __u16           rr_padding_4; /* also fix lustre_swab_mdt_rec_reint */
 };
 
+#define LMV_DESC_QOS_MAXAGE_DEFAULT 60  /* Seconds */
+
 /* lmv structures */
 struct lmv_desc {
        __u32 ld_tgt_count;             /* how many MDS's */
@@ -2181,33 +2216,21 @@ struct lmv_mds_md_v1 {
        struct lu_fid lmv_stripe_fids[0];       /* FIDs for each stripe */
 };
 
+/* foreign LMV EA */
+struct lmv_foreign_md {
+       __u32 lfm_magic;        /* magic number = LMV_MAGIC_FOREIGN */
+       __u32 lfm_length;       /* length of lfm_value */
+       __u32 lfm_type;         /* type, see LU_FOREIGN_TYPE_ */
+       __u32 lfm_flags;        /* flags, type specific */
+       char lfm_value[];       /* free format value */
+};
+
 #define LMV_MAGIC_V1   0x0CD20CD0    /* normal stripe lmv magic */
 #define LMV_MAGIC      LMV_MAGIC_V1
 
 /* #define LMV_USER_MAGIC 0x0CD30CD0 */
 #define LMV_MAGIC_STRIPE 0x0CD40CD0 /* magic for dir sub_stripe */
-
-/* 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,
- * for example the object is being migrated. And the hash function
- * might be interpreted differently with different flags. */
-#define LMV_HASH_TYPE_MASK 0x0000ffff
-
-#define LMV_HASH_FLAG_MIGRATION        0x80000000
-
-#if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 12, 53, 0)
-/* Since lustre 2.8, this flag will not be needed, instead this DEAD
- * and orphan flags will be stored in LMA (see LMAI_ORPHAN)
- * Keep this flag just for LFSCK, because it still might meet such
- * flag when it checks the old FS */
-#define LMV_HASH_FLAG_DEAD     0x40000000
-#endif
-#define LMV_HASH_FLAG_BAD_TYPE 0x20000000
-
-/* 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. */
-#define LMV_HASH_FLAG_LOST_LMV 0x10000000
+#define LMV_MAGIC_FOREIGN 0x0CD50CD0 /* magic for lmv foreign */
 
 /**
  * The FNV-1a hash algorithm is as follows:
@@ -2241,6 +2264,7 @@ union lmv_mds_md {
        __u32                    lmv_magic;
        struct lmv_mds_md_v1     lmv_md_v1;
        struct lmv_user_md       lmv_user_md;
+       struct lmv_foreign_md    lmv_foreign_md;
 };
 
 static inline int lmv_mds_md_size(int stripe_count, unsigned int lmm_magic)
@@ -2907,6 +2931,11 @@ enum llog_flag {
                          LLOG_F_EXT_X_OMODE | LLOG_F_EXT_X_XATTR,
 };
 
+/* means first record of catalog */
+enum {
+       LLOG_CAT_FIRST = -1,
+};
+
 /* On-disk header structure of each log object, stored in little endian order */
 #define LLOG_MIN_CHUNK_SIZE    8192
 #define LLOG_HEADER_SIZE        (96) /* sizeof (llog_log_hdr) + sizeof(llh_tail)
@@ -3505,6 +3534,8 @@ struct close_data {
                struct close_data_resync_done   cd_resync;
                /* split close */
                __u16                           cd_mirror_id;
+               /* PCC release */
+               __u32                           cd_archive_id;
        };
 };
 
@@ -3565,6 +3596,19 @@ struct llog_update_record {
        */
 };
 
+/* sepol string format is:
+ * <1-digit for SELinux status>:<policy name>:<policy version>:<policy hash>
+ */
+/* Max length of the sepol string
+ * Should be large enough to contain a sha512sum of the policy
+ */
+#define SELINUX_MODE_LEN 1
+#define SELINUX_POLICY_VER_LEN 3 /* 3 chars to leave room for the future */
+#define SELINUX_POLICY_HASH_LEN 64
+#define LUSTRE_NODEMAP_SEPOL_LENGTH (SELINUX_MODE_LEN + NAME_MAX + \
+                                    SELINUX_POLICY_VER_LEN + \
+                                    SELINUX_POLICY_HASH_LEN + 3)
+
 /* nodemap records, uses 32 byte record length */
 #define LUSTRE_NODEMAP_NAME_LENGTH 16
 struct nodemap_cluster_rec {