linux-stable/drivers/tty
Linus Torvalds 67245ff332 devpts: clean up interface to pty drivers
This gets rid of the horrible notion of having that

    struct inode *ptmx_inode

be the linchpin of the interface between the pty code and devpts.

By de-emphasizing the ptmx inode, a lot of things actually get cleaner,
and we will have a much saner way forward.  In particular, this will
allow us to associate with any particular devpts instance at open-time,
and not be artificially tied to one particular ptmx inode.

The patch itself is actually fairly straightforward, and apart from some
locking and return path cleanups it's pretty mechanical:

 - the interfaces that devpts exposes all take "struct pts_fs_info *"
   instead of "struct inode *ptmx_inode" now.

   NOTE! The "struct pts_fs_info" thing is a completely opaque structure
   as far as the pty driver is concerned: it's still declared entirely
   internally to devpts. So the pty code can't actually access it in any
   way, just pass it as a "cookie" to the devpts code.

 - the "look up the pts fs info" is now a single clear operation, that
   also does the reference count increment on the pts superblock.

   So "devpts_add/del_ref()" is gone, and replaced by a "lookup and get
   ref" operation (devpts_get_ref(inode)), along with a "put ref" op
   (devpts_put_ref()).

 - the pty master "tty->driver_data" field now contains the pts_fs_info,
   not the ptmx inode.

 - because we don't care about the ptmx inode any more as some kind of
   base index, the ref counting can now drop the inode games - it just
   gets the ref on the superblock.

 - the pts_fs_info now has a back-pointer to the super_block. That's so
   that we can easily look up the information we actually need. Although
   quite often, the pts fs info was actually all we wanted, and not having
   to look it up based on some magical inode makes things more
   straightforward.

In particular, now that "devpts_get_ref(inode)" operation should really
be the *only* place we need to look up what devpts instance we're
associated with, and we do it exactly once, at ptmx_open() time.

The other side of this is that one ptmx node could now be associated
with multiple different devpts instances - you could have a single
/dev/ptmx node, and then have multiple mount namespaces with their own
instances of devpts mounted on /dev/pts/.  And that's all perfectly sane
in a model where we just look up the pts instance at open time.

This will eventually allow us to get rid of our odd single-vs-multiple
pts instance model, but this patch in itself changes no semantics, only
an internal binding model.

Cc: Eric Biederman <ebiederm@xmission.com>
Cc: Peter Anvin <hpa@zytor.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Peter Hurley <peter@hurleysoftware.com>
Cc: Serge Hallyn <serge.hallyn@ubuntu.com>
Cc: Willy Tarreau <w@1wt.eu>
Cc: Aurelien Jarno <aurelien@aurel32.net>
Cc: Alan Cox <gnomes@lxorguk.ukuu.org.uk>
Cc: Jann Horn <jann@thejh.net>
Cc: Greg KH <greg@kroah.com>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Florian Weimer <fw@deneb.enyo.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-04-18 13:43:02 -07:00
..
hvc xen: features and fixes for 4.6-rc0 2016-03-22 12:55:17 -07:00
ipwireless
serial serial: 8250: describe CONFIG_SERIAL_8250_RSA 2016-03-07 16:11:14 -08:00
vt tty: vt: initialize softcursor_original correctly 2016-02-06 23:42:25 -08:00
amiserial.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
bfin_jtag_comm.c
cyclades.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
ehv_bytechan.c drivers/tty: make ehv_bytechan.c explicitly non-modular 2016-02-06 23:26:43 -08:00
goldfish.c tty: goldfish: support platform_device with id -1 2016-03-07 16:11:14 -08:00
isicom.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
Kconfig tty: cyclades: cyz_interrupt is only used for PCI 2016-02-06 23:41:17 -08:00
Makefile
metag_da.c
mips_ejtag_fdc.c ttyFDC: Fix build problems due to use of module_{init,exit} 2015-10-17 21:29:21 -07:00
moxa.c tty: Remove unused SERIAL_DO_RESTART define 2015-12-13 19:59:48 -08:00
moxa.h
mxser.c tty: constify tty_port_operations structs 2016-02-06 23:31:08 -08:00
mxser.h
n_gsm.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
n_hdlc.c TTY: n_hdlc, fix lockdep false positive 2016-02-06 23:27:46 -08:00
n_r3964.c tty: r3964: Replace/remove bogus tty lock use 2015-10-17 21:11:29 -07:00
n_tracerouter.c n_tracerouter: stop including <asm-generic/bug> 2015-10-15 00:21:10 +02:00
n_tracesink.c n_tracesink: stop including <asm-generic/bug> 2015-10-15 00:21:11 +02:00
n_tracesink.h
n_tty.c n_tty: Ignore all read data when closing 2016-01-28 14:13:44 -08:00
nozomi.c tty: nozomi: avoid a harmless gcc warning 2016-02-06 23:41:17 -08:00
pty.c devpts: clean up interface to pty drivers 2016-04-18 13:43:02 -07:00
rocket.c tty: Remove ASYNC_CLOSING 2016-01-28 14:19:12 -08:00
rocket.h
rocket_int.h tty: rocket: Remove private close_wait 2016-01-28 14:13:44 -08:00
synclink.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
synclink_gt.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
synclinkmp.c tty: synclinkmp: do not ignore errors in probe() 2016-02-06 23:27:46 -08:00
sysrq.c sysrq: Fix warning in sysrq generated crash. 2015-12-29 16:29:18 -08:00
tty_audit.c tty: audit: remove unused variable 2016-03-07 16:11:14 -08:00
tty_buffer.c tty: Unify receive_buf() code paths 2016-01-28 14:13:44 -08:00
tty_io.c tty: Fix merge of "tty: Refactor tty_open()" 2016-03-31 20:49:39 -07:00
tty_ioctl.c tty: Use termios c_*flag macros 2016-01-28 14:13:44 -08:00
tty_ldisc.c tty: Eliminate global symbol tty_ldisc_N_TTY 2016-01-27 15:13:28 -08:00
tty_ldsem.c tty: Deinline __ldsem_down_write_nested, save 128 bytes 2015-12-13 19:59:48 -08:00
tty_mutex.c Merge 4.5-rc4 into tty-next 2016-02-14 14:36:04 -08:00
tty_port.c tty: Remove ASYNC_CLOSING 2016-01-28 14:19:12 -08:00