Skip to content

: Enable multiple mounts of devpts

sukadev-r/[email protected] containers 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest11 patches 15 repliesIn review
  2. v2 RFC8 patches 42 repliesSuperseded
  3. v1 RFC6 patches 11 repliesSuperseded

Changes in v3 from the cover letter

- Port to 2008-08-28 ttydev tree
- Rename new mount options to 'ptmxmode' and 'newinstance'.
- [Alan Cox] Use tty driver data to identify devpts (this is used to cleanup get_node() in devpts_pty_kill()).
- [H. Peter Anvin] get_node() cleanup in devpts (which was enabled by the inode/tty parameter to devpts interfaces)
- Bugfix in multi-mount mode (see Patch 11/11).
- Executed pty tests in LTP (in both single-instance and multi-instance mode)
- Should be bisect-safe :-)

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/11: Move tty lookup/reopen to tty_opendrivers/char/tty_io.c+16 -150 replies
2/11: Add an instance parameter devpts interfacesdrivers/char/pty.c drivers/char/tty_io.c fs/devpts/inode.c +2 more+47 -300 replies
3/11: Simplify devpts_get_tty()fs/devpts/inode.c+5 -120 replies
4/11: Simplify devpts_pty_new()fs/devpts/inode.c+8 -30 replies
5/11: Simplify devpts_pty_killfs/devpts/inode.c+12 -170 replies
6/11: Remove devpts_root globalfs/devpts/inode.c+20 -90 replies
7/11: Per-mount allocated_ptysfs/devpts/inode.c+48 -70 replies
8/11: Per-mount 'config' objectfs/devpts/inode.c+34 -230 replies
9/11: Extract option parsing to new functionfs/devpts/inode.c+9 -30 replies
10/11: Ability to internally create ptmxfs/devpts/inode.c+60 -20 replies
11/11: Enable multiple instances of devptsfs/devpts/inode.c fs/super.c include/linux/fs.h+203 -414 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.

Read the v3 thread

Cover letter [PATCH 0/11][v3]: Enable multiple mounts of devpts

This patchset includes the patches to cleanup get_node() I had sent earlier, with the Sign-off added. No other changes were made to those patches since I last sent.

---
Enable multiple mounts of devpts filesystem so each container can allocate ptys independently.

User interface:

Since supporting multiple mounts of devpts can break user-space, this feature is enabled only under a new mount option (-o newinstance).

If this option is never specified, this patchset should not change any behavior. i.e existing single-namespace semantics are preserved across any remounts of /dev/pts (as long as none of them use the new option). So old startup scripts should continue to work.

If the '-o newinstance' option is specified, then a new 'private' mount of devpts is created. Ptys in this private instance are independent of ptys created in other devpts instances. For this to be fully functional, /dev/ptmx must be a bind-mount of '/dev/pts/ptmx'

i.e
mount -t devpts -o newinstance lxcpts /dev/pts mount -o bind /dev/pts/ptmx /dev/ptmx

See [PATCH 11/11] for more details on usage.

Implementation notes:

1. To enable multiple mounts of /dev/pts, (most) devpts interfaces need to know which instance of devpts is being accessed. This patchset uses the 'struct inode' or 'struct tty_struct' of the device being accessed to identify the appropriate devpts instance. Hence the need for the /dev/pts/ptmx bind-mount.

2. See comments in get_sb_ref() in fs/super.c (could not find existing interfaces that accomplish it) Or is there a better way ?

3. Mount options must be parsed twice during mount (once to determine the mode of mount (single/multi-instance) and once to actually save the options. There does not seem to be an easy way to parse once and reuse (See 'safe_process_mount_opts()' in PATCH 11/11)

[PATCH 1/11]: Move tty lookup/reopen to tty_open [PATCH 2/11]: Add an instance parameter to devpts interfaces [PATCH 3/11]: Simplify devpts_get_tty()
[PATCH 4/11]: Simplify devpts_pty_new()
[PATCH 5/11]: Simplify devpts_pty_kill
[PATCH 6/11]: Remove devpts_root global
[PATCH 7/11]: Per-mount allocated_ptys
[PATCH 8/11]: Per-mount 'config' object
[PATCH 9/11]: Extract option parsing to new function [PATCH 10/11]: Ability to internally create ptmx [PATCH 11/11]: Enable multiple instances of devpts

Changelog [v3]:

- Port to 2008-08-28 ttydev tree
- Rename new mount options to 'ptmxmode' and 'newinstance'.
- [Alan Cox] Use tty driver data to identify devpts (this is used to cleanup get_node() in devpts_pty_kill()).
- [H. Peter Anvin] get_node() cleanup in devpts (which was enabled by the inode/tty parameter to devpts interfaces)
- Bugfix in multi-mount mode (see Patch 11/11).
- Executed pty tests in LTP (in both single-instance and multi-instance mode)
- Should be bisect-safe :-)

Changelog [v2]:

- New mount option '-o newmnt' added (patch 8/8)
- Support both single-mount and multi-mount semantics (patch 8/8)
- Automatically create ptmx node when devpts is mounted (patch 7/8)
- Extract option parsing code to new function (patch 6/8)
- Make 'config' params per-mount variables (patch 5/8)
- Slightly re-ordered existing patches in set (patches 1/8, 2/8)

TODO:
- Do we need a '-o ptmxuid' and '-o ptmxgid' options as well ?
- Add a config option to enable multiple-mounts of devpts.
- (Sometime in future) Remove even initial kernel mount of devpts
- Any other good test suites to test this (besides LTP, sshd).