Contributors: 18
Author |
Tokens |
Token Proportion |
Commits |
Commit Proportion |
Linus Torvalds (pre-git) |
189 |
49.35% |
6 |
15.00% |
Andries E. Brouwer |
35 |
9.14% |
4 |
10.00% |
Dan Schatzberg |
32 |
8.36% |
2 |
5.00% |
Ming Lei |
27 |
7.05% |
5 |
12.50% |
Andrew Morton |
26 |
6.79% |
2 |
5.00% |
Linus Torvalds |
18 |
4.70% |
1 |
2.50% |
Shaohua Li |
13 |
3.39% |
3 |
7.50% |
Al Viro |
7 |
1.83% |
3 |
7.50% |
Tetsuo Handa |
6 |
1.57% |
2 |
5.00% |
Jens Axboe |
6 |
1.57% |
3 |
7.50% |
Christoph Hellwig |
5 |
1.31% |
2 |
5.00% |
Kenneth W Chen |
5 |
1.31% |
1 |
2.50% |
Pavel Tatashin |
4 |
1.04% |
1 |
2.50% |
Ingo Molnar |
3 |
0.78% |
1 |
2.50% |
David Howells |
3 |
0.78% |
1 |
2.50% |
Arnd Bergmann |
2 |
0.52% |
1 |
2.50% |
Eric W. Biedermann |
1 |
0.26% |
1 |
2.50% |
Adrian Bunk |
1 |
0.26% |
1 |
2.50% |
Total |
383 |
|
40 |
|
/*
* 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 <uapi/linux/loop.h>
/* Possible states of device */
enum {
Lo_unbound,
Lo_bound,
Lo_rundown,
Lo_deleting,
};
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;
void *key_data;
gfp_t old_gfp_mask;
spinlock_t lo_lock;
int lo_state;
spinlock_t lo_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 *lo_queue;
struct blk_mq_tag_set tag_set;
struct gendisk *lo_disk;
struct mutex lo_mutex;
bool idr_visible;
};
struct loop_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 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