Messages in this thread | | | Subject | Re: [2.6.27.24] Kernel coredump to a pipe is failing | From | Paul Smith <> | Date | Tue, 26 May 2009 14:01:09 -0400 |
| |
On Tue, 2009-05-26 at 12:33 -0400, Paul Smith wrote: > Sorry for not following up to my previous message to get the threading > headers correct: the original is on another system I don't have access > to and I can't find a way to reply from any of the web archived > versions. Anyway, this is a link to the original FYI: > > http://marc.info/?l=linux-kernel&m=124299629611706 > > In that post I observed that my short cores were being caused by > dump_write() returning 0; taking another look at dump_write(): > > static int dump_write(struct file *file, const void *addr, int nr) > { > return file->f_op->write(file, addr, nr, &file->f_pos) == nr; > } > > If the write operation returns an error of any kind, or it fails to > write the complete set of bytes (nr here is always PAGE_SIZE, as this > function is called when it fails), then dump_write() returns 0 and we > get a short core.
I have verified that fs/pipe.c:pipe_write() is returning ERESTARTSYS as a result of this code:
if (signal_pending(current)) { if (!ret) ret = -ERESTARTSYS; break; }
I'm not exactly sure where to go from here, without knowing what the design SHOULD be for signals that are received during core dumps.
| |