1. 11 3月, 2010 1 次提交
    • T
      NFS: Avoid a deadlock in nfs_release_page · bb6fbc45
      Trond Myklebust 提交于
      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:
       [<ffffffff8146155d>] io_schedule+0x4d/0x70
       [<ffffffff810d2be5>] sync_page+0x65/0xa0
       [<ffffffff81461b12>] __wait_on_bit_lock+0x52/0xb0
       [<ffffffff810d2b80>] ? sync_page+0x0/0xa0
       [<ffffffff810d2b64>] __lock_page+0x64/0x70
       [<ffffffff81070ce0>] ? wake_bit_function+0x0/0x40
       [<ffffffff810df1d4>] truncate_inode_pages_range+0x344/0x4a0
       [<ffffffff810df340>] truncate_inode_pages+0x10/0x20
       [<ffffffff8112cbfe>] generic_delete_inode+0x15e/0x190
       [<ffffffff8112cc8d>] generic_drop_inode+0x5d/0x80
       [<ffffffff8112bb88>] iput+0x78/0x80
       [<ffffffff811bc908>] nfs_dentry_iput+0x38/0x50
       [<ffffffff811285f4>] dentry_iput+0x84/0x110
       [<ffffffff811286ae>] d_kill+0x2e/0x60
       [<ffffffff8112912a>] dput+0x7a/0x170
       [<ffffffff8111e925>] path_put+0x15/0x40
       [<ffffffff811c3a44>] __put_nfs_open_context+0xa4/0xb0
       [<ffffffff811cb5d0>] ? nfs_free_request+0x0/0x50
       [<ffffffff811c3b0b>] put_nfs_open_context+0xb/0x10
       [<ffffffff811cb5f9>] nfs_free_request+0x29/0x50
       [<ffffffff81234b7e>] kref_put+0x8e/0xe0
       [<ffffffff811cb594>] nfs_release_request+0x14/0x20
       [<ffffffff811cf769>] nfs_find_and_lock_request+0x89/0xa0
       [<ffffffff811d1180>] nfs_wb_page+0x80/0x110
       [<ffffffff811c0770>] nfs_release_page+0x70/0x90
       [<ffffffff810d18ee>] try_to_release_page+0x5e/0x80
       [<ffffffff810e1178>] shrink_page_list+0x638/0x860
       [<ffffffff810e19de>] 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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org
      bb6fbc45
  2. 03 2月, 2010 1 次提交
    • T
      NFS: Fix an Oops when truncating a file · 9f557cd8
      Trond Myklebust 提交于
      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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      Cc: stable@kernel.org
      9f557cd8
  3. 12 3月, 2009 1 次提交
    • T
      NFS: Throttle page dirtying while we're flushing to disk · 72cb77f4
      Trond Myklebust 提交于
      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: NPeter Staubach <staubach@redhat.com>
      [modification by Trond to merge the two similar patches]
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      72cb77f4
  4. 30 1月, 2008 1 次提交
  5. 07 12月, 2007 1 次提交
  6. 20 7月, 2007 1 次提交
    • P
      mm: Remove slab destructors from kmem_cache_create(). · 20c2df83
      Paul Mundt 提交于
      Slab destructors were no longer supported after Christoph's
      c59def9f 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: NPaul Mundt <lethal@linux-sh.org>
      20c2df83
  7. 11 7月, 2007 7 次提交
  8. 24 5月, 2007 1 次提交
    • T
      NFS: Avoid a deadlock situation on write · 7fe7f848
      Trond Myklebust 提交于
      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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      7fe7f848
  9. 22 5月, 2007 1 次提交
    • A
      Detach sched.h from mm.h · e8edc6e0
      Alexey Dobriyan 提交于
      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: NAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e8edc6e0
  10. 10 5月, 2007 1 次提交
  11. 05 5月, 2007 1 次提交
  12. 02 5月, 2007 1 次提交
  13. 01 5月, 2007 6 次提交
  14. 08 12月, 2006 2 次提交
  15. 06 12月, 2006 3 次提交
  16. 27 9月, 2006 1 次提交
  17. 01 7月, 2006 2 次提交
  18. 28 6月, 2006 1 次提交
  19. 09 6月, 2006 2 次提交
    • D
      NFS: Split fs/nfs/inode.c · f7b422b1
      David Howells 提交于
      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: NDavid Howells <dhowells@redhat.com>
      f7b422b1
    • T
      NFS: Flesh out nfs_invalidate_page() · d2ccddf0
      Trond Myklebust 提交于
      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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      d2ccddf0
  20. 21 3月, 2006 2 次提交
    • T
      NFS: Fix a race with PG_private and nfs_release_page() · deb7d638
      Trond Myklebust 提交于
      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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      deb7d638
    • T
      NFS: Avoid races between writebacks and truncation · cd52ed35
      Trond Myklebust 提交于
      Currently, there is no serialisation between NFS asynchronous writebacks
      and truncation at the page level due to the fact that nfs_sync_inode()
      cannot lock the pages that it is about to write out.
      
      This means that it is possible to be flushing out data (and calling something
      like set_page_writeback()) while the page cache is busy evicting the page.
      Oops...
      
      Use the hooks provided in try_to_release_page() to ensure that dirty pages
      are always written back to storage before we evict them.
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      cd52ed35
  21. 23 6月, 2005 3 次提交