diff options
Diffstat (limited to 'include/linux/cgroup.h')
| -rw-r--r-- | include/linux/cgroup.h | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index e155aa78d859..c98dd7cb7076 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h | |||
| @@ -21,11 +21,13 @@ | |||
| 21 | struct cgroupfs_root; | 21 | struct cgroupfs_root; |
| 22 | struct cgroup_subsys; | 22 | struct cgroup_subsys; |
| 23 | struct inode; | 23 | struct inode; |
| 24 | struct cgroup; | ||
| 24 | 25 | ||
| 25 | extern int cgroup_init_early(void); | 26 | extern int cgroup_init_early(void); |
| 26 | extern int cgroup_init(void); | 27 | extern int cgroup_init(void); |
| 27 | extern void cgroup_init_smp(void); | 28 | extern void cgroup_init_smp(void); |
| 28 | extern void cgroup_lock(void); | 29 | extern void cgroup_lock(void); |
| 30 | extern bool cgroup_lock_live_group(struct cgroup *cgrp); | ||
| 29 | extern void cgroup_unlock(void); | 31 | extern void cgroup_unlock(void); |
| 30 | extern void cgroup_fork(struct task_struct *p); | 32 | extern void cgroup_fork(struct task_struct *p); |
| 31 | extern void cgroup_fork_callbacks(struct task_struct *p); | 33 | extern void cgroup_fork_callbacks(struct task_struct *p); |
| @@ -205,50 +207,64 @@ struct cftype { | |||
| 205 | * subsystem, followed by a period */ | 207 | * subsystem, followed by a period */ |
| 206 | char name[MAX_CFTYPE_NAME]; | 208 | char name[MAX_CFTYPE_NAME]; |
| 207 | int private; | 209 | int private; |
| 208 | int (*open) (struct inode *inode, struct file *file); | 210 | |
| 209 | ssize_t (*read) (struct cgroup *cgrp, struct cftype *cft, | 211 | /* |
| 210 | struct file *file, | 212 | * If non-zero, defines the maximum length of string that can |
| 211 | char __user *buf, size_t nbytes, loff_t *ppos); | 213 | * be passed to write_string; defaults to 64 |
| 214 | */ | ||
| 215 | size_t max_write_len; | ||
| 216 | |||
| 217 | int (*open)(struct inode *inode, struct file *file); | ||
| 218 | ssize_t (*read)(struct cgroup *cgrp, struct cftype *cft, | ||
| 219 | struct file *file, | ||
| 220 | char __user *buf, size_t nbytes, loff_t *ppos); | ||
| 212 | /* | 221 | /* |
| 213 | * read_u64() is a shortcut for the common case of returning a | 222 | * read_u64() is a shortcut for the common case of returning a |
| 214 | * single integer. Use it in place of read() | 223 | * single integer. Use it in place of read() |
| 215 | */ | 224 | */ |
| 216 | u64 (*read_u64) (struct cgroup *cgrp, struct cftype *cft); | 225 | u64 (*read_u64)(struct cgroup *cgrp, struct cftype *cft); |
| 217 | /* | 226 | /* |
| 218 | * read_s64() is a signed version of read_u64() | 227 | * read_s64() is a signed version of read_u64() |
| 219 | */ | 228 | */ |
| 220 | s64 (*read_s64) (struct cgroup *cgrp, struct cftype *cft); | 229 | s64 (*read_s64)(struct cgroup *cgrp, struct cftype *cft); |
| 221 | /* | 230 | /* |
| 222 | * read_map() is used for defining a map of key/value | 231 | * read_map() is used for defining a map of key/value |
| 223 | * pairs. It should call cb->fill(cb, key, value) for each | 232 | * pairs. It should call cb->fill(cb, key, value) for each |
| 224 | * entry. The key/value pairs (and their ordering) should not | 233 | * entry. The key/value pairs (and their ordering) should not |
| 225 | * change between reboots. | 234 | * change between reboots. |
| 226 | */ | 235 | */ |
| 227 | int (*read_map) (struct cgroup *cont, struct cftype *cft, | 236 | int (*read_map)(struct cgroup *cont, struct cftype *cft, |
| 228 | struct cgroup_map_cb *cb); | 237 | struct cgroup_map_cb *cb); |
| 229 | /* | 238 | /* |
| 230 | * read_seq_string() is used for outputting a simple sequence | 239 | * read_seq_string() is used for outputting a simple sequence |
| 231 | * using seqfile. | 240 | * using seqfile. |
| 232 | */ | 241 | */ |
| 233 | int (*read_seq_string) (struct cgroup *cont, struct cftype *cft, | 242 | int (*read_seq_string)(struct cgroup *cont, struct cftype *cft, |
| 234 | struct seq_file *m); | 243 | struct seq_file *m); |
| 235 | 244 | ||
| 236 | ssize_t (*write) (struct cgroup *cgrp, struct cftype *cft, | 245 | ssize_t (*write)(struct cgroup *cgrp, struct cftype *cft, |
| 237 | struct file *file, | 246 | struct file *file, |
| 238 | const char __user *buf, size_t nbytes, loff_t *ppos); | 247 | const char __user *buf, size_t nbytes, loff_t *ppos); |
| 239 | 248 | ||
| 240 | /* | 249 | /* |
| 241 | * write_u64() is a shortcut for the common case of accepting | 250 | * write_u64() is a shortcut for the common case of accepting |
| 242 | * a single integer (as parsed by simple_strtoull) from | 251 | * a single integer (as parsed by simple_strtoull) from |
| 243 | * userspace. Use in place of write(); return 0 or error. | 252 | * userspace. Use in place of write(); return 0 or error. |
| 244 | */ | 253 | */ |
| 245 | int (*write_u64) (struct cgroup *cgrp, struct cftype *cft, u64 val); | 254 | int (*write_u64)(struct cgroup *cgrp, struct cftype *cft, u64 val); |
| 246 | /* | 255 | /* |
| 247 | * write_s64() is a signed version of write_u64() | 256 | * write_s64() is a signed version of write_u64() |
| 248 | */ | 257 | */ |
| 249 | int (*write_s64) (struct cgroup *cgrp, struct cftype *cft, s64 val); | 258 | int (*write_s64)(struct cgroup *cgrp, struct cftype *cft, s64 val); |
| 250 | 259 | ||
| 251 | /* | 260 | /* |
| 261 | * write_string() is passed a nul-terminated kernelspace | ||
| 262 | * buffer of maximum length determined by max_write_len. | ||
| 263 | * Returns 0 or -ve error code. | ||
| 264 | */ | ||
| 265 | int (*write_string)(struct cgroup *cgrp, struct cftype *cft, | ||
| 266 | const char *buffer); | ||
| 267 | /* | ||
| 252 | * trigger() callback can be used to get some kick from the | 268 | * trigger() callback can be used to get some kick from the |
| 253 | * userspace, when the actual string written is not important | 269 | * userspace, when the actual string written is not important |
| 254 | * at all. The private field can be used to determine the | 270 | * at all. The private field can be used to determine the |
| @@ -256,7 +272,7 @@ struct cftype { | |||
| 256 | */ | 272 | */ |
| 257 | int (*trigger)(struct cgroup *cgrp, unsigned int event); | 273 | int (*trigger)(struct cgroup *cgrp, unsigned int event); |
| 258 | 274 | ||
| 259 | int (*release) (struct inode *inode, struct file *file); | 275 | int (*release)(struct inode *inode, struct file *file); |
| 260 | }; | 276 | }; |
| 261 | 277 | ||
| 262 | struct cgroup_scanner { | 278 | struct cgroup_scanner { |
| @@ -348,7 +364,8 @@ static inline struct cgroup* task_cgroup(struct task_struct *task, | |||
| 348 | return task_subsys_state(task, subsys_id)->cgroup; | 364 | return task_subsys_state(task, subsys_id)->cgroup; |
| 349 | } | 365 | } |
| 350 | 366 | ||
| 351 | int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *ss); | 367 | int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *ss, |
| 368 | char *nodename); | ||
| 352 | 369 | ||
| 353 | /* A cgroup_iter should be treated as an opaque object */ | 370 | /* A cgroup_iter should be treated as an opaque object */ |
| 354 | struct cgroup_iter { | 371 | struct cgroup_iter { |
