mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
scripts/runqemu: allocate unfsd ports in a way that doesn't race or clash with unrelated processes
There is already a neat check_free_port() function for finding an available port atomically, so use that and make two additional tweaks: - no need to allocate two separate ports; per unfsd documentation they can be the same - move lockfile release until after unfsd has been shut down and the port(s) used has been freed [YOCTO #15077] (From OE-Core rev: dee96e82fb04ea99ecd6c25513c7bd368df3bd37) Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
5776d07bdd
commit
66b7727577
@@ -1015,17 +1015,14 @@ to your build configuration.
|
||||
else:
|
||||
self.nfs_server = '192.168.7.@GATEWAY@'
|
||||
|
||||
# Figure out a new nfs_instance to allow multiple qemus running.
|
||||
ps = subprocess.check_output(("ps", "auxww")).decode('utf-8')
|
||||
pattern = '/bin/unfsd .* -i .*\.pid -e .*/exports([0-9]+) '
|
||||
all_instances = re.findall(pattern, ps, re.M)
|
||||
if all_instances:
|
||||
all_instances.sort(key=int)
|
||||
self.nfs_instance = int(all_instances.pop()) + 1
|
||||
|
||||
nfsd_port = 3049 + 2 * self.nfs_instance
|
||||
mountd_port = 3048 + 2 * self.nfs_instance
|
||||
nfsd_port = 3048 + self.nfs_instance
|
||||
lockdir = "/tmp/qemu-port-locks"
|
||||
self.make_lock_dir(lockdir)
|
||||
while not self.check_free_port('localhost', nfsd_port, lockdir):
|
||||
self.nfs_instance += 1
|
||||
nfsd_port += 1
|
||||
|
||||
mountd_port = nfsd_port
|
||||
# Export vars for runqemu-export-rootfs
|
||||
export_dict = {
|
||||
'NFS_INSTANCE': self.nfs_instance,
|
||||
@@ -1600,13 +1597,13 @@ to your build configuration.
|
||||
logger.debug('Running %s' % str(cmd))
|
||||
subprocess.check_call(cmd)
|
||||
self.release_taplock()
|
||||
self.release_portlock()
|
||||
|
||||
if self.nfs_running:
|
||||
logger.info("Shutting down the userspace NFS server...")
|
||||
cmd = ("runqemu-export-rootfs", "stop", self.rootfs)
|
||||
logger.debug('Running %s' % str(cmd))
|
||||
subprocess.check_call(cmd)
|
||||
self.release_portlock()
|
||||
|
||||
if self.saved_stty:
|
||||
subprocess.check_call(("stty", self.saved_stty))
|
||||
|
||||
Reference in New Issue
Block a user