07 Nov, 2011

1 commit

  • * 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)
    Revert "tracing: Include module.h in define_trace.h"
    irq: don't put module.h into irq.h for tracking irqgen modules.
    bluetooth: macroize two small inlines to avoid module.h
    ip_vs.h: fix implicit use of module_get/module_put from module.h
    nf_conntrack.h: fix up fallout from implicit moduleparam.h presence
    include: replace linux/module.h with "struct module" wherever possible
    include: convert various register fcns to macros to avoid include chaining
    crypto.h: remove unused crypto_tfm_alg_modname() inline
    uwb.h: fix implicit use of asm/page.h for PAGE_SIZE
    pm_runtime.h: explicitly requires notifier.h
    linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h
    miscdevice.h: fix up implicit use of lists and types
    stop_machine.h: fix implicit use of smp.h for smp_processor_id
    of: fix implicit use of errno.h in include/linux/of.h
    of_platform.h: delete needless include
    acpi: remove module.h include from platform/aclinux.h
    miscdevice.h: delete unnecessary inclusion of module.h
    device_cgroup.h: delete needless include
    net: sch_generic remove redundant use of
    net: inet_timewait_sock doesnt need
    ...

    Fix up trivial conflicts (other header files, and removal of the ab3550 mfd driver) in
    - drivers/media/dvb/frontends/dibx000_common.c
    - drivers/media/video/{mt9m111.c,ov6650.c}
    - drivers/mfd/ab3550-core.c
    - include/linux/dmaengine.h

    Linus Torvalds
     

01 Nov, 2011

1 commit


31 Oct, 2011

1 commit


26 Jul, 2011

1 commit


20 Jul, 2011

1 commit


15 Jul, 2011

1 commit


13 Jul, 2011

2 commits


21 Jun, 2011

1 commit


30 May, 2011

3 commits


27 Mar, 2011

1 commit

  • Now that the inode scalability patches have been merged, it is no longer
    safe to call igrab() under the inode->i_lock.
    Now that we no longer call nfs_clear_request() until the nfs_page is
    being freed, we know that we are always holding a reference to the
    nfs_open_context, which again holds a reference to the path, and so
    the inode cannot be freed until the last nfs_page has been removed
    from the radix tree and freed.

    We can therefore skip the igrab()/iput() altogether.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

24 Mar, 2011

1 commit

  • We create three major hooks for the pnfs code.

    pnfs_mark_request_commit() is called during writeback_done from
    nfs_mark_request_commit, which gives the driver an opportunity to
    claim it wants control over commiting a particular req.

    pnfs_choose_commit_list() is called from nfs_scan_list
    to choose which list a given req should be added to, based on
    where we intend to send it for COMMIT. It is up to the driver
    to have preallocated list headers for each destination it may need.

    pnfs_commit_list() is how the driver actually takes control, it is
    used instead of nfs_commit_list().

    In order to pass information between the above functions, we create
    a union in nfs_page to hold a lseg (which is possible because the req is
    not on any list while in transition), and add some flags to indicate
    if we need to use the pnfs code.

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

    Fred Isaman
     

22 Mar, 2011

1 commit


12 Mar, 2011

4 commits

  • Now that we have access to the pointer, clear it immediately after
    the put, instead of in caller.

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

    Fred Isaman
     
  • This will make it possible to clear the lseg pointer in the same
    function as it is put, instead of in the caller nfs_pageio_doio().

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

    Fred Isaman
     
  • Move the pnfs_update_layout call location to nfs_pageio_do_add_request().
    Grab the lseg sent in the doio function to nfs_read_rpcsetup and attach
    it to each nfs_read_data so it can be sent to the layout driver.

    Signed-off-by: Andy Adamson
    Signed-off-by: Andy Adamson
    Signed-off-by: Dean Hildebrand
    Signed-off-by: Fred Isaman
    Signed-off-by: Fred Isaman
    Signed-off-by: Benny Halevy
    Signed-off-by: Boaz Harrosh
    Signed-off-by: Oleg Drokin
    Signed-off-by: Tao Guo
    Signed-off-by: Trond Myklebust

    Fred Isaman
     
  • Add a pg_test layout driver hook which is used to avoid coelescing I/O across
    layout stripes.

    Signed-off-by: Andy Adamson
    Signed-off-by: Andy Adamson
    Signed-off-by: Dean Hildebrand
    Signed-off-by: Fred Isaman
    Signed-off-by: Fred Isaman
    Signed-off-by: Benny Halevy
    Signed-off-by: Boaz Harrosh
    Signed-off-by: Oleg Drokin
    Signed-off-by: Tao Guo
    Signed-off-by: Trond Myklebust

    Fred Isaman
     

22 Dec, 2010

1 commit

  • Take advantage of kmem_cache_zalloc() in nfs_page_alloc(). Save a call to
    memset() and a few bytes.

    Before:
    [jj@dragon linux-2.6]$ size fs/nfs/pagelist.o
    text data bss dec hex filename
    1765 0 8 1773 6ed fs/nfs/pagelist.o
    After:
    [jj@dragon linux-2.6]$ size fs/nfs/pagelist.o
    text data bss dec hex filename
    1749 0 8 1757 6dd fs/nfs/pagelist.o

    Signed-off-by: Jesper Juhl
    Signed-off-by: Trond Myklebust

    Jesper Juhl
     

08 Dec, 2010

1 commit

  • When a nfs_page is freed, nfs_free_request is called which also calls
    nfs_clear_request to clean out the lock and open contexts and free the
    pagecache page.

    However, a couple of places in the nfs code call nfs_clear_request
    themselves. What happens here if the refcount on the request is still high?
    We'll be releasing contexts and freeing pointers while the request is
    possibly still in use.

    Remove those bare calls to nfs_clear_context. That should only be done when
    the request is being freed.

    Note that when doing this, we need to watch out for tests of req->wb_page.
    Previously, nfs_set_page_tag_locked() and nfs_clear_page_tag_locked()
    would check the value of req->wb_page to figure out if the page is mapped
    into the nfsi->nfs_page_tree. We now indicate the page is mapped using
    the new bit PG_MAPPED in req->wb_flags .

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

    Trond Myklebust
     

28 Oct, 2010

1 commit


31 Jul, 2010

1 commit


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