Re: [Feature Request?] Inline compression of process core dumps

Christopher S. Aker
2007-04-13T02:57:49Z

Randy Dunlap wrote:
> On Thu, 12 Apr 2007 22:22:18 -0400 Christopher S. Aker wrote:
>
>> Alan Cox wrote:
>> > Indeed. So useful that in current kernels you can set the core dump
>> > path to be
>> >
>> > "|application"
>>
>> Cool stuff! However, it's not working (2.6.20.6):
>>
>> Core dump to |/home/caker/bin/dumper.pl.4442 pipe failed
>>
>> even though...
>>
>> # cat /proc/sys/kernel/core_uses_pid
>> 0
>> # cat /proc/sys/kernel/core_pattern
>> |/home/caker/bin/dumper.pl
>>
>> Looking at the code, it seems to me that format_corename() is appending
>> .pid, regardless if !core_uses_pid and corename[0]=='|', in which case
>> it creates an invalid path for call_usermodehelper_pipe().
>>
>> Bug in the code, or bug in my methods?
>
> What are you trying to dump? is it a multi-thread group app,
> not a "simple" app? I ask because of this (I'm looking at 2.6.21-rc6)
> <mm_users> reference (not that I know what that is):
>
> if (!pid_in_pattern
> && (core_uses_pid || atomic_read(&current->mm->mm_users) != 1)) {
> rc = snprintf(out_ptr, out_end - out_ptr,
> ".%d", current->tgid);
> if (rc > out_end - out_ptr)
> goto out;
> out_ptr += rc;
> }

I saw that too, and unfortunately I don't know what what that condition
represents, either. It's the only other element in that if statement
that could make it take that path, so I'm assuming that's part of the
problem.

The process is a UML instance (skas mode, so at least a kernel,
userspace, and io thread), which will generate a single, usable, core
file just fine with a non-pipe core_pattern...

-Chris