* Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx> [2010-09-23 16:01:07]: > Subject: [PATCH] taskstats: Split fill_pid function > > From: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx> > > Separate the finding of a task_struct by pid or tgid from filling the taskstats > data. This makes the code more readable. > > Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx> > --- > kernel/taskstats.c | 50 +++++++++++++++++++++----------------------------- > 1 file changed, 21 insertions(+), 29 deletions(-) > > --- a/kernel/taskstats.c > +++ b/kernel/taskstats.c > @@ -175,22 +175,8 @@ static void send_cpu_listeners(struct sk > up_write(&listeners->sem); > } > > -static int fill_pid(pid_t pid, struct task_struct *tsk, > - struct taskstats *stats) > +static void fill_stats(struct task_struct *tsk, struct taskstats *stats) > { > - int rc = 0; > - > - if (!tsk) { > - rcu_read_lock(); > - tsk = find_task_by_vpid(pid); > - if (tsk) > - get_task_struct(tsk); > - rcu_read_unlock(); > - if (!tsk) > - return -ESRCH; > - } else > - get_task_struct(tsk); > - > memset(stats, 0, sizeof(*stats)); > /* > * Each accounting subsystem adds calls to its functions to > @@ -209,17 +195,27 @@ static int fill_pid(pid_t pid, struct ta > > /* fill in extended acct fields */ > xacct_add_tsk(stats, tsk); > +} > > - /* Define err: label here if needed */ > - put_task_struct(tsk); > - return rc; > +static int fill_stats_for_pid(pid_t pid, struct taskstats *stats) > +{ > + struct task_struct *tsk; > > + rcu_read_lock(); > + tsk = find_task_by_vpid(pid); > + if (tsk) > + get_task_struct(tsk); > + rcu_read_unlock(); > + if (!tsk) > + return -ESRCH; > + fill_stats(tsk, stats); > + put_task_struct(tsk); > + return 0; > } > > -static int fill_tgid(pid_t tgid, struct task_struct *first, > - struct taskstats *stats) > +static int fill_stats_for_tgid(pid_t tgid, struct taskstats *stats) > { > - struct task_struct *tsk; > + struct task_struct *tsk, *first; > unsigned long flags; > int rc = -ESRCH; > > @@ -228,8 +224,7 @@ static int fill_tgid(pid_t tgid, struct > * leaders who are already counted with the dead tasks > */ > rcu_read_lock(); > - if (!first) > - first = find_task_by_vpid(tgid); > + first = find_task_by_vpid(tgid); > > if (!first || !lock_task_sighand(first, &flags)) > goto out; > @@ -268,7 +263,6 @@ out: > return rc; > } > > - > static void fill_tgid_exit(struct task_struct *tsk) > { > unsigned long flags; > @@ -477,7 +471,7 @@ static int cmd_attr_pid(struct genl_info > if (!stats) > goto err; > > - rc = fill_pid(pid, NULL, stats); > + rc = fill_stats_for_pid(pid, stats); > if (rc < 0) > goto err; > return send_reply(rep_skb, info); > @@ -507,7 +501,7 @@ static int cmd_attr_tgid(struct genl_inf > if (!stats) > goto err; > > - rc = fill_tgid(tgid, NULL, stats); > + rc = fill_stats_for_tgid(tgid, stats); > if (rc < 0) > goto err; > return send_reply(rep_skb, info); > @@ -593,9 +587,7 @@ void taskstats_exit(struct task_struct * > if (!stats) > goto err; > > - rc = fill_pid(-1, tsk, stats); > - if (rc < 0) > - goto err; > + fill_stats(tsk, stats); > > /* > * Doesn't matter if tsk is the leader or the last group member leaving > > Acked-by: Balbir Singh <balbir@xxxxxxxxxxxxxxxxxx> -- Three Cheers, Balbir -- To unsubscribe from this list: send the line "unsubscribe linux-s390" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html