[prog] Unlocking task_list read lock before performing a sleepy operation
Pranami Bhattacharya
pranami.bhattacharya at gmail.com
Thu Mar 14 10:56:44 UTC 2013
Dear All,
I was trying the following and had a doubt.
>From my kernel module I want to iterate over task list and do some sleepy
operation for all the process for which my task->flag is set .I know by
holding read_lock(tasklist_lock)/rcu_read_lock I should not be performing
any sleepy operation. So I have coded like below :
1. Take the read lock
2. Iterate over task (for_each_process)
3. If my flag is set I unlock the tasklist_lock and get_task_struct
4. Perform the sleepy operation
5. Then put_task_struct
6. Again take read_lock(&tasklist_lock);
7. Loop continues
The code snippet is as shown below :
read_lock(&tasklist_lock);
for_each_process(c) {
if (c->my_flag) {
read_unlock(&tasklist_lock);
get_task_struct(c);
...
perform_sleepy_operation();
...
put_task_struct(c);
read_lock(&tasklist_lock);
}
}
Please let me know if this approach is correct.
Thanks and Regards,
Pranami
More information about the Programming
mailing list