]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
83a87611 | 2 | * loop.h |
1da177e4 LT |
3 | * |
4 | * Written by Theodore Ts'o, 3/29/93. | |
5 | * | |
6 | * Copyright 1993 by Theodore Ts'o. Redistribution of this file is | |
7 | * permitted under the GNU General Public License. | |
8 | */ | |
607ca46e DH |
9 | #ifndef _LINUX_LOOP_H |
10 | #define _LINUX_LOOP_H | |
1da177e4 | 11 | |
1da177e4 LT |
12 | #include <linux/bio.h> |
13 | #include <linux/blkdev.h> | |
14 | #include <linux/spinlock.h> | |
f85221dd | 15 | #include <linux/mutex.h> |
607ca46e | 16 | #include <uapi/linux/loop.h> |
1da177e4 LT |
17 | |
18 | /* Possible states of device */ | |
19 | enum { | |
20 | Lo_unbound, | |
21 | Lo_bound, | |
22 | Lo_rundown, | |
23 | }; | |
24 | ||
25 | struct loop_func_table; | |
26 | ||
27 | struct loop_device { | |
28 | int lo_number; | |
29 | int lo_refcnt; | |
30 | loff_t lo_offset; | |
31 | loff_t lo_sizelimit; | |
32 | int lo_flags; | |
33 | int (*transfer)(struct loop_device *, int cmd, | |
34 | struct page *raw_page, unsigned raw_off, | |
35 | struct page *loop_page, unsigned loop_off, | |
36 | int size, sector_t real_block); | |
37 | char lo_file_name[LO_NAME_SIZE]; | |
38 | char lo_crypt_name[LO_NAME_SIZE]; | |
39 | char lo_encrypt_key[LO_KEY_SIZE]; | |
40 | int lo_encrypt_key_size; | |
41 | struct loop_func_table *lo_encryption; | |
42 | __u32 lo_init[2]; | |
e4849737 | 43 | kuid_t lo_key_owner; /* Who set the key */ |
1da177e4 LT |
44 | int (*ioctl)(struct loop_device *, int cmd, |
45 | unsigned long arg); | |
46 | ||
47 | struct file * lo_backing_file; | |
48 | struct block_device *lo_device; | |
49 | unsigned lo_blocksize; | |
50 | void *key_data; | |
51 | ||
b4e3ca1a | 52 | gfp_t old_gfp_mask; |
1da177e4 LT |
53 | |
54 | spinlock_t lo_lock; | |
e686307f | 55 | struct bio_list lo_bio_list; |
7b5a3522 | 56 | unsigned int lo_bio_count; |
1da177e4 | 57 | int lo_state; |
f85221dd | 58 | struct mutex lo_ctl_mutex; |
6c997918 SH |
59 | struct task_struct *lo_thread; |
60 | wait_queue_head_t lo_event; | |
7b5a3522 LC |
61 | /* wait queue for incoming requests */ |
62 | wait_queue_head_t lo_req_wait; | |
1da177e4 | 63 | |
01e457cf | 64 | struct request_queue *lo_queue; |
73285082 | 65 | struct gendisk *lo_disk; |
1da177e4 LT |
66 | }; |
67 | ||
1da177e4 LT |
68 | /* Support for loadable transfer modules */ |
69 | struct loop_func_table { | |
70 | int number; /* filter type */ | |
71 | int (*transfer)(struct loop_device *lo, int cmd, | |
72 | struct page *raw_page, unsigned raw_off, | |
73 | struct page *loop_page, unsigned loop_off, | |
74 | int size, sector_t real_block); | |
75 | int (*init)(struct loop_device *, const struct loop_info64 *); | |
76 | /* release is called from loop_unregister_transfer or clr_fd */ | |
77 | int (*release)(struct loop_device *); | |
78 | int (*ioctl)(struct loop_device *, int cmd, unsigned long arg); | |
79 | struct module *owner; | |
80 | }; | |
81 | ||
82 | int loop_register_transfer(struct loop_func_table *funcs); | |
83 | int loop_unregister_transfer(int number); | |
84 | ||
85 | #endif |