20 Mar, 2008

5 commits

  • Currently, the NFS readdir decoders have a workaround for buggy servers
    that send an empty readdir response with the EOF bit unset. If the
    server sends a malformed response in some cases, this workaround kicks
    in and just returns an empty response rather than returning a proper
    error to the caller.

    This patch does 3 things:

    1) have malformed responses with no entries return error (-EIO)

    2) preserve existing workaround for servers that send empty
    responses with the EOF marker unset.

    3) Add some comments to clarify the logic in nfs_xdr_readdirres().

    Signed-off-by: Jeff Layton
    Signed-off-by: Trond Myklebust

    Jeff Layton
     
  • Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Fred Isaman
     
  • Both flush functions have the same error handling routine. Pull
    it out as a function.

    Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Fred
     
  • Trond Myklebust
     
  • Ignoring the return value from nfs_pageio_add_request can cause deadlocks.

    In read path:
    call nfs_pageio_add_request from readpage_async_filler
    assume at this point that there are requests already in desc, that
    can't be merged with the current request.
    so nfs_pageio_doio is fired up to clear out desc.
    assume something goes wrong in setting up the io, so desc->pg_error is set.
    This causes nfs_pageio_add_request to return 0, *WITHOUT* adding the original
    request.
    BUT, since return code is ignored, readpage_async_filler assumes it has
    been added, and does nothing further, leaving page locked.
    do_generic_mapping_read will eventually call lock_page, resulting in deadlock

    In write path:
    page is marked dirty by generic_perform_write
    nfs_writepages is called
    call nfs_pageio_add_request from nfs_page_async_flush
    assume at this point that there are requests already in desc, that
    can't be merged with the current request.
    so nfs_pageio_doio is fired up to clear out desc.
    assume something goes wrong in setting up the io, so desc->pg_error is set.
    This causes nfs_page_async_flush to return 0, *WITHOUT* adding the original
    request, yet marking the request as locked (PG_BUSY) and in writeback,
    clearing dirty marks.
    The next time a write is done to the page, deadlock will result as
    nfs_write_end calls nfs_update_request

    Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Fred Isaman
     

19 Mar, 2008

15 commits

  • * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx:
    async_tx: avoid the async xor_zero_sum path when src_cnt > device->max_xor
    fsldma: Fix the DMA halt when using DMA_INTERRUPT async_tx transfer.

    Linus Torvalds
     
  • This reverts commit 2c81ce4c9c37b910210f2640c28e98a0c398dc26.

    It caused several new troubles (eg suspend slowdown bisected down to
    this patch by Pavel Machek), so just revert it for now.

    Signed-off-by: Alexey Starikovskiy
    Cc: Pavel Machek
    Signed-off-by: Linus Torvalds

    Alexey Starikovskiy
     
  • …linux-2.6-sched-devel

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mingo/linux-2.6-sched-devel:
    sched: tune multi-core idle balancing
    sched: retune wake granularity
    sched: wakeup-buddy tasks are cache-hot
    sched: improve affine wakeups
    sched, net: socket wakeups are sync
    sched: clean up wakeup balancing, code flow
    sched: clean up wakeup balancing, rename variables
    sched: clean up wakeup balancing, move wake_affine()

    Linus Torvalds
     
  • Now that we handle all the special commands using REQ_TYPE_ATA_TASKFILE
    rather than using the old REQ_TYPE_ATA_CMD model, we need to also
    emulate the lack of full taskfile data that comes with the old command
    model (ie when commands are generated with the HDIO_DRIVE_CMD ioctl
    rather than using the HDIO_DRIVE_TASK[FILE] ioctls).

    In particular, this means that we should handle command completion the
    more relaxed way that the old drive_cmd_intr() code did. It allows
    commands to finish early even if they don't use up all the data that we
    thought we had for them.

    This fixes a regression seen by Anders Eriksson where some SMART
    commands sent by smartd would cause a boot-time system hang on his
    machine because the IDE command handling code didn't realize that the
    command had completed.

    Tested-by: Anders Eriksson
    Cc: Jens Axboe
    Cc: Ingo Molnar
    Acked-by: Bartlomiej Zolnierkiewicz
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * 'slab-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/christoph/vm:
    slub page alloc fallback: Enable interrupts for GFP_WAIT.

    Linus Torvalds
     
  • WAKE_IDLE is too agressive on multi-core CPUs with the new
    wake-affine code, keep it on for SMT/HT balancing alone
    (where there's no cache affinity at all between logical CPUs).

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • reduce wake-up granularity for better interactivity.

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • Wakeup-buddy tasks are cache-hot - this makes it a bit harder
    for the load-balancer to tear them apart. (but it's still possible,
    if the load is sufficiently assymetric)

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • improve affine wakeups. Maintain the 'overlap' metric based on CFS's
    sum_exec_runtime - which means the amount of time a task executes
    after it wakes up some other task.

    Use the 'overlap' for the wakeup decisions: if the 'overlap' is short,
    it means there's strong workload coupling between this task and the
    woken up task. If the 'overlap' is large then the workload is decoupled
    and the scheduler will move them to separate CPUs more easily.

    ( Also slightly move the preempt_check within try_to_wake_up() - this has
    no effect on functionality but allows 'early wakeups' (for still-on-rq
    tasks) to be correctly accounted as well.)

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • 'sync' wakeups are a hint towards the scheduler that (certain)
    networking related wakeups likely create coupling between tasks.

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • Clean up the code flow. No code changed:

    kernel/sched.o:

    text data bss dec hex filename
    42521 2858 232 45611 b22b sched.o.before
    42521 2858 232 45611 b22b sched.o.after

    md5:
    09b31c44e9aff8666f72773dc433e2df sched.o.before.asm
    09b31c44e9aff8666f72773dc433e2df sched.o.after.asm

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • rename 'cpu' to 'prev_cpu'. No code changed:

    kernel/sched.o:

    text data bss dec hex filename
    42521 2858 232 45611 b22b sched.o.before
    42521 2858 232 45611 b22b sched.o.after

    md5:
    09b31c44e9aff8666f72773dc433e2df sched.o.before.asm
    09b31c44e9aff8666f72773dc433e2df sched.o.after.asm

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • split out the affine-wakeup bits.

    No code changed:

    kernel/sched.o:

    text data bss dec hex filename
    42521 2858 232 45611 b22b sched.o.before
    42521 2858 232 45611 b22b sched.o.after

    md5:
    9d76738f1272aa82f0b7affd2f51df6b sched.o.before.asm
    09b31c44e9aff8666f72773dc433e2df sched.o.after.asm

    (the md5's changed because stack slots changed and some registers
    get scheduled by gcc in a different order - but otherwise the before
    and after assembly is instruction for instruction equivalent.)

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • If the channel cannot perform the operation in one call to
    ->device_prep_dma_zero_sum, then fallback to the xor+page_is_zero path.
    This only affects users with arrays larger than 16 devices on iop13xx or
    32 devices on iop3xx.

    Cc:
    Cc: Neil Brown
    Signed-off-by: Dan Williams

    Dan Williams
     
  • The DMA_INTERRUPT async_tx is a NULL transfer, thus the BCR(count register)
    is 0. When the transfer started with a byte count of zero, the DMA
    controller will triger a PE(programming error) event and halt, not a normal
    interrupt. I add special codes for PE event and DMA_INTERRUPT
    async_tx testing.

    Signed-off-by: Zhang Wei
    Signed-off-by: Andrew Morton
    Signed-off-by: Dan Williams

    Zhang Wei
     

18 Mar, 2008

20 commits