Re: [PATCH, RESEND] getrusage: fill ru_maxrss value
flat view
From: Jiri Pirko <hidden>
Date: 2008-12-16 15:56:33
Also in:
lkml
On Tue, 16 Dec 2008 16:20:54 +0100 Oleg Nesterov [off-list ref] wrote:
On 12/16, Jiri Pirko wrote:quoted
This patch makes ->ru_maxrss value in struct rusage filled accordingly to rss hiwater mark. This struct is filled as a parameter to getrusage syscall. ->ru_maxrss value is set to pages which might be correct as "time" application converts it to KBs. To make this happen we extend struct signal_struct by two fields. The first one is ->maxrss which we use to store rss hiwater of the task. The second one is ->cmaxrss which we use to store highest rss hiwater of all task childs. These values are used in k_getrusage() to actually fill ->ru_maxrss. k_getrusage() uses current rss hiwater value directly if mm struct exists. We clear the ->maxrss as a part of flush_old_exec() to be consistent because bprm_mm_init() does not copy ->hiwater_rss.Imho the patch is fine, butquoted
@@ -1598,6 +1601,15 @@ static void k_getrusage(struct task_struct *p, int who, struct rusage *r) out: cputime_to_timeval(utime, &r->ru_utime); cputime_to_timeval(stime, &r->ru_stime); + + task_lock(p); + if (p->mm) { + unsigned long maxrss = get_mm_hiwater_rss(p->mm); + + if (r->ru_maxrss < maxrss) + r->ru_maxrss = maxrss; + } + task_unlock(p);I think the code above should check "if (who != RUSAGE_CHILDREN) ?
Yes of course it should. Sorry I missed that :/ Will do new patch.
Oleg.