ll_rw_blk.c BUG

From: Leonard N. Zubkoff (lnz@dandelion.com)
Date: Tue May 30 2000 - 20:50:08 EST


There have been a number of reports of problems with the elevator.c debugging
messages:

30:01: elevator read_pendings 2 should be 1
30:01: elevator nr_segments 12 should be 11

showing up under load on systems with DAC960 RAID controllers. The underlying
problem here is that the elevator accounting in ll_rw_blk.c is incorrect in the
case where the call to the request_fn blocks. In that case, the request has
already been placed into the queue but the call to elevator_account_request to
account for it in the elevator data structures will not be make until after the
request_fn completes. The following patch will correct this.

                       Leonard

--- linux/drivers/block/ll_rw_blk.c- Wed May 24 18:38:26 2000
+++ linux/drivers/block/ll_rw_blk.c Tue May 30 18:38:07 2000
@@ -411,6 +411,7 @@
 
         drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
 
+ elevator_account_request(&q->elevator, req);
         if (list_empty(head)) {
                 req->elevator_sequence = elevator_sequence(&q->elevator, latency);
                 list_add(&req->queue, &q->queue_head);
@@ -748,7 +749,6 @@
         req->bhtail = bh;
         req->q = q;
         add_request(q, req, head, orig_latency);
- elevator_account_request(elevator, req);
 
         spin_unlock_irqrestore(&io_request_lock, flags);
         return;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed May 31 2000 - 21:00:26 EST