[PATCH] generic dispatch fixes
authorJens Axboe <axboe@suse.de>
Thu, 20 Oct 2005 14:37:00 +0000 (16:37 +0200)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Fri, 28 Oct 2005 06:44:37 +0000 (08:44 +0200)
- Split elv_dispatch_insert() into two functions
- Rename rq_last_sector() to rq_end_sector()

Signed-off-by: Jens Axboe <axboe@suse.de>
drivers/block/elevator.c
include/linux/blkdev.h
include/linux/elevator.h

index a27555908d359654a619209ff34dad174d018247..237e43d760c8e5a20be4e8341034f24f39127dc5 100644 (file)
 static DEFINE_SPINLOCK(elv_list_lock);
 static LIST_HEAD(elv_list);
 
-static inline sector_t rq_last_sector(struct request *rq)
-{
-       return rq->sector + rq->nr_sectors;
-}
-
 /*
  * can we safely merge with this request?
  */
@@ -148,7 +143,7 @@ static int elevator_attach(request_queue_t *q, struct elevator_type *e,
        INIT_LIST_HEAD(&q->queue_head);
        q->last_merge = NULL;
        q->elevator = eq;
-       q->last_sector = 0;
+       q->end_sector = 0;
        q->boundary_rq = NULL;
        q->max_back_kb = 0;
 
@@ -233,29 +228,25 @@ void elevator_exit(elevator_t *e)
        kfree(e);
 }
 
+void elv_dispatch_insert_tail(request_queue_t *q, struct request *rq)
+{
+}
+
 /*
  * Insert rq into dispatch queue of q.  Queue lock must be held on
  * entry.  If sort != 0, rq is sort-inserted; otherwise, rq will be
  * appended to the dispatch queue.  To be used by specific elevators.
  */
-void elv_dispatch_insert(request_queue_t *q, struct request *rq, int sort)
+void elv_dispatch_sort(request_queue_t *q, struct request *rq)
 {
        sector_t boundary;
        unsigned max_back;
        struct list_head *entry;
 
-       if (!sort) {
-               /* Specific elevator is performing sort.  Step away. */
-               q->last_sector = rq_last_sector(rq);
-               q->boundary_rq = rq;
-               list_add_tail(&rq->queuelist, &q->queue_head);
-               return;
-       }
-
-       boundary = q->last_sector;
+       boundary = q->end_sector;
        max_back = q->max_back_kb * 2;
        boundary = boundary > max_back ? boundary - max_back : 0;
-
+       
        list_for_each_prev(entry, &q->queue_head) {
                struct request *pos = list_entry_rq(entry);
 
@@ -343,10 +334,10 @@ void __elv_add_request(request_queue_t *q, struct request *rq, int where,
                        where = ELEVATOR_INSERT_BACK;
 
                /*
-                * this request is scheduling boundary, update last_sector
+                * this request is scheduling boundary, update end_sector
                 */
                if (blk_fs_request(rq)) {
-                       q->last_sector = rq_last_sector(rq);
+                       q->end_sector = rq_end_sector(rq);
                        q->boundary_rq = rq;
                }
        }
@@ -479,7 +470,7 @@ struct request *elv_next_request(request_queue_t *q)
                        q->last_merge = NULL;
 
                if (!q->boundary_rq || q->boundary_rq == rq) {
-                       q->last_sector = rq_last_sector(rq);
+                       q->end_sector = rq_end_sector(rq);
                        q->boundary_rq = NULL;
                }
 
@@ -802,7 +793,7 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name)
        return len;
 }
 
-EXPORT_SYMBOL(elv_dispatch_insert);
+EXPORT_SYMBOL(elv_dispatch_sort);
 EXPORT_SYMBOL(elv_add_request);
 EXPORT_SYMBOL(__elv_add_request);
 EXPORT_SYMBOL(elv_requeue_request);
index 2c7b9154927ae849803f62587b5cd12b95b5153c..a2e496f285a4f257d430f1634d5623d1f5706f5a 100644 (file)
@@ -337,7 +337,7 @@ struct request_queue
        /*
         * Dispatch queue sorting
         */
-       sector_t                last_sector;
+       sector_t                end_sector;
        struct request          *boundary_rq;
        unsigned int            max_back_kb;
 
@@ -624,6 +624,17 @@ static inline void blkdev_dequeue_request(struct request *req)
        elv_dequeue_request(req->q, req);
 }
 
+/*
+ * This should be in elevator.h, but that requires pulling in rq and q
+ */
+static inline void elv_dispatch_add_tail(struct request_queue *q,
+                                        struct request *rq)
+{
+       q->end_sector = rq_end_sector(rq);
+       q->boundary_rq = rq;
+       list_add_tail(&rq->queuelist, &q->queue_head);
+}
+
 /*
  * Access functions for manipulating queue properties
  */
index 76f4f6920744496ded49763acac725c88822a857..f9b5ec38121aeb0e77154a84d874e57f029e4e04 100644 (file)
@@ -79,7 +79,7 @@ struct elevator_queue
 /*
  * block elevator interface
  */
-extern void elv_dispatch_insert(request_queue_t *, struct request *, int);
+extern void elv_dispatch_sort(request_queue_t *, struct request *);
 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 request **, struct bio *);
@@ -140,4 +140,6 @@ enum {
        ELV_MQUEUE_MUST,
 };
 
+#define rq_end_sector(rq)      ((rq)->sector + (rq)->nr_sectors)
+
 #endif