1. 23 7月, 2010 2 次提交
  2. 08 7月, 2010 1 次提交
    • C
      NFSD: Fill in WCC data for REMOVE, RMDIR, MKNOD, and MKDIR · 43a9aa64
      Chuck Lever 提交于
      Some well-known NFSv3 clients drop their directory entry caches when
      they receive replies with no WCC data.  Without this data, they
      employ extra READ, LOOKUP, and GETATTR requests to ensure their
      directory entry caches are up to date, causing performance to suffer
      needlessly.
      
      In order to return WCC data, our server has to have both the pre-op
      and the post-op attribute data on hand when a reply is XDR encoded.
      The pre-op data is filled in when the incoming fh is locked, and the
      post-op data is filled in when the fh is unlocked.
      
      Unfortunately, for REMOVE, RMDIR, MKNOD, and MKDIR, the directory fh
      is not unlocked until well after the reply has been XDR encoded.  This
      means that encode_wcc_data() does not have wcc_data for the parent
      directory, so none is returned to the client after these operations
      complete.
      
      By unlocking the parent directory fh immediately after the internal
      operations for each NFS procedure is complete, the post-op data is
      filled in before XDR encoding starts, so it can be returned to the
      client properly.
      Signed-off-by: NChuck Lever <chuck.lever@oracle.com>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      43a9aa64
  3. 07 7月, 2010 1 次提交
  4. 25 6月, 2010 2 次提交
  5. 23 6月, 2010 4 次提交
  6. 01 6月, 2010 4 次提交
  7. 25 5月, 2010 1 次提交
  8. 22 5月, 2010 2 次提交
  9. 19 5月, 2010 2 次提交
    • J
      Revert "nfsd4: distinguish expired from stale stateids" · e4e83ea4
      J. Bruce Fields 提交于
      This reverts commit 78155ed7.
      
      We're depending here on the boot time that we use to generate the
      stateid being monotonic, but get_seconds() is not necessarily.
      
      We still depend at least on boot_time being different every time, but
      that is a safer bet.
      
      We have a few reports of errors that might be explained by this problem,
      though we haven't been able to confirm any of them.
      
      But the minor gain of distinguishing expired from stale errors seems not
      worth the risk.
      
      Conflicts:
      
      	fs/nfsd/nfs4state.c
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      e4e83ea4
    • P
      nfsd: safer initialization order in find_file() · 47cee541
      Pavel Emelyanov 提交于
      The alloc_init_file() first adds a file to the hash and then
      initializes its fi_inode, fi_id and fi_had_conflict.
      
      The uninitialized fi_inode could thus be erroneously checked by
      the find_file(), so move the hash insertion lower.
      
      The client_mutex should prevent this race in practice; however, we
      eventually hope to make less use of the client_mutex, so the ordering
      here is an accident waiting to happen.
      
      I didn't find whether the same can be true for two other fields,
      but the common sense tells me it's better to initialize an object
      before putting it into a global hash table :)
      Signed-off-by: NPavel Emelyanov <xemul@openvz.org>
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      47cee541
  10. 18 5月, 2010 1 次提交
  11. 15 5月, 2010 1 次提交
  12. 14 5月, 2010 1 次提交
  13. 13 5月, 2010 4 次提交
  14. 12 5月, 2010 5 次提交
  15. 08 5月, 2010 1 次提交
  16. 04 5月, 2010 1 次提交
  17. 03 5月, 2010 1 次提交
  18. 27 4月, 2010 1 次提交
    • N
      nfsd4: bug in read_buf · 2bc3c117
      Neil Brown 提交于
      When read_buf is called to move over to the next page in the pagelist
      of an NFSv4 request, it sets argp->end to essentially a random
      number, certainly not an address within the page which argp->p now
      points to.  So subsequent calls to READ_BUF will think there is much
      more than a page of spare space (the cast to u32 ensures an unsigned
      comparison) so we can expect to fall off the end of the second
      page.
      
      We never encountered thsi in testing because typically the only
      operations which use more than two pages are write-like operations,
      which have their own decoding logic.  Something like a getattr after a
      write may cross a page boundary, but it would be very unusual for it to
      cross another boundary after that.
      
      Cc: stable@kernel.org
      Signed-off-by: NJ. Bruce Fields <bfields@citi.umich.edu>
      2bc3c117
  19. 23 4月, 2010 1 次提交
  20. 22 4月, 2010 4 次提交