+/**
+ * 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);
+const char *llapi_layout_flags_string(uint32_t flags);
+const __u16 llapi_layout_string_flags(char *string);
+
+/**
+ * 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,
+ uint64_t *start, uint64_t *end);
+/**
+ * Set the extent of current layout component.
+ */
+int llapi_layout_comp_extent_set(struct llapi_layout *layout,
+ uint64_t start, uint64_t end);
+
+/* PFL component flags table */
+static const struct comp_flag_name {
+ enum lov_comp_md_entry_flags cfn_flag;
+ const char *cfn_name;
+} comp_flags_table[] = {
+ { LCME_FL_INIT, "init" },
+ { LCME_FL_STALE, "stale" },
+ { LCME_FL_PREF_RW, "prefer" },
+ { LCME_FL_OFFLINE, "offline" },
+ { LCME_FL_NOSYNC, "nosync" },
+};
+
+/**
+ * Gets the attribute flags of the current component.
+ */
+int llapi_layout_comp_flags_get(const struct llapi_layout *layout,
+ uint32_t *flags);
+/**
+ * Sets the specified flags of the current component leaving other flags as-is.
+ */
+int llapi_layout_comp_flags_set(struct llapi_layout *layout, uint32_t flags);
+/**
+ * Clears the flags specified in the flags leaving other flags as-is.
+ */
+int llapi_layout_comp_flags_clear(struct llapi_layout *layout, uint32_t flags);
+/**
+ * Fetches the file-unique component ID of the current layout component.
+ */
+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);
+/**
+ * Adds a first component of a mirror to the existing composite layout.
+ */
+int llapi_layout_add_first_comp(struct llapi_layout *layout);
+/**
+ * Deletes the current layout component from the composite layout.
+ */
+int llapi_layout_comp_del(struct llapi_layout *layout);
+
+enum llapi_layout_comp_use {
+ LLAPI_LAYOUT_COMP_USE_FIRST = 1,
+ LLAPI_LAYOUT_COMP_USE_LAST = 2,
+ LLAPI_LAYOUT_COMP_USE_NEXT = 3,
+ LLAPI_LAYOUT_COMP_USE_PREV = 4,
+};
+
+/**
+ * Set the currently active component to the specified component ID.
+ */
+int llapi_layout_comp_use_id(struct llapi_layout *layout, uint32_t id);
+/**
+ * Select the currently active component at the specified position.
+ */
+int llapi_layout_comp_use(struct llapi_layout *layout, uint32_t pos);
+/**
+ * Add layout components to an existing file.
+ */
+int llapi_layout_file_comp_add(const char *path,
+ const struct llapi_layout *layout);
+/**
+ * Delete component(s) by the specified component id or flags.
+ */
+int llapi_layout_file_comp_del(const char *path, uint32_t id, uint32_t flags);
+/**
+ * Change flags or other parameters of the component(s) by component ID of an
+ * existing file. The component to be modified is specified by the
+ * comp->lcme_id value, which must be an unique component ID. The new
+ * attributes are passed in by @comp and @valid is used to specify which
+ * attributes in the component are going to be changed.
+ */
+int llapi_layout_file_comp_set(const char *path, uint32_t *ids, uint32_t *flags,
+ size_t count);
+/**
+ * Check if the file layout is composite.
+ */
+bool llapi_layout_is_composite(struct llapi_layout *layout);
+
+enum {
+ LLAPI_LAYOUT_ITER_CONT = 0,
+ LLAPI_LAYOUT_ITER_STOP = 1,
+};
+
+/**
+ * Iteration callback function.
+ *
+ * \retval LLAPI_LAYOUT_ITER_CONT Iteration proceeds
+ * \retval LLAPI_LAYOUT_ITER_STOP Stop iteration
+ * \retval < 0 error code
+ */
+typedef int (*llapi_layout_iter_cb)(struct llapi_layout *layout, void *cbdata);
+
+/**
+ * Iterate all components in the corresponding layout
+ */
+int llapi_layout_comp_iterate(struct llapi_layout *layout,
+ llapi_layout_iter_cb cb, void *cbdata);
+
+/**
+ * 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, __u16 src, __u16 *dst, size_t count);
+int llapi_mirror_copy(int fd, unsigned int src, unsigned int dst,
+ off_t pos, size_t count);
+
+int llapi_heat_get(int fd, struct lu_heat *heat);
+int llapi_heat_set(int fd, __u64 flags);
+