util/mmap-alloc: qemu_fd_getfs()
This new helper fetches file system type for a fd. Only Linux is implemented so far. Currently only tmpfs and hugetlbfs are defined, but it can grow as needed. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
403d18ae38
commit
fa45f8dab9
|
@ -1,8 +1,15 @@
|
||||||
#ifndef QEMU_MMAP_ALLOC_H
|
#ifndef QEMU_MMAP_ALLOC_H
|
||||||
#define QEMU_MMAP_ALLOC_H
|
#define QEMU_MMAP_ALLOC_H
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
QEMU_FS_TYPE_UNKNOWN = 0,
|
||||||
|
QEMU_FS_TYPE_TMPFS,
|
||||||
|
QEMU_FS_TYPE_HUGETLBFS,
|
||||||
|
QEMU_FS_TYPE_NUM,
|
||||||
|
} QemuFsType;
|
||||||
|
|
||||||
size_t qemu_fd_getpagesize(int fd);
|
size_t qemu_fd_getpagesize(int fd);
|
||||||
|
QemuFsType qemu_fd_getfs(int fd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qemu_ram_mmap: mmap anonymous memory, the specified file or device.
|
* qemu_ram_mmap: mmap anonymous memory, the specified file or device.
|
||||||
|
|
|
@ -27,8 +27,36 @@
|
||||||
|
|
||||||
#ifdef CONFIG_LINUX
|
#ifdef CONFIG_LINUX
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
|
#include <linux/magic.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QemuFsType qemu_fd_getfs(int fd)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_LINUX
|
||||||
|
struct statfs fs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (fd < 0) {
|
||||||
|
return QEMU_FS_TYPE_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
ret = fstatfs(fd, &fs);
|
||||||
|
} while (ret != 0 && errno == EINTR);
|
||||||
|
|
||||||
|
switch (fs.f_type) {
|
||||||
|
case TMPFS_MAGIC:
|
||||||
|
return QEMU_FS_TYPE_TMPFS;
|
||||||
|
case HUGETLBFS_MAGIC:
|
||||||
|
return QEMU_FS_TYPE_HUGETLBFS;
|
||||||
|
default:
|
||||||
|
return QEMU_FS_TYPE_UNKNOWN;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
return QEMU_FS_TYPE_UNKNOWN;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
size_t qemu_fd_getpagesize(int fd)
|
size_t qemu_fd_getpagesize(int fd)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_LINUX
|
#ifdef CONFIG_LINUX
|
||||||
|
|
Loading…
Reference in a new issue