Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.26-rc1 /block/elevator.c

Filename:/block/elevator.c
Lines Added:16
Lines Deleted:7
Also changed in: (Previous) 2.6.25-git20  2.6.25-git19  2.6.25-git18  2.6.25-git17  2.6.25-git16  2.6.25-git15 
(Following) 2.6.26-rc2  2.6.26-rc3  2.6.26-rc4  2.6.26-rc4-git2  2.6.26-rc4-git3  2.6.26-rc4-git4 

Location
[  2.6.26-rc1
  [  block
     o  elevator.c

Patch

diff --git a/block/elevator.c b/block/elevator.c
index 88318c3..980f8ae 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -69,7 +69,7 @@ static int elv_iosched_allow_merge(struct request *rq, struct bio *bio)
 /*
  * can we safely merge with this request?
  */
-inline int elv_rq_merge_ok(struct request *rq, struct bio *bio)
+int elv_rq_merge_ok(struct request *rq, struct bio *bio)
 {
    if (!rq_mergeable(rq))
       return 0;
@@ -488,6 +488,9 @@ int elv_merge(struct request_queue *q, struct request **req, struct bio *bio)
       }
    }
 
+   if (blk_queue_nomerges(q))
+      return ELEVATOR_NO_MERGE;
+
    /*
     * See if our hash lookup can find a potential backmerge.
     */
@@ -647,7 +650,7 @@ void elv_insert(struct request_queue *q, struct request *rq, int where)
 
    default:
       printk(KERN_ERR "%s: bad insertion point %d\n",
-             __FUNCTION__, where);
+             __func__, where);
       BUG();
    }
 
@@ -805,8 +808,7 @@ struct request *elv_next_request(struct request_queue *q)
          rq->cmd_flags |= REQ_QUIET;
          end_queued_request(rq, 0);
       } else {
-         printk(KERN_ERR "%s: bad return=%d\n", __FUNCTION__,
-                        ret);
+         printk(KERN_ERR "%s: bad return=%d\n", __func__, ret);
          break;
       }
    }
@@ -1070,7 +1072,7 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
     */
    spin_lock_irq(q->queue_lock);
 
-   set_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
+   queue_flag_set(QUEUE_FLAG_ELVSWITCH, q);
 
    elv_drain_elevator(q);
 
@@ -1104,7 +1106,10 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
     * finally exit old elevator and turn off BYPASS.
     */
    elevator_exit(old_elevator);
-   clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
+   spin_lock_irq(q->queue_lock);
+   queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q);
+   spin_unlock_irq(q->queue_lock);
+
    return 1;
 
 fail_register:
@@ -1115,7 +1120,11 @@ fail_register:
    elevator_exit(e);
    q->elevator = old_elevator;
    elv_register_queue(q);
-   clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags);
+
+   spin_lock_irq(q->queue_lock);
+   queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q);
+   spin_unlock_irq(q->queue_lock);
+
    return 0;
 }
 


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.