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: NeilBrown <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: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
36a4dfc378
commit
717a94b5fc
@ -244,7 +244,7 @@ static int sock_xmit(struct nbd_device *nbd, int index, int send,
|
||||
*sent += result;
|
||||
} while (msg_data_left(&msg));
|
||||
|
||||
tsk_restore_flags(current, pflags, PF_MEMALLOC);
|
||||
current_restore_flags(pflags, PF_MEMALLOC);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -387,7 +387,7 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task)
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
tsk_restore_flags(current, pflags, PF_MEMALLOC);
|
||||
current_restore_flags(pflags, PF_MEMALLOC);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1004,7 +1004,7 @@ out_nfserr:
|
||||
else
|
||||
err = nfserrno(host_err);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1286,10 +1286,10 @@ TASK_PFA_TEST(LMK_WAITING, lmk_waiting)
|
||||
TASK_PFA_SET(LMK_WAITING, lmk_waiting)
|
||||
|
||||
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;
|
||||
task->flags |= orig_flags & flags;
|
||||
current->flags &= ~flags;
|
||||
current->flags |= orig_flags & flags;
|
||||
}
|
||||
|
||||
extern int cpuset_cpumask_can_shrink(const struct cpumask *cur, const struct cpumask *trial);
|
||||
|
@ -309,7 +309,7 @@ restart:
|
||||
account_irq_exit_time(current);
|
||||
__local_bh_enable(SOFTIRQ_OFFSET);
|
||||
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)
|
||||
|
@ -4240,7 +4240,7 @@ static int __netif_receive_skb(struct sk_buff *skb)
|
||||
*/
|
||||
current->flags |= PF_MEMALLOC;
|
||||
ret = __netif_receive_skb_core(skb, true);
|
||||
tsk_restore_flags(current, pflags, PF_MEMALLOC);
|
||||
current_restore_flags(pflags, PF_MEMALLOC);
|
||||
} else
|
||||
ret = __netif_receive_skb_core(skb, false);
|
||||
|
||||
|
@ -325,7 +325,7 @@ int __sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
current->flags |= PF_MEMALLOC;
|
||||
ret = sk->sk_backlog_rcv(sk, skb);
|
||||
tsk_restore_flags(current, pflags, PF_MEMALLOC);
|
||||
current_restore_flags(pflags, PF_MEMALLOC);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user