| From a4304f2d5a3823deea894026ec95e43b33912357 Mon Sep 17 00:00:00 2001 |
| From: Tilman Schmidt <tilman@imap.cc> |
| Date: Thu, 6 Aug 2009 20:33:33 -0700 |
| Subject: tty: gigaset: really fix chars_in_buffer |
| |
| From: Tilman Schmidt <tilman@imap.cc> |
| |
| commit a4304f2d5a3823deea894026ec95e43b33912357 upstream. |
| |
| 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> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/isdn/gigaset/interface.c | 19 +++++++------------ |
| 1 file changed, 7 insertions(+), 12 deletions(-) |
| |
| --- a/drivers/isdn/gigaset/interface.c |
| +++ b/drivers/isdn/gigaset/interface.c |
| @@ -408,33 +408,28 @@ static int if_write_room(struct tty_stru |
| 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); |