From nobody Sat Oct 11 00:44:26 2025 Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) (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 58B8B1F1313; Thu, 12 Jun 2025 06:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708733; cv=none; b=JHtPn5R/219mR9f4ZvALSeD8oSOVYHjBNK4LNBA+dKI5uXzjqUR9IDYb28a+ES4jCwICKPJMWVHPqG0xStjJiPyY77K9eQbLwVjwpt4RsB7rithhnxKSDo5A1JLArHdR6P0uN4cfOX9zULZOL08c+bqZOy2w8UZrNLBahpPpqL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708733; c=relaxed/simple; bh=9xh7nUndldLxNd1Y/R2tUXLAsPWf2AAyrqT3bm6nJ60=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=S50q6lSr2vEjQKCs8Fcf7f9L3d0naZg9+QsDv+b3JyQEvIV57FLR0K1W/+f1fzvoHIddvcyyOQtbp3gZscWrYCZAuO36WykC1GdYYt5YO4pdIJYxYY6cHGgEQovA0sLPPE4KMIt3Ff1fQfGseY41pYrGHhvCaoBeH6SEyp79PYk= 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=Rr8gLiay; arc=none smtp.client-ip=209.85.210.172 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="Rr8gLiay" Received: by mail-pf1-f172.google.com with SMTP id d2e1a72fcca58-74849e33349so624229b3a.3; Wed, 11 Jun 2025 23:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749708731; x=1750313531; 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=lsHcV98S/tKlZTMYxvYUoDUlnWVAAIR0HZ8eG60FU2o=; b=Rr8gLiayxjezzd4NaNKq6D1yBs0yJC1smotR6mcoWT4Yom9bjNZ1QyaarUV0HZeXxk oE7lUhEcwCsD7TfVfC40fgxCo2R++Y7gxUOR+oJdU/+4yzgpbyyYIxXIoIXIsQ9p0Q3/ +eI3OE8mxlroSPYz93yFDn4b4/Tatbr9A7IkI1NhV263j89PLS/T8WuDDsjZa9rBK68V OfffYqvu5fcl/xde6LzG2hn2q0PvPCd1dypff7aGwg6GsKtz4wIrgGeFbqxFekQXiHbK Gpdcb0ncuyABlWZFt9qf4UJE8h4hlaART4LlWfLY8R0wYC8YKLzCFKhcEJIITtncgIcF TUDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749708731; x=1750313531; 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=lsHcV98S/tKlZTMYxvYUoDUlnWVAAIR0HZ8eG60FU2o=; b=G2vJDchv/py5ADa5NPZtV+bJebwAc45XxvGMHSmbMdTvsk21TJA/FcPyFaL2UKAoqi sstXFw0ollP+m7fzDZiPVkkddxm83vW31dapTQP5SLCeEeNKVisQ6fCz1NtPaN06Zn4A bXUlO+LCI6RQi6YL2lwnPfOBG9wjPj4+RSh71goO8UxREuZwq6ItrKdKXLkWs96rdLeF zGq1alZ9+Yh5RN/2y98A8zo1MGoQHSAjjQNGdrTWvbBwoHOP4nXnJszifc2kvqXf4eHz +pyp+ok5ZVCuOMVeoV6YnUvZPTyBVenWVx4M8cz4GoPUm794f6KMnOzjsA/aYAVLgO0o N2bQ== X-Forwarded-Encrypted: i=1; AJvYcCVuLTeOViKoOjkJ1wfHg3lPPVrWgWkWvn2EplISXekFO/ko1GR7VV8j8SUXBGP+o4dZpAJqPuw6HHEzzi5Clg2rNoRA@vger.kernel.org, AJvYcCW8rB96xp/HoNqBJJTRXgsAVVE2KrJH83BhpbYw4Hgir1x7dNdMKUWPiwDfZ9Gr3Z94zw/gbH8rsOq9GQ==@vger.kernel.org X-Gm-Message-State: AOJu0Yz9I8s6YT1ZGTkGzqcnf//czWxRldRliFYb843zjMDHODgiB8zu u6gph3uNSvnuYCPpW4yCLUwPbBQMgjJkKQnmPTkBmWDnW3Q8k+w9ktY/ X-Gm-Gg: ASbGnctYMlc7QnNynGWZGVg4PAwrPKq1Bf1cDX3HKBA425Uxlzm5/5PgEdb55NTirbt 8lGwZ00rhns0F4RM15arbNgKbZFicaMvwrlBeHyzG5jFZISMukT0U8CC9sayW8p49eJRkhTDqgs Ao5lI3H87mInZw/Cn0FQU86WLkewj0y5sXeQzEmloK7FXekUCmtfR2rvkWTN2+OkRhrEJb6Ff7k 20n6edX8/Q9dy5oXlJ/X4jpOBovLTVHZaYEmQqO3oZflDgp2ohjTd38qRue0rvMMMcGRLmQTiDL w7NH6CPY+FnKshZcQaUBSfG7l+RfYOj1kemMMkK/rHau1pSAJQv3Fe+RZcYdCKUoqVFWVDVWMJy quJiMhOHzt7cVcHPDU4Rr96O7 X-Google-Smtp-Source: AGHT+IEgLzNfQWKUhuG3kcUbJZUVmap+hvpKhnXBm0CDjumtITLivzxUiXGGcl+nR0PprX94OefG4A== X-Received: by 2002:a05:6a20:9146:b0:21f:4ecc:11b7 with SMTP id adf61e73a8af0-21f86752068mr10489550637.36.1749708731549; Wed, 11 Jun 2025 23:12:11 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7488087a7e8sm631486b3a.25.2025.06.11.23.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 23:12:11 -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 v5 1/5] relayfs: abolish prev_padding Date: Thu, 12 Jun 2025 14:11:57 +0800 Message-Id: <20250612061201.34272-2-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250612061201.34272-1-kerneljasonxing@gmail.com> References: <20250612061201.34272-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 Reviewed-by: Masami Hiramatsu (Google) Signed-off-by: Jason Xing --- 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 Oct 11 00:44:26 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 78FE11F4CAB; Thu, 12 Jun 2025 06:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708738; cv=none; b=Lci2dXd34Fkxl1CZMxNJCcXE/0Hs6nVppVsShunSgGgcyGuKKOnXrqKr+2JVdvZPNXt2RXJ0uat9PZP5L28ZVjLmYpjbr0rRWnJ4ak2HvS/qHf6JmgBte6ejImj8LgWHuquAIdswZCuq5qFRzTEOBal8V2D4xhdlrH4Q/y1F/NA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708738; c=relaxed/simple; bh=8D9sHDxASn3ic1cCmUXgPT76Pt9nEVJYxVrt6Sj17lY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Crcr1TmJL8EvEkfokRDK1eSDwFhWU+CaGc+lF+G6x8tZYxfiGpJFQaxCz6D8eK+zY6fY+P94OmNUhNJm5vpAmHZ/Lr5RnVzv8k3LPTB9yqnNvCT718EMlIC6In74CYgyUIgmnbuOdDWsm2TfSzgIy1t5z4xU9fZoArTPN3226so= 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=FtHythgB; arc=none smtp.client-ip=209.85.210.170 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="FtHythgB" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-747e41d5469so738337b3a.3; Wed, 11 Jun 2025 23:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749708735; x=1750313535; 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=FtHythgBT3TQmSt0Scfoxnh53XjuBFuOz3V9/2z2/tPf34BoVLbe7NqJV29jlTdvy3 Z7s60YqccmyoaHx+V/eqRBiQKLQ2fyubCX1jaLB9WyseBNcfPYYhhb3paGAMLHN7AMwQ 0+LC6wfAn4Yk5MrMsccwiTkjJmWpNqgzOZQ6HRghFBCwtFzoBGa4e0Mqz0xiW7Mh80Ko lOgCLjfU3GmMg1hvOtloFsZ2VE1HRHexbSDbnXCew7j+UkrLq90XBeudXq8/S58x1EyY lchx4F1Y4WInpMu+Fb/KtTzC3U68C6R172XwsLcJoDy10oGP7Hg870Kh5Sjn5KTlflbw kAUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749708735; x=1750313535; 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=Z1JHuBdjMuzRkh+iawKeDJbsMy2IMgX97eRd4XtE/rn3I2vcua7Qci6+EGzOJJl8MI fxIl4lpQh9yF4qUiZJ9HzZvU7jMGBzVTXzXOzIF1mw5untUsq4fQFhIXuSlbuE47QCTA rT05FaiaN45AiEHzfx1GKvaQWpU3hPlWf/LLJe+nff2kg6EFcJpZfh2JN7eX4+tY8tai l9MeRvcv6jl4lJOwgdi0XMQvF+5HTUwHJFwzgEBFGp3bXOST48RMr60bPLOQvBraHhTy FvzAKV+Cexl/1hous9i029PTVv66Y6YgYupiAA9e88C/fFeqSXxVhFZIO0OKa97fXnj+ NWqQ== X-Forwarded-Encrypted: i=1; AJvYcCWK0EGynsLQToFBTZfOKuH1jgdoWEaZBj3l0g+/OQjP1fsclgdSznOYkpHIegH/XWJWhoarWn5+7yIKiw==@vger.kernel.org, AJvYcCXebn+xAenx4s3kLW5nP72mrILEnGl9vC8ruTe+6z7hhmPe/J11eA4mkn1QN4p27r5C9ww6TNpXTYmvS3ndpZgTW/OX@vger.kernel.org X-Gm-Message-State: AOJu0YzXMkxhhftjExhAoH+G9U475tm3hXZgNiM2Xo5vrC2Oq7LhzsxV 5ASJ7X0d+gYg4ZyEpe47fO5GwOehJ6OcqqWG70ciDiI39Y10BGt5/k4w X-Gm-Gg: ASbGnctGT6MY34YY/POQWA8ja+Rg5rmmOLAjjnfvhurHeDcaBNOrNm5p0gHmr4V3Ftv H7zCkPjOGtWvQvqx6KJzn+Nr0/lXEuEIFhcD8Gs6mM8wZJEviXoZvdm4j0Ua+plhlWY39zX9nsF VoPyQF4rbqiRUGsx5JbkU9rkULVzTQ1bslAwjVTVceTELnQI6+1okupvqlIyKabjbg5EISluttR Df3SmzY13C7SVEglCOZJHFHPqtCiTa2dNI6vyxgWRmYggwVz2PzmF4YcYtgeJoBPS9AqT4l8rYT Re19CYhvvvr1WiOwY1vkoCWvtU2cjTifQffdj/JBf848hYOdEpigS4yeNyXzxd3rgzNt+5rT1yT YOhC9aczJNbbmcxfv7pJMe8XqVr2FHkJ8E3k= X-Google-Smtp-Source: AGHT+IG2Jfl18I5N6mEiogLvMqIbfTRou5Pq0m0rgdaQaOLarhEpHk3ycC1YzveI2n05sTujW0YCnA== X-Received: by 2002:a05:6a00:3d13:b0:748:4652:bff4 with SMTP id d2e1a72fcca58-7487e239d53mr2340033b3a.13.1749708734588; Wed, 11 Jun 2025 23:12:14 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7488087a7e8sm631486b3a.25.2025.06.11.23.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 23:12:14 -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 v5 2/5] relayfs: support a counter tracking if per-cpu buffers is full Date: Thu, 12 Jun 2025 14:11:58 +0800 Message-Id: <20250612061201.34272-3-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250612061201.34272-1-kerneljasonxing@gmail.com> References: <20250612061201.34272-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 Oct 11 00:44:26 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (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 71EF21F8908; Thu, 12 Jun 2025 06:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708741; cv=none; b=HR1cb3c3P9GFZ1dUxDq1azyS6XP5LFXMuPl9LX3bWaM6QE4JHMZNZdqMVXYpwe62BKMB8o5JffUdp3kQgzc4G/59SfctLLhuu9coSU1q2+3ayWUXtk85CYl1SPpCC/J4uLsGpKB6ycqzk3C/nGfwR8LajGX3cFJgHNQ8Gvj8yXM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708741; c=relaxed/simple; bh=lLuZJy5LmIhw6vczV+BjTVeE1qeR4Bfzo8mKouv0f/Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TuCVaq+W2yKYCjqNHkCZYBmr1HaGW05UoAvOnSEjhYgXHvhhLXtymWtB4FhsMDfi8aSlva6MsDcxXt7gM36Pvjzmve4AmAxNE42l1WhWO6pf5OD0hD2oLeLhLYX65EbGU4qAvFbqgEoUG7nuK80hYMmZHTwQyOJAsd0+BT24bj0= 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=KXFvz1uh; arc=none smtp.client-ip=209.85.210.180 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="KXFvz1uh" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-747ef5996edso667847b3a.0; Wed, 11 Jun 2025 23:12:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749708738; x=1750313538; 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=KXFvz1uhUMlMBnaI5YE6tsG0JA66YPgTYcOf6qLxjjXNpZMFl3DgTKK3PvGyrwu+2n S3ZRi6Bw7mCj91EzCeay1uRVbE0xaJ9Ji0Do4X1k7335dgu7auhV3EpylW7cIq/fleuU jB5bb/iJ38lQVCAq5QMzjsV+Ey5PehVVf2+a9WrOFHxs+JeeE44bKRP1SfJQwUFWv24a 7GrnBVdXdC6QbL4pMVKVhg6626xmgWXhYTr1lSMWJIv0C/53XeeuPqtAz5Q5zp8F5saN Vrwq4HIOvBeT4J4bYYYgBv+f24fm478KU2pDMlBLzKij8P2KK2u7YaIYFAGMAxzznSK/ qSsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749708738; x=1750313538; 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=XNM2ufprh8cSFlOUJQTGG/TI3Jt0TzgUg+oyD3WEQOOJ13WCWSLzVsCNBjtrm6rh9b TDM/qlhNHbHNhsUoLOF2IjtS7Lem+sTKAqhfbHh+J2z+vrrdb4FPbrOFDz5VzH39Y2OD 4AtgxkzRQdamZ6gaICSUmmnyWFka1lays86jfCGDJWY+o1fwJB3etZSZHcYCw3smbUMO V0x7/edRjBbzEVnE0PY2GXaB30E66KMA6jI2pYAtJBQ/m8Qr4CYxVTvmMFqSDlztb2xd E/97JV8F11nmjq3cRUBC+rOkkEnNnMpHnlhkXDU7LbzvIDB/q515q5L+PCvnmQBja8fL EDEQ== X-Forwarded-Encrypted: i=1; AJvYcCVFYvGf9aTv+7UNTgD6iuXsBSdqJHb5zAI+Hnnu+VKXVhU7B6DEmZbgg1ID5tnwicn+O0Cq6kSwBuwC4Q==@vger.kernel.org, AJvYcCVbQJueKE0tbcwku8t1zk5QOS3g/S1/351HJ5XUaDvp9PrhJS8ffyTtjlUf3HgA0OcGD9gfC6c9OTFI32rSukA1E/bn@vger.kernel.org X-Gm-Message-State: AOJu0YzVpqlfgZkSa+d5gfd3GxBvwv0rwJDKBFTD15nhxA1/wFEhc3QZ /Cprf+QlXTu+owd6G1nqJXluIF4Np85drxFCmmd9bsnJtbu1Mss7c694 X-Gm-Gg: ASbGncv8kkZeo3J7MP95BcfHkGe4lFTIjNkT/s+9ztPPHvZ6n63YCBlceTvfdI59Tbl naq3xeiJ3LZlZgLddchmn2ReaC4IjNSsSYD99SIzcJxCtQZ5B4wOEc98qda457tB5WSQcEn104G yzB2KwAc8YFh3xp1j9NX260KSjvLCEsu5o7rx4nZdOtZKuAFbot9AhivT4T318QEgZsvlk4jW3f XzxGgKGRpbHx15jcCRFLxT/4VR39aR+aKOpWeOfqicrr4laT85CPULDRB6fiq6RVCeR7pOnqaR2 hyn98MdzzBOKaXdCji7ABCT91d5tZ5UqYEZ/AvmkLzw4lOTBem9MpySSwmhhBilH8pfzFb7U2Ui N66b7bdDPhyv3q47hok+GXx09 X-Google-Smtp-Source: AGHT+IEdA/XaGXVJ1TggGwRhVXhGhTQvFoZsmFrIJGc8b+YF6Bcjc/vW/PMdiDFJx/cIotl6KA7eaw== X-Received: by 2002:a05:6a21:998f:b0:21f:86f1:e2dd with SMTP id adf61e73a8af0-21f977b5827mr3426388637.11.1749708737615; Wed, 11 Jun 2025 23:12:17 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7488087a7e8sm631486b3a.25.2025.06.11.23.12.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 23:12:17 -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 v5 3/5] relayfs: introduce getting relayfs statistics function Date: Thu, 12 Jun 2025 14:11:59 +0800 Message-Id: <20250612061201.34272-4-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250612061201.34272-1-kerneljasonxing@gmail.com> References: <20250612061201.34272-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 Oct 11 00:44:26 2025 Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) (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 6F5051F4CAB; Thu, 12 Jun 2025 06:12:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708742; cv=none; b=hLB4tY/0gvnyma9oq6c3bTDCsdsgaWX0XB0ENzJjhaq1e/3N3LBZyaJ/3CavISgegFEACHVjtwALUY+8XQ4fkEngVGuATFHFeDTe6uAZvyRYt2WCpKNACagcZumMYgNFjCUDhmT1sTRmqs5RWMT3wseKRjrv61UqSliHRCVBp4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708742; c=relaxed/simple; bh=9vmq+cY8WfP96FmqEMCfBBplc9rVJ7lBf9uxqjl832c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ZK9sg86mKjB69cQ+KGA6Z9/HfcmkC24C8C+Emg5I8lFkOH+0odKSooLLrnepf/sygRi7U01ZFZ4qimWPX/L1uzmzbkK9XHCktelOOmL7tP6yVwSgcNy/vSAEGqTBpzUj50uT9bXjkdtY+9L96KE5tiMh6K5TK3+tw/6J4OXbbEI= 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=M1tQi4UT; arc=none smtp.client-ip=209.85.210.178 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="M1tQi4UT" Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-73972a54919so606047b3a.3; Wed, 11 Jun 2025 23:12:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749708741; x=1750313541; 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=RwfgiRZ/gDrHIkeKaCtubEASF324Y/N74+a30GI4VTw=; b=M1tQi4UTTBCeJ1g+2h4XGFHYyL8+0k/WKC/X2jKgW0pzgXUFQkWXSMUtt0VB7iDO6q g/UWZqFZYMCLWDyu3Lh/8nDiH+VYEWj+3SRyaH8NfxsFP6SJ3OaZKM3HGpVhTFNbMg2c ZZVn0EgKA4jmtlqR28BWiWwrJdbb5ctGSVfzh+p0AyB5346tP/9/GGLWhhZrQw+AvLbX SUS6WYmrEJtrjmwqaj8SGLwZupsWtO4PgMdAU8t6fdQXt+FWc6JnYC8FiIOscCg1y0YE /tNlmdZfQMKMFEsGrQKWNAqHbKnyrP+aXSt1idZ8UmXJf0o/ZSpFUFN3Iw77xKt5MUI2 JHOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749708741; x=1750313541; 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=RwfgiRZ/gDrHIkeKaCtubEASF324Y/N74+a30GI4VTw=; b=aYBY0FYDPmQLIaJh1yCRZES/wKoZaKKC5JE+A+D81Ahwv8Lijk6Ey+BJ8d2e/7JIb+ qE8HeSKZKhL+a/mIibjCuNRMUAklO/SQFKL52KeWbfY7hCgr55gnQJQUborMTpZAsnF7 Jns2q0oPaasWUv1o0+yC75fyY1fnS9CRo8J3gTdKb9fNn/lZ1M4AfPDhOrcI+kAlieOZ CcVEARA9yAKohpYx35a0s7GIVtl2pReqjx0MEf/br+870VhgoRpNLApXOz8fUWqGuNCK ly0/lBd/uB6cdcptKmlMCVjlGQ4zZ/MTo18iXEyafJ+6NUBa2QcjSoQkAfZMeOLmDYpA 6HwQ== X-Forwarded-Encrypted: i=1; AJvYcCWZegXBtjeiz8OQhUXzngf/AiwcAMZf4z/sPpKAABzp+F2Kwl9XasbkcwBgL+Fri0dd8poFUx0zPzXc0n/BhA6LhdHL@vger.kernel.org, AJvYcCWqPTmS+NUlTNIMmAmkO58ZtHrvEsWqwmic8NCP1/E2/BJP2rEvDW9r9lEWVZGpZPnhRDx7k4Qy5aeBAA==@vger.kernel.org X-Gm-Message-State: AOJu0Yw1Q1yiPOqZUDDB4XcR5BaJdRzcrX6+kIGTOSopN33T7JK+T1E0 a9kjYwISV8riwruZcxdravPOUzT5MhoJidk50hrTk9Uyu1y86pAcqAnu X-Gm-Gg: ASbGncsCgQnT6DI1yqyKQKtkEXOa+uJmeRtQ5fb/ygLaPmiqldUpH9rODaNAis4S+ib bB9gXL7Jo8giR5SQbs6rz4tJR7ZpXDnpd+HGK5o7g5WJgBM0SvM6qorNTeLatY/LX2aVQGycX1e Q0VYY/73mLt6jPfxTw0QpruI/hOgeGUpstU8f2NWJH0sBQEpZnu57xceOmmXfBzuXXRUYtGk6cn Z2DReFqfFMIzUZBHvofvyTVFfLYK/oOLV+eYJ73oWtijWdVtNRSSKYjH31MjB2C1d9nMMv/warH o+RWJNav3xIrEgIIlOFnueTTW/NbrgmGDqBnRPgIou4xcILzSG9s8VT2/Ano08IcUsrO7LX2EVt /Q2MY+A/wYbuVVtYN9lYTc9Fh X-Google-Smtp-Source: AGHT+IHW2qL+8w2LrASQ3rKwMp9H5GP+8KhRmin6EdrqDdZQq8jryXGwPhSjqf6oihMgpvDBO1fENg== X-Received: by 2002:a05:6a00:3925:b0:736:d297:164 with SMTP id d2e1a72fcca58-7487e0b1b93mr2438063b3a.1.1749708740671; Wed, 11 Jun 2025 23:12:20 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7488087a7e8sm631486b3a.25.2025.06.11.23.12.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 23:12:20 -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 v5 4/5] blktrace: use rbuf->stats.full as a drop indicator in relayfs Date: Thu, 12 Jun 2025 14:12:00 +0800 Message-Id: <20250612061201.34272-5-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250612061201.34272-1-kerneljasonxing@gmail.com> References: <20250612061201.34272-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..5401b9006135 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), "%zu\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 Oct 11 00:44:26 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 4778A20E034; Thu, 12 Jun 2025 06:12:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708745; cv=none; b=FeYiW33Y0k9e4LEs1MT7jvSXp1/rhWU0rprc06HCOUnNd+GSrUwb73fgvCv6XojfyZ/yhvishpyIxKAx0Kj9xFkGEwCO1GCCo3L4Tn7Yc0M3l5+iZnbRts7akUvrLbLQxQsLMlB7c+v7SV38cj9cxPl5qv//ha5nY7xO0REwRv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749708745; c=relaxed/simple; bh=XT21aCq/7P6YAwPCKmY+1PKON7RZG9sndxfvvN+6Cl4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IJEnDAkAC0V3zOORFTdyTkM8WtIqklTF5jpaK9qidGdruygu/F6UICFjko/m/rZ8s7S/ihQVt6YG0RuYZmiKG4RFcmue22JX2k26l7CpcEb5G4E2xT0qP89cxlMmQqwml9ZxQjOjImSyh0yFTmFzAxJtKfmjJzfYSxica9BULdA= 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=c9RPzszv; arc=none smtp.client-ip=209.85.210.170 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="c9RPzszv" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-7481600130eso833978b3a.3; Wed, 11 Jun 2025 23:12:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1749708744; x=1750313544; 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=c9RPzszvHWTWm1ZyNSYevDsA1ARLy0m+61WIsAC1Wtzrgv8WTOBsP5/cG7+E9W028E TlHXeZ7dFhrzhStejVzGIySs+v4h9dAKp6jgx6k04+7ONndL47gYNthAMiss1myP3Df+ 1Km+gVMx2CP5yLhWkp7pYoK8zn/nSdejrLOUF4Kg4BWktF0Xi9pPEPLdLwgMCpZNmjdS MlPsNBDivF00QQ1Oun2BUk9kofcmmUKyO7YNGTk4czmPodVPcqrvHmNHfgEioeLXiC0m h0qZl9d507613bZ8DLO5VlmHnGNcLUxaBrXAi95MxynjmliXdBc5HjgkvmRBwloS208M ISTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1749708744; x=1750313544; 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=P5KoD2SKPYqtHtTgzjK3+5zMIws1J8UmvL0sbIHoHtYe4MJPGZ/yUJ9ycF1rk94MHa 1SfyjUYSSgXWl0PgWBVCQPNsogO+SHp1y+Lg0ZAwQqdvr4sCEDYcV/OysmrzfMRXQDOE VZMtLfUb1YekJwDA1t4/mcic3vq/qc3vtZ4ywzR7+ZVZgBA9APegOPUMA/plvcONBXai O9juDy3qADGB5vazm/5UEc50e9IDPb3srj9ZEsrlAjQjfNqX3Co04B2u0lUZuTprPcT4 cqcbHQEqOdQ8fh1nVK2AtEkkTxK2mfg7b8OU1Eie52x1zyRaHJEeZgeW7bGVUIjBE6IV 29Ow== X-Forwarded-Encrypted: i=1; AJvYcCUiXiSjh3cPpKmowQZEBoVj+fgQRSq0SParU+f3R7PFZTqGdAI3L7ruFZDlj8UqYkpY6dg3OTj8mYRN1A==@vger.kernel.org, AJvYcCVvdHH5SxSqzgbklPm5cnZyXTKESjtye7slDn7kocRlc4UnKdUXgJYwUjoF6/ylQ3fPskV2k9ej9AC8SnGYlv0m0kvo@vger.kernel.org X-Gm-Message-State: AOJu0YytDnzq642J9T6huqkY/cpgX+zBNK2w8glStwzSqrroD/YlzL1b A2sAdLELD7QtQGencgMVhnddXyXMeEUrSpSzc/i/ZKV6pfEyvoBZ6JJY X-Gm-Gg: ASbGnctTZk/DwKrJEwdo7alJLPjS8/WtcGQHTi85iraXT+rpyNUuZIaf7uBWYsWv6Vh 6z+VA9YL6xwLDXULNxYxqtKkeqIoCWMYk5uJwDRA3SjCPovDQxNPPcYzZD3msSj8HJWkymUpSK1 ybMmrS8PJQIzBk9CpTPrF8it0bLRTTBNNLMeeRUXmvHDgAtaWp7shk9MA5ScggjSdizYxRUaYdl ZWUkOWFH7030aUnabbP3ccsl7xGlJLZ0w9IqI8xitQr4pLyRSc7Kd2YhRzCWdv83FosqBxgBLAV oht4HvX48ISXUEaFo1weyQyqf6DEk+1rd7z/wD60rGM9NrBJiph+/Vt6Wt1uJSU8xW5kUEAovRL qzW85vxpO4669klT/83ygryH8 X-Google-Smtp-Source: AGHT+IFRFXfz1zMb9CmSe+W7cJXS7Efae+Vjrqm0mdRl2xjwkt5ibwvMzol7BSQ3/GyN+cpBEmn70Q== X-Received: by 2002:a05:6a00:b95:b0:73e:598:7e5b with SMTP id d2e1a72fcca58-7487c207d5emr2984128b3a.1.1749708743709; Wed, 11 Jun 2025 23:12:23 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7488087a7e8sm631486b3a.25.2025.06.11.23.12.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Jun 2025 23:12:23 -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 v5 5/5] relayfs: support a counter tracking if data is too big to write Date: Thu, 12 Jun 2025 14:12:01 +0800 Message-Id: <20250612061201.34272-6-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250612061201.34272-1-kerneljasonxing@gmail.com> References: <20250612061201.34272-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