Merge tag 'nfs-for-4.13-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 13 Jul 2017 21:35:37 +0000 (14:35 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 13 Jul 2017 21:35:37 +0000 (14:35 -0700)
Pull NFS client updates from Anna Schumaker:
 "Stable bugfixes:
   - Fix -EACCESS on commit to DS handling
   - Fix initialization of nfs_page_array->npages
   - Only invalidate dentries that are actually invalid

  Features:
   - Enable NFSoRDMA transparent state migration
   - Add support for lookup-by-filehandle
   - Add support for nfs re-exporting

  Other bugfixes and cleanups:
   - Christoph cleaned up the way we declare NFS operations
   - Clean up various internal structures
   - Various cleanups to commits
   - Various improvements to error handling
   - Set the dt_type of . and .. entries in NFS v4
   - Make slot allocation more reliable
   - Fix fscache stat printing
   - Fix uninitialized variable warnings
   - Fix potential list overrun in nfs_atomic_open()
   - Fix a race in NFSoRDMA RPC reply handler
   - Fix return size for nfs42_proc_copy()
   - Fix against MAC forgery timing attacks"

* tag 'nfs-for-4.13-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (68 commits)
  NFS: Don't run wake_up_bit() when nobody is waiting...
  nfs: add export operations
  nfs4: add NFSv4 LOOKUPP handlers
  nfs: add a nfs_ilookup helper
  nfs: replace d_add with d_splice_alias in atomic_open
  sunrpc: use constant time memory comparison for mac
  NFSv4.2 fix size storage for nfs42_proc_copy
  xprtrdma: Fix documenting comments in frwr_ops.c
  xprtrdma: Replace PAGE_MASK with offset_in_page()
  xprtrdma: FMR does not need list_del_init()
  xprtrdma: Demote "connect" log messages
  NFSv4.1: Use seqid returned by EXCHANGE_ID after state migration
  NFSv4.1: Handle EXCHGID4_FLAG_CONFIRMED_R during NFSv4.1 migration
  xprtrdma: Don't defer MR recovery if ro_map fails
  xprtrdma: Fix FRWR invalidation error recovery
  xprtrdma: Fix client lock-up after application signal fires
  xprtrdma: Rename rpcrdma_req::rl_free
  xprtrdma: Pass only the list of registered MRs to ro_unmap_sync
  xprtrdma: Pre-mark remotely invalidated MRs
  xprtrdma: On invalidation failure, remove MWs from rl_registered
  ...

1  2 
fs/nfs/dir.c
fs/nfs/internal.h
fs/nfs/nfs4proc.c
fs/nfs/nfs4state.c
fs/nfs/super.c

diff --cc fs/nfs/dir.c
@@@ -2035,30 -2062,16 +2041,34 @@@ int nfs_rename(struct inode *old_dir, s
        }
  
        error = rpc_wait_for_completion_task(task);
-       if (error == 0)
+       if (error != 0) {
+               ((struct nfs_renamedata *)task->tk_calldata)->cancelled = 1;
+               /* Paired with the atomic_dec_and_test() barrier in rpc_do_put_task() */
+               smp_wmb();
+       } else
                error = task->tk_status;
        rpc_put_task(task);
 +      nfs_mark_for_revalidate(old_inode);
  out:
 +      if (rehash)
 +              d_rehash(rehash);
        trace_nfs_rename_exit(old_dir, old_dentry,
                        new_dir, new_dentry, error);
 +      if (!error) {
 +              if (new_inode != NULL)
 +                      nfs_drop_nlink(new_inode);
 +              /*
 +               * The d_move() should be here instead of in an async RPC completion
 +               * handler because we need the proper locks to move the dentry.  If
 +               * we're interrupted by a signal, the async RPC completion handler
 +               * should mark the directories for revalidation.
 +               */
 +              d_move(old_dentry, new_dentry);
 +              nfs_set_verifier(new_dentry,
 +                                      nfs_save_change_attribute(new_dir));
 +      } else if (error == -ENOENT)
 +              nfs_dentry_handle_enoent(old_dentry);
 +
        /* new dentry created? */
        if (dentry)
                dput(dentry);
Simple merge
Simple merge
Simple merge
diff --cc fs/nfs/super.c
Simple merge