Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
}
+1 −1
Original line number Diff line number Diff line
@@ -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;
}

+1 −1
Original line number Diff line number Diff line
@@ -1004,7 +1004,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
	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;
}

+3 −3
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -309,7 +309,7 @@ asmlinkage __visible void __softirq_entry __do_softirq(void)
	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)
Loading