From: Marek Szyprowski Date: Wed, 7 Aug 2024 06:50:34 +0000 (+0200) Subject: scripts: sd_fusing: Wait for udev also after writing to the zero sector X-Git-Tag: accepted/tizen/unified/20241126.175211~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ff3f72edb0d86d70b54fc8d73c3597f72391f0d;p=platform%2Fkernel%2Fu-boot.git scripts: sd_fusing: Wait for udev also after writing to the zero sector Writing to the zero sector might trigger kernel/udev to re-read partition table, so wait for udev to settle in such case. Signed-off-by: Marek Szyprowski Change-Id: I517570713bbaffaf58a849023eb784ca7675a842 --- diff --git a/scripts/tizen/sd_fusing.py b/scripts/tizen/sd_fusing.py index a40cbb7ed8..bd9d56e382 100755 --- a/scripts/tizen/sd_fusing.py +++ b/scripts/tizen/sd_fusing.py @@ -850,6 +850,19 @@ def check_sfdisk(): return True, support_delete +def wait_for_udev(): + # Run `udevadm settle` to ensure that partition change made by `sfdisk` or writing bootcode is completely reflected in userspace. + logging.info("Waiting for the udev event queue to empty...") + argv = ['udevadm', 'settle'] + logging.debug(" ".join(argv)) + proc = subprocess.run(argv, + stdout=None, + stderr=None) + if proc.returncode != 0: + logging.warning("udevadm settle exited without clearing the udev event queue.") + else: + logging.info("The udev event queue is empty.") + def mkpart(args, target): global Device new, support_delete = check_sfdisk() @@ -902,17 +915,7 @@ def mkpart(args, target): logging.error(f"New partition table:\n" + str(target.label)) sys.exit(1) - # Run `udevadm settle` to ensure that partition change made by `sfdisk` is completely reflected in userspace. - logging.info("Waiting for the udev event queue to empty...") - argv = ['udevadm', 'settle'] - logging.debug(" ".join(argv)) - proc = subprocess.run(argv, - stdout=None, - stderr=None) - if proc.returncode != 0: - logging.warning("udevadm settle exited without clearing the udev event queue.") - else: - logging.info("The udev event queue is empty.") + wait_for_udev() for i, part in enumerate(target.part_table): d = "/dev/" + get_partition_device(target.device, i+1) @@ -1101,6 +1104,11 @@ def do_fuse_raw(f, name, target, sector): buf = f.read(1 << 9) proc_dd.communicate() logging.info("Done") + + # writing to sector zero might trigger kernel/udev to re-read partition table + if sector == 0: + wait_for_udev() + #TODO: verification def do_fuse_file(f, name, target):