Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux.git] / include / linux / blkdev.h
index a639fd8a6d7b184cfeccf6c9805f5b3d8b14d3ce..0d84981ee03fc1c9d7bd5b656611b8b87af696e0 100644 (file)
@@ -99,6 +99,7 @@ struct request {
        union {
                struct call_single_data csd;
                struct work_struct mq_flush_work;
+               unsigned long fifo_time;
        };
 
        struct request_queue *q;
@@ -117,7 +118,18 @@ struct request {
        struct bio *bio;
        struct bio *biotail;
 
-       struct hlist_node hash; /* merge hash */
+       /*
+        * The hash is used inside the scheduler, and killed once the
+        * request reaches the dispatch list. The ipi_list is only used
+        * to queue the request for softirq completion, which is long
+        * after the request has been unhashed (and even removed from
+        * the dispatch list).
+        */
+       union {
+               struct hlist_node hash; /* merge hash */
+               struct list_head ipi_list;
+       };
+
        /*
         * The rb_node is only used inside the io scheduler, requests
         * are pruned when moved to the dispatch queue. So let the