QEMU 9.2 already fixed the long standing limitation of failing fstat() on unlinked files. This series does something similar for ftruncate().
The following program can be straced inside the guest with a shared fs in passthrough mode over 9p2000.L. int main(void) { struct stat st; int fd = creat("./foo", 0000); ftruncate(fd, 100); unlink("./foo"); ftruncate(fd, 1000); } Before : creat("./foo", 000) = 3 ftruncate(3, 100) = -1 EACCES (Permission denied) unlink("./foo") = 0 ftruncate(3, 1000) = -1 ENOENT (No such file or directory) After : creat("./foo", 000) = 3 ftruncate(3, 100) = 0 unlink("./foo") = 0 ftruncate(3, 1000) = 0 Cheers, -- Greg Christian Schoenebeck (1): tests/9p: add 'Tsetattr' request to test client Greg Kurz (5): 9pfs: local : Introduce local_fid_fd() helper 9pfs: Don't use file descriptors in core code 9pfs: Introduce ftruncate file op 9pfs: Introduce futimens file op tests/9p: Test `Tsetattr` can truncate unlinked file fsdev/file-op-9p.h | 5 +++ hw/9pfs/9p-local.c | 49 ++++++++++++++++++++------- hw/9pfs/9p-synth.c | 22 ++++++++++++ hw/9pfs/9p-util.h | 1 + hw/9pfs/9p.c | 21 +++++++++--- hw/9pfs/cofs.c | 37 ++++++++++++++++++++ hw/9pfs/coth.h | 4 +++ tests/qtest/libqos/virtio-9p-client.c | 49 +++++++++++++++++++++++++++ tests/qtest/libqos/virtio-9p-client.h | 34 +++++++++++++++++++ tests/qtest/virtio-9p-test.c | 15 ++++++++ 10 files changed, 219 insertions(+), 18 deletions(-) -- 2.48.1