• Sukadev Bhattiprolu's avatar
    Enable multiple instances of devpts · 2a1b2dc0
    Sukadev Bhattiprolu authored
    To support containers, allow multiple instances of devpts filesystem, such
    that indices of ptys allocated in one instance are independent of ptys
    allocated in other instances of devpts.
    
    But to preserve backward compatibility, enable this support for multiple
    instances only if:
    
    	- CONFIG_DEVPTS_MULTIPLE_INSTANCES is set to Y, and
    	- '-o newinstance' mount option is specified while mounting devpts
    
    To use multi-instance mount, a container startup script could:
    
    	$ ns_exec -cm /bin/bash
    	$ umount /dev/pts
    	$ mount -t devpts -o newinstance lxcpts /dev/pts
    	$ mount -o bind /dev/pts/ptmx /dev/ptmx
    	$ /usr/sbin/sshd -p 1234
    
    where 'ns_exec -cm /bin/bash' is calls clone() with CLONE_NEWNS flag and execs
    /bin/bash in the child process. A pty created by the sshd is not visible in
    the original mount of /dev/pts.
    
    USER-SPACE-IMPACT:
    	- See Documentation/fs/devpts.txt (included in next patch) for user-
    	  space impact in multi-instance and mixed-mode operation.
    TODO:
    	- Update mount(8), pts(4) man pages. Highlight impact of not
    	  redirecting /dev/ptmx to /dev/pts/ptmx after a multi-instance mount.
    
    Changelog[v6]:
    	- [Dave Hansen] Use new get_init_pts_sb() interface
    	- [Serge Hallyn] Don't bother displaying 'newinstance' in show_options
    	- [Serge Hallyn] Use macros (PARSE_REMOUNT/PARSE_MOUNT) instead of 0/1.
    	- [Serge Hallyn] Check error return from get_sb_single() (now
    	  get_init_pts_sb())
    	- devpts_pty_kill(): don't dput error dentries
    
    Changelog[v5]:
    	- Move get_sb_ref() definition to earlier patch
    	- Move usage info to Documentation/filesystems/devpts.txt (next patch)
    	- Make ptmx node even in init_pts_ns, now that default mode is 0000
    	  (defined in earlier patch, enabled here).
    	- Cache ptmx dentry and use to update mode during remount
    	  (defined in earlier patch, enabled here).
    	- Bugfix: explicitly ignore newinstance on remount (if newinstance was
    	  specified on remount of initial mount, it would be ignored but
    	  /proc/mounts would imply that the option was set)
    
    Changelog[v4]:
    
    	- Update patch description to address H. Peter Anvin's comments
    	- Consolidate multi-instance mode code under new config token,
    	  CONFIG_DEVPTS_MULTIPLE_INSTANCE.
    	- Move usage-details from patch description to
    	  Documentation/fs/devpts.txt
    
    Changelog[v3]:
    	- Rename new mount option to 'newinstance'
    	- Create ptmx nodes only in 'newinstance' mounts
    	- Bugfix: parse_mount_options() modifies @data but since we need to
    	  parse the @data twice (once in devpts_get_sb() and once during
    	  do_remount_sb()), parse a local copy of @data in devpts_get_sb().
    	  (restructured code in devpts_get_sb() to fix this)
    
    Changelog[v2]:
    	- Support both single-mount and multiple-mount semantics and
    	  provide '-onewmnt' option to select the semantics.
    Signed-off-by: default avatarSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
    Signed-off-by: default avatarAlan Cox <alan@redhat.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2a1b2dc0
inode.c 16 KB