[Devel] [PATCH rh7] vtty: n_tty -- Allow write on sole slave vtty peer

Vladimir Davydov vdavydov at virtuozzo.com
Mon Nov 23 05:04:22 PST 2015


On Wed, Nov 18, 2015 at 04:16:07PM +0300, Cyrill Gorcunov wrote:
> In pcs6 the pty counting has been somewhat sophisticated so in
> pcs7 we've simplified it to bring as less changes into vanilla
> code as possible (introducing TTY_PINNED_BY_OTHER bit to order
> closing sequence). The new accounting works as expected but
> there is a small issue -- until master peer get a real user hooked
> on it (say containers opens /dev/console on its own and writes
> log into it) any write operation return -EIO because line
> discipline module tests the @count on the other side of a peer.
> 
> I think we can add one small code snippet (just the same
> as we did in tty_release() helper to track such situation
> and allow to write into sole open vtty.

Agree.

> 
> Basically the issue were that getty inside container wrote
> some data upon container's starup and connection from the
> node simply didn't get it because data was lost which as
> a side effect forced a console user to hit "enter" second
> time.
> 
> https://jira.sw.ru/browse/PSBM-40740
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at virtuozzo.com>
> CC: Vladimir Davydov <vdavydov at virtuozzo.com>
> CC: Konstantin Khorenko <khorenko at virtuozzo.com>
> CC: Igor Sukhih <igor at parallels.com>
> CC: Nikolay Breykin <nbreykin at odin.com>
> ---
>  drivers/tty/n_tty.c |    6 ++++++
>  1 file changed, 6 insertions(+)
> 
> Index: linux-pcs7.git/drivers/tty/n_tty.c
> ===================================================================
> --- linux-pcs7.git.orig/drivers/tty/n_tty.c
> +++ linux-pcs7.git/drivers/tty/n_tty.c
> @@ -2041,7 +2041,13 @@ static ssize_t n_tty_write(struct tty_st
>  			retval = -ERESTARTSYS;
>  			break;
>  		}
> +#ifdef CONFIG_VE
> +		if (tty_hung_up_p(file) ||
> +		    (tty->link && !tty->link->count &&
> +		     !(test_bit(TTY_PINNED_BY_OTHER, &tty->link->flags)))) {
> +#else
>  		if (tty_hung_up_p(file) || (tty->link && !tty->link->count)) {
> +#endif

I wouldn't surround TTY_PINNED_BY_OTHER with CONFIG_VE here and there,
but I see that you do it so as to track our changes easier. Well, I
think, git log suits the purpose better, but it isn't worth arguing
upon, so

Reviewed-by: Vladimir Davydov <vdavydov at virtuozzo.com>

>  			retval = -EIO;
>  			break;
>  		}
> 


More information about the Devel mailing list