mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[PATCH] task: Make task list manipulations RCU safe
While we can currently walk through thread groups, process groups, and sessions with just the rcu_read_lock, this opens the door to walking the entire task list. We already have all of the other RCU guarantees so there is no cost in doing this, this should be enough so that proc can stop taking the tasklist lock during readdir. prev_task was killed because it has no users, and using it will miss new tasks when doing an rcu traversal. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
181ae4005d
commit
5e85d4abe3
4 changed files with 4 additions and 5 deletions
|
@ -1192,8 +1192,7 @@ extern void wait_task_inactive(task_t * p);
|
|||
#define remove_parent(p) list_del_init(&(p)->sibling)
|
||||
#define add_parent(p) list_add_tail(&(p)->sibling,&(p)->parent->children)
|
||||
|
||||
#define next_task(p) list_entry((p)->tasks.next, struct task_struct, tasks)
|
||||
#define prev_task(p) list_entry((p)->tasks.prev, struct task_struct, tasks)
|
||||
#define next_task(p) list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks)
|
||||
|
||||
#define for_each_process(p) \
|
||||
for (p = &init_task ; (p = next_task(p)) != &init_task ; )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue