On 04/09/09 10:20 -0400, Oren Laadan wrote: > This patch adds support for checkpoint and restart of pseudo terminals > (PTYs). Since PTYs are shared (pointed to by file, and signal), they > are managed via objhash. > > PTYs are master/slave pairs; The code arranges for the master to > always be checkpointed first, followed by the slave. This is important > since during restart both ends are created when restoring the master. > > In this patch only UNIX98 style PTYs are supported. > > Currently only PTYs that are referenced by open files are handled. > Thus PTYs checkpoint starts with a file in tty_file_checkpoint(). It > will first checkpoint the master and slave PTYs via tty_checkpoint(), > and then complete the saving of the file descriptor. This means that > in the image file, the order of objects is: master-tty, slave-tty, > file-desc. > > During restart, to restore the master side, we open the /dev/ptmx > device and get a file handle. But at this point we don't know the > designated objref for this file, because the file is due later on in > the image stream. On the other hand, we can't just fput() the file > because it will close the PTY too. > > Instead, when we checkpoint the master PTY, we _reserve_ an objref > for the file (which won't be further used in checkpoint). Then at > restart, use it to insert the file to objhash. > > TODO: > > * Better sanitize input from checkpoint image on restore > * Check the locking when saving/restoring tty_struct state > * Echo position/buffer isn't saved (is it needed ?) > * Handle multiple devpts mounts (namespaces) > * Paths of ptmx and slaves are hard coded (/dev/ptmx, /dev/pts/...) > > Changelog[v1]: > - Adjust include/asm/checkpoint_hdr.h for s390 architecture > - Add NCC to kernel constants header (ckpt_hdr_const) > - [Serge Hallyn] fix calculation of canon_datalen > > Signed-off-by: Oren Laadan <orenl@xxxxxxxxxxxxxxx> [...] > diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c > index a3afa0c..b8f8d79 100644 > --- a/drivers/char/tty_io.c > +++ b/drivers/char/tty_io.c > @@ -570,7 +582,9 @@ static void do_tty_hangup(struct work_struct *work) > set_bit(TTY_HUPPED, &tty->flags); > spin_unlock_irqrestore(&tty->ctrl_lock, flags); > > - /* Account for the p->signal references we killed */ > + /* Account > + > + for the p->signal references we killed */ > while (refs--) > tty_kref_put(tty); > Nit: this hunk is certainly not needed ;) [...] Thanks, Louis -- Dr Louis Rilling Kerlabs Skype: louis.rilling Batiment Germanium Phone: (+33|0) 6 80 89 08 23 80 avenue des Buttes de Coesmes http://www.kerlabs.com/ 35700 Rennes
Attachment:
signature.asc
Description: Digital signature
_______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers