Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
[pandora-kernel.git] / block / elevator.c
index 4e11559..2569512 100644 (file)
@@ -429,7 +429,7 @@ void elv_dispatch_sort(struct request_queue *q, struct request *rq)
        q->nr_sorted--;
 
        boundary = q->end_sector;
-       stop_flags = REQ_SOFTBARRIER | REQ_HARDBARRIER | REQ_STARTED;
+       stop_flags = REQ_SOFTBARRIER | REQ_STARTED;
        list_for_each_prev(entry, &q->queue_head) {
                struct request *pos = list_entry_rq(entry);
 
@@ -617,8 +617,6 @@ void elv_quiesce_end(struct request_queue *q)
 
 void elv_insert(struct request_queue *q, struct request *rq, int where)
 {
-       struct list_head *pos;
-       unsigned ordseq;
        int unplug_it = 1;
 
        trace_block_rq_insert(q, rq);
@@ -626,9 +624,16 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
        rq->q = q;
 
        switch (where) {
+       case ELEVATOR_INSERT_REQUEUE:
+               /*
+                * Most requeues happen because of a busy condition,
+                * don't force unplug of the queue for that case.
+                * Clear unplug_it and fall through.
+                */
+               unplug_it = 0;
+
        case ELEVATOR_INSERT_FRONT:
                rq->cmd_flags |= REQ_SOFTBARRIER;
-
                list_add(&rq->queuelist, &q->queue_head);
                break;
 
@@ -668,36 +673,6 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
                q->elevator->ops->elevator_add_req_fn(q, rq);
                break;
 
-       case ELEVATOR_INSERT_REQUEUE:
-               /*
-                * If ordered flush isn't in progress, we do front
-                * insertion; otherwise, requests should be requeued
-                * in ordseq order.
-                */
-               rq->cmd_flags |= REQ_SOFTBARRIER;
-
-               /*
-                * Most requeues happen because of a busy condition,
-                * don't force unplug of the queue for that case.
-                */
-               unplug_it = 0;
-
-               if (q->ordseq == 0) {
-                       list_add(&rq->queuelist, &q->queue_head);
-                       break;
-               }
-
-               ordseq = blk_ordered_req_seq(rq);
-
-               list_for_each(pos, &q->queue_head) {
-                       struct request *pos_rq = list_entry_rq(pos);
-                       if (ordseq <= blk_ordered_req_seq(pos_rq))
-                               break;
-               }
-
-               list_add_tail(&rq->queuelist, pos);
-               break;
-
        default:
                printk(KERN_ERR "%s: bad insertion point %d\n",
                       __func__, where);
@@ -716,26 +691,8 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
 void __elv_add_request(struct request_queue *q, struct request *rq, int where,
                       int plug)
 {
-       if (q->ordcolor)
-               rq->cmd_flags |= REQ_ORDERED_COLOR;
-
-       if (rq->cmd_flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER)) {
-               /*
-                * toggle ordered color
-                */
-               if (rq->cmd_flags & REQ_HARDBARRIER)
-                       q->ordcolor ^= 1;
-
-               /*
-                * barriers implicitly indicate back insertion
-                */
-               if (where == ELEVATOR_INSERT_SORT)
-                       where = ELEVATOR_INSERT_BACK;
-
-               /*
-                * this request is scheduling boundary, update
-                * end_sector
-                */
+       if (rq->cmd_flags & REQ_SOFTBARRIER) {
+               /* barriers are scheduling boundary, update end_sector */
                if (rq->cmd_type == REQ_TYPE_FS ||
                    (rq->cmd_flags & REQ_DISCARD)) {
                        q->end_sector = rq_end_sector(rq);
@@ -855,24 +812,6 @@ void elv_completed_request(struct request_queue *q, struct request *rq)
                    e->ops->elevator_completed_req_fn)
                        e->ops->elevator_completed_req_fn(q, rq);
        }
-
-       /*
-        * Check if the queue is waiting for fs requests to be
-        * drained for flush sequence.
-        */
-       if (unlikely(q->ordseq)) {
-               struct request *next = NULL;
-
-               if (!list_empty(&q->queue_head))
-                       next = list_entry_rq(q->queue_head.next);
-
-               if (!queue_in_flight(q) &&
-                   blk_ordered_cur_seq(q) == QUEUE_ORDSEQ_DRAIN &&
-                   (!next || blk_ordered_req_seq(next) > QUEUE_ORDSEQ_DRAIN)) {
-                       blk_ordered_complete_seq(q, QUEUE_ORDSEQ_DRAIN, 0);
-                       __blk_run_queue(q);
-               }
-       }
 }
 
 #define to_elv(atr) container_of((atr), struct elv_fs_entry, attr)