mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	cgroup: bounce cgroup_subsys_state ref kill confirmation to a work item
css (cgroup_subsys_state) offlining, which requires process context, will be moved to ref kill confirmation. In preparation, bounce css_killed handling through css->destroy_work. css_ref_killed_fn() is renamed to css_killed_ref_fn() so that it's consistent with the new css_killed_work_fn(). This patch adds an additional work item bouncing but doesn't change the actual logic. Signed-off-by: Tejun Heo <tj@kernel.org> Acked-by: Li Zefan <lizefan@huawei.com>
This commit is contained in:
		
							parent
							
								
									ae7f164a09
								
							
						
					
					
						commit
						223dbc38d2
					
				
					 1 changed files with 18 additions and 3 deletions
				
			
		|  | @ -4555,12 +4555,27 @@ static void cgroup_css_killed(struct cgroup *cgrp) | |||
| 	schedule_work(&cgrp->destroy_work); | ||||
| } | ||||
| 
 | ||||
| static void css_ref_killed_fn(struct percpu_ref *ref) | ||||
| /*
 | ||||
|  * This is called when the refcnt of a css is confirmed to be killed. | ||||
|  * css_tryget() is now guaranteed to fail. | ||||
|  */ | ||||
| static void css_killed_work_fn(struct work_struct *work) | ||||
| { | ||||
| 	struct cgroup_subsys_state *css = | ||||
| 		container_of(work, struct cgroup_subsys_state, destroy_work); | ||||
| 	struct cgroup *cgrp = css->cgroup; | ||||
| 
 | ||||
| 	cgroup_css_killed(cgrp); | ||||
| } | ||||
| 
 | ||||
| /* css kill confirmation processing requires process context, bounce */ | ||||
| static void css_killed_ref_fn(struct percpu_ref *ref) | ||||
| { | ||||
| 	struct cgroup_subsys_state *css = | ||||
| 		container_of(ref, struct cgroup_subsys_state, refcnt); | ||||
| 
 | ||||
| 	cgroup_css_killed(css->cgroup); | ||||
| 	INIT_WORK(&css->destroy_work, css_killed_work_fn); | ||||
| 	schedule_work(&css->destroy_work); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -4634,7 +4649,7 @@ static int cgroup_destroy_locked(struct cgroup *cgrp) | |||
| 		percpu_ref_get(&css->refcnt); | ||||
| 
 | ||||
| 		atomic_inc(&cgrp->css_kill_cnt); | ||||
| 		percpu_ref_kill_and_confirm(&css->refcnt, css_ref_killed_fn); | ||||
| 		percpu_ref_kill_and_confirm(&css->refcnt, css_killed_ref_fn); | ||||
| 	} | ||||
| 	cgroup_css_killed(cgrp); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Tejun Heo
						Tejun Heo