[CRIU] [PATCH 11/12] tty: Add external ttys handling
Andrew Vagin
avagin at parallels.com
Fri Oct 3 01:25:37 PDT 2014
On Fri, Oct 03, 2014 at 12:07:34PM +0400, Cyrill Gorcunov wrote:
> On Fri, Oct 03, 2014 at 12:00:30PM +0400, Andrew Vagin wrote:
> > On Fri, Oct 03, 2014 at 11:50:04AM +0400, Cyrill Gorcunov wrote:
> > > Some types of ttys (such as /dev/console) should be c/r'ed in
> > > simle manner -- just opent them by path on restore, for this
> > > sake that named external TTYs are introduced.
> > >
> > > For example, for /dev/console one simply need to pass an option
> > >
> > > --ext-tty 5:1
> >
> > Can we use paths instead of maj:min? For example LXC bindmounts a host
> > /dev/pty/X to /dev/console.
>
> We can, but the problem is that
>
> static int dump_chrdev(struct fd_parms *p, int lfd, struct cr_img *img)
> {
> int maj = major(p->stat.st_rdev);
> const struct fdtype_ops *ops;
>
> switch (maj) {
> case MEM_MAJOR:
> ops = ®file_dump_ops;
> break;
> case TTYAUX_MAJOR:
> case UNIX98_PTY_MASTER_MAJOR ... (UNIX98_PTY_MASTER_MAJOR + UNIX98_PTY_MAJOR_COUNT - 1):
> case UNIX98_PTY_SLAVE_MAJOR:
An external terminal can be a pty slave but from the host devpts mount,
so we need to find a way how to determine that.
> ops = &tty_dump_ops;
> break;
> case MISC_MAJOR:
> ops = get_misc_dev_ops(minor(p->stat.st_rdev));
> if (ops)
> break;
> /* fallthrough */
> default: {
> char more[32];
>
> /*
> * Ext mapping for tty devices.
> */
> --> if (lookup_ext_tty(maj, minor(p->stat.st_rdev))) {
> ops = &tty_dump_ops;
> goto found;
> }
>
> sprintf(more, "%d:%d", maj, minor(p->stat.st_rdev));
> return dump_unsupp_fd(p, lfd, img, "chr", more);
> }
> }
>
> found:
> return do_dump_gen_file(p, lfd, ops, img);
> }
>
> I'll have to readlink here instead which is inconvenient, so that
> what prevents one to simply pass stat of /dev/pty/X here?
You can collect stats for external terminals and then compare them.
More information about the CRIU
mailing list