From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding:content-language; bh=zztEQs24mAn/0pr3a89zZZHts0Opc0QcIqMthZWQQIE=; b=iRe/DEeI2CMq3gvHPivLccckVYWeDb1aukG6EdJfNx9xUxwoc1O0LWpKl20YCzQ4n5 gy9Ah/CVaJ2Ublqm9bDqXnBy4e43mFglR2CaI9A3//WJxrHQCZT8Ws/fBLjdA9DDhsdZ QOUpSiyX8NDuYnmErlmnifAnuZiA4GRgHXBtzum79kHeoUipalTX/Wpza/r6kKbIeWfX NWo+i+m7+2zSYQYr0cB0uvP6R5V9s+hyuUXlzmeUh2eLcniUO46V+cBYz04dCrFjTFej x1LS/OmHM28AfWFy61xDyJnOCpCdB/ApO+Bnmxa3BhRLAVyRXgbyvB3CCZ1uuQY2YM62 /0lA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=zztEQs24mAn/0pr3a89zZZHts0Opc0QcIqMthZWQQIE=; b=6sY3q0J0QwdaPczD79UC8N3UogB6Yi6DX9ULmBVDaUWZUgNG4qSbx6gpAoRGeqD9RS X7r+BTlMe9GZgIZJzcI83zyqeCDU7+PS50enboYeMjd8FH2I7dCWu/EzuEF1MvifhRn4 1RYFhSTnt85yD7hyynzEA2muomkWwE3GDWe2A6tOlZgoZfcGpS7FngV/mlxhM8FpzCtZ Zx2eLlQ5Hda4Q79NYNU7R4H6bCIY68atgHIV8kfnJa83BFnILKkS+whms/w/eHk/J2KP mOrNpA64wlfEed3GPE9fpfmoE76BJwbqXMd7V2wxSy0zRGfdKgY3FJQYSmEsn0dLhREW x6Dg== X-Gm-Message-State: AOAM530DGNDtQSJfWUU5IVtyLzOxUwStAWQZ+F151hXGke4jkdjFOLJj q/u+MIw1JyUmL5gfSK5LUJOvKQbUXIs= X-Google-Smtp-Source: ABdhPJzVxy6ppnqMVyAvN8/76/3kv5xhwxYgvVahwAswxLpFHatRcLS7q8L0aYQ27Jw2W+X9MWOjBQ== X-Received: by 2002:a05:6512:3e01:: with SMTP id i1mr4241525lfv.10.1635247556728; Tue, 26 Oct 2021 04:25:56 -0700 (PDT) To: make-initrd@lists.altlinux.org References: <20211024172108.668CDA5E4C@lists.altlinux.org> <20211026105516.jfbatbtjfah74vou@example.org> From: Leonid Krivoshein Message-ID: <37c46f84-217f-81bd-56a9-1d5b8d02d670@gmail.com> Date: Tue, 26 Oct 2021 14:25:55 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <20211026105516.jfbatbtjfah74vou@example.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: ru Subject: Re: [make-initrd] [PATCH v6 08/22] bootchain-waitdev: introduces an optional waitdev_timeout X-BeenThere: make-initrd@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: make-initrd@lists.altlinux.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Oct 2021 11:26:00 -0000 Archived-At: List-Archive: 26.10.2021 13:55, Alexey Gladkov пишет: > On Sun, Oct 24, 2021 at 08:21:08PM +0300, Leonid Krivoshein wrote: >> "waitdev_timeout" describes a common timeout for all "waitdev" steps >> in the "bootchain". Defining a timeout allows to use a fallback if >> the specified devices are not ready yet. By default is not set, which >> makes to wait forever. >> >> Signed-off-by: Leonid Krivoshein >> --- >> features/bootchain-waitdev/README.md | 3 +++ >> .../etc/initrd/cmdline.d/bootchain-waitdev | 1 + >> .../data/lib/bootchain/waitdev | 18 ++++++++++++++++++ >> .../data/lib/initrd/pre/bootchain/300-waitdev | 3 +++ >> 4 files changed, 25 insertions(+) >> >> diff --git a/features/bootchain-waitdev/README.md b/features/bootchain-waitdev/README.md >> index 126a904..d6bae63 100644 >> --- a/features/bootchain-waitdev/README.md >> +++ b/features/bootchain-waitdev/README.md >> @@ -13,6 +13,9 @@ feature. It allows to wait a specified block or character special devices. >> the same as `root=`, but with optional `CDROM:` prefix. This parameter can be >> specified more than once depending on how many times a corresponding element >> is mentioned in the `bootchain`. >> +- `waitdev_timeout` describes a common timeout for all `waitdev` steps in the >> + `bootchain`. Defining a timeout allows to use a fallback if the specified >> + devices are not ready yet. By default is not set, which makes to wait forever. > Почему он общий между всеми waitdev ??? Логика в этом железная: если для сборки корня шагам, следующим за wiatdev'ами, нужны все указанные устройства, то не имеет значения, какого устройства в цепочке не хватает. Это очень похоже на общий rootdelay и схему "И". Общий таймаут нужен для того, чтобы не ждать вечно и дать возможность отработать некоему fallback'у, следующим за этими шагами, или выдать общий на все отказы диалог, и вернуться в начало. > Получается, если первый waitdev прождал весь wait_timeout, то остальные > даже пробовать не будут, но это же неправильно так как они другой девайс > ожидают. Можно было бы им дать попробовать без дополнительных sleep'ов, но есть два контраргумента: 1) Цепочка могла быть построена исходя из знания, что к устройству "Б" нельзя обращаться, пока не будет подключено устройство "А". Обращение к "Б" без готовности "А" может привести к нехорошим последствиям, типа зависания. 2) Чтобы отработал fallback, по всей видимости, последний waitdev не должен быть готов. Если игнорировать эти моменты, можно дать хотя бы попробовать проверить готовность следующих устройств без дополнительных sleep'ов, благо асинхронно работающая конструкция это позволяет сделать. > Например, мы ждём сначала cdrom, а потом usb-флешку с ключом. > >> ## Example >> >> diff --git a/features/bootchain-waitdev/data/etc/initrd/cmdline.d/bootchain-waitdev b/features/bootchain-waitdev/data/etc/initrd/cmdline.d/bootchain-waitdev >> index 3544c25..6929a86 100644 >> --- a/features/bootchain-waitdev/data/etc/initrd/cmdline.d/bootchain-waitdev >> +++ b/features/bootchain-waitdev/data/etc/initrd/cmdline.d/bootchain-waitdev >> @@ -1 +1,2 @@ >> register_array string WAITDEV >> +register_parameter number WAITDEV_TIMEOUT >> diff --git a/features/bootchain-waitdev/data/lib/bootchain/waitdev b/features/bootchain-waitdev/data/lib/bootchain/waitdev >> index 60464d9..fa99c45 100755 >> --- a/features/bootchain-waitdev/data/lib/bootchain/waitdev >> +++ b/features/bootchain-waitdev/data/lib/bootchain/waitdev >> @@ -3,6 +3,14 @@ >> . bootchain-sh-functions >> >> check_parameter WAITDEV >> + >> +timeout= >> +timecnt=/.initrd/bootchain/waitdev/TIMECNT >> + >> +[ ! -s "$timecnt" ] || >> + read -r timeout < "$timecnt" ||: >> +[ "$timeout" != 0 ] || >> + exit 0 >> devspec="$(get_parameter WAITDEV)" >> >> while [ -n "$devspec" ]; do >> @@ -25,4 +33,14 @@ while [ -n "$devspec" ]; do >> fi >> >> sleep 1 >> + [ -n "$timeout" ] || >> + continue >> + timeout=$(($timeout - 1)) >> + >> + if [ "$timeout" = 0 ]; then >> + message "device waiting timeout exceedded" >> + break >> + fi >> done >> + >> +[ -z "$timeout" ] || printf '%s\n' "$timeout" > "$timecnt" >> diff --git a/features/bootchain-waitdev/data/lib/initrd/pre/bootchain/300-waitdev b/features/bootchain-waitdev/data/lib/initrd/pre/bootchain/300-waitdev >> index 3642722..5e0f040 100755 >> --- a/features/bootchain-waitdev/data/lib/initrd/pre/bootchain/300-waitdev >> +++ b/features/bootchain-waitdev/data/lib/initrd/pre/bootchain/300-waitdev >> @@ -5,6 +5,9 @@ >> dir=/.initrd/bootchain/waitdev >> mkdir -p -- "$dir" >> >> +[ -z "${WAITDEV_TIMEOUT-}" ] || >> + printf '%s\n' "$WAITDEV_TIMEOUT" >"$dir"/TIMECNT >> + >> i=0 >> while [ "$i" -lt "${WAITDEV:-0}" ]; do >> touch "$dir/$i" >> -- >> 2.24.1 >> >> _______________________________________________ >> Make-initrd mailing list >> Make-initrd@lists.altlinux.org >> https://lists.altlinux.org/mailman/listinfo/make-initrd >> -- Best regards, Leonid Krivoshein.