From nobody Sat Feb 7 22:12:34 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (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 DAD9017ADF8; Tue, 10 Jun 2025 00:48:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516536; cv=none; b=W0P2+9/onP4i7LzASliC9sYlxgVrKuo/G4cOZADFNArEHNkT7N4K5mmgtdEPyYXYfl2n23qdjr/+9yZTcEweJZ+vLvlp9Vn/3sQNiIvpXlIpa/pyLa3O3dtpHDN4GqQSHfvEyuT8uwAWg9Eau5xhekXopSX/kUNmEvs+UDccY10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516536; c=relaxed/simple; bh=m83ChYDphIvMWiIyXq9sa+8QWHJy01xoOGhhU7wPztQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=FblFY0orSSRLYpbnPljVBPM8LQaUFvLd8N6dvy5c2g0+8rOrXyxiJjXaQuGsgHqky+7eBZoe9/LSuwIho1BpqKg97wyIvWu6YVH1P2jkYAy6zaejfOarMzUZowtTT7y5LwCLqz33AEY/0y0n2vPk60NJgwmXdp/wGE97xaY0SWc= 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=j6G7+6ka; arc=none smtp.client-ip=209.85.216.49 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="j6G7+6ka" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-3121aed2435so5263447a91.2; Mon, 09 Jun 2025 17:48:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749516534; x=1750121334; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ry/7AlIiaDB3vtHSBPeBsB1ODjnLd26f1hKrzHBSB+k=; b=j6G7+6kaOKVPUx3jRirIoh6W7h3Oy1YFMhTuHKDNyJH7fHX46gHZji4x/xKpYAegGr CVr/hEL3SpZB9XmkYC3Gx1g+x1SW6ahiAFlJiZHY1R4RAgWKVZwUXXRfmdyV9f97sTka N6+T7PTELWkA3JZZ5hQeR8prJU2WJU2i5Mu+H+mYmhr8FBTzQx3MPrsVgRbSioO/6N6R ar/K4prT9om/z7R2OPDq+9bYkrm83vkLfxcQKYdW35n9VSIf7poXSN4O4PNcWxzf8nJH LI8axw5blxvxYiajn1xdjpVDjELNzHOz/5A4wndzG0hXvQr/N0ysJyHOfTxx8RN2LaJj nTgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749516534; x=1750121334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ry/7AlIiaDB3vtHSBPeBsB1ODjnLd26f1hKrzHBSB+k=; b=Tqap5G4le5HblRG3pw8fAZaBaPVO9Zd1iAHBy+ZrfAQItHyvhzGviyCUncoQuTVrSE 7g9Qp5GBBPT2qTKsSageUz5kQodNrqbLPkitl6zk8I0jHUCCSlOnsMawm7sm2HjIQ5KQ +XAa5u+0UqJbUMwP21GWLtSbmoeeGsF5lF/QgYNAS4m/oGIzbwsPZ1rHvLzX9cGtvWOM VIfMtY8ihYBUoQlCNhfiTjDCD1CbWexVYrRarKWkfIzajGdXE77OD+hRKOMCo0tLMzIZ 8KNzC42K3l3kgnVWYIDNf6+DI9NyRxf+Tw3KdMRUTwk4UGACL3E07EecIL8R5JF8O+8X I/0g== X-Forwarded-Encrypted: i=1; AJvYcCUBQNOURPv2aTW+yHWz59E1f6BlXyh5f4CItJhGE3n9ESNmwPpMCwc79abr9zVectAiBluK3ZzVfr7ET4WsvS4rw/pj@vger.kernel.org, AJvYcCWxh7rDJFnA7Rlvn5P0ymYQPTxUbR8kb0fZV89t34B5qalvS5i1aRbmaZrgpEFmkqVVGhgAAV9kOxrlRw==@vger.kernel.org X-Gm-Message-State: AOJu0Yw6910PIlMI9vXpj0Qgo1tfVYbwBQSvMxUwHQ7Jb7IWib6KEN97 o9q4io2Smo31oQz/VbhQ7caBDzxo/fjXiBBulcpx1qeclAx0MImy6f0V X-Gm-Gg: ASbGncv5ZO+2B8VvHUa7XhRh2ol5Sq4JquA2982R93CAEnwgjqNzD3Rq623fXgwtymx tuR3FeFHipjv+8oj0RV5/rlyy63BJAhA5o8VV9q8LF3AGbqyx7AF5+GyDR2obSAV8KCNYHB+mIG QASFd5tb9piHkRn6EWPHSdcsMOBqEa7r8M2WiIexmmIm+rOfbsLPbYwzFf8RaqOZYAitHx8/1Bo 2tjAAs7eZRB1opdXQ0MBwFEO6pHdoNcO95HTO8ncEb2JzuzGxiTkz5YkUPzWG0I59TiXsg1AW3V S7zV40tfExE1vfynJGyX55WWvh83cN6KEgEgR0W7M/0wwpoEyZyuWabov1jLDhaTs3a+xSSZWVs 72WwW/x2G6a4TPdcJ1xkgZqQmQXVP6x5KiQ== X-Google-Smtp-Source: AGHT+IHM23NtT/zldAxnNLeRnUkRsj1IbqsQcQYgL5XdhDq0xOQfh3ZdXRgncglA5ZJsyQ+Nfu3a9g== X-Received: by 2002:a17:90b:4a43:b0:311:f05b:86a5 with SMTP id 98e67ed59e1d1-313a115bea7mr985852a91.0.1749516534168; Mon, 09 Jun 2025 17:48:54 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-236032fcd58sm60713845ad.122.2025.06.09.17.48.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jun 2025 17:48:53 -0700 (PDT) From: Jason Xing To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jason Xing , Yushan Zhou Subject: [PATCH v4 1/5] relayfs: abolish prev_padding Date: Tue, 10 Jun 2025 08:48:40 +0800 Message-Id: <20250610004844.66688-2-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250610004844.66688-1-kerneljasonxing@gmail.com> References: <20250610004844.66688-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing prev_padding represents the unused space of certain subbuffer. If the content of a call of relay_write() exceeds the limit of the remainder of this subbuffer, it will skip storing in the rest space and record the start point as buf->prev_padding in relay_switch_subbuf(). Since the buf is a per-cpu big buffer, the point of prev_padding as a global value for the whole buffer instead of a single subbuffer (whose padding info is stored in buf->padding[]) seems meaningless from the real use cases, so we don't bother to record it any more. Reviewed-by: Yushan Zhou Signed-off-by: Jason Xing Reviewed-by: Masami Hiramatsu (Google) --- drivers/gpu/drm/i915/gt/uc/intel_guc_log.c | 3 +-- drivers/net/wwan/iosm/iosm_ipc_trace.c | 3 +-- drivers/net/wwan/t7xx/t7xx_port_trace.c | 2 +- include/linux/relay.h | 5 +---- kernel/relay.c | 14 ++++++++------ kernel/trace/blktrace.c | 2 +- 6 files changed, 13 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c b/drivers/gpu/drm/i= 915/gt/uc/intel_guc_log.c index e8a04e476c57..09a64f224c49 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c @@ -220,8 +220,7 @@ static int guc_action_control_log(struct intel_guc *guc= , bool enable, */ static int subbuf_start_callback(struct rchan_buf *buf, void *subbuf, - void *prev_subbuf, - size_t prev_padding) + void *prev_subbuf) { /* * Use no-overwrite mode by default, where relay will stop accepting diff --git a/drivers/net/wwan/iosm/iosm_ipc_trace.c b/drivers/net/wwan/iosm= /iosm_ipc_trace.c index eeecfa3d10c5..9656254c1c6c 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_trace.c +++ b/drivers/net/wwan/iosm/iosm_ipc_trace.c @@ -51,8 +51,7 @@ static int ipc_trace_remove_buf_file_handler(struct dentr= y *dentry) } =20 static int ipc_trace_subbuf_start_handler(struct rchan_buf *buf, void *sub= buf, - void *prev_subbuf, - size_t prev_padding) + void *prev_subbuf) { if (relay_buf_full(buf)) { pr_err_ratelimited("Relay_buf full dropping traces"); diff --git a/drivers/net/wwan/t7xx/t7xx_port_trace.c b/drivers/net/wwan/t7x= x/t7xx_port_trace.c index 4ed8b4e29bf1..f16d3b01302c 100644 --- a/drivers/net/wwan/t7xx/t7xx_port_trace.c +++ b/drivers/net/wwan/t7xx/t7xx_port_trace.c @@ -33,7 +33,7 @@ static int t7xx_trace_remove_buf_file_handler(struct dent= ry *dentry) } =20 static int t7xx_trace_subbuf_start_handler(struct rchan_buf *buf, void *su= bbuf, - void *prev_subbuf, size_t prev_padding) + void *prev_subbuf) { if (relay_buf_full(buf)) { pr_err_ratelimited("Relay_buf full dropping traces"); diff --git a/include/linux/relay.h b/include/linux/relay.h index b3224111d074..e10a0fdf4325 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -47,7 +47,6 @@ struct rchan_buf unsigned int page_count; /* number of current buffer pages */ unsigned int finalized; /* buffer has been finalized */ size_t *padding; /* padding counts per sub-buffer */ - size_t prev_padding; /* temporary variable */ size_t bytes_consumed; /* bytes consumed in cur read subbuf */ size_t early_bytes; /* bytes consumed before VFS inited */ unsigned int cpu; /* this buf's cpu */ @@ -84,7 +83,6 @@ struct rchan_callbacks * @buf: the channel buffer containing the new sub-buffer * @subbuf: the start of the new sub-buffer * @prev_subbuf: the start of the previous sub-buffer - * @prev_padding: unused space at the end of previous sub-buffer * * The client should return 1 to continue logging, 0 to stop * logging. @@ -100,8 +98,7 @@ struct rchan_callbacks */ int (*subbuf_start) (struct rchan_buf *buf, void *subbuf, - void *prev_subbuf, - size_t prev_padding); + void *prev_subbuf); =20 /* * create_buf_file - create file to represent a relay channel buffer diff --git a/kernel/relay.c b/kernel/relay.c index c0c93a04d4ce..94f79f52d826 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -250,13 +250,13 @@ EXPORT_SYMBOL_GPL(relay_buf_full); */ =20 static int relay_subbuf_start(struct rchan_buf *buf, void *subbuf, - void *prev_subbuf, size_t prev_padding) + void *prev_subbuf) { if (!buf->chan->cb->subbuf_start) return !relay_buf_full(buf); =20 return buf->chan->cb->subbuf_start(buf, subbuf, - prev_subbuf, prev_padding); + prev_subbuf); } =20 /** @@ -302,7 +302,7 @@ static void __relay_reset(struct rchan_buf *buf, unsign= ed int init) for (i =3D 0; i < buf->chan->n_subbufs; i++) buf->padding[i] =3D 0; =20 - relay_subbuf_start(buf, buf->data, NULL, 0); + relay_subbuf_start(buf, buf->data, NULL); } =20 /** @@ -555,9 +555,11 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size= _t length) goto toobig; =20 if (buf->offset !=3D buf->chan->subbuf_size + 1) { - buf->prev_padding =3D buf->chan->subbuf_size - buf->offset; + size_t prev_padding; + + prev_padding =3D buf->chan->subbuf_size - buf->offset; old_subbuf =3D buf->subbufs_produced % buf->chan->n_subbufs; - buf->padding[old_subbuf] =3D buf->prev_padding; + buf->padding[old_subbuf] =3D prev_padding; buf->subbufs_produced++; if (buf->dentry) d_inode(buf->dentry)->i_size +=3D @@ -582,7 +584,7 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_= t length) new_subbuf =3D buf->subbufs_produced % buf->chan->n_subbufs; new =3D buf->start + new_subbuf * buf->chan->subbuf_size; buf->offset =3D 0; - if (!relay_subbuf_start(buf, new, old, buf->prev_padding)) { + if (!relay_subbuf_start(buf, new, old)) { buf->offset =3D buf->chan->subbuf_size + 1; return 0; } diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index 3f6a7bdc6edf..d3083c88474e 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -461,7 +461,7 @@ static const struct file_operations blk_msg_fops =3D { * the user space app in telling how many lost events there were. */ static int blk_subbuf_start_callback(struct rchan_buf *buf, void *subbuf, - void *prev_subbuf, size_t prev_padding) + void *prev_subbuf) { struct blk_trace *bt; =20 --=20 2.43.5 From nobody Sat Feb 7 22:12:34 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 438D819924D; Tue, 10 Jun 2025 00:48:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516538; cv=none; b=rASo00OCyhXY3Gwss6IF+cOZ7x2kfsHVSiDGEnP4uhY63PxFIMocxL03mSZZgzrajca+l+Kdp2vARMJWPLWRhTVp/CE7kYCbroWlIMo+jVOXqx3jFZbp+iHv+EdkZ86XGxGLyLZl8Lxv61D9uX6Vtji4aMO4bFnzqEQWao0G5LI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516538; c=relaxed/simple; bh=8D9sHDxASn3ic1cCmUXgPT76Pt9nEVJYxVrt6Sj17lY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TxgANb48QjvRY9Zp6TnG4XiMNSgdZmPssPbNB6b2uDeaMNaYkmxi1TAoxE59SWDue3WHE0psKhSShtZGhJGLM4TWKeqTEmSu2M2sqmySK4RKLhBQbrD2dT4JUlvHScOmN/HjDm4bIWekhfExCatlEdergeqyrehy2+/a/w38BCU= 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=AFQ4QIGL; arc=none smtp.client-ip=209.85.214.182 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="AFQ4QIGL" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2350b1b9129so31310065ad.0; Mon, 09 Jun 2025 17:48:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749516536; x=1750121336; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=z/DS8UbuUDcrhCZrgQkbBuuNPk3hX4iwlMBvOBP+pxk=; b=AFQ4QIGLbQMJD+sSSN1QhdSaF/sx2OSMpZ7JP9vMKbXA7kGJVcvkyhMqRwktNTa2rZ G6rrmOy03UJbCQZCKRPUDmhWoy5HDhEJ/Aw6xX5B/qqQMBsRMCy4rehTGfXe82Gl3WeB h724t7OEsyvJYvP8Mp2SBt8xwVVvOrbfSDW+2Th+qsQZ3ZlqDHEhDcS3cyGcYgaacgQt Wo6+xhnWH4DLio9HCi6y9gKUvbYzdpjfsuQMbglsNTB+0EfVuIcF6/gfFucgt+9Qd5c9 0fcuyCLuj/liDxOH88vyGPk4MFX9kpKXvTW6N2kWLKGhcbBW5DA+aKwtEhH9AUnDW752 yK+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749516536; x=1750121336; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z/DS8UbuUDcrhCZrgQkbBuuNPk3hX4iwlMBvOBP+pxk=; b=gMwQptMVC9/UVIpQyULdf8hqJ2bkksQx+tRJw5MA36rNBkidrBvuW4uEUrDNSqQHZR N25GK/qB3kfK+b828xZfPWb0+neQgOPVTKdQyQITDBcDahdvQYSrmEh5MuCOFSVV+eKo 9Pufv1dJ3HfmzlSDP6INJ5c8e76BpX3imps3eqdewYPIZhd93N77xlMz4lPpODIBS0j+ vxBSXjRlbMeudoaNuXFmxKGHgKgFOioxNnG8JRxM33lpOmzQGhhIS9nyI/eArtEQxP6B OiDgyBMEjlllknEnuo8NwfaLPPwJoes9n9+GQ0NGDs3k+w0GGvspJXPE6yzr311OPtUw dpzQ== X-Forwarded-Encrypted: i=1; AJvYcCURUo7e+OsDi8IXZWckhpZVqdlWmokeqTPA6KOtwQNEIAbip61S5Cnckn5BkQ3+mSD7yBG7a/NCbfB72xIonP5sv+Yd@vger.kernel.org, AJvYcCWsUmNR6vyBZZCRVecAmrNdf3m45mJUL33muVrEjRNgfXfZg/G9RkQXTDAyppQTz0AHxzAdj+o9q2j+Ig==@vger.kernel.org X-Gm-Message-State: AOJu0YxguP2K69psdV8Sw1El59JdgdWWPxyy/fpW6D2C59ORga8gwgq6 F65tjU0Rv6r+A65nzabeHbdZ+Ne0a1USuUVOE/XQVuAXXyqHfj8m+LBAU5nIeuGultM= X-Gm-Gg: ASbGncvMzH/I7dhkDxfWoJJBgb7LdUdsdKF6QEluNCoR5mvB+DKYeBhcVew2/GHSttO u4+TWpacKS0cGxzIWqtTz6/NpSTwfYfY1FKk/xVI6Am6rR9Wl0Puna7o2uKwh8UOtjZBXG1VGlP oG2zXXFgQYUxYNPE/aeKaJxpvJdYeeXJADCqSmEambai+I93DOTFluNkA37H2AJ3rIEqZVx7S9l +/Uxkw0elE+FlT3rNxE1fgET3RKOvcHVFis6CQorZgwgkM4BQCvXTGkAgZD8v6a5ZjDYHg1t4K6 867e4Szh1/dtwK5jwsEPzyk69qxILSfS1W9Sb1sEMlqa6Wi635tyPtzoDHrFFAFwL1Ykj7HqN3j ei4bqmKYE4CL7Y0R8kHE1BCEPuk8S0BfzWA== X-Google-Smtp-Source: AGHT+IEI90AJQVBPhXxZDUC9WO3Cy5M5cPcif0X/2cLg9crT3KTCqAx9YZ/OWHoetyWfYavi0sbGfA== X-Received: by 2002:a17:902:f54b:b0:215:8d49:e2a7 with SMTP id d9443c01a7336-23601dccb4emr190398595ad.50.1749516536578; Mon, 09 Jun 2025 17:48:56 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-236032fcd58sm60713845ad.122.2025.06.09.17.48.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jun 2025 17:48:56 -0700 (PDT) From: Jason Xing To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jason Xing , Yushan Zhou Subject: [PATCH v4 2/5] relayfs: support a counter tracking if per-cpu buffers is full Date: Tue, 10 Jun 2025 08:48:41 +0800 Message-Id: <20250610004844.66688-3-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250610004844.66688-1-kerneljasonxing@gmail.com> References: <20250610004844.66688-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing When using relay mechanism, we often encounter the case where new data are lost or old unconsumed data are overwritten because of slow reader. Add 'full' field in per-cpu buffer structure to detect if the above case is happening. Relay has two modes: 1) non-overwrite mode, 2) overwrite mode. So buffer being full here respectively means: 1) relayfs doesn't intend to accept new data and then simply drop them, or 2) relayfs is going to start over again and overwrite old unread data with new data. Note: this counter doesn't need any explicit lock to protect from being modified by different threads for the better performance consideration. Writers calling __relay_write/relay_write should consider how to use the lock and ensure it performs under the lock protection, thus it's not necessary to add a new small lock here. Reviewed-by: Yushan Zhou Reviewed-by: Jens Axboe Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Jason Xing --- include/linux/relay.h | 9 +++++++++ kernel/relay.c | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/linux/relay.h b/include/linux/relay.h index e10a0fdf4325..cd77eb285a48 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -28,6 +28,14 @@ */ #define RELAYFS_CHANNEL_VERSION 7 =20 +/* + * Relay buffer statistics + */ +struct rchan_buf_stats +{ + unsigned int full_count; /* counter for buffer full */ +}; + /* * Per-cpu relay channel buffer */ @@ -43,6 +51,7 @@ struct rchan_buf struct irq_work wakeup_work; /* reader wakeup */ struct dentry *dentry; /* channel file dentry */ struct kref kref; /* channel buffer refcount */ + struct rchan_buf_stats stats; /* buffer stats */ struct page **page_array; /* array of current buffer pages */ unsigned int page_count; /* number of current buffer pages */ unsigned int finalized; /* buffer has been finalized */ diff --git a/kernel/relay.c b/kernel/relay.c index 94f79f52d826..eb3f630f3896 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -252,8 +252,13 @@ EXPORT_SYMBOL_GPL(relay_buf_full); static int relay_subbuf_start(struct rchan_buf *buf, void *subbuf, void *prev_subbuf) { + int full =3D relay_buf_full(buf); + + if (full) + buf->stats.full_count++; + if (!buf->chan->cb->subbuf_start) - return !relay_buf_full(buf); + return !full; =20 return buf->chan->cb->subbuf_start(buf, subbuf, prev_subbuf); @@ -298,6 +303,7 @@ static void __relay_reset(struct rchan_buf *buf, unsign= ed int init) buf->finalized =3D 0; buf->data =3D buf->start; buf->offset =3D 0; + buf->stats.full_count =3D 0; =20 for (i =3D 0; i < buf->chan->n_subbufs; i++) buf->padding[i] =3D 0; --=20 2.43.5 From nobody Sat Feb 7 22:12:34 2026 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 B32D21A238D; Tue, 10 Jun 2025 00:48:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516541; cv=none; b=rl87RcWmMyqHFFxwn4DxMGV7Ubxobgq6yiPIujgzMQSj+OcJT6ooBVfYYuXwcEZ+wV1tVVwjfSJgvqYkTUBnUDIqFZ1nq/23rAazMdY6hU7xLY+qX81rOFlDIUXBsJeKo5+s0IeriTH7HHig/ONhY7r44gXRL+3rQB6tGfXfROg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516541; c=relaxed/simple; bh=lLuZJy5LmIhw6vczV+BjTVeE1qeR4Bfzo8mKouv0f/Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IUrFtKFukWTgHpUlO/hhaiU1CL3UmsuIaRYsvSEFxx/H0oTzfxhkkg00xFjXKK0bgzwl7NRc+a5gpX0RvmZi9JF2/ppgxCUguvUC1mqEHfk8aFd39IgePBLxjPbjfE6tQMBQQqE/HK9t9FxV+Oo1IHA3ppOFD8mGrxyUXpSwMec= 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=i9gwK1Qh; arc=none smtp.client-ip=209.85.214.169 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="i9gwK1Qh" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-2349f096605so58078635ad.3; Mon, 09 Jun 2025 17:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749516539; x=1750121339; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=l8SVDvWMO2KmJya58rTe/5tn0uw9qn8OeN6AY1Bam6A=; b=i9gwK1QhKvNoD9Na18lAe55FmYFSMooBkL63aucPTAFfCKJt2kPOXHzYtDEy0xEBlO Dkbr3fxnLZ32vJ5qWg2rLHSdo6JgoAj9jDdUlYbHzr+gNqczdiUtYZ1wdhBNlmLmpf5m klMUDMZlnNg4v/06/ZBWidE50JXIF03wuMlOMCctsMgilx/nbT06RPqwMBsU5i+rDdam pwnjmC5WgwbDYimYdxzKY0+UYTktfL8cGl8mEDJ2hnbtgbtF73orlmnpK2F5ZgzoGVN9 Ey2Z9hbaUNPMQa6JxA0iBLs8/hfYa9K3sorzkilyOxH8C3u0l2hHTzMIbPbIwmtkqb8Z eHTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749516539; x=1750121339; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l8SVDvWMO2KmJya58rTe/5tn0uw9qn8OeN6AY1Bam6A=; b=FbPGBXcHi9ekZBQvxUdJMmG2SXTFLsGHP6BUe2Fc1yjErosHJObluZ7fGXrDUVumMi WWeKZmvual0i+2xyhO8zKyoRUtGpcVN885jGLXhJUWpoJFfMcz5L2vwLpl7sVU89M+g/ s04UjT90bpxvCC6QMz/8gBlgQSJlu8lssMphxZ6pSgO+CKT916X7pQbM7obBovhLONy4 OL97FetwvV1XVGDRlFzZnwEL1NR4rDRVmVoZ5oFdqQb/ipv90DZJSKUbXytjrA/Iv1pW S8FQPLlh2+h0fYRcUNBfFIHUzsgwToqu5URxh3iUcbDu5sUrKrTwjNK1WH1syWAr90hu 267g== X-Forwarded-Encrypted: i=1; AJvYcCUbgwS4nwxbhTAz9cjC6f3i7f5MpQLpM+pDB4F+mcZmTnEGU92Vtp2N/6AgpUfIauM7cCut9ZGOLMnA9UoGw8pBZU0w@vger.kernel.org, AJvYcCWxf9drbTwsFhxDVymP3Mr+S/RfS+sbZ6i1rXsD91m6tf60bDnIdcbMInB4FLpXTlKmc34YHAmvy/jfTg==@vger.kernel.org X-Gm-Message-State: AOJu0Yx8lPQqvzkIcivGyBRlkdW5ThRc2Wf7KpKjkUbDsftPcsJnc6ny /Mp14C7KQqBTVnrcwXnYqepweNfYKWtNkBU2qtI8hC52+dCRdaKW3nC3 X-Gm-Gg: ASbGncv+jO6XPwg4ZehvJO22M9Ydhggu7j6NfNrmUFOJ5jJKx0IJpDrF2VFYf4Ofz5U VNF31+63lqadqOrQDz6FevDKlDhGpanT0RgnynrPTauwf2gHStmiJCvODvbrPaosrTXMQGUYVKY bB5iN1jXmwCBGKNSLPAd5tRXPO++JiLeAmOFJllOz72NPjYnRxmcIj1wLzAkhQm4hbiZ4qMMn3d XYloM38aAx7cvkcUneIxOsG4K5wn07Z6hZl0h/D6HRfyYXHtd0gDtaHtt26xlXkpCnycB0CQlRg 9A79Am/4RUtrKaISjwxFnh4lCIHvHfKPGU+lR+iUYw4w088dzoxJRxSgI4TMPi1bDdguiHWDWKL upFJbAeh+KqwAXjL6gq6UGcMXPE6RS2PM3w== X-Google-Smtp-Source: AGHT+IHbZt8udGE0xv+/8ewbIApjkPoddT1BX0UcOwzQArXV7NE9hqbFiFjNI44py8pBjWJPn7V8Vw== X-Received: by 2002:a17:903:22c7:b0:234:b123:b4ff with SMTP id d9443c01a7336-23601d08686mr202935695ad.21.1749516538976; Mon, 09 Jun 2025 17:48:58 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-236032fcd58sm60713845ad.122.2025.06.09.17.48.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jun 2025 17:48:58 -0700 (PDT) From: Jason Xing To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jason Xing , Yushan Zhou Subject: [PATCH v4 3/5] relayfs: introduce getting relayfs statistics function Date: Tue, 10 Jun 2025 08:48:42 +0800 Message-Id: <20250610004844.66688-4-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250610004844.66688-1-kerneljasonxing@gmail.com> References: <20250610004844.66688-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing In this version, only support getting the counter for buffer full and implement the framework of how it works. Users can pass certain flag to fetch what field/statistics they expect to know. Each time it only returns one result. So do not pass multiple flags. Reviewed-by: Yushan Zhou Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Jason Xing --- include/linux/relay.h | 7 +++++++ kernel/relay.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/linux/relay.h b/include/linux/relay.h index cd77eb285a48..5310967f9d74 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -31,6 +31,12 @@ /* * Relay buffer statistics */ +enum { + RELAY_STATS_BUF_FULL =3D (1 << 0), + + RELAY_STATS_LAST =3D RELAY_STATS_BUF_FULL, +}; + struct rchan_buf_stats { unsigned int full_count; /* counter for buffer full */ @@ -167,6 +173,7 @@ struct rchan *relay_open(const char *base_filename, void *private_data); extern void relay_close(struct rchan *chan); extern void relay_flush(struct rchan *chan); +size_t relay_stats(struct rchan *chan, int flags); extern void relay_subbufs_consumed(struct rchan *chan, unsigned int cpu, size_t consumed); diff --git a/kernel/relay.c b/kernel/relay.c index eb3f630f3896..fd70d0e03216 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -701,6 +701,36 @@ void relay_flush(struct rchan *chan) } EXPORT_SYMBOL_GPL(relay_flush); =20 +/** + * relay_stats - get channel buffer statistics + * @chan: the channel + * @flags: select particular information to get + * + * Returns the count of certain field that caller specifies. + */ +size_t relay_stats(struct rchan *chan, int flags) +{ + unsigned int i, count =3D 0; + struct rchan_buf *rbuf; + + if (!chan || flags > RELAY_STATS_LAST) + return 0; + + if (chan->is_global) { + rbuf =3D *per_cpu_ptr(chan->buf, 0); + if (flags & RELAY_STATS_BUF_FULL) + count =3D rbuf->stats.full_count; + } else { + for_each_online_cpu(i) { + rbuf =3D *per_cpu_ptr(chan->buf, i); + if (rbuf && flags & RELAY_STATS_BUF_FULL) + count +=3D rbuf->stats.full_count; + } + } + + return count; +} + /** * relay_file_open - open file op for relay files * @inode: the inode --=20 2.43.5 From nobody Sat Feb 7 22:12:34 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 654001ACE0C; Tue, 10 Jun 2025 00:49:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516543; cv=none; b=o2FDYtxAUGbiOWr90WNYTeAwH0pXiZnd5p4ZYGi1Tw2ql+7TIUCLGBlj8R1i3rj4oJoM5mZIzhCVFvZavp1A+9rq0/oIRHfDHwh7LU3ZPv9x8YIh9T/kq1Z1q+sqE0opkx+e1JcRcYbfz32q1+ZXisAB4wTykV340IHPd3IS9dE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516543; c=relaxed/simple; bh=Ls8LnjItLslINrUUsz6ervmA6XQP3j3UNRh3vdkUe88=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=b8P8oYvg5qG86kwSLtRiZ81lP4ZBnG/WiDx4qg5X9iK77GcqztYBuP78xxX5XTFVvERQ7Bd2DhVWotXuK394fcOHfjLlRzj8MOC/+QgRugCSig8S89wsR5yozE2C6qhpifQfLCv8INjTASYjzI/qjq7sHhey1vVctywVvHJ2e+I= 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=LAFYnLLG; arc=none smtp.client-ip=209.85.214.179 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="LAFYnLLG" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-234bfe37cccso59675895ad.0; Mon, 09 Jun 2025 17:49:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749516542; x=1750121342; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1U9Lvj+tvO4mQdCsqf9w6ZMIuKsVVLMvbnrNfMDlrxM=; b=LAFYnLLGoGzxh9nFHsxq8miYnQZ8JnEzsoXhaqoTdFzBRZv5f6LE3OYB/2tBw/ndWE FhX5aR3Q5O/ZEaEDLBFM2Sqsdm6GOjNnUHW6ctf12tSTCeax+HuxFU8WODCrA8LW44o4 KHUnnMnpCYETI2cwtFmCCXdNuUdfJsrCEW8AzC2efu9yMFAVP+Qzo4v3xme033UhiaX3 DXPybjhBwfMjjYijPaNQ3TMglDbw3Ebjy6wmoAMzXxCJHUhl3wOD9Vdfb2lJUnIfdIz3 dJeGymhjGR7zCpDlwTFvSuK4PBWvvSZx+TOT9ir+4jvOkbqp5dN2oein5MBQS3ZUYP+X 649A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749516542; x=1750121342; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1U9Lvj+tvO4mQdCsqf9w6ZMIuKsVVLMvbnrNfMDlrxM=; b=C35WTWopEbbVCD0oTTGBBsVtquZL4V71PuE4qB4Gatxc8DdOs2HPyP1OoRLkYvH2vr fPoKs9wd3bzXx9Qc2CIhV75AZEzVWzFxWTk+zQ1Qsr8IOfRaUZPlIC5lOtD5bSeJ3za5 u3Fu0xFgYVLroUrbDtbDtCOoNIcl9nypp0v+htEooqNdjh2J1zxksbiA/USV1Qqa8D/+ DJ9HRjHfk5fLcIqAi2Xf6OrJvP6LixRN85RgU+wAh/+UeMlIwzbZixhQ5lVx763OSeak OKj4WsqxKWNxJ3BADONLduFzG6SxKZoFcENqYIRjdclQvpexFBufZQgJaZJF9SfpIf1/ lJrA== X-Forwarded-Encrypted: i=1; AJvYcCU+yk2ZABUoz872IcYLxtWKNt4awwSsnmqupqkGuP2DtcE/obOEdHHfjkBPkfd+jr71xyfA926C/lQXCQ==@vger.kernel.org, AJvYcCWdioXO+dobCI0bYgBgGVf+fCL21HtJ1oJvZPM60F1/LuZxTDO+C9kIATp05rOM9XZu5tMB0L8taRGWkccfwqKEqvlG@vger.kernel.org X-Gm-Message-State: AOJu0YxqpLwfVMlQR2rHFWlZtkbV/NzginOsX3XNFS6scMkwd4bU9JYB Am5Ix6n/m5buKYPwziod9mHpP6zZpUCDje0O5LkO8LN/LgOOiwJY6/n4 X-Gm-Gg: ASbGncsZFNAGOaMBCg2ts7YyhTPNT4EnqQPrvRl+Hfv0fneTg33mzZpgoLcxKYx1xEV wfnG0hMGsEZh3zFbiSDBMvVR8zFiV5GJawXzEzRmVOQtN2SPLkz8Q27PpbEWvdSAbgRKSDlfOLH KfxACmt9Mxv9yWxbJNGGiS09n3MVUJVoXfLTObmf3lBCNttpW+q6UxuVCGr0xqLcL7V6SCCMR+D xodmUg5KEISKcf43JK8gU9jtn6jajUZ6qsjFOCo8htIsqXooUnRw3bmMYMcdLRFhlUV3daaIawz cJfNFt9iG0qCG+JdziiWIQOsiWTylzHCLCPAggK8fMZmph8G+NFV34JixdAd7GF4ZXmX5aKbH2G sBTnXGDhiCLyyZgsm3p3sSqep+2pwEjSZZQ== X-Google-Smtp-Source: AGHT+IEo50M6v5LdSQV1gZGT38r0BissbfraxSO9tyxQfQXBzfqhZKpqoQDGqWcVp6Fc1/Ws5FzRCg== X-Received: by 2002:a17:902:e744:b0:234:8f5d:e3c0 with SMTP id d9443c01a7336-23601d0415fmr163354445ad.6.1749516541659; Mon, 09 Jun 2025 17:49:01 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-236032fcd58sm60713845ad.122.2025.06.09.17.48.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jun 2025 17:49:01 -0700 (PDT) From: Jason Xing To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jason Xing , Yushan Zhou Subject: [PATCH v4 4/5] blktrace: use rbuf->stats.full as a drop indicator in relayfs Date: Tue, 10 Jun 2025 08:48:43 +0800 Message-Id: <20250610004844.66688-5-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250610004844.66688-1-kerneljasonxing@gmail.com> References: <20250610004844.66688-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing Replace internal subbuf_start in blktrace with the default policy in relayfs. Remove dropped field from struct blktrace. Correspondingly, call the common helper in relay. By incrementing full_count to keep track of how many times we encountered a full buffer issue, user space will know how many events were lost. Reviewed-by: Yushan Zhou Reviewed-by: Jens Axboe Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Jason Xing --- kernel/trace/blktrace.c | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index d3083c88474e..6f0a776ddd3c 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -415,9 +415,10 @@ static ssize_t blk_dropped_read(struct file *filp, cha= r __user *buffer, size_t count, loff_t *ppos) { struct blk_trace *bt =3D filp->private_data; + size_t dropped =3D relay_stats(bt->rchan, RELAY_STATS_BUF_FULL); char buf[16]; =20 - snprintf(buf, sizeof(buf), "%u\n", atomic_read(&bt->dropped)); + snprintf(buf, sizeof(buf), "%lu\n", dropped); =20 return simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf)); } @@ -456,23 +457,6 @@ static const struct file_operations blk_msg_fops =3D { .llseek =3D noop_llseek, }; =20 -/* - * Keep track of how many times we encountered a full subbuffer, to aid - * the user space app in telling how many lost events there were. - */ -static int blk_subbuf_start_callback(struct rchan_buf *buf, void *subbuf, - void *prev_subbuf) -{ - struct blk_trace *bt; - - if (!relay_buf_full(buf)) - return 1; - - bt =3D buf->chan->private_data; - atomic_inc(&bt->dropped); - return 0; -} - static int blk_remove_buf_file_callback(struct dentry *dentry) { debugfs_remove(dentry); @@ -491,7 +475,6 @@ static struct dentry *blk_create_buf_file_callback(cons= t char *filename, } =20 static const struct rchan_callbacks blk_relay_callbacks =3D { - .subbuf_start =3D blk_subbuf_start_callback, .create_buf_file =3D blk_create_buf_file_callback, .remove_buf_file =3D blk_remove_buf_file_callback, }; @@ -580,7 +563,6 @@ static int do_blk_trace_setup(struct request_queue *q, = char *name, dev_t dev, } =20 bt->dev =3D dev; - atomic_set(&bt->dropped, 0); INIT_LIST_HEAD(&bt->running_list); =20 ret =3D -EIO; --=20 2.43.5 From nobody Sat Feb 7 22:12:34 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 04C881CDFCE; Tue, 10 Jun 2025 00:49:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516546; cv=none; b=Hx5TjbNRjKxFrR5v2Jj+uS0QgAo+SBmocgGRsqUvFocpsvPddDVz3rbY0H8b9dMrASaO6l5GKCYVY/ADLRYLRlDPYRcgxWT4maZPe1R4MXzlk41dE8SkaliGvb0Opfk6zxzHurw/DgJMbdxHmL2qN0sOVYzTFswfbhCcBNcNmPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749516546; c=relaxed/simple; bh=XT21aCq/7P6YAwPCKmY+1PKON7RZG9sndxfvvN+6Cl4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZcdfHYKK5Cn5U2Zeh1OR7lmjz4jKW4p5F/qwXBZrcLWH1MViEQiUFrERwSiVXm9QPXSoPC6y9312+CNBspwtp2+e5eevlWqJYbGOlwLwvcVm48YUpJ1bBXH2kqStuZhR2gQKW0ui/fR64yo97UYwtmWWWPEF9DwqCd2Slf52FgE= 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=KJd9GcHh; arc=none smtp.client-ip=209.85.214.171 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="KJd9GcHh" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2352400344aso42091605ad.2; Mon, 09 Jun 2025 17:49:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749516544; x=1750121344; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vXR9OD2yujCvZ+wl33V69tZqfryb4aPHl7dMp9N7l2w=; b=KJd9GcHhNdm1GqmlrHObqqoPi64zY2klZ3K6U51VYmuuAt/b//YhIfk9cqx/9c26kt TNthUGMpu/xdEZy7RujzbTZT/KaA3MRGqYF6je3DqTai3bxs713+Axk71JI71TzXAArS qyiEOnNFKle2vqb5R+HyyVnJlsl0wfC24Ju2dmxOxsEHb4YybyLbyLC31yf9ixxd3jTO Xo0Bnm6QQlKO6TTJGropohNZUupW/vP2JObFwhb5P1bqg7ubNOG5mmheOtAfxDwUwqWF jU0ZKrjFrqtUebPEZxl07OA1ftsrMGHeoFroOtA7hwxB1Y1oAELakJkHZdNB3IGCqD/a XJbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749516544; x=1750121344; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vXR9OD2yujCvZ+wl33V69tZqfryb4aPHl7dMp9N7l2w=; b=hKcPs+A4bueCnmQNaFkquUB4DY2q33jwuea6Zeq4ymvZoZ1o1HVWGMCGxvTZS9S1Tz YsslWZfvTGFFtEFfKS3Sy4jhFtLzJWNtVtyXU/SGu7FntFZbgwh4/353dQxNR0MRbdhG 7SsIdaFawODUj+BGaN37zKDMhvtn8D89IvDsmi8XKgkqOu3RG2Y72LSq+B/3Jg/cVTng JS8/drGOJD17uRzKs4+i1oL/3YaWf3983sYK0YbQoEiZQiawVveNPRyDsWeN3oZCjBKu ORkRQKEs4DKMoT+6LkWQ/P6VmASKwxLNNmAT47bS6Z4eJzAir+/cRwHy2otf6Kt9tl0M 0Ulw== X-Forwarded-Encrypted: i=1; AJvYcCUNf+cVrMlWLZUDDiWjtl10lZ92XmW/1kHZ8VWe9xu0W90pREXbTsy9BKUHqWj1UAAtpZJNnb9zvIf0415lTwMwjRMH@vger.kernel.org, AJvYcCXJPFm0xGLSkz5MovVmXFkW711BpYYo4X7ufJNuio9i7SioW/8ZsgHj/QM4l1iqEl2t3D1hjaHFqQxvlw==@vger.kernel.org X-Gm-Message-State: AOJu0YzXIdwPwyMaVlTrScpqN+4ghDjRv3MRl6GZ0+dkiSmJRVpNdbYE rw0QSSk0bJg6E+ny62PO+shqfgFzSPgjdfMG8sR1Y3CCdIphaGCxWlfl X-Gm-Gg: ASbGncv7bAff7Ehz7wPwdNE16Ui7pTiI6VqmhNxalwQ1RGfWeEizLgel1tOktfNrEnn OqelV7g28ZlgfxjACyzbk0NgT1HDbPtBLQh2PLB1EXnvJiAkbREW4uZBC/HdOX4vqopqZBiu7lB L8atK7CE5/nSIH06Ges1nW+M4u/CCy1kVmGaB5gKLuFOcvxRibxPvYZsIOw6tn/uNbLTHnalRlj L9wb0ZHqoIestRC/4XUfZGpYhfe/u+/fVp2YiXEmzNBG/dwWCQWYXPaXl6ctaFgmYPVHjsA6cUm g6DbHnWvy5amsVRO+WW9/k6KRUhS8rNEXI28Ehe6Q6dQIqbPiFKI4od+skxG5lwvxr0NwldKHbG lpFCD8crKdc3IStEdgYA45b9bS3uL9Uuw0g== X-Google-Smtp-Source: AGHT+IEoS2Por4ETOAkEPpz2Graj9iyaZRSNt4Xyb0p6VMbRRYiPv4YbAPHhi91Tr9IOHJB0+kXkfw== X-Received: by 2002:a17:903:987:b0:234:c8cf:a0e6 with SMTP id d9443c01a7336-23601d16b78mr236909555ad.24.1749516544453; Mon, 09 Jun 2025 17:49:04 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([43.132.141.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-236032fcd58sm60713845ad.122.2025.06.09.17.49.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jun 2025 17:49:04 -0700 (PDT) From: Jason Xing To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org, mathieu.desnoyers@efficios.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Jason Xing , Yushan Zhou Subject: [PATCH v4 5/5] relayfs: support a counter tracking if data is too big to write Date: Tue, 10 Jun 2025 08:48:44 +0800 Message-Id: <20250610004844.66688-6-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250610004844.66688-1-kerneljasonxing@gmail.com> References: <20250610004844.66688-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing It really doesn't matter if the user/admin knows what the last too big value is. Record how many times this case is triggered would be helpful. Solve the existing issue where relay_reset() doesn't restore the value. Store the counter in the per-cpu buffer structure instead of the global buffer structure. It also solves the racy condition which is likely to happen when a few of per-cpu buffers encounter the too big data case and then access the global field last_toobig without lock protection. Remove the printk in relay_close() since kernel module can directly call relay_stats() as they want. Reviewed-by: Yushan Zhou Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Jason Xing --- include/linux/relay.h | 5 +++-- kernel/relay.c | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/linux/relay.h b/include/linux/relay.h index 5310967f9d74..6772a7075840 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -33,13 +33,15 @@ */ enum { RELAY_STATS_BUF_FULL =3D (1 << 0), + RELAY_STATS_WRT_BIG =3D (1 << 1), =20 - RELAY_STATS_LAST =3D RELAY_STATS_BUF_FULL, + RELAY_STATS_LAST =3D RELAY_STATS_WRT_BIG, }; =20 struct rchan_buf_stats { unsigned int full_count; /* counter for buffer full */ + unsigned int big_count; /* counter for too big to write */ }; =20 /* @@ -79,7 +81,6 @@ struct rchan const struct rchan_callbacks *cb; /* client callbacks */ struct kref kref; /* channel refcount */ void *private_data; /* for user-defined data */ - size_t last_toobig; /* tried to log event > subbuf size */ struct rchan_buf * __percpu *buf; /* per-cpu channel buffers */ int is_global; /* One global buffer ? */ struct list_head list; /* for channel list */ diff --git a/kernel/relay.c b/kernel/relay.c index fd70d0e03216..bcc889dc0970 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -304,6 +304,7 @@ static void __relay_reset(struct rchan_buf *buf, unsign= ed int init) buf->data =3D buf->start; buf->offset =3D 0; buf->stats.full_count =3D 0; + buf->stats.big_count =3D 0; =20 for (i =3D 0; i < buf->chan->n_subbufs; i++) buf->padding[i] =3D 0; @@ -603,7 +604,7 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_= t length) return length; =20 toobig: - buf->chan->last_toobig =3D length; + buf->stats.big_count++; return 0; } EXPORT_SYMBOL_GPL(relay_switch_subbuf); @@ -663,11 +664,6 @@ void relay_close(struct rchan *chan) if ((buf =3D *per_cpu_ptr(chan->buf, i))) relay_close_buf(buf); =20 - if (chan->last_toobig) - printk(KERN_WARNING "relay: one or more items not logged " - "[item size (%zd) > sub-buffer size (%zd)]\n", - chan->last_toobig, chan->subbuf_size); - list_del(&chan->list); kref_put(&chan->kref, relay_destroy_channel); mutex_unlock(&relay_channels_mutex); @@ -720,11 +716,17 @@ size_t relay_stats(struct rchan *chan, int flags) rbuf =3D *per_cpu_ptr(chan->buf, 0); if (flags & RELAY_STATS_BUF_FULL) count =3D rbuf->stats.full_count; + else if (flags & RELAY_STATS_WRT_BIG) + count =3D rbuf->stats.big_count; } else { for_each_online_cpu(i) { rbuf =3D *per_cpu_ptr(chan->buf, i); - if (rbuf && flags & RELAY_STATS_BUF_FULL) - count +=3D rbuf->stats.full_count; + if (rbuf) { + if (flags & RELAY_STATS_BUF_FULL) + count +=3D rbuf->stats.full_count; + else if (flags & RELAY_STATS_WRT_BIG) + count +=3D rbuf->stats.big_count; + } } } =20 --=20 2.43.5