Skip to content

Commit f9f4ab1

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 f9f4ab1

File tree

1 file changed

+6
-14
lines changed

1 file changed

+6
-14
lines changed

dracut-functions.sh

+6-14
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,9 @@ get_devpath_block() {
268268
269269
# get a persistent path from a device
270270
get_persistent_dev() {
271-
local i _tmp _dev _pol
271+
local _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,17 @@ get_persistent_dev() {
279279
_pol=
280280
fi
281281
282-
for i in \
282+
# shellcheck disable=SC2086
283+
stat -L -c $'%n\t%t:%T' \
283284
$_pol \
284285
/dev/mapper/* \
285286
/dev/disk/by-uuid/* \
286287
/dev/disk/by-label/* \
287288
/dev/disk/by-partuuid/* \
288289
/dev/disk/by-partlabel/* \
289290
/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"
291+
/dev/disk/by-path/* 2> /dev/null \
292+
| awk -v_dev="$_dev" -vdfl="$1" '$0 ~ ("\t" _dev "$") {--NF; print; dfl=0; exit} END {if(dfl) print dfl}'
301293
}
302294
303295
expand_persistent_dev() {

0 commit comments

Comments
 (0)