diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-06-27 15:21:55 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-07-02 20:46:14 -0700 |
commit | 2a739dd53ad7ee010ae6e155438507f329dce788 (patch) | |
tree | e708d4cba463f4ac6a6813491f10e993e0953ca2 /drivers/net/slip.c | |
parent | 3ad3367cdc36ff6ce4efd2159c39923a2b334f94 (diff) | |
download | lwn-2a739dd53ad7ee010ae6e155438507f329dce788.tar.gz lwn-2a739dd53ad7ee010ae6e155438507f329dce788.zip |
TTY: fix for tty operations bugs
This is fixed with the recent tty operations rewrite in mainline in a
different way, this is a selective backport of the relevant portions to
the -stable tree.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/net/slip.c')
-rw-r--r-- | drivers/net/slip.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/net/slip.c b/drivers/net/slip.c index 5a55ede352f4..9d138bf021a6 100644 --- a/drivers/net/slip.c +++ b/drivers/net/slip.c @@ -460,10 +460,14 @@ static void sl_tx_timeout(struct net_device *dev) /* 20 sec timeout not reached */ goto out; } - printk(KERN_WARNING "%s: transmit timed out, %s?\n", - dev->name, - (sl->tty->driver->chars_in_buffer(sl->tty) || sl->xleft) ? - "bad line quality" : "driver error"); + { + int cib = 0; + if (sl->tty->driver->chars_in_buffer) + cib = sl->tty->driver->chars_in_buffer(sl->tty); + printk(KERN_WARNING "%s: transmit timed out, %s?\n", + dev->name, (cib || sl->xleft) ? + "bad line quality" : "driver error"); + } sl->xleft = 0; sl->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); sl_unlock(sl); @@ -829,6 +833,8 @@ static int slip_open(struct tty_struct *tty) if (!capable(CAP_NET_ADMIN)) return -EPERM; + if (!tty->driver->write) + return -EOPNOTSUPP; /* RTnetlink lock is misused here to serialize concurrent opens of slip channels. There are better ways, but it is |