1. 09 12月, 2015 2 次提交
  2. 26 11月, 2015 2 次提交
  3. 05 9月, 2015 2 次提交
  4. 28 8月, 2015 1 次提交
  5. 26 8月, 2015 1 次提交
  6. 18 8月, 2015 2 次提交
  7. 23 7月, 2015 3 次提交
  8. 01 7月, 2015 1 次提交
  9. 02 6月, 2015 1 次提交
    • N
      NFS: report more appropriate block size for directories. · 7ef5ca4f
      NeilBrown 提交于
      In glibc 2.21 (and several previous), a call to opendir() will
      result in a 32K (BUFSIZ*4) buffer being allocated and passed to
      getdents.
      
      However a call to fdopendir() results in an 'fstat' request to
      determine block size and a matching buffer allocated for subsequent
      use with getdents.  This will typically be 1M.
      
      The first getdents call on an NFS directory will always use
      READDIR_PLUS (or NFSv4 equivalent) if available.  Subsequent getdents
      calls only use this more expensive version if some 'stat' requests are
      made between the getdents calls.
      
      For this reason it is good to keep at least that first getdents call
      relatively short.  When fdopendir() and readdir() is used on a large
      directory, it takes approximately 32 times as long to complete as
      using "opendir".  Current versions of 'find' use fdopendir() and
      demonstrate this slowness.
      
      'stat' on a directory currently returns the 'wsize'.  This number has
      no meaning on directories.
      Actual READDIR requests are limited to ->dtsize, which itself is
      capped at 4 pages, coincidently the same as BUFSIZ*4.
      So this is a meaningful number to use as the blocksize on directories,
      and has the effect of making 'find' on large directories go a lot
      faster.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      7ef5ca4f
  10. 24 4月, 2015 3 次提交
    • F
      nfs: Remove unneeded casts in nfs · c456aacf
      Firo Yang 提交于
      Don't unnecessarily cast allocation return value in
      fs/nfs/inode.c::nfs_alloc_inode().
      Signed-off-by: NFiro Yang <firogm@gmail.com>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      c456aacf
    • A
      nfs: Fetch MOUNTED_ON_FILEID when updating an inode · ea96d1ec
      Anna Schumaker 提交于
      2ef47eb1 (NFS: Fix use of nfs_attr_use_mounted_on_fileid()) was a good
      start to fixing a circular directory structure warning for NFS v4
      "junctioned" mountpoints.  Unfortunately, further testing continued to
      generate this error.
      
      My server is configured like this:
      
      anna@nfsd ~ % df
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vda1       9.1G  2.0G  6.5G  24% /
      /dev/vdc1      1014M   33M  982M   4% /exports
      /dev/vdc2      1014M   33M  982M   4% /exports/vol1
      /dev/vdc3      1014M   33M  982M   4% /exports/vol1/vol2
      
      anna@nfsd ~ % cat /etc/exports
      /exports/          *(rw,async,no_subtree_check,no_root_squash)
      /exports/vol1/     *(rw,async,no_subtree_check,no_root_squash)
      /exports/vol1/vol2 *(rw,async,no_subtree_check,no_root_squash)
      
      I've been running chown across the entire mountpoint twice in a row to
      hit this problem.  The first run succeeds, but the second one fails with
      the circular directory warning along with:
      
      anna@client ~ % dmesg
      [Apr 3 14:28] NFS: server 192.168.100.204 error: fileid changed
                    fsid 0:39: expected fileid 0x100080, got 0x80
      
      WHere 0x80 is the mountpoint's fileid and 0x100080 is the mounted-on
      fileid.
      
      This patch fixes the issue by requesting an updated mounted-on fileid
      from the server during nfs_update_inode(), and then checking that the
      fileid stored in the nfs_inode matches either the fileid or mounted-on
      fileid returned by the server.
      Signed-off-by: NAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      ea96d1ec
    • A
      NFS: Don't zap caches on fallocate() · 9a51940b
      Anna Schumaker 提交于
      This patch adds a GETATTR to the end of ALLOCATE and DEALLOCATE
      operations so we can set the updated inode size and change attribute
      directly.  DEALLOCATE will still need to release pagecache pages, so
      nfs42_proc_deallocate() now calls truncate_pagecache_range() before
      contacting the server.
      Signed-off-by: NAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      9a51940b
  11. 16 4月, 2015 1 次提交
  12. 28 3月, 2015 3 次提交
  13. 04 3月, 2015 2 次提交
    • T
      NFS: Don't write enable new pages while an invalidation is proceeding · ef070dcb
      Trond Myklebust 提交于
      nfs_vm_page_mkwrite() should wait until the page cache invalidation
      is finished. This is the second patch in a 2 patch series to deprecate
      the NFS client's reliance on nfs_release_page() in the context of
      nfs_invalidate_mapping().
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      ef070dcb
    • T
      NFS: Fix a regression in the read() syscall · 874f9463
      Trond Myklebust 提交于
      When invalidating the page cache for a regular file, we want to first
      sync all dirty data to disk and then call invalidate_inode_pages2().
      The latter relies on nfs_launder_page() and nfs_release_page() to deal
      respectively with dirty pages, and unstable written pages.
      
      When commit 95905446 ("NFS: avoid deadlocks with loop-back mounted
      NFS filesystems.") changed the behaviour of nfs_release_page(), then it
      made it possible for invalidate_inode_pages2() to fail with an EBUSY.
      Unfortunately, that error is then propagated back to read().
      
      Let's therefore work around the problem for now by protecting the call
      to sync the data and invalidate_inode_pages2() so that they are atomic
      w.r.t. the addition of new writes.
      Later on, we can revisit whether or not we still need nfs_launder_page()
      and nfs_release_page().
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      874f9463
  14. 02 3月, 2015 8 次提交
  15. 14 2月, 2015 1 次提交
  16. 31 1月, 2015 1 次提交
  17. 22 1月, 2015 1 次提交
    • A
      NFS: Fix use of nfs_attr_use_mounted_on_fileid() · 2ef47eb1
      Anna Schumaker 提交于
      This function call was being optimized out during nfs_fhget(), leading
      to situations where we have a valid fileid but still want to use the
      mounted_on_fileid.  For example, imagine we have our server configured
      like this:
      
      server % df
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vda1       9.1G  6.5G  1.9G  78% /
      /dev/vdb1       487M  2.3M  456M   1% /exports
      /dev/vdc1       487M  2.3M  456M   1% /exports/vol1
      /dev/vdd1       487M  2.3M  456M   1% /exports/vol2
      
      If our client mounts /exports and tries to do a "chown -R" across the
      entire mountpoint, we will get a nasty message warning us about a circular
      directory structure.  Running chown with strace tells me that each directory
      has the same device and inode number:
      
      newfstatat(AT_FDCWD, "/nfs/", {st_dev=makedev(0, 38), st_ino=2, ...}) = 0
      newfstatat(4, "vol1", {st_dev=makedev(0, 38), st_ino=2, ...}) = 0
      newfstatat(4, "vol2", {st_dev=makedev(0, 38), st_ino=2, ...}) = 0
      
      With this patch the mounted_on_fileid values are used for st_ino, so the
      directory loop warning isn't reported.
      Signed-off-by: NAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      2ef47eb1
  18. 21 1月, 2015 1 次提交
  19. 26 11月, 2014 1 次提交
  20. 25 11月, 2014 1 次提交
    • W
      NFS: fix subtle change in COMMIT behavior · cb1410c7
      Weston Andros Adamson 提交于
      Recent work in the pgio layer made it possible for there to be more than one
      request per page. This caused a subtle change in commit behavior, because
      write.c:nfs_commit_unstable_pages compares the number of *pages* waiting for
      writeback against the number of requests on a commit list to choose when to
      send a COMMIT in a non-blocking flush.
      
      This is probably hard to hit in normal operation - you have to be using
      rsize/wsize < PAGE_SIZE, or pnfs with lots of boundaries that are not page
      aligned to have a noticeable change in behavior.
      Signed-off-by: NWeston Andros Adamson <dros@primarydata.com>
      Signed-off-by: NTrond Myklebust <trond.myklebust@primarydata.com>
      cb1410c7
  21. 13 11月, 2014 1 次提交
  22. 01 10月, 2014 1 次提交