From patchwork Wed Jul 24 05:03:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve French X-Patchwork-Id: 13740602 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E541F2572 for ; Wed, 24 Jul 2024 05:03:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721797409; cv=none; b=pzjck+OSz75B8BmClfk4MrNqWmx53Raqjivdba9+ctdZjOYCgKWMRnqALBIKQEzSCy43HW0ZD18y7GMFC8RV/VhsH7qibCMtHOpXsWmHfLO4Jpa5XAxdzze2q64tXHY+u4f8jM3FfjDxgBlc6q+p7piTJzWERrCV9uuQG5fKIa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1721797409; c=relaxed/simple; bh=Cgr2fSMJyzLBMpFZy+z4cm6EjV3MmWwYyrHMUdLeyBg=; h=MIME-Version:From:Date:Message-ID:Subject:To:Cc:Content-Type; b=msVCES+9gayYwiWPUYlmXXyj6hNIjQgyt/qHV5TLkBDuV3UWL6k/paw8paoklveU7SYiDuBJBcHHCHt/7SlGC7+Dejczruhext1jk5XQ0CREYpG55/dvdzrhXhjNFIdMXlLAyZO3dLJk5umLrDAIbHB67oE5YsIBuRsDbECOyHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cK8hgxv0; arc=none smtp.client-ip=209.85.167.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cK8hgxv0" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-52efba36802so4896124e87.2 for ; Tue, 23 Jul 2024 22:03:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721797406; x=1722402206; darn=vger.kernel.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=BGJZYsHAGXt8QjCiwgjlqtx6/rvwdXHpCXxIJPwgWoU=; b=cK8hgxv02HV5Wpgv2t00FF4j4AXTRyS0Fi3JuL5wCHe1rAH0vkeEftF1GkZN+stThc ED4cTb2K3wk1Unu45aNWcQQrDcPtAH6dyWaFmYAjfxy8H4C9SFsetSKwWWQ8mU5hZJtX oBkrf/SHN9ArRlBmTpaoNSq6CdH9BQS+GaA2FGVPFwSUJ/Y/F8z0P45UTTvGNuRwokus 3mFzPWvOFbAcJvvlRdj1GsdZYU9swmrvMo0H30qiqUi3x7MhU1yf6OZTUP3l2nAn3/O+ 34qrXAkLbvGmlopuDyufPi8k+/BrSdhQXYQxpxnLB7IIB1hjMYMUrDUdi81oodNCNV6I 66Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721797406; x=1722402206; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=BGJZYsHAGXt8QjCiwgjlqtx6/rvwdXHpCXxIJPwgWoU=; b=esgEj3UtkMhwcDWLt3NuYghbwOk9A2Ba8XYT0YmkyNxS4FsocDqmHViBUH9t5WTfgK rKGJ1hIQDTibTktRToASIlfAqhuaXDf39DKnvbn96f2Y3T+R2LkZYZ6bL01wvEMsaOY+ JXaJDkW9amY1QRhcrvtAXSazaluvgSGkLBu6kBhbj3Sx8eDaXhdswhjOsK24wWVx7gMR pih9yZJmSPvZkkpnyA0tblJilMT5FS+oISK00Xsq1Mc0I1e456ndUdfkfTcdphjicI4u JhBf08xJy62G2+2MIEXfQip/nVh2J/kyqMnur3sU+6LxjCqFF5g1KRjZ713etqOQorWW /XrA== X-Gm-Message-State: AOJu0Yz/2KMVJwZJufbHsXDHUGrPatMWGXodQLRyBOAipJBLhW1iK1Nw Egh5qP/PX0QGU0BGop1zr811GfJzhYiCQ8657lcWe88YJtUQa4VhsF4VpgmsPhW8ufQFIq6kCR1 /liWG0DIqPKuO/uRPsRfykbnGFl6aqNqK X-Google-Smtp-Source: AGHT+IEpOpV7FRUzjfAh/JdUR+Jlw0ORw+lfp1IabeWak5MBULRLmIwE1LRRxMC5kt49dlUYVKbDfDXf7wxuppwuuLs= X-Received: by 2002:a05:6512:1047:b0:52b:9c8a:734f with SMTP id 2adb3069b0e04-52efb801e5bmr8014871e87.50.1721797405377; Tue, 23 Jul 2024 22:03:25 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-cifs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Steve French Date: Wed, 24 Jul 2024 00:03:13 -0500 Message-ID: Subject: [PATCH][SMB3 client] dynamic tracepoints for copy_range and clone_range To: CIFS Cc: Bharath S M Two patches that add dynamic tracepoints for copy_range and clone range including smb3: add four more 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" "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 and smb3: add dynamic tracepoints for copy_file_range and reflink errors There are cases where debugging clone_range ("smb2_duplicate_extents" function) and copy_range ("smb2_copychunk_range") can be helpful. Add dynamic trace points for any errors in these two routines. e,g, "trace-cmd record -e smb3_copychunk_err -e smb3_clone_err" See attached From 35be5f59ad26b311cd7735f9b08b8c1b22b4deb4 Mon Sep 17 00:00:00 2001 From: Steve French Date: Tue, 23 Jul 2024 23:49:21 -0500 Subject: [PATCH 2/2] smb3: add four more 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 Signed-off-by: Steve French --- fs/smb/client/smb2ops.c | 18 +++++++++++--- fs/smb/client/trace.h | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c index 94447cde2fe0..0b0ceaee593f 100644 --- a/fs/smb/client/smb2ops.c +++ b/fs/smb/client/smb2ops.c @@ -1812,6 +1812,9 @@ smb2_copychunk_range(const unsigned int xid, tcon = tlink_tcon(trgtfile->tlink); + trace_smb3_copychunk_enter(xid, srcfile->fid.volatile_fid, + trgtfile->fid.volatile_fid, tcon->tid, + tcon->ses->Suid, src_off, dest_off, len); while (len > 0) { pcchunk->SourceOffset = cpu_to_le64(src_off); pcchunk->TargetOffset = cpu_to_le64(dest_off); @@ -1905,8 +1908,11 @@ smb2_copychunk_range(const unsigned int xid, tcon->tid, tcon->ses->Suid, src_off, dest_off, len, rc); return rc; - } else - return total_bytes_written; + } + trace_smb3_copychunk_done(xid, srcfile->fid.volatile_fid, + trgtfile->fid.volatile_fid, tcon->tid, + tcon->ses->Suid, src_off, dest_off, len); + return total_bytes_written; } static int @@ -2050,7 +2056,9 @@ smb2_duplicate_extents(const unsigned int xid, dup_ext_buf.ByteCount = cpu_to_le64(len); cifs_dbg(FYI, "Duplicate extents: src off %lld dst off %lld len %lld\n", src_off, dest_off, len); - + trace_smb3_clone_enter(xid, srcfile->fid.volatile_fid, + trgtfile->fid.volatile_fid, tcon->tid, + tcon->ses->Suid, src_off, dest_off, len); inode = d_inode(trgtfile->dentry); if (inode->i_size < dest_off + len) { rc = smb2_set_file_size(xid, tcon, trgtfile, dest_off + len, false); @@ -2084,6 +2092,10 @@ smb2_duplicate_extents(const unsigned int xid, trgtfile->fid.volatile_fid, tcon->tid, tcon->ses->Suid, src_off, dest_off, len, rc); + else + trace_smb3_clone_done(xid, srcfile->fid.volatile_fid, + trgtfile->fid.volatile_fid, tcon->tid, + tcon->ses->Suid, src_off, dest_off, len); return rc; } diff --git a/fs/smb/client/trace.h b/fs/smb/client/trace.h index 891d6d979fad..c1c4672f0c5e 100644 --- a/fs/smb/client/trace.h +++ b/fs/smb/client/trace.h @@ -264,6 +264,59 @@ DEFINE_EVENT(smb3_copy_range_err_class, smb3_##name, \ DEFINE_SMB3_COPY_RANGE_ERR_EVENT(copychunk_err); DEFINE_SMB3_COPY_RANGE_ERR_EVENT(clone_err); +DECLARE_EVENT_CLASS(smb3_copy_range_done_class, + TP_PROTO(unsigned int xid, + __u64 src_fid, + __u64 target_fid, + __u32 tid, + __u64 sesid, + __u64 src_offset, + __u64 target_offset, + __u32 len), + TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len), + TP_STRUCT__entry( + __field(unsigned int, xid) + __field(__u64, src_fid) + __field(__u64, target_fid) + __field(__u32, tid) + __field(__u64, sesid) + __field(__u64, src_offset) + __field(__u64, target_offset) + __field(__u32, len) + ), + TP_fast_assign( + __entry->xid = xid; + __entry->src_fid = src_fid; + __entry->target_fid = target_fid; + __entry->tid = tid; + __entry->sesid = sesid; + __entry->src_offset = src_offset; + __entry->target_offset = target_offset; + __entry->len = len; + ), + 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", + __entry->xid, __entry->sesid, __entry->tid, __entry->target_fid, + __entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len) +) + +#define DEFINE_SMB3_COPY_RANGE_DONE_EVENT(name) \ +DEFINE_EVENT(smb3_copy_range_done_class, smb3_##name, \ + TP_PROTO(unsigned int xid, \ + __u64 src_fid, \ + __u64 target_fid, \ + __u32 tid, \ + __u64 sesid, \ + __u64 src_offset, \ + __u64 target_offset, \ + __u32 len), \ + TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len)) + +DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_enter); +DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_enter); +DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_done); +DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_done); + + /* For logging successful read or write */ DECLARE_EVENT_CLASS(smb3_rw_done_class, TP_PROTO(unsigned int rreq_debug_id, -- 2.43.0