Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 May 2012 01:23:58 +0400
From:      Andrey Zonov <andrey@zonov.org>
To:        Mateusz Guzik <mjguzik@gmail.com>
Cc:        trasz@freebsd.org, freebsd-stable <freebsd-stable@freebsd.org>
Subject:   Re: panic with overcommit and RACCT
Message-ID:  <4FB177EE.7030808@zonov.org>
In-Reply-To: <20120513202920.GA18238@dft-labs.eu>
References:  <4FAFEEEF.3040706@zonov.org> <20120513202920.GA18238@dft-labs.eu>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5/14/12 12:29 AM, Mateusz Guzik wrote:
> On Sun, May 13, 2012 at 09:27:11PM +0400, Andrey Zonov wrote:
>> Hi,
>>
>> I've got a repeatable panic on latest 9.0-STABLE and HEAD with
>> turned on overcommit (vm.overcommit=1) and RACCT.
>>
>> kgdb trace on today's HEAD:
>>
>> #10 0xffffffff80bc3513 in calltrap ()
>>      at /usr/src/sys/amd64/amd64/exception.S:228
>> #11 0xffffffff808aab71 in racct_set_locked (p=0xfffffe0005d684a0,
>> resource=0,
>>      amount=2680) at /usr/src/sys/kern/kern_racct.c:372
>> #12 0xffffffff808ab645 in racct_proc_exit (p=0xfffffe0005d684a0)
>>      at /usr/src/sys/kern/kern_racct.c:615
>> #13 0xffffffff80880d69 in fork1 (td=0xfffffe0005b2c460, flags=20, pages=4,
>>      procp=0xffffff811a36bb00, procdescp=Variable "procdescp" is not
>> available.
>> ) at /usr/src/sys/kern/kern_fork.c:943
>> #14 0xffffffff80882362 in sys_fork (td=0xfffffe0005b2c460,
>> uap=Variable "uap" is not available.
>> )
>>      at /usr/src/sys/kern/kern_fork.c:110
>> #15 0xffffffff80bd7a89 in amd64_syscall (td=0xfffffe0005b2c460, traced=0)
>>      at subr_syscall.c:135
>> #16 0xffffffff80bc37f7 in Xfast_syscall ()
>>      at /usr/src/sys/amd64/amd64/exception.S:387
>> #17 0x00000008024729fc in ?? ()
>> Previous frame inner to this frame (corrupt stack?)
>> (kgdb)
>>
>> Unread portion of the kernel message buffer:
>> Kernel page fault with the following non-sleepable locks held:
>> exclusive sleep mutex racct lock (racct lock) r = 0
>> (0xffffffff8128a7c0) locked @ /usr/src/sys/kern/kern_racct.c:614
>> exclusive sleep mutex process lock (process lock) r = 0
>> (0xfffffe0005d68598) locked @ /usr/src/sys/kern/kern_racct.c:603
>>
>
> It looks like racct_proc_exit can be called for processes without
> properly initialized racct structure, which in turn results in this
> panic.
>
> Can you please test this patch:
> http://student.agh.edu.pl/~mjguzik/patches/racct-fork.patch
>
> ?
>
> I was unable to reproduce panic you describe, so it was tested only by
> manually injecting error. Nevertheless I think you should try it. :)
>

Thanks, your patch fixes the panic.

How to repeat:
1. add options RACCT and options RCTL to kernel config, rebuild and 
install kernel, reboot
2. set sysctl vm.overcommit=1
3. run as none root something that eats memory (I just run malloc() 
until it returns NULL)
4. swapoff -a
5. panic after sometime

With patch applied instead of panic I got: "fork: Cannot allocate 
memory".  Looks like a bug in overcommit code.

-- 
Andrey Zonov



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FB177EE.7030808>