Blame view
include/linux/elevator.h
7.04 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _LINUX_ELEVATOR_H #define _LINUX_ELEVATOR_H |
4a893e837 [PATCH] elevator:... |
3 |
#include <linux/percpu.h> |
9361401eb [PATCH] BLOCK: Ma... |
4 |
#ifdef CONFIG_BLOCK |
7e5a87944 block, cfq: move ... |
5 |
struct io_cq; |
165125e1e [BLOCK] Get rid o... |
6 |
typedef int (elevator_merge_fn) (struct request_queue *, struct request **, |
1da177e4c Linux-2.6.12-rc2 |
7 |
struct bio *); |
165125e1e [BLOCK] Get rid o... |
8 |
typedef void (elevator_merge_req_fn) (struct request_queue *, struct request *, struct request *); |
1da177e4c Linux-2.6.12-rc2 |
9 |
|
165125e1e [BLOCK] Get rid o... |
10 |
typedef void (elevator_merged_fn) (struct request_queue *, struct request *, int); |
1da177e4c Linux-2.6.12-rc2 |
11 |
|
165125e1e [BLOCK] Get rid o... |
12 |
typedef int (elevator_allow_merge_fn) (struct request_queue *, struct request *, struct bio *); |
da7752650 [PATCH] cfq-iosch... |
13 |
|
812d40264 blkio: Add io_mer... |
14 15 |
typedef void (elevator_bio_merged_fn) (struct request_queue *, struct request *, struct bio *); |
165125e1e [BLOCK] Get rid o... |
16 |
typedef int (elevator_dispatch_fn) (struct request_queue *, int); |
1da177e4c Linux-2.6.12-rc2 |
17 |
|
165125e1e [BLOCK] Get rid o... |
18 |
typedef void (elevator_add_req_fn) (struct request_queue *, struct request *); |
165125e1e [BLOCK] Get rid o... |
19 20 21 |
typedef struct request *(elevator_request_list_fn) (struct request_queue *, struct request *); typedef void (elevator_completed_req_fn) (struct request_queue *, struct request *); typedef int (elevator_may_queue_fn) (struct request_queue *, int); |
1da177e4c Linux-2.6.12-rc2 |
22 |
|
9b84cacd0 block, cfq: restr... |
23 |
typedef void (elevator_init_icq_fn) (struct io_cq *); |
7e5a87944 block, cfq: move ... |
24 |
typedef void (elevator_exit_icq_fn) (struct io_cq *); |
165125e1e [BLOCK] Get rid o... |
25 |
typedef int (elevator_set_req_fn) (struct request_queue *, struct request *, gfp_t); |
bb37b94c6 [BLOCK] Cleanup u... |
26 |
typedef void (elevator_put_req_fn) (struct request *); |
165125e1e [BLOCK] Get rid o... |
27 28 |
typedef void (elevator_activate_req_fn) (struct request_queue *, struct request *); typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct request *); |
1da177e4c Linux-2.6.12-rc2 |
29 |
|
165125e1e [BLOCK] Get rid o... |
30 |
typedef void *(elevator_init_fn) (struct request_queue *); |
b374d18a4 block: get rid of... |
31 |
typedef void (elevator_exit_fn) (struct elevator_queue *); |
1da177e4c Linux-2.6.12-rc2 |
32 33 34 35 36 37 |
struct elevator_ops { elevator_merge_fn *elevator_merge_fn; elevator_merged_fn *elevator_merged_fn; elevator_merge_req_fn *elevator_merge_req_fn; |
da7752650 [PATCH] cfq-iosch... |
38 |
elevator_allow_merge_fn *elevator_allow_merge_fn; |
bd87b5898 block: drop @tsk ... |
39 40 41 42 43 44 |
/* * Used for both plugged list and elevator merging and in the * former case called without queue_lock. Read comment on top of * attempt_plug_merge() for details. */ |
812d40264 blkio: Add io_mer... |
45 |
elevator_bio_merged_fn *elevator_bio_merged_fn; |
1da177e4c Linux-2.6.12-rc2 |
46 |
|
8922e16cf [PATCH] 01/05 Imp... |
47 |
elevator_dispatch_fn *elevator_dispatch_fn; |
1da177e4c Linux-2.6.12-rc2 |
48 |
elevator_add_req_fn *elevator_add_req_fn; |
8922e16cf [PATCH] 01/05 Imp... |
49 |
elevator_activate_req_fn *elevator_activate_req_fn; |
1da177e4c Linux-2.6.12-rc2 |
50 |
elevator_deactivate_req_fn *elevator_deactivate_req_fn; |
1da177e4c Linux-2.6.12-rc2 |
51 52 53 54 |
elevator_completed_req_fn *elevator_completed_req_fn; elevator_request_list_fn *elevator_former_req_fn; elevator_request_list_fn *elevator_latter_req_fn; |
f1f8cc946 block, cfq: move ... |
55 56 |
elevator_init_icq_fn *elevator_init_icq_fn; /* see iocontext.h */ elevator_exit_icq_fn *elevator_exit_icq_fn; /* ditto */ |
7e5a87944 block, cfq: move ... |
57 |
|
1da177e4c Linux-2.6.12-rc2 |
58 59 60 61 62 63 64 65 66 67 |
elevator_set_req_fn *elevator_set_req_fn; elevator_put_req_fn *elevator_put_req_fn; elevator_may_queue_fn *elevator_may_queue_fn; elevator_init_fn *elevator_init_fn; elevator_exit_fn *elevator_exit_fn; }; #define ELV_NAME_MAX (16) |
e572ec7e4 [PATCH] fix rmmod... |
68 69 |
struct elv_fs_entry { struct attribute attr; |
b374d18a4 block: get rid of... |
70 71 |
ssize_t (*show)(struct elevator_queue *, char *); ssize_t (*store)(struct elevator_queue *, const char *, size_t); |
e572ec7e4 [PATCH] fix rmmod... |
72 |
}; |
1da177e4c Linux-2.6.12-rc2 |
73 74 75 76 77 |
/* * identifies an elevator type, such as AS or deadline */ struct elevator_type { |
3d3c2379f block, cfq: move ... |
78 79 80 81 |
/* managed by elevator core */ struct kmem_cache *icq_cache; /* fields provided by elevator implementation */ |
1da177e4c Linux-2.6.12-rc2 |
82 |
struct elevator_ops ops; |
f1f8cc946 block, cfq: move ... |
83 84 |
size_t icq_size; /* see iocontext.h */ size_t icq_align; /* ditto */ |
e572ec7e4 [PATCH] fix rmmod... |
85 |
struct elv_fs_entry *elevator_attrs; |
1da177e4c Linux-2.6.12-rc2 |
86 87 |
char elevator_name[ELV_NAME_MAX]; struct module *elevator_owner; |
3d3c2379f block, cfq: move ... |
88 89 90 |
/* managed by elevator core */ char icq_cache_name[ELV_NAME_MAX + 5]; /* elvname + "_io_cq" */ |
22f746e23 block: remove ele... |
91 |
struct list_head list; |
1da177e4c Linux-2.6.12-rc2 |
92 93 94 |
}; /* |
540695886 s/assoicated/asso... |
95 |
* each queue has an elevator_queue associated with it |
1da177e4c Linux-2.6.12-rc2 |
96 97 98 |
*/ struct elevator_queue { |
22f746e23 block: remove ele... |
99 |
struct elevator_type *type; |
1da177e4c Linux-2.6.12-rc2 |
100 101 |
void *elevator_data; struct kobject kobj; |
3d1ab40f4 [PATCH] elevator_... |
102 |
struct mutex sysfs_lock; |
9817064b6 [PATCH] elevator:... |
103 |
struct hlist_head *hash; |
430c62fb2 elevator: fix oop... |
104 |
unsigned int registered:1; |
1da177e4c Linux-2.6.12-rc2 |
105 106 107 108 109 |
}; /* * block elevator interface */ |
165125e1e [BLOCK] Get rid o... |
110 111 |
extern void elv_dispatch_sort(struct request_queue *, struct request *); extern void elv_dispatch_add_tail(struct request_queue *, struct request *); |
7eaceacca block: remove per... |
112 113 |
extern void elv_add_request(struct request_queue *, struct request *, int); extern void __elv_add_request(struct request_queue *, struct request *, int); |
165125e1e [BLOCK] Get rid o... |
114 |
extern int elv_merge(struct request_queue *, struct request **, struct bio *); |
73c101011 block: initial pa... |
115 |
extern int elv_try_merge(struct request *, struct bio *); |
165125e1e [BLOCK] Get rid o... |
116 |
extern void elv_merge_requests(struct request_queue *, struct request *, |
1da177e4c Linux-2.6.12-rc2 |
117 |
struct request *); |
165125e1e [BLOCK] Get rid o... |
118 |
extern void elv_merged_request(struct request_queue *, struct request *, int); |
812d40264 blkio: Add io_mer... |
119 120 |
extern void elv_bio_merged(struct request_queue *q, struct request *, struct bio *); |
165125e1e [BLOCK] Get rid o... |
121 |
extern void elv_requeue_request(struct request_queue *, struct request *); |
165125e1e [BLOCK] Get rid o... |
122 123 124 125 126 |
extern struct request *elv_former_request(struct request_queue *, struct request *); extern struct request *elv_latter_request(struct request_queue *, struct request *); extern int elv_register_queue(struct request_queue *q); extern void elv_unregister_queue(struct request_queue *q); extern int elv_may_queue(struct request_queue *, int); |
11914a53d block: Add interf... |
127 |
extern void elv_abort_queue(struct request_queue *); |
165125e1e [BLOCK] Get rid o... |
128 129 130 |
extern void elv_completed_request(struct request_queue *, struct request *); extern int elv_set_request(struct request_queue *, struct request *, gfp_t); extern void elv_put_request(struct request_queue *, struct request *); |
26308eab6 block: fix incons... |
131 |
extern void elv_drain_elevator(struct request_queue *); |
1da177e4c Linux-2.6.12-rc2 |
132 133 134 135 |
/* * io scheduler registration */ |
3d3c2379f block, cfq: move ... |
136 |
extern int elv_register(struct elevator_type *); |
1da177e4c Linux-2.6.12-rc2 |
137 138 139 140 141 |
extern void elv_unregister(struct elevator_type *); /* * io scheduler sysfs switching */ |
165125e1e [BLOCK] Get rid o... |
142 143 |
extern ssize_t elv_iosched_show(struct request_queue *, char *); extern ssize_t elv_iosched_store(struct request_queue *, const char *, size_t); |
1da177e4c Linux-2.6.12-rc2 |
144 |
|
165125e1e [BLOCK] Get rid o... |
145 |
extern int elevator_init(struct request_queue *, char *); |
b374d18a4 block: get rid of... |
146 |
extern void elevator_exit(struct elevator_queue *); |
5dd531a03 block: add functi... |
147 |
extern int elevator_change(struct request_queue *, const char *); |
1da177e4c Linux-2.6.12-rc2 |
148 |
extern int elv_rq_merge_ok(struct request *, struct bio *); |
1da177e4c Linux-2.6.12-rc2 |
149 150 |
/* |
2e662b65f [PATCH] elevator:... |
151 152 |
* Helper functions. */ |
165125e1e [BLOCK] Get rid o... |
153 154 |
extern struct request *elv_rb_former_request(struct request_queue *, struct request *); extern struct request *elv_rb_latter_request(struct request_queue *, struct request *); |
2e662b65f [PATCH] elevator:... |
155 156 157 158 |
/* * rb support functions. */ |
796d5116c iosched: prevent ... |
159 |
extern void elv_rb_add(struct rb_root *, struct request *); |
2e662b65f [PATCH] elevator:... |
160 161 162 163 |
extern void elv_rb_del(struct rb_root *, struct request *); extern struct request *elv_rb_find(struct rb_root *, sector_t); /* |
1da177e4c Linux-2.6.12-rc2 |
164 165 166 167 168 169 170 171 172 173 174 175 |
* Return values from elevator merger */ #define ELEVATOR_NO_MERGE 0 #define ELEVATOR_FRONT_MERGE 1 #define ELEVATOR_BACK_MERGE 2 /* * Insertion selection */ #define ELEVATOR_INSERT_FRONT 1 #define ELEVATOR_INSERT_BACK 2 #define ELEVATOR_INSERT_SORT 3 |
797e7dbbe [BLOCK] reimpleme... |
176 |
#define ELEVATOR_INSERT_REQUEUE 4 |
ae1b15396 block: reimplemen... |
177 |
#define ELEVATOR_INSERT_FLUSH 5 |
5e84ea3a9 block: attempt to... |
178 |
#define ELEVATOR_INSERT_SORT_MERGE 6 |
1da177e4c Linux-2.6.12-rc2 |
179 180 181 182 183 184 185 186 187 |
/* * return values from elevator_may_queue_fn */ enum { ELV_MQUEUE_MAY, ELV_MQUEUE_NO, ELV_MQUEUE_MUST, }; |
2e46e8b27 block: drop reque... |
188 |
#define rq_end_sector(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq)) |
2e662b65f [PATCH] elevator:... |
189 |
#define rb_entry_rq(node) rb_entry((node), struct request, rb_node) |
1b47f531e [PATCH] generic d... |
190 |
|
1fbfdfcdd [PATCH] elevator:... |
191 |
/* |
c7c22e4d5 block: add suppor... |
192 |
* Hack to reuse the csd.list list_head as the fifo time holder while |
1fbfdfcdd [PATCH] elevator:... |
193 194 |
* the request is in the io scheduler. Saves an unsigned long in rq. */ |
c7c22e4d5 block: add suppor... |
195 196 |
#define rq_fifo_time(rq) ((unsigned long) (rq)->csd.list.next) #define rq_set_fifo_time(rq,exp) ((rq)->csd.list.next = (void *) (exp)) |
1fbfdfcdd [PATCH] elevator:... |
197 198 199 |
#define rq_entry_fifo(ptr) list_entry((ptr), struct request, queuelist) #define rq_fifo_clear(rq) do { \ list_del_init(&(rq)->queuelist); \ |
c7c22e4d5 block: add suppor... |
200 |
INIT_LIST_HEAD(&(rq)->csd.list); \ |
1fbfdfcdd [PATCH] elevator:... |
201 |
} while (0) |
9361401eb [PATCH] BLOCK: Ma... |
202 |
#endif /* CONFIG_BLOCK */ |
1da177e4c Linux-2.6.12-rc2 |
203 |
#endif |