summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2026-10-13 12:07:39 +0100
committerMark Brown <broonie@kernel.org>2026-10-13 12:07:39 +0100
commitb97de6d72566c8fc294ededcefde47e20d834566 (patch)
tree862b7db6c3e89dcb01b3f2b39ca1633be32dffb7
parentfceffb475782cb757e7c70074134f48167142be6 (diff)
parent18a80121193c6d19519e218434c9acf90e8d0e5c (diff)
downloadlinux-next-b97de6d72566c8fc294ededcefde47e20d834566.tar.gz
linux-next-b97de6d72566c8fc294ededcefde47e20d834566.zip
Merge branch 'linux-next' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6.git
-rw-r--r--fs/nfs/delegation.c3
-rw-r--r--fs/nfs/dir.c2
-rw-r--r--fs/nfs/fs_context.c1
-rw-r--r--fs/xfs/scrub/stats.c3
-rw-r--r--fs/xfs/scrub/tempfile.c3
-rw-r--r--net/sunrpc/xprtrdma/rpc_rdma.c14
6 files changed, 18 insertions, 8 deletions
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index ab3e441464a6..ad774316f716 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -934,8 +934,7 @@ nfs_mark_return_if_closed_delegation(struct nfs_server *server,
{
struct inode *inode;
- if (!list_empty_careful(&server->delegations_return) ||
- test_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags))
+ if (test_bit(NFS_DELEGATION_RETURN_IF_CLOSED, &delegation->flags))
return;
spin_lock(&delegation->lock);
inode = delegation->inode;
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 49394123bd09..a26c459ffb04 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -2490,6 +2490,8 @@ struct dentry *nfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
trace_nfs_mkdir_enter(dir, dentry);
ret = NFS_PROTO(dir)->mkdir(dir, dentry, &attr);
trace_nfs_mkdir_exit(dir, dentry, PTR_ERR_OR_ZERO(ret));
+ if (IS_ERR(ret))
+ d_drop(dentry);
return ret;
}
EXPORT_SYMBOL_GPL(nfs_mkdir);
diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c
index 1967de7d1dff..a7393ff05494 100644
--- a/fs/nfs/fs_context.c
+++ b/fs/nfs/fs_context.c
@@ -402,6 +402,7 @@ static void nfs_set_mount_transport_protocol(struct nfs_fs_context *ctx)
ctx->mount_server.protocol = XPRT_TRANSPORT_UDP;
break;
case XPRT_TRANSPORT_TCP:
+ case XPRT_TRANSPORT_TCP_TLS:
case XPRT_TRANSPORT_RDMA:
ctx->mount_server.protocol = XPRT_TRANSPORT_TCP;
}
diff --git a/fs/xfs/scrub/stats.c b/fs/xfs/scrub/stats.c
index 3339cae4b39d..03f58d23c473 100644
--- a/fs/xfs/scrub/stats.c
+++ b/fs/xfs/scrub/stats.c
@@ -143,7 +143,6 @@ STATIC size_t
xchk_stats_estimate_bufsize(
struct xchk_stats *cs)
{
- struct xchk_scrub_stats *css = &cs->cs_stats[0];
unsigned int i;
size_t field_width;
size_t ret = 0;
@@ -157,7 +156,7 @@ xchk_stats_estimate_bufsize(
offsetof(struct xchk_scrub_stats, checktime_us)) /
sizeof(uint64_t));
- for (i = 0; i < XFS_SCRUB_TYPE_NR; i++, css++) {
+ for (i = 0; i < XFS_SCRUB_TYPE_NR; i++) {
if (!name_map[i])
continue;
diff --git a/fs/xfs/scrub/tempfile.c b/fs/xfs/scrub/tempfile.c
index 59a9213a3c7d..6340afcc22cf 100644
--- a/fs/xfs/scrub/tempfile.c
+++ b/fs/xfs/scrub/tempfile.c
@@ -490,7 +490,6 @@ xrep_tempfile_copyin(
struct xfs_buf *bp;
xfs_fileoff_t flush_mask;
xfs_fileoff_t end = off + len;
- loff_t pos = XFS_FSB_TO_B(mp, off);
int error = 0;
ASSERT(S_ISREG(VFS_I(sc->tempip)->i_mode));
@@ -498,7 +497,7 @@ xrep_tempfile_copyin(
/* Flush buffers to disk every 512K */
flush_mask = XFS_B_TO_FSBT(mp, (1U << 19)) - 1;
- for (; off < end; off++, pos += mp->m_sb.sb_blocksize) {
+ for (; off < end; off++) {
struct xfs_bmbt_irec map;
int nmaps = 1;
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index 1285f04cdac1..ba8bdca8a49f 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -1243,9 +1243,19 @@ rpcrdma_decode_msg(struct rpcrdma_xprt *r_xprt, struct rpcrdma_rep *rep,
/* Build the RPC reply's Payload stream in rqst->rq_rcv_buf */
base = (char *)xdr_inline_decode(xdr, 0);
- rpclen = xdr_stream_remaining(xdr);
+ rpclen = rep->rr_hdrbuf.len - xdr_stream_pos(xdr);
+ if (writelist)
+ rpclen &= ~3;
+ if (unlikely(!rpclen))
+ return -EIO;
+ if (writelist && rpclen < rqst->rq_rcv_buf.head[0].iov_len) {
+ rqst->rq_rcv_buf.head[0].iov_len = rpclen;
+ rqst->rq_private_buf.head[0].iov_len = rpclen;
+ }
+
r_xprt->rx_stats.fixup_copy_count +=
- rpcrdma_inline_fixup(rqst, base, rpclen, writelist & 3);
+ rpcrdma_inline_fixup(rqst, base, rpclen,
+ xdr_pad_size(writelist));
r_xprt->rx_stats.total_rdma_reply += writelist;
return rpclen + xdr_align_size(writelist);