01 Feb, 2008

1 commit


28 Jan, 2008

1 commit

  • These DMA drain buffer implementations in drivers are pretty horrible
    to do in terms of manipulating the scatterlist. Plus they're being
    done at least in drivers/ide and drivers/ata, so we now have code
    duplication.

    The one use case for this, as I understand it is AHCI controllers doing
    PIO mode to mmc devices but translating this to DMA at the controller
    level.

    So, what about adding a callback to the block layer that permits the
    adding of the drain buffer for the problem devices. The idea is that
    you'd do this in slave_configure after you find one of these devices.

    The beauty of doing it in the block layer is that it quietly adds the
    drain buffer to the end of the sg list, so it automatically gets mapped
    (and unmapped) without anything unusual having to be done to the
    scatterlist in driver/scsi or drivers/ata and without any alteration to
    the transfer length.

    Signed-off-by: James Bottomley
    Signed-off-by: Jens Axboe

    James Bottomley
     

25 Jan, 2008

3 commits


18 Dec, 2007

1 commit


20 Oct, 2007

1 commit


16 Oct, 2007

2 commits


13 Oct, 2007

1 commit


24 Jul, 2007

1 commit

  • Some of the code has been gradually transitioned to using the proper
    struct request_queue, but there's lots left. So do a full sweet of
    the kernel and get rid of this typedef and replace its uses with
    the proper type.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

18 Jul, 2007

1 commit

  • kmalloc_node() and kmem_cache_alloc_node() were not available in a zeroing
    variant in the past. But with __GFP_ZERO it is possible now to do zeroing
    while allocating.

    Use __GFP_ZERO to remove the explicit clearing of memory via memset whereever
    we can.

    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

10 Jul, 2007

1 commit


30 Apr, 2007

1 commit


27 Mar, 2007

1 commit

  • Booting 2.6.21-rc3-g45592145 I noticed the following on one of my
    machines in the bootlog:

    io scheduler noop registeredTime: jiffies clocksource has been installed.

    io scheduler deadline registered (default)

    Looking at block/elevator.c, it appears that elv_register() uses two
    consecutive printks in a non-atomic way, leading to the above glitch. The
    attached trivial patch fixes this issue, by using a single printk.

    Signed-off-by: Thibaut VARENE
    Signed-off-by: Jens Axboe

    Thibaut VARENE
     

12 Feb, 2007

2 commits


24 Jan, 2007

1 commit

  • A flag was recently added to the elevator code to avoid
    performing an unplug when reuests are being re-queued.
    The goal of this flag was to avoid a deep recursion that
    can occur when re-queueing requests after a SCSI device/host
    reset. See http://lkml.org/lkml/2006/5/17/254

    However, that fix added the flag near the bottom of a case
    statement, where an earlier break (in an if statement) could
    transport one out of the case, without setting the flag.
    This patch sets the flag earlier in the case statement.

    I re-discovered the deep recursion recently during testing;
    I was told that it was a known problem, and the fix to it was
    in the kernel I was testing. Indeed it was ... but it didn't
    fix the bug. With the patch below, I no longer see the bug.

    Signed-off by: Linas Vepstas
    Signed-off-by: Jens Axboe
    Cc: Chris Wright
    Signed-off-by: Linus Torvalds

    Linas Vepstas
     

22 Dec, 2006

1 commit

  • The recent io scheduler allow_merge commit left the block layer with
    no merging, oops. This patch fixes that up.

    That means the CFQ change needs to be verified again, it might not fix
    the original bug now. But that's a seperate thing, I'll double check
    that tomorrow.

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

    Jens Axboe
     

20 Dec, 2006

1 commit

  • Currently we allow any merge, even if the io originates from different
    processes. This can cause really bad starvation and unfairness, if those
    ios happen to be synchronous (reads or direct writes).

    So add a allow_merge hook to the io scheduler ops, so an io scheduler can
    help decide whether a bio/process combination may be merged with an
    existing request.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

01 Dec, 2006

1 commit


12 Oct, 2006

2 commits


01 Oct, 2006

7 commits


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

1 commit