From dfa743e49e45bcb6d334e50f24275b04a004a6f6 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Wed, 27 May 2020 22:07:42 +0200 Subject: [PATCH 1/2] test-driver: remove useless syncs These syncs have the goal to transfer host filesystem changes to the VM, but they have no effect because 1) syncing in the VM can't possibly pull in host data and 2) 9p is accessing the host filesystem on the cached layer anyways, so even syncing on the host would have no effect in the VM. --- nixos/lib/test-driver/test-driver.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nixos/lib/test-driver/test-driver.py b/nixos/lib/test-driver/test-driver.py index c27947bc610d..ff6d763989f5 100644 --- a/nixos/lib/test-driver/test-driver.py +++ b/nixos/lib/test-driver/test-driver.py @@ -596,11 +596,8 @@ class Machine: shutil.copytree(host_src, host_intermediate) else: shutil.copy(host_src, host_intermediate) - self.succeed("sync") self.succeed(make_command(["mkdir", "-p", vm_target.parent])) self.succeed(make_command(["cp", "-r", vm_intermediate, vm_target])) - # Make sure the cleanup is synced into VM - self.succeed("sync") def copy_from_vm(self, source: str, target_dir: str = "") -> None: """Copy a file from the VM (specified by an in-VM source path) to a path @@ -626,8 +623,6 @@ class Machine: shutil.copytree(intermediate, abs_target) else: shutil.copy(intermediate, abs_target) - # Make sure the cleanup is synced into VM - self.succeed("sync") def dump_tty_contents(self, tty: str) -> None: """Debugging: Dump the contents of the TTY From d85dc4f6902819be8277d1d65414e51bfbef0ac6 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Wed, 27 May 2020 22:07:43 +0200 Subject: [PATCH 2/2] qemu-vm: fix inconsistent caching of xchg dirs xchg is advertised as a bidirectional exchange dir, but file content transfer from host to VM fails due to caching: If a file is read in the VM and then modified on the host, subsequent re-reads in the VM can yield old, cached data. This is caused by the use of 9p's cache=loose mode that is explicitly meant for read-only mounts. 9p doesn't provide any suitable cache modes, so fix this by disabling caching. Also, remove a now unnecessary sync in the test driver. --- nixos/lib/test-driver/test-driver.py | 1 - nixos/modules/virtualisation/qemu-vm.nix | 2 +- pkgs/build-support/vm/default.nix | 2 +- pkgs/build-support/vm/windows/controller/default.nix | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/nixos/lib/test-driver/test-driver.py b/nixos/lib/test-driver/test-driver.py index ff6d763989f5..b96165823721 100644 --- a/nixos/lib/test-driver/test-driver.py +++ b/nixos/lib/test-driver/test-driver.py @@ -615,7 +615,6 @@ class Machine: # Copy the file to the shared directory inside VM self.succeed(make_command(["mkdir", "-p", vm_shared_temp])) self.succeed(make_command(["cp", "-r", vm_src, vm_intermediate])) - self.succeed("sync") abs_target = out_dir / target_dir / vm_src.name abs_target.parent.mkdir(exist_ok=True, parents=True) # Copy the file from the shared directory outside VM diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix index 31d332e9f07a..3ecb8aa11ca3 100644 --- a/nixos/modules/virtualisation/qemu-vm.nix +++ b/nixos/modules/virtualisation/qemu-vm.nix @@ -567,7 +567,7 @@ in "/tmp/xchg" = { device = "xchg"; fsType = "9p"; - options = [ "trans=virtio" "version=9p2000.L" "cache=loose" ]; + options = [ "trans=virtio" "version=9p2000.L" ]; neededForBoot = true; }; "/tmp/shared" = diff --git a/pkgs/build-support/vm/default.nix b/pkgs/build-support/vm/default.nix index 488c7f2ce2c7..cdd713be180d 100644 --- a/pkgs/build-support/vm/default.nix +++ b/pkgs/build-support/vm/default.nix @@ -115,7 +115,7 @@ rec { echo "mounting host's temporary directory..." mkdir -p /fs/tmp/xchg - mount -t 9p xchg /fs/tmp/xchg -o trans=virtio,version=9p2000.L,cache=loose + mount -t 9p xchg /fs/tmp/xchg -o trans=virtio,version=9p2000.L mkdir -p /fs/proc mount -t proc none /fs/proc diff --git a/pkgs/build-support/vm/windows/controller/default.nix b/pkgs/build-support/vm/windows/controller/default.nix index 08b93aaf1174..9d13983a2833 100644 --- a/pkgs/build-support/vm/windows/controller/default.nix +++ b/pkgs/build-support/vm/windows/controller/default.nix @@ -53,7 +53,7 @@ let store /fs/nix/store mount -t 9p \ - -o trans=virtio,version=9p2000.L,cache=loose \ + -o trans=virtio,version=9p2000.L \ xchg /fs/xchg echo root:x:0:0::/root:/bin/false > /fs/etc/passwd