23 Aug, 2006

1 commit


01 Jul, 2006

1 commit


23 Jun, 2006

1 commit

  • We already drop the refcount in elevator_exit(), and as
    we're setting 'e' to NULL, we'll never take that branch anyway.
    Finally, as 'e' is a local var that isn't referenced afterwards,
    setting it to NULL is pointless.

    Signed-off-by: Dave Jones
    Signed-off-by: Jens Axboe

    Dave Jones
     

09 Jun, 2006

1 commit

  • There's a race between shutting down one io scheduler and firing up the
    next, in which a new io could enter and cause the io scheduler to be
    invoked with bad or NULL data.

    To fix this, we need to maintain the queue lock for a bit longer.
    Unfortunately we cannot do that, since the elevator init requires to be
    run without the lock held. This isn't easily fixable, without also
    changing the mempool API. So split the initialization into two parts,
    and alloc-init operation and an attach operation. Then we can
    preallocate the io scheduler and related structures, and run the attach
    inside the lock after we detach the old one.

    This patch has survived 30 minutes of 1 second io scheduler switching
    with a very busy io load.

    Signed-off-by: Jens Axboe
    Signed-off-by: Linus Torvalds

    Jens Axboe
     

12 May, 2006

1 commit

  • Don't recurse back into the driver even if the unplug threshold is met,
    when the driver asks for a requeue. This is both silly from a logical
    point of view (requeues typically happen due to driver/hardware
    shortage), and also dangerous since we could hit an endless request_fn
    -> requeue -> unplug -> request_fn loop and crash on stack overrun.

    Also limit blk_run_queue() to one level of recursion, similar to how
    blk_start_queue() works.

    This patch fixed a real problem with SLES10 and lpfc, and it could hit
    any SCSI lld that returns non-zero from it's ->queuecommand() handler.

    Signed-off-by: Jens Axboe
    Signed-off-by: Linus Torvalds

    Jens Axboe
     

20 Apr, 2006

1 commit


01 Apr, 2006

1 commit

  • The boot cmdline is parsed in parse_early_param() and
    parse_args(,unknown_bootoption).

    And __setup() is used in obsolete_checksetup().

    start_kernel()
    -> parse_args()
    -> unknown_bootoption()
    -> obsolete_checksetup()

    If __setup()'s callback (->setup_func()) returns 1 in
    obsolete_checksetup(), obsolete_checksetup() thinks a parameter was
    handled.

    If ->setup_func() returns 0, obsolete_checksetup() tries other
    ->setup_func(). If all ->setup_func() that matched a parameter returns 0,
    a parameter is seted to argv_init[].

    Then, when runing /sbin/init or init=app, argv_init[] is passed to the app.
    If the app doesn't ignore those arguments, it will warning and exit.

    This patch fixes a wrong usage of it, however fixes obvious one only.

    Signed-off-by: OGAWA Hirofumi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    OGAWA Hirofumi
     

25 Mar, 2006

1 commit


24 Mar, 2006

1 commit


19 Mar, 2006

3 commits


08 Feb, 2006

1 commit

  • q->ordcolor must only be flipped on initial queueing of a hardbarrier
    request.

    Constructing ordered sequence and requeueing used to pass through
    __elv_add_request() which flips q->ordcolor when it sees a barrier
    request.

    This patch separates out elv_insert() from __elv_add_request() and uses
    elv_insert() when constructing ordered sequence and requeueing.
    elv_insert() inserts the given request at the specified position and
    does nothing else.

    Signed-off-by: Tejun Heo
    Acked-by: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tejun Heo
     

06 Feb, 2006

1 commit


24 Jan, 2006

2 commits

  • Jens has decided that allowing the default scheduler to be a module is
    a bug, and should not be allowed under kconfig. However, I find that
    scenario useful for debugging, and wish for the kernel to be able to
    handle this situation without OOPSing, if I enable such an option in
    the .config directly. This patch dynamically checks for the presence
    of the compiled-in default, and falls back to no-op, emitting a
    suitable error message, when the default is not available

    Tested for a range of boot options on 2.6.16-rc1-mm2.

    Signed-off-by: Nate Diller
    Signed-off-by: Jens Axboe

    Nate Diller
     
  • My previous default iosched patch did a poor job dealing with the
    'elevator=' boot-time option. The old behavior falls back to the
    compiled-in default if the requested one is not registered at boot
    time. This patch dynamically evaluates which default
    to use, and emits a suitable error message when the requested scheduler
    is not available. It also does the 'as' -> 'anticipatory' conversion
    before elevator registration, which along with a modified registration
    function, allows it to correctly indicate which default scheduler is
    in use.

    Tested for a range of boot options on 2.6.16-rc1-mm2.

    Signed-off-by: Nate Diller
    Signed-off-by: Jens Axboe

    Nate Diller
     

16 Jan, 2006

2 commits


13 Jan, 2006

1 commit

  • If ordered tag isn't supported, request ordering for barrier
    sequencing is performed by queue draining, which basically hangs the
    request queue until elv_completed_request() reports completion of all
    previous fs requests.

    The condition check in elv_completed_request() was only performed for
    fs requests. If a special request is queued between the last
    to-be-drained request and the barrier sequence, draining is never
    completed and the queue is stalled forever.

    This patch moves the end-of-draining condition check such that it's
    performed for all requests.

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

    Tejun Heo
     

09 Jan, 2006

1 commit


06 Jan, 2006

2 commits

  • Reimplement handling of barrier requests.

    * Flexible handling to deal with various capabilities of
    target devices.
    * Retry support for falling back.
    * Tagged queues which don't support ordered tag can do ordered.

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

    Tejun Heo
     
  • add @uptodate argument to end_that_request_last() and @error
    to rq_end_io_fn(). there's no generic way to pass error code
    to request completion function, making generic error handling
    of non-fs request difficult (rq->errors is driver-specific and
    each driver uses it differently). this patch adds @uptodate
    to end_that_request_last() and @error to rq_end_io_fn().

    for fs requests, this doesn't really matter, so just using the
    same uptodate argument used in the last call to
    end_that_request_first() should suffice. imho, this can also
    help the generic command-carrying request jens is working on.

    Signed-off-by: tejun heo
    Signed-Off-By: Jens Axboe

    Tejun Heo
     

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