From 43c9478bc661b014520e77ebd005d5be41272fb9 Mon Sep 17 00:00:00 2001 From: fly_fzc <2385803914@qq.com> Date: Mon, 18 Aug 2025 16:04:01 +0800 Subject: [PATCH] backport upstream patch --- ...dev_t-decoding-for-diskerror-handler.patch | 98 +++++++++++++++++++ rasdaemon.spec | 9 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 backport-Use-the-right-dev_t-decoding-for-diskerror-handler.patch diff --git a/backport-Use-the-right-dev_t-decoding-for-diskerror-handler.patch b/backport-Use-the-right-dev_t-decoding-for-diskerror-handler.patch new file mode 100644 index 0000000..8b12036 --- /dev/null +++ b/backport-Use-the-right-dev_t-decoding-for-diskerror-handler.patch @@ -0,0 +1,98 @@ +From 048ee0406fcf82045ececf43cb08845307030afd Mon Sep 17 00:00:00 2001 +From: scarlet-storm <12461256+scarlet-storm@users.noreply.github.com> +Date: Mon, 3 Mar 2025 15:16:57 +0530 +Subject: [PATCH] Use the right dev_t decoding for diskerror handler + +There is a dev_t type defined by libc for makedev etc, which +is exposed by the kernel headers & also a dev_t type defined in the +internal kernel headers. +Both have simliar functionality, but different encoding. +Copy the MAJOR & MINOR macros from linux/kdev_t.h for proper +decoding of the trace events. +Fixes #71 + +Signed-off-by: scarlet-storm +<12461256+scarlet-storm@users.noreply.github.com> +Signed-off-by: Mauro Carvalho Chehab +--- + ras-diskerror-handler.c | 11 +++-------- + ras-diskerror-handler.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 8 deletions(-) + +diff --git a/ras-diskerror-handler.c b/ras-diskerror-handler.c +index 7fe4910..43c023b 100644 +--- a/ras-diskerror-handler.c ++++ b/ras-diskerror-handler.c +@@ -9,12 +9,8 @@ + #define _GNU_SOURCE + #include + #include +-#ifndef __dev_t_defined +-#include +-#endif /* __dev_t_defined */ + #include + #include +-#include + #include "libtrace/kbuffer.h" + #include "ras-diskerror-handler.h" + #include "ras-record.h" +@@ -60,7 +55,7 @@ int ras_diskerror_event_handler(struct trace_seq *s, + time_t now; + struct tm *tm; + struct diskerror_event ev; +- dev_t dev; ++ uint32_t dev; + + /* + * Newer kernels (3.10-rc1 or upper) provide an uptime clock. +@@ -84,8 +79,8 @@ int ras_diskerror_event_handler(struct trace_seq *s, + + if (pevent_get_field_val(s, event, "dev", record, &val, 1) < 0) + return -1; +- dev = (dev_t)val; +- if (asprintf(&ev.dev, "%u:%u", major(dev), minor(dev)) < 0) ++ dev = (uint32_t)val; ++ if (asprintf(&ev.dev, "%u:%u", MAJOR(dev), MINOR(dev)) < 0) + return -1; + trace_seq_printf(s, "%s ", ev.dev); + +diff --git a/ras-diskerror-handler.h b/ras-diskerror-handler.h +index 9be82d6..826202b 100644 +--- a/ras-diskerror-handler.h ++++ b/ras-diskerror-handler.h +@@ -11,6 +11,32 @@ + #include "ras-events.h" + #include "libtrace/event-parse.h" + ++/* ++ * Defined in linux/kdev_t.h ++ * Since the encoding with 20 bit mask is not defined in the linux-libc headers, ++ * redefine it here ++ * format: ++ * field:unsigned short common_type; offset:0; size:2; signed:0; ++ * field:unsigned char common_flags; offset:2; size:1; signed:0; ++ * field:unsigned char common_preempt_count; offset:3; size:1; signed:0; ++ * field:int common_pid; offset:4; size:4; signed:1; ++ * ++ * field:dev_t dev; offset:8; size:4; signed:0; ++ * field:sector_t sector; offset:16; size:8; signed:0; ++ * field:unsigned int nr_sector; offset:24; size:4; signed:0; ++ * field:int error; offset:28; size:4; signed:1; ++ * field:unsigned short ioprio; offset:32; size:2; signed:0; ++ * field:char rwbs[8]; offset:34; size:8; signed:0; ++ * field:__data_loc char[] cmd; offset:44; size:4; signed:0; ++ * ++ * print fmt: "%d,%d %s (%s) %llu + %u %s,%u,%u [%d]", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->rwbs, __get_str(cmd), (unsigned long long)REC->sector, REC->nr_sector, __print_symbolic((((REC->ioprio) >> 13) & (8 - 1)), { IOPRIO_CLASS_NONE, "none" }, { IOPRIO_CLASS_RT, "rt" }, { IOPRIO_CLASS_BE, "be" }, { IOPRIO_CLASS_IDLE, "idle" }, { IOPRIO_CLASS_INVALID, "invalid"}), (((REC->ioprio) >> 3) & ((1 << 10) - 1)), ((REC->ioprio) & ((1 << 3) - 1)), REC->error ++ */ ++#define MINORBITS 20 ++#define MINORMASK ((1U << MINORBITS) - 1) ++ ++#define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS)) ++#define MINOR(dev) ((unsigned int) ((dev) & MINORMASK)) ++#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) + int ras_diskerror_event_handler(struct trace_seq *s, + struct pevent_record *record, + struct event_format *event, void *context); +-- +2.33.0 + diff --git a/rasdaemon.spec b/rasdaemon.spec index 7933e2b..cb693c1 100644 --- a/rasdaemon.spec +++ b/rasdaemon.spec @@ -1,6 +1,6 @@ Name: rasdaemon Version: 0.6.7 -Release: 26 +Release: 27 License: GPLv2 Summary: Utility to get Platform Reliability, Availability and Serviceability (RAS) reports via the Kernel tracing events URL: https://github.com/mchehab/rasdaemon.git @@ -47,6 +47,7 @@ Patch6000: backport-rasdaemon-ras-mc-ctl-Fix-script-to-parse-dimm-sizes.patch Patch6001: backport-rasdaemon-ras-memory-failure-handler-handle-localtim.patch Patch6002: backport-rasdaemon-ras-report-fix-possible-but-unlikely-file-.patch Patch6003: backport-tools-lib-traceevent-Add-proper-KBUFFER_TYPE_TIME_ST.patch +Patch6004: backport-Use-the-right-dev_t-decoding-for-diskerror-handler.patch Patch9000: fix-ras-mc-ctl.service-startup-failed-when-selinux-is-no.patch Patch9001: 0001-rasdaemon-Fix-for-regression-in-ras_mc_create_table-.patch @@ -116,6 +117,12 @@ if [ $1 -eq 0 ] ; then fi %changelog +* Mon Aug 18 2025 fuanan - 0.6.7-27 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:backport upstream patch + * Sat Apr 19 2025 zhangnan - 0.6.7-26 - Type:bugfix - ID:NA -- Gitee