Whamcloud - gitweb
LU-3677 mdt: Set HSM dirty open-for-write file when evicted.
[fs/lustre-release.git] / lustre / include / lustre / lustre_user.h
index 1de22e4..045ff2b 100644 (file)
@@ -252,12 +252,15 @@ struct ost_id {
                                                struct hsm_current_action)
 /* see <lustre_lib.h> for ioctl numbers 221-232 */
 
-#define LL_IOC_LMV_SETSTRIPE       _IOWR('f', 240, struct lmv_user_md)
-#define LL_IOC_LMV_GETSTRIPE       _IOWR('f', 241, struct lmv_user_md)
-#define LL_IOC_REMOVE_ENTRY        _IOWR('f', 242, __u64)
-
-#define LL_STATFS_LMV           1
-#define LL_STATFS_LOV           2
+#define LL_IOC_LMV_SETSTRIPE           _IOWR('f', 240, struct lmv_user_md)
+#define LL_IOC_LMV_GETSTRIPE           _IOWR('f', 241, struct lmv_user_md)
+#define LL_IOC_REMOVE_ENTRY            _IOWR('f', 242, __u64)
+#define LL_IOC_SET_LEASE               _IOWR('f', 243, long)
+#define LL_IOC_GET_LEASE               _IO('f', 244)
+#define LL_IOC_HSM_IMPORT              _IOWR('f', 245, struct hsm_user_import)
+
+#define LL_STATFS_LMV          1
+#define LL_STATFS_LOV          2
 #define LL_STATFS_NODELAY      4
 
 #define IOC_MDC_TYPE            'i'
@@ -319,6 +322,9 @@ struct ost_id {
 #define LOV_ALL_STRIPES       0xffff /* only valid for directories */
 #define LOV_V1_INSANE_STRIPE_COUNT 65532 /* maximum stripe count bz13933 */
 
+#define XATTR_LUSTRE_PREFIX    "lustre."
+#define XATTR_LUSTRE_LOV       XATTR_LUSTRE_PREFIX"lov"
+
 #define lov_user_ost_data lov_user_ost_data_v1
 struct lov_user_ost_data_v1 {     /* per-stripe data structure */
        struct ost_id l_ost_oi;   /* OST object ID */
@@ -358,6 +364,16 @@ struct lov_user_md_v3 {           /* LOV EA user data (host-endian) */
        struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */
 } __attribute__((packed));
 
+static inline __u32 lov_user_md_size(__u16 stripes, __u32 lmm_magic)
+{
+       if (lmm_magic == LOV_USER_MAGIC_V3)
+               return sizeof(struct lov_user_md_v3) +
+                               stripes * sizeof(struct lov_user_ost_data_v1);
+       else
+               return sizeof(struct lov_user_md_v1) +
+                               stripes * sizeof(struct lov_user_ost_data_v1);
+}
+
 /* 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>. */
@@ -426,10 +442,10 @@ struct obd_uuid {
         char uuid[UUID_MAX];
 };
 
-static inline int obd_uuid_equals(const struct obd_uuid *u1,
-                                  const struct obd_uuid *u2)
+static inline bool obd_uuid_equals(const struct obd_uuid *u1,
+                                  const struct obd_uuid *u2)
 {
-        return strcmp((char *)u1->uuid, (char *)u2->uuid) == 0;
+       return strcmp((char *)u1->uuid, (char *)u2->uuid) == 0;
 }
 
 static inline int obd_uuid_empty(struct obd_uuid *uuid)
@@ -444,7 +460,7 @@ static inline void obd_str2uuid(struct obd_uuid *uuid, const char *tmp)
 }
 
 /* For printf's only, make sure uuid is terminated */
-static inline char *obd_uuid2str(struct obd_uuid *uuid)
+static inline char *obd_uuid2str(const struct obd_uuid *uuid)
 {
         if (uuid->uuid[sizeof(*uuid) - 1] != '\0') {
                 /* Obviously not safe, but for printfs, no real harm done...
@@ -473,6 +489,8 @@ static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen)
 
 /* printf display format
    e.g. printf("file FID is "DFID"\n", PFID(fid)); */
+#define FID_NOBRACE_LEN 40
+#define FID_LEN (FID_NOBRACE_LEN + 2)
 #define DFID_NOBRACE LPX64":0x%x:0x%x"
 #define DFID "["DFID_NOBRACE"]"
 #define PFID(fid)     \
@@ -619,10 +637,13 @@ struct if_quotactl {
 };
 
 /* swap layout flags */
-#define        SWAP_LAYOUTS_CHECK_DV1          (1 << 0)
-#define        SWAP_LAYOUTS_CHECK_DV2          (1 << 1)
-#define        SWAP_LAYOUTS_KEEP_MTIME         (1 << 2)
-#define        SWAP_LAYOUTS_KEEP_ATIME         (1 << 3)
+#define SWAP_LAYOUTS_CHECK_DV1         (1 << 0)
+#define SWAP_LAYOUTS_CHECK_DV2         (1 << 1)
+#define SWAP_LAYOUTS_KEEP_MTIME                (1 << 2)
+#define SWAP_LAYOUTS_KEEP_ATIME                (1 << 3)
+
+/* Swap XATTR_NAME_HSM as well, only on the MDT so far */
+#define SWAP_LAYOUTS_MDS_HSM           (1 << 31)
 struct lustre_swap_layouts {
        __u64   sl_flags;
        __u32   sl_fd;
@@ -647,7 +668,7 @@ enum changelog_rec_type {
         CL_EXT      = 9,  /* namespace extended record (2nd half of rename) */
         CL_OPEN     = 10, /* not currently used */
         CL_CLOSE    = 11, /* may be written to log only with mtime change */
-       CL_LAYOUT   = 12, /* file layout/striping modified, no data changed */
+       CL_LAYOUT   = 12, /* file layout/striping modified */
        CL_TRUNC    = 13,
        CL_SETATTR  = 14,
        CL_XATTR    = 15,
@@ -661,7 +682,7 @@ enum changelog_rec_type {
 static inline const char *changelog_type2str(int type) {
        static const char *changelog_str[] = {
                "MARK",  "CREAT", "MKDIR", "HLINK", "SLINK", "MKNOD", "UNLNK",
-               "RMDIR", "RENME", "RNMTO", "OPEN",  "CLOSE", "LAYOUT", "TRUNC",
+               "RMDIR", "RENME", "RNMTO", "OPEN",  "CLOSE", "LYOUT", "TRUNC",
                "SATTR", "XATTR", "HSM",   "MTIME", "CTIME", "ATIME",
        };
 
@@ -1050,7 +1071,7 @@ struct hsm_action_item {
  * \param len [IN] max buffer len
  * \retval buffer
  */
-static inline char *hai_dump_data_field(struct hsm_action_item *hai,
+static inline char *hai_dump_data_field(const struct hsm_action_item *hai,
                                         char *buffer, int len)
 {
         int i, sz, data_len;
@@ -1112,18 +1133,32 @@ static inline struct hsm_action_item * hai_next(struct hsm_action_item *hai)
 /* Return size of an hsm_action_list */
 static inline int hal_size(struct hsm_action_list *hal)
 {
-        int i, sz;
-        struct hsm_action_item *hai;
-
-        sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname));
-        hai = hai_zero(hal);
-        for (i = 0 ; i < hal->hal_count ; i++) {
-                sz += cfs_size_round(hai->hai_len);
-                hai = hai_next(hai);
-        }
-        return(sz);
+       int i, sz;
+       struct hsm_action_item *hai;
+
+       sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname));
+       hai = hai_zero(hal);
+       for (i = 0 ; i < hal->hal_count ; i++, hai = hai_next(hai))
+               sz += cfs_size_round(hai->hai_len);
+
+       return sz;
 }
 
+/* HSM file import
+ * describe the attributes to be set on imported file
+ */
+struct hsm_user_import {
+       __u64           hui_size;
+       __u64           hui_atime;
+       __u64           hui_mtime;
+       __u32           hui_atime_ns;
+       __u32           hui_mtime_ns;
+       __u32           hui_uid;
+       __u32           hui_gid;
+       __u32           hui_mode;
+       __u32           hui_archive_id;
+};
+
 /* Copytool progress reporting */
 #define HP_FLAG_COMPLETED 0x01
 #define HP_FLAG_RETRY     0x02
@@ -1137,12 +1172,6 @@ struct hsm_progress {
        __u32                   padding;
 };
 
-/**
- * Use by copytool during any hsm request they handled.
- * This structure is initialized by llapi_hsm_copy_start()
- * which is an helper over the ioctl() interface
- * Store Lustre, internal use only, data.
- */
 struct hsm_copy {
        __u64                   hc_data_version;
        __u16                   hc_flags;