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=20230601; t=1707975725; x=1708580525; darn=lists.altlinux.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=ud1PsuzejwZuxS+8HY35EAuCbbWRlamvjTUz+CZFrpw=; b=FECj5KUF3qmq0A54y5kLyH1jmCQqqaxONuQ/3NotLNaurGox9IRwVpjWsk/ddk73QQ U9ETX53rZU0V6xH30W8C67VujFSBRzg4eH6zpIonaE7IpmN6PrUzS/teNnud9IYSmUdV ZTSREDR9aOafMtvdJ8KQCuAI6yPWAZxUQKVmcUDb5MLEr0CJiOC3hrLfS2Rr+EA2M5F9 qWoehxUTNdcHkDIudjkPadY3qxqgOrguzRqD5BleTzhr3PjzUOwtQDtgtAf+KHFoH41y tv0W/cb1lFG7PIG7lHNzuHqQlTHGCcEbcgNfyuytbmjrZLsbz/HDzqL3GTE98f5T6Wux 3HRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707975725; x=1708580525; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ud1PsuzejwZuxS+8HY35EAuCbbWRlamvjTUz+CZFrpw=; b=Q+fMEf5ZT0VbDQvq3uAOeSHAQkxYx/7Svp4azo7pPSr1zF+GE5Q91/jNzs+TBApltV HGwnE7FOjbV+TwiKG/d4lxS2jY9YZHxikgm71vP5k/oD9pm+Ysepfjg1y3961ZHcNF/q dHkfDuuVmmQNDxSDIcqstMtK6x4tG7LUQswg86mPZYby5+/Hm0JRXUWSA8V2dRUJGhGk Y/jMtat386qZdbrEwHbEy9xr6u9ek3Ag/kY4WIIIsjc7E1wnjbtxcbX/ZY/gUcxvH/mw 9RzpL18nfp6WFYYkHN55B2Zdq1lDwWoPwF143X2J0dfAWN+gVwGlWb110dNvqdgOrS9+ WoIw== X-Gm-Message-State: AOJu0YyXFv6npz9jQoqdAypMVygN9pGBUxaVg1R1V8z334jUPJWjpMj3 aFLzjTS+udpnKTfX4ESMmM4FIKeARU6bI7WT/Xx+5IsAMbTOce0Lbs75JcLV X-Google-Smtp-Source: AGHT+IEiMtYL1AfCDRqocFdtZ5JYBazZCPN74aimjp/h/HgFwY+0PSQsHm//SYJTSjaowCS0X6eesQ== X-Received: by 2002:a2e:9006:0:b0:2d0:c06b:beb with SMTP id h6-20020a2e9006000000b002d0c06b0bebmr546090ljg.12.1707975725339; Wed, 14 Feb 2024 21:42:05 -0800 (PST) Message-ID: <9d2f201c-1984-482e-a9ef-8db5e98ecf5e@gmail.com> Date: Thu, 15 Feb 2024 08:42:03 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: make-initrd@lists.altlinux.org References: Content-Language: ru, en-US From: Leonid Krivoshein In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [make-initrd] root= --> mount event handler / 900-localdev regression 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: Thu, 15 Feb 2024 05:42:08 -0000 Archived-At: List-Archive: On 2/11/24 17:54, Alexey Gladkov wrote: > On Sun, Feb 11, 2024 at 04:57:20AM +0300, Leonid Krivoshein wrote: >> Привет! >> >> >> Раньше методы загрузки и их смена были частью документации make-initrd. >> Кажется, в этой логике что-то поломалось или поменялось несовместимым >> образом. Сейчас концовка шага pipeline rootfs выглядит так: >> >> echo localdev > /etc/initrd/method >> exit 2 >> >> Исходим из предположения, что root=pipeline как бы должен поменяться на >> другой метод загрузки, т.е. localdev, но как бы не так, хотя раньше >> именно так и было. Отработав, демон мог передать управление другому >> коду. > Сейчас ровно так и происходит. Когда работает pipeline, то > /etc/initrd/method = pipeline. Шаг rootfs переключает method=localdev. Это > происходит в очереди событий pipeline. Это разблокирует обработчик в > очереди mount. > > Возможно рейс может случиться из-за того, что method меняется до операции > mount. Наверное правильнее было бы сделать так: > > --- a/features/pipeline/data/lib/pipeline/rootfs > +++ b/features/pipeline/data/lib/pipeline/rootfs > @@ -12,4 +12,4 @@ done > > -run mount --move "$prevdir" "$rootmnt" > echo localdev > /etc/initrd/method > +run mount --move "$prevdir" "$rootmnt" > exit 2 > > В остальном я не вижу тут других рейсов. > >> Сейчас же работают сразу две вещи: >> >> 1. Обработчики событий монтирования. >> 2. 900-localdev работает всегда и с самого начала. >> >> Что в этом плохого? Гонки. Потому что цепочка действий (pipeline, >> bootchain) не отработала, а параллельно начинает какой-то код что-то >> делать. Если сейчас заменить концовку шага rootfs на: >> >> exit 2 >> >> ничего не поменяется. До этого шага всё может даже не дойти, а >> закончится раньше. А если по каким-то причинам цепочка "застрянет", мы >> увидим что-то вроде: > Она "застрянет" лишь потому что method всё ещё pipeline. > >> initramfs: Waiting for root (pipeline) ... >> >> даже после выполнения команды "echo localdev > /etc/initrd/method", т.к. >> 100-rootdelay не перечитывает теперь изменённое значение, он берёт $ROOT >> из /proc/cmdline. > $ git ls-tree -r master | grep rootdelay > 100755 blob c4dfb325061456cd3c9e47a12c5043d97126c2a5 data/etc/rc.d/init.d/rootdelay > 100755 blob b6624fbd8ec095f1a48e2a4b50a7ad771f367d4c data/sbin/rootdelayd > > Я не знаю про какой 100-rootdelay ты говоришь. Его нет уже как с 9 июля > 2023. > >> Как правильно избежать этих гонок? > Одно потенциальное место гонки я предложил исправить выше. О каких ещё > местах ты говоришь я пока не понимаю. > >> Как отключить на время обработки цепочки обработку mount и localdev? > Все эвенты в очереди mount в handlers/mount/900-localdev игнорируются пока > method не localdev. К сожалению, это не так. В начале chaind выставляет метод в пустоту. Как только выполняется mount --move ... $rootmnt, тут же начинают срабатывать события mount/localdev, что видно по /var/log/uevents.log и по совпадению временных метод в /var/log/chaind.log. Выше там у тебя всего одна команда. Подразумевается, что твой демон pipeline после этого шага rootfs тут же завершится. А если нет? В bootchain есть какая-то логика после шага rootfs. И в параллель с ней начинали отрабатывать эти события. В общем, мне удалось всё это победить, выполняя команду mount --move ... $rootmnt самой последней в chaind, т.е. непосредственно перед завершением демона. >> И как включить их обратно после того, как цепочка отработает? > Записать в /etc/initrd/method значение localdev и переместить/смонтировать > в rootmnt все необходимые устройства. Именно так я и сделал. То есть, теперь эти две команды -- завершение chaind, а не шага rootfs. -- WBR, Leonid Krivoshein.