All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Emelyanov <xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
To: Paul Menage <menage-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
	Balbir Singh
	<balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Cc: Linux Containers <containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org>
Subject: [PATCH 2/3] Introduce the res_counter_populate() function
Date: Thu, 04 Oct 2007 13:20:55 +0400	[thread overview]
Message-ID: <4704B077.30502@openvz.org> (raw)
In-Reply-To: <4704AFC9.4030606-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>

This one is responsible for initializing the RES_CFT_MAX files
properly and register them inside the container.

The caller must provide the cgroup, the cgroup_subsys, the
RES_CFT_MAX * sizeof(cftype) chunk of zeroed memory, the
units of measure and the read and write callbacks.

Right now I made names for two units - bytes and items. Maybe
later we will add more (pages, HZ?).

In the future, if we add more res_counter files, change their
names or anything else, no caller will be affected.

Signed-off-by: Pavel Emelyanov <xemul-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>

---

diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h
index 61363ce..bee93c3 100644
--- a/include/linux/res_counter.h
+++ b/include/linux/res_counter.h
@@ -58,6 +58,17 @@ ssize_t res_counter_write(struct res_cou
 		const char __user *buf, size_t nbytes, loff_t *pos,
 		int (*write_strategy)(char *buf, unsigned long long *val));
 
+enum {
+	RES_UNITS_BYTES,
+	RES_UNITS_ITEMS,
+
+	RES_UNITS_MAX
+};
+
+int res_counter_populate(struct cgroup_subsys *ss, struct cgroup *cont,
+		struct cftype files[], int units,
+		cft_read read_fn, cft_write write_fn);
+
 /*
  * the field descriptors. one for each member of res_counter
  */
@@ -66,6 +77,8 @@ enum {
 	RES_USAGE,
 	RES_LIMIT,
 	RES_FAILCNT,
+
+	RES_CFT_MAX,
 };
 
 /*
diff --git a/kernel/res_counter.c b/kernel/res_counter.c
index d7f43cd..ae77b6e 100644
--- a/kernel/res_counter.c
+++ b/kernel/res_counter.c
@@ -10,9 +10,45 @@
 #include <linux/types.h>
 #include <linux/parser.h>
 #include <linux/fs.h>
+#include <linux/cgroup.h>
 #include <linux/res_counter.h>
 #include <linux/uaccess.h>
 
+static char * units_names[RES_UNITS_MAX][RES_CFT_MAX] = {
+	[RES_UNITS_BYTES] = {
+		"usage_in_bytes",
+		"limit_in_bytes",
+		"failcnt",
+	},
+	[RES_UNITS_ITEMS] = {
+		"usage",
+		"limit",
+		"failcnt",
+	},
+};
+
+static void cft_init(struct cftype files[], int type, int units,
+		cft_read read_fn, cft_write write_fn)
+{
+	if (files[type].name[0] == '\0') {
+		strcpy(files[type].name, units_names[units][type]);
+		files[type].private = type;
+		files[type].read = read_fn;
+		files[type].write = write_fn;
+	}
+}
+
+int res_counter_populate(struct cgroup_subsys *ss, struct cgroup *cont,
+		struct cftype files[], int units,
+		cft_read read_fn, cft_write write_fn)
+{
+	cft_init(files, RES_USAGE, units, read_fn, NULL);
+	cft_init(files, RES_LIMIT, units, read_fn, write_fn);
+	cft_init(files, RES_FAILCNT, units, read_fn, NULL);
+
+	return cgroup_add_files(cont, ss, files, RES_CFT_MAX);
+}
+
 void res_counter_init(struct res_counter *counter)
 {
 	spin_lock_init(&counter->lock);

  parent reply	other threads:[~2007-10-04  9:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-04  9:18 [PATCH 0/3] Consolidate cgroup files creation for resource counters (v2) Pavel Emelyanov
     [not found] ` <4704AFC9.4030606-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-04  9:18   ` [PATCH 1/3] Typedefs the read and write functions in cftype Pavel Emelyanov
     [not found]     ` <4704AFFF.4000000-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-04 15:18       ` Paul Menage
2007-10-04  9:20   ` Pavel Emelyanov [this message]
     [not found]     ` <4704B077.30502-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-04 12:11       ` [Devel] [PATCH 2/3] Introduce the res_counter_populate() function Kir Kolyshkin
     [not found]         ` <4704D88D.1010005-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-04 15:01           ` Paul Menage
2007-10-04 15:22       ` Paul Menage
2007-10-04  9:21   ` [PATCH 3/3] Use the res_counter_populate in memory controller Pavel Emelyanov
  -- strict thread matches above, loose matches on Subject: below --
2007-10-03 10:53 [PATCH 0/3] Consolidate cgroup files creation for resource counters Pavel Emelyanov
     [not found] ` <470374A7.6030805-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-03 10:57   ` [PATCH 2/3] Introduce the res_counter_populate() function Pavel Emelyanov
     [not found]     ` <470375B2.5090100-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>
2007-10-03 16:02       ` Paul Menage
     [not found]         ` <6599ad830710030902h71737aban4e7cf4e4d1e4d4d1-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2007-10-04  6:40           ` Pavel Emelyanov
2007-10-03 18:02       ` Balbir Singh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4704B077.30502@openvz.org \
    --to=xemul-gefaqzzx7r8dnm+yrofe0a@public.gmane.org \
    --cc=balbir-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
    --cc=containers-qjLDD68F18O7TbgM5vRIOg@public.gmane.org \
    --cc=menage-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.