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
This v2 has a qtest as suggested by Christian Schoenebeck.
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 | 9 +++++
10 files changed, 213 insertions(+), 18 deletions(-)
--
2.48.1