#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <time.h>
#define HF3FS_SUPER_MAGIC 0x8f3f5fff
typedef void *hf3fs_iov_handle;
struct hf3fs_iov {
uint8_t *base;
hf3fs_iov_handle iovh;
char id[16];
char mount_point[256];
size_t size;
size_t block_size;
int numa;
};
typedef void *hf3fs_ior_handle;
struct hf3fs_ior {
struct hf3fs_iov iov;
hf3fs_ior_handle iorh;
char mount_point[256];
bool for_read;
int io_depth;
int priority;
int timeout;
uint64_t flags;
};
struct hf3fs_cqe {
int32_t index;
int32_t reserved;
int64_t result;
const void *userdata;
};
bool hf3fs_is_hf3fs(int fd);
int hf3fs_extract_mount_point(char *hf3fs_mount_point, int size, const char *path);
int hf3fs_iovcreate(struct hf3fs_iov *iov, const char *hf3fs_mount_point, size_t size, size_t block_size, int numa);
int hf3fs_iovopen(struct hf3fs_iov *iov,
const uint8_t id[16],
const char *hf3fs_mount_point,
size_t size,
size_t block_size,
int numa);
void hf3fs_iovunlink(struct hf3fs_iov *iov);
void hf3fs_iovdestroy(struct hf3fs_iov *iov);
int hf3fs_iovwrap(struct hf3fs_iov *iov,
void *base,
const uint8_t id[16],
const char *hf3fs_mount_point,
size_t size,
size_t block_size,
int numa);
size_t hf3fs_ior_size(int entries);
int hf3fs_iorcreate(struct hf3fs_ior *ior,
const char *hf3fs_mount_point,
int entries,
bool for_read,
int io_depth,
int numa);
int hf3fs_iorcreate2(struct hf3fs_ior *ior,
const char *hf3fs_mount_point,
int entries,
bool for_read,
int io_depth,
int priority,
int numa);
int hf3fs_iorcreate3(struct hf3fs_ior *ior,
const char *hf3fs_mount_point,
int entries,
bool for_read,
int io_depth,
int priority,
int timeout,
int numa);
#define HF3FS_IOR_ALLOW_READ_UNCOMMITTED 1
#define HF3FS_IOR_FORBID_READ_HOLES 2
int hf3fs_iorcreate4(struct hf3fs_ior *ior,
const char *hf3fs_mount_point,
int entries,
bool for_read,
int io_depth,
int timeout,
int numa,
uint64_t flags);
void hf3fs_iordestroy(struct hf3fs_ior *ior);
int hf3fs_reg_fd(int fd, uint64_t flags);
void hf3fs_dereg_fd(int fd);
int hf3fs_io_entries(const struct hf3fs_ior *ior);
int hf3fs_prep_io(const struct hf3fs_ior *ior,
const struct hf3fs_iov *iov,
bool read,
void *ptr,
int fd,
size_t off,
uint64_t len,
const void *userdata);
int hf3fs_submit_ios(const struct hf3fs_ior *ior);
int hf3fs_wait_for_ios(const struct hf3fs_ior *ior,
struct hf3fs_cqe *cqes,
int cqec,
int min_results,
const struct timespec *abs_timeout);
int hf3fs_hardlink(const char *target, const char *link_name);
int hf3fs_punchhole(int fd, int n, const size_t *start, const size_t *end, size_t flags);
#ifdef __cplusplus
}
#endif