* [Qemu-devel] [PATCH v5 0/2] qga: report the usage of fs in @ 2018-06-01 15:27 Chen Hanxiao 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo Chen Hanxiao 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 2/2] qga-win: add driver path " Chen Hanxiao 0 siblings, 2 replies; 5+ messages in thread From: Chen Hanxiao @ 2018-06-01 15:27 UTC (permalink / raw) To: qemu-devel; +Cc: Chen Hanxiao This series report the usage of guest's fs by "used_bytes" and "total_bytes" by guest-get-fsinfo. Chen Hanxiao (2): qga: add mountpoint usage to GuestFilesystemInfo qga-win: add driver path usage to GuestFilesystemInfo qga/commands-posix.c | 19 +++++++++++++++++++ qga/commands-win32.c | 13 +++++++++++++ qga/qapi-schema.json | 14 +++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) -- 2.17.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo 2018-06-01 15:27 [Qemu-devel] [PATCH v5 0/2] qga: report the usage of fs in Chen Hanxiao @ 2018-06-01 15:27 ` Chen Hanxiao 2018-06-01 15:47 ` Eric Blake 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 2/2] qga-win: add driver path " Chen Hanxiao 1 sibling, 1 reply; 5+ messages in thread From: Chen Hanxiao @ 2018-06-01 15:27 UTC (permalink / raw) To: qemu-devel Cc: Chen Hanxiao, Michael Roth, Eric Blake, Daniel P . Berrangé From: Chen Hanxiao <chenhanxiao@gmail.com> 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: Eric Blake <eblake@redhat.com> Cc: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> --- v2: add description in qapi-schema and version numbers v3: use float for usage to get more precision. v4: make usage a best-effort query and mark it as optional. v5: report used-bytes and total-bytes in usage qga/commands-posix.c | 19 +++++++++++++++++++ qga/qapi-schema.json | 14 +++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/qga/commands-posix.c b/qga/commands-posix.c index 0dc219dbcf..83192f284c 100644 --- a/qga/commands-posix.c +++ b/qga/commands-posix.c @@ -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,9 @@ static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount, Error **errp) { GuestFilesystemInfo *fs = g_malloc0(sizeof(*fs)); + GuestFsUsage *usage; + 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 +1083,22 @@ 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)) { + fs->has_usage = false; + } else { + fr_size = buf.f_frsize; + used = buf.f_blocks - buf.f_bfree; + nonroot_total = used + buf.f_bavail; + usage = g_malloc0(sizeof(*usage)); + usage->used_bytes = used * fr_size; + usage->total_bytes = nonroot_total * fr_size; + + fs->has_usage = true; + fs->usage = usage; + } + g_free(devpath); + return fs; } diff --git a/qga/qapi-schema.json b/qga/qapi-schema.json index 17884c7c70..2f742474f6 100644 --- a/qga/qapi-schema.json +++ b/qga/qapi-schema.json @@ -840,12 +840,24 @@ 'bus-type': 'GuestDiskBusType', 'bus': 'int', 'target': 'int', 'unit': 'int'} } +## +# @GuestFsUsage: +# +# @used-bytes: file system used bytes +# @total-bytes: file system total bytes for nonroot user +# +# Since: 3.0 +## +{ 'struct': 'GuestFsUsage', + 'data': {'used-bytes': 'uint64', 'total-bytes': 'uint64'} } + ## # @GuestFilesystemInfo: # # @name: disk name # @mountpoint: mount point path # @type: file system type string +# @usage: file system usage struct (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 # @@ -853,7 +865,7 @@ ## { 'struct': 'GuestFilesystemInfo', 'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str', - 'disk': ['GuestDiskAddress']} } + '*usage': 'GuestFsUsage', 'disk': ['GuestDiskAddress']} } ## # @guest-get-fsinfo: -- 2.17.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo Chen Hanxiao @ 2018-06-01 15:47 ` Eric Blake 2018-06-01 16:58 ` Chen Hanxiao 0 siblings, 1 reply; 5+ messages in thread From: Eric Blake @ 2018-06-01 15:47 UTC (permalink / raw) To: Chen Hanxiao, qemu-devel; +Cc: Michael Roth, Daniel P . Berrangé On 06/01/2018 10:27 AM, Chen Hanxiao wrote: > From: Chen Hanxiao <chenhanxiao@gmail.com> > > 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: Eric Blake <eblake@redhat.com> > Cc: Daniel P. Berrangé <berrange@redhat.com> > Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> > > +++ b/qga/qapi-schema.json > @@ -840,12 +840,24 @@ > 'bus-type': 'GuestDiskBusType', > 'bus': 'int', 'target': 'int', 'unit': 'int'} } > > +## > +# @GuestFsUsage: > +# > +# @used-bytes: file system used bytes > +# @total-bytes: file system total bytes for nonroot user > +# > +# Since: 3.0 > +## > +{ 'struct': 'GuestFsUsage', > + 'data': {'used-bytes': 'uint64', 'total-bytes': 'uint64'} } That seems like pointless nesting on the wire, unless we have plans of reusing this type in other API calls. Is it any easier... > + > ## > # @GuestFilesystemInfo: > # > # @name: disk name > # @mountpoint: mount point path > # @type: file system type string > +# @usage: file system usage struct (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 > # > @@ -853,7 +865,7 @@ > ## > { 'struct': 'GuestFilesystemInfo', > 'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str', > - 'disk': ['GuestDiskAddress']} } > + '*usage': 'GuestFsUsage', 'disk': ['GuestDiskAddress']} } ...to just inline '*used-bytes' and '*total-bytes' here? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo 2018-06-01 15:47 ` Eric Blake @ 2018-06-01 16:58 ` Chen Hanxiao 0 siblings, 0 replies; 5+ messages in thread From: Chen Hanxiao @ 2018-06-01 16:58 UTC (permalink / raw) To: Eric Blake; +Cc: qemu-devel, Michael Roth, Daniel P . Berrangé 在 2018-06-01 23:47:04,"Eric Blake" <eblake@redhat.com> 写道: >On 06/01/2018 10:27 AM, Chen Hanxiao wrote: >> From: Chen Hanxiao <chenhanxiao@gmail.com> >> >> 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: Eric Blake <eblake@redhat.com> >> Cc: Daniel P. Berrangé <berrange@redhat.com> >> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> >> > >> +++ b/qga/qapi-schema.json >> @@ -840,12 +840,24 @@ >> 'bus-type': 'GuestDiskBusType', >> 'bus': 'int', 'target': 'int', 'unit': 'int'} } >> >> +## >> +# @GuestFsUsage: >> +# >> +# @used-bytes: file system used bytes >> +# @total-bytes: file system total bytes for nonroot user >> +# >> +# Since: 3.0 >> +## >> +{ 'struct': 'GuestFsUsage', >> + 'data': {'used-bytes': 'uint64', 'total-bytes': 'uint64'} } > >That seems like pointless nesting on the wire, unless we have plans of >reusing this type in other API calls. Is it any easier... > >> + >> ## >> # @GuestFilesystemInfo: >> # >> # @name: disk name >> # @mountpoint: mount point path >> # @type: file system type string >> +# @usage: file system usage struct (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 >> # >> @@ -853,7 +865,7 @@ >> ## >> { 'struct': 'GuestFilesystemInfo', >> 'data': {'name': 'str', 'mountpoint': 'str', 'type': 'str', >> - 'disk': ['GuestDiskAddress']} } >> + '*usage': 'GuestFsUsage', 'disk': ['GuestDiskAddress']} } > >...to just inline '*used-bytes' and '*total-bytes' here? > I just want to group them together, and use one has_XXX. I'll make a some fix for this. Thanks for you advice. Regards, - Chen ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH v5 2/2] qga-win: add driver path usage to GuestFilesystemInfo 2018-06-01 15:27 [Qemu-devel] [PATCH v5 0/2] qga: report the usage of fs in Chen Hanxiao 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo Chen Hanxiao @ 2018-06-01 15:27 ` Chen Hanxiao 1 sibling, 0 replies; 5+ messages in thread From: Chen Hanxiao @ 2018-06-01 15:27 UTC (permalink / raw) To: qemu-devel; +Cc: Chen Hanxiao, Michael Roth From: Chen Hanxiao <chenhanxiao@gmail.com> This patch adds support for getting the usage of windows driver path. The usage of fs stored as used_bytes and total_bytes. Cc: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Chen Hanxiao <chenhanxiao@gmail.com> --- qga/commands-win32.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 2d48394748..badcc2e2e8 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -670,7 +670,9 @@ static GuestFilesystemInfo *build_guest_fsinfo(char *guid, Error **errp) char fs_name[32]; char vol_info[MAX_PATH+1]; size_t len; + uint64_t i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes; GuestFilesystemInfo *fs = NULL; + GuestFsUsage *usage = NULL; GetVolumePathNamesForVolumeName(guid, (LPCH)&mnt, 0, &info_size); if (GetLastError() != ERROR_MORE_DATA) { @@ -699,10 +701,21 @@ static GuestFilesystemInfo *build_guest_fsinfo(char *guid, Error **errp) fs_name[sizeof(fs_name) - 1] = 0; fs = g_malloc(sizeof(*fs)); fs->name = g_strdup(guid); + fs->has_usage = false; if (len == 0) { fs->mountpoint = g_strdup("System Reserved"); } else { fs->mountpoint = g_strndup(mnt_point, len); + if (GetDiskFreeSpaceEx(fs->mountpoint, + (PULARGE_INTEGER) & i64FreeBytesToCaller, + (PULARGE_INTEGER) & i64TotalBytes, + (PULARGE_INTEGER) & i64FreeBytes)) { + usage = g_malloc(sizeof(*usage)); + usage->used_bytes = i64TotalBytes - i64FreeBytes; + usage->total_bytes = i64TotalBytes; + fs->usage = usage; + fs->has_usage = true; + } } fs->type = g_strdup(fs_name); fs->disk = build_guest_disk_info(guid, errp); -- 2.17.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-06-01 17:29 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-01 15:27 [Qemu-devel] [PATCH v5 0/2] qga: report the usage of fs in Chen Hanxiao 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 1/2] qga: add mountpoint usage to GuestFilesystemInfo Chen Hanxiao 2018-06-01 15:47 ` Eric Blake 2018-06-01 16:58 ` Chen Hanxiao 2018-06-01 15:27 ` [Qemu-devel] [PATCH v5 2/2] qga-win: add driver path " Chen Hanxiao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).