浏览代码

qga: guest-get-fsinfo: add optional 'total-bytes-privileged' field

Since the commit 25b5ff1a86 ("qga: add mountpoint usage info to
GuestFilesystemInfo") we have 2 values reported in guest-get-fsinfo:
used = (f_blocks - f_bfree), total = (f_blocks - f_bfree + f_bavail) as
returned by statvfs(3).  While on Windows guests that's all we can get
with GetDiskFreeSpaceExA(), on POSIX guests we might also be interested in
total file system size, as it's visible for root user.  Let's add an
optional field 'total-bytes-privileged' to GuestFilesystemInfo struct,
which'd only be reported on POSIX and represent f_blocks value as returned
by statvfs(3).

While here, also tweak the docs to reflect better where those values
come from.

Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Link: https://lore.kernel.org/r/20240320161648.158226-2-andrey.drobyshev@virtuozzo.com
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Andrey Drobyshev 1 年之前
父节点
当前提交
50761a5a9a
共有 3 个文件被更改,包括 8 次插入2 次删除
  1. 2 0
      qga/commands-posix.c
  2. 1 0
      qga/commands-win32.c
  3. 5 2
      qga/qapi-schema.json

+ 2 - 0
qga/commands-posix.c

@@ -1569,8 +1569,10 @@ static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
         nonroot_total = used + buf.f_bavail;
         nonroot_total = used + buf.f_bavail;
         fs->used_bytes = used * fr_size;
         fs->used_bytes = used * fr_size;
         fs->total_bytes = nonroot_total * fr_size;
         fs->total_bytes = nonroot_total * fr_size;
+        fs->total_bytes_privileged = buf.f_blocks * fr_size;
 
 
         fs->has_total_bytes = true;
         fs->has_total_bytes = true;
+        fs->has_total_bytes_privileged = true;
         fs->has_used_bytes = true;
         fs->has_used_bytes = true;
     }
     }
 
 

+ 1 - 0
qga/commands-win32.c

@@ -1143,6 +1143,7 @@ static GuestFilesystemInfo *build_guest_fsinfo(char *guid, Error **errp)
     fs = g_malloc(sizeof(*fs));
     fs = g_malloc(sizeof(*fs));
     fs->name = g_strdup(guid);
     fs->name = g_strdup(guid);
     fs->has_total_bytes = false;
     fs->has_total_bytes = false;
+    fs->has_total_bytes_privileged = false;
     fs->has_used_bytes = false;
     fs->has_used_bytes = false;
     if (len == 0) {
     if (len == 0) {
         fs->mountpoint = g_strdup("System Reserved");
         fs->mountpoint = g_strdup("System Reserved");

+ 5 - 2
qga/qapi-schema.json

@@ -1026,7 +1026,10 @@
 #
 #
 # @used-bytes: file system used bytes (since 3.0)
 # @used-bytes: file system used bytes (since 3.0)
 #
 #
-# @total-bytes: non-root file system total bytes (since 3.0)
+# @total-bytes: filesystem capacity in bytes for unprivileged users (since 3.0)
+#
+# @total-bytes-privileged: filesystem capacity in bytes for privileged users
+#     (since 9.1)
 #
 #
 # @disk: an array of disk hardware information that the volume lies
 # @disk: an array of disk hardware information that the volume lies
 #     on, which may be empty if the disk type is not supported
 #     on, which may be empty if the disk type is not supported
@@ -1036,7 +1039,7 @@
 { 'struct': 'GuestFilesystemInfo',
 { 'struct': 'GuestFilesystemInfo',
   'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
   'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str',
            '*used-bytes': 'uint64', '*total-bytes': 'uint64',
            '*used-bytes': 'uint64', '*total-bytes': 'uint64',
-           'disk': ['GuestDiskAddress']} }
+           '*total-bytes-privileged': 'uint64', 'disk': ['GuestDiskAddress']} }
 
 
 ##
 ##
 # @guest-get-fsinfo:
 # @guest-get-fsinfo: