On Mon, Feb 11, 2013 at 3:53 PM, Pavel Emelyanov <xemul@xxxxxxxxxxxxx> wrote: > On 02/11/2013 06:46 PM, Denys Vlasenko wrote: >> On Mon, Feb 11, 2013 at 11:59 AM, Andrew Vagin <avagin@xxxxxxxxxxxxx> wrote: >>>>> I suppose I had wondered along similar lines, but in a slightly >>>>> different direction: would the use of a /proc interface to get the >>>>> queued signals make some sense? >>>> >>>> I think that /proc interface beats adding magic flags and magic semantic >>>> to [p]read. >>>> >>>> It also has the benefit of being human-readable. You don't need >>>> to write a special C program to "cat /proc/$$/foo". >>>> >>>> Andrey, I know that it is hard to let go of the code you invested time >>>> and efforts in creating. But this isn't the last patch, is it? >>>> You will need to retrieve yet more data for process checkpointing. >>>> When you start working on the next patch for it, consider trying >>>> /proc approach. >>> >>> I don't think that we need to convert siginfo into a human readable format >>> in kernel. >> >> My point is that bolting hacks onto various bits of kernel API >> in order to support process checkpointing makes those APIs >> (their in-kernel implementation) ridden with special cases >> and harder to support in the future. >> >> Process checkpointing needs to bite the bullet and >> create its own API instead. > > This is bad approach as well. What we should do is come up with a sane > API that makes sense without the checkpoint-restore project _when_ _possible_. Coming up with a sane API in general isn't easy. Consider numerous blunders enshrined in the Unix API, such as O_NONBLOCK being a file's flag instead of being a flag of read(), or waitpid, or sigwait, (had to be fds which one can feed to select/poll)... If you have your own playground in /proc/PID/foo, you can mature your API without touching many other areas of kernel, and without making mistakes permanent. Later, when other people are interested, they can factor out your code. You are planning to use signalfd to extract pending signals from the process being checkpointed. This must be a quite convoluted method already, since you need to create a signalfd and then read from it *in the context of the process you are checkpointing*. I presume you are ptrace-attaching to the process and then play games with setting registers and injecting syscalls. This does not look particularly sane to me, I'm afraid. Compared to this, ptrace-attaching to the process and then reading from /proc or issuing a new ptrace request looks much cleaner. My opinion, of course. -- vda -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html