[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/3] hostmem: Detect and cache fs type for file hostmem
From: |
Peter Xu |
Subject: |
Re: [PATCH 1/3] hostmem: Detect and cache fs type for file hostmem |
Date: |
Wed, 19 Apr 2023 10:46:38 -0400 |
On Wed, Apr 19, 2023 at 09:28:21AM +0200, David Hildenbrand wrote:
> On 19.04.23 00:57, Peter Xu wrote:
> > Detect the file system for a memory-backend-file object and cache it within
> > the object if possible when CONFIG_LINUX (using statfs).
> >
> > Only support the two important types of memory (tmpfs, hugetlbfs) and keep
> > the rest as "unknown" for now.
> >
> > Signed-off-by: Peter Xu <peterx@redhat.com>
> > ---
> > backends/hostmem-file.c | 37 ++++++++++++++++++++++++++++++++++++-
> > include/sysemu/hostmem.h | 1 +
> > 2 files changed, 37 insertions(+), 1 deletion(-)
> >
> > diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c
> > index 25141283c4..2484e45a11 100644
> > --- a/backends/hostmem-file.c
> > +++ b/backends/hostmem-file.c
> > @@ -18,13 +18,17 @@
> > #include "sysemu/hostmem.h"
> > #include "qom/object_interfaces.h"
> > #include "qom/object.h"
> > +#ifdef CONFIG_LINUX
> > +#include <sys/vfs.h>
> > +#include <linux/magic.h>
> > +#endif
> > OBJECT_DECLARE_SIMPLE_TYPE(HostMemoryBackendFile, MEMORY_BACKEND_FILE)
> > struct HostMemoryBackendFile {
> > HostMemoryBackend parent_obj;
> > -
> > + __fsword_t fs_type;
> > char *mem_path;
> > uint64_t align;
> > bool discard_data;
> > @@ -52,6 +56,15 @@ file_backend_memory_alloc(HostMemoryBackend *backend,
> > Error **errp)
> > return;
> > }
> > +#ifdef CONFIG_LINUX
> > + struct statfs fs;
> > + if (!statfs(fb->mem_path, &fs)) {
> > + fb->fs_type = fs.f_type;
> > + } else {
> > + fb->fs_type = 0;
> > + }
> > +#endif
> > +
>
>
> Instead of using statfs, why not implement something like
> qemu_fd_getpagesize(), that also relies on HUGETLBFS_MAGIC already, meaning
>
> size_t qemu_fd_type(int fd)
>
> which uses fstatfs() instead? As an abstraction, as Daniel suggests, use a
> new enum to return the type -- "0" meaning "unknown".
>
> Then you can even avoid the caching in hostmem code and simply call it
> directly from uffd code.
Yeah, can do.
I think it depends on whether this can also be useful for other users of a
file memory backend object where the fd may not be on hand. So far this's
indeed the only one that needs it, though, so I can switch.
Thanks,
--
Peter Xu