Skip to content

Commit 6629f87

Browse files
author
Steve French
committed
smb3: add four dynamic tracepoints for copy_file_range and reflink
Add more dynamic tracepoints to help debug copy_file_range (copychunk) and clone_range ("duplicate extents"). These are tracepoints for entering the function and completing without error. For example: "trace-cmd record -e smb3_copychunk_enter -e smb3_copychunk_done" or "trace-cmd record -e smb3_clone_enter -e smb3_clone_done" Here is sample output: TASK-PID CPU# ||||| TIMESTAMP FUNCTION | | | ||||| | | cp-5964 [005] ..... 2176.168977: smb3_clone_enter: xid=17 sid=0xeb275be4 tid=0x7ffa7cdb source fid=0x1ed02e15 source offset=0x0 target fid=0x1ed02e15 target offset=0x0 len=0xa0000 cp-5964 [005] ..... 2176.170668: smb3_clone_done: xid=17 sid=0xeb275be4 tid=0x7ffa7cdb source fid=0x1ed02e15 source offset=0x0 target fid=0x1ed02e15 target offset=0x0 len=0xa0000 Reviewed-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 5779d39 commit 6629f87

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

fs/smb/client/smb2ops.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1812,6 +1812,10 @@ smb2_copychunk_range(const unsigned int xid,
18121812

18131813
tcon = tlink_tcon(trgtfile->tlink);
18141814

1815+
trace_smb3_copychunk_enter(xid, srcfile->fid.volatile_fid,
1816+
trgtfile->fid.volatile_fid, tcon->tid,
1817+
tcon->ses->Suid, src_off, dest_off, len);
1818+
18151819
while (len > 0) {
18161820
pcchunk->SourceOffset = cpu_to_le64(src_off);
18171821
pcchunk->TargetOffset = cpu_to_le64(dest_off);
@@ -1863,6 +1867,9 @@ smb2_copychunk_range(const unsigned int xid,
18631867
le32_to_cpu(retbuf->ChunksWritten),
18641868
le32_to_cpu(retbuf->ChunkBytesWritten),
18651869
bytes_written);
1870+
trace_smb3_copychunk_done(xid, srcfile->fid.volatile_fid,
1871+
trgtfile->fid.volatile_fid, tcon->tid,
1872+
tcon->ses->Suid, src_off, dest_off, len);
18661873
} else if (rc == -EINVAL) {
18671874
if (ret_data_len != sizeof(struct copychunk_ioctl_rsp))
18681875
goto cchunk_out;
@@ -2046,7 +2053,9 @@ smb2_duplicate_extents(const unsigned int xid,
20462053
dup_ext_buf.ByteCount = cpu_to_le64(len);
20472054
cifs_dbg(FYI, "Duplicate extents: src off %lld dst off %lld len %lld\n",
20482055
src_off, dest_off, len);
2049-
2056+
trace_smb3_clone_enter(xid, srcfile->fid.volatile_fid,
2057+
trgtfile->fid.volatile_fid, tcon->tid,
2058+
tcon->ses->Suid, src_off, dest_off, len);
20502059
inode = d_inode(trgtfile->dentry);
20512060
if (inode->i_size < dest_off + len) {
20522061
rc = smb2_set_file_size(xid, tcon, trgtfile, dest_off + len, false);
@@ -2080,6 +2089,10 @@ smb2_duplicate_extents(const unsigned int xid,
20802089
trgtfile->fid.volatile_fid,
20812090
tcon->tid, tcon->ses->Suid, src_off,
20822091
dest_off, len, rc);
2092+
else
2093+
trace_smb3_clone_done(xid, srcfile->fid.volatile_fid,
2094+
trgtfile->fid.volatile_fid, tcon->tid,
2095+
tcon->ses->Suid, src_off, dest_off, len);
20832096
return rc;
20842097
}
20852098

fs/smb/client/trace.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,59 @@ DEFINE_EVENT(smb3_copy_range_err_class, smb3_##name, \
264264
DEFINE_SMB3_COPY_RANGE_ERR_EVENT(clone_err);
265265
/* TODO: Add SMB3_COPY_RANGE_ERR_EVENT(copychunk_err) */
266266

267+
DECLARE_EVENT_CLASS(smb3_copy_range_done_class,
268+
TP_PROTO(unsigned int xid,
269+
__u64 src_fid,
270+
__u64 target_fid,
271+
__u32 tid,
272+
__u64 sesid,
273+
__u64 src_offset,
274+
__u64 target_offset,
275+
__u32 len),
276+
TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len),
277+
TP_STRUCT__entry(
278+
__field(unsigned int, xid)
279+
__field(__u64, src_fid)
280+
__field(__u64, target_fid)
281+
__field(__u32, tid)
282+
__field(__u64, sesid)
283+
__field(__u64, src_offset)
284+
__field(__u64, target_offset)
285+
__field(__u32, len)
286+
),
287+
TP_fast_assign(
288+
__entry->xid = xid;
289+
__entry->src_fid = src_fid;
290+
__entry->target_fid = target_fid;
291+
__entry->tid = tid;
292+
__entry->sesid = sesid;
293+
__entry->src_offset = src_offset;
294+
__entry->target_offset = target_offset;
295+
__entry->len = len;
296+
),
297+
TP_printk("\txid=%u sid=0x%llx tid=0x%x source fid=0x%llx source offset=0x%llx target fid=0x%llx target offset=0x%llx len=0x%x",
298+
__entry->xid, __entry->sesid, __entry->tid, __entry->target_fid,
299+
__entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len)
300+
)
301+
302+
#define DEFINE_SMB3_COPY_RANGE_DONE_EVENT(name) \
303+
DEFINE_EVENT(smb3_copy_range_done_class, smb3_##name, \
304+
TP_PROTO(unsigned int xid, \
305+
__u64 src_fid, \
306+
__u64 target_fid, \
307+
__u32 tid, \
308+
__u64 sesid, \
309+
__u64 src_offset, \
310+
__u64 target_offset, \
311+
__u32 len), \
312+
TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len))
313+
314+
DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_enter);
315+
DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_enter);
316+
DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_done);
317+
DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_done);
318+
319+
267320
/* For logging successful read or write */
268321
DECLARE_EVENT_CLASS(smb3_rw_done_class,
269322
TP_PROTO(unsigned int rreq_debug_id,

0 commit comments

Comments
 (0)