mdadm/0062-Re-enable-mdadm-monitor-.-for-dev-mdX.patch
Xiao Ni aa7b8fe976 Update to latest upstream
Resolves: RHEL-100004, RHEL-107084

Signed-off-by: Xiao Ni <xni@redhat.com>
2025-10-28 17:17:30 +08:00

109 lines
3.0 KiB
Diff

From 456c6bed0b9e0866c75f0f7c8579d5f4f3f3e966 Mon Sep 17 00:00:00 2001
From: "Dr. Joachim Schneider" <jesmx@hal.rhein-neckar.de>
Date: Sat, 6 Sep 2025 20:28:07 +0200
Subject: [PATCH 62/74] Re-enable mdadm --monitor ... for /dev/mdX
This fixes a regression introduced with
commit 84d969be8f6d ("Monitor: use snprintf to fill device name"):
With this fix
mdadm --monitor --scan -1 -p <pgm>
is possible again for /dev/mdX without symlink in /dev/md/.
The bug can be reproduced by these steps:
(a) Create block devices for testing:
$ dd if=/dev/zero of=/tmp/d0.bin bs=1M count=16
$ dd if=/dev/zero of=/tmp/d1.bin bs=1M count=16
$ losetup -f /tmp/d0.bin
$ losetup -f /tmp/d1.bin
$ losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1 0 0 0 0 /tmp/d1.bin 0 512
/dev/loop0 0 0 0 0 /tmp/d0.bin 0 512
(b) Create RAID-1 array '/dev/md0':
$ mdadm --create /dev/md0 --level=1 --raid-devices=2 \
/dev/loop0 /dev/loop1
...
mdadm: array /dev/md0 started.
(c) Check:
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 loop1[1] loop0[0]
15360 blocks super 1.2 [2/2] [UU]
unused devices: <none>
(d) Create 'mdadm.conf':
$ mdadm --detail --scan > /tmp/mdadm.conf
$ cat /tmp/mdadm.conf
ARRAY /dev/md0 metadata=1.2 UUID=c0280f55:9c32e4ff:34f85ea3:08d1331b
(e) Use this bash script ('/tmp/report') for 'mdadm --monitor':
[[ $# -lt 2 ]] && exit 0
problem="$1"
shift
array="$1"
shift
args="$*"
echo "MD REPORT: ${problem} with ${array}: ${args}"
(f) Call mdamd in monitor mode:
$ mdadm --monitor -c /tmp/mdadm.conf --scan -1 -p /tmp/report
Without the fix one gets this output:
mdadm: DeviceDisappeared event detected on md device /dev/md/md0
MD REPORT: DeviceDisappeared with /dev/md/md0:
mdadm: NewArray event detected on md device /dev/md0
MD REPORT: NewArray with /dev/md0:
Only the output of the 'report'-script:
$ mdadm --monitor -c /tmp/mdadm.conf --scan -1 \
-p /tmp/report 2>/dev/null
MD REPORT: DeviceDisappeared with /dev/md/md0:
MD REPORT: NewArray with /dev/md0:
With the fix no (warning) output is produced:
$ /tmp/mdadm-FIXED --monitor -c /tmp/mdadm.conf --scan -1 \
-p /tmp/report
Signed-off-by: Dr. Joachim Schneider <jesmx@hal.rhein-neckar.de>
---
mdmonitor.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mdmonitor.c b/mdmonitor.c
index 22b0a818f9bd..314dafb4588b 100644
--- a/mdmonitor.c
+++ b/mdmonitor.c
@@ -256,8 +256,8 @@ int Monitor(struct mddev_dev *devlist,
continue;
st = xcalloc(1, sizeof *st);
- snprintf(st->devname, MD_NAME_MAX + sizeof(DEV_MD_DIR), DEV_MD_DIR "%s",
- basename(mdlist->devname));
+ snprintf(st->devname, sizeof(st->devname), "%s%s",
+ '/' == *mdlist->devname ? "" : DEV_MD_DIR, mdlist->devname);
if (!is_mddev(st->devname)) {
free(st);
continue;
--
2.50.1