]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pmdk/src/libpmemobj/memops.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / libpmemobj / memops.h
diff --git a/ceph/src/pmdk/src/libpmemobj/memops.h b/ceph/src/pmdk/src/libpmemobj/memops.h
new file mode 100644 (file)
index 0000000..b05948e
--- /dev/null
@@ -0,0 +1,84 @@
+/* SPDX-License-Identifier: BSD-3-Clause */
+/* Copyright 2016-2020, Intel Corporation */
+
+/*
+ * memops.h -- aggregated memory operations helper definitions
+ */
+
+#ifndef LIBPMEMOBJ_MEMOPS_H
+#define LIBPMEMOBJ_MEMOPS_H 1
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "vec.h"
+#include "pmemops.h"
+#include "ulog.h"
+#include "lane.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum operation_log_type {
+       LOG_PERSISTENT, /* log of persistent modifications */
+       LOG_TRANSIENT, /* log of transient memory modifications */
+
+       MAX_OPERATION_LOG_TYPE
+};
+
+enum log_type {
+       LOG_TYPE_UNDO,
+       LOG_TYPE_REDO,
+
+       MAX_LOG_TYPE,
+};
+
+struct user_buffer_def {
+       void *addr;
+       size_t size;
+};
+
+struct operation_context;
+
+struct operation_context *
+operation_new(struct ulog *redo, size_t ulog_base_nbytes,
+       ulog_extend_fn extend, ulog_free_fn ulog_free,
+       const struct pmem_ops *p_ops, enum log_type type);
+
+void operation_init(struct operation_context *ctx);
+void operation_start(struct operation_context *ctx);
+void operation_resume(struct operation_context *ctx);
+
+void operation_delete(struct operation_context *ctx);
+void operation_free_logs(struct operation_context *ctx, uint64_t flags);
+
+int operation_add_buffer(struct operation_context *ctx,
+       void *dest, void *src, size_t size, ulog_operation_type type);
+
+int operation_add_entry(struct operation_context *ctx,
+       void *ptr, uint64_t value, ulog_operation_type type);
+int operation_add_typed_entry(struct operation_context *ctx,
+       void *ptr, uint64_t value,
+       ulog_operation_type type, enum operation_log_type log_type);
+int operation_user_buffer_verify_align(struct operation_context *ctx,
+               struct user_buffer_def *userbuf);
+void operation_add_user_buffer(struct operation_context *ctx,
+               struct user_buffer_def *userbuf);
+void operation_set_auto_reserve(struct operation_context *ctx,
+               int auto_reserve);
+void operation_set_any_user_buffer(struct operation_context *ctx,
+       int any_user_buffer);
+int operation_get_any_user_buffer(struct operation_context *ctx);
+int operation_user_buffer_range_cmp(const void *lhs, const void *rhs);
+
+int operation_reserve(struct operation_context *ctx, size_t new_capacity);
+void operation_process(struct operation_context *ctx);
+void operation_finish(struct operation_context *ctx, unsigned flags);
+void operation_cancel(struct operation_context *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif