summaryrefslogtreecommitdiff
path: root/drivers/net/slip.c
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2008-06-27 15:21:55 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2008-07-02 20:46:14 -0700
commit2a739dd53ad7ee010ae6e155438507f329dce788 (patch)
treee708d4cba463f4ac6a6813491f10e993e0953ca2 /drivers/net/slip.c
parent3ad3367cdc36ff6ce4efd2159c39923a2b334f94 (diff)
downloadlwn-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.c14
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