mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Adding stateid information to tracepoints
Operations to which stateid information is added: close, delegreturn, open, read, setattr, layoutget, layoutcommit, test_stateid, write, lock, locku, lockt Format is "stateid=<seqid>:<crc32 hash stateid.other>", also "openstateid=", "layoutstateid=", and "lockstateid=" for open_file, layoutget, set_lock tracepoints. New function is added to internal.h, nfs_stateid_hash(), to compute the hash trace_nfs4_setattr() is moved from nfs4_do_setattr() to _nfs4_do_setattr() to get access to stateid. trace_nfs4_setattr and trace_nfs4_delegreturn are changed from INODE_EVENT to new event type, INODE_STATEID_EVENT which is same as INODE_EVENT but adds stateid information for locking tracepoints, moved trace_nfs4_set_lock() into _nfs4_do_setlk() to get access to stateid information, and removed trace_nfs4_lock_reclaim(), trace_nfs4_lock_expired() as they call into _nfs4_do_setlk() and both were previously same LOCK_EVENT type. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
		
							parent
							
								
									74bf8efb5f
								
							
						
					
					
						commit
						48c9579a1a
					
				
					 3 changed files with 245 additions and 32 deletions
				
			
		| 
						 | 
					@ -696,9 +696,18 @@ static inline u32 nfs_fhandle_hash(const struct nfs_fh *fh)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return ~crc32_le(0xFFFFFFFF, &fh->data[0], fh->size);
 | 
						return ~crc32_le(0xFFFFFFFF, &fh->data[0], fh->size);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					static inline u32 nfs_stateid_hash(const nfs4_stateid *stateid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return ~crc32_le(0xFFFFFFFF, &stateid->other[0],
 | 
				
			||||||
 | 
									NFS4_STATEID_OTHER_SIZE);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static inline u32 nfs_fhandle_hash(const struct nfs_fh *fh)
 | 
					static inline u32 nfs_fhandle_hash(const struct nfs_fh *fh)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					static inline u32 nfs_stateid_hash(nfs4_stateid *stateid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2703,6 +2703,7 @@ static int _nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
 | 
				
			||||||
	status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1);
 | 
						status = nfs4_call_sync(server->client, server, &msg, &arg.seq_args, &res.seq_res, 1);
 | 
				
			||||||
	if (status == 0 && state != NULL)
 | 
						if (status == 0 && state != NULL)
 | 
				
			||||||
		renew_lease(server, timestamp);
 | 
							renew_lease(server, timestamp);
 | 
				
			||||||
 | 
						trace_nfs4_setattr(inode, &arg.stateid, status);
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2719,7 +2720,6 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		err = _nfs4_do_setattr(inode, cred, fattr, sattr, state, ilabel, olabel);
 | 
							err = _nfs4_do_setattr(inode, cred, fattr, sattr, state, ilabel, olabel);
 | 
				
			||||||
		trace_nfs4_setattr(inode, err);
 | 
					 | 
				
			||||||
		switch (err) {
 | 
							switch (err) {
 | 
				
			||||||
		case -NFS4ERR_OPENMODE:
 | 
							case -NFS4ERR_OPENMODE:
 | 
				
			||||||
			if (!(sattr->ia_valid & ATTR_SIZE)) {
 | 
								if (!(sattr->ia_valid & ATTR_SIZE)) {
 | 
				
			||||||
| 
						 | 
					@ -5426,7 +5426,7 @@ int nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, const nfs4
 | 
				
			||||||
	int err;
 | 
						int err;
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		err = _nfs4_proc_delegreturn(inode, cred, stateid, issync);
 | 
							err = _nfs4_proc_delegreturn(inode, cred, stateid, issync);
 | 
				
			||||||
		trace_nfs4_delegreturn(inode, err);
 | 
							trace_nfs4_delegreturn(inode, stateid, err);
 | 
				
			||||||
		switch (err) {
 | 
							switch (err) {
 | 
				
			||||||
			case -NFS4ERR_STALE_STATEID:
 | 
								case -NFS4ERR_STALE_STATEID:
 | 
				
			||||||
			case -NFS4ERR_EXPIRED:
 | 
								case -NFS4ERR_EXPIRED:
 | 
				
			||||||
| 
						 | 
					@ -5936,6 +5936,7 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
 | 
				
			||||||
		data->cancelled = 1;
 | 
							data->cancelled = 1;
 | 
				
			||||||
	rpc_put_task(task);
 | 
						rpc_put_task(task);
 | 
				
			||||||
	dprintk("%s: done, ret = %d!\n", __func__, ret);
 | 
						dprintk("%s: done, ret = %d!\n", __func__, ret);
 | 
				
			||||||
 | 
						trace_nfs4_set_lock(fl, state, &data->res.stateid, cmd, ret);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5952,7 +5953,6 @@ static int nfs4_lock_reclaim(struct nfs4_state *state, struct file_lock *request
 | 
				
			||||||
		if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
 | 
							if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		err = _nfs4_do_setlk(state, F_SETLK, request, NFS_LOCK_RECLAIM);
 | 
							err = _nfs4_do_setlk(state, F_SETLK, request, NFS_LOCK_RECLAIM);
 | 
				
			||||||
		trace_nfs4_lock_reclaim(request, state, F_SETLK, err);
 | 
					 | 
				
			||||||
		if (err != -NFS4ERR_DELAY)
 | 
							if (err != -NFS4ERR_DELAY)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		nfs4_handle_exception(server, err, &exception);
 | 
							nfs4_handle_exception(server, err, &exception);
 | 
				
			||||||
| 
						 | 
					@ -5979,7 +5979,6 @@ static int nfs4_lock_expired(struct nfs4_state *state, struct file_lock *request
 | 
				
			||||||
		if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
 | 
							if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		err = _nfs4_do_setlk(state, F_SETLK, request, NFS_LOCK_EXPIRED);
 | 
							err = _nfs4_do_setlk(state, F_SETLK, request, NFS_LOCK_EXPIRED);
 | 
				
			||||||
		trace_nfs4_lock_expired(request, state, F_SETLK, err);
 | 
					 | 
				
			||||||
		switch (err) {
 | 
							switch (err) {
 | 
				
			||||||
		default:
 | 
							default:
 | 
				
			||||||
			goto out;
 | 
								goto out;
 | 
				
			||||||
| 
						 | 
					@ -6087,7 +6086,6 @@ static int nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		err = _nfs4_proc_setlk(state, cmd, request);
 | 
							err = _nfs4_proc_setlk(state, cmd, request);
 | 
				
			||||||
		trace_nfs4_set_lock(request, state, cmd, err);
 | 
					 | 
				
			||||||
		if (err == -NFS4ERR_DENIED)
 | 
							if (err == -NFS4ERR_DENIED)
 | 
				
			||||||
			err = -EAGAIN;
 | 
								err = -EAGAIN;
 | 
				
			||||||
		err = nfs4_handle_exception(NFS_SERVER(state->inode),
 | 
							err = nfs4_handle_exception(NFS_SERVER(state->inode),
 | 
				
			||||||
| 
						 | 
					@ -7994,6 +7992,7 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
 | 
				
			||||||
	trace_nfs4_layoutget(lgp->args.ctx,
 | 
						trace_nfs4_layoutget(lgp->args.ctx,
 | 
				
			||||||
			&lgp->args.range,
 | 
								&lgp->args.range,
 | 
				
			||||||
			&lgp->res.range,
 | 
								&lgp->res.range,
 | 
				
			||||||
 | 
								&lgp->res.stateid,
 | 
				
			||||||
			status);
 | 
								status);
 | 
				
			||||||
	/* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
 | 
						/* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
 | 
				
			||||||
	if (status == 0 && lgp->res.layoutp->len)
 | 
						if (status == 0 && lgp->res.layoutp->len)
 | 
				
			||||||
| 
						 | 
					@ -8101,7 +8100,7 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync)
 | 
				
			||||||
		return PTR_ERR(task);
 | 
							return PTR_ERR(task);
 | 
				
			||||||
	if (sync)
 | 
						if (sync)
 | 
				
			||||||
		status = task->tk_status;
 | 
							status = task->tk_status;
 | 
				
			||||||
	trace_nfs4_layoutreturn(lrp->args.inode, status);
 | 
						trace_nfs4_layoutreturn(lrp->args.inode, &lrp->args.stateid, status);
 | 
				
			||||||
	dprintk("<-- %s status=%d\n", __func__, status);
 | 
						dprintk("<-- %s status=%d\n", __func__, status);
 | 
				
			||||||
	rpc_put_task(task);
 | 
						rpc_put_task(task);
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
| 
						 | 
					@ -8249,7 +8248,7 @@ nfs4_proc_layoutcommit(struct nfs4_layoutcommit_data *data, bool sync)
 | 
				
			||||||
		return PTR_ERR(task);
 | 
							return PTR_ERR(task);
 | 
				
			||||||
	if (sync)
 | 
						if (sync)
 | 
				
			||||||
		status = task->tk_status;
 | 
							status = task->tk_status;
 | 
				
			||||||
	trace_nfs4_layoutcommit(data->args.inode, status);
 | 
						trace_nfs4_layoutcommit(data->args.inode, &data->args.stateid, status);
 | 
				
			||||||
	dprintk("%s: status %d\n", __func__, status);
 | 
						dprintk("%s: status %d\n", __func__, status);
 | 
				
			||||||
	rpc_put_task(task);
 | 
						rpc_put_task(task);
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -399,6 +399,10 @@ DECLARE_EVENT_CLASS(nfs4_open_event,
 | 
				
			||||||
			__field(u64, fileid)
 | 
								__field(u64, fileid)
 | 
				
			||||||
			__field(u64, dir)
 | 
								__field(u64, dir)
 | 
				
			||||||
			__string(name, ctx->dentry->d_name.name)
 | 
								__string(name, ctx->dentry->d_name.name)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
 | 
								__field(int, openstateid_seq)
 | 
				
			||||||
 | 
								__field(u32, openstateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
| 
						 | 
					@ -409,8 +413,22 @@ DECLARE_EVENT_CLASS(nfs4_open_event,
 | 
				
			||||||
			__entry->flags = flags;
 | 
								__entry->flags = flags;
 | 
				
			||||||
			__entry->fmode = (__force unsigned int)ctx->mode;
 | 
								__entry->fmode = (__force unsigned int)ctx->mode;
 | 
				
			||||||
			__entry->dev = ctx->dentry->d_sb->s_dev;
 | 
								__entry->dev = ctx->dentry->d_sb->s_dev;
 | 
				
			||||||
			if (!IS_ERR_OR_NULL(state))
 | 
								if (!IS_ERR_OR_NULL(state)) {
 | 
				
			||||||
				inode = state->inode;
 | 
									inode = state->inode;
 | 
				
			||||||
 | 
									__entry->stateid_seq =
 | 
				
			||||||
 | 
										be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
									__entry->stateid_hash =
 | 
				
			||||||
 | 
										nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
 | 
									__entry->openstateid_seq =
 | 
				
			||||||
 | 
										be32_to_cpu(state->open_stateid.seqid);
 | 
				
			||||||
 | 
									__entry->openstateid_hash =
 | 
				
			||||||
 | 
										nfs_stateid_hash(&state->open_stateid);
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									__entry->stateid_seq = 0;
 | 
				
			||||||
 | 
									__entry->stateid_hash = 0;
 | 
				
			||||||
 | 
									__entry->openstateid_seq = 0;
 | 
				
			||||||
 | 
									__entry->openstateid_hash = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			if (inode != NULL) {
 | 
								if (inode != NULL) {
 | 
				
			||||||
				__entry->fileid = NFS_FILEID(inode);
 | 
									__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
				__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
									__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
| 
						 | 
					@ -425,7 +443,8 @@ DECLARE_EVENT_CLASS(nfs4_open_event,
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) flags=%d (%s) fmode=%s "
 | 
								"error=%d (%s) flags=%d (%s) fmode=%s "
 | 
				
			||||||
			"fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
								"fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
			"name=%02x:%02x:%llu/%s",
 | 
								"name=%02x:%02x:%llu/%s stateid=%d:0x%08x "
 | 
				
			||||||
 | 
								"openstateid=%d:0x%08x",
 | 
				
			||||||
			 __entry->error,
 | 
								 __entry->error,
 | 
				
			||||||
			 show_nfsv4_errors(__entry->error),
 | 
								 show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			 __entry->flags,
 | 
								 __entry->flags,
 | 
				
			||||||
| 
						 | 
					@ -436,7 +455,9 @@ DECLARE_EVENT_CLASS(nfs4_open_event,
 | 
				
			||||||
			 __entry->fhandle,
 | 
								 __entry->fhandle,
 | 
				
			||||||
			 MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								 MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			 (unsigned long long)__entry->dir,
 | 
								 (unsigned long long)__entry->dir,
 | 
				
			||||||
			 __get_str(name)
 | 
								 __get_str(name),
 | 
				
			||||||
 | 
								 __entry->stateid_seq, __entry->stateid_hash,
 | 
				
			||||||
 | 
								 __entry->openstateid_seq, __entry->openstateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -468,6 +489,8 @@ TRACE_EVENT(nfs4_close,
 | 
				
			||||||
			__field(u64, fileid)
 | 
								__field(u64, fileid)
 | 
				
			||||||
			__field(unsigned int, fmode)
 | 
								__field(unsigned int, fmode)
 | 
				
			||||||
			__field(int, error)
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
| 
						 | 
					@ -478,18 +501,23 @@ TRACE_EVENT(nfs4_close,
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
			__entry->fmode = (__force unsigned int)state->state;
 | 
								__entry->fmode = (__force unsigned int)state->state;
 | 
				
			||||||
			__entry->error = error;
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(args->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&args->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) fmode=%s fileid=%02x:%02x:%llu "
 | 
								"error=%d (%s) fmode=%s fileid=%02x:%02x:%llu "
 | 
				
			||||||
			"fhandle=0x%08x",
 | 
								"fhandle=0x%08x openstateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			__entry->fmode ?  show_fmode_flags(__entry->fmode) :
 | 
								__entry->fmode ?  show_fmode_flags(__entry->fmode) :
 | 
				
			||||||
					  "closed",
 | 
										  "closed",
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			(unsigned long long)__entry->fileid,
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
			__entry->fhandle
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -523,6 +551,8 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,
 | 
				
			||||||
			__field(dev_t, dev)
 | 
								__field(dev_t, dev)
 | 
				
			||||||
			__field(u32, fhandle)
 | 
								__field(u32, fhandle)
 | 
				
			||||||
			__field(u64, fileid)
 | 
								__field(u64, fileid)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
| 
						 | 
					@ -536,11 +566,16 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,
 | 
				
			||||||
			__entry->dev = inode->i_sb->s_dev;
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
			__entry->fileid = NFS_FILEID(inode);
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) cmd=%s:%s range=%lld:%lld "
 | 
								"error=%d (%s) cmd=%s:%s range=%lld:%lld "
 | 
				
			||||||
			"fileid=%02x:%02x:%llu fhandle=0x%08x",
 | 
								"fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
 | 
								"stateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			show_lock_cmd(__entry->cmd),
 | 
								show_lock_cmd(__entry->cmd),
 | 
				
			||||||
| 
						 | 
					@ -549,7 +584,8 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,
 | 
				
			||||||
			(long long)__entry->end,
 | 
								(long long)__entry->end,
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			(unsigned long long)__entry->fileid,
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
			__entry->fhandle
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -563,11 +599,73 @@ DECLARE_EVENT_CLASS(nfs4_lock_event,
 | 
				
			||||||
			), \
 | 
								), \
 | 
				
			||||||
			TP_ARGS(request, state, cmd, error))
 | 
								TP_ARGS(request, state, cmd, error))
 | 
				
			||||||
DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock);
 | 
					DEFINE_NFS4_LOCK_EVENT(nfs4_get_lock);
 | 
				
			||||||
DEFINE_NFS4_LOCK_EVENT(nfs4_set_lock);
 | 
					 | 
				
			||||||
DEFINE_NFS4_LOCK_EVENT(nfs4_lock_reclaim);
 | 
					 | 
				
			||||||
DEFINE_NFS4_LOCK_EVENT(nfs4_lock_expired);
 | 
					 | 
				
			||||||
DEFINE_NFS4_LOCK_EVENT(nfs4_unlock);
 | 
					DEFINE_NFS4_LOCK_EVENT(nfs4_unlock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TRACE_EVENT(nfs4_set_lock,
 | 
				
			||||||
 | 
							TP_PROTO(
 | 
				
			||||||
 | 
								const struct file_lock *request,
 | 
				
			||||||
 | 
								const struct nfs4_state *state,
 | 
				
			||||||
 | 
								const nfs4_stateid *lockstateid,
 | 
				
			||||||
 | 
								int cmd,
 | 
				
			||||||
 | 
								int error
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_ARGS(request, state, lockstateid, cmd, error),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_STRUCT__entry(
 | 
				
			||||||
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, cmd)
 | 
				
			||||||
 | 
								__field(char, type)
 | 
				
			||||||
 | 
								__field(loff_t, start)
 | 
				
			||||||
 | 
								__field(loff_t, end)
 | 
				
			||||||
 | 
								__field(dev_t, dev)
 | 
				
			||||||
 | 
								__field(u32, fhandle)
 | 
				
			||||||
 | 
								__field(u64, fileid)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
 | 
								__field(int, lockstateid_seq)
 | 
				
			||||||
 | 
								__field(u32, lockstateid_hash)
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_fast_assign(
 | 
				
			||||||
 | 
								const struct inode *inode = state->inode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->cmd = cmd;
 | 
				
			||||||
 | 
								__entry->type = request->fl_type;
 | 
				
			||||||
 | 
								__entry->start = request->fl_start;
 | 
				
			||||||
 | 
								__entry->end = request->fl_end;
 | 
				
			||||||
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
 | 
								__entry->lockstateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(lockstateid->seqid);
 | 
				
			||||||
 | 
								__entry->lockstateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(lockstateid);
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_printk(
 | 
				
			||||||
 | 
								"error=%d (%s) cmd=%s:%s range=%lld:%lld "
 | 
				
			||||||
 | 
								"fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
 | 
								"stateid=%d:0x%08x lockstateid=%d:0x%08x",
 | 
				
			||||||
 | 
								__entry->error,
 | 
				
			||||||
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
 | 
								show_lock_cmd(__entry->cmd),
 | 
				
			||||||
 | 
								show_lock_type(__entry->type),
 | 
				
			||||||
 | 
								(long long)__entry->start,
 | 
				
			||||||
 | 
								(long long)__entry->end,
 | 
				
			||||||
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash,
 | 
				
			||||||
 | 
								__entry->lockstateid_seq, __entry->lockstateid_hash
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE_EVENT_CLASS(nfs4_set_delegation_event,
 | 
					DECLARE_EVENT_CLASS(nfs4_set_delegation_event,
 | 
				
			||||||
		TP_PROTO(
 | 
							TP_PROTO(
 | 
				
			||||||
			const struct inode *inode,
 | 
								const struct inode *inode,
 | 
				
			||||||
| 
						 | 
					@ -621,20 +719,28 @@ TRACE_EVENT(nfs4_delegreturn_exit,
 | 
				
			||||||
			__field(dev_t, dev)
 | 
								__field(dev_t, dev)
 | 
				
			||||||
			__field(u32, fhandle)
 | 
								__field(u32, fhandle)
 | 
				
			||||||
			__field(int, error)
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
			__entry->dev = res->server->s_dev;
 | 
								__entry->dev = res->server->s_dev;
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(args->fhandle);
 | 
								__entry->fhandle = nfs_fhandle_hash(args->fhandle);
 | 
				
			||||||
			__entry->error = error;
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(args->stateid->seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(args->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) dev=%02x:%02x fhandle=0x%08x",
 | 
								"error=%d (%s) dev=%02x:%02x fhandle=0x%08x "
 | 
				
			||||||
 | 
								"stateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			__entry->fhandle
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -653,6 +759,8 @@ DECLARE_EVENT_CLASS(nfs4_test_stateid_event,
 | 
				
			||||||
			__field(dev_t, dev)
 | 
								__field(dev_t, dev)
 | 
				
			||||||
			__field(u32, fhandle)
 | 
								__field(u32, fhandle)
 | 
				
			||||||
			__field(u64, fileid)
 | 
								__field(u64, fileid)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
| 
						 | 
					@ -662,15 +770,21 @@ DECLARE_EVENT_CLASS(nfs4_test_stateid_event,
 | 
				
			||||||
			__entry->dev = inode->i_sb->s_dev;
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
			__entry->fileid = NFS_FILEID(inode);
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x",
 | 
								"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
 | 
								"stateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			(unsigned long long)__entry->fileid,
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
			__entry->fhandle
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -820,7 +934,6 @@ DECLARE_EVENT_CLASS(nfs4_inode_event,
 | 
				
			||||||
			), \
 | 
								), \
 | 
				
			||||||
			TP_ARGS(inode, error))
 | 
								TP_ARGS(inode, error))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_setattr);
 | 
					 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_access);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_access);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_readlink);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_readlink);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_readdir);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_readdir);
 | 
				
			||||||
| 
						 | 
					@ -831,7 +944,59 @@ DEFINE_NFS4_INODE_EVENT(nfs4_get_security_label);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_set_security_label);
 | 
				
			||||||
#endif /* CONFIG_NFS_V4_SECURITY_LABEL */
 | 
					#endif /* CONFIG_NFS_V4_SECURITY_LABEL */
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_recall_delegation);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_recall_delegation);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_delegreturn);
 | 
					
 | 
				
			||||||
 | 
					DECLARE_EVENT_CLASS(nfs4_inode_stateid_event,
 | 
				
			||||||
 | 
							TP_PROTO(
 | 
				
			||||||
 | 
								const struct inode *inode,
 | 
				
			||||||
 | 
								const nfs4_stateid *stateid,
 | 
				
			||||||
 | 
								int error
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_ARGS(inode, stateid, error),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_STRUCT__entry(
 | 
				
			||||||
 | 
								__field(dev_t, dev)
 | 
				
			||||||
 | 
								__field(u32, fhandle)
 | 
				
			||||||
 | 
								__field(u64, fileid)
 | 
				
			||||||
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_fast_assign(
 | 
				
			||||||
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(stateid->seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(stateid);
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							TP_printk(
 | 
				
			||||||
 | 
								"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
 | 
								"stateid=%d:0x%08x",
 | 
				
			||||||
 | 
								__entry->error,
 | 
				
			||||||
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
 | 
								__entry->fhandle,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEFINE_NFS4_INODE_STATEID_EVENT(name) \
 | 
				
			||||||
 | 
						DEFINE_EVENT(nfs4_inode_stateid_event, name, \
 | 
				
			||||||
 | 
								TP_PROTO( \
 | 
				
			||||||
 | 
									const struct inode *inode, \
 | 
				
			||||||
 | 
									const nfs4_stateid *stateid, \
 | 
				
			||||||
 | 
									int error \
 | 
				
			||||||
 | 
								), \
 | 
				
			||||||
 | 
								TP_ARGS(inode, stateid, error))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_setattr);
 | 
				
			||||||
 | 
					DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_delegreturn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DECLARE_EVENT_CLASS(nfs4_getattr_event,
 | 
					DECLARE_EVENT_CLASS(nfs4_getattr_event,
 | 
				
			||||||
		TP_PROTO(
 | 
							TP_PROTO(
 | 
				
			||||||
| 
						 | 
					@ -1005,28 +1170,37 @@ DECLARE_EVENT_CLASS(nfs4_read_event,
 | 
				
			||||||
			__field(loff_t, offset)
 | 
								__field(loff_t, offset)
 | 
				
			||||||
			__field(size_t, count)
 | 
								__field(size_t, count)
 | 
				
			||||||
			__field(int, error)
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
			const struct inode *inode = hdr->inode;
 | 
								const struct inode *inode = hdr->inode;
 | 
				
			||||||
 | 
								const struct nfs4_state *state =
 | 
				
			||||||
 | 
									hdr->args.context->state;
 | 
				
			||||||
			__entry->dev = inode->i_sb->s_dev;
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
			__entry->fileid = NFS_FILEID(inode);
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
			__entry->offset = hdr->args.offset;
 | 
								__entry->offset = hdr->args.offset;
 | 
				
			||||||
			__entry->count = hdr->args.count;
 | 
								__entry->count = hdr->args.count;
 | 
				
			||||||
			__entry->error = error;
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
								"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
			"offset=%lld count=%zu",
 | 
								"offset=%lld count=%zu stateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			(unsigned long long)__entry->fileid,
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
			__entry->fhandle,
 | 
								__entry->fhandle,
 | 
				
			||||||
			(long long)__entry->offset,
 | 
								(long long)__entry->offset,
 | 
				
			||||||
			__entry->count
 | 
								__entry->count,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
#define DEFINE_NFS4_READ_EVENT(name) \
 | 
					#define DEFINE_NFS4_READ_EVENT(name) \
 | 
				
			||||||
| 
						 | 
					@ -1056,28 +1230,37 @@ DECLARE_EVENT_CLASS(nfs4_write_event,
 | 
				
			||||||
			__field(loff_t, offset)
 | 
								__field(loff_t, offset)
 | 
				
			||||||
			__field(size_t, count)
 | 
								__field(size_t, count)
 | 
				
			||||||
			__field(int, error)
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
			const struct inode *inode = hdr->inode;
 | 
								const struct inode *inode = hdr->inode;
 | 
				
			||||||
 | 
								const struct nfs4_state *state =
 | 
				
			||||||
 | 
									hdr->args.context->state;
 | 
				
			||||||
			__entry->dev = inode->i_sb->s_dev;
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
			__entry->fileid = NFS_FILEID(inode);
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
			__entry->offset = hdr->args.offset;
 | 
								__entry->offset = hdr->args.offset;
 | 
				
			||||||
			__entry->count = hdr->args.count;
 | 
								__entry->count = hdr->args.count;
 | 
				
			||||||
			__entry->error = error;
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
								"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
			"offset=%lld count=%zu",
 | 
								"offset=%lld count=%zu stateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
			(unsigned long long)__entry->fileid,
 | 
								(unsigned long long)__entry->fileid,
 | 
				
			||||||
			__entry->fhandle,
 | 
								__entry->fhandle,
 | 
				
			||||||
			(long long)__entry->offset,
 | 
								(long long)__entry->offset,
 | 
				
			||||||
			__entry->count
 | 
								__entry->count,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1154,10 +1337,11 @@ TRACE_EVENT(nfs4_layoutget,
 | 
				
			||||||
			const struct nfs_open_context *ctx,
 | 
								const struct nfs_open_context *ctx,
 | 
				
			||||||
			const struct pnfs_layout_range *args,
 | 
								const struct pnfs_layout_range *args,
 | 
				
			||||||
			const struct pnfs_layout_range *res,
 | 
								const struct pnfs_layout_range *res,
 | 
				
			||||||
 | 
								const nfs4_stateid *layout_stateid,
 | 
				
			||||||
			int error
 | 
								int error
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_ARGS(ctx, args, res, error),
 | 
							TP_ARGS(ctx, args, res, layout_stateid, error),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_STRUCT__entry(
 | 
							TP_STRUCT__entry(
 | 
				
			||||||
			__field(dev_t, dev)
 | 
								__field(dev_t, dev)
 | 
				
			||||||
| 
						 | 
					@ -1167,10 +1351,15 @@ TRACE_EVENT(nfs4_layoutget,
 | 
				
			||||||
			__field(u64, offset)
 | 
								__field(u64, offset)
 | 
				
			||||||
			__field(u64, count)
 | 
								__field(u64, count)
 | 
				
			||||||
			__field(int, error)
 | 
								__field(int, error)
 | 
				
			||||||
 | 
								__field(int, stateid_seq)
 | 
				
			||||||
 | 
								__field(u32, stateid_hash)
 | 
				
			||||||
 | 
								__field(int, layoutstateid_seq)
 | 
				
			||||||
 | 
								__field(u32, layoutstateid_hash)
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_fast_assign(
 | 
							TP_fast_assign(
 | 
				
			||||||
			const struct inode *inode = d_inode(ctx->dentry);
 | 
								const struct inode *inode = d_inode(ctx->dentry);
 | 
				
			||||||
 | 
								const struct nfs4_state *state = ctx->state;
 | 
				
			||||||
			__entry->dev = inode->i_sb->s_dev;
 | 
								__entry->dev = inode->i_sb->s_dev;
 | 
				
			||||||
			__entry->fileid = NFS_FILEID(inode);
 | 
								__entry->fileid = NFS_FILEID(inode);
 | 
				
			||||||
			__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
								__entry->fhandle = nfs_fhandle_hash(NFS_FH(inode));
 | 
				
			||||||
| 
						 | 
					@ -1178,11 +1367,25 @@ TRACE_EVENT(nfs4_layoutget,
 | 
				
			||||||
			__entry->offset = args->offset;
 | 
								__entry->offset = args->offset;
 | 
				
			||||||
			__entry->count = args->length;
 | 
								__entry->count = args->length;
 | 
				
			||||||
			__entry->error = error;
 | 
								__entry->error = error;
 | 
				
			||||||
 | 
								__entry->stateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(state->stateid.seqid);
 | 
				
			||||||
 | 
								__entry->stateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(&state->stateid);
 | 
				
			||||||
 | 
								if (!error) {
 | 
				
			||||||
 | 
									__entry->layoutstateid_seq =
 | 
				
			||||||
 | 
									be32_to_cpu(layout_stateid->seqid);
 | 
				
			||||||
 | 
									__entry->layoutstateid_hash =
 | 
				
			||||||
 | 
									nfs_stateid_hash(layout_stateid);
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									__entry->layoutstateid_seq = 0;
 | 
				
			||||||
 | 
									__entry->layoutstateid_hash = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		),
 | 
							),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		TP_printk(
 | 
							TP_printk(
 | 
				
			||||||
			"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
								"error=%d (%s) fileid=%02x:%02x:%llu fhandle=0x%08x "
 | 
				
			||||||
			"iomode=%s offset=%llu count=%llu",
 | 
								"iomode=%s offset=%llu count=%llu stateid=%d:0x%08x "
 | 
				
			||||||
 | 
								"layoutstateid=%d:0x%08x",
 | 
				
			||||||
			__entry->error,
 | 
								__entry->error,
 | 
				
			||||||
			show_nfsv4_errors(__entry->error),
 | 
								show_nfsv4_errors(__entry->error),
 | 
				
			||||||
			MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
								MAJOR(__entry->dev), MINOR(__entry->dev),
 | 
				
			||||||
| 
						 | 
					@ -1190,12 +1393,14 @@ TRACE_EVENT(nfs4_layoutget,
 | 
				
			||||||
			__entry->fhandle,
 | 
								__entry->fhandle,
 | 
				
			||||||
			show_pnfs_iomode(__entry->iomode),
 | 
								show_pnfs_iomode(__entry->iomode),
 | 
				
			||||||
			(unsigned long long)__entry->offset,
 | 
								(unsigned long long)__entry->offset,
 | 
				
			||||||
			(unsigned long long)__entry->count
 | 
								(unsigned long long)__entry->count,
 | 
				
			||||||
 | 
								__entry->stateid_seq, __entry->stateid_hash,
 | 
				
			||||||
 | 
								__entry->layoutstateid_seq, __entry->layoutstateid_hash
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_layoutcommit);
 | 
					DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutcommit);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_layoutreturn);
 | 
					DEFINE_NFS4_INODE_STATEID_EVENT(nfs4_layoutreturn);
 | 
				
			||||||
DEFINE_NFS4_INODE_EVENT(nfs4_layoutreturn_on_close);
 | 
					DEFINE_NFS4_INODE_EVENT(nfs4_layoutreturn_on_close);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* CONFIG_NFS_V4_1 */
 | 
					#endif /* CONFIG_NFS_V4_1 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue