Fixes:
- Avoid exposing parent of root directory in NFSv3 READDIRPLUS results - Fix a tracepoint change that went in the initial 5.11 merge -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEKLLlsBKG3yQ88j7+M2qzM29mf5cFAl//AVMACgkQM2qzM29m f5dTWg//c2prRAhE1V9fwIDczJn8MM0tXljoWWgSpuslbd8Bgv0Ss8mitvr4B3pO JhzBdWcTb2/3j2D52LbLOGjr0z6BCvXX1Gp0QUnC96lhaNBC5aby309xQpSkhPbQ j2jw3CImGbiH7YY2BGsjcUx5mfpIkJMbg7rPSSOVHufIiUZLCg98Y3JJJKrJk+78 qGFgaAHqBLzLK96F7Sz9q8du5lsiCbpLgx+qWjpaJEfJ0XWbEe2jA/uakrb1OzoD OkpG8RjZiJFAhWGdnR8y7eJQ7FyIi8h7BYAr4AlE97YZRZdjDqyummshJkKKVG2f 5u4B225cKkcmVfLQem7Ym+nVFneR7/WLy00O12v08d0s54RLDp4xjdKplgLnHdwB AJg+l6K/AN24UtyE1OUIuOKJsLZd+DSANYNzZrCjeF8o6LKsKSUGrRtRbNVmtyJH qBYXR3gXrNt9lWYU+i/4OfJIVfksWjjyRk2/ww83INi5KxixuL0w8BcMpaTC1qQg ds+rmvosLvtfnY2k0wdScYbQZHoFvf+qJHRDhOVq4lWgpooExOMXKUry6k5AVOd4 EchDX870Qe6wc4uT8xafmizD6hdJXCDN0rTGTuGnMoksoBZ7uCCsyyztbfNGiFMC i+0wCIWkHU3LgfHQMmTJ3J6e8mgTWPD3pTOJU5xoizQnTHGoTho= =Qf5O -----END PGP SIGNATURE----- Merge tag 'nfsd-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux Pull nfsd fixes from Chuck Lever: - Avoid exposing parent of root directory in NFSv3 READDIRPLUS results - Fix a tracepoint change that went in the initial 5.11 merge * tag 'nfsd-5.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux: SUNRPC: Move the svc_xdr_recvfrom tracepoint again nfsd4: readdirplus shouldn't return parent of export
This commit is contained in:
commit
f419f031de
|
@ -865,9 +865,14 @@ compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
|
|||
if (isdotent(name, namlen)) {
|
||||
if (namlen == 2) {
|
||||
dchild = dget_parent(dparent);
|
||||
/* filesystem root - cannot return filehandle for ".." */
|
||||
/*
|
||||
* Don't return filehandle for ".." if we're at
|
||||
* the filesystem or export root:
|
||||
*/
|
||||
if (dchild == dparent)
|
||||
goto out;
|
||||
if (dparent == exp->ex_path.dentry)
|
||||
goto out;
|
||||
} else
|
||||
dchild = dget(dparent);
|
||||
} else
|
||||
|
|
|
@ -1424,13 +1424,13 @@ TRACE_EVENT(rpcb_unregister,
|
|||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_xdr_buf_class,
|
||||
/* Record an xdr_buf containing a fully-formed RPC message */
|
||||
DECLARE_EVENT_CLASS(svc_xdr_msg_class,
|
||||
TP_PROTO(
|
||||
const struct svc_rqst *rqst,
|
||||
const struct xdr_buf *xdr
|
||||
),
|
||||
|
||||
TP_ARGS(rqst, xdr),
|
||||
TP_ARGS(xdr),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(u32, xid)
|
||||
|
@ -1443,7 +1443,55 @@ DECLARE_EVENT_CLASS(svc_xdr_buf_class,
|
|||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xid = be32_to_cpu(rqst->rq_xid);
|
||||
__be32 *p = (__be32 *)xdr->head[0].iov_base;
|
||||
|
||||
__entry->xid = be32_to_cpu(*p);
|
||||
__entry->head_base = p;
|
||||
__entry->head_len = xdr->head[0].iov_len;
|
||||
__entry->tail_base = xdr->tail[0].iov_base;
|
||||
__entry->tail_len = xdr->tail[0].iov_len;
|
||||
__entry->page_len = xdr->page_len;
|
||||
__entry->msg_len = xdr->len;
|
||||
),
|
||||
|
||||
TP_printk("xid=0x%08x head=[%p,%zu] page=%u tail=[%p,%zu] len=%u",
|
||||
__entry->xid,
|
||||
__entry->head_base, __entry->head_len, __entry->page_len,
|
||||
__entry->tail_base, __entry->tail_len, __entry->msg_len
|
||||
)
|
||||
);
|
||||
|
||||
#define DEFINE_SVCXDRMSG_EVENT(name) \
|
||||
DEFINE_EVENT(svc_xdr_msg_class, \
|
||||
svc_xdr_##name, \
|
||||
TP_PROTO( \
|
||||
const struct xdr_buf *xdr \
|
||||
), \
|
||||
TP_ARGS(xdr))
|
||||
|
||||
DEFINE_SVCXDRMSG_EVENT(recvfrom);
|
||||
|
||||
/* Record an xdr_buf containing arbitrary data, tagged with an XID */
|
||||
DECLARE_EVENT_CLASS(svc_xdr_buf_class,
|
||||
TP_PROTO(
|
||||
__be32 xid,
|
||||
const struct xdr_buf *xdr
|
||||
),
|
||||
|
||||
TP_ARGS(xid, xdr),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(u32, xid)
|
||||
__field(const void *, head_base)
|
||||
__field(size_t, head_len)
|
||||
__field(const void *, tail_base)
|
||||
__field(size_t, tail_len)
|
||||
__field(unsigned int, page_len)
|
||||
__field(unsigned int, msg_len)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xid = be32_to_cpu(xid);
|
||||
__entry->head_base = xdr->head[0].iov_base;
|
||||
__entry->head_len = xdr->head[0].iov_len;
|
||||
__entry->tail_base = xdr->tail[0].iov_base;
|
||||
|
@ -1463,12 +1511,11 @@ DECLARE_EVENT_CLASS(svc_xdr_buf_class,
|
|||
DEFINE_EVENT(svc_xdr_buf_class, \
|
||||
svc_xdr_##name, \
|
||||
TP_PROTO( \
|
||||
const struct svc_rqst *rqst, \
|
||||
__be32 xid, \
|
||||
const struct xdr_buf *xdr \
|
||||
), \
|
||||
TP_ARGS(rqst, xdr))
|
||||
TP_ARGS(xid, xdr))
|
||||
|
||||
DEFINE_SVCXDRBUF_EVENT(recvfrom);
|
||||
DEFINE_SVCXDRBUF_EVENT(sendto);
|
||||
|
||||
/*
|
||||
|
|
|
@ -857,6 +857,7 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
|
|||
err = -EAGAIN;
|
||||
if (len <= 0)
|
||||
goto out_release;
|
||||
trace_svc_xdr_recvfrom(&rqstp->rq_arg);
|
||||
|
||||
clear_bit(XPT_OLD, &xprt->xpt_flags);
|
||||
|
||||
|
@ -866,7 +867,6 @@ int svc_recv(struct svc_rqst *rqstp, long timeout)
|
|||
|
||||
if (serv->sv_stats)
|
||||
serv->sv_stats->netcnt++;
|
||||
trace_svc_xdr_recvfrom(rqstp, &rqstp->rq_arg);
|
||||
return len;
|
||||
out_release:
|
||||
rqstp->rq_res.len = 0;
|
||||
|
@ -904,7 +904,7 @@ int svc_send(struct svc_rqst *rqstp)
|
|||
xb->len = xb->head[0].iov_len +
|
||||
xb->page_len +
|
||||
xb->tail[0].iov_len;
|
||||
trace_svc_xdr_sendto(rqstp, xb);
|
||||
trace_svc_xdr_sendto(rqstp->rq_xid, xb);
|
||||
trace_svc_stats_latency(rqstp);
|
||||
|
||||
len = xprt->xpt_ops->xpo_sendto(rqstp);
|
||||
|
|
Loading…
Reference in New Issue