cgroup: convert all non-memcg controllers to the new cftype interface
Convert debug, freezer, cpuset, cpu_cgroup, cpuacct, net_prio, blkio, net_cls and device controllers to use the new cftype based interface. Termination entry is added to cftype arrays and populate callbacks are replaced with cgroup_subsys->base_cftypes initializations. This is functionally identical transformation. There shouldn't be any visible behavior change. memcg is rather special and will be converted separately. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizf@cn.fujitsu.com> Cc: Paul Menage <paul@paulmenage.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Vivek Goyal <vgoyal@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								676f7c8f84
							
						
					
				
			
			
				commit
				
					
						4baf6e3325
					
				
			
		
					 8 changed files with 29 additions and 76 deletions
				
			
		|  | @ -1515,14 +1515,9 @@ struct cftype blkio_files[] = { | ||||||
| 		.read_map = blkiocg_file_read_map, | 		.read_map = blkiocg_file_read_map, | ||||||
| 	}, | 	}, | ||||||
| #endif | #endif | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int blkiocg_populate(struct cgroup_subsys *subsys, struct cgroup *cgroup) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cgroup, subsys, blkio_files, |  | ||||||
| 				ARRAY_SIZE(blkio_files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void blkiocg_destroy(struct cgroup *cgroup) | static void blkiocg_destroy(struct cgroup *cgroup) | ||||||
| { | { | ||||||
| 	struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgroup); | 	struct blkio_cgroup *blkcg = cgroup_to_blkio_cgroup(cgroup); | ||||||
|  | @ -1642,11 +1637,11 @@ struct cgroup_subsys blkio_subsys = { | ||||||
| 	.can_attach = blkiocg_can_attach, | 	.can_attach = blkiocg_can_attach, | ||||||
| 	.attach = blkiocg_attach, | 	.attach = blkiocg_attach, | ||||||
| 	.destroy = blkiocg_destroy, | 	.destroy = blkiocg_destroy, | ||||||
| 	.populate = blkiocg_populate, |  | ||||||
| #ifdef CONFIG_BLK_CGROUP | #ifdef CONFIG_BLK_CGROUP | ||||||
| 	/* note: blkio_subsys_id is otherwise defined in blk-cgroup.h */ | 	/* note: blkio_subsys_id is otherwise defined in blk-cgroup.h */ | ||||||
| 	.subsys_id = blkio_subsys_id, | 	.subsys_id = blkio_subsys_id, | ||||||
| #endif | #endif | ||||||
|  | 	.base_cftypes = blkio_files, | ||||||
| 	.use_id = 1, | 	.use_id = 1, | ||||||
| 	.module = THIS_MODULE, | 	.module = THIS_MODULE, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -5349,19 +5349,15 @@ static struct cftype debug_files[] =  { | ||||||
| 		.name = "releasable", | 		.name = "releasable", | ||||||
| 		.read_u64 = releasable_read, | 		.read_u64 = releasable_read, | ||||||
| 	}, | 	}, | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| static int debug_populate(struct cgroup_subsys *ss, struct cgroup *cont) | 	{ }	/* terminate */ | ||||||
| { | }; | ||||||
| 	return cgroup_add_files(cont, ss, debug_files, |  | ||||||
| 				ARRAY_SIZE(debug_files)); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| struct cgroup_subsys debug_subsys = { | struct cgroup_subsys debug_subsys = { | ||||||
| 	.name = "debug", | 	.name = "debug", | ||||||
| 	.create = debug_create, | 	.create = debug_create, | ||||||
| 	.destroy = debug_destroy, | 	.destroy = debug_destroy, | ||||||
| 	.populate = debug_populate, |  | ||||||
| 	.subsys_id = debug_subsys_id, | 	.subsys_id = debug_subsys_id, | ||||||
|  | 	.base_cftypes = debug_files, | ||||||
| }; | }; | ||||||
| #endif /* CONFIG_CGROUP_DEBUG */ | #endif /* CONFIG_CGROUP_DEBUG */ | ||||||
|  |  | ||||||
|  | @ -358,24 +358,19 @@ static int freezer_write(struct cgroup *cgroup, | ||||||
| static struct cftype files[] = { | static struct cftype files[] = { | ||||||
| 	{ | 	{ | ||||||
| 		.name = "state", | 		.name = "state", | ||||||
|  | 		.flags = CFTYPE_NOT_ON_ROOT, | ||||||
| 		.read_seq_string = freezer_read, | 		.read_seq_string = freezer_read, | ||||||
| 		.write_string = freezer_write, | 		.write_string = freezer_write, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int freezer_populate(struct cgroup_subsys *ss, struct cgroup *cgroup) |  | ||||||
| { |  | ||||||
| 	if (!cgroup->parent) |  | ||||||
| 		return 0; |  | ||||||
| 	return cgroup_add_files(cgroup, ss, files, ARRAY_SIZE(files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct cgroup_subsys freezer_subsys = { | struct cgroup_subsys freezer_subsys = { | ||||||
| 	.name		= "freezer", | 	.name		= "freezer", | ||||||
| 	.create		= freezer_create, | 	.create		= freezer_create, | ||||||
| 	.destroy	= freezer_destroy, | 	.destroy	= freezer_destroy, | ||||||
| 	.populate	= freezer_populate, |  | ||||||
| 	.subsys_id	= freezer_subsys_id, | 	.subsys_id	= freezer_subsys_id, | ||||||
| 	.can_attach	= freezer_can_attach, | 	.can_attach	= freezer_can_attach, | ||||||
| 	.fork		= freezer_fork, | 	.fork		= freezer_fork, | ||||||
|  | 	.base_cftypes	= files, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -1765,29 +1765,18 @@ static struct cftype files[] = { | ||||||
| 		.write_u64 = cpuset_write_u64, | 		.write_u64 = cpuset_write_u64, | ||||||
| 		.private = FILE_SPREAD_SLAB, | 		.private = FILE_SPREAD_SLAB, | ||||||
| 	}, | 	}, | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| static struct cftype cft_memory_pressure_enabled = { | 	{ | ||||||
| 		.name = "memory_pressure_enabled", | 		.name = "memory_pressure_enabled", | ||||||
|  | 		.flags = CFTYPE_ONLY_ON_ROOT, | ||||||
| 		.read_u64 = cpuset_read_u64, | 		.read_u64 = cpuset_read_u64, | ||||||
| 		.write_u64 = cpuset_write_u64, | 		.write_u64 = cpuset_write_u64, | ||||||
| 		.private = FILE_MEMORY_PRESSURE_ENABLED, | 		.private = FILE_MEMORY_PRESSURE_ENABLED, | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int cpuset_populate(struct cgroup_subsys *ss, struct cgroup *cont) |  | ||||||
| { |  | ||||||
| 	int err; |  | ||||||
| 
 |  | ||||||
| 	err = cgroup_add_files(cont, ss, files, ARRAY_SIZE(files)); |  | ||||||
| 	if (err) |  | ||||||
| 		return err; |  | ||||||
| 	/* memory_pressure_enabled is in root cpuset only */ |  | ||||||
| 	if (!cont->parent) |  | ||||||
| 		err = cgroup_add_file(cont, ss, |  | ||||||
| 				      &cft_memory_pressure_enabled); |  | ||||||
| 	return err; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * post_clone() is called during cgroup_create() when the |  * post_clone() is called during cgroup_create() when the | ||||||
|  * clone_children mount argument was specified.  The cgroup |  * clone_children mount argument was specified.  The cgroup | ||||||
|  | @ -1887,9 +1876,9 @@ struct cgroup_subsys cpuset_subsys = { | ||||||
| 	.destroy = cpuset_destroy, | 	.destroy = cpuset_destroy, | ||||||
| 	.can_attach = cpuset_can_attach, | 	.can_attach = cpuset_can_attach, | ||||||
| 	.attach = cpuset_attach, | 	.attach = cpuset_attach, | ||||||
| 	.populate = cpuset_populate, |  | ||||||
| 	.post_clone = cpuset_post_clone, | 	.post_clone = cpuset_post_clone, | ||||||
| 	.subsys_id = cpuset_subsys_id, | 	.subsys_id = cpuset_subsys_id, | ||||||
|  | 	.base_cftypes = files, | ||||||
| 	.early_init = 1, | 	.early_init = 1, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7970,13 +7970,9 @@ static struct cftype cpu_files[] = { | ||||||
| 		.write_u64 = cpu_rt_period_write_uint, | 		.write_u64 = cpu_rt_period_write_uint, | ||||||
| 	}, | 	}, | ||||||
| #endif | #endif | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int cpu_cgroup_populate(struct cgroup_subsys *ss, struct cgroup *cont) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cont, ss, cpu_files, ARRAY_SIZE(cpu_files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct cgroup_subsys cpu_cgroup_subsys = { | struct cgroup_subsys cpu_cgroup_subsys = { | ||||||
| 	.name		= "cpu", | 	.name		= "cpu", | ||||||
| 	.create		= cpu_cgroup_create, | 	.create		= cpu_cgroup_create, | ||||||
|  | @ -7984,8 +7980,8 @@ struct cgroup_subsys cpu_cgroup_subsys = { | ||||||
| 	.can_attach	= cpu_cgroup_can_attach, | 	.can_attach	= cpu_cgroup_can_attach, | ||||||
| 	.attach		= cpu_cgroup_attach, | 	.attach		= cpu_cgroup_attach, | ||||||
| 	.exit		= cpu_cgroup_exit, | 	.exit		= cpu_cgroup_exit, | ||||||
| 	.populate	= cpu_cgroup_populate, |  | ||||||
| 	.subsys_id	= cpu_cgroup_subsys_id, | 	.subsys_id	= cpu_cgroup_subsys_id, | ||||||
|  | 	.base_cftypes	= cpu_files, | ||||||
| 	.early_init	= 1, | 	.early_init	= 1, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -8170,13 +8166,9 @@ static struct cftype files[] = { | ||||||
| 		.name = "stat", | 		.name = "stat", | ||||||
| 		.read_map = cpuacct_stats_show, | 		.read_map = cpuacct_stats_show, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cgrp, ss, files, ARRAY_SIZE(files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * charge this task's execution time to its accounting group. |  * charge this task's execution time to its accounting group. | ||||||
|  * |  * | ||||||
|  | @ -8208,7 +8200,7 @@ struct cgroup_subsys cpuacct_subsys = { | ||||||
| 	.name = "cpuacct", | 	.name = "cpuacct", | ||||||
| 	.create = cpuacct_create, | 	.create = cpuacct_create, | ||||||
| 	.destroy = cpuacct_destroy, | 	.destroy = cpuacct_destroy, | ||||||
| 	.populate = cpuacct_populate, |  | ||||||
| 	.subsys_id = cpuacct_subsys_id, | 	.subsys_id = cpuacct_subsys_id, | ||||||
|  | 	.base_cftypes = files, | ||||||
| }; | }; | ||||||
| #endif	/* CONFIG_CGROUP_CPUACCT */ | #endif	/* CONFIG_CGROUP_CPUACCT */ | ||||||
|  |  | ||||||
|  | @ -242,21 +242,17 @@ static struct cftype ss_files[] = { | ||||||
| 		.read_map = read_priomap, | 		.read_map = read_priomap, | ||||||
| 		.write_string = write_priomap, | 		.write_string = write_priomap, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct cgroup_subsys net_prio_subsys = { | struct cgroup_subsys net_prio_subsys = { | ||||||
| 	.name		= "net_prio", | 	.name		= "net_prio", | ||||||
| 	.create		= cgrp_create, | 	.create		= cgrp_create, | ||||||
| 	.destroy	= cgrp_destroy, | 	.destroy	= cgrp_destroy, | ||||||
| 	.populate	= cgrp_populate, |  | ||||||
| #ifdef CONFIG_NETPRIO_CGROUP | #ifdef CONFIG_NETPRIO_CGROUP | ||||||
| 	.subsys_id	= net_prio_subsys_id, | 	.subsys_id	= net_prio_subsys_id, | ||||||
| #endif | #endif | ||||||
|  | 	.base_cftypes	= ss_files, | ||||||
| 	.module		= THIS_MODULE | 	.module		= THIS_MODULE | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -70,21 +70,17 @@ static struct cftype ss_files[] = { | ||||||
| 		.read_u64 = read_classid, | 		.read_u64 = read_classid, | ||||||
| 		.write_u64 = write_classid, | 		.write_u64 = write_classid, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int cgrp_populate(struct cgroup_subsys *ss, struct cgroup *cgrp) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cgrp, ss, ss_files, ARRAY_SIZE(ss_files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct cgroup_subsys net_cls_subsys = { | struct cgroup_subsys net_cls_subsys = { | ||||||
| 	.name		= "net_cls", | 	.name		= "net_cls", | ||||||
| 	.create		= cgrp_create, | 	.create		= cgrp_create, | ||||||
| 	.destroy	= cgrp_destroy, | 	.destroy	= cgrp_destroy, | ||||||
| 	.populate	= cgrp_populate, |  | ||||||
| #ifdef CONFIG_NET_CLS_CGROUP | #ifdef CONFIG_NET_CLS_CGROUP | ||||||
| 	.subsys_id	= net_cls_subsys_id, | 	.subsys_id	= net_cls_subsys_id, | ||||||
| #endif | #endif | ||||||
|  | 	.base_cftypes	= ss_files, | ||||||
| 	.module		= THIS_MODULE, | 	.module		= THIS_MODULE, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -447,22 +447,16 @@ static struct cftype dev_cgroup_files[] = { | ||||||
| 		.read_seq_string = devcgroup_seq_read, | 		.read_seq_string = devcgroup_seq_read, | ||||||
| 		.private = DEVCG_LIST, | 		.private = DEVCG_LIST, | ||||||
| 	}, | 	}, | ||||||
|  | 	{ }	/* terminate */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int devcgroup_populate(struct cgroup_subsys *ss, |  | ||||||
| 				struct cgroup *cgroup) |  | ||||||
| { |  | ||||||
| 	return cgroup_add_files(cgroup, ss, dev_cgroup_files, |  | ||||||
| 					ARRAY_SIZE(dev_cgroup_files)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| struct cgroup_subsys devices_subsys = { | struct cgroup_subsys devices_subsys = { | ||||||
| 	.name = "devices", | 	.name = "devices", | ||||||
| 	.can_attach = devcgroup_can_attach, | 	.can_attach = devcgroup_can_attach, | ||||||
| 	.create = devcgroup_create, | 	.create = devcgroup_create, | ||||||
| 	.destroy = devcgroup_destroy, | 	.destroy = devcgroup_destroy, | ||||||
| 	.populate = devcgroup_populate, |  | ||||||
| 	.subsys_id = devices_subsys_id, | 	.subsys_id = devices_subsys_id, | ||||||
|  | 	.base_cftypes = dev_cgroup_files, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| int __devcgroup_inode_permission(struct inode *inode, int mask) | int __devcgroup_inode_permission(struct inode *inode, int mask) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tejun Heo
				Tejun Heo