15 May, 2010

1 commit


11 Mar, 2010

1 commit

  • J.R. Okajima reports the following deadlock:

    INFO: task kswapd0:305 blocked for more than 120 seconds.
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    kswapd0 D 0000000000000001 0 305 2 0x00000000
    ffff88001f21d4f0 0000000000000046 ffff88001fdea680 ffff88001f21c000
    ffff88001f21dfd8 ffff88001f21c000 ffff88001f21dfd8 ffff88001f21dfd8
    ffff88001fdea040 0000000000014c00 0000000000000001 ffff88001fdea040
    Call Trace:
    [] io_schedule+0x4d/0x70
    [] sync_page+0x65/0xa0
    [] __wait_on_bit_lock+0x52/0xb0
    [] ? sync_page+0x0/0xa0
    [] __lock_page+0x64/0x70
    [] ? wake_bit_function+0x0/0x40
    [] truncate_inode_pages_range+0x344/0x4a0
    [] truncate_inode_pages+0x10/0x20
    [] generic_delete_inode+0x15e/0x190
    [] generic_drop_inode+0x5d/0x80
    [] iput+0x78/0x80
    [] nfs_dentry_iput+0x38/0x50
    [] dentry_iput+0x84/0x110
    [] d_kill+0x2e/0x60
    [] dput+0x7a/0x170
    [] path_put+0x15/0x40
    [] __put_nfs_open_context+0xa4/0xb0
    [] ? nfs_free_request+0x0/0x50
    [] put_nfs_open_context+0xb/0x10
    [] nfs_free_request+0x29/0x50
    [] kref_put+0x8e/0xe0
    [] nfs_release_request+0x14/0x20
    [] nfs_find_and_lock_request+0x89/0xa0
    [] nfs_wb_page+0x80/0x110
    [] nfs_release_page+0x70/0x90
    [] try_to_release_page+0x5e/0x80
    [] shrink_page_list+0x638/0x860
    [] shrink_zone+0x63e/0xc40

    We can fix this by making the call to put_nfs_open_context() happen when we
    actually remove the write request from the inode (which is done by the
    nfsiod thread in this case).

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org

    Trond Myklebust
     

03 Feb, 2010

1 commit

  • The VM/VFS does not allow mapping->a_ops->invalidatepage() to fail.
    Unfortunately, nfs_wb_page_cancel() may fail if a fatal signal occurs.
    Since the NFS code assumes that the page stays mapped for as long as the
    writeback is active, we can end up Oopsing (among other things).

    The only safe fix here is to convert nfs_wait_on_request(), so as to make
    it uninterruptible (as is already the case with wait_on_page_writeback()).

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org

    Trond Myklebust
     

12 Mar, 2009

1 commit

  • The following patch is a combination of a patch by myself and Peter
    Staubach.

    Trond: If we allow other processes to dirty pages while a process is doing
    a consistency sync to disk, we can end up never making progress.

    Peter: Attached is a patch which addresses a continuing problem with
    the NFS client generating out of order WRITE requests. While
    this is compliant with all of the current protocol
    specifications, there are servers in the market which can not
    handle out of order WRITE requests very well. Also, this may
    lead to sub-optimal block allocations in the underlying file
    system on the server. This may cause the read throughputs to
    be reduced when reading the file from the server.

    Peter: There has been a lot of work recently done to address out of
    order issues on a systemic level. However, the NFS client is
    still susceptible to the problem. Out of order WRITE
    requests can occur when pdflush is in the middle of writing
    out pages while the process dirtying the pages calls
    generic_file_buffered_write which calls
    generic_perform_write which calls
    balance_dirty_pages_rate_limited which ends up calling
    writeback_inodes which ends up calling back into the NFS
    client to writes out dirty pages for the same file that
    pdflush happens to be working with.

    Signed-off-by: Peter Staubach
    [modification by Trond to merge the two similar patches]
    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

01 Feb, 2008

1 commit

  • * 'task_killable' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc: (22 commits)
    Remove commented-out code copied from NFS
    NFS: Switch from intr mount option to TASK_KILLABLE
    Add wait_for_completion_killable
    Add wait_event_killable
    Add schedule_timeout_killable
    Use mutex_lock_killable in vfs_readdir
    Add mutex_lock_killable
    Use lock_page_killable
    Add lock_page_killable
    Add fatal_signal_pending
    Add TASK_WAKEKILL
    exit: Use task_is_*
    signal: Use task_is_*
    sched: Use task_contributes_to_load, TASK_ALL and TASK_NORMAL
    ptrace: Use task_is_*
    power: Use task_is_*
    wait: Use TASK_NORMAL
    proc/base.c: Use task_is_*
    proc/array.c: Use TASK_REPORT
    perfmon: Use task_is_*
    ...

    Fixed up conflicts in NFS/sunrpc manually..

    Linus Torvalds
     

30 Jan, 2008

1 commit


07 Dec, 2007

1 commit


20 Jul, 2007

1 commit

  • Slab destructors were no longer supported after Christoph's
    c59def9f222d44bb7e2f0a559f2906191a0862d7 change. They've been
    BUGs for both slab and slub, and slob never supported them
    either.

    This rips out support for the dtor pointer from kmem_cache_create()
    completely and fixes up every single callsite in the kernel (there were
    about 224, not including the slab allocator definitions themselves,
    or the documentation references).

    Signed-off-by: Paul Mundt

    Paul Mundt
     

11 Jul, 2007

7 commits


24 May, 2007

1 commit

  • When processes are allowed to attempt to lock a non-contiguous range of nfs
    write requests, it is possible for generic_writepages to 'wrap round' the
    address space, and call writepage() on a request that is already locked by
    the same process.

    We avoid the deadlock by checking if the page index is contiguous with the
    list of nfs write requests that is already held in our
    nfs_pageio_descriptor prior to attempting to lock a new request.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

22 May, 2007

1 commit

  • First thing mm.h does is including sched.h solely for can_do_mlock() inline
    function which has "current" dereference inside. By dealing with can_do_mlock()
    mm.h can be detached from sched.h which is good. See below, why.

    This patch
    a) removes unconditional inclusion of sched.h from mm.h
    b) makes can_do_mlock() normal function in mm/mlock.c
    c) exports can_do_mlock() to not break compilation
    d) adds sched.h inclusions back to files that were getting it indirectly.
    e) adds less bloated headers to some files (asm/signal.h, jiffies.h) that were
    getting them indirectly

    Net result is:
    a) mm.h users would get less code to open, read, preprocess, parse, ... if
    they don't need sched.h
    b) sched.h stops being dependency for significant number of files:
    on x86_64 allmodconfig touching sched.h results in recompile of 4083 files,
    after patch it's only 3744 (-8.3%).

    Cross-compile tested on

    all arm defconfigs, all mips defconfigs, all powerpc defconfigs,
    alpha alpha-up
    arm
    i386 i386-up i386-defconfig i386-allnoconfig
    ia64 ia64-up
    m68k
    mips
    parisc parisc-up
    powerpc powerpc-up
    s390 s390-up
    sparc sparc-up
    sparc64 sparc64-up
    um-x86_64
    x86_64 x86_64-up x86_64-defconfig x86_64-allnoconfig

    as well as my two usual configs.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

10 May, 2007

1 commit


05 May, 2007

1 commit


02 May, 2007

1 commit


01 May, 2007

6 commits


08 Dec, 2006

3 commits


06 Dec, 2006

3 commits


27 Sep, 2006

1 commit

  • * Rougly half of callers already do it by not checking return value
    * Code in drivers/acpi/osl.c does the following to be sure:

    (void)kmem_cache_destroy(cache);

    * Those who check it printk something, however, slab_error already printed
    the name of failed cache.
    * XFS BUGs on failed kmem_cache_destroy which is not the decision
    low-level filesystem driver should make. Converted to ignore.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

01 Jul, 2006

3 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial:
    Remove obsolete #include
    remove obsolete swsusp_encrypt
    arch/arm26/Kconfig typos
    Documentation/IPMI typos
    Kconfig: Typos in net/sched/Kconfig
    v9fs: do not include linux/version.h
    Documentation/DocBook/mtdnand.tmpl: typo fixes
    typo fixes: specfic -> specific
    typo fixes in Documentation/networking/pktgen.txt
    typo fixes: occuring -> occurring
    typo fixes: infomation -> information
    typo fixes: disadvantadge -> disadvantage
    typo fixes: aquire -> acquire
    typo fixes: mecanism -> mechanism
    typo fixes: bandwith -> bandwidth
    fix a typo in the RTC_CLASS help text
    smb is no longer maintained

    Manually merged trivial conflict in arch/um/kernel/vmlinux.lds.S

    Linus Torvalds
     
  • This makes nr_dirty a per zone counter. Looping over all processors is
    avoided during writeback state determination.

    The counter aggregation for nr_dirty had to be undone in the NFS layer since
    we summed up the page counts from multiple zones. Someone more familiar with
    NFS should probably review what I have done.

    [akpm@osdl.org: bugfix]
    Signed-off-by: Christoph Lameter
    Cc: Trond Myklebust
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Signed-off-by: Jörn Engel
    Signed-off-by: Adrian Bunk

    Jörn Engel
     

28 Jun, 2006

1 commit

  • Builds on ARM report link problems with common configurations like
    statically linked NFS (for nfsroot). The symptom is that __init
    section code references __exit section code; that won't work since
    the exit sections are discarded (since they can never be called).

    The best fix for these particular cases would be an "__init_or_exit"
    section annotation.

    Signed-off-by: David Brownell
    Acked-by: Trond Myklebust
    Signed-off-by: Linus Torvalds

    David Brownell
     

09 Jun, 2006

2 commits

  • As fs/nfs/inode.c is rather large, heterogenous and unwieldy, the attached
    patch splits it up into a number of files:

    (*) fs/nfs/inode.c

    Strictly inode specific functions.

    (*) fs/nfs/super.c

    Superblock management functions for NFS and NFS4, normal access, clones
    and referrals. The NFS4 superblock functions _could_ move out into a
    separate conditionally compiled file, but it's probably not worth it as
    there're so many common bits.

    (*) fs/nfs/namespace.c

    Some namespace-specific functions have been moved here.

    (*) fs/nfs/nfs4namespace.c

    NFS4-specific namespace functions (this could be merged into the previous
    file). This file is conditionally compiled.

    (*) fs/nfs/internal.h

    Inter-file declarations, plus a few simple utility functions moved from
    fs/nfs/inode.c.

    Additionally, all the in-.c-file externs have been moved here, and those
    files they were moved from now includes this file.

    For the most part, the functions have not been changed, only some multiplexor
    functions have changed significantly.

    I've also:

    (*) Added some extra banner comments above some functions.

    (*) Rearranged the function order within the files to be more logical and
    better grouped (IMO), though someone may prefer a different order.

    (*) Reduced the number of #ifdefs in .c files.

    (*) Added missing __init and __exit directives.

    Signed-Off-By: David Howells

    David Howells
     
  • In the case of a call to truncate_inode_pages(), we should really try to
    cancel any pending writes on the page.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

21 Mar, 2006

1 commit

  • We don't need to set PG_private for readahead pages, since they never get
    unlocked while I/O is in progress. However there is a small race in
    nfs_readpage_release() whereby the page may be unlocked, and have
    PG_private set.

    Fix is to have PG_private set only for the case of writes...

    Also fix a bug in nfs_clear_page_writeback(): Don't attempt to clear the
    radix_tree tag if we've already deleted the radix tree entry.

    Signed-off-by: Trond Myklebust

    Trond Myklebust