Skip to content

Commit 8a4a2f3

Browse files
committed
feature/mdadm: Move GENERATE_UDEV_RULES_FOR_MD_DEVICE processing inside the helper
To avoid many forks from rules.mk, let's move GENERATE_UDEV_RULES_FOR_MD_DEVICE processing to the generate-udev-rules script. This will allow all the majmin to be processed at once. Another benefit from the change is the separation between udev rule generation and rootfs data generation. Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
1 parent 880423e commit 8a4a2f3

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

features/mdadm/bin/generate-udev-rules

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,43 @@
22
# SPDX-License-Identifier: GPL-3.0-or-later
33

44
. sh-functions
5-
. "$SYSFS_PATH/dev/block/$1/uevent"
65

7-
[ -n "${DEVNAME-}" ] ||
8-
fatal "unable to find device name in \`$SYSFS_PATH/dev/block/$1/uevent'"
6+
DIR="$WORKDIR/root"
97

10-
MD_UUID=
11-
MD_CONTAINER=
12-
# shellcheck disable=SC2046
13-
eval $(mdadm --detail --export "/dev/$DEVNAME")
8+
if [ "${1-}" = dirs ]; then
9+
mkdir -p -- "$DIR/etc/initrd/md"
10+
printf '%s\n' "$DIR"
11+
fi
1412

15-
[ -z "$MD_CONTAINER" ] || eval "$(mdadm --detail --export "$MD_CONTAINER")"
13+
for majmin in ${GENERATE_UDEV_RULES_FOR_MD_DEVICE-}; do
14+
DEVNAME=
1615

17-
[ -n "$MD_UUID" ] ||
18-
fatal "UUID not found for /dev/$DEVNAME"
16+
. "$SYSFS_PATH/dev/block/$majmin/uevent"
1917

20-
uuid="${MD_UUID//:}"
18+
[ -n "${DEVNAME-}" ] ||
19+
fatal "unable to find device name in \`$SYSFS_PATH/dev/block/$majmin/uevent'"
2120

22-
mkdir -p -- "$WORKDIR/root/etc/initrd/md"
23-
:> "$WORKDIR/root/etc/initrd/md/$uuid"
21+
MD_UUID=
22+
MD_CONTAINER=
2423

25-
rules="$WORKDIR/root/etc/udev/rules.d/64-md-raid-assembly-$uuid.rules"
24+
# shellcheck disable=SC2046
25+
eval "$(mdadm --detail --export "/dev/$DEVNAME")"
2626

27-
mkdir -p -- "${rules%/*}"
27+
[ -z "$MD_CONTAINER" ] || eval "$(mdadm --detail --export "$MD_CONTAINER")"
2828

29-
cat > "$rules" <<EOF
29+
[ -n "$MD_UUID" ] ||
30+
fatal "UUID not found for /dev/$DEVNAME"
31+
32+
uuid="${MD_UUID//:}"
33+
34+
if [ "${1-}" = dirs ]; then
35+
:> "$DIR/etc/initrd/md/$uuid"
36+
continue
37+
fi
38+
39+
rules="$TEMPDIR/64-md-raid-assembly-$uuid.rules"
40+
41+
cat > "$rules" <<EOF
3042
SUBSYSTEM!="block", GOTO="md_inc_end"
3143
ENV{ID_FS_TYPE}=="linux_raid_member", GOTO="md_inc"
3244
@@ -54,5 +66,5 @@ ACTION=="remove", ENV{ID_PATH}!="?*", RUN+="/sbin/mdadm -If \$name"
5466
5567
LABEL="md_inc_end"
5668
EOF
57-
58-
printf '%s\n' "$rules" "$WORKDIR/root/etc/initrd/md/$uuid"
69+
printf '%s\n' "$rules"
70+
done

features/mdadm/rules.mk

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
# SPDX-License-Identifier: GPL-3.0-or-later
2-
MDADM_UDEV_RULES := \
3-
$(foreach majmin,$(GENERATE_UDEV_RULES_FOR_MD_DEVICE),\
4-
$(shell $(call shell-export-vars) $(FEATURESDIR)/mdadm/bin/generate-udev-rules $(majmin)))
2+
MDADM_UDEV_RULES := $(shell $(call shell-export-vars) $(FEATURESDIR)/mdadm/bin/generate-udev-rules)
3+
MDADM_DIRS := $(shell $(call shell-export-vars) $(FEATURESDIR)/mdadm/bin/generate-udev-rules dirs)
54

6-
PUT_UDEV_RULES += $(MDAMD_RULES_OLD) $(MDAMD_RULES) $(MDADM_UDEV_RULES)
7-
8-
PUT_FEATURE_DIRS += $(MDADM_DATADIR)
5+
PUT_UDEV_RULES += $(MDAMD_RULES_OLD) $(MDAMD_RULES) $(MDADM_UDEV_RULES)
6+
PUT_FEATURE_DIRS += $(MDADM_DATADIR) $(MDADM_DIRS)
97
PUT_FEATURE_FILES += $(MDADM_FILES)
108
PUT_FEATURE_PROGS += $(MDADM_PROGS) $(MDADM_EXTRA_PROGS)

0 commit comments

Comments
 (0)