sched: Clean up parameter passing of proc_sched_autogroup_set_nice()
Pass nice as a value to proc_sched_autogroup_set_nice(). No side effect is expected, and the variable err will be overwritten with the return value. Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/4F45FBB7.5090607@ct.jp.nec.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
367456c756
Коммит
2e5b5b3a1b
|
@ -1310,8 +1310,7 @@ sched_autogroup_write(struct file *file, const char __user *buf,
|
||||||
if (!p)
|
if (!p)
|
||||||
return -ESRCH;
|
return -ESRCH;
|
||||||
|
|
||||||
err = nice;
|
err = proc_sched_autogroup_set_nice(p, nice);
|
||||||
err = proc_sched_autogroup_set_nice(p, &err);
|
|
||||||
if (err)
|
if (err)
|
||||||
count = err;
|
count = err;
|
||||||
|
|
||||||
|
|
|
@ -2065,7 +2065,7 @@ extern void sched_autogroup_fork(struct signal_struct *sig);
|
||||||
extern void sched_autogroup_exit(struct signal_struct *sig);
|
extern void sched_autogroup_exit(struct signal_struct *sig);
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
|
extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
|
||||||
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice);
|
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int nice);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
static inline void sched_autogroup_create_attach(struct task_struct *p) { }
|
static inline void sched_autogroup_create_attach(struct task_struct *p) { }
|
||||||
|
|
|
@ -195,20 +195,20 @@ __setup("noautogroup", setup_autogroup);
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
||||||
int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice)
|
int proc_sched_autogroup_set_nice(struct task_struct *p, int nice)
|
||||||
{
|
{
|
||||||
static unsigned long next = INITIAL_JIFFIES;
|
static unsigned long next = INITIAL_JIFFIES;
|
||||||
struct autogroup *ag;
|
struct autogroup *ag;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (*nice < -20 || *nice > 19)
|
if (nice < -20 || nice > 19)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
err = security_task_setnice(current, *nice);
|
err = security_task_setnice(current, nice);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (*nice < 0 && !can_nice(current, *nice))
|
if (nice < 0 && !can_nice(current, nice))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
/* this is a heavy operation taking global locks.. */
|
/* this is a heavy operation taking global locks.. */
|
||||||
|
@ -219,9 +219,9 @@ int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice)
|
||||||
ag = autogroup_task_get(p);
|
ag = autogroup_task_get(p);
|
||||||
|
|
||||||
down_write(&ag->lock);
|
down_write(&ag->lock);
|
||||||
err = sched_group_set_shares(ag->tg, prio_to_weight[*nice + 20]);
|
err = sched_group_set_shares(ag->tg, prio_to_weight[nice + 20]);
|
||||||
if (!err)
|
if (!err)
|
||||||
ag->nice = *nice;
|
ag->nice = nice;
|
||||||
up_write(&ag->lock);
|
up_write(&ag->lock);
|
||||||
|
|
||||||
autogroup_kref_put(ag);
|
autogroup_kref_put(ag);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче