1. 16 May, 2008 1 commit
  2. 19 Apr, 2008 2 commits
  3. 19 Mar, 2008 2 commits
    • Fred Isaman's avatar
    • Fred Isaman's avatar
      nfs: don't ignore return value from nfs_pageio_add_request · f8512ad0
      Fred Isaman authored
      
      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: default avatarFred Isaman <iisaman@citi.umich.edu>
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      f8512ad0
  4. 29 Feb, 2008 1 commit
  5. 26 Feb, 2008 2 commits
    • Trond Myklebust's avatar
      NFS: Ensure that the asynchronous RPC calls complete on nfsiod. · 101070ca
      Trond Myklebust authored
      
      We want to ensure that rpc_call_ops that involve mntput() are run on nfsiod
      rather than on rpciod, so that they don't deadlock when the resulting
      umount calls rpc_shutdown_client(). Hence we specify that read, write and
      commit calls must complete on nfsiod.
      Ditto for NFSv4 open, lock, locku and close asynchronous calls.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      101070ca
    • Trond Myklebust's avatar
      NFS: Fix a deadlock with lazy umount · 383ba719
      Trond Myklebust authored
      
      We can't allow rpc callback functions like task->tk_ops->rpc_call_prepare()
      and task->tk_ops->rpc_call_done() to call mntput() in any way, since
      that will cause a deadlock when the call to rpc_shutdown_client() attempts
      to wait on 'task' to complete.
      
      We can avoid the above deadlock by moving calls to mntput to
      task->tk_ops->rpc_release() callback, since at that time the task will be
      marked as completed, and so rpc_shutdown_client won't attempt to wait on
      it.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      383ba719
  6. 05 Feb, 2008 1 commit
    • Christoph Lameter's avatar
      Pagecache zeroing: zero_user_segment, zero_user_segments and zero_user · eebd2aa3
      Christoph Lameter authored
      
      Simplify page cache zeroing of segments of pages through 3 functions
      
      zero_user_segments(page, start1, end1, start2, end2)
      
              Zeros two segments of the page. It takes the position where to
              start and end the zeroing which avoids length calculations and
      	makes code clearer.
      
      zero_user_segment(page, start, end)
      
              Same for a single segment.
      
      zero_user(page, start, length)
      
              Length variant for the case where we know the length.
      
      We remove the zero_user_page macro. Issues:
      
      1. Its a macro. Inline functions are preferable.
      
      2. The KM_USER0 macro is only defined for HIGHMEM.
      
         Having to treat this special case everywhere makes the
         code needlessly complex. The parameter for zeroing is always
         KM_USER0 except in one single case that we open code.
      
      Avoiding KM_USER0 makes a lot of code not having to be dealing
      with the special casing for HIGHMEM anymore. Dealing with
      kmap is only necessary for HIGHMEM configurations. In those
      configurations we use KM_USER0 like we do for a series of other
      functions defined in highmem.h.
      
      Since KM_USER0 is depends on HIGHMEM the existing zero_user_page
      function could not be a macro. zero_user_* functions introduced
      here can be be inline because that constant is not used when these
      functions are called.
      
      Also extract the flushing of the caches to be outside of the kmap.
      
      [akpm@linux-foundation.org: fix nfs and ntfs build]
      [akpm@linux-foundation.org: fix ntfs build some more]
      Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
      Cc: Steven French <sfrench@us.ibm.com>
      Cc: Michael Halcrow <mhalcrow@us.ibm.com>
      Cc: <linux-ext4@vger.kernel.org>
      Cc: Steven Whitehouse <swhiteho@redhat.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Cc: "J. Bruce Fields" <bfields@fieldses.org>
      Cc: Anton Altaparmakov <aia21@cantab.net>
      Cc: Mark Fasheh <mark.fasheh@oracle.com>
      Cc: David Chinner <dgc@sgi.com>
      Cc: Michael Halcrow <mhalcrow@us.ibm.com>
      Cc: Steven French <sfrench@us.ibm.com>
      Cc: Steven Whitehouse <swhiteho@redhat.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eebd2aa3
  7. 30 Jan, 2008 5 commits
  8. 06 Dec, 2007 1 commit
  9. 09 Oct, 2007 2 commits
  10. 20 Jul, 2007 1 commit
    • Paul Mundt's avatar
      mm: Remove slab destructors from kmem_cache_create(). · 20c2df83
      Paul Mundt authored
      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: default avatarPaul Mundt <lethal@linux-sh.org>
      20c2df83
  11. 11 Jul, 2007 2 commits
  12. 14 May, 2007 1 commit
  13. 01 May, 2007 4 commits
  14. 03 Feb, 2007 2 commits
  15. 07 Dec, 2006 2 commits
  16. 06 Dec, 2006 5 commits
  17. 27 Sep, 2006 1 commit
  18. 23 Sep, 2006 2 commits
    • Trond Myklebust's avatar
      NFS: Make read() return an ESTALE if the file has been deleted · 5f004cf2
      Trond Myklebust authored
      
      Currently, a read() request will return EIO even if the file has been
      deleted on the server, simply because that is what the VM will return
      if the call to readpage() fails to update the page.
      
      Ensure that readpage() marks the inode as stale if it receives an ESTALE.
      Then return that error to userland.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      5f004cf2
    • David Howells's avatar
      NFS: Share NFS superblocks per-protocol per-server per-FSID · 54ceac45
      David Howells authored
      The attached patch makes NFS share superblocks between mounts from the same
      server and FSID over the same protocol.
      
      It does this by creating each superblock with a false root and returning the
      real root dentry in the vfsmount presented by get_sb(). The root dentry set
      starts off as an anonymous dentry if we don't already have the dentry for its
      inode, otherwise it simply returns the dentry we already have.
      
      We may thus end up with several trees of dentries in the superblock, and if at
      some later point one of anonymous tree roots is discovered by normal filesystem
      activity to be located in another tree within the superblock, the anonymous
      root is named and materialises attached to the second tree at the appropriate
      point.
      
      Why do it this way? Why not pass an extra argument to the mount() syscall to
      indicate the subpath and then pathwalk from the server root to the desired
      directory? You can't guarantee this will work for two reasons:
      
       (1) The ro...
      54ceac45
  19. 19 Sep, 2006 1 commit
  20. 08 Sep, 2006 1 commit
  21. 24 Aug, 2006 1 commit
    • Trond Myklebust's avatar
      NFS: Fix issue with EIO on NFS read · 79558f36
      Trond Myklebust authored
      
      The problem is that we may be caching writes that would extend the file and
      create a hole in the region that we are reading. In this case, we need to
      detect the eof from the server, ensure that we zero out the pages that
      are part of the hole and mark them as up to date.
      Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
      (cherry picked from 856b603b01b99146918c093969b6cb1b1b0f1c01 commit)
      79558f36