hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/linux/elevator.h
....@@ -24,74 +24,6 @@
2424 ELEVATOR_DISCARD_MERGE = 3,
2525 };
2626
27
-typedef enum elv_merge (elevator_merge_fn) (struct request_queue *, struct request **,
28
- struct bio *);
29
-
30
-typedef void (elevator_merge_req_fn) (struct request_queue *, struct request *, struct request *);
31
-
32
-typedef void (elevator_merged_fn) (struct request_queue *, struct request *, enum elv_merge);
33
-
34
-typedef int (elevator_allow_bio_merge_fn) (struct request_queue *,
35
- struct request *, struct bio *);
36
-
37
-typedef int (elevator_allow_rq_merge_fn) (struct request_queue *,
38
- struct request *, struct request *);
39
-
40
-typedef void (elevator_bio_merged_fn) (struct request_queue *,
41
- struct request *, struct bio *);
42
-
43
-typedef int (elevator_dispatch_fn) (struct request_queue *, int);
44
-
45
-typedef void (elevator_add_req_fn) (struct request_queue *, struct request *);
46
-typedef struct request *(elevator_request_list_fn) (struct request_queue *, struct request *);
47
-typedef void (elevator_completed_req_fn) (struct request_queue *, struct request *);
48
-typedef int (elevator_may_queue_fn) (struct request_queue *, unsigned int);
49
-
50
-typedef void (elevator_init_icq_fn) (struct io_cq *);
51
-typedef void (elevator_exit_icq_fn) (struct io_cq *);
52
-typedef int (elevator_set_req_fn) (struct request_queue *, struct request *,
53
- struct bio *, gfp_t);
54
-typedef void (elevator_put_req_fn) (struct request *);
55
-typedef void (elevator_activate_req_fn) (struct request_queue *, struct request *);
56
-typedef void (elevator_deactivate_req_fn) (struct request_queue *, struct request *);
57
-
58
-typedef int (elevator_init_fn) (struct request_queue *,
59
- struct elevator_type *e);
60
-typedef void (elevator_exit_fn) (struct elevator_queue *);
61
-typedef void (elevator_registered_fn) (struct request_queue *);
62
-
63
-struct elevator_ops
64
-{
65
- elevator_merge_fn *elevator_merge_fn;
66
- elevator_merged_fn *elevator_merged_fn;
67
- elevator_merge_req_fn *elevator_merge_req_fn;
68
- elevator_allow_bio_merge_fn *elevator_allow_bio_merge_fn;
69
- elevator_allow_rq_merge_fn *elevator_allow_rq_merge_fn;
70
- elevator_bio_merged_fn *elevator_bio_merged_fn;
71
-
72
- elevator_dispatch_fn *elevator_dispatch_fn;
73
- elevator_add_req_fn *elevator_add_req_fn;
74
- elevator_activate_req_fn *elevator_activate_req_fn;
75
- elevator_deactivate_req_fn *elevator_deactivate_req_fn;
76
-
77
- elevator_completed_req_fn *elevator_completed_req_fn;
78
-
79
- elevator_request_list_fn *elevator_former_req_fn;
80
- elevator_request_list_fn *elevator_latter_req_fn;
81
-
82
- elevator_init_icq_fn *elevator_init_icq_fn; /* see iocontext.h */
83
- elevator_exit_icq_fn *elevator_exit_icq_fn; /* ditto */
84
-
85
- elevator_set_req_fn *elevator_set_req_fn;
86
- elevator_put_req_fn *elevator_put_req_fn;
87
-
88
- elevator_may_queue_fn *elevator_may_queue_fn;
89
-
90
- elevator_init_fn *elevator_init_fn;
91
- elevator_exit_fn *elevator_exit_fn;
92
- elevator_registered_fn *elevator_registered_fn;
93
-};
94
-
9527 struct blk_mq_alloc_data;
9628 struct blk_mq_hw_ctx;
9729
....@@ -103,24 +35,22 @@
10335 void (*depth_updated)(struct blk_mq_hw_ctx *);
10436
10537 bool (*allow_merge)(struct request_queue *, struct request *, struct bio *);
106
- bool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *);
38
+ bool (*bio_merge)(struct request_queue *, struct bio *, unsigned int);
10739 int (*request_merge)(struct request_queue *q, struct request **, struct bio *);
10840 void (*request_merged)(struct request_queue *, struct request *, enum elv_merge);
10941 void (*requests_merged)(struct request_queue *, struct request *, struct request *);
11042 void (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);
111
- void (*prepare_request)(struct request *, struct bio *bio);
43
+ void (*prepare_request)(struct request *);
11244 void (*finish_request)(struct request *);
11345 void (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);
11446 struct request *(*dispatch_request)(struct blk_mq_hw_ctx *);
11547 bool (*has_work)(struct blk_mq_hw_ctx *);
116
- void (*completed_request)(struct request *);
117
- void (*started_request)(struct request *);
48
+ void (*completed_request)(struct request *, u64);
11849 void (*requeue_request)(struct request *);
11950 struct request *(*former_request)(struct request_queue *, struct request *);
12051 struct request *(*next_request)(struct request_queue *, struct request *);
12152 void (*init_icq)(struct io_cq *);
12253 void (*exit_icq)(struct io_cq *);
123
- void (*elevator_registered_fn)(struct request_queue *q);
12454
12555 ANDROID_KABI_RESERVE(1);
12656 ANDROID_KABI_RESERVE(2);
....@@ -145,17 +75,15 @@
14575 struct kmem_cache *icq_cache;
14676
14777 /* fields provided by elevator implementation */
148
- union {
149
- struct elevator_ops sq;
150
- struct elevator_mq_ops mq;
151
- } ops;
78
+ struct elevator_mq_ops ops;
79
+
15280 size_t icq_size; /* see iocontext.h */
15381 size_t icq_align; /* ditto */
15482 struct elv_fs_entry *elevator_attrs;
155
- char elevator_name[ELV_NAME_MAX];
83
+ const char *elevator_name;
15684 const char *elevator_alias;
85
+ const unsigned int elevator_features;
15786 struct module *elevator_owner;
158
- bool uses_mq;
15987 #ifdef CONFIG_BLK_DEBUG_FS
16088 const struct blk_mq_debugfs_attr *queue_debugfs_attrs;
16189 const struct blk_mq_debugfs_attr *hctx_debugfs_attrs;
....@@ -186,40 +114,25 @@
186114 struct kobject kobj;
187115 struct mutex sysfs_lock;
188116 unsigned int registered:1;
189
- unsigned int uses_mq:1;
190117 DECLARE_HASHTABLE(hash, ELV_HASH_BITS);
191118 };
192119
193120 /*
194121 * block elevator interface
195122 */
196
-extern void elv_dispatch_sort(struct request_queue *, struct request *);
197
-extern void elv_dispatch_add_tail(struct request_queue *, struct request *);
198
-extern void elv_add_request(struct request_queue *, struct request *, int);
199
-extern void __elv_add_request(struct request_queue *, struct request *, int);
200123 extern enum elv_merge elv_merge(struct request_queue *, struct request **,
201124 struct bio *);
202125 extern void elv_merge_requests(struct request_queue *, struct request *,
203126 struct request *);
204127 extern void elv_merged_request(struct request_queue *, struct request *,
205128 enum elv_merge);
206
-extern void elv_bio_merged(struct request_queue *q, struct request *,
207
- struct bio *);
208129 extern bool elv_attempt_insert_merge(struct request_queue *, struct request *);
209
-extern void elv_requeue_request(struct request_queue *, struct request *);
210130 extern struct request *elv_former_request(struct request_queue *, struct request *);
211131 extern struct request *elv_latter_request(struct request_queue *, struct request *);
212
-extern int elv_may_queue(struct request_queue *, unsigned int);
213
-extern void elv_completed_request(struct request_queue *, struct request *);
214
-extern int elv_set_request(struct request_queue *q, struct request *rq,
215
- struct bio *bio, gfp_t gfp_mask);
216
-extern void elv_put_request(struct request_queue *, struct request *);
217
-extern void elv_drain_elevator(struct request_queue *);
218132
219133 /*
220134 * io scheduler registration
221135 */
222
-extern void __init load_default_elevator_module(void);
223136 extern int elv_register(struct elevator_type *);
224137 extern void elv_unregister(struct elevator_type *);
225138
....@@ -256,24 +169,20 @@
256169 #define ELEVATOR_INSERT_FLUSH 5
257170 #define ELEVATOR_INSERT_SORT_MERGE 6
258171
259
-/*
260
- * return values from elevator_may_queue_fn
261
- */
262
-enum {
263
- ELV_MQUEUE_MAY,
264
- ELV_MQUEUE_NO,
265
- ELV_MQUEUE_MUST,
266
-};
267
-
268172 #define rq_end_sector(rq) (blk_rq_pos(rq) + blk_rq_sectors(rq))
269173 #define rb_entry_rq(node) rb_entry((node), struct request, rb_node)
270174
271175 #define rq_entry_fifo(ptr) list_entry((ptr), struct request, queuelist)
272176 #define rq_fifo_clear(rq) list_del_init(&(rq)->queuelist)
273177
274
-#else /* CONFIG_BLOCK */
178
+/*
179
+ * Elevator features.
180
+ */
275181
276
-static inline void load_default_elevator_module(void) { }
182
+/* Supports zoned block devices sequential write constraint */
183
+#define ELEVATOR_F_ZBD_SEQ_WRITE (1U << 0)
184
+/* Supports scheduling on multiple hardware queues */
185
+#define ELEVATOR_F_MQ_AWARE (1U << 1)
277186
278187 #endif /* CONFIG_BLOCK */
279188 #endif