Merge tag 'nfs-for-4.21-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
Pull NFS client updates from Anna Schumaker: "Stable bugfixes: - xprtrdma: Yet another double DMA-unmap # v4.20 Features: - Allow some /proc/sys/sunrpc entries without CONFIG_SUNRPC_DEBUG - Per-xprt rdma receive workqueues - Drop support for FMR memory registration - Make port= mount option optional for RDMA mounts Other bugfixes and cleanups: - Remove unused nfs4_xdev_fs_type declaration - Fix comments for behavior that has changed - Remove generic RPC credentials by switching to 'struct cred' - Fix crossing mountpoints with different auth flavors - Various xprtrdma fixes from testing and auditing the close code - Fixes for disconnect issues when using xprtrdma with krb5 - Clean up and improve xprtrdma trace points - Fix NFS v4.2 async copy reboot recovery" * tag 'nfs-for-4.21-1' of git://git.linux-nfs.org/projects/anna/linux-nfs: (63 commits) sunrpc: convert to DEFINE_SHOW_ATTRIBUTE sunrpc: Add xprt after nfs4_test_session_trunk() sunrpc: convert unnecessary GFP_ATOMIC to GFP_NOFS sunrpc: handle ENOMEM in rpcb_getport_async NFS: remove unnecessary test for IS_ERR(cred) xprtrdma: Prevent leak of rpcrdma_rep objects NFSv4.2 fix async copy reboot recovery xprtrdma: Don't leak freed MRs xprtrdma: Add documenting comment for rpcrdma_buffer_destroy xprtrdma: Replace outdated comment for rpcrdma_ep_post xprtrdma: Update comments in frwr_op_send SUNRPC: Fix some kernel doc complaints SUNRPC: Simplify defining common RPC trace events NFS: Fix NFSv4 symbolic trace point output xprtrdma: Trace mapping, alloc, and dereg failures xprtrdma: Add trace points for calls to transport switch methods xprtrdma: Relocate the xprtrdma_mr_map trace points xprtrdma: Clean up of xprtrdma chunk trace points xprtrdma: Remove unused fields from rpcrdma_ia xprtrdma: Cull dprintk() call sites ...
此提交包含在:
@@ -10,6 +10,7 @@
|
||||
#if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_RPCRDMA_H
|
||||
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/tracepoint.h>
|
||||
#include <trace/events/rdma.h>
|
||||
|
||||
@@ -97,7 +98,6 @@ DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
__field(unsigned int, client_id)
|
||||
__field(const void *, mr)
|
||||
__field(unsigned int, pos)
|
||||
__field(int, nents)
|
||||
__field(u32, handle)
|
||||
@@ -109,7 +109,6 @@ DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
|
||||
TP_fast_assign(
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->client_id = task->tk_client->cl_clid;
|
||||
__entry->mr = mr;
|
||||
__entry->pos = pos;
|
||||
__entry->nents = mr->mr_nents;
|
||||
__entry->handle = mr->mr_handle;
|
||||
@@ -118,8 +117,8 @@ DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
|
||||
__entry->nsegs = nsegs;
|
||||
),
|
||||
|
||||
TP_printk("task:%u@%u mr=%p pos=%u %u@0x%016llx:0x%08x (%s)",
|
||||
__entry->task_id, __entry->client_id, __entry->mr,
|
||||
TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
|
||||
__entry->task_id, __entry->client_id,
|
||||
__entry->pos, __entry->length,
|
||||
(unsigned long long)__entry->offset, __entry->handle,
|
||||
__entry->nents < __entry->nsegs ? "more" : "last"
|
||||
@@ -127,7 +126,7 @@ DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
|
||||
);
|
||||
|
||||
#define DEFINE_RDCH_EVENT(name) \
|
||||
DEFINE_EVENT(xprtrdma_rdch_event, name, \
|
||||
DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
|
||||
TP_PROTO( \
|
||||
const struct rpc_task *task, \
|
||||
unsigned int pos, \
|
||||
@@ -148,7 +147,6 @@ DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
__field(unsigned int, client_id)
|
||||
__field(const void *, mr)
|
||||
__field(int, nents)
|
||||
__field(u32, handle)
|
||||
__field(u32, length)
|
||||
@@ -159,7 +157,6 @@ DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
|
||||
TP_fast_assign(
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->client_id = task->tk_client->cl_clid;
|
||||
__entry->mr = mr;
|
||||
__entry->nents = mr->mr_nents;
|
||||
__entry->handle = mr->mr_handle;
|
||||
__entry->length = mr->mr_length;
|
||||
@@ -167,8 +164,8 @@ DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
|
||||
__entry->nsegs = nsegs;
|
||||
),
|
||||
|
||||
TP_printk("task:%u@%u mr=%p %u@0x%016llx:0x%08x (%s)",
|
||||
__entry->task_id, __entry->client_id, __entry->mr,
|
||||
TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
|
||||
__entry->task_id, __entry->client_id,
|
||||
__entry->length, (unsigned long long)__entry->offset,
|
||||
__entry->handle,
|
||||
__entry->nents < __entry->nsegs ? "more" : "last"
|
||||
@@ -176,7 +173,7 @@ DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
|
||||
);
|
||||
|
||||
#define DEFINE_WRCH_EVENT(name) \
|
||||
DEFINE_EVENT(xprtrdma_wrch_event, name, \
|
||||
DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
|
||||
TP_PROTO( \
|
||||
const struct rpc_task *task, \
|
||||
struct rpcrdma_mr *mr, \
|
||||
@@ -234,6 +231,18 @@ DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
|
||||
), \
|
||||
TP_ARGS(wc, frwr))
|
||||
|
||||
TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
|
||||
TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
|
||||
TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
|
||||
TRACE_DEFINE_ENUM(DMA_NONE);
|
||||
|
||||
#define xprtrdma_show_direction(x) \
|
||||
__print_symbolic(x, \
|
||||
{ DMA_BIDIRECTIONAL, "BIDIR" }, \
|
||||
{ DMA_TO_DEVICE, "TO_DEVICE" }, \
|
||||
{ DMA_FROM_DEVICE, "FROM_DEVICE" }, \
|
||||
{ DMA_NONE, "NONE" })
|
||||
|
||||
DECLARE_EVENT_CLASS(xprtrdma_mr,
|
||||
TP_PROTO(
|
||||
const struct rpcrdma_mr *mr
|
||||
@@ -246,6 +255,7 @@ DECLARE_EVENT_CLASS(xprtrdma_mr,
|
||||
__field(u32, handle)
|
||||
__field(u32, length)
|
||||
__field(u64, offset)
|
||||
__field(u32, dir)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -253,12 +263,13 @@ DECLARE_EVENT_CLASS(xprtrdma_mr,
|
||||
__entry->handle = mr->mr_handle;
|
||||
__entry->length = mr->mr_length;
|
||||
__entry->offset = mr->mr_offset;
|
||||
__entry->dir = mr->mr_dir;
|
||||
),
|
||||
|
||||
TP_printk("mr=%p %u@0x%016llx:0x%08x",
|
||||
TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)",
|
||||
__entry->mr, __entry->length,
|
||||
(unsigned long long)__entry->offset,
|
||||
__entry->handle
|
||||
(unsigned long long)__entry->offset, __entry->handle,
|
||||
xprtrdma_show_direction(__entry->dir)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -371,11 +382,13 @@ TRACE_EVENT(xprtrdma_disconnect,
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_conn_start);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_conn_tout);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_create);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_destroy);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_op_destroy);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_remove);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_reinsert);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_reconnect);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_op_close);
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_op_connect);
|
||||
|
||||
TRACE_EVENT(xprtrdma_qp_event,
|
||||
TP_PROTO(
|
||||
@@ -437,9 +450,9 @@ TRACE_EVENT(xprtrdma_createmrs,
|
||||
|
||||
DEFINE_RXPRT_EVENT(xprtrdma_nomrs);
|
||||
|
||||
DEFINE_RDCH_EVENT(xprtrdma_read_chunk);
|
||||
DEFINE_WRCH_EVENT(xprtrdma_write_chunk);
|
||||
DEFINE_WRCH_EVENT(xprtrdma_reply_chunk);
|
||||
DEFINE_RDCH_EVENT(read);
|
||||
DEFINE_WRCH_EVENT(write);
|
||||
DEFINE_WRCH_EVENT(reply);
|
||||
|
||||
TRACE_DEFINE_ENUM(rpcrdma_noch);
|
||||
TRACE_DEFINE_ENUM(rpcrdma_readch);
|
||||
@@ -570,7 +583,7 @@ TRACE_EVENT(xprtrdma_post_recvs,
|
||||
__entry->r_xprt = r_xprt;
|
||||
__entry->count = count;
|
||||
__entry->status = status;
|
||||
__entry->posted = r_xprt->rx_buf.rb_posted_receives;
|
||||
__entry->posted = r_xprt->rx_ep.rep_receive_count;
|
||||
__assign_str(addr, rpcrdma_addrstr(r_xprt));
|
||||
__assign_str(port, rpcrdma_portstr(r_xprt));
|
||||
),
|
||||
@@ -651,12 +664,147 @@ DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
|
||||
DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
|
||||
DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
|
||||
|
||||
TRACE_EVENT(xprtrdma_frwr_alloc,
|
||||
TP_PROTO(
|
||||
const struct rpcrdma_mr *mr,
|
||||
int rc
|
||||
),
|
||||
|
||||
TP_ARGS(mr, rc),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const void *, mr)
|
||||
__field(int, rc)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mr = mr;
|
||||
__entry->rc = rc;
|
||||
),
|
||||
|
||||
TP_printk("mr=%p: rc=%d",
|
||||
__entry->mr, __entry->rc
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xprtrdma_frwr_dereg,
|
||||
TP_PROTO(
|
||||
const struct rpcrdma_mr *mr,
|
||||
int rc
|
||||
),
|
||||
|
||||
TP_ARGS(mr, rc),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const void *, mr)
|
||||
__field(u32, handle)
|
||||
__field(u32, length)
|
||||
__field(u64, offset)
|
||||
__field(u32, dir)
|
||||
__field(int, rc)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mr = mr;
|
||||
__entry->handle = mr->mr_handle;
|
||||
__entry->length = mr->mr_length;
|
||||
__entry->offset = mr->mr_offset;
|
||||
__entry->dir = mr->mr_dir;
|
||||
__entry->rc = rc;
|
||||
),
|
||||
|
||||
TP_printk("mr=%p %u@0x%016llx:0x%08x (%s): rc=%d",
|
||||
__entry->mr, __entry->length,
|
||||
(unsigned long long)__entry->offset, __entry->handle,
|
||||
xprtrdma_show_direction(__entry->dir),
|
||||
__entry->rc
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xprtrdma_frwr_sgerr,
|
||||
TP_PROTO(
|
||||
const struct rpcrdma_mr *mr,
|
||||
int sg_nents
|
||||
),
|
||||
|
||||
TP_ARGS(mr, sg_nents),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const void *, mr)
|
||||
__field(u64, addr)
|
||||
__field(u32, dir)
|
||||
__field(int, nents)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mr = mr;
|
||||
__entry->addr = mr->mr_sg->dma_address;
|
||||
__entry->dir = mr->mr_dir;
|
||||
__entry->nents = sg_nents;
|
||||
),
|
||||
|
||||
TP_printk("mr=%p dma addr=0x%llx (%s) sg_nents=%d",
|
||||
__entry->mr, __entry->addr,
|
||||
xprtrdma_show_direction(__entry->dir),
|
||||
__entry->nents
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xprtrdma_frwr_maperr,
|
||||
TP_PROTO(
|
||||
const struct rpcrdma_mr *mr,
|
||||
int num_mapped
|
||||
),
|
||||
|
||||
TP_ARGS(mr, num_mapped),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const void *, mr)
|
||||
__field(u64, addr)
|
||||
__field(u32, dir)
|
||||
__field(int, num_mapped)
|
||||
__field(int, nents)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mr = mr;
|
||||
__entry->addr = mr->mr_sg->dma_address;
|
||||
__entry->dir = mr->mr_dir;
|
||||
__entry->num_mapped = num_mapped;
|
||||
__entry->nents = mr->mr_nents;
|
||||
),
|
||||
|
||||
TP_printk("mr=%p dma addr=0x%llx (%s) nents=%d of %d",
|
||||
__entry->mr, __entry->addr,
|
||||
xprtrdma_show_direction(__entry->dir),
|
||||
__entry->num_mapped, __entry->nents
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_MR_EVENT(localinv);
|
||||
DEFINE_MR_EVENT(map);
|
||||
DEFINE_MR_EVENT(unmap);
|
||||
DEFINE_MR_EVENT(remoteinv);
|
||||
DEFINE_MR_EVENT(recycle);
|
||||
|
||||
TRACE_EVENT(xprtrdma_dma_maperr,
|
||||
TP_PROTO(
|
||||
u64 addr
|
||||
),
|
||||
|
||||
TP_ARGS(addr),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, addr)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->addr = addr;
|
||||
),
|
||||
|
||||
TP_printk("dma addr=0x%llx\n", __entry->addr)
|
||||
);
|
||||
|
||||
/**
|
||||
** Reply events
|
||||
**/
|
||||
@@ -824,7 +972,7 @@ TRACE_EVENT(xprtrdma_decode_seg,
|
||||
** Allocation/release of rpcrdma_reqs and rpcrdma_reps
|
||||
**/
|
||||
|
||||
TRACE_EVENT(xprtrdma_allocate,
|
||||
TRACE_EVENT(xprtrdma_op_allocate,
|
||||
TP_PROTO(
|
||||
const struct rpc_task *task,
|
||||
const struct rpcrdma_req *req
|
||||
@@ -854,7 +1002,7 @@ TRACE_EVENT(xprtrdma_allocate,
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xprtrdma_rpc_done,
|
||||
TRACE_EVENT(xprtrdma_op_free,
|
||||
TP_PROTO(
|
||||
const struct rpc_task *task,
|
||||
const struct rpcrdma_req *req
|
||||
@@ -917,6 +1065,34 @@ TRACE_EVENT(xprtrdma_cb_setup,
|
||||
DEFINE_CB_EVENT(xprtrdma_cb_call);
|
||||
DEFINE_CB_EVENT(xprtrdma_cb_reply);
|
||||
|
||||
TRACE_EVENT(xprtrdma_leaked_rep,
|
||||
TP_PROTO(
|
||||
const struct rpc_rqst *rqst,
|
||||
const struct rpcrdma_rep *rep
|
||||
),
|
||||
|
||||
TP_ARGS(rqst, rep),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
__field(unsigned int, client_id)
|
||||
__field(u32, xid)
|
||||
__field(const void *, rep)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->task_id = rqst->rq_task->tk_pid;
|
||||
__entry->client_id = rqst->rq_task->tk_client->cl_clid;
|
||||
__entry->xid = be32_to_cpu(rqst->rq_xid);
|
||||
__entry->rep = rep;
|
||||
),
|
||||
|
||||
TP_printk("task:%u@%u xid=0x%08x rep=%p",
|
||||
__entry->task_id, __entry->client_id, __entry->xid,
|
||||
__entry->rep
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
** Server-side RPC/RDMA events
|
||||
**/
|
||||
|
@@ -16,40 +16,6 @@
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_task_status,
|
||||
|
||||
TP_PROTO(struct rpc_task *task),
|
||||
|
||||
TP_ARGS(task),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, task_id)
|
||||
__field(unsigned int, client_id)
|
||||
__field(int, status)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->task_id = task->tk_pid;
|
||||
__entry->client_id = task->tk_client->cl_clid;
|
||||
__entry->status = task->tk_status;
|
||||
),
|
||||
|
||||
TP_printk("task:%u@%u status=%d",
|
||||
__entry->task_id, __entry->client_id,
|
||||
__entry->status)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_status, rpc_call_status,
|
||||
TP_PROTO(struct rpc_task *task),
|
||||
|
||||
TP_ARGS(task)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_status, rpc_bind_status,
|
||||
TP_PROTO(struct rpc_task *task),
|
||||
|
||||
TP_ARGS(task)
|
||||
);
|
||||
|
||||
TRACE_EVENT(rpc_connect_status,
|
||||
TP_PROTO(const struct rpc_task *task),
|
||||
|
||||
TP_ARGS(task),
|
||||
@@ -70,6 +36,16 @@ TRACE_EVENT(rpc_connect_status,
|
||||
__entry->task_id, __entry->client_id,
|
||||
__entry->status)
|
||||
);
|
||||
#define DEFINE_RPC_STATUS_EVENT(name) \
|
||||
DEFINE_EVENT(rpc_task_status, rpc_##name##_status, \
|
||||
TP_PROTO( \
|
||||
const struct rpc_task *task \
|
||||
), \
|
||||
TP_ARGS(task))
|
||||
|
||||
DEFINE_RPC_STATUS_EVENT(call);
|
||||
DEFINE_RPC_STATUS_EVENT(bind);
|
||||
DEFINE_RPC_STATUS_EVENT(connect);
|
||||
|
||||
TRACE_EVENT(rpc_request,
|
||||
TP_PROTO(const struct rpc_task *task),
|
||||
@@ -134,30 +110,17 @@ DECLARE_EVENT_CLASS(rpc_task_running,
|
||||
__entry->action
|
||||
)
|
||||
);
|
||||
#define DEFINE_RPC_RUNNING_EVENT(name) \
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_##name, \
|
||||
TP_PROTO( \
|
||||
const struct rpc_task *task, \
|
||||
const void *action \
|
||||
), \
|
||||
TP_ARGS(task, action))
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_begin,
|
||||
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_run_action,
|
||||
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_running, rpc_task_complete,
|
||||
|
||||
TP_PROTO(const struct rpc_task *task, const void *action),
|
||||
|
||||
TP_ARGS(task, action)
|
||||
|
||||
);
|
||||
DEFINE_RPC_RUNNING_EVENT(begin);
|
||||
DEFINE_RPC_RUNNING_EVENT(run_action);
|
||||
DEFINE_RPC_RUNNING_EVENT(complete);
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
|
||||
@@ -195,22 +158,16 @@ DECLARE_EVENT_CLASS(rpc_task_queued,
|
||||
__get_str(q_name)
|
||||
)
|
||||
);
|
||||
#define DEFINE_RPC_QUEUED_EVENT(name) \
|
||||
DEFINE_EVENT(rpc_task_queued, rpc_task_##name, \
|
||||
TP_PROTO( \
|
||||
const struct rpc_task *task, \
|
||||
const struct rpc_wait_queue *q \
|
||||
), \
|
||||
TP_ARGS(task, q))
|
||||
|
||||
DEFINE_EVENT(rpc_task_queued, rpc_task_sleep,
|
||||
|
||||
TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
|
||||
TP_ARGS(task, q)
|
||||
|
||||
);
|
||||
|
||||
DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
|
||||
|
||||
TP_PROTO(const struct rpc_task *task, const struct rpc_wait_queue *q),
|
||||
|
||||
TP_ARGS(task, q)
|
||||
|
||||
);
|
||||
DEFINE_RPC_QUEUED_EVENT(sleep);
|
||||
DEFINE_RPC_QUEUED_EVENT(wakeup);
|
||||
|
||||
TRACE_EVENT(rpc_stats_latency,
|
||||
|
||||
@@ -410,7 +367,11 @@ DEFINE_RPC_SOCKET_EVENT(rpc_socket_close);
|
||||
DEFINE_RPC_SOCKET_EVENT(rpc_socket_shutdown);
|
||||
|
||||
DECLARE_EVENT_CLASS(rpc_xprt_event,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_PROTO(
|
||||
const struct rpc_xprt *xprt,
|
||||
__be32 xid,
|
||||
int status
|
||||
),
|
||||
|
||||
TP_ARGS(xprt, xid, status),
|
||||
|
||||
@@ -432,22 +393,19 @@ DECLARE_EVENT_CLASS(rpc_xprt_event,
|
||||
__get_str(port), __entry->xid,
|
||||
__entry->status)
|
||||
);
|
||||
#define DEFINE_RPC_XPRT_EVENT(name) \
|
||||
DEFINE_EVENT(rpc_xprt_event, xprt_##name, \
|
||||
TP_PROTO( \
|
||||
const struct rpc_xprt *xprt, \
|
||||
__be32 xid, \
|
||||
int status \
|
||||
), \
|
||||
TP_ARGS(xprt, xid, status))
|
||||
|
||||
DEFINE_EVENT(rpc_xprt_event, xprt_timer,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_ARGS(xprt, xid, status));
|
||||
|
||||
DEFINE_EVENT(rpc_xprt_event, xprt_lookup_rqst,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_ARGS(xprt, xid, status));
|
||||
|
||||
DEFINE_EVENT(rpc_xprt_event, xprt_transmit,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_ARGS(xprt, xid, status));
|
||||
|
||||
DEFINE_EVENT(rpc_xprt_event, xprt_complete_rqst,
|
||||
TP_PROTO(struct rpc_xprt *xprt, __be32 xid, int status),
|
||||
TP_ARGS(xprt, xid, status));
|
||||
DEFINE_RPC_XPRT_EVENT(timer);
|
||||
DEFINE_RPC_XPRT_EVENT(lookup_rqst);
|
||||
DEFINE_RPC_XPRT_EVENT(transmit);
|
||||
DEFINE_RPC_XPRT_EVENT(complete_rqst);
|
||||
|
||||
TRACE_EVENT(xprt_ping,
|
||||
TP_PROTO(const struct rpc_xprt *xprt, int status),
|
||||
@@ -589,7 +547,9 @@ TRACE_EVENT(svc_process,
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_rqst_event,
|
||||
|
||||
TP_PROTO(struct svc_rqst *rqst),
|
||||
TP_PROTO(
|
||||
const struct svc_rqst *rqst
|
||||
),
|
||||
|
||||
TP_ARGS(rqst),
|
||||
|
||||
@@ -609,14 +569,15 @@ DECLARE_EVENT_CLASS(svc_rqst_event,
|
||||
__get_str(addr), __entry->xid,
|
||||
show_rqstp_flags(__entry->flags))
|
||||
);
|
||||
#define DEFINE_SVC_RQST_EVENT(name) \
|
||||
DEFINE_EVENT(svc_rqst_event, svc_##name, \
|
||||
TP_PROTO( \
|
||||
const struct svc_rqst *rqst \
|
||||
), \
|
||||
TP_ARGS(rqst))
|
||||
|
||||
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));
|
||||
DEFINE_SVC_RQST_EVENT(defer);
|
||||
DEFINE_SVC_RQST_EVENT(drop);
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_rqst_status,
|
||||
|
||||
@@ -803,7 +764,9 @@ TRACE_EVENT(svc_stats_latency,
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(svc_deferred_event,
|
||||
TP_PROTO(struct svc_deferred_req *dr),
|
||||
TP_PROTO(
|
||||
const struct svc_deferred_req *dr
|
||||
),
|
||||
|
||||
TP_ARGS(dr),
|
||||
|
||||
@@ -820,13 +783,16 @@ DECLARE_EVENT_CLASS(svc_deferred_event,
|
||||
|
||||
TP_printk("addr=%s xid=0x%08x", __get_str(addr), __entry->xid)
|
||||
);
|
||||
#define DEFINE_SVC_DEFERRED_EVENT(name) \
|
||||
DEFINE_EVENT(svc_deferred_event, svc_##name##_deferred, \
|
||||
TP_PROTO( \
|
||||
const struct svc_deferred_req *dr \
|
||||
), \
|
||||
TP_ARGS(dr))
|
||||
|
||||
DEFINE_SVC_DEFERRED_EVENT(drop);
|
||||
DEFINE_SVC_DEFERRED_EVENT(revisit);
|
||||
|
||||
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>
|
||||
|
新增問題並參考
封鎖使用者