[GIT PULL] Please pull NFS client changes for Linux 4.7

From: Anna Schumaker
Date: Thu May 26 2016 - 11:30:13 EST


Hi Linus,

The following changes since commit 44549e8f5eea4e0a41b487b63e616cb089922b99:

Linux 4.6-rc7 (2016-05-08 14:38:32 -0700)

are available in the git repository at:

git://git.linux-nfs.org/projects/anna/linux-nfs.git tags/nfs-for-4.7-1

for you to fetch changes up to c7d73af2d249f0323f5cdb171a59497ce80011fb:

pnfs: pnfs_update_layout needs to consider if strict iomode checking is on (2016-05-26 08:40:56 -0400)


There are a few merge conflicts that were found in linux-next. Stephen's suggested resolutions looked okay to us, so I've attached those patches for reference.

Thanks,
Anna

----------------------------------------------------------------

Anna Schumaker (2):
NFS: Add nfs_commit_file()
NFS: Add COPY nfs operation

Benjamin Coddington (1):
SUNRPC: init xdr_stream for zero iov_len, page_len

Chuck Lever (21):
NFS: Fix an LOCK/OPEN race when unlinking an open file
sunrpc: Update RPCBIND_MAXNETIDLEN
sunrpc: Advertise maximum backchannel payload size
xprtrdma: Bound the inline threshold values
xprtrdma: Limit number of RDMA segments in RPC-over-RDMA headers
xprtrdma: Prevent inline overflow
xprtrdma: Avoid using Write list for small NFS READ requests
xprtrdma: Update comments in rpcrdma_marshal_req()
xprtrdma: Allow Read list and Reply chunk simultaneously
xprtrdma: Remove rpcrdma_create_chunks()
xprtrdma: Use core ib_drain_qp() API
xprtrdma: Rename rpcrdma_frwr::sg and sg_nents
xprtrdma: Save I/O direction in struct rpcrdma_frwr
xprtrdma: Reset MRs in frwr_op_unmap_sync()
xprtrdma: Refactor the FRWR recovery worker
xprtrdma: Move fr_xprt and fr_worker to struct rpcrdma_mw
xprtrdma: Refactor __fmr_dma_unmap()
xprtrdma: Add ro_unmap_safe memreg method
xprtrdma: Remove ro_unmap() from all registration modes
xprtrdma: Faster server reboot recovery
xprtrdma: Remove qplock

Dan Carpenter (1):
NFS: checking for NULL instead of IS_ERR() in nfs_commit_file()

Dave Wysochanski (1):
NFS: Save struct inode * inside nfs_commit_info to clarify usage of i_lock

J. Bruce Fields (1):
nfs: don't share mounts between network namespaces

Jeff Layton (16):
sunrpc: plumb gfp_t parm into crcreate operation
sunrpc: add a get_rpccred_rcu inline
nfs: don't call nfs4_ff_layout_prepare_ds from ff_layout_get_ds_cred
nfs: have ff_layout_get_ds_cred take a reference to the cred
nfs: get a reference to the credential in ff_layout_alloc_lseg
nfs: have flexfiles mirror keep creds for both ro and rw layouts
pnfs: don't merge new ff lsegs with ones that have LAYOUTRETURN bit set
pnfs: record sequence in pnfs_layout_segment when it's created
pnfs: keep track of the return sequence number in pnfs_layout_hdr
pnfs: only tear down lsegs that precede seqid in LAYOUTRETURN args
flexfiles: remove pointless setting of NFS_LAYOUT_RETURN_REQUESTED
flexfiles: add kerneldoc header to nfs4_ff_layout_prepare_ds
pnfs: fix bad error handling in send_layoutget
pnfs: lift retry logic from send_layoutget to pnfs_update_layout
pnfs: rework LAYOUTGET retry handling
pnfs: make pnfs_layout_process more robust

Olga Kornievskaia (1):
Fixing oops in callback path

Shirley Ma (1):
xprtrdma: Add rdma6 option to support NFS/RDMA IPv6

Tigran Mkrtchyan (1):
nfs4: client: do not send empty SETATTR after OPEN_CREATE

Tom Haynes (5):
pNFS/flexfiles: When checking for available DSes, conditionally check for MDS io
pNFS/flexfiles: When initing reads or writes, we might have to retry connecting to DSes
nfs/flexfiles: Helper function to detect FF_FLAGS_NO_READ_IO
nfs/flexfiles: Use the layout segment for reading unless it a IOMODE_RW and reading is disabled
pnfs: pnfs_update_layout needs to consider if strict iomode checking is on

Trond Myklebust (6):
pNFS: Fix a leaked layoutstats flag
SUNRPC: Ensure get_rpccred() and put_rpccred() can take NULL arguments
NFSv4: Label stateids with the type
NFSv4: Use the right stateid for delegations in setattr, read and write
NFS: Reclaim writes via writepage are opportunistic
pNFS/flexfile: Fix erroneous fall back to read/write through the MDS

Weston Andros Adamson (4):
pnfs: set NFS_IOHDR_REDO in pnfs_read_resend_pnfs
nfs: add debug to directio "good_bytes" counting
sunrpc: add rpc_lookup_generic_cred
nfs: avoid race that crashes nfs_init_commit

fs/nfs/callback_proc.c | 9 +-
fs/nfs/callback_xdr.c | 17 +-
fs/nfs/delegation.c | 9 +-
fs/nfs/delegation.h | 2 +-
fs/nfs/direct.c | 17 +-
fs/nfs/filelayout/filelayout.c | 6 +-
fs/nfs/flexfilelayout/flexfilelayout.c | 200 ++++++++----
fs/nfs/flexfilelayout/flexfilelayout.h | 17 +-
fs/nfs/flexfilelayout/flexfilelayoutdev.c | 119 +++----
fs/nfs/internal.h | 1 +
fs/nfs/nfs42.h | 1 +
fs/nfs/nfs42proc.c | 107 ++++++-
fs/nfs/nfs42xdr.c | 146 +++++++++
fs/nfs/nfs4_fs.h | 12 +-
fs/nfs/nfs4file.c | 23 ++
fs/nfs/nfs4proc.c | 185 ++++++-----
fs/nfs/nfs4state.c | 18 +-
fs/nfs/nfs4trace.h | 10 +-
fs/nfs/nfs4xdr.c | 43 ++-
fs/nfs/pagelist.c | 6 +-
fs/nfs/pnfs.c | 349 +++++++++++---------
fs/nfs/pnfs.h | 17 +-
fs/nfs/pnfs_nfs.c | 60 +++-
fs/nfs/super.c | 9 +
fs/nfs/write.c | 64 +++-
include/linux/errno.h | 1 +
include/linux/nfs4.h | 28 +-
include/linux/nfs_fs_sb.h | 1 +
include/linux/nfs_xdr.h | 30 +-
include/linux/sunrpc/auth.h | 26 +-
include/linux/sunrpc/clnt.h | 1 +
include/linux/sunrpc/msg_prot.h | 4 +-
include/linux/sunrpc/xprt.h | 1 +
include/linux/sunrpc/xprtrdma.h | 4 +-
net/sunrpc/auth.c | 9 +-
net/sunrpc/auth_generic.c | 13 +-
net/sunrpc/auth_gss/auth_gss.c | 6 +-
net/sunrpc/auth_unix.c | 6 +-
net/sunrpc/clnt.c | 17 +
net/sunrpc/xdr.c | 2 +
net/sunrpc/xprtrdma/backchannel.c | 16 +
net/sunrpc/xprtrdma/fmr_ops.c | 134 +++++---
net/sunrpc/xprtrdma/frwr_ops.c | 214 +++++++------
net/sunrpc/xprtrdma/physical_ops.c | 39 ++-
net/sunrpc/xprtrdma/rpc_rdma.c | 517 ++++++++++++++++++------------
net/sunrpc/xprtrdma/transport.c | 16 +-
net/sunrpc/xprtrdma/verbs.c | 78 +----
net/sunrpc/xprtrdma/xprt_rdma.h | 47 ++-
net/sunrpc/xprtsock.c | 6 +
49 files changed, 1764 insertions(+), 899 deletions(-)
--- Begin Message --- Hi Trond,

After merging the nfs tree, today's linux-next build (x86_64 allmodconfig)
failed like this:

In file included from include/linux/fs.h:19:0,
from fs/nfs/nfs42proc.c:4:
fs/nfs/nfs42proc.c: In function 'nfs42_proc_copy':
fs/nfs/nfs42proc.c:212:30: error: 'struct inode' has no member named 'i_mutex'
mutex_lock(&file_inode(dst)->i_mutex);
^
include/linux/mutex.h:146:44: note: in definition of macro 'mutex_lock'
#define mutex_lock(lock) mutex_lock_nested(lock, 0)
^
fs/nfs/nfs42proc.c:215:32: error: 'struct inode' has no member named 'i_mutex'
mutex_unlock(&file_inode(dst)->i_mutex);
^

Caused by commit

2e72448b07dc ("NFS: Add COPY nfs operation")

interacting with commit

9902af79c01a ("parallel lookups: actual switch to rwsem")

from Linus' tree.

I applied the following merge fix patch - you will need to send this to
Linus when you ask him to merge your tree.

From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Date: Thu, 19 May 2016 10:50:26 +1000
Subject: [PATCH] nfs: fix for i_mutex to i_rwsem change

Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
---
fs/nfs/nfs42proc.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
index 20c44d1209dc..aa03ed09ba06 100644
--- a/fs/nfs/nfs42proc.c
+++ b/fs/nfs/nfs42proc.c
@@ -209,10 +209,10 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src,
dst_exception.state = dst_lock->open_context->state;

do {
- mutex_lock(&file_inode(dst)->i_mutex);
+ inode_lock(file_inode(dst));
err = _nfs42_proc_copy(src, pos_src, src_lock,
dst, pos_dst, dst_lock, count);
- mutex_unlock(&file_inode(dst)->i_mutex);
+ inode_unlock(file_inode(dst));

if (err == -ENOTSUPP) {
err = -EOPNOTSUPP;
--
2.7.0

--
Cheers,
Stephen Rothwell

--- End Message ---
--- Begin Message --- Hi Trond,

Today's linux-next merge of the nfs tree got a conflict in:

fs/nfs/direct.c

between commit:

c8b8e32d700f ("direct-io: eliminate the offset argument to ->direct_IO")

from Linus' tree and commit:

ed3743a6d4f3 ("nfs: add debug to directio "good_bytes" counting")

from the nfs tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging. You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

--
Cheers,
Stephen Rothwell

diff --cc fs/nfs/direct.c
index 741a92c470bb,7f03163b5364..000000000000
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@@ -591,8 -596,8 +594,8 @@@ ssize_t nfs_file_direct_read(struct kio
goto out_unlock;

dreq->inode = inode;
- dreq->bytes_left = count;
+ dreq->bytes_left = dreq->max_count = count;
- dreq->io_start = pos;
+ dreq->io_start = iocb->ki_pos;
dreq->ctx = get_nfs_open_context(nfs_file_open_context(iocb->ki_filp));
l_ctx = nfs_get_lock_context(dreq->ctx);
if (IS_ERR(l_ctx)) {

--- End Message ---
--- Begin Message --- Hi Doug,

Today's linux-next merge of the rdma tree got a conflict in:

net/sunrpc/xprtrdma/frwr_ops.c

between commit:

55fdfce101a0 ("xprtrdma: Rename rpcrdma_frwr::sg and sg_nents")

from the nfs tree and commits:

ff2ba9936591 ("IB/core: Add passing an offset into the SG to ib_map_mr_sg")
9aa8b3217ed3 ("IB/core: Enhance ib_map_mr_sg()")

from the rdma tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging. You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

--
Cheers,
Stephen Rothwell

diff --cc net/sunrpc/xprtrdma/frwr_ops.c
index a192b91ad67e,94c3fa910b85..000000000000
--- a/net/sunrpc/xprtrdma/frwr_ops.c
+++ b/net/sunrpc/xprtrdma/frwr_ops.c
@@@ -450,10 -421,10 +450,10 @@@ frwr_op_map(struct rpcrdma_xprt *r_xprt
return -ENOMEM;
}

- n = ib_map_mr_sg(mr, frmr->fr_sg, frmr->fr_nents, PAGE_SIZE);
- n = ib_map_mr_sg(mr, frmr->sg, frmr->sg_nents, NULL, PAGE_SIZE);
- if (unlikely(n != frmr->sg_nents)) {
++ n = ib_map_mr_sg(mr, frmr->fr_sg, frmr->fr_nents, NULL, PAGE_SIZE);
+ if (unlikely(n != frmr->fr_nents)) {
pr_err("RPC: %s: failed to map mr %p (%u/%u)\n",
- __func__, frmr->fr_mr, n, frmr->sg_nents);
+ __func__, frmr->fr_mr, n, frmr->fr_nents);
rc = n < 0 ? n : -EINVAL;
goto out_senderr;
}

--- End Message ---