Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / block / loop.h
diff --git a/kernel/drivers/block/loop.h b/kernel/drivers/block/loop.h
new file mode 100644 (file)
index 0000000..301c27f
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * loop.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_LOOP_H
+#define _LINUX_LOOP_H
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+#include <linux/blk-mq.h>
+#include <linux/spinlock.h>
+#include <linux/mutex.h>
+#include <linux/workqueue.h>
+#include <uapi/linux/loop.h>
+
+/* Possible states of device */
+enum {
+       Lo_unbound,
+       Lo_bound,
+       Lo_rundown,
+};
+
+struct loop_func_table;
+
+struct loop_device {
+       int             lo_number;
+       int             lo_refcnt;
+       loff_t          lo_offset;
+       loff_t          lo_sizelimit;
+       int             lo_flags;
+       int             (*transfer)(struct loop_device *, int cmd,
+                                   struct page *raw_page, unsigned raw_off,
+                                   struct page *loop_page, unsigned loop_off,
+                                   int size, sector_t real_block);
+       char            lo_file_name[LO_NAME_SIZE];
+       char            lo_crypt_name[LO_NAME_SIZE];
+       char            lo_encrypt_key[LO_KEY_SIZE];
+       int             lo_encrypt_key_size;
+       struct loop_func_table *lo_encryption;
+       __u32           lo_init[2];
+       kuid_t          lo_key_owner;   /* Who set the key */
+       int             (*ioctl)(struct loop_device *, int cmd, 
+                                unsigned long arg); 
+
+       struct file *   lo_backing_file;
+       struct block_device *lo_device;
+       unsigned        lo_blocksize;
+       void            *key_data; 
+
+       gfp_t           old_gfp_mask;
+
+       spinlock_t              lo_lock;
+       struct list_head        write_cmd_head;
+       struct work_struct      write_work;
+       bool                    write_started;
+       int                     lo_state;
+       struct mutex            lo_ctl_mutex;
+
+       struct request_queue    *lo_queue;
+       struct blk_mq_tag_set   tag_set;
+       struct gendisk          *lo_disk;
+};
+
+struct loop_cmd {
+       struct work_struct read_work;
+       struct request *rq;
+       struct list_head list;
+};
+
+/* Support for loadable transfer modules */
+struct loop_func_table {
+       int number;     /* filter type */ 
+       int (*transfer)(struct loop_device *lo, int cmd,
+                       struct page *raw_page, unsigned raw_off,
+                       struct page *loop_page, unsigned loop_off,
+                       int size, sector_t real_block);
+       int (*init)(struct loop_device *, const struct loop_info64 *); 
+       /* release is called from loop_unregister_transfer or clr_fd */
+       int (*release)(struct loop_device *); 
+       int (*ioctl)(struct loop_device *, int cmd, unsigned long arg);
+       struct module *owner;
+}; 
+
+int loop_register_transfer(struct loop_func_table *funcs);
+int loop_unregister_transfer(int number); 
+
+#endif