Whamcloud - gitweb
LU-9771 flr: lfs mirror create and extend commands
[fs/lustre-release.git] / lustre / include / lustre / lustreapi.h
index 6956768..5fc9f86 100644 (file)
@@ -148,13 +148,14 @@ int llapi_file_lookup(int dirfd, const char *name);
 #define VERBOSE_COMP_ID                0x2000
 #define VERBOSE_DFID           0x4000
 #define VERBOSE_HASH_TYPE      0x8000
+#define VERBOSE_MIRROR_COUNT   0x10000
 #define VERBOSE_DEFAULT                (VERBOSE_COUNT | VERBOSE_SIZE | \
                                 VERBOSE_OFFSET | VERBOSE_POOL | \
                                 VERBOSE_OBJID | VERBOSE_GENERATION | \
                                 VERBOSE_LAYOUT | VERBOSE_HASH_TYPE | \
                                 VERBOSE_COMP_COUNT | VERBOSE_COMP_FLAGS | \
                                 VERBOSE_COMP_START | VERBOSE_COMP_END | \
-                                VERBOSE_COMP_ID)
+                                VERBOSE_COMP_ID | VERBOSE_MIRROR_COUNT)
 
 struct find_param {
        unsigned int             fp_max_depth;
@@ -343,6 +344,7 @@ int llapi_get_version_string(char *version, unsigned int version_size);
 int llapi_get_version(char *buffer, int buffer_size, char **version)
        __attribute__((deprecated));
 int llapi_get_data_version(int fd, __u64 *data_version, __u64 flags);
+extern int llapi_get_ost_layout_version(int fd, __u32 *layout_version);
 int llapi_hsm_state_get_fd(int fd, struct hsm_user_state *hus);
 int llapi_hsm_state_get(const char *path, struct hsm_user_state *hus);
 int llapi_hsm_state_set_fd(int fd, __u64 setmask, __u64 clearmask,
@@ -435,6 +437,7 @@ int llapi_json_write_list(struct llapi_json_item_list **item_list, FILE *fp);
 int llapi_lease_get(int fd, int mode);
 int llapi_lease_check(int fd);
 int llapi_lease_put(int fd);
+extern int llapi_lease_get_ext(int fd, struct ll_ioc_lease *data);
 
 /* Group lock */
 int llapi_group_lock(int fd, int gid);
@@ -499,6 +502,19 @@ struct llapi_layout *llapi_layout_alloc(void);
  */
 void llapi_layout_free(struct llapi_layout *layout);
 
+/**
+ * llapi_layout_merge() - Merge a composite layout into another one.
+ * @dst_layout: Destination composite layout.
+ * @src_layout: Source composite layout.
+ *
+ * This function copies all of the components from @src_layout and
+ * appends them to @dst_layout.
+ *
+ * Return: 0 on success or -1 on failure.
+ */
+int llapi_layout_merge(struct llapi_layout **dst_layout,
+                      const struct llapi_layout *src_layout);
+
 /** Not a valid stripe size, offset, or RAID pattern. */
 #define LLAPI_LAYOUT_INVALID   0x1000000000000001ULL
 
@@ -520,7 +536,8 @@ void llapi_layout_free(struct llapi_layout *layout);
  * stored using RAID0.  That is, data will be split evenly and without
  * redundancy across all OSTs in the layout.
  */
-#define LLAPI_LAYOUT_RAID0     0
+#define LLAPI_LAYOUT_RAID0     0ULL
+#define LLAPI_LAYOUT_MDT       2ULL
 
 /**
 * The layout includes a specific set of OSTs on which to allocate.
@@ -721,6 +738,37 @@ int llapi_layout_file_create(const char *path, int open_flags, int mode,
                             const struct llapi_layout *layout);
 
 /**
+ * Set flags to the header of component layout.
+ */
+int llapi_layout_flags_set(struct llapi_layout *layout, uint32_t flags);
+int llapi_layout_flags_get(struct llapi_layout *layout, uint32_t *flags);
+
+/**
+ * llapi_layout_mirror_count_get() - Get mirror count from the header of
+ *                                  a layout.
+ * @layout: Layout to get mirror count from.
+ * @count:  Returned mirror count value.
+ *
+ * This function gets mirror count from the header of a layout.
+ *
+ * Return: 0 on success or -1 on failure.
+ */
+int llapi_layout_mirror_count_get(struct llapi_layout *layout,
+                                 uint16_t *count);
+
+/**
+ * llapi_layout_mirror_count_set() - Set mirror count to the header of a layout.
+ * @layout: Layout to set mirror count in.
+ * @count:  Mirror count value to be set.
+ *
+ * This function sets mirror count to the header of a layout.
+ *
+ * Return: 0 on success or -1 on failure.
+ */
+int llapi_layout_mirror_count_set(struct llapi_layout *layout,
+                                 uint16_t count);
+
+/**
  * Fetch the start and end offset of the current layout component.
  */
 int llapi_layout_comp_extent_get(const struct llapi_layout *layout,
@@ -763,6 +811,10 @@ int llapi_layout_comp_flags_clear(struct llapi_layout *layout, uint32_t flags);
  */
 int llapi_layout_comp_id_get(const struct llapi_layout *layout, uint32_t *id);
 /**
+ * Fetches the mirror ID of the current layout component.
+ */
+int llapi_layout_mirror_id_get(const struct llapi_layout *layout, uint32_t *id);
+/**
  * Adds one component to the existing composite or plain layout.
  */
 int llapi_layout_comp_add(struct llapi_layout *layout);
@@ -810,6 +862,18 @@ int llapi_layout_file_comp_set(const char *path,
  */
 bool llapi_layout_is_composite(struct llapi_layout *layout);
 
+/**
+ * FLR: mirror operation APIs
+ */
+int llapi_mirror_set(int fd, unsigned int id);
+int llapi_mirror_clear(int fd);
+ssize_t llapi_mirror_read(int fd, unsigned int id,
+                          void *buf, size_t count, off_t pos);
+ssize_t llapi_mirror_copy_many(int fd, unsigned int src,
+                               unsigned int *dst, size_t count);
+int llapi_mirror_copy(int fd, unsigned int src, unsigned int dst,
+                      off_t pos, size_t count);
+
 /** @} llapi */
 
 #endif