Re: [systemd-devel] [PATCH 1/3] cgroup: setup BlockIODeviceWeight in bus_cgroup_set_property

2013-09-10 Thread Lennart Poettering
On Tue, 27.08.13 13:36, Gao feng (gaof...@cn.fujitsu.com) wrote:

> This patch adds the support for setting up BlockIODeviceWeight
> in bus_cgroup_set_property. most of the codes are copied from
> the case that sets up DeviceAllow.

Thanks!

Applied!

> ---
>  src/core/dbus-cgroup.c | 85 
> ++
>  1 file changed, 85 insertions(+)
> 
> diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
> index 30c99dd..1555c34 100644
> --- a/src/core/dbus-cgroup.c
> +++ b/src/core/dbus-cgroup.c
> @@ -222,6 +222,91 @@ int bus_cgroup_set_property(
>  
>  return 1;
>  
> +} else if (streq(name, "BlockIODeviceWeight")) {
> +DBusMessageIter sub;
> +unsigned n = 0;
> +
> +if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
> +dbus_message_iter_get_element_type(i) != 
> DBUS_TYPE_STRUCT)
> +return -EINVAL;
> +
> +dbus_message_iter_recurse(i, &sub);
> +while (dbus_message_iter_get_arg_type(&sub) == 
> DBUS_TYPE_STRUCT) {
> +DBusMessageIter sub2;
> +const char *path;
> +uint64_t u64;
> +unsigned long ul;
> +CGroupBlockIODeviceWeight *a;
> +
> +dbus_message_iter_recurse(&sub, &sub2);
> +
> +if (bus_iter_get_basic_and_next(&sub2, 
> DBUS_TYPE_STRING, &path, true) < 0 ||
> +bus_iter_get_basic_and_next(&sub2, 
> DBUS_TYPE_UINT64, &u64, false) < 0)
> +return -EINVAL;
> +
> +ul = (unsigned long) u64;
> +
> +if (u64 < 10 || u64 > 1000)
> +return -EINVAL;
> +
> +if (mode != UNIT_CHECK) {
> +CGroupBlockIODeviceWeight *b;
> +bool exist = false;
> +
> +LIST_FOREACH(device_weights, b, 
> c->blockio_device_weights) {
> +if (streq(b->path, path)) {
> +a = b;
> +exist = true;
> +break;
> +}
> +}
> +
> +if (!exist) {
> +a = new0(CGroupBlockIODeviceWeight, 
> 1);
> +if (!a)
> +return -ENOMEM;
> +
> +a->path = strdup(path);
> +if (!a->path) {
> +free(a);
> +return -ENOMEM;
> +}
> +}
> +
> +a->weight = ul;
> +
> +if (!exist)
> +
> LIST_PREPEND(CGroupBlockIODeviceWeight, device_weights,
> + 
> c->blockio_device_weights, a);
> +}
> +
> +n++;
> +dbus_message_iter_next(&sub);
> +}
> +
> +if (mode != UNIT_CHECK) {
> +_cleanup_free_ char *buf = NULL;
> +_cleanup_fclose_ FILE *f = NULL;
> +CGroupBlockIODeviceWeight *a;
> +size_t size = 0;
> +
> +if (n == 0) {
> +while (c->blockio_device_weights)
> +
> cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
> +}
> +
> +f = open_memstream(&buf, &size);
> +if (!f)
> +return -ENOMEM;
> +
> +fputs("BlockIODeviceWeight=\n", f);
> +LIST_FOREACH(device_weights, a, 
> c->blockio_device_weights)
> +fprintf(f, "BlockIODeviceWeight=%s %lu\n", 
> a->path, a->weight);
> +fflush(f);
> +unit_write_drop_in_private(u, mode, name, buf);
> +}
> +
> +return 1;
>  } else if (streq(name, "MemoryAccounting")) {
>  
>  if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)


Lennart

-- 
Lennart Poettering - Red Hat, Inc.
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Re: [systemd-devel] [PATCH 1/3] cgroup: setup BlockIODeviceWeight in bus_cgroup_set_property

2013-09-04 Thread Gao feng
On 08/27/2013 01:36 PM, Gao feng wrote:
> This patch adds the support for setting up BlockIODeviceWeight
> in bus_cgroup_set_property. most of the codes are copied from
> the case that sets up DeviceAllow.

any comments?

> ---
>  src/core/dbus-cgroup.c | 85 
> ++
>  1 file changed, 85 insertions(+)
> 
> diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
> index 30c99dd..1555c34 100644
> --- a/src/core/dbus-cgroup.c
> +++ b/src/core/dbus-cgroup.c
> @@ -222,6 +222,91 @@ int bus_cgroup_set_property(
>  
>  return 1;
>  
> +} else if (streq(name, "BlockIODeviceWeight")) {
> +DBusMessageIter sub;
> +unsigned n = 0;
> +
> +if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
> +dbus_message_iter_get_element_type(i) != 
> DBUS_TYPE_STRUCT)
> +return -EINVAL;
> +
> +dbus_message_iter_recurse(i, &sub);
> +while (dbus_message_iter_get_arg_type(&sub) == 
> DBUS_TYPE_STRUCT) {
> +DBusMessageIter sub2;
> +const char *path;
> +uint64_t u64;
> +unsigned long ul;
> +CGroupBlockIODeviceWeight *a;
> +
> +dbus_message_iter_recurse(&sub, &sub2);
> +
> +if (bus_iter_get_basic_and_next(&sub2, 
> DBUS_TYPE_STRING, &path, true) < 0 ||
> +bus_iter_get_basic_and_next(&sub2, 
> DBUS_TYPE_UINT64, &u64, false) < 0)
> +return -EINVAL;
> +
> +ul = (unsigned long) u64;
> +
> +if (u64 < 10 || u64 > 1000)
> +return -EINVAL;
> +
> +if (mode != UNIT_CHECK) {
> +CGroupBlockIODeviceWeight *b;
> +bool exist = false;
> +
> +LIST_FOREACH(device_weights, b, 
> c->blockio_device_weights) {
> +if (streq(b->path, path)) {
> +a = b;
> +exist = true;
> +break;
> +}
> +}
> +
> +if (!exist) {
> +a = new0(CGroupBlockIODeviceWeight, 
> 1);
> +if (!a)
> +return -ENOMEM;
> +
> +a->path = strdup(path);
> +if (!a->path) {
> +free(a);
> +return -ENOMEM;
> +}
> +}
> +
> +a->weight = ul;
> +
> +if (!exist)
> +
> LIST_PREPEND(CGroupBlockIODeviceWeight, device_weights,
> + 
> c->blockio_device_weights, a);
> +}
> +
> +n++;
> +dbus_message_iter_next(&sub);
> +}
> +
> +if (mode != UNIT_CHECK) {
> +_cleanup_free_ char *buf = NULL;
> +_cleanup_fclose_ FILE *f = NULL;
> +CGroupBlockIODeviceWeight *a;
> +size_t size = 0;
> +
> +if (n == 0) {
> +while (c->blockio_device_weights)
> +
> cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
> +}
> +
> +f = open_memstream(&buf, &size);
> +if (!f)
> +return -ENOMEM;
> +
> +fputs("BlockIODeviceWeight=\n", f);
> +LIST_FOREACH(device_weights, a, 
> c->blockio_device_weights)
> +fprintf(f, "BlockIODeviceWeight=%s %lu\n", 
> a->path, a->weight);
> +fflush(f);
> +unit_write_drop_in_private(u, mode, name, buf);
> +}
> +
> +return 1;
>  } else if (streq(name, "MemoryAccounting")) {
>  
>  if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
> 

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel


[systemd-devel] [PATCH 1/3] cgroup: setup BlockIODeviceWeight in bus_cgroup_set_property

2013-08-26 Thread Gao feng
This patch adds the support for setting up BlockIODeviceWeight
in bus_cgroup_set_property. most of the codes are copied from
the case that sets up DeviceAllow.
---
 src/core/dbus-cgroup.c | 85 ++
 1 file changed, 85 insertions(+)

diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index 30c99dd..1555c34 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -222,6 +222,91 @@ int bus_cgroup_set_property(
 
 return 1;
 
+} else if (streq(name, "BlockIODeviceWeight")) {
+DBusMessageIter sub;
+unsigned n = 0;
+
+if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY ||
+dbus_message_iter_get_element_type(i) != DBUS_TYPE_STRUCT)
+return -EINVAL;
+
+dbus_message_iter_recurse(i, &sub);
+while (dbus_message_iter_get_arg_type(&sub) == 
DBUS_TYPE_STRUCT) {
+DBusMessageIter sub2;
+const char *path;
+uint64_t u64;
+unsigned long ul;
+CGroupBlockIODeviceWeight *a;
+
+dbus_message_iter_recurse(&sub, &sub2);
+
+if (bus_iter_get_basic_and_next(&sub2, 
DBUS_TYPE_STRING, &path, true) < 0 ||
+bus_iter_get_basic_and_next(&sub2, 
DBUS_TYPE_UINT64, &u64, false) < 0)
+return -EINVAL;
+
+ul = (unsigned long) u64;
+
+if (u64 < 10 || u64 > 1000)
+return -EINVAL;
+
+if (mode != UNIT_CHECK) {
+CGroupBlockIODeviceWeight *b;
+bool exist = false;
+
+LIST_FOREACH(device_weights, b, 
c->blockio_device_weights) {
+if (streq(b->path, path)) {
+a = b;
+exist = true;
+break;
+}
+}
+
+if (!exist) {
+a = new0(CGroupBlockIODeviceWeight, 1);
+if (!a)
+return -ENOMEM;
+
+a->path = strdup(path);
+if (!a->path) {
+free(a);
+return -ENOMEM;
+}
+}
+
+a->weight = ul;
+
+if (!exist)
+
LIST_PREPEND(CGroupBlockIODeviceWeight, device_weights,
+ 
c->blockio_device_weights, a);
+}
+
+n++;
+dbus_message_iter_next(&sub);
+}
+
+if (mode != UNIT_CHECK) {
+_cleanup_free_ char *buf = NULL;
+_cleanup_fclose_ FILE *f = NULL;
+CGroupBlockIODeviceWeight *a;
+size_t size = 0;
+
+if (n == 0) {
+while (c->blockio_device_weights)
+
cgroup_context_free_blockio_device_weight(c, c->blockio_device_weights);
+}
+
+f = open_memstream(&buf, &size);
+if (!f)
+return -ENOMEM;
+
+fputs("BlockIODeviceWeight=\n", f);
+LIST_FOREACH(device_weights, a, 
c->blockio_device_weights)
+fprintf(f, "BlockIODeviceWeight=%s %lu\n", 
a->path, a->weight);
+fflush(f);
+unit_write_drop_in_private(u, mode, name, buf);
+}
+
+return 1;
 } else if (streq(name, "MemoryAccounting")) {
 
 if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_BOOLEAN)
-- 
1.8.3.1

___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel