Skip to content

Commit 4f1262b

Browse files
perf(dracut-functions.sh): optimise get_persistent_dev()
This shaves ~40ms (from ~50ms; average case, huge variance up to 700ms on the old one), and makes 99base go from real 0m0.350s user 0m0.250s sys 0m0.119s to real 0m0.216s user 0m0.162s sys 0m0.076s
1 parent 8abffe7 commit 4f1262b

File tree

1 file changed

+4
-13
lines changed

1 file changed

+4
-13
lines changed

dracut-functions.sh

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ get_devpath_block() {
270270
get_persistent_dev() {
271271
local i _tmp _dev _pol
272272
273-
_dev=$(get_maj_min "$1")
273+
_dev=$(stat -L -c $'%t:%T' "$1" 2> /dev/null)
274274
[ -z "$_dev" ] && return
275275
276276
if [[ -n $persistent_policy ]]; then
@@ -279,25 +279,16 @@ get_persistent_dev() {
279279
_pol=
280280
fi
281281
282-
for i in \
282+
stat -L -c $'%n\t%t:%T' \
283283
$_pol \
284284
/dev/mapper/* \
285285
/dev/disk/by-uuid/* \
286286
/dev/disk/by-label/* \
287287
/dev/disk/by-partuuid/* \
288288
/dev/disk/by-partlabel/* \
289289
/dev/disk/by-id/* \
290-
/dev/disk/by-path/*; do
291-
[[ -e $i ]] || continue
292-
[[ $i == /dev/mapper/control ]] && continue
293-
[[ $i == /dev/mapper/mpath* ]] && continue
294-
_tmp=$(get_maj_min "$i")
295-
if [ "$_tmp" = "$_dev" ]; then
296-
printf -- "%s" "$i"
297-
return
298-
fi
299-
done
300-
printf -- "%s" "$1"
290+
/dev/disk/by-path/* 2> /dev/null \
291+
| awk -v_dev="$_dev" -vdfl="$1" '$0 ~ ("\t" _dev "$") {--NF; print; dfl=0; exit} END {if(dfl) print dfl}'
301292
}
302293
303294
expand_persistent_dev() {

0 commit comments

Comments
 (0)