diff options
| author | Jens Axboe <axboe@suse.de> | 2002-10-27 17:14:14 -0800 |
|---|---|---|
| committer | Jens Axboe <axboe@suse.de> | 2002-10-27 17:14:14 -0800 |
| commit | 86b9d08bca816f68dea450e9baf42d474e09112c (patch) | |
| tree | 946e2c0ba180c4593ebaf1052facdfafe82e2ee0 /include/linux | |
| parent | 6d94d882f8924da545059f82952707dc6ca9157b (diff) | |
[PATCH] elv_add_request cleanups
Request insertion in the current tree is a mess. We have all sorts of
variants of *elv_add_request*, and it's not at all clear who does what
and with what locks (or not). This patch cleans it up to be:
o __elv_add_request(queue, request, at_end, plug)
Core function, requires queue lock to be held
o elv_add_request(queue, request, at_end, plug)
Like __elv_add_request(), but grabs queue lock
o __elv_add_request_pos(queue, request, position)
Insert request at a given location, lock must be held
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/blk.h | 16 | ||||
| -rw-r--r-- | include/linux/elevator.h | 7 |
2 files changed, 5 insertions, 18 deletions
diff --git a/include/linux/blk.h b/include/linux/blk.h index 7fbd3f6acae8..775d021167c1 100644 --- a/include/linux/blk.h +++ b/include/linux/blk.h @@ -50,22 +50,6 @@ static inline void blkdev_dequeue_request(struct request *req) elv_remove_request(req->q, req); } -#define _elv_add_request_core(q, rq, where, plug) \ - do { \ - if ((plug)) \ - blk_plug_device((q)); \ - (q)->elevator.elevator_add_req_fn((q), (rq), (where)); \ - } while (0) - -#define _elv_add_request(q, rq, back, p) do { \ - if ((back)) \ - _elv_add_request_core((q), (rq), (q)->queue_head.prev, (p)); \ - else \ - _elv_add_request_core((q), (rq), &(q)->queue_head, (p)); \ -} while (0) - -#define elv_add_request(q, rq, back) _elv_add_request((q), (rq), (back), 1) - #if defined(MAJOR_NR) || defined(IDE_DRIVER) #if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR) #if !defined(IDE_DRIVER) diff --git a/include/linux/elevator.h b/include/linux/elevator.h index 8a54a1c5e5af..62092e8ed2ad 100644 --- a/include/linux/elevator.h +++ b/include/linux/elevator.h @@ -40,8 +40,8 @@ struct elevator_s /* * block elevator interface */ -extern void __elv_add_request(request_queue_t *, struct request *, - struct list_head *); +extern void elv_add_request(request_queue_t *, struct request *, int, int); +extern void __elv_add_request(request_queue_t *, struct request *, int, int); extern int elv_merge(request_queue_t *, struct list_head **, struct bio *); extern void elv_merge_requests(request_queue_t *, struct request *, struct request *); @@ -50,6 +50,9 @@ extern void elv_remove_request(request_queue_t *, struct request *); extern int elv_queue_empty(request_queue_t *); extern inline struct list_head *elv_get_sort_head(request_queue_t *, struct request *); +#define __elv_add_request_pos(q, rq, pos) \ + (q)->elevator.elevator_add_req_fn((q), (rq), (pos)) + /* * noop I/O scheduler. always merges, always inserts new request at tail */ |
