Use write_trylock_irqsave in ptrace_attach
This patch makes ptrace_attach use write_trylock_irqsave(). [akpm@linux-foundation.org: remove unneeded initialisation] Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
e1f4a88c5a
Коммит
6175ecfed3
|
@ -161,6 +161,7 @@ int ptrace_may_attach(struct task_struct *task)
|
||||||
int ptrace_attach(struct task_struct *task)
|
int ptrace_attach(struct task_struct *task)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
audit_ptrace(task);
|
audit_ptrace(task);
|
||||||
|
|
||||||
|
@ -181,9 +182,7 @@ repeat:
|
||||||
* cpu's that may have task_lock).
|
* cpu's that may have task_lock).
|
||||||
*/
|
*/
|
||||||
task_lock(task);
|
task_lock(task);
|
||||||
local_irq_disable();
|
if (!write_trylock_irqsave(&tasklist_lock, flags)) {
|
||||||
if (!write_trylock(&tasklist_lock)) {
|
|
||||||
local_irq_enable();
|
|
||||||
task_unlock(task);
|
task_unlock(task);
|
||||||
do {
|
do {
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
@ -211,7 +210,7 @@ repeat:
|
||||||
force_sig_specific(SIGSTOP, task);
|
force_sig_specific(SIGSTOP, task);
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
write_unlock_irq(&tasklist_lock);
|
write_unlock_irqrestore(&tasklist_lock, flags);
|
||||||
task_unlock(task);
|
task_unlock(task);
|
||||||
out:
|
out:
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче