[PATCH] elevator: introduce a way to reuse rq for internal FIFO handling
authorJens Axboe <axboe@suse.de>
Tue, 11 Jul 2006 19:49:15 +0000 (21:49 +0200)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Sat, 30 Sep 2006 18:26:59 +0000 (20:26 +0200)
The io schedulers can use this instead of having to allocate space for
it themselves.

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

index 95b2a04b969ca0691ab14d6f09de39b67bda0fc0..0e7b1a733919b3a3333252c300528b068a1d3928 100644 (file)
@@ -166,4 +166,16 @@ enum {
 #define rq_end_sector(rq)      ((rq)->sector + (rq)->nr_sectors)
 #define rb_entry_rq(node)      rb_entry((node), struct request, rb_node)
 
+/*
+ * Hack to reuse the donelist list_head as the fifo time holder while
+ * the request is in the io scheduler. Saves an unsigned long in rq.
+ */
+#define rq_fifo_time(rq)       ((unsigned long) (rq)->donelist.next)
+#define rq_set_fifo_time(rq,exp)       ((rq)->donelist.next = (void *) (exp))
+#define rq_entry_fifo(ptr)     list_entry((ptr), struct request, queuelist)
+#define rq_fifo_clear(rq)      do {            \
+       list_del_init(&(rq)->queuelist);        \
+       INIT_LIST_HEAD(&(rq)->donelist);        \
+       } while (0)
+
 #endif