On Tue, Sep 18, 2018 at 5:45 PM, Pavel Hrdina <phrd...@redhat.com> wrote:
> Signed-off-by: Pavel Hrdina <phrd...@redhat.com> > Reviewed-by: Fabiano Fidêncio <fiden...@redhat.com> > --- > src/util/vircgroup.c | 36 +++----------------------- > src/util/vircgroupbackend.h | 12 +++++++++ > src/util/vircgrouppriv.h | 6 +++++ > src/util/vircgroupv1.c | 50 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 71 insertions(+), 33 deletions(-) > > diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c > index 0d93860df6..465d540bb2 100644 > --- a/src/util/vircgroup.c > +++ b/src/util/vircgroup.c > @@ -500,7 +500,7 @@ virCgroupGetValueStr(virCgroupPtr group, > } > > > -static int > +int > virCgroupGetValueForBlkDev(virCgroupPtr group, > int controller, > const char *key, > @@ -1503,19 +1503,7 @@ virCgroupSetBlkioDeviceWeight(virCgroupPtr group, > const char *path, > unsigned int weight) > { > - VIR_AUTOFREE(char *) str = NULL; > - VIR_AUTOFREE(char *) blkstr = NULL; > - > - if (!(blkstr = virCgroupGetBlockDevString(path))) > - return -1; > - > - if (virAsprintf(&str, "%s%d", blkstr, weight) < 0) > - return -1; > - > - return virCgroupSetValueStr(group, > - VIR_CGROUP_CONTROLLER_BLKIO, > - "blkio.weight_device", > - str); > + VIR_CGROUP_BACKEND_CALL(group, setBlkioDeviceWeight, -1, path, > weight); > } > > /** > @@ -1667,25 +1655,7 @@ virCgroupGetBlkioDeviceWeight(virCgroupPtr group, > const char *path, > unsigned int *weight) > { > - VIR_AUTOFREE(char *) str = NULL; > - > - if (virCgroupGetValueForBlkDev(group, > - VIR_CGROUP_CONTROLLER_BLKIO, > - "blkio.weight_device", > - path, > - &str) < 0) > - return -1; > - > - if (!str) { > - *weight = 0; > - } else if (virStrToLong_ui(str, NULL, 10, weight) < 0) { > - virReportError(VIR_ERR_INTERNAL_ERROR, > - _("Unable to parse '%s' as an integer"), > - str); > - return -1; > - } > - > - return 0; > + VIR_CGROUP_BACKEND_CALL(group, getBlkioDeviceWeight, -1, path, > weight); > } > > > diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h > index bd78c5b937..a84417ddb7 100644 > --- a/src/util/vircgroupbackend.h > +++ b/src/util/vircgroupbackend.h > @@ -152,6 +152,16 @@ typedef int > long long *requests_read, > long long *requests_write); > > +typedef int > +(*virCgroupSetBlkioDeviceWeightCB)(virCgroupPtr group, > + const char *path, > + unsigned int weight); > + > +typedef int > +(*virCgroupGetBlkioDeviceWeightCB)(virCgroupPtr group, > + const char *path, > + unsigned int *weight); > + > struct _virCgroupBackend { > virCgroupBackendType type; > > @@ -180,6 +190,8 @@ struct _virCgroupBackend { > virCgroupGetBlkioWeightCB getBlkioWeight; > virCgroupGetBlkioIoServicedCB getBlkioIoServiced; > virCgroupGetBlkioIoDeviceServicedCB getBlkioIoDeviceServiced; > + virCgroupSetBlkioDeviceWeightCB setBlkioDeviceWeight; > + virCgroupGetBlkioDeviceWeightCB getBlkioDeviceWeight; > }; > typedef struct _virCgroupBackend virCgroupBackend; > typedef virCgroupBackend *virCgroupBackendPtr; > diff --git a/src/util/vircgrouppriv.h b/src/util/vircgrouppriv.h > index 525c288a9a..3a968c1ce2 100644 > --- a/src/util/vircgrouppriv.h > +++ b/src/util/vircgrouppriv.h > @@ -82,6 +82,12 @@ int virCgroupPartitionEscape(char **path); > > char *virCgroupGetBlockDevString(const char *path); > > +int virCgroupGetValueForBlkDev(virCgroupPtr group, > + int controller, > + const char *key, > + const char *path, > + char **value); > + > int virCgroupNewPartition(const char *path, > bool create, > int controllers, > diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c > index 206318d436..b627a9d516 100644 > --- a/src/util/vircgroupv1.c > +++ b/src/util/vircgroupv1.c > @@ -1137,6 +1137,54 @@ virCgroupV1GetBlkioIoDeviceServiced(virCgroupPtr > group, > } > > > +static int > +virCgroupV1SetBlkioDeviceWeight(virCgroupPtr group, > + const char *path, > + unsigned int weight) > +{ > + VIR_AUTOFREE(char *) str = NULL; > + VIR_AUTOFREE(char *) blkstr = NULL; > + > + if (!(blkstr = virCgroupGetBlockDevString(path))) > + return -1; > + > + if (virAsprintf(&str, "%s%d", blkstr, weight) < 0) > + return -1; > + > + return virCgroupSetValueStr(group, > + VIR_CGROUP_CONTROLLER_BLKIO, > + "blkio.weight_device", > + str); > +} > + > + > +static int > +virCgroupV1GetBlkioDeviceWeight(virCgroupPtr group, > + const char *path, > + unsigned int *weight) > +{ > + VIR_AUTOFREE(char *) str = NULL; > + > + if (virCgroupGetValueForBlkDev(group, > + VIR_CGROUP_CONTROLLER_BLKIO, > + "blkio.weight_device", > + path, > + &str) < 0) > + return -1; > + > + if (!str) { > + *weight = 0; > + } else if (virStrToLong_ui(str, NULL, 10, weight) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Unable to parse '%s' as an integer"), > + str); > + return -1; > + } > + > + return 0; > +} > + > + > virCgroupBackend virCgroupV1Backend = { > .type = VIR_CGROUP_BACKEND_TYPE_V1, > > @@ -1163,6 +1211,8 @@ virCgroupBackend virCgroupV1Backend = { > .getBlkioWeight = virCgroupV1GetBlkioWeight, > .getBlkioIoServiced = virCgroupV1GetBlkioIoServiced, > .getBlkioIoDeviceServiced = virCgroupV1GetBlkioIoDeviceServiced, > + .setBlkioDeviceWeight = virCgroupV1SetBlkioDeviceWeight, > + .getBlkioDeviceWeight = virCgroupV1GetBlkioDeviceWeight, > }; > > > -- > 2.17.1 > > -- > libvir-list mailing list > libvir-list@redhat.com > https://www.redhat.com/mailman/listinfo/libvir-list >
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list