Merge tag 'nfsd-4.8' of git://linux-nfs.org/~bfields/linux
Pull nfsd updates from Bruce Fields:
"Highlights:
- Trond made a change to the server's tcp logic that allows a fast
client to better take advantage of high bandwidth networks, but may
increase the risk that a single client could starve other clients;
a new sunrpc.svc_rpc_per_connection_limit parameter should help
mitigate this in the (hopefully unlikely) event this becomes a
problem in practice.
- Tom Haynes added a minimal flex-layout pnfs server, which is of no
use in production for now--don't build it unless you're doing
client testing or further server development"
* tag 'nfsd-4.8' of git://linux-nfs.org/~bfields/linux: (32 commits)
nfsd: remove some dead code in nfsd_create_locked()
nfsd: drop unnecessary MAY_EXEC check from create
nfsd: clean up bad-type check in nfsd_create_locked
nfsd: remove unnecessary positive-dentry check
nfsd: reorganize nfsd_create
nfsd: check d_can_lookup in fh_verify of directories
nfsd: remove redundant zero-length check from create
nfsd: Make creates return EEXIST instead of EACCES
SUNRPC: Detect immediate closure of accepted sockets
SUNRPC: accept() may return sockets that are still in SYN_RECV
nfsd: allow nfsd to advertise multiple layout types
nfsd: Close race between nfsd4_release_lockowner and nfsd4_lock
nfsd/blocklayout: Make sure calculate signature/designator length aligned
xfs: abstract block export operations from nfsd layouts
SUNRPC: Remove unused callback xpo_adjust_wspace()
SUNRPC: Change TCP socket space reservation
SUNRPC: Add a server side per-connection limit
SUNRPC: Micro optimisation for svc_data_ready
SUNRPC: Call the default socket callbacks instead of open coding
SUNRPC: lock the socket while detaching it
...
This commit is contained in:
@@ -473,6 +473,39 @@ TRACE_EVENT(svc_recv,
|
||||
show_rqstp_flags(__entry->flags))
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_rqst_event,
|
||||
|
||||
TP_PROTO(struct svc_rqst *rqst),
|
||||
|
||||
TP_ARGS(rqst),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(__be32, xid)
|
||||
__field(unsigned long, flags)
|
||||
__dynamic_array(unsigned char, addr, rqst->rq_addrlen)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xid = rqst->rq_xid;
|
||||
__entry->flags = rqst->rq_flags;
|
||||
memcpy(__get_dynamic_array(addr),
|
||||
&rqst->rq_addr, rqst->rq_addrlen);
|
||||
),
|
||||
|
||||
TP_printk("addr=%pIScp rq_xid=0x%x flags=%s",
|
||||
(struct sockaddr *)__get_dynamic_array(addr),
|
||||
be32_to_cpu(__entry->xid),
|
||||
show_rqstp_flags(__entry->flags))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(svc_rqst_event, svc_defer,
|
||||
TP_PROTO(struct svc_rqst *rqst),
|
||||
TP_ARGS(rqst));
|
||||
|
||||
DEFINE_EVENT(svc_rqst_event, svc_drop,
|
||||
TP_PROTO(struct svc_rqst *rqst),
|
||||
TP_ARGS(rqst));
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_rqst_status,
|
||||
|
||||
TP_PROTO(struct svc_rqst *rqst, int status),
|
||||
@@ -529,45 +562,67 @@ TRACE_EVENT(svc_xprt_do_enqueue,
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct svc_xprt *, xprt)
|
||||
__field_struct(struct sockaddr_storage, ss)
|
||||
__field(int, pid)
|
||||
__field(unsigned long, flags)
|
||||
__dynamic_array(unsigned char, addr, xprt != NULL ?
|
||||
xprt->xpt_remotelen : 0)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xprt = xprt;
|
||||
xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
|
||||
__entry->pid = rqst? rqst->rq_task->pid : 0;
|
||||
__entry->flags = xprt ? xprt->xpt_flags : 0;
|
||||
if (xprt) {
|
||||
memcpy(__get_dynamic_array(addr),
|
||||
&xprt->xpt_remote,
|
||||
xprt->xpt_remotelen);
|
||||
__entry->flags = xprt->xpt_flags;
|
||||
} else
|
||||
__entry->flags = 0;
|
||||
),
|
||||
|
||||
TP_printk("xprt=0x%p addr=%pIScp pid=%d flags=%s", __entry->xprt,
|
||||
(struct sockaddr *)&__entry->ss,
|
||||
__get_dynamic_array_len(addr) != 0 ?
|
||||
(struct sockaddr *)__get_dynamic_array(addr) : NULL,
|
||||
__entry->pid, show_svc_xprt_flags(__entry->flags))
|
||||
);
|
||||
|
||||
TRACE_EVENT(svc_xprt_dequeue,
|
||||
DECLARE_EVENT_CLASS(svc_xprt_event,
|
||||
TP_PROTO(struct svc_xprt *xprt),
|
||||
|
||||
TP_ARGS(xprt),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct svc_xprt *, xprt)
|
||||
__field_struct(struct sockaddr_storage, ss)
|
||||
__field(unsigned long, flags)
|
||||
__dynamic_array(unsigned char, addr, xprt != NULL ?
|
||||
xprt->xpt_remotelen : 0)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xprt = xprt,
|
||||
xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
|
||||
__entry->flags = xprt ? xprt->xpt_flags : 0;
|
||||
__entry->xprt = xprt;
|
||||
if (xprt) {
|
||||
memcpy(__get_dynamic_array(addr),
|
||||
&xprt->xpt_remote,
|
||||
xprt->xpt_remotelen);
|
||||
__entry->flags = xprt->xpt_flags;
|
||||
} else
|
||||
__entry->flags = 0;
|
||||
),
|
||||
|
||||
TP_printk("xprt=0x%p addr=%pIScp flags=%s", __entry->xprt,
|
||||
(struct sockaddr *)&__entry->ss,
|
||||
__get_dynamic_array_len(addr) != 0 ?
|
||||
(struct sockaddr *)__get_dynamic_array(addr) : NULL,
|
||||
show_svc_xprt_flags(__entry->flags))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(svc_xprt_event, svc_xprt_dequeue,
|
||||
TP_PROTO(struct svc_xprt *xprt),
|
||||
TP_ARGS(xprt));
|
||||
|
||||
DEFINE_EVENT(svc_xprt_event, svc_xprt_no_write_space,
|
||||
TP_PROTO(struct svc_xprt *xprt),
|
||||
TP_ARGS(xprt));
|
||||
|
||||
TRACE_EVENT(svc_wake_up,
|
||||
TP_PROTO(int pid),
|
||||
|
||||
@@ -592,21 +647,56 @@ TRACE_EVENT(svc_handle_xprt,
|
||||
TP_STRUCT__entry(
|
||||
__field(struct svc_xprt *, xprt)
|
||||
__field(int, len)
|
||||
__field_struct(struct sockaddr_storage, ss)
|
||||
__field(unsigned long, flags)
|
||||
__dynamic_array(unsigned char, addr, xprt != NULL ?
|
||||
xprt->xpt_remotelen : 0)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xprt = xprt;
|
||||
xprt ? memcpy(&__entry->ss, &xprt->xpt_remote, sizeof(__entry->ss)) : memset(&__entry->ss, 0, sizeof(__entry->ss));
|
||||
__entry->len = len;
|
||||
__entry->flags = xprt ? xprt->xpt_flags : 0;
|
||||
if (xprt) {
|
||||
memcpy(__get_dynamic_array(addr),
|
||||
&xprt->xpt_remote,
|
||||
xprt->xpt_remotelen);
|
||||
__entry->flags = xprt->xpt_flags;
|
||||
} else
|
||||
__entry->flags = 0;
|
||||
),
|
||||
|
||||
TP_printk("xprt=0x%p addr=%pIScp len=%d flags=%s", __entry->xprt,
|
||||
(struct sockaddr *)&__entry->ss,
|
||||
__get_dynamic_array_len(addr) != 0 ?
|
||||
(struct sockaddr *)__get_dynamic_array(addr) : NULL,
|
||||
__entry->len, show_svc_xprt_flags(__entry->flags))
|
||||
);
|
||||
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_deferred_event,
|
||||
TP_PROTO(struct svc_deferred_req *dr),
|
||||
|
||||
TP_ARGS(dr),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(__be32, xid)
|
||||
__dynamic_array(unsigned char, addr, dr->addrlen)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xid = *(__be32 *)(dr->args + (dr->xprt_hlen>>2));
|
||||
memcpy(__get_dynamic_array(addr), &dr->addr, dr->addrlen);
|
||||
),
|
||||
|
||||
TP_printk("addr=%pIScp xid=0x%x",
|
||||
(struct sockaddr *)__get_dynamic_array(addr),
|
||||
be32_to_cpu(__entry->xid))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(svc_deferred_event, svc_drop_deferred,
|
||||
TP_PROTO(struct svc_deferred_req *dr),
|
||||
TP_ARGS(dr));
|
||||
DEFINE_EVENT(svc_deferred_event, svc_revisit_deferred,
|
||||
TP_PROTO(struct svc_deferred_req *dr),
|
||||
TP_ARGS(dr));
|
||||
#endif /* _TRACE_SUNRPC_H */
|
||||
|
||||
#include <trace/define_trace.h>
|
||||
|
||||
Reference in New Issue
Block a user