You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ROOT CAUSE (workflow-confirmed via FUSE errno trace 'do_getattr MAP-MISS inode=1 ->
EBADF, map has 0 inodes'): the host virtio-fs PassthroughFs is rebuilt fresh on
restore with an EMPTY inode map. The root inode (nodeid=1) is only inserted by the
FUSE_INIT handler, which the restored (already-mounted) guest never re-sends — so every
rootfs op the guest makes (execve reading /bin/sh) resolves a cached nodeid the host
has forgotten and returns EBADF, surfacing as 'Failed to spawn command sh: Bad file
descriptor'.
Fix: serialize the inode map (nodeid -> host path, recovered via readlink(/proc/self/fd/N)
on the live O_PATH fds while the template is paused-but-alive) and rehydrate it on
restore by reopening each path under its original nodeid. Plumbing: VirtioDevice gains
save_device_state/restore_device_state (opaque blob); Fs shares its PassthroughFs with
the worker via Arc (Server now holds Arc<F>) so the device can snapshot it; the blob
rides MmioDeviceState through the snapshot state and is reapplied after activate()
before vCPUs run. Open file handles deferred (a fresh exec opens its own). macOS/Windows
stubs no-op.
0 commit comments