]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pmdk/src/libpmempool/pool.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / libpmempool / pool.h
diff --git a/ceph/src/pmdk/src/libpmempool/pool.h b/ceph/src/pmdk/src/libpmempool/pool.h
new file mode 100644 (file)
index 0000000..3b51e08
--- /dev/null
@@ -0,0 +1,163 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/* Copyright 2016-2020, Intel Corporation */
+
+/*
+ * pool.h -- internal definitions for pool processing functions
+ */
+
+#ifndef POOL_H
+#define POOL_H
+
+#include <stdbool.h>
+#include <sys/types.h>
+
+#include "libpmemobj.h"
+
+#include "queue.h"
+#include "set.h"
+#include "log.h"
+#include "blk.h"
+#include "btt_layout.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "alloc.h"
+#include "fault_injection.h"
+
+enum pool_type {
+       POOL_TYPE_UNKNOWN       = (1 << 0),
+       POOL_TYPE_LOG           = (1 << 1),
+       POOL_TYPE_BLK           = (1 << 2),
+       POOL_TYPE_OBJ           = (1 << 3),
+       POOL_TYPE_BTT           = (1 << 4),
+
+       POOL_TYPE_ANY           = POOL_TYPE_UNKNOWN | POOL_TYPE_LOG |
+               POOL_TYPE_BLK | POOL_TYPE_OBJ | POOL_TYPE_BTT,
+};
+
+struct pool_params {
+       enum pool_type type;
+       char signature[POOL_HDR_SIG_LEN];
+       features_t features;
+       size_t size;
+       mode_t mode;
+       int is_poolset;
+       int is_part;
+       int is_dev_dax;
+       int is_pmem;
+       union {
+               struct {
+                       uint64_t bsize;
+               } blk;
+               struct {
+                       char layout[PMEMOBJ_MAX_LAYOUT];
+               } obj;
+       };
+};
+
+struct pool_set_file {
+       int fd;
+       char *fname;
+       void *addr;
+       size_t size;
+       struct pool_set *poolset;
+       time_t mtime;
+       mode_t mode;
+};
+
+struct arena {
+       PMDK_TAILQ_ENTRY(arena) next;
+       struct btt_info btt_info;
+       uint32_t id;
+       bool valid;
+       bool zeroed;
+       uint64_t offset;
+       uint8_t *flog;
+       size_t flogsize;
+       uint32_t *map;
+       size_t mapsize;
+};
+
+struct pool_data {
+       struct pool_params params;
+       struct pool_set_file *set_file;
+       int blk_no_layout;
+       union {
+               struct pool_hdr pool;
+               struct pmemlog log;
+               struct pmemblk blk;
+       } hdr;
+       enum {
+               UUID_NOP = 0,
+               UUID_FROM_BTT,
+               UUID_NOT_FROM_BTT,
+       } uuid_op;
+       struct arena bttc;
+       PMDK_TAILQ_HEAD(arenashead, arena) arenas;
+       uint32_t narenas;
+};
+
+struct pool_data *pool_data_alloc(PMEMpoolcheck *ppc);
+void pool_data_free(struct pool_data *pool);
+void pool_params_from_header(struct pool_params *params,
+       const struct pool_hdr *hdr);
+
+int pool_set_parse(struct pool_set **setp, const char *path);
+void *pool_set_file_map(struct pool_set_file *file, uint64_t offset);
+int pool_read(struct pool_data *pool, void *buff, size_t nbytes,
+       uint64_t off);
+int pool_write(struct pool_data *pool, const void *buff, size_t nbytes,
+       uint64_t off);
+int pool_copy(struct pool_data *pool, const char *dst_path, int overwrite);
+int pool_set_part_copy(struct pool_set_part *dpart,
+       struct pool_set_part *spart, int overwrite);
+int pool_memset(struct pool_data *pool, uint64_t off, int c, size_t count);
+
+unsigned pool_set_files_count(struct pool_set_file *file);
+int pool_set_file_map_headers(struct pool_set_file *file, int rdonly, int prv);
+void pool_set_file_unmap_headers(struct pool_set_file *file);
+
+void pool_hdr_default(enum pool_type type, struct pool_hdr *hdrp);
+enum pool_type pool_hdr_get_type(const struct pool_hdr *hdrp);
+enum pool_type pool_set_type(struct pool_set *set);
+const char *pool_get_pool_type_str(enum pool_type type);
+
+int pool_btt_info_valid(struct btt_info *infop);
+
+int pool_blk_get_first_valid_arena(struct pool_data *pool,
+       struct arena *arenap);
+int pool_blk_bsize_valid(uint32_t bsize, uint64_t fsize);
+uint64_t pool_next_arena_offset(struct pool_data *pool, uint64_t header_offset);
+uint64_t pool_get_first_valid_btt(struct pool_data *pool,
+       struct btt_info *infop, uint64_t offset, bool *zeroed);
+size_t pool_get_min_size(enum pool_type);
+
+#if FAULT_INJECTION
+void
+pmempool_inject_fault_at(enum pmem_allocation_type type, int nth,
+                                                       const char *at);
+
+int
+pmempool_fault_injection_enabled(void);
+#else
+static inline void
+pmempool_inject_fault_at(enum pmem_allocation_type type, int nth,
+                                               const char *at)
+{
+       abort();
+}
+
+static inline int
+pmempool_fault_injection_enabled(void)
+{
+       return 0;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif