On 10/02/2018 10:44 AM, Pavel Hrdina wrote: > Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> > --- > src/util/vircgroupv2.c | 66 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > > diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c > index 3e2cd16335..30c400f129 100644 > --- a/src/util/vircgroupv2.c > +++ b/src/util/vircgroupv2.c > @@ -592,6 +592,71 @@ virCgroupV2GetBlkioWeight(virCgroupPtr group, > } > > > +static int > +virCgroupV2GetBlkioIoServiced(virCgroupPtr group, > + long long *bytes_read, > + long long *bytes_write, > + long long *requests_read, > + long long *requests_write) > +{ > + long long stats_val; > + VIR_AUTOFREE(char *) str1 = NULL; > + char *p1; > + size_t i; > + > + const char *value_names[] = { > + "rbytes=", > + "wbytes=", > + "rios=", > + "wios=", > + }; > + long long *value_ptrs[] = { > + bytes_read, > + bytes_write, > + requests_read, > + requests_write > + }; > + > + *bytes_read = 0; > + *bytes_write = 0; > + *requests_read = 0; > + *requests_write = 0; > + > + if (virCgroupGetValueStr(group, > + VIR_CGROUP_CONTROLLER_BLKIO, > + "io.stat", &str1) < 0) { > + return -1; > + } > + > + /* sum up all entries of the same kind, from all devices */ > + for (i = 0; i < ARRAY_CARDINALITY(value_names); i++) { > + p1 = str1; > + > + while ((p1 = strstr(p1, value_names[i]))) { > + p1 += strlen(value_names[i]); > + if (virStrToLong_ll(p1, &p1, 10, &stats_val) < 0) { Rather unusual use, we tend to use two different pointers. Perhaps s/p1/p/? > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Cannot parse byte %sstat '%s'"), > + value_names[i], > + p1); What do you expect to be printed out here? Because IIUC this will print the incorrect string + the rest of the file. Also, "%sstat" will print "rwbytes=stat". I'd put a space after %s at least. > + return -1; > + } > + > + if (stats_val < 0 || > + (stats_val > 0 && *value_ptrs[i] > (LLONG_MAX - stats_val))) { > + virReportError(VIR_ERR_OVERFLOW, > + _("Sum of byte %sstat overflows"), > + value_names[i]); > + return -1; > + } > + *value_ptrs[i] += stats_val; > + } > + } > + > + return 0; > +} > + > + > virCgroupBackend virCgroupV2Backend = { > .type = VIR_CGROUP_BACKEND_TYPE_V2, > > @@ -616,6 +681,7 @@ virCgroupBackend virCgroupV2Backend = { > > .setBlkioWeight = virCgroupV2SetBlkioWeight, > .getBlkioWeight = virCgroupV2GetBlkioWeight, > + .getBlkioIoServiced = virCgroupV2GetBlkioIoServiced, > }; > > > Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list