19 Nov, 2005

1 commit


12 Nov, 2005

6 commits

  • With generic dispatch queue update, implicit former/latter request
    handling using rq->queuelist.prev/next doesn't work as expected
    anymore. Also, the only iosched dependent on this feature was
    noop-iosched and it has been reimplemented to have its own
    latter/former methods. This patch removes implicit former/latter
    handling.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • elv_iosched_store doesn't terminate string passed from userspace if
    it's too long. Also, if the written length is zero (probably not
    possible), it accesses elevator_name[-1]. This patch fixes both bugs.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • This patch adds request_queue->nr_sorted which keeps the number of
    requests in the iosched and implement elv_drain_elevator which
    performs forced dispatching. elv_drain_elevator checks whether
    iosched actually dispatches all requests it has and prints error
    message if it doesn't. As buggy forced dispatching can result in
    wrong barrier operations, I think this extra check is worthwhile.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • elevator_dispatch needs to run queue after forced dispatching;
    otherwise, the queue might stall.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • In addition to the first patch, which is probably goodness, I found the
    cause of my panic - applying this patch fixes it and now I am booting.
    If the chosen_elevator[] is not found, fall back to noop.

    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Zachary Amsden
     
  • I got a panic in the elevator code, backtrace :

    Unable to handle kernel NULL pointer dereference at virtual address 00000060
    ..
    EIP is at elevator_put+0x0/0x30 (null elevator_type passed)
    ..
    elevator_init+0x38
    blk_init_queu_node+0xc9
    floppy_init+0xdb
    do_initcalls+0x23
    init+0x10a
    init+0x0

    Clearly if the kmalloc here fails, e->elevator_type is not yet set; this
    appears to be the correct fix, but I think I probably hit the second case
    due to a race condition. Someone more familiar with the elevator code
    should look at this more closely until I can determine if I can reproduce.

    Signed-off-by: Zachary Amsden
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    Zachary Amsden
     

04 Nov, 2005

1 commit