aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2012-04-01 15:09:55 -0400
committerTejun Heo <tj@kernel.org>2012-04-01 15:09:55 -0400
commit676f7c8f84d15e94065841529016da5ab92e901b (patch)
tree29c267a4c5711f9eaca7fa88fd7a78d39c8c4eac
parent6e6ff25bd548a0c5bf5163e4f63e2793dcefbdcb (diff)
cgroup: relocate cftype and cgroup_subsys definitions in controllers
blk-cgroup, netprio_cgroup, cls_cgroup and tcp_memcontrol unnecessarily define cftype array and cgroup_subsys structures at the top of the file, which is unconventional and necessiates forward declaration of methods. This patch relocates those below the definitions of the methods and removes the forward declarations. Note that forward declaration of tcp_files[] is added in tcp_memcontrol.c for tcp_init_cgroup(). This will be removed soon by another patch. This patch doesn't introduce any functional change. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizf@cn.fujitsu.com>
-rw-r--r--block/blk-cgroup.c38
-rw-r--r--net/core/netprio_cgroup.c26
-rw-r--r--net/ipv4/tcp_memcontrol.c57
-rw-r--r--net/sched/cls_cgroup.c27
4 files changed, 65 insertions, 83 deletions
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index ea84a23d5e68..60ef16d6d155 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -28,34 +28,12 @@ static LIST_HEAD(blkio_list);
28struct blkio_cgroup blkio_root_cgroup = { .weight = 2*BLKIO_WEIGHT_DEFAULT }; 28struct blkio_cgroup blkio_root_cgroup = { .weight = 2*BLKIO_WEIGHT_DEFAULT };
29EXPORT_SYMBOL_GPL(blkio_root_cgroup); 29EXPORT_SYMBOL_GPL(blkio_root_cgroup);
30 30
31static struct cgroup_subsys_state *blkiocg_create(struct cgroup *);
32static int blkiocg_can_attach(struct cgroup *, struct cgroup_taskset *);
33static void blkiocg_attach(struct cgroup *, struct cgroup_taskset *);
34static void blkiocg_destroy(struct cgroup *);
35static int blkiocg_populate(struct cgroup_subsys *, struct cgroup *);
36
37/* for encoding cft->private value on file */ 31/* for encoding cft->private value on file */
38#define BLKIOFILE_PRIVATE(x, val) (((x) << 16) | (val)) 32#define BLKIOFILE_PRIVATE(x, val) (((x) << 16) | (val))
39/* What policy owns the file, proportional or throttle */ 33/* What policy owns the file, proportional or throttle */
40#define BLKIOFILE_POLICY(val) (((val) >> 16) & 0xffff) 34#define BLKIOFILE_POLICY(val) (((val) >> 16) & 0xffff)
41#define BLKIOFILE_ATTR(val) ((val) & 0xffff) 35#define BLKIOFILE_ATTR(val) ((val) & 0xffff)
42 36
43struct cgroup_subsys blkio_subsys = {
44 .name = "blkio",
45 .create = blkiocg_create,
46 .can_attach = blkiocg_can_attach,
47 .attach = blkiocg_attach,
48 .destroy = blkiocg_destroy,
49 .populate = blkiocg_populate,
50#ifdef CONFIG_BLK_CGROUP
51 /* note: blkio_subsys_id is otherwise defined in blk-cgroup.h */
52 .subsys_id = blkio_subsys_id,
53#endif
54 .use_id = 1,
55 .module = THIS_MODULE,
56};
57EXPORT_SYMBOL_GPL(blkio_subsys);
58
59static inline void blkio_policy_insert_node(struct blkio_cgroup *blkcg, 37static inline void blkio_policy_insert_node(struct blkio_cgroup *blkcg,
60 struct blkio_policy_node *pn) 38 struct blkio_policy_node *pn)
61{ 39{
@@ -1658,6 +1636,22 @@ static void blkiocg_attach(struct cgroup *cgrp, struct cgroup_taskset *tset)
1658 } 1636 }
1659} 1637}
1660 1638
1639struct cgroup_subsys blkio_subsys = {
1640 .name = "blkio",
1641 .create = blkiocg_create,
1642 .can_attach = blkiocg_can_attach,
1643 .attach = blkiocg_attach,
1644 .destroy = blkiocg_destroy,
1645 .populate = blkiocg_populate,
1646#ifdef CONFIG_BLK_CGROUP
1647 /* note: blkio_subsys_id is otherwise defined in blk-cgroup.h */
1648 .subsys_id = blkio_subsys_id,
1649#endif
1650 .use_id = 1,
1651 .module = THIS_MODULE,
1652};
1653EXPORT_SYMBOL_GPL(blkio_subsys);
1654
1661void blkio_policy_register(struct blkio_policy_type *blkiop) 1655void blkio_policy_register(struct blkio_policy_type *blkiop)
1662{ 1656{
1663 spin_lock(&blkio_list_lock); 1657 spin_lock(&blkio_list_lock);
diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c
index ba6900f73900..dbfd4e7f8dc4 100644
--- a/net/core/netprio_cgroup.c
+++ b/net/core/netprio_cgroup.c
@@ -23,21 +23,6 @@
23#include <net/sock.h> 23#include <net/sock.h>
24#include <net/netprio_cgroup.h> 24#include <net/netprio_cgroup.h>
25 25
26static struct cgroup_subsys_state *cgrp_create(struct cgroup *cgrp);
27static void cgrp_destroy(struct cgroup *cgrp);
28static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp);
29
30struct cgroup_subsys net_prio_subsys = {
31 .name = "net_prio",
32 .create = cgrp_create,
33 .destroy = cgrp_destroy,
34 .populate = cgrp_populate,
35#ifdef CONFIG_NETPRIO_CGROUP
36 .subsys_id = net_prio_subsys_id,
37#endif
38 .module = THIS_MODULE
39};
40
41#define PRIOIDX_SZ 128 26#define PRIOIDX_SZ 128
42 27
43static unsigned long prioidx_map[PRIOIDX_SZ]; 28static unsigned long prioidx_map[PRIOIDX_SZ];
@@ -264,6 +249,17 @@ static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)
264 return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files)); 249 return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files));
265} 250}
266 251
252struct cgroup_subsys net_prio_subsys = {
253 .name = "net_prio",
254 .create = cgrp_create,
255 .destroy = cgrp_destroy,
256 .populate = cgrp_populate,
257#ifdef CONFIG_NETPRIO_CGROUP
258 .subsys_id = net_prio_subsys_id,
259#endif
260 .module = THIS_MODULE
261};
262
267static int netprio_device_event(struct notifier_block *unused, 263static int netprio_device_event(struct notifier_block *unused,
268 unsigned long event, void *ptr) 264 unsigned long event, void *ptr)
269{ 265{
diff --git a/net/ipv4/tcp_memcontrol.c b/net/ipv4/tcp_memcontrol.c
index e795272fbe9e..4d3ee407d2d8 100644
--- a/net/ipv4/tcp_memcontrol.c
+++ b/net/ipv4/tcp_memcontrol.c
@@ -6,36 +6,7 @@
6#include <linux/memcontrol.h> 6#include <linux/memcontrol.h>
7#include <linux/module.h> 7#include <linux/module.h>
8 8
9static u64 tcp_cgroup_read(struct cgroup *cont, struct cftype *cft); 9static struct cftype tcp_files[4]; /* XXX: will be removed soon */
10static int tcp_cgroup_write(struct cgroup *cont, struct cftype *cft,
11 const char *buffer);
12static int tcp_cgroup_reset(struct cgroup *cont, unsigned int event);
13
14static struct cftype tcp_files[] = {
15 {
16 .name = "kmem.tcp.limit_in_bytes",
17 .write_string = tcp_cgroup_write,
18 .read_u64 = tcp_cgroup_read,
19 .private = RES_LIMIT,
20 },
21 {
22 .name = "kmem.tcp.usage_in_bytes",
23 .read_u64 = tcp_cgroup_read,
24 .private = RES_USAGE,
25 },
26 {
27 .name = "kmem.tcp.failcnt",
28 .private = RES_FAILCNT,
29 .trigger = tcp_cgroup_reset,
30 .read_u64 = tcp_cgroup_read,
31 },
32 {
33 .name = "kmem.tcp.max_usage_in_bytes",
34 .private = RES_MAX_USAGE,
35 .trigger = tcp_cgroup_reset,
36 .read_u64 = tcp_cgroup_read,
37 },
38};
39 10
40static inline struct tcp_memcontrol *tcp_from_cgproto(struct cg_proto *cg_proto) 11static inline struct tcp_memcontrol *tcp_from_cgproto(struct cg_proto *cg_proto)
41{ 12{
@@ -270,3 +241,29 @@ void tcp_prot_mem(struct mem_cgroup *memcg, long val, int idx)
270 241
271 tcp->tcp_prot_mem[idx] = val; 242 tcp->tcp_prot_mem[idx] = val;
272} 243}
244
245static struct cftype tcp_files[] = {
246 {
247 .name = "kmem.tcp.limit_in_bytes",
248 .write_string = tcp_cgroup_write,
249 .read_u64 = tcp_cgroup_read,
250 .private = RES_LIMIT,
251 },
252 {
253 .name = "kmem.tcp.usage_in_bytes",
254 .read_u64 = tcp_cgroup_read,
255 .private = RES_USAGE,
256 },
257 {
258 .name = "kmem.tcp.failcnt",
259 .private = RES_FAILCNT,
260 .trigger = tcp_cgroup_reset,
261 .read_u64 = tcp_cgroup_read,
262 },
263 {
264 .name = "kmem.tcp.max_usage_in_bytes",
265 .private = RES_MAX_USAGE,
266 .trigger = tcp_cgroup_reset,
267 .read_u64 = tcp_cgroup_read,
268 },
269};
diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c
index 1afaa284fcd7..024df8a32275 100644
--- a/net/sched/cls_cgroup.c
+++ b/net/sched/cls_cgroup.c
@@ -22,22 +22,6 @@
22#include <net/sock.h> 22#include <net/sock.h>
23#include <net/cls_cgroup.h> 23#include <net/cls_cgroup.h>
24 24
25static struct cgroup_subsys_state *cgrp_create(struct cgroup *cgrp);
26static void cgrp_destroy(struct cgroup *cgrp);
27static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp);
28
29struct cgroup_subsys net_cls_subsys = {
30 .name = "net_cls",
31 .create = cgrp_create,
32 .destroy = cgrp_destroy,
33 .populate = cgrp_populate,
34#ifdef CONFIG_NET_CLS_CGROUP
35 .subsys_id = net_cls_subsys_id,
36#endif
37 .module = THIS_MODULE,
38};
39
40
41static inline struct cgroup_cls_state *cgrp_cls_state(struct cgroup *cgrp) 25static inline struct cgroup_cls_state *cgrp_cls_state(struct cgroup *cgrp)
42{ 26{
43 return container_of(cgroup_subsys_state(cgrp, net_cls_subsys_id), 27 return container_of(cgroup_subsys_state(cgrp, net_cls_subsys_id),
@@ -93,6 +77,17 @@ static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp)
93 return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files)); 77 return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files));
94} 78}
95 79
80struct cgroup_subsys net_cls_subsys = {
81 .name = "net_cls",
82 .create = cgrp_create,
83 .destroy = cgrp_destroy,
84 .populate = cgrp_populate,
85#ifdef CONFIG_NET_CLS_CGROUP
86 .subsys_id = net_cls_subsys_id,
87#endif
88 .module = THIS_MODULE,
89};
90
96struct cls_cgroup_head { 91struct cls_cgroup_head {
97 u32 handle; 92 u32 handle;
98 struct tcf_exts exts; 93 struct tcf_exts exts;