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.
This commit is contained in:
Erik Arvstedt 2020-05-27 22:07:43 +02:00
parent dfa743e49e
commit d85dc4f690
No known key found for this signature in database
GPG key ID: 33312B944DD97846
4 changed files with 3 additions and 4 deletions

View file

@ -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

View file

@ -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" =

View file

@ -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

View file

@ -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