1. 03 8月, 2012 1 次提交
  2. 01 8月, 2012 2 次提交
  3. 31 7月, 2012 1 次提交
  4. 10 5月, 2012 2 次提交
  5. 28 4月, 2012 6 次提交
  6. 11 3月, 2012 2 次提交
  7. 01 2月, 2012 1 次提交
  8. 01 11月, 2011 1 次提交
  9. 31 10月, 2011 1 次提交
  10. 20 7月, 2011 1 次提交
  11. 15 7月, 2011 1 次提交
  12. 13 7月, 2011 2 次提交
  13. 21 6月, 2011 1 次提交
  14. 30 5月, 2011 3 次提交
  15. 27 3月, 2011 1 次提交
    • T
      NFS: Fix a hang in the writeback path · 4d65c520
      Trond Myklebust 提交于
      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: NTrond Myklebust <Trond.Myklebust@netapp.com>
      4d65c520
  16. 24 3月, 2011 1 次提交
    • F
      NFSv4.1: add generic layer hooks for pnfs COMMIT · a861a1e1
      Fred Isaman 提交于
      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: NFred Isaman <iisaman@netapp.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      a861a1e1
  17. 22 3月, 2011 1 次提交
  18. 12 3月, 2011 4 次提交
  19. 22 12月, 2010 1 次提交
  20. 08 12月, 2010 1 次提交
    • T
      nfs: remove extraneous and problematic calls to nfs_clear_request · 2df485a7
      Trond Myklebust 提交于
      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: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
      2df485a7
  21. 28 10月, 2010 1 次提交
  22. 31 7月, 2010 1 次提交
  23. 15 5月, 2010 1 次提交
  24. 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
  25. 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
  26. 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