diff --git a/fs/fcntl.c b/fs/fcntl.c index 54cc85d3338e..30f4d75fdb03 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -829,7 +829,7 @@ int send_sigurg(struct fown_struct *fown) struct task_struct *p; enum pid_type type; struct pid *pid; - unsigned long flags; + unsigned long flags, read_flags; int ret = 0; read_lock_irqsave(&fown->lock, flags); @@ -848,11 +848,11 @@ int send_sigurg(struct fown_struct *fown) send_sigurg_to_task(p, fown, type); rcu_read_unlock(); } else { - read_lock(&tasklist_lock); + read_lock_irqsave(&tasklist_lock, read_flags); do_each_pid_task(pid, type, p) { send_sigurg_to_task(p, fown, type); } while_each_pid_task(pid, type, p); - read_unlock(&tasklist_lock); + read_unlock_irqrestore(&tasklist_lock, read_flags); } out_unlock_fown: read_unlock_irqrestore(&fown->lock, flags);