From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.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 EB04F57331; Fri, 26 Jan 2024 23:13:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310835; cv=none; b=LX+00XuisPmlq50wAcauOfoSye3EbaRuWdwo8l9uC2/JnCIB5De5BUHPKx/AjSzTNGedy4ph3nDWYLfxhfrHJLANdAr20FT1utyAljO/oEj1PJAzwHKl7PZe+fWXl5lfN3q5HfbMgSKL9sCpiw3WXZ4K2Txr7tTWGGlT4dHYyD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310835; c=relaxed/simple; bh=s3tKx9YDYT51+QXp1CdeWhCE59bgmZCtnv1eFlCrWyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L5r9cL9N4i50UR+L2Ilg9J6yeWZ93NZflHqOUw74VkbgH5ykWr3/ekQ1XQEUx8pi2nQcVpN7vdpxM0gurYR5/3cLRskohDHcWziCUaOFWq4HjrNlixyrkDDmf0oUdSW1ARjSDASE1cbXDWavpOtuzFlC41jajMd/Mrt9zVgV/P0= 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=UqPlynPs; arc=none smtp.client-ip=209.85.214.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="UqPlynPs" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-1d70a986c4aso5642135ad.2; Fri, 26 Jan 2024 15:13:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310833; x=1706915633; 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=5a7ZVpYjt4glIMRdLh4WlPExoPNat5beHZOUQY5BsC8=; b=UqPlynPsztqLdGXnaltynKfnV501dth5XU+umP7NH6EvticoVwN+8l3A9oWXGzOhLv wP0GY3tr9DEvogmcO5o2cpzUuMzIGbSmmNa6jSr0f+r74gy2azTL4Z5DJKINFN5v9Y5h 5WyEKBqSez61m4w1Zk9CQcQzMHP797Eq3IBxPHzAyLb1PRK04VrUke9MosItdLEOPSR5 vAoKFzG/Xti/NPdDnspv/NkEBR6oLC4FpmxNybEFznJI01V0Nmz2B83vbqLQsctDqZue 07CWx4iaUGLDBw/R8qeVDL1atO62spvx+F0igmrWbUidD+HnWuvMb8x35LzwkNPoM4f2 fPQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310833; x=1706915633; 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=5a7ZVpYjt4glIMRdLh4WlPExoPNat5beHZOUQY5BsC8=; b=okHBXUfbGAVy4e/8xAzHSwEqI90mr845vBYaNfF/+RS6v9Ptk+2JclKStXglXeEXUg 4/GRRrPPbzLicGSMRz/Fu32v77txkw2FPsNTeu5KilAGxodQvV4gTDL/myB/VkvULis8 eux2ODz1k9fyyXqXMq/xguGPrIc+pku3Xw6iqDwKF+O2QuoAJYqtZXRSKEHxhXIuVl8N KhH9LdS6OBRLvZhwfI4C2WjF4XvBTDWCXLdtkV4vWLQ9Del/gvEltqYRtColb2xSFQ8j DFIgLZikBj3BFsLHqnhr3BarEt4Oh1uNqPU0jLcm5t2tGGkL5kB8yU+okiPADlUUng+l /c2g== X-Gm-Message-State: AOJu0Yxjarb/NMfSOl79xgN6i1LVt+rUaMG5Tn6DCQ7yMtsMql7UlKmS p8mClzmtwGZwibDzW2gyU1R/NjP9L7NrKxU0olcMzLKCC/tqCrMZ X-Google-Smtp-Source: AGHT+IGm8ftLckKRhNCpqB/Sy2E526iG/YQV1te0xGevvgtiE5N9U0X0TtpC38erBINEyz2AwoJrzQ== X-Received: by 2002:a17:902:7402:b0:1d7:52b6:d178 with SMTP id g2-20020a170902740200b001d752b6d178mr701957pll.42.1706310833146; Fri, 26 Jan 2024 15:13:53 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id jy15-20020a17090342cf00b001d71eac34a6sm1426298plb.294.2024.01.26.15.13.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:13:52 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 1/8] net: netconsole: cleanup formatting lints Date: Fri, 26 Jan 2024 15:13:36 -0800 Message-ID: <20240126231348.281600-2-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Address checkpatch lint suggestions in preparation for later changes Signed-off-by: Matthew Wood Reviewed-by: Breno Leitao --- drivers/net/netconsole.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 6e14ba5e06c8..93fc3b509706 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -49,7 +49,7 @@ static char config[MAX_PARAM_LENGTH]; module_param_string(netconsole, config, MAX_PARAM_LENGTH, 0); MODULE_PARM_DESC(netconsole, " netconsole=3D[src-port]@[src-ip]/[dev],[tgt= -port]@/[tgt-macaddr]"); =20 -static bool oops_only =3D false; +static bool oops_only; module_param(oops_only, bool, 0600); MODULE_PARM_DESC(oops_only, "Only log oops messages"); =20 @@ -501,6 +501,7 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, =20 if (strnchr(buf, count, ':')) { const char *end; + if (in6_pton(buf, count, nt->np.local_ip.in6.s6_addr, -1, &end) > 0) { if (*end && *end !=3D '\n') { pr_err("invalid IPv6 address at: <%c>\n", *end); @@ -510,9 +511,9 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, } else goto out_unlock; } else { - if (!nt->np.ipv6) { + if (!nt->np.ipv6) nt->np.local_ip.ip =3D in_aton(buf); - } else + else goto out_unlock; } =20 @@ -537,6 +538,7 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, =20 if (strnchr(buf, count, ':')) { const char *end; + if (in6_pton(buf, count, nt->np.remote_ip.in6.s6_addr, -1, &end) > 0) { if (*end && *end !=3D '\n') { pr_err("invalid IPv6 address at: <%c>\n", *end); @@ -546,9 +548,9 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, } else goto out_unlock; } else { - if (!nt->np.ipv6) { + if (!nt->np.ipv6) nt->np.remote_ip.ip =3D in_aton(buf); - } else + else goto out_unlock; } =20 @@ -781,6 +783,7 @@ static int netconsole_netdev_event(struct notifier_bloc= k *this, spin_unlock_irqrestore(&target_list_lock, flags); if (stopped) { const char *msg =3D "had an event"; + switch (event) { case NETDEV_UNREGISTER: msg =3D "unregistered"; --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 AEB0358ABE; Fri, 26 Jan 2024 23:13:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310838; cv=none; b=Cn/LzlgjRFmV2IXJSz3Ts8EGGjpRZX/3AN6nXFNMBY+ZpkazDERa8JEFk9IMWabNmVQrlOgZrATtCoOcy6yiizot3Lmkz41qh5pyO4rFtQ1oMrOlCFCqwncB14JCAf/AZtJV5rN/skKNYDcjP+S/zC7aj17Pg+4XlI+42NGFBtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310838; c=relaxed/simple; bh=HMzX7rgJBLGzBn8O3HLnD9vak9OSsdwseRcSZQv13NM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZLP3dbus85rACkkQq+kfgD0xmv0akpWbp6L24GiBf2AJtasaeOXU6dDZNMM6RRKdIQWTtVHlGRQYyY4chkcNzuYxincZHyve0iUJFpzrsG8X/K0QT4El9mbRPRhmggMdpExtiNOLL29ZeZCZHFHwu2be1DoKtZLBW3uhiJCyLJc= 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=RDCaLsaj; arc=none smtp.client-ip=209.85.215.177 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="RDCaLsaj" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-5d3912c9a83so630895a12.3; Fri, 26 Jan 2024 15:13:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310836; x=1706915636; 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=rnkGomYm3D+fpLxdujWN99uxXSHNQWvM4sS9axkvWjE=; b=RDCaLsajsW9vCLrFJ8RgXaWvYl0LCx7R6pzNOPuaQAj0E5h4L/vrcPId6/yoEviw4m gs5nRuV11JzYXDJHM44LL5abRXn6BMxMOSSVW3XxsbEtaXE2zQytgWMT1vE6C+v+wBIL cFlyRdQHePpBbXlhxU66NXvYUNzxYeqJSPdrwkZPxXti1ACnIYdk/sVK5voa2dgg0ap0 1yLe2dFlPPyEYHgp+sIEH7I558txuJYZQA4myzEY3vZNXPqajRENVbDbOnDvTtfWCsnJ HnEfMw4bdS7BwNTzO5s5XgIRale3/UFQebnk01717i2o1chfLpnB6MNYj6u2jTASs/gQ jxfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310836; x=1706915636; 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=rnkGomYm3D+fpLxdujWN99uxXSHNQWvM4sS9axkvWjE=; b=bcppaEA22PYMp/AdNjtFLRMgtghMya8OPh4o4Qz0P01E2MTmY6oSwhQvZLL4p6Tge6 xB+N3BW74zRCPazrjLi5NbeF4bAw8AA4bR2QphK+ZAyKmLDPlUPxCec/0YmxBFOazwZ7 ES+2OIDqejy2UJ1L2BPu8BCl6xWYlU65/ueyUQ0tS3ftPiHP3U0NTJmwE0zvSkPOILAt xdqZSlKrorQPeUk6UOq0nj1kVjkGRLHC4pzza35s/Ehx3zb1l4HaflSH48c03b33GIfM YDNhum3aomB4BGprWx1dpUI09dryGPlOxlyDSbxbNuh9dJa2i7Hpuks6K3fdgz5jTMsO 7ENg== X-Gm-Message-State: AOJu0Ywu35UnWLKA4tqIKQuQddmsSJewbDxV2Q0utz3vjIATz+++G0nC 7KG8qJSHOioDB2KpqOs2MKtnenN5IQZ/A8yI2bB33vb864Lcous4 X-Google-Smtp-Source: AGHT+IGy196ANI1JFjuq2M6xxkwRLO7pCqCc6UtQqIJgJXNZnz3586RKVwWskgYdGbu/goJgtTeFvA== X-Received: by 2002:a05:6a20:a120:b0:19c:6dd4:9862 with SMTP id q32-20020a056a20a12000b0019c6dd49862mr649492pzk.5.1706310835938; Fri, 26 Jan 2024 15:13:55 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id gx20-20020a056a001e1400b006dde04c10dasm1607626pfb.217.2024.01.26.15.13.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:13:55 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 2/8] net: netconsole: move netconsole_target config_item to config_group Date: Fri, 26 Jan 2024 15:13:37 -0800 Message-ID: <20240126231348.281600-3-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" In order to support a nested userdata config_group in later patches, use a config_group for netconsole_target instead of a config_item. It's a no-op functionality-wise, since config_group maintains all features of a config_item via the cg_item member. Signed-off-by: Matthew Wood Reviewed-by: Breno Leitao --- drivers/net/netconsole.c | 61 ++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 93fc3b509706..085350beca87 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -79,7 +79,7 @@ static struct console netconsole_ext; /** * struct netconsole_target - Represents a configured netconsole target. * @list: Links this target into the target_list. - * @item: Links us into the configfs subsystem hierarchy. + * @group: Links us into the configfs subsystem hierarchy. * @enabled: On / off knob to enable / disable target. * Visible from userspace (read-write). * We maintain a strict 1:1 correspondence between this and @@ -102,7 +102,7 @@ static struct console netconsole_ext; struct netconsole_target { struct list_head list; #ifdef CONFIG_NETCONSOLE_DYNAMIC - struct config_item item; + struct config_group group; #endif bool enabled; bool extended; @@ -134,14 +134,14 @@ static void __exit dynamic_netconsole_exit(void) */ static void netconsole_target_get(struct netconsole_target *nt) { - if (config_item_name(&nt->item)) - config_item_get(&nt->item); + if (config_item_name(&nt->group.cg_item)) + config_group_get(&nt->group); } =20 static void netconsole_target_put(struct netconsole_target *nt) { - if (config_item_name(&nt->item)) - config_item_put(&nt->item); + if (config_item_name(&nt->group.cg_item)) + config_group_put(&nt->group); } =20 #else /* !CONFIG_NETCONSOLE_DYNAMIC */ @@ -221,9 +221,13 @@ static struct netconsole_target *alloc_and_init(void) =20 static struct netconsole_target *to_target(struct config_item *item) { - return item ? - container_of(item, struct netconsole_target, item) : - NULL; + struct config_group *cfg_group; + + cfg_group =3D to_config_group(item); + if (!cfg_group) + return NULL; + return container_of(to_config_group(item), + struct netconsole_target, group); } =20 /* @@ -370,7 +374,7 @@ static ssize_t release_store(struct config_item *item, = const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); err =3D -EINVAL; goto out_unlock; } @@ -398,7 +402,7 @@ static ssize_t extended_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); err =3D -EINVAL; goto out_unlock; } @@ -425,7 +429,7 @@ static ssize_t dev_name_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); mutex_unlock(&dynamic_netconsole_mutex); return -EINVAL; } @@ -450,7 +454,7 @@ static ssize_t local_port_store(struct config_item *ite= m, const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -473,7 +477,7 @@ static ssize_t remote_port_store(struct config_item *it= em, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -495,7 +499,7 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -532,7 +536,7 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -570,7 +574,7 @@ static ssize_t remote_mac_store(struct config_item *ite= m, const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -638,7 +642,7 @@ static struct netconsole_target *find_cmdline_target(co= nst char *name) =20 spin_lock_irqsave(&target_list_lock, flags); list_for_each_entry(nt, &target_list, list) { - if (!strcmp(nt->item.ci_name, name)) { + if (!strcmp(nt->group.cg_item.ci_name, name)) { ret =3D nt; break; } @@ -652,8 +656,8 @@ static struct netconsole_target *find_cmdline_target(co= nst char *name) * Group operations and type for netconsole_subsys. */ =20 -static struct config_item *make_netconsole_target(struct config_group *gro= up, - const char *name) +static struct config_group *make_netconsole_target(struct config_group *gr= oup, + const char *name) { struct netconsole_target *nt; unsigned long flags; @@ -665,8 +669,9 @@ static struct config_item *make_netconsole_target(struc= t config_group *group, if (!strncmp(name, NETCONSOLE_PARAM_TARGET_PREFIX, strlen(NETCONSOLE_PARAM_TARGET_PREFIX))) { nt =3D find_cmdline_target(name); - if (nt) - return &nt->item; + if (nt) { + return &nt->group; + } } =20 nt =3D alloc_and_init(); @@ -674,14 +679,14 @@ static struct config_item *make_netconsole_target(str= uct config_group *group, return ERR_PTR(-ENOMEM); =20 /* Initialize the config_item member */ - config_item_init_type_name(&nt->item, name, &netconsole_target_type); + config_group_init_type_name(&nt->group, name, &netconsole_target_type); =20 /* Adding, but it is disabled */ spin_lock_irqsave(&target_list_lock, flags); list_add(&nt->list, &target_list); spin_unlock_irqrestore(&target_list_lock, flags); =20 - return &nt->item; + return &nt->group; } =20 static void drop_netconsole_target(struct config_group *group, @@ -701,11 +706,11 @@ static void drop_netconsole_target(struct config_grou= p *group, if (nt->enabled) netpoll_cleanup(&nt->np); =20 - config_item_put(&nt->item); + config_item_put(&nt->group.cg_item); } =20 static struct configfs_group_operations netconsole_subsys_group_ops =3D { - .make_item =3D make_netconsole_target, + .make_group =3D make_netconsole_target, .drop_item =3D drop_netconsole_target, }; =20 @@ -731,8 +736,8 @@ static void populate_configfs_item(struct netconsole_ta= rget *nt, =20 snprintf(target_name, sizeof(target_name), "%s%d", NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count); - config_item_init_type_name(&nt->item, target_name, - &netconsole_target_type); + config_group_init_type_name(&nt->group, target_name, + &netconsole_target_type); } =20 #endif /* CONFIG_NETCONSOLE_DYNAMIC */ --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 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 28E6E5A0FD; Fri, 26 Jan 2024 23:13:59 +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=1706310840; cv=none; b=EEd/Rsvf2G62HOdeKWSp8oYbmQuB3uOr8OgXu41n/ua3xD/qRlvffUrQztwNpS6GDMFUUvtd9mQgsnZzzQNCg1xa0uQbrOqPxHW/41XaE3KDRfqejEb3AmpgbN3YNt5TA9yks532aAqALrtbEM7wuoeBvbc2c6EUQE9/TMU1rxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310840; c=relaxed/simple; bh=mPmolvHAcBMTIShhgLdXXMOUD8GBeSY8wUZZNyXtmXI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J9wcMqFKVJGC5sn4v06DuZirv0LFh0feHyZZxn9ZONRXcKa3ISnnXVqiyVZEK/6xZ2fF51N7/aP1HvNsLJBH4NgCwRN1PP8EYk4tj/FU9meEdklyjn/RMhv35T0YR/JfgtfAAARa+UFn14TEL5y/y4FA5NgLfxx4Um5UFYuxou4= 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=hGyWAaVv; 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="hGyWAaVv" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1d89518d3b1so5883815ad.0; Fri, 26 Jan 2024 15:13:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310838; x=1706915638; 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=aZZIgE9h2jQLSmHO3bzM7GbmlOxYLfQCD/fuB/DQM9s=; b=hGyWAaVvZQNrrxP7Un4wFXI8kbYJUSEBvlY0oQg+18okqMTikxGrl2uVcgyhnljyz0 Ol+zVxwsqtirwthPvkoDrgMzv1sfotWsON3rqRLQUJl8FNgmzdDZe5rcC0SjIAhx7shp 2BbB6b5+D9E6wMAQIUhfPNTXt33kpx3dMV834Ofg3VUQ8biR0h7U/c30RJSB+gqqELVb mx2hLR+VrH+s5MTnD+yFaThi9GK0gbdTx7pm43jknVPOTIRwu5yQ0hnnKLLJgUSgJHir /owYo9DUpM2jM+k75Qht8vzlX60EUTsytRmlkIJtG1zkuAGjjxJePgKqFKUwxUTGIv0o Fg2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310838; x=1706915638; 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=aZZIgE9h2jQLSmHO3bzM7GbmlOxYLfQCD/fuB/DQM9s=; b=OAh1EvnhEbemyLxY/+OS93NslwVxZF4Un+31WpAGRw1ytEV0SApB0KjaScnNtziCeC r22LTiA5KK3L7pqftU16z4sRJ6PYamYxxHTG8yApnXe1F47pFE/yPiOfXq3qETQiawOX 3Gum26AaCcA++PZsQjB9+FATpNUCQmpuKlH/0yrsDuq7kgQ/UgU6Jf5w8BETg/DOr2ds XSOLabA4Xr1rBl+gd6F/1dbzDmtDOZ7ASCYzQf4fDJD1PzXRzz65AY/75GXz0D019LFW 5+vBAeWouG4S3VJt9lJtRd58ETf6eJBhSyqcZ4jQXktdlN1h5Urcyjanp2xHtg2SWysY LDGA== X-Gm-Message-State: AOJu0YwBfgW6m5wHOvq6YnNbXSW3osr21C+5O/DQjJUnjzDNjIEJbK05 2ZWDVbxRTw6vQbNSrjy7En5+upG5Pm+xSMcUZGUSk/HMZ4BWXtF5 X-Google-Smtp-Source: AGHT+IH3C1Qnf0/6+4NmaQmZ/uEZDQRfzVSUp/eHC9XhRuIpUhozHkj66BmMY4loCbOv+N4q1N37sw== X-Received: by 2002:a17:903:28e:b0:1d0:4802:3b6c with SMTP id j14-20020a170903028e00b001d048023b6cmr733262plr.4.1706310838445; Fri, 26 Jan 2024 15:13:58 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id l6-20020a170903244600b001d78813c8a5sm1423159pls.49.2024.01.26.15.13.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:13:58 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 3/8] net: netconsole: move newline trimming to function Date: Fri, 26 Jan 2024 15:13:38 -0800 Message-ID: <20240126231348.281600-4-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Move newline trimming logic from `dev_name_store()` to a new function (trim_newline()) for shared use in netconsole.c Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 085350beca87..b280d06bf152 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -230,6 +230,16 @@ static struct netconsole_target *to_target(struct conf= ig_item *item) struct netconsole_target, group); } +/* Get rid of possible trailing newline, returning the new length */ +static void trim_newline(char *s, size_t maxlen) +{ + size_t len; + + len =3D strnlen(s, maxlen); + if (s[len - 1] =3D=3D '\n') + s[len - 1] =3D '\0'; +} + /* * Attribute operations for netconsole_target. */ @@ -424,7 +434,6 @@ static ssize_t dev_name_store(struct config_item *item,= const char *buf, size_t count) { struct netconsole_target *nt =3D to_target(item); - size_t len; mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { @@ -435,11 +444,7 @@ static ssize_t dev_name_store(struct config_item *item= , const char *buf, } strscpy(nt->np.dev_name, buf, IFNAMSIZ); - - /* Get rid of possible trailing newline from echo(1) */ - len =3D strnlen(nt->np.dev_name, IFNAMSIZ); - if (nt->np.dev_name[len - 1] =3D=3D '\n') - nt->np.dev_name[len - 1] =3D '\0'; + trim_newline(nt->np.dev_name, IFNAMSIZ); mutex_unlock(&dynamic_netconsole_mutex); return strnlen(buf, count); -- 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.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 8953B5A7A9; Fri, 26 Jan 2024 23:14:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310844; cv=none; b=MHA1/MVcahNJWucmtdtUhBGTG1rIaowhPDxpAjqxPGpNJge1ZYtyzciZq1tLhOytMu9LhX3NH8APNNS7olW81PZnAznLe/g0YL2Q0KirnYTm+LUNpfZjAaHQEDofUymmPWNvY2bO7wFYP75WIwva9fBc9eC5GLJmr0Kh//nTCGg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310844; c=relaxed/simple; bh=JUBz4HV56EeU4/nPAgND0SO1KSnQD6Dq6LeiFiNVnDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QOjtZ0PXo4b0f/lQNdOeUeibmms/GvmNcytq3Yv2pCr3hJj40EEj/MNPvSrgni7CGpNCnIKbj3DFIudGam8sY8SpefM+VjU9/wOoHPfFOSp+6gAvd2lPran+biyknm3nZAIrnlwP4rbLmKU3RK5zbMpLWYG1c3F0Y77wR3FCOk8= 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=gjYlVpoV; arc=none smtp.client-ip=209.85.214.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="gjYlVpoV" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-1d71e184695so6162055ad.3; Fri, 26 Jan 2024 15:14:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310841; x=1706915641; 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=gneFCt4ceG2iUK09c51bLYD/2KQfSVJ2BvbrNzbdXrk=; b=gjYlVpoVAcTPdVotSYVxzOP2J18W/qtl/RzfofHdUILoNuZz31r2dW1vhg43RE25qC Fnypm6L1SJT8SMj3XuwSGDD1Oc2rfzsg/b80idoFlzTz3FDLzBs4mRMFzyjutZXaSxN7 ddp3EbGkt+DTd8X/qn+/7APBnopKhy3kjd6bXU8wj6MhoJzL+tKjUVBZF1oRlPb7BB1w lB+EizqwLfT27i+lPXnX4LJH1TIMJOLmsf41wCa7lMbfwceCdcM5gkVwoDDYsxRLsJbq cOZWy+HJvJ1ESTJd2EtHed8var8EZH18diZb0EzuuNITkDMXO1rgjCqZbGU660zojxsg vAzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310841; x=1706915641; 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=gneFCt4ceG2iUK09c51bLYD/2KQfSVJ2BvbrNzbdXrk=; b=vX6utjTi8tIpO5WSUgNA+YfXzTjqimyyAHcD2xc/Be51+7KuaOw7qbM7qvqkWjWNKI 2VQqp3zkuZfzF1xpimn2n/4LKRvNCKX3akPyWnd+WUJQiKN2t8HDS89XPs2qh+DIjPCZ lb+L0Bv8QyDFVBoE/bERJr1Se0YqgYZJgps+zs6Yeuuek0vZgul5m1QAkVMu6dG+ip5l UHG59L1PK+n+urywPJiv5Uh+Z424rbmTGs9UsYfUZQE8pooaPVlrFRCyA3aYWTojaNd1 Ut+yOpgF8FF41bNMBzKiNt2jqyZhuFeZqu5RFgOvwnjwhlhzfsZvE/LRnWaRy7ajF8yM aKsQ== X-Gm-Message-State: AOJu0YzV62rrugyW96IUYEyeumRNmkTwVS7+KgIn80r1fRox8R9pasv0 d+ZF+wDg6C/IwsESWfF+RzIJih55B00rbZnoYwYsylsa5xc7ZMBJ X-Google-Smtp-Source: AGHT+IEo92Gmz/anXbxo/lMXdH5mYbm+3w9cOfWNDx6wvuQgfmscDCs7yHOGdgkXT5QeLd5pubpufA== X-Received: by 2002:a17:902:9f88:b0:1d7:7b3d:99b7 with SMTP id g8-20020a1709029f8800b001d77b3d99b7mr743822plq.132.1706310840741; Fri, 26 Jan 2024 15:14:00 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id y20-20020a170902e19400b001d71923136csm1431251pla.211.2024.01.26.15.13.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:14:00 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet Cc: leitao@debian.org, netdev@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 4/8] net: netconsole: add docs for appending netconsole user data Date: Fri, 26 Jan 2024 15:13:39 -0800 Message-ID: <20240126231348.281600-5-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Add a new User Data section to the netconsole docs to describe the appending of user data capability (for netconsole dynamic configuration) with usage and netconsole output examples. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- Documentation/networking/netconsole.rst | 68 +++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/Documentation/networking/netconsole.rst b/Documentation/networ= king/netconsole.rst index 390730a74332..54f072f47921 100644 --- a/Documentation/networking/netconsole.rst +++ b/Documentation/networking/netconsole.rst @@ -15,6 +15,8 @@ Extended console support by Tejun Heo , Ma= y 1 2015 =20 Release prepend support by Breno Leitao , Jul 7 2023 =20 +Userdata append support by Matthew Wood , Jan 22 = 2024 + Please send bug reports to Matt Mackall Satyam Sharma , and Cong Wang =20 @@ -171,6 +173,72 @@ You can modify these targets in runtime by creating th= e following targets:: cat cmdline1/remote_ip 10.0.0.3 =20 +Append User Data +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Custom user data can be appended to the end of messages with netconsole +dynamic configuration enabled. User data entries can be modified without +changing the "enabled" attribute of a target. + +Directories (keys) under `userdata` are limited to 54 character length, and +data in `userdata//value` are limited to 200 bytes:: + + cd /sys/kernel/config/netconsole && mkdir cmdline0 + cd cmdline0 + mkdir userdata/foo + echo bar > userdata/foo/value + mkdir userdata/qux + echo baz > userdata/qux/value + +Messages will now include this additional user data:: + + echo "This is a message" > /dev/kmsg + +Sends:: + + 12,607,22085407756,-;This is a message + foo=3Dbar + qux=3Dbaz + +Preview the userdata that will be appended with:: + + cd /sys/kernel/config/netconsole/cmdline0/userdata + for f in `ls userdata`; do echo $f=3D$(cat userdata/$f/value); done + +If a `userdata` entry is created but no data is written to the `value` fil= e, +the entry will be omitted from netconsole messages:: + + cd /sys/kernel/config/netconsole && mkdir cmdline0 + cd cmdline0 + mkdir userdata/foo + echo bar > userdata/foo/value + mkdir userdata/qux + +The `qux` key is omitted since it has no value:: + + echo "This is a message" > /dev/kmsg + 12,607,22085407756,-;This is a message + foo=3Dbar + +Delete `userdata` entries with `rmdir`:: + + rmdir /sys/kernel/config/netconsole/cmdline0/userdata/qux + +Beware of `userdata` entries with newlines since values are printed with +newlines preserved. A userdatum value with a newline could cause the +netconsole message receiver to interpret a value as a new userdata key:: + + cat userdata/foo/value + bar + bar2 + +The `qux` key is omitted since it has no value:: + + echo "This is a message" > /dev/kmsg + 12,607,22085407756,-;This is a message + foo=3Dbar + bar2 + Extended console: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 1B3585B5A2; Fri, 26 Jan 2024 23:14:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310845; cv=none; b=rWAYuD2ICUS3aRM3YZUg5IU8/qBeOM4V+xRFITuHX77Xb2OQbKY5vbuZ4yUyfaoW3GtHUhRPT9v2Q+uvvNLIcve8A4SG423pA/TXSjzghWcOFb+r6/iblKy/3oVxfB15rNBTFdBTHpkPBTFfqgd/XjR2yg1X+42CbnDdHErmbW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310845; c=relaxed/simple; bh=ZxSvQuKIvS929xpYXb9PbVGUkIwgggEnc5f94Q8zZVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CUQstiTk0aW61KNqVcQ8Eldk0T/XBqOhSc/u044MU70qbg3Nm3YxNvtjL7Z9g45/DFsNvY7Zu9yJWkjkk2kIJ/l7EoYRJ5XtW5cERQgfjsbw4OCeek1mUmoQUdvrYk99/FK5UG8BOxzuK2KscG6tnHi+y//otpfhcpQemHp8Xmo= 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=bVQMOUP4; arc=none smtp.client-ip=209.85.210.173 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="bVQMOUP4" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6db9e52bbccso605645b3a.3; Fri, 26 Jan 2024 15:14:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310843; x=1706915643; 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=EvBhPn9ZH1DBkVaPM0Ti+Jleq5aPuYncHEARZsqxOXU=; b=bVQMOUP4iWXxu5PcRSEbqKNWNiKFrS9NrEEeKwCqcQ/UFEHZscZwq9m1Cg56klDPWR gWwXS+ovsd1rxX4krmwwAnW2JawvHdpjSQmt1ZRYdOEFuRRIt+yyx5exYupOEwN+qXh9 4VeGj/akNvPHew4JKSGeiUsYgmvsNKRb0l4PxTojmaDtKHlhgEKVJoMIeGAoDXIwtG1C Swjf3U2u41UxA0LyKjd/qhjlIRrV+mEjqGMs6Lv8SWE0o/9E9bS60IK74a2ME+lKjbnH Yz3jbdKJzfrFuibIHba39gIFVEuT/mBsGYPCMGXJKSlr9BkBk5Q1vuUiFEXW/nIowiXS E03g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310843; x=1706915643; 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=EvBhPn9ZH1DBkVaPM0Ti+Jleq5aPuYncHEARZsqxOXU=; b=vfiD01V8CHBeGi0EqIVZjbZ0vBSzZzE7d+55AQ+P1DODu3lprP3rX+IiflEJ98mWDt xmhFw2yCYdde2IYo2vuP/GooQHQfyTh6doF8IlUwousT7bJXV7uP1IuZ+u3O1YwRd/Eq IWBL1tx3xmYoz0wruftqJsnOgb4R6WTkCM7DXFqyjVa4E4jcpJg01G6vCfWs2caHgBYq sAV4kzzLwHYJJi5QaCxknFXO4oXbCquxwxAvkFwoykAcF1nm7Ln6lSrBUtTK5kUEFd3x gZe1QccBKgPUHkFBm2p8DhAGuaDI8czV3rjgfgmXre4UWd/meWFvEF4XDOgR147+0OWM YU9g== X-Gm-Message-State: AOJu0YySGQCNFKiNTMLQ9bPbNsWq9/6ZFeIy73ctsSTIQ7j+3Hphey2m JBMM9OC/H+NZOS9hjQBDzf39Q5wX9xJIHHL0OnzwmQkvpdx95yBS0zZ0yXly X-Google-Smtp-Source: AGHT+IEgteSIq6kyiudEEHxTOs9Pnacif7cBc6vgumjZuBpJNR1AUJRFNtC52YoERJFCRlQ0+z65Dg== X-Received: by 2002:a05:6a00:991:b0:6db:c9d2:12d4 with SMTP id u17-20020a056a00099100b006dbc9d212d4mr920125pfg.17.1706310843307; Fri, 26 Jan 2024 15:14:03 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id o194-20020a62cdcb000000b006dab0d72cd0sm1674724pfg.214.2024.01.26.15.14.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:14:02 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 5/8] net: netconsole: add a userdata config_group member to netconsole_target Date: Fri, 26 Jan 2024 15:13:40 -0800 Message-ID: <20240126231348.281600-6-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Create configfs machinery for netconsole userdata appending, which depends on CONFIG_NETCONSOLE_DYNAMIC (for configfs interface). Add a userdata config_group to netconsole_target for managing userdata entries as a tree under the netconsole configfs subsystem. Directory names created under the userdata directory become userdatum keys; the userdatum value is the content of the value file. Include the minimum-viable-changes for userdata configfs config_group. init_target_config_group() ties in the complete configfs machinery to avoid unused func/variable errors during build. Initializing the netconsole_target->group is moved to init_target_config_group, which will also init and add the userdata config_group. Each userdatum entry has a limit of 256 bytes (54 for the key/directory, 200 for the value, and 2 for '=3D' and '\n' characters), which is enforced by the configfs functions for updating the userdata config_group. When a new netconsole_target is created, initialize the userdata config_group and add it as a default group for netconsole_target config_group, allowing the userdata configfs sub-tree to be presented in the netconsole configfs tree under the userdata directory. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 143 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 139 insertions(+), 4 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index b280d06bf152..a5ac21136f02 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -43,6 +43,10 @@ MODULE_DESCRIPTION("Console driver for network interface= s"); MODULE_LICENSE("GPL"); =20 #define MAX_PARAM_LENGTH 256 +#define MAX_USERDATA_NAME_LENGTH 54 +#define MAX_USERDATA_VALUE_LENGTH 200 +#define MAX_USERDATA_ENTRY_LENGTH 256 +#define MAX_USERDATA_ITEMS 16 #define MAX_PRINT_CHUNK 1000 =20 static char config[MAX_PARAM_LENGTH]; @@ -80,6 +84,7 @@ static struct console netconsole_ext; * struct netconsole_target - Represents a configured netconsole target. * @list: Links this target into the target_list. * @group: Links us into the configfs subsystem hierarchy. + * @userdata_group: Links to the userdata configfs hierarchy * @enabled: On / off knob to enable / disable target. * Visible from userspace (read-write). * We maintain a strict 1:1 correspondence between this and @@ -103,6 +108,7 @@ struct netconsole_target { struct list_head list; #ifdef CONFIG_NETCONSOLE_DYNAMIC struct config_group group; + struct config_group userdata_group; #endif bool enabled; bool extended; @@ -215,6 +221,10 @@ static struct netconsole_target *alloc_and_init(void) * | remote_ip * | local_mac * | remote_mac + * | userdata/ + * | / + * | value + * | ... * | * /... */ @@ -596,6 +606,123 @@ static ssize_t remote_mac_store(struct config_item *i= tem, const char *buf, return -EINVAL; } =20 +struct userdatum { + struct config_item item; + char value[MAX_USERDATA_VALUE_LENGTH]; +}; + +static inline struct userdatum *to_userdatum(struct config_item *item) +{ + return container_of(item, struct userdatum, item); +} + +struct userdata { + struct config_group group; +}; + +static inline struct userdata *to_userdata(struct config_item *item) +{ + return container_of(to_config_group(item), struct userdata, group); +} + +static struct netconsole_target *userdata_to_target(struct userdata *ud) +{ + struct config_group *netconsole_group; + + netconsole_group =3D to_config_group(ud->group.cg_item.ci_parent); + return to_target(&netconsole_group->cg_item); +} + +static ssize_t userdatum_value_show(struct config_item *item, char *buf) +{ + return sysfs_emit(buf, "%s\n", &(to_userdatum(item)->value[0])); +} + +static ssize_t userdatum_value_store(struct config_item *item, const char = *buf, + size_t count) +{ + struct userdatum *udm =3D to_userdatum(item); + int ret; + + if (count > MAX_USERDATA_VALUE_LENGTH) + return -EMSGSIZE; + + mutex_lock(&dynamic_netconsole_mutex); + + ret =3D strscpy(udm->value, buf, sizeof(udm->value)); + if (ret < 0) + goto out_unlock; + trim_newline(udm->value, sizeof(udm->value)); + + mutex_unlock(&dynamic_netconsole_mutex); + return count; +out_unlock: + mutex_unlock(&dynamic_netconsole_mutex); + return ret; +} + +CONFIGFS_ATTR(userdatum_, value); + +static struct configfs_attribute *userdatum_attrs[] =3D { + &userdatum_attr_value, + NULL, +}; + +static void userdatum_release(struct config_item *item) +{ + kfree(to_userdatum(item)); +} + +static struct configfs_item_operations userdatum_ops =3D { + .release =3D userdatum_release, +}; + +static const struct config_item_type userdatum_type =3D { + .ct_item_ops =3D &userdatum_ops, + .ct_attrs =3D userdatum_attrs, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_item *userdatum_make_item(struct config_group *group, + const char *name) +{ + struct netconsole_target *nt; + struct userdatum *udm; + struct userdata *ud; + size_t child_count; + + if (strlen(name) > MAX_USERDATA_NAME_LENGTH) + return ERR_PTR(-ENAMETOOLONG); + + ud =3D to_userdata(&group->cg_item); + nt =3D userdata_to_target(ud); + child_count =3D list_count_nodes(&nt->userdata_group.cg_children); + if (child_count >=3D MAX_USERDATA_ITEMS) + return ERR_PTR(-ENOSPC); + + udm =3D kzalloc(sizeof(*udm), GFP_KERNEL); + if (!udm) + return ERR_PTR(-ENOMEM); + + config_item_init_type_name(&udm->item, name, &userdatum_type); + return &udm->item; +} + +static struct configfs_attribute *userdata_attrs[] =3D { + NULL, +}; + +static struct configfs_group_operations userdata_ops =3D { + .make_item =3D userdatum_make_item, +}; + +static struct config_item_type userdata_type =3D { + .ct_item_ops =3D &userdatum_ops, + .ct_group_ops =3D &userdata_ops, + .ct_attrs =3D userdata_attrs, + .ct_owner =3D THIS_MODULE, +}; + CONFIGFS_ATTR(, enabled); CONFIGFS_ATTR(, extended); CONFIGFS_ATTR(, dev_name); @@ -640,6 +767,14 @@ static const struct config_item_type netconsole_target= _type =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void init_target_config_group(struct netconsole_target *nt, const c= har *name) +{ + config_group_init_type_name(&nt->group, name, &netconsole_target_type); + config_group_init_type_name(&nt->userdata_group, "userdata", + &userdata_type); + configfs_add_default_group(&nt->userdata_group, &nt->group); +} + static struct netconsole_target *find_cmdline_target(const char *name) { struct netconsole_target *nt, *ret =3D NULL; @@ -675,6 +810,7 @@ static struct config_group *make_netconsole_target(stru= ct config_group *group, strlen(NETCONSOLE_PARAM_TARGET_PREFIX))) { nt =3D find_cmdline_target(name); if (nt) { + init_target_config_group(nt, name); return &nt->group; } } @@ -683,8 +819,8 @@ static struct config_group *make_netconsole_target(stru= ct config_group *group, if (!nt) return ERR_PTR(-ENOMEM); =20 - /* Initialize the config_item member */ - config_group_init_type_name(&nt->group, name, &netconsole_target_type); + /* Initialize the config_group member */ + init_target_config_group(nt, name); =20 /* Adding, but it is disabled */ spin_lock_irqsave(&target_list_lock, flags); @@ -741,8 +877,7 @@ static void populate_configfs_item(struct netconsole_ta= rget *nt, =20 snprintf(target_name, sizeof(target_name), "%s%d", NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count); - config_group_init_type_name(&nt->group, target_name, - &netconsole_target_type); + init_target_config_group(nt, target_name); } =20 #endif /* CONFIG_NETCONSOLE_DYNAMIC */ --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (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 435E65B5D6; Fri, 26 Jan 2024 23:14:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310847; cv=none; b=PIULzRa28GjzjPpq/+m9wDBFKZodBiZmzBtNC2p+R4d2Dk6vvdkaRaSI6rXXd2e8ZqzyxdVn6n97cJoNldocmu3EmzRqFQtmfekRANfPSWzFW7S1HQdtWDBaIlJal39q6I0W8d0edyeAGMneVmH+zjsbdhtdJNI+oTb/9jjJcdM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310847; c=relaxed/simple; bh=Bc3/rP4FzHSw4aRd7+PyEDpdKAfXelggIHNsOTR05EM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A9Xh3aMeRmtmc4ED6cXFBaTDsPKbp6tMUAVcy0R2b9VrBKcSTZcO4lUSn+BfBSnBrNVSpYKI2yPzVC30Zxt13rvTSyJJPJaxyKWfKNzIAUmFpiH6idtfs/Sp5lwJRSyOXkJ7NYujtxYAOmguBiy5926FlFW2yfDcnZIn0vSEpGM= 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=ZgHA32Qg; arc=none smtp.client-ip=209.85.214.173 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="ZgHA32Qg" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-1d746856d85so7574795ad.0; Fri, 26 Jan 2024 15:14:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310845; x=1706915645; 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=z0a3xVOioHV0fcyUnpVH+o+i1bddgGqzpiLWHZ2ggjQ=; b=ZgHA32QgZpnAtQrVrojEzMEbHPKU1bHTqxtNetJUnmTsjKEnvZTS1D9FbVYrVHzIRm ZavUsJAC1Lh+ysEnmDzz9xA4qHFr+poTeqFIoMGbUb+GQLwsbARY+Bu2/nG0UrEjh2Ef JMUO1BAxUorzuwGHd/Wi6/wdC+6Vf6LzbvPfi1Xi8yU1K8bDKsr04OhWPjrDAfbi3008 6IKR/TvNbOq8GOx9AImKNhQKzCCGkv4GnJi89NWWxr5brLQEPq4b+YQpJTF6/ob0MsGL 5SGjTpLmb8/uMizjS/QywVBlwhxY3s1MCMEC8Y1ZJhQZUh5ldmbeq0ikMsbvoFO19F/i 5IfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310845; x=1706915645; 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=z0a3xVOioHV0fcyUnpVH+o+i1bddgGqzpiLWHZ2ggjQ=; b=DaIxvsa8Enl/AqajhpH7rXs9q+NkG6RhizZLrt0225M1jQM+VNPdxJhYSEoiPI7eas pHqAnN/fA6g70c6kKudFUTL6iddW2s3hMUddLuOUFo8FvNW0pRrmNLsqmj6R9SA2lKuY hebYFd7Lzv2eyMIdfmk9gMPu5xYCY1dDTqiHjDjM+MshF6Qhd8S9vpGpvuzcde04CF53 8AMyNdwigcunrXROqVrmxfFwXUqdJCvTPUDHYvHdk9WbUx9rkNuD5XG4tzA06U1jEqr5 /2QNin6vhdnqlwo8AJdPNGKuGpP3wJ3rvp8GUsMYCpchDcbzSzNG2PaTizR4nTnrx5Zb KwyA== X-Gm-Message-State: AOJu0YyH3emG3b3o3mT929r4rMbnULw91HghG+6OHmO/slosFqoJ7qER j+cge/fRz7KjbH28RvZPuKONBn9E2RSctCxZ6t0Z3MuCXzpY+XHKFZNBEwv/ X-Google-Smtp-Source: AGHT+IEdr6mAEiWtPfLew47A4kjcBxvmR2F3fh8RBENWdg2dElcV3GE2TjazfBHChCjiDnYp/3wRSQ== X-Received: by 2002:a17:903:230b:b0:1d7:4060:78b3 with SMTP id d11-20020a170903230b00b001d7406078b3mr707698plh.39.1706310845576; Fri, 26 Jan 2024 15:14:05 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id ji2-20020a170903324200b001d76b1029c6sm1434416plb.2.2024.01.26.15.14.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:14:05 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 6/8] net: netconsole: cache userdata formatted string in netconsole_target Date: Fri, 26 Jan 2024 15:13:41 -0800 Message-ID: <20240126231348.281600-7-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Store a formatted string for userdata that will be appended to netconsole messages. The string has a capacity of 4KB, as calculated by the userdatum entry length of 256 bytes and a max of 16 userdata entries. Update the stored netconsole_target->userdata_complete string with the new formatted userdata values when a userdatum is created, edited, or removed. Each userdata entry contains a trailing newline, which will be formatted as such in netconsole messages:: 6.7.0-rc8-virtme,12,500,1646292204,-;test release=3Dfoo something=3Dbar 6.7.0-rc8-virtme,12,500,1646292204,-;another test release=3Dfoo something=3Dbar Enforcement of MAX_USERDATA_ITEMS is done in userdatum_make_item; update_userdata will not check for this case but will skip any userdata children over the limit of MAX_USERDATA_ITEMs. If a userdata entry/dir is created but no value is provided, that entry will be skipped. This is in part because update_userdata() can't be called in userdatum_make_item() since the item will not have been added to the userdata config_group children yet. To preserve the experience of adding an empty userdata that doesn't show up in the netconsole messages, purposefully skip emtpy userdata items even when update_userdata() can be called. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 63 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index a5ac21136f02..73feba0b3c93 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -85,6 +85,8 @@ static struct console netconsole_ext; * @list: Links this target into the target_list. * @group: Links us into the configfs subsystem hierarchy. * @userdata_group: Links to the userdata configfs hierarchy + * @userdata_complete: Cached, formatted string of append + * @userdata_length: String length of userdata_complete * @enabled: On / off knob to enable / disable target. * Visible from userspace (read-write). * We maintain a strict 1:1 correspondence between this and @@ -109,6 +111,8 @@ struct netconsole_target { #ifdef CONFIG_NETCONSOLE_DYNAMIC struct config_group group; struct config_group userdata_group; + char userdata_complete[MAX_USERDATA_ENTRY_LENGTH * MAX_USERDATA_ITEMS]; + size_t userdata_length; #endif bool enabled; bool extended; @@ -638,10 +642,50 @@ static ssize_t userdatum_value_show(struct config_ite= m *item, char *buf) return sysfs_emit(buf, "%s\n", &(to_userdatum(item)->value[0])); } =20 +static void update_userdata(struct netconsole_target *nt) +{ + int complete_idx =3D 0, child_count =3D 0; + struct list_head *entry; + struct userdata *ud; + + /* Clear the current string in case the last userdatum was deleted */ + nt->userdata_length =3D 0; + nt->userdata_complete[0] =3D 0; + + ud =3D to_userdata(&nt->userdata_group.cg_item); + list_for_each(entry, &nt->userdata_group.cg_children) { + struct userdatum *udm_item; + struct config_item *item; + + if (child_count >=3D MAX_USERDATA_ITEMS) + break; + child_count++; + + item =3D container_of(entry, struct config_item, ci_entry); + udm_item =3D to_userdatum(item); + + /* Skip userdata with no value set */ + if (strnlen(udm_item->value, MAX_USERDATA_VALUE_LENGTH) =3D=3D 0) + continue; + + /* This doesn't overflow userdata_complete since it will write + * one entry length (1/MAX_USERDATA_ITEMS long), entry count is + * checked to not exceed MAX items with child_count above + */ + complete_idx +=3D scnprintf(&nt->userdata_complete[complete_idx], + MAX_USERDATA_ENTRY_LENGTH, "%s=3D%s\n", + item->ci_name, udm_item->value); + } + nt->userdata_length =3D strnlen(nt->userdata_complete, + sizeof(nt->userdata_complete)); +} + static ssize_t userdatum_value_store(struct config_item *item, const char = *buf, size_t count) { struct userdatum *udm =3D to_userdatum(item); + struct netconsole_target *nt; + struct userdata *ud; int ret; =20 if (count > MAX_USERDATA_VALUE_LENGTH) @@ -654,6 +698,10 @@ static ssize_t userdatum_value_store(struct config_ite= m *item, const char *buf, goto out_unlock; trim_newline(udm->value, sizeof(udm->value)); =20 + ud =3D to_userdata(item->ci_parent); + nt =3D userdata_to_target(ud); + update_userdata(nt); + mutex_unlock(&dynamic_netconsole_mutex); return count; out_unlock: @@ -708,12 +756,27 @@ static struct config_item *userdatum_make_item(struct= config_group *group, return &udm->item; } =20 +static void userdatum_drop(struct config_group *group, struct config_item = *item) +{ + struct netconsole_target *nt; + struct userdata *ud; + + ud =3D to_userdata(&group->cg_item); + nt =3D userdata_to_target(ud); + + mutex_lock(&dynamic_netconsole_mutex); + update_userdata(nt); + config_item_put(item); + mutex_unlock(&dynamic_netconsole_mutex); +} + static struct configfs_attribute *userdata_attrs[] =3D { NULL, }; =20 static struct configfs_group_operations userdata_ops =3D { .make_item =3D userdatum_make_item, + .drop_item =3D userdatum_drop, }; =20 static struct config_item_type userdata_type =3D { --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.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 4571D5BAE5; Fri, 26 Jan 2024 23:14:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310849; cv=none; b=WJa7yp6/Xt2fl3gCIih8QijgeUE/Rmi0JJsXAe10PWyOQKXZFAAgcRGIqJR34ncUXS3vDTgz1vZk8VwBH9Zooth3xZeHjaWcRFE/jSH5KRt7o0he4C4WZwPuijw/AnwjKrSweTBpGypfvO4n7si0pJ2KsVMWsUKVOB7E9wWWZok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310849; c=relaxed/simple; bh=aKiWzgmFK3XS1BsGpO2cXonb0cWCM59n3esPDJ++t1o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AIFnnaF44X4ARCLGbHVLlfFrBc5h9fnMg5DxKXs9OjQxolzAOqh1lSNF2muKrQ6DRhGZqHGkII+OKfWB1Yz1/qY/UbSDjdeTZmaXP1PluKD5G/YGd2JR+HlL/sB2/iIL559Rga7fTBQeiG5PRlMbpyKKRIsvdWGhu6ZbFU4K0Ek= 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=P5tZxgUi; arc=none smtp.client-ip=209.85.210.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="P5tZxgUi" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-6db0fdd2b8fso552024b3a.2; Fri, 26 Jan 2024 15:14:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310847; x=1706915647; 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=je2dXIpj4nMvLmLfnHTiHfBkXHkQg5LdUrpAF1wy3tM=; b=P5tZxgUid81mNNLCbZ/QlNMPUoQ4itwQzaOKdrTe7ytzhsGJoh2w3L/eMDn+D/N3T7 2KBdZHqcLHtX0HL4DHQ+H931hYyxXUeTYkzN1ba69kImBDIDBxe4VdX23toDYqH3ncdt fShm6u1YhmgtA9z89mM3QxiC28PTeHJWWyaZ1PDV8o9W0Y/ChIjqOYW8A/gigjnWvjdQ 8REiq4yHF+C7B2lwbqwrSoqmGcXiHtQXjhhuTA/nsU/LzChJBYUxsrMi4MLo0D+0BLmN n1/qazU9fTbCFjg3F6AQavRvOz9PaXH7dg/IlDokqmVF6zeP/VWITGur7X4feIjfROY/ 4ZPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310847; x=1706915647; 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=je2dXIpj4nMvLmLfnHTiHfBkXHkQg5LdUrpAF1wy3tM=; b=NGx9RIia+XztDKEoC3fx13Qm4B56zfuZSvGEnabHmSP5siOKzypQbuUT3pnrR/EpWn 7hdSR+HKXSh/TLFv/ZQL5XAdvk2Wpqo5hL6DU038V85H0UShlPDK7I4iP3IVuWlMvUTl Rur0bKnQSfJTfnQspSaxvwPKeAbF5PCFiNbAII47ay0yfek1euYlUqM8612/TDoU9Wel nrcrmK9C9ZqOXdkRCWZmUp5S8zFVxXLHg1rFEydKFBvjPP1kG8V5tPbNWRIu+3/EYsZ7 ZU/ashLdmYEw5LMZMjjF6ua0mIfiqW8T+v77jUuSjlTggGmM0DMCalv4uS87L2/3sOT+ ZgGQ== X-Gm-Message-State: AOJu0YzTBHRBaLMFifBW7jj8aJRt7y2vT+qCW1vZ294gM6Q/vZwsjBar ngZaJ656XASpz0RJdHcC8+FL0XKy6e2ed1SO5tAeKKliiJH6tzRI X-Google-Smtp-Source: AGHT+IHVjDaF9+Isu1Qz4FPT8T2ObxNSuUgI2SQ8aEAdELBOpl+pvpVAbgBQ/4zev5FpivRpEIYaFQ== X-Received: by 2002:a17:902:c70c:b0:1d7:38fc:1272 with SMTP id p12-20020a170902c70c00b001d738fc1272mr587369plp.75.1706310847695; Fri, 26 Jan 2024 15:14:07 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id o2-20020a170902e00200b001d748fac506sm1446405plo.82.2024.01.26.15.14.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:14:07 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 7/8] net: netconsole: append userdata to netconsole messages Date: Fri, 26 Jan 2024 15:13:42 -0800 Message-ID: <20240126231348.281600-8-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Append userdata to outgoing unfragmented (<1000 bytes) netconsole messages. When sending messages the userdata string is already formatted and stored in netconsole_target->userdata_complete. Always write the outgoing message to buf, so userdata can be appended in a standard fashion. This is a change from only using buf when the release needs to be prepended to the message. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 73feba0b3c93..de668a0794b1 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1035,19 +1035,34 @@ static void send_ext_msg_udp(struct netconsole_targ= et *nt, const char *msg, const char *msg_ready =3D msg; const char *release; int release_len =3D 0; + int userdata_len =3D 0; + char *userdata =3D NULL; + +#ifdef CONFIG_NETCONSOLE_DYNAMIC + userdata =3D nt->userdata_complete; + userdata_len =3D nt->userdata_length; +#endif =20 if (nt->release) { release =3D init_utsname()->release; release_len =3D strlen(release) + 1; } =20 - if (msg_len + release_len <=3D MAX_PRINT_CHUNK) { + if (msg_len + release_len + userdata_len <=3D MAX_PRINT_CHUNK) { /* No fragmentation needed */ if (nt->release) { scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); msg_len +=3D release_len; - msg_ready =3D buf; + } else { + memcpy(buf, msg, msg_len); } + + if (userdata) + msg_len +=3D scnprintf(&buf[msg_len], + MAX_PRINT_CHUNK - msg_len, + "%s", userdata); + + msg_ready =3D buf; netpoll_send_udp(&nt->np, msg_ready, msg_len); return; } --=20 2.43.0 From nobody Wed Dec 24 10:15:00 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 A47915EE62; Fri, 26 Jan 2024 23:14:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310852; cv=none; b=h+WIWPkyKNIh8F4Sl0nleBlIHLmxhlZkQ/0B0y5UZm4lV64a2WN0zAdS3V9X294AYxCzh+VLn81dTtgK8Nt7PNuN8XACo3XtaEHheyWvivc1vOH7JsOpTvKiaRk2lNMEMqmeMgBtPOPMFAiJvZr7BfvQj7aEMKO+QIeW6QKNtpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706310852; c=relaxed/simple; bh=gcaCmv31jC9+dLD+970bShIol4o9Uq98lPUTwZv23Io=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QCVEcRdao61FouO2YflVBkvhs7Qv+Pk1s0zVO9yG37C53iTkBoohgLG6COT+dgKRED9QkFJa9/gVSJ64Uabp0puyg7SpMydQF8AnTWsp7pk0HpICDRC+RvES5PonIJCq0jU8xIrKpAPEEx80Klm8RPfgGnlzy0f8fHvTXkUdVP8= 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=lyL9QUuj; arc=none smtp.client-ip=209.85.214.177 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="lyL9QUuj" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1d711d7a940so8358445ad.1; Fri, 26 Jan 2024 15:14:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706310850; x=1706915650; 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=HGFbx+2eRIKYYfw924Gczlw/lLoyAbfAHs5r+gBC2OQ=; b=lyL9QUujNxrLi9UaunMf2pKmy8U+0UUvFUa5ln/NBtl7X+3CGsdlmFn0itJdggZZZY cGAGL8ptlySTZhABfHwtQ3DsaQeR2o+109KivhV/PMhpO6dRztNWjACB/RDNHLrQ/gqI ruA0PNX6aSN7uZTREClqwBYwh0e2VxQp/ZF23JVJ8J1QO5k2mE+3Yc+XjHRPEavSn7zA /Jubir2MHSP0RvmHiIUvbuHxFFzR7IJYNpwPH6kvJDZJ160nHej69Gb+zLSqpO7B/cr6 o49w18gU0v7eQnXTjqo+opPncKHLyPqxiHggyoS+QRznfKiFb+GaNcXIOHDM0K7Yu6gF 42pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706310850; x=1706915650; 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=HGFbx+2eRIKYYfw924Gczlw/lLoyAbfAHs5r+gBC2OQ=; b=fdt1OclPrUsNBP6VTBVOSqC86YA9wmq/Mk2YUVt+cCJmUxX1PDKzabhziIYlDABZBo eYg3FZducMNrmBfOdvOg6Dpcyx+tDjmlEt5Q8qyxIDwHSmBlb4jteKiUCLF3tmpn3X0u 4oHYzV98lnVBk5LxuvYVfo2k+OblqTmlRODtK65ykCWodmsLVTLSkMXkJHUaRTbn9ZMX LK2f8zi6NkhYv8i5UdAus8d/E+U0GHXsaQJaSJd6vl1MNQ1oSoLGGICESVtqVX0n9xct 0+jD3YolJupN9N5+XozP6cdvqjKVJ0D7B4Bd5CmjuIVAvSMQ8g1oJNglexmKXZOhF/2D veSQ== X-Gm-Message-State: AOJu0YxF7PR/oxS5itdtt4xg3CvBmsPQnBTp4MJ0PWaEC+SOTGbioecz IURv3MWbyDy1YploNmhRr9l7Wsr5BVp9EJAm3RAchotnMwC0dI5k X-Google-Smtp-Source: AGHT+IHACOHBeY51L8GurENnKLLidBUSoUP5U9AqnYdftk3BjgeefzhnxUc1/P25zKyWklE3TkkBaA== X-Received: by 2002:a17:902:ce83:b0:1d6:f87f:7627 with SMTP id f3-20020a170902ce8300b001d6f87f7627mr672487plg.130.1706310850069; Fri, 26 Jan 2024 15:14:10 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id md8-20020a17090b23c800b002933c85eb64sm1659421pjb.53.2024.01.26.15.14.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 15:14:09 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 8/8] net: netconsole: append userdata to fragmented netconsole messages Date: Fri, 26 Jan 2024 15:13:43 -0800 Message-ID: <20240126231348.281600-9-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240126231348.281600-1-thepacketgeek@gmail.com> References: <20240126231348.281600-1-thepacketgeek@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" Regardless of whether the original message body or formatted userdata exceeds the MAX_PRINT_CHUNK, append userdata to the netconsole message starting with the first chunk that has available space after writing the body. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 50 +++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index de668a0794b1..b33ceb110434 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1086,24 +1086,48 @@ static void send_ext_msg_udp(struct netconsole_targ= et *nt, const char *msg, memcpy(buf + release_len, header, header_len); header_len +=3D release_len; =20 - while (offset < body_len) { + while (offset < body_len + userdata_len) { int this_header =3D header_len; - int this_chunk; + int this_offset =3D 0; + int this_chunk =3D 0; =20 this_header +=3D scnprintf(buf + this_header, sizeof(buf) - this_header, - ",ncfrag=3D%d/%d;", offset, body_len); - - this_chunk =3D min(body_len - offset, - MAX_PRINT_CHUNK - this_header); - if (WARN_ON_ONCE(this_chunk <=3D 0)) - return; - - memcpy(buf + this_header, body + offset, this_chunk); - - netpoll_send_udp(&nt->np, buf, this_header + this_chunk); + ",ncfrag=3D%d/%d;", offset, + body_len + userdata_len); + + /* Not all body data has been written yet */ + if (offset < body_len) { + this_chunk =3D min(body_len - offset, + MAX_PRINT_CHUNK - this_header); + if (WARN_ON_ONCE(this_chunk <=3D 0)) + return; + memcpy(buf + this_header, body + offset, this_chunk); + this_offset +=3D this_chunk; + } + /* Body is fully written and there is pending userdata to write, + * append userdata in this chunk + */ + if (offset + this_offset >=3D body_len && + offset + this_offset < userdata_len + body_len) { + int sent_userdata =3D (offset + this_offset) - body_len; + int preceding_bytes =3D this_chunk + this_header; + + if (WARN_ON_ONCE(sent_userdata < 0)) + return; + + this_chunk =3D min(userdata_len - sent_userdata, + MAX_PRINT_CHUNK - preceding_bytes); + if (WARN_ON_ONCE(this_chunk <=3D 0)) + return; + memcpy(buf + this_header + this_offset, + userdata + sent_userdata, + this_chunk); + this_offset +=3D this_chunk; + } =20 - offset +=3D this_chunk; + netpoll_send_udp(&nt->np, buf, this_header + this_offset); + offset +=3D this_offset; } } =20 --=20 2.43.0