tty: gigaset: really fix chars_in_buffer
authorTilman Schmidt <tilman@imap.cc>
Fri, 7 Aug 2009 03:33:33 +0000 (20:33 -0700)
committerLive-CD User <linux@linux.site>
Sat, 19 Sep 2009 20:13:09 +0000 (13:13 -0700)
The tty_operation chars_in_buffer() is not allowed to return a negative
value to signal an error.  Corrects the problem flagged by commit
23198fda7182969b619613a555f8645fdc3dc334, "tty: fix chars_in_buffers".

Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: stable <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/isdn/gigaset/interface.c

index 8ff7e35..f33ac27 100644 (file)
@@ -408,33 +408,28 @@ static int if_write_room(struct tty_struct *tty)
        return retval;
 }
 
-/* FIXME: This function does not have error returns */
-
 static int if_chars_in_buffer(struct tty_struct *tty)
 {
        struct cardstate *cs;
-       int retval = -ENODEV;
+       int retval = 0;
 
        cs = (struct cardstate *) tty->driver_data;
        if (!cs) {
                pr_err("%s: no cardstate\n", __func__);
-               return -ENODEV;
+               return 0;
        }
 
        gig_dbg(DEBUG_IF, "%u: %s()", cs->minor_index, __func__);
 
-       if (mutex_lock_interruptible(&cs->mutex))
-               return -ERESTARTSYS; // FIXME -EINTR?
+       mutex_lock(&cs->mutex);
 
-       if (!cs->connected) {
+       if (!cs->connected)
                gig_dbg(DEBUG_IF, "not connected");
-               retval = -ENODEV;
-       } else if (!cs->open_count)
+       else if (!cs->open_count)
                dev_warn(cs->dev, "%s: device not opened\n", __func__);
-       else if (cs->mstate != MS_LOCKED) {
+       else if (cs->mstate != MS_LOCKED)
                dev_warn(cs->dev, "can't write to unlocked device\n");
-               retval = -EBUSY;
-       } else
+       else
                retval = cs->ops->chars_in_buffer(cs);
 
        mutex_unlock(&cs->mutex);