Commit 717a94b5 authored by NeilBrown's avatar NeilBrown Committed by Ingo Molnar

sched/core: Remove 'task' parameter and rename tsk_restore_flags() to current_restore_flags()

It is not safe for one thread to modify the ->flags
of another thread as there is no locking that can protect
the update.

So tsk_restore_flags(), which takes a task pointer and modifies
the flags, is an invitation to do the wrong thing.

All current users pass "current" as the task, so no developers have
accepted that invitation.  It would be best to ensure it remains
that way.

So rename tsk_restore_flags() to current_restore_flags() and don't
pass in a task_struct pointer.  Always operate on current->flags.
Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 36a4dfc3
...@@ -244,7 +244,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send, ...@@ -244,7 +244,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
*sent += result; *sent += result;
} while (msg_data_left(&msg)); } while (msg_data_left(&msg));
tsk_restore_flags(current, pflags, PF_MEMALLOC); current_restore_flags(pflags, PF_MEMALLOC);
return result; return result;
} }
......
...@@ -387,7 +387,7 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task) ...@@ -387,7 +387,7 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task)
rc = 0; rc = 0;
} }
tsk_restore_flags(current, pflags, PF_MEMALLOC); current_restore_flags(pflags, PF_MEMALLOC);
return rc; return rc;
} }
......
...@@ -1004,7 +1004,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, ...@@ -1004,7 +1004,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
else else
err = nfserrno(host_err); err = nfserrno(host_err);
if (test_bit(RQ_LOCAL, &rqstp->rq_flags)) if (test_bit(RQ_LOCAL, &rqstp->rq_flags))
tsk_restore_flags(current, pflags, PF_LESS_THROTTLE); current_restore_flags(pflags, PF_LESS_THROTTLE);
return err; return err;
} }
......
...@@ -1286,10 +1286,10 @@ TASK_PFA_TEST(LMK_WAITING, lmk_waiting) ...@@ -1286,10 +1286,10 @@ TASK_PFA_TEST(LMK_WAITING, lmk_waiting)
TASK_PFA_SET(LMK_WAITING, lmk_waiting) TASK_PFA_SET(LMK_WAITING, lmk_waiting)
static inline void static inline void
tsk_restore_flags(struct task_struct *task, unsigned long orig_flags, unsigned long flags) current_restore_flags(unsigned long orig_flags, unsigned long flags)
{ {
task->flags &= ~flags; current->flags &= ~flags;
task->flags |= orig_flags & flags; current->flags |= orig_flags & flags;
} }
extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial); extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial);
......
...@@ -309,7 +309,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(void) ...@@ -309,7 +309,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(void)
account_irq_exit_time(current); account_irq_exit_time(current);
__local_bh_enable(SOFTIRQ_OFFSET); __local_bh_enable(SOFTIRQ_OFFSET);
WARN_ON_ONCE(in_interrupt()); WARN_ON_ONCE(in_interrupt());
tsk_restore_flags(current, old_flags, PF_MEMALLOC); current_restore_flags(old_flags, PF_MEMALLOC);
} }
asmlinkage __visible void do_softirq(void) asmlinkage __visible void do_softirq(void)
......
...@@ -4240,7 +4240,7 @@ static int __netif_receive_skb(struct sk_buff *skb) ...@@ -4240,7 +4240,7 @@ static int __netif_receive_skb(struct sk_buff *skb)
*/ */
current->flags |= PF_MEMALLOC; current->flags |= PF_MEMALLOC;
ret = __netif_receive_skb_core(skb, true); ret = __netif_receive_skb_core(skb, true);
tsk_restore_flags(current, pflags, PF_MEMALLOC); current_restore_flags(pflags, PF_MEMALLOC);
} else } else
ret = __netif_receive_skb_core(skb, false); ret = __netif_receive_skb_core(skb, false);
......
...@@ -325,7 +325,7 @@ int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb) ...@@ -325,7 +325,7 @@ int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
current->flags |= PF_MEMALLOC; current->flags |= PF_MEMALLOC;
ret = sk->sk_backlog_rcv(sk, skb); ret = sk->sk_backlog_rcv(sk, skb);
tsk_restore_flags(current, pflags, PF_MEMALLOC); current_restore_flags(pflags, PF_MEMALLOC);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment