Merge tag 'nfs-for-4.17-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
Pull NFS client updates from Anna Schumaker: "Stable bugfixes: - xprtrdma: Fix corner cases when handling device removal # v4.12+ - xprtrdma: Fix latency regression on NUMA NFS/RDMA clients # v4.15+ Features: - New sunrpc tracepoint for RPC pings - Finer grained NFSv4 attribute checking - Don't unnecessarily return NFS v4 delegations Other bugfixes and cleanups: - Several other small NFSoRDMA cleanups - Improvements to the sunrpc RTT measurements - A few sunrpc tracepoint cleanups - Various fixes for NFS v4 lock notifications - Various sunrpc and NFS v4 XDR encoding cleanups - Switch to the ida_simple API - Fix NFSv4.1 exclusive create - Forget acl cache after setattr operation - Don't advance the nfs_entry readdir cookie if xdr decoding fails" * tag 'nfs-for-4.17-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (47 commits) NFS: advance nfs_entry cookie only after decoding completes successfully NFSv3/acl: forget acl cache after setattr NFSv4.1: Fix exclusive create NFSv4: Declare the size up to date after it was set. nfs: Use ida_simple API NFSv4: Fix the nfs_inode_set_delegation() arguments NFSv4: Clean up CB_GETATTR encoding NFSv4: Don't ask for attributes when ACCESS is protected by a delegation NFSv4: Add a helper to encode/decode struct timespec NFSv4: Clean up encode_attrs NFSv4; Clean up XDR encoding of type bitmap4 NFSv4: Allow GFP_NOIO sleeps in decode_attr_owner/decode_attr_group SUNRPC: Add a helper for encoding opaque data inline SUNRPC: Add helpers for decoding opaque and string types NFSv4: Ignore change attribute invalidations if we hold a delegation NFS: More fine grained attribute tracking NFS: Don't force unnecessary cache invalidation in nfs_update_inode() NFS: Don't redirty the attribute cache in nfs_wcc_update_inode() NFS: Don't force a revalidation of all attributes if change is missing NFS: Convert NFS_INO_INVALID flags to unsigned long ...
This commit is contained in:
@@ -50,9 +50,9 @@ DEFINE_EVENT(rpc_task_status, rpc_bind_status,
|
||||
);
|
||||
|
||||
TRACE_EVENT(rpc_connect_status,
|
||||
TP_PROTO(struct rpc_task *task, int status),
|
||||
TP_PROTO(const struct rpc_task *task),
|
||||
|
||||
TP_ARGS(task, status),
|
||||
TP_ARGS(task),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
@@ -63,7 +63,7 @@ TRACE_EVENT(rpc_connect_status,
|
||||
TP_fast_assign(
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->client_id = task->tk_client->cl_clid;
|
||||
__entry->status = status;
|
||||
__entry->status = task->tk_status;
|
||||
),
|
||||
|
||||
TP_printk("task:%u@%u status=%d",
|
||||
@@ -103,9 +103,9 @@ TRACE_EVENT(rpc_request,
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_task_running,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(clnt, task, action),
|
||||
TP_ARGS(task, action),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
@@ -117,7 +117,8 @@ DECLARE_EVENT_CLASS(rpc_task_running,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->client_id = clnt ? clnt->cl_clid : -1;
|
||||
__entry->client_id = task->tk_client ?
|
||||
task->tk_client->cl_clid : -1;
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->action = action;
|
||||
__entry->runstate = task->tk_runstate;
|
||||
@@ -136,33 +137,33 @@ DECLARE_EVENT_CLASS(rpc_task_running,
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_begin,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(clnt, task, action)
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_run_action,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(clnt, task, action)
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_complete,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const void *action),
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(clnt, task, action)
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
|
||||
TP_ARGS(clnt, task, q),
|
||||
TP_ARGS(task, q),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
@@ -175,7 +176,8 @@ DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->client_id = clnt ? clnt->cl_clid : -1;
|
||||
__entry->client_id = task->tk_client ?
|
||||
task->tk_client->cl_clid : -1;
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->timeout = task->tk_timeout;
|
||||
__entry->runstate = task->tk_runstate;
|
||||
@@ -196,20 +198,65 @@ DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
|
||||
DEFINE_EVENT(rpc_task_queued, rpc_task_sleep,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
|
||||
TP_ARGS(clnt, task, q)
|
||||
TP_ARGS(task, q)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
|
||||
|
||||
TP_PROTO(const struct rpc_clnt *clnt, const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
|
||||
TP_ARGS(clnt, task, q)
|
||||
TP_ARGS(task, q)
|
||||
|
||||
);
|
||||
|
||||
TRACE_EVENT(rpc_stats_latency,
|
||||
|
||||
TP_PROTO(
|
||||
const struct rpc_task *task,
|
||||
ktime_t backlog,
|
||||
ktime_t rtt,
|
||||
ktime_t execute
|
||||
),
|
||||
|
||||
TP_ARGS(task, backlog, rtt, execute),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(u32, xid)
|
||||
__field(int, version)
|
||||
__string(progname, task->tk_client->cl_program->name)
|
||||
__string(procname, rpc_proc_name(task))
|
||||
__field(unsigned long, backlog)
|
||||
__field(unsigned long, rtt)
|
||||
__field(unsigned long, execute)
|
||||
__string(addr,
|
||||
task->tk_xprt->address_strings[RPC_DISPLAY_ADDR])
|
||||
__string(port,
|
||||
task->tk_xprt->address_strings[RPC_DISPLAY_PORT])
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->xid = be32_to_cpu(task->tk_rqstp->rq_xid);
|
||||
__entry->version = task->tk_client->cl_vers;
|
||||
__assign_str(progname, task->tk_client->cl_program->name)
|
||||
__assign_str(procname, rpc_proc_name(task))
|
||||
__entry->backlog = ktime_to_us(backlog);
|
||||
__entry->rtt = ktime_to_us(rtt);
|
||||
__entry->execute = ktime_to_us(execute);
|
||||
__assign_str(addr,
|
||||
task->tk_xprt->address_strings[RPC_DISPLAY_ADDR]);
|
||||
__assign_str(port,
|
||||
task->tk_xprt->address_strings[RPC_DISPLAY_PORT]);
|
||||
),
|
||||
|
||||
TP_printk("peer=[%s]:%s xid=0x%08x %sv%d %s backlog=%lu rtt=%lu execute=%lu",
|
||||
__get_str(addr), __get_str(port), __entry->xid,
|
||||
__get_str(progname), __entry->version, __get_str(procname),
|
||||
__entry->backlog, __entry->rtt, __entry->execute)
|
||||
);
|
||||
|
||||
/*
|
||||
* First define the enums in the below macros to be exported to userspace
|
||||
* via TRACE_DEFINE_ENUM().
|
||||
@@ -406,6 +453,27 @@ DEFINE_EVENT(rpc_xprt_event, xprt_complete_rqst,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_ARGS(xprt, xid, status));
|
||||
|
||||
TRACE_EVENT(xprt_ping,
|
||||
TP_PROTO(const struct rpc_xprt *xprt, int status),
|
||||
|
||||
TP_ARGS(xprt, status),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, status)
|
||||
__string(addr, xprt->address_strings[RPC_DISPLAY_ADDR])
|
||||
__string(port, xprt->address_strings[RPC_DISPLAY_PORT])
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->status = status;
|
||||
__assign_str(addr, xprt->address_strings[RPC_DISPLAY_ADDR]);
|
||||
__assign_str(port, xprt->address_strings[RPC_DISPLAY_PORT]);
|
||||
),
|
||||
|
||||
TP_printk("peer=[%s]:%s status=%d",
|
||||
__get_str(addr), __get_str(port), __entry->status)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xs_tcp_data_ready,
|
||||
TP_PROTO(struct rpc_xprt *xprt, int err, unsigned int total),
|
||||
|
||||
|
Reference in New Issue
Block a user