Commit 25b5ff1a authored by Chen Hanxiao's avatar Chen Hanxiao Committed by Michael Roth
Browse files

qga: add mountpoint usage info to GuestFilesystemInfo



This patch adds support for getting the usage of mounted
filesystem.
The usage of fs stored as used_bytes and total_bytes.
It's very useful when we try to monitor guest's filesystem.

Cc: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarChen Hanxiao <chenhanxiao@gmail.com>
Signed-off-by: default avatarMichael Roth <mdroth@linux.vnet.ibm.com>
parent 141b1974
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ extern char **environ;
#include <arpa/inet.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/statvfs.h>

#ifdef FIFREEZE
#define CONFIG_FSFREEZE
@@ -1072,6 +1073,8 @@ static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
                                               Error **errp)
{
    GuestFilesystemInfo *fs = g_malloc0(sizeof(*fs));
    struct statvfs buf;
    unsigned long used, nonroot_total, fr_size;
    char *devpath = g_strdup_printf("/sys/dev/block/%u:%u",
                                    mount->devmajor, mount->devminor);

@@ -1079,7 +1082,19 @@ static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
    fs->type = g_strdup(mount->devtype);
    build_guest_fsinfo_for_device(devpath, fs, errp);

    if (statvfs(fs->mountpoint, &buf) == 0) {
        fr_size = buf.f_frsize;
        used = buf.f_blocks - buf.f_bfree;
        nonroot_total = used + buf.f_bavail;
        fs->used_bytes = used * fr_size;
        fs->total_bytes = nonroot_total * fr_size;

        fs->has_total_bytes = true;
        fs->has_used_bytes = true;
    }

    g_free(devpath);

    return fs;
}

+3 −0
Original line number Diff line number Diff line
@@ -848,6 +848,8 @@
# @name: disk name
# @mountpoint: mount point path
# @type: file system type string
# @used-bytes: file system used bytes (since 3.0)
# @total-bytes: non-root file system total bytes (since 3.0)
# @disk: an array of disk hardware information that the volume lies on,
#        which may be empty if the disk type is not supported
#
@@ -855,6 +857,7 @@
##
{ 'struct': 'GuestFilesystemInfo',
  'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
           '*used-bytes': 'uint64', '*total-bytes': 'uint64',
           'disk': ['GuestDiskAddress']} }

##