struct rb_root sort_list[DD_DIR_COUNT];
        struct list_head fifo_list[DD_DIR_COUNT];
 
+       /* Data direction of latest dispatched request. */
+       enum dd_data_dir last_dir;
        /*
         * next in sort order. read, write or both are NULL
         */
 {
        const enum dd_data_dir data_dir = rq_data_dir(rq);
 
-       dd->next_rq[DD_READ] = NULL;
-       dd->next_rq[DD_WRITE] = NULL;
        dd->next_rq[data_dir] = deadline_latter_request(rq);
 
        /*
        /*
         * batches are currently reads XOR writes
         */
-       rq = deadline_next_request(dd, DD_WRITE);
-       if (!rq)
-               rq = deadline_next_request(dd, DD_READ);
-
+       rq = deadline_next_request(dd, dd->last_dir);
        if (rq && dd->batching < dd->fifo_batch)
                /* we have a next request are still entitled to batch */
                goto dispatch_request;
        if (!rq)
                return NULL;
 
+       dd->last_dir = data_dir;
        dd->batching = 0;
 
 dispatch_request:
        dd->fifo_expire[DD_WRITE] = write_expire;
        dd->writes_starved = writes_starved;
        dd->front_merges = 1;
+       dd->last_dir = DD_WRITE;
        dd->fifo_batch = fifo_batch;
        spin_lock_init(&dd->lock);
        spin_lock_init(&dd->zone_lock);