From: menage@google.com
To: pj@sgi.com, xemul@openvz.org, balbir@in.ibm.com,
serue@us.ibm.com, akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, containers@lists.linux-foundation.org
Subject: [RFC/PATCH 2/8]: CGroup Files: Add a cgroup write_string control file method
Date: Mon, 12 May 2008 23:37:09 -0700 [thread overview]
Message-ID: <20080513071522.301139000@menage.corp.google.com> (raw)
In-Reply-To: 20080513063707.049448000@menage.corp.google.com
[-- Attachment #1: cgroup_write_string.patch --]
[-- Type: text/plain, Size: 2848 bytes --]
This patch adds a write_string() method for cgroups control files. The
semantics are that a buffer is copied from userspace to kernelspace
and the handler function invoked on that buffer. Any control group
locking is done after the copy from userspace has occurred. The buffer
is guaranteed to be nul-terminated, and no longer than max_write_len
(defaulting to 64 bytes if unspecified). Later patches will convert
existing raw file write handlers in control group subsystems to use
this method.
Signed-off-by: Paul Menage <menage@google.com>
---
include/linux/cgroup.h | 10 ++++++++++
kernel/cgroup.c | 5 ++++-
2 files changed, 14 insertions(+), 1 deletion(-)
Index: cgroup-2.6.25-mm1/include/linux/cgroup.h
===================================================================
--- cgroup-2.6.25-mm1.orig/include/linux/cgroup.h
+++ cgroup-2.6.25-mm1/include/linux/cgroup.h
@@ -281,6 +281,10 @@ struct cftype {
*/
int lockmode;
+ /* If non-zero, defines the maximum length of string that can
+ * be passed to write_string; defaults to 64 */
+ int max_write_len;
+
int (*open) (struct inode *inode, struct file *file);
ssize_t (*read) (struct cgroup *cgrp, struct cftype *cft,
struct file *file,
@@ -323,6 +327,12 @@ struct cftype {
* write_s64() is a signed version of write_u64()
*/
int (*write_s64) (struct cgroup *cgrp, struct cftype *cft, s64 val);
+ /*
+ * write_string() is passed a nul-terminated kernelspace
+ * buffer of maximum length determined by max_write_len
+ */
+ int (*write_string) (struct cgroup *cgrp, struct cftype *cft,
+ char *buffer);
/*
* trigger() callback can be used to get some kick from the
Index: cgroup-2.6.25-mm1/kernel/cgroup.c
===================================================================
--- cgroup-2.6.25-mm1.orig/kernel/cgroup.c
+++ cgroup-2.6.25-mm1/kernel/cgroup.c
@@ -1461,7 +1461,7 @@ static ssize_t cgroup_file_write(struct
ssize_t retval;
char static_buffer[64];
char *buffer = static_buffer;
- ssize_t max_bytes = sizeof(static_buffer) - 1;
+ ssize_t max_bytes = cft->max_write_len ?: sizeof(static_buffer) - 1;
if (!cft->write && !cft->trigger) {
if (!nbytes)
return -EINVAL;
@@ -1489,6 +1489,8 @@ static ssize_t cgroup_file_write(struct
retval = cft->write(cgrp, cft, file, userbuf, nbytes, ppos);
else if (cft->write_u64 || cft->write_s64)
retval = cgroup_write_X64(cgrp, cft, buffer);
+ else if (cft->write_string)
+ retval = cft->write_string(cgrp, cft, buffer);
else if (cft->trigger)
retval = cft->trigger(cgrp, (unsigned int)cft->private);
else
@@ -1651,6 +1653,7 @@ static struct file_operations cgroup_seq
.read = seq_read,
.llseek = seq_lseek,
.release = cgroup_seqfile_release,
+ .write = cgroup_file_write,
};
static int cgroup_file_open(struct inode *inode, struct file *file)
--
next prev parent reply other threads:[~2008-05-13 7:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-13 6:37 [RFC/PATCH 0/8]: CGroup Files: Clean up locking and boilerplate menage
2008-05-13 6:37 ` [RFC/PATCH 1/8]: CGroup Files: Add locking mode to cgroups control files menage
2008-05-13 9:23 ` Li Zefan
2008-05-13 21:07 ` Paul Menage
2008-05-14 1:30 ` Li Zefan
2008-05-14 1:40 ` Paul Menage
2008-05-13 20:01 ` Andrew Morton
2008-05-13 20:38 ` Matthew Helsley
2008-05-13 20:43 ` Andrew Morton
2008-05-13 21:17 ` Paul Menage
2008-05-13 21:32 ` Andrew Morton
2008-05-13 21:46 ` Paul Menage
2008-05-14 1:59 ` Paul Jackson
2008-05-13 6:37 ` menage [this message]
2008-05-13 20:07 ` [RFC/PATCH 2/8]: CGroup Files: Add a cgroup write_string control file method Andrew Morton
2008-05-13 21:01 ` Paul Menage
2008-05-13 20:44 ` Matt Helsley
2008-05-13 6:37 ` [RFC/PATCH 3/8]: CGroup Files: Move the release_agent file to use typed handlers menage
2008-05-13 20:08 ` Andrew Morton
2008-05-13 21:32 ` Paul Menage
2008-05-13 6:37 ` [RFC/PATCH 4/8]: CGroup Files: Move notify_on_release file to separate write handler menage
2008-05-13 6:37 ` [RFC/PATCH 5/8]: CGroup Files: Turn attach_task_by_pid directly into a cgroup " menage
2008-05-13 6:37 ` [RFC/PATCH 6/8]: CGroup Files: Remove cpuset_common_file_write() menage
2008-05-13 20:11 ` Andrew Morton
2008-05-13 21:27 ` Paul Menage
2008-05-13 6:37 ` [RFC/PATCH 7/8]: CGroup Files: Convert devcgroup_access_write() into a cgroup write_string() handler menage
2008-05-13 6:37 ` [RFC/PATCH 8/8]: CGroup Files: Convert res_counter_write() to be a cgroups " menage
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=20080513071522.301139000@menage.corp.google.com \
--to=menage@google.com \
--cc=akpm@linux-foundation.org \
--cc=balbir@in.ibm.com \
--cc=containers@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pj@sgi.com \
--cc=serue@us.ibm.com \
--cc=xemul@openvz.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox