]>
Commit | Line | Data |
---|---|---|
fd0928df JA |
1 | #ifndef IOCONTEXT_H |
2 | #define IOCONTEXT_H | |
3 | ||
4 | /* | |
5 | * This is the per-process anticipatory I/O scheduler state. | |
6 | */ | |
7 | struct as_io_context { | |
8 | spinlock_t lock; | |
9 | ||
10 | void (*dtor)(struct as_io_context *aic); /* destructor */ | |
11 | void (*exit)(struct as_io_context *aic); /* called on task exit */ | |
12 | ||
13 | unsigned long state; | |
14 | atomic_t nr_queued; /* queued reads & sync writes */ | |
15 | atomic_t nr_dispatched; /* number of requests gone to the drivers */ | |
16 | ||
17 | /* IO History tracking */ | |
18 | /* Thinktime */ | |
19 | unsigned long last_end_request; | |
20 | unsigned long ttime_total; | |
21 | unsigned long ttime_samples; | |
22 | unsigned long ttime_mean; | |
23 | /* Layout pattern */ | |
24 | unsigned int seek_samples; | |
25 | sector_t last_request_pos; | |
26 | u64 seek_total; | |
27 | sector_t seek_mean; | |
28 | }; | |
29 | ||
30 | struct cfq_queue; | |
31 | struct cfq_io_context { | |
32 | struct rb_node rb_node; | |
33 | void *key; | |
34 | ||
35 | struct cfq_queue *cfqq[2]; | |
36 | ||
37 | struct io_context *ioc; | |
38 | ||
39 | unsigned long last_end_request; | |
40 | sector_t last_request_pos; | |
41 | ||
42 | unsigned long ttime_total; | |
43 | unsigned long ttime_samples; | |
44 | unsigned long ttime_mean; | |
45 | ||
46 | unsigned int seek_samples; | |
47 | u64 seek_total; | |
48 | sector_t seek_mean; | |
49 | ||
50 | struct list_head queue_list; | |
51 | ||
52 | void (*dtor)(struct io_context *); /* destructor */ | |
53 | void (*exit)(struct io_context *); /* called on task exit */ | |
54 | }; | |
55 | ||
56 | /* | |
57 | * This is the per-process I/O subsystem state. It is refcounted and | |
58 | * kmalloc'ed. Currently all fields are modified in process io context | |
59 | * (apart from the atomic refcount), so require no locking. | |
60 | */ | |
61 | struct io_context { | |
62 | atomic_t refcount; | |
63 | struct task_struct *task; | |
64 | ||
65 | unsigned short ioprio; | |
66 | unsigned short ioprio_changed; | |
67 | ||
68 | /* | |
69 | * For request batching | |
70 | */ | |
71 | unsigned long last_waited; /* Time last woken after wait for request */ | |
72 | int nr_batch_requests; /* Number of requests left in the batch */ | |
73 | ||
74 | struct as_io_context *aic; | |
75 | struct rb_root cic_root; | |
76 | void *ioc_data; | |
77 | }; | |
78 | ||
79 | #endif |