summaryrefslogtreecommitdiffstats
path: root/src/kernel/xloop_main_rhel_9.0.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/xloop_main_rhel_9.0.h')
-rw-r--r--src/kernel/xloop_main_rhel_9.0.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/kernel/xloop_main_rhel_9.0.h b/src/kernel/xloop_main_rhel_9.0.h
new file mode 100644
index 0000000..4126460
--- /dev/null
+++ b/src/kernel/xloop_main_rhel_9.0.h
@@ -0,0 +1,109 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * loop_main.h
+ *
+ * Written by Theodore Ts'o, 3/29/93.
+ *
+ * Copyright 1993 by Theodore Ts'o. Redistribution of this file is
+ * permitted under the GNU General Public License.
+ */
+#ifndef _LINUX_XLOOP_H
+#define _LINUX_XLOOP_H
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+#include "uapi_xloop.h"
+#ifdef CONFIG_DEBUG_FS
+#include <linux/debugfs.h>
+#endif
+
+#include "xloop_file_fmt.h"
+
+/* Possible states of device */
+enum {
+ Xlo_unbound,
+ Xlo_bound,
+ Xlo_rundown,
+ Xlo_deleting,
+};
+
+struct xloop_func_table;
+
+struct xloop_device {
+ int xlo_number;
+ atomic_t xlo_refcnt;
+ loff_t xlo_offset;
+ loff_t xlo_sizelimit;
+ int xlo_flags;
+ int (*transfer)(struct xloop_device *xlo, int cmd, struct page *raw_page, unsigned raw_off, struct page *xloop_page, unsigned xloop_off, int size, sector_t real_block);
+ char xlo_file_name[XLO_NAME_SIZE];
+ char xlo_crypt_name[XLO_NAME_SIZE];
+ char xlo_encrypt_key[XLO_KEY_SIZE];
+ int xlo_encrypt_key_size;
+ struct xloop_func_table *xlo_encryption;
+ __u32 xlo_init[2];
+ kuid_t xlo_key_owner; /* Who set the key */
+ int (*ioctl)(struct xloop_device *xlo, int cmd, unsigned long arg);
+
+ struct xloop_file_fmt *xlo_fmt;
+
+ struct file *xlo_backing_file;
+ struct block_device *xlo_device;
+ void *key_data;
+
+ gfp_t old_gfp_mask;
+
+ spinlock_t xlo_lock;
+ int xlo_state;
+ spinlock_t xlo_work_lock;
+ struct workqueue_struct *workqueue;
+ struct work_struct rootcg_work;
+ struct list_head rootcg_cmd_list;
+ struct list_head idle_worker_list;
+ struct rb_root worker_tree;
+ struct timer_list timer;
+ bool use_dio;
+ bool sysfs_inited;
+
+ struct request_queue *xlo_queue;
+ struct blk_mq_tag_set tag_set;
+ struct gendisk *xlo_disk;
+ struct mutex xlo_mutex;
+ bool idr_visible;
+
+#ifdef CONFIG_DEBUG_FS
+ struct dentry *xlo_dbgfs_dir;
+#endif
+};
+
+struct xloop_cmd {
+ struct list_head list_entry;
+ bool use_aio; /* use AIO interface to handle I/O */
+ atomic_t ref; /* only for aio */
+ long ret;
+ struct kiocb iocb;
+ struct bio_vec *bvec;
+ struct cgroup_subsys_state *blkcg_css;
+ struct cgroup_subsys_state *memcg_css;
+};
+
+/* Support for loadable transfer modules */
+struct xloop_func_table {
+ int number; /* filter type */
+ int (*transfer)(struct xloop_device *xlo, int cmd, struct page *raw_page, unsigned raw_off, struct page *xloop_page, unsigned xloop_off, int size, sector_t real_block);
+ int (*init)(struct xloop_device *xlo, const struct xloop_info64 *info);
+ /* release is called from xloop_unregister_transfer or clr_fd */
+ int (*release)(struct xloop_device *xlo);
+ int (*ioctl)(struct xloop_device *xlo, int cmd, unsigned long arg);
+ struct module *owner;
+};
+
+extern inline struct device *xloop_device_to_dev(struct xloop_device *xlo);
+
+int xloop_register_transfer(struct xloop_func_table *funcs);
+int xloop_unregister_transfer(int number);
+
+#endif