1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * 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/kthread.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;
- atomic_t 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;
- int lo_state;
- struct mutex lo_ctl_mutex;
- struct kthread_worker worker;
- struct task_struct *worker_task;
- bool use_dio;
- bool sysfs_inited;
- struct request_queue *lo_queue;
- struct blk_mq_tag_set tag_set;
- struct gendisk *lo_disk;
- };
- struct loop_cmd {
- struct kthread_work work;
- struct request *rq;
- struct list_head list;
- bool use_aio; /* use AIO interface to handle I/O */
- struct kiocb iocb;
- };
- /* 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
|