Merge tag 'nfs-for-4.2-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Jul 2015 18:32:23 +0000 (11:32 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Jul 2015 18:32:23 +0000 (11:32 -0700)
Pull NFS client updates from Trond Myklebust:
 "Highlights include:

  Stable patches:
   - Fix a crash in the NFSv4 file locking code.
   - Fix an fsync() regression, where we were failing to retry I/O in
     some circumstances.
   - Fix an infinite loop in NFSv4.0 OPEN stateid recovery
   - Fix a memory leak when an attempted pnfs fails.
   - Fix a memory leak in the backchannel code
   - Large hostnames were not supported correctly in NFSv4.1
   - Fix a pNFS/flexfiles bug that was impeding error reporting on I/O.
   - Fix a couple of credential issues in pNFS/flexfiles

  Bugfixes + cleanups:
   - Open flag sanity checks in the NFSv4 atomic open codepath
   - More NFSv4 delegation related bugfixes
   - Various NFSv4.1 backchannel bugfixes and cleanups
   - Fix the NFS swap socket code
   - Various cleanups of the NFSv4 SETCLIENTID and EXCHANGE_ID code
   - Fix a UDP transport deadlock issue

  Features:
   - More RDMA client transport improvements
   - NFSv4.2 LAYOUTSTATS functionality for pnfs flexfiles"

* tag 'nfs-for-4.2-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (87 commits)
  nfs: Remove invalid tk_pid from debug message
  nfs: Remove invalid NFS_ATTR_FATTR_V4_REFERRAL checking in nfs4_get_rootfh
  nfs: Drop bad comment in nfs41_walk_client_list()
  nfs: Remove unneeded micro checking of CONFIG_PROC_FS
  nfs: Don't setting FILE_CREATED flags always
  nfs: Use remove_proc_subtree() instead remove_proc_entry()
  nfs: Remove unused argument in nfs_server_set_fsinfo()
  nfs: Fix a memory leak when meeting an unsupported state protect
  nfs: take extra reference to fl->fl_file when running a LOCKU operation
  NFSv4: When returning a delegation, don't reclaim an incompatible open mode.
  NFSv4.2: LAYOUTSTATS is optional to implement
  NFSv4.2: Fix up a decoding error in layoutstats
  pNFS/flexfiles: Fix the reset of struct pgio_header when resending
  pNFS/flexfiles: Turn off layoutcommit for servers that don't need it
  pnfs/flexfiles: protect ktime manipulation with mirror lock
  nfs: provide pnfs_report_layoutstat when NFS42 is disabled
  nfs: verify open flags before allowing open
  nfs: always update creds in mirror, even when we have an already connected ds
  nfs: fix potential credential leak in ff_layout_update_mirror_cred
  pnfs/flexfiles: report layoutstat regularly
  ...

1  2 
fs/nfs/write.c
net/sunrpc/Makefile
net/sunrpc/svc.c
net/sunrpc/xprtrdma/frwr_ops.c
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h
net/sunrpc/xprtsock.c

diff --cc fs/nfs/write.c
Simple merge
Simple merge
Simple merge
index d234521320a4bb45a9bbecd40e5e58bbb42d77d8,661fbc1784abc21e27bd5a49f7346eb26eac1178..04ea914201b237cc6f42ce68caa6b5dbc7b29d59
@@@ -128,8 -252,8 +252,8 @@@ frwr_sendcompletion(struct ib_wc *wc
  
        /* WARNING: Only wr_id and status are reliable at this point */
        r = (struct rpcrdma_mw *)(unsigned long)wc->wr_id;
-       dprintk("RPC:       %s: frmr %p (stale), status %s (%d)\n",
 -      pr_warn("RPC:       %s: frmr %p flushed, status %d\n",
 -              __func__, r, wc->status);
++      pr_warn("RPC:       %s: frmr %p flushed, status %s (%d)\n",
 +              __func__, r, ib_wc_status_msg(wc->status), wc->status);
        r->r.frmr.fr_state = FRMR_IS_STALE;
  }
  
index 436da2caec955ded2b2f4f6a2056cb1191594373,9facc71d9d86566cd5f2dedf7ea62afeeb6d65a2..680f888a9ddd045314b305ef772385c7c6d5624e
@@@ -720,9 -744,11 +738,11 @@@ void xprt_rdma_cleanup(void
        if (rc)
                dprintk("RPC:       %s: xprt_unregister returned %i\n",
                        __func__, rc);
+       frwr_destroy_recovery_wq();
  }
  
 -static int __init xprt_rdma_init(void)
 +int xprt_rdma_init(void)
  {
        int rc;
  
index 52df265b472a9b2b79574c7d9363acba26ea5d8b,234083560d0e2c5817d47775c17eceebdef23117..891c4ede2c20ea8d8c6bc79ee080f353d4df13d7
@@@ -692,9 -763,9 +684,9 @@@ rpcrdma_ep_create(struct rpcrdma_ep *ep
        init_waitqueue_head(&ep->rep_connect_wait);
        INIT_DELAYED_WORK(&ep->rep_connect_worker, rpcrdma_connect_worker);
  
-       sendcq = ib_create_cq(ia->ri_id->device, rpcrdma_sendcq_upcall,
-                                 rpcrdma_cq_async_error_upcall, ep, &cq_attr);
 +      cq_attr.cqe = ep->rep_attr.cap.max_send_wr + 1;
 -                            rpcrdma_cq_async_error_upcall, ep,
 -                            ep->rep_attr.cap.max_send_wr + 1, 0);
+       sendcq = ib_create_cq(ia->ri_device, rpcrdma_sendcq_upcall,
++                            rpcrdma_cq_async_error_upcall, ep, &cq_attr);
        if (IS_ERR(sendcq)) {
                rc = PTR_ERR(sendcq);
                dprintk("RPC:       %s: failed to create send CQ: %i\n",
                goto out2;
        }
  
-       recvcq = ib_create_cq(ia->ri_id->device, rpcrdma_recvcq_upcall,
-                                 rpcrdma_cq_async_error_upcall, ep, &cq_attr);
 +      cq_attr.cqe = ep->rep_attr.cap.max_recv_wr + 1;
 -                            rpcrdma_cq_async_error_upcall, ep,
 -                            ep->rep_attr.cap.max_recv_wr + 1, 0);
+       recvcq = ib_create_cq(ia->ri_device, rpcrdma_recvcq_upcall,
++                            rpcrdma_cq_async_error_upcall, ep, &cq_attr);
        if (IS_ERR(recvcq)) {
                rc = PTR_ERR(recvcq);
                dprintk("RPC:       %s: failed to create recv CQ: %i\n",
Simple merge
Simple merge