[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 00/13] 9p: reconcile virtfs with unlinked files
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PATCH 00/13] 9p: reconcile virtfs with unlinked files |
Date: |
Mon, 4 Jul 2016 14:40:37 +0200 |
Aneesh,
Can you review this series please, and maybe provide feedback on the
patches for the linux client ?
Thanks.
--
Greg
On Mon, 27 Jun 2016 11:40:55 +0200
Greg Kurz <address@hidden> wrote:
> This series addresses a long standing issue in 9p, where most syscalls
> accessing file attributes out of file descriptor stop to work in the
> guest when the file gets unlinked:
>
> open("./test.txt", O_RDWR|O_CREAT, 0666) = 4
> unlink("./test.txt") = 0
> fstat(4, 0x3fffc22108d0) = -1 ENOENT (No such file or
> directory)
> ftruncate(4, 0) = -1 ENOENT (No such file or
> directory)
> utimensat(4, NULL, NULL, 0) = -1 ENOENT (No such file or
> directory)
> fgetxattr(4, "user.greg", NULL, 0) = -1 ENOENT (No such file or
> directory)
> flistxattr(4, NULL, 0) = -1 ENOENT (No such file or
> directory)
> fchmod(4, 0) = -1 ENOENT (No such file or
> directory)
> fchown(4, -1, -1) = -1 ENOENT (No such file or
> directory)
>
> There is also another case where ftruncate() unexpectedly fails:
>
> open("./test.txt", O_RDWR|O_CREAT, 0666) = 4
> chmod("./test.txt", 0) = 0
> ftruncate(4, 0) = -1 EACCES (Permission denied)
>
> Since the open+unlink sequence is widely used in applications, these
> failures are really a problem, and does not encourage people to using
> 9p mounts.
>
> The root cause for all these errors is that QEMU uses path based syscalls to
> implement 9p operations on file attributes, even if the fid has an open fd.
>
> This series adds new file ops to the internal fsdev API, following the example
> of already existing fstat, so that backends can access the fid file descriptor
> and pass it to ftruncate(), fchmod() and friends.
>
> This can be tested with a linux guest, provided the 9p client in the kernel is
> fixed with the following patches, to ensure it passes open fids (fid
> associated
> to a valid file descriptor) to the 9p server in QEMU.
>
> https://sourceforge.net/p/v9fs/mailman/message/35175775/
>
> With this series and the patched guest kernel, all the failures mentionned
> above no longer occur.
>
> ---
>
> Greg Kurz (13):
> 9p: synth: drop v9fs_ prefix
> 9p: factour out duplicate code from local_fstat() and local_lstat()
> 9p: introduce the v9fs_get_fd_fid() helper
> 9p: getattr: use fstat if we have a fd
> 9p: introduce ftruncate file op
> oslib: support futimens() if available
> 9p: introduce futimens file op
> 9p: add a fd argument to xattr helpers
> 9p: introduce fchown file op
> 9p: introduce fchmod file op
> 9p: xattr fid to reference file fid
> 9p: introduce fgetxattr file op
> 9p: introduce flistxattr file op
>
>
> fsdev/file-op-9p.h | 9 ++
> hw/9pfs/9p-handle.c | 85 ++++++++++++---
> hw/9pfs/9p-local.c | 213 ++++++++++++++++++++++++++++----------
> hw/9pfs/9p-posix-acl.c | 80 ++++++++++----
> hw/9pfs/9p-proxy.c | 78 ++++++++++++--
> hw/9pfs/9p-synth.c | 249
> +++++++++++++++++++++++++++------------------
> hw/9pfs/9p-xattr-user.c | 41 +++++--
> hw/9pfs/9p-xattr.c | 35 ++++--
> hw/9pfs/9p-xattr.h | 67 +++++++-----
> hw/9pfs/9p.c | 189 +++++++++++++++++++++++++++++-----
> hw/9pfs/9p.h | 3 +
> hw/9pfs/cofs.c | 79 ++++++++++++++
> hw/9pfs/coth.h | 7 +
> hw/9pfs/coxattr.c | 42 ++++++++
> include/sysemu/os-posix.h | 1
> util/oslib-posix.c | 10 ++
> 16 files changed, 896 insertions(+), 292 deletions(-)
>
> --
> Greg
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH 00/13] 9p: reconcile virtfs with unlinked files,
Greg Kurz <=