4 #include <linux/kernel.h>
6 #include <linux/blkdev.h>
7 #include <linux/elevator.h>
9 #include <linux/config.h>
10 #include <linux/module.h>
11 #include <linux/slab.h>
12 #include <linux/init.h>
13 #include <linux/compiler.h>
15 #include <asm/uaccess.h>
18 * See if we can find a request that this buffer can be coalesced with.
20 int elevator_noop_merge(request_queue_t *q, struct request **req,
23 struct list_head *entry = &q->queue_head;
27 if ((ret = elv_try_last_merge(q, bio))) {
32 while ((entry = entry->prev) != &q->queue_head) {
33 __rq = list_entry_rq(entry);
35 if (__rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER))
37 else if (__rq->flags & REQ_STARTED)
40 if (!blk_fs_request(__rq))
43 if ((ret = elv_try_merge(__rq, bio))) {
50 return ELEVATOR_NO_MERGE;
53 void elevator_noop_merge_requests(request_queue_t *q, struct request *req,
56 list_del_init(&next->queuelist);
59 void elevator_noop_add_request(request_queue_t *q, struct request *rq,
62 struct list_head *insert = q->queue_head.prev;
64 if (where == ELEVATOR_INSERT_FRONT)
65 insert = &q->queue_head;
67 list_add_tail(&rq->queuelist, &q->queue_head);
70 * new merges must not precede this barrier
72 if (rq->flags & REQ_HARDBARRIER)
74 else if (!q->last_merge)
78 struct request *elevator_noop_next_request(request_queue_t *q)
80 if (!list_empty(&q->queue_head))
81 return list_entry_rq(q->queue_head.next);
86 elevator_t elevator_noop = {
87 .elevator_merge_fn = elevator_noop_merge,
88 .elevator_merge_req_fn = elevator_noop_merge_requests,
89 .elevator_next_req_fn = elevator_noop_next_request,
90 .elevator_add_req_fn = elevator_noop_add_request,
91 .elevator_name = "noop",
94 EXPORT_SYMBOL(elevator_noop);