From: Jan Kiszka <jan.kiszka@web.de>
To: Felix Moessbauer <felix.moessbauer@siemens.com>,
isar-users@googlegroups.com
Cc: henning.schild@siemens.com
Subject: Re: [PATCH v2 2/2] execute do_wic_image under a lock to ensure mountpoints remain mounted
Date: Sat, 25 Sep 2021 09:34:31 +0200 [thread overview]
Message-ID: <11ac45b6-fa31-1a3e-196e-9b823d4a83c2@web.de> (raw)
In-Reply-To: <20210923131205.121363-3-felix.moessbauer@siemens.com>
On 23.09.21 15:12, Felix Moessbauer wrote:
> This patch adds the isar.lock to the do_wic_image task to ensure that
> the mountpoints are not unmounted by a simultaneously running wic task.
As long as we are not bookkeeping mount and umounts, it's better to
avoid locking of the whole task, only synchronize mounting against
competing runs, and leave umount to the cleanup handler.
Also, the lock is way too broad when it is repo-anchored. Only users of
the same buildchroot compete here.
Jan
> Further, it makes mounting more robust by executing the
> wic task in a try / finally handler so that the mount points are
> unmounted even if the task itself fails.
>
> Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
> ---
> meta/classes/wic-img.bbclass | 34 +++++++++++++++++++++-------------
> 1 file changed, 21 insertions(+), 13 deletions(-)
>
> diff --git a/meta/classes/wic-img.bbclass b/meta/classes/wic-img.bbclass
> index d849ad9..cd97fa9 100644
> --- a/meta/classes/wic-img.bbclass
> +++ b/meta/classes/wic-img.bbclass
> @@ -138,23 +138,40 @@ python check_for_wic_warnings() {
>
> do_wic_image[file-checksums] += "${WKS_FILE_CHECKSUM}"
> python do_wic_image() {
> - bb.build.exec_func("generate_wic_image", d)
> + lock = bb.utils.lockfile(d.getVar("REPO_ISAR_DIR") + "/isar.lock", shared=False)
> + bb.build.exec_func("wic_do_mounts", d)
> + try:
> + bb.build.exec_func("generate_wic_image", d)
> + finally:
> + bb.build.exec_func("wic_undo_mounts", d)
> + bb.utils.unlockfile(lock)
> bb.build.exec_func("check_for_wic_warnings", d)
> }
> addtask wic_image before do_image after do_image_tools
>
> -generate_wic_image() {
> +wic_do_mounts() {
> buildchroot_do_mounts
> sudo -s <<'EOSUDO'
> - ( flock 9
> for dir in ${BBLAYERS} ${STAGING_DIR} ${SCRIPTSDIR} ${BITBAKEDIR}; do
> mkdir -p ${BUILDCHROOT_DIR}/$dir
> if ! mountpoint ${BUILDCHROOT_DIR}/$dir >/dev/null 2>&1; then
> mount --bind --make-private $dir ${BUILDCHROOT_DIR}/$dir
> fi
> done
> - ) 9>${MOUNT_LOCKFILE}
> EOSUDO
> +}
> +
> +wic_undo_mounts() {
> + sudo -s <<'EOSUDO'
> + for dir in ${BBLAYERS} ${STAGING_DIR} ${SCRIPTSDIR} ${BITBAKEDIR}; do
> + if mountpoint -q ${BUILDCHROOT_DIR}/$dir; then
> + umount ${BUILDCHROOT_DIR}/$dir
> + fi
> + done
> +EOSUDO
> +}
> +
> +generate_wic_image() {
> export FAKEROOTCMD=${FAKEROOTCMD}
> export BUILDDIR=${BUILDDIR}
> export MTOOLS_SKIP_CHECK=1
> @@ -200,13 +217,4 @@ EOSUDO
> done
> rm -rf ${BUILDCHROOT_DIR}/${WICTMP}
> rm -rf ${IMAGE_ROOTFS}/../pseudo
> - sudo -s <<'EOSUDO'
> - ( flock 9
> - for dir in ${BBLAYERS} ${STAGING_DIR} ${SCRIPTSDIR} ${BITBAKEDIR}; do
> - if mountpoint -q ${BUILDCHROOT_DIR}/$dir; then
> - umount ${BUILDCHROOT_DIR}/$dir
> - fi
> - done
> - ) 9>${MOUNT_LOCKFILE}
> -EOSUDO
> }
>
prev parent reply other threads:[~2021-09-25 7:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-23 13:12 [PATCH v2 0/2] Fix sporadic failures in do_wic_image Felix Moessbauer
2021-09-23 13:12 ` [PATCH v2 1/2] fix typo in do_rootfs_finalize Felix Moessbauer
2021-09-23 13:12 ` [PATCH v2 2/2] execute do_wic_image under a lock to ensure mountpoints remain mounted Felix Moessbauer
2021-09-25 7:34 ` Jan Kiszka [this message]
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=11ac45b6-fa31-1a3e-196e-9b823d4a83c2@web.de \
--to=jan.kiszka@web.de \
--cc=felix.moessbauer@siemens.com \
--cc=henning.schild@siemens.com \
--cc=isar-users@googlegroups.com \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox