Make-initrd development discussion
 help / color / mirror / Atom feed
From: Leonid Krivoshein <klark.devel@gmail.com>
To: make-initrd@lists.altlinux.org
Subject: Re: [make-initrd] [PATCH v6 08/22] bootchain-waitdev: introduces an optional waitdev_timeout
Date: Tue, 26 Oct 2021 14:25:55 +0300
Message-ID: <37c46f84-217f-81bd-56a9-1d5b8d02d670@gmail.com> (raw)
In-Reply-To: <20211026105516.jfbatbtjfah74vou@example.org>


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 <klark.devel@gmail.com>
>> ---
>>   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.



  reply	other threads:[~2021-10-26 11:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-26 10:55 ` Alexey Gladkov
2021-10-26 11:25   ` Leonid Krivoshein [this message]
2021-10-26 13:55     ` Alexey Gladkov
2021-10-26 14:05       ` Alexey Gladkov
2021-10-26 19:31         ` Leonid Krivoshein
2021-11-06 13:11           ` Alexey Gladkov
2021-11-06 14:39             ` Leonid Krivoshein
2021-11-06 14:55               ` Alexey Gladkov
2021-10-26 18:13       ` Leonid Krivoshein

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=37c46f84-217f-81bd-56a9-1d5b8d02d670@gmail.com \
    --to=klark.devel@gmail.com \
    --cc=make-initrd@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Make-initrd development discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/make-initrd/0 make-initrd/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 make-initrd make-initrd/ http://lore.altlinux.org/make-initrd \
		make-initrd@lists.altlinux.org make-initrd@lists.altlinux.ru make-initrd@lists.altlinux.com
	public-inbox-index make-initrd

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.make-initrd


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git