All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Liu <jeff.liu@oracle.com>
To: cgroups@vger.kernel.org
Cc: lxc-devel@lists.sourceforge.net,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
	xfs@oss.sgi.com, tj@kernel.org, Li Zefan <lizf@cn.fujitsu.com>,
	Daniel Lezcano <daniel.lezcano@free.fr>, Ben Myers <bpm@sgi.com>,
	Christoph Hellwig <hch@infradead.org>,
	Chris Mason <chris.mason@oracle.com>,
	Christopher Jones <christopher.jones@oracle.com>,
	Dave Chinner <david@fromorbit.com>,
	jack@suse.cz, tytso@MIT.EDU
Subject: [RFC PATCH v1 1/4] cgroup quota: add disk space parse strategy to res_counter
Date: Fri, 09 Mar 2012 19:20:57 +0800	[thread overview]
Message-ID: <4F59E799.6030409@oracle.com> (raw)

Introduce a new disk space parse strategy routine for cgroup quota supports.
disk_space_parse() is simply copied from mmparse() with Petabytes and Terabytes parse.

Signed-off-by: Jie Liu <jeff.liu@oracle.com>
---
 include/linux/res_counter.h |    3 ++
 kernel/res_counter.c        |   58 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h
index c9d625c..f8ce315 100644
--- a/include/linux/res_counter.h
+++ b/include/linux/res_counter.h
@@ -79,6 +79,9 @@ typedef int (*write_strategy_fn)(const char *buf, unsigned long long *val);
 int res_counter_memparse_write_strategy(const char *buf,
 					unsigned long long *res);
 
+int res_counter_diskspace_parse_write_strategy(const char *buf,
+					       unsigned long long *res);
+
 int res_counter_write(struct res_counter *counter, int member,
 		      const char *buffer, write_strategy_fn write_strategy);
 
diff --git a/kernel/res_counter.c b/kernel/res_counter.c
index 34683ef..42c1623 100644
--- a/kernel/res_counter.c
+++ b/kernel/res_counter.c
@@ -145,6 +145,64 @@ u64 res_counter_read_u64(struct res_counter *counter, int member)
 }
 #endif
 
+/*
+ * Copy from memparse(), add terabytes, petabytes parse support.
+ */
+unsigned long long disk_space_parse(const char *ptr, char **retptr)
+{
+	char *endptr; /* local pointer to end of parsed string */
+	unsigned long long ret = kstrtoull(ptr, &endptr, 0);
+
+	switch (*endptr) {
+	case 'P':
+	case 'p':
+		ret <<= 10;
+	case 'T':
+	case 't':
+		ret <<= 10;
+	case 'G':
+	case 'g':
+		ret <<= 10;
+	case 'M':
+	case 'm':
+		ret <<= 10;
+	case 'K':
+	case 'k':
+		ret <<= 10;
+		endptr++;
+	default:
+		break;
+	}
+
+	if (retptr)
+		*retptr = endptr;
+
+	return ret;
+}
+
+int res_counter_diskspace_parse_write_strategy(const char *buf,
+					       unsigned long long *res)
+{
+	char *end;
+
+	/* return RESOURCE_MAX(unlimited) if "-1" is specified */
+	if (*buf == '-') {
+		*res = kstrtoull(buf + 1, &end, 10);
+		if (*res != 1 || *end != '\0')
+			return -EINVAL;
+		*res = RESOURCE_MAX;
+		return 0;
+	}
+
+	/* FIXME - make memparse() take const char* args */
+	*res = disk_space_parse((char *)buf, &end);
+	if (*end != '\0')
+		return -EINVAL;
+
+	/* FIXME - need to return *res as block aligned? */
+	return 0;
+}
+
 int res_counter_memparse_write_strategy(const char *buf,
 					unsigned long long *res)
 {
-- 
1.7.9

WARNING: multiple messages have this Message-ID (diff)
From: Jeff Liu <jeff.liu@oracle.com>
To: cgroups@vger.kernel.org
Cc: jack@suse.cz, Daniel Lezcano <daniel.lezcano@free.fr>,
	Christopher Jones <christopher.jones@oracle.com>,
	Li Zefan <lizf@cn.fujitsu.com>,
	xfs@oss.sgi.com, Christoph Hellwig <hch@infradead.org>,
	tj@kernel.org, Ben Myers <bpm@sgi.com>,
	lxc-devel@lists.sourceforge.net,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
	tytso@MIT.EDU, Chris Mason <chris.mason@oracle.com>
Subject: [RFC PATCH v1 1/4] cgroup quota: add disk space parse strategy to res_counter
Date: Fri, 09 Mar 2012 19:20:57 +0800	[thread overview]
Message-ID: <4F59E799.6030409@oracle.com> (raw)

Introduce a new disk space parse strategy routine for cgroup quota supports.
disk_space_parse() is simply copied from mmparse() with Petabytes and Terabytes parse.

Signed-off-by: Jie Liu <jeff.liu@oracle.com>
---
 include/linux/res_counter.h |    3 ++
 kernel/res_counter.c        |   58 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h
index c9d625c..f8ce315 100644
--- a/include/linux/res_counter.h
+++ b/include/linux/res_counter.h
@@ -79,6 +79,9 @@ typedef int (*write_strategy_fn)(const char *buf, unsigned long long *val);
 int res_counter_memparse_write_strategy(const char *buf,
 					unsigned long long *res);
 
+int res_counter_diskspace_parse_write_strategy(const char *buf,
+					       unsigned long long *res);
+
 int res_counter_write(struct res_counter *counter, int member,
 		      const char *buffer, write_strategy_fn write_strategy);
 
diff --git a/kernel/res_counter.c b/kernel/res_counter.c
index 34683ef..42c1623 100644
--- a/kernel/res_counter.c
+++ b/kernel/res_counter.c
@@ -145,6 +145,64 @@ u64 res_counter_read_u64(struct res_counter *counter, int member)
 }
 #endif
 
+/*
+ * Copy from memparse(), add terabytes, petabytes parse support.
+ */
+unsigned long long disk_space_parse(const char *ptr, char **retptr)
+{
+	char *endptr; /* local pointer to end of parsed string */
+	unsigned long long ret = kstrtoull(ptr, &endptr, 0);
+
+	switch (*endptr) {
+	case 'P':
+	case 'p':
+		ret <<= 10;
+	case 'T':
+	case 't':
+		ret <<= 10;
+	case 'G':
+	case 'g':
+		ret <<= 10;
+	case 'M':
+	case 'm':
+		ret <<= 10;
+	case 'K':
+	case 'k':
+		ret <<= 10;
+		endptr++;
+	default:
+		break;
+	}
+
+	if (retptr)
+		*retptr = endptr;
+
+	return ret;
+}
+
+int res_counter_diskspace_parse_write_strategy(const char *buf,
+					       unsigned long long *res)
+{
+	char *end;
+
+	/* return RESOURCE_MAX(unlimited) if "-1" is specified */
+	if (*buf == '-') {
+		*res = kstrtoull(buf + 1, &end, 10);
+		if (*res != 1 || *end != '\0')
+			return -EINVAL;
+		*res = RESOURCE_MAX;
+		return 0;
+	}
+
+	/* FIXME - make memparse() take const char* args */
+	*res = disk_space_parse((char *)buf, &end);
+	if (*end != '\0')
+		return -EINVAL;
+
+	/* FIXME - need to return *res as block aligned? */
+	return 0;
+}
+
 int res_counter_memparse_write_strategy(const char *buf,
 					unsigned long long *res)
 {
-- 
1.7.9

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

             reply	other threads:[~2012-03-09 11:20 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-09 11:20 Jeff Liu [this message]
2012-03-09 11:20 ` [RFC PATCH v1 1/4] cgroup quota: add disk space parse strategy to res_counter Jeff Liu
2012-03-11 11:19 ` Glauber Costa
2012-03-11 11:19   ` Glauber Costa
2012-03-11 11:19   ` Glauber Costa
     [not found]   ` <4F5C8A3A.7080601-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-03-11 10:52     ` Jeff Liu
2012-03-11 10:52       ` Jeff Liu

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=4F59E799.6030409@oracle.com \
    --to=jeff.liu@oracle.com \
    --cc=bpm@sgi.com \
    --cc=cgroups@vger.kernel.org \
    --cc=chris.mason@oracle.com \
    --cc=christopher.jones@oracle.com \
    --cc=daniel.lezcano@free.fr \
    --cc=david@fromorbit.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --cc=lxc-devel@lists.sourceforge.net \
    --cc=tj@kernel.org \
    --cc=tytso@MIT.EDU \
    --cc=xfs@oss.sgi.com \
    /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.