n_tty: Merge .receive_buf() flavors
authorPeter Hurley <peter@hurleysoftware.com>
Mon, 2 Dec 2013 19:24:41 +0000 (14:24 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Dec 2013 00:51:07 +0000 (16:51 -0800)
N_TTY's direct and flow-controlled flavors of the .receive_buf()
method are nearly identical; fold together.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/n_tty.c

index 0f74945af624962266803ce242ef10509906a6a4..cf22bef62c98cb08b8e844a0b95b99ff189d3906 100644 (file)
@@ -1674,32 +1674,9 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
        }
 }
 
-static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
-                             char *fp, int count)
-{
-       int room, n;
-
-       down_read(&tty->termios_rwsem);
-
-       while (1) {
-               room = receive_room(tty);
-               n = min(count, room);
-               if (!n)
-                       break;
-               __receive_buf(tty, cp, fp, n);
-               cp += n;
-               if (fp)
-                       fp += n;
-               count -= n;
-       }
-
-       tty->receive_room = room;
-       n_tty_check_throttle(tty);
-       up_read(&tty->termios_rwsem);
-}
-
-static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
-                             char *fp, int count)
+static int
+n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
+                        char *fp, int count, int flow)
 {
        struct n_tty_data *ldata = tty->disc_data;
        int room, n, rcvd = 0;
@@ -1710,7 +1687,7 @@ static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
                room = receive_room(tty);
                n = min(count, room);
                if (!n) {
-                       if (!room)
+                       if (flow && !room)
                                ldata->no_room = 1;
                        break;
                }
@@ -1729,6 +1706,18 @@ static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
        return rcvd;
 }
 
+static void n_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
+                             char *fp, int count)
+{
+       n_tty_receive_buf_common(tty, cp, fp, count, 0);
+}
+
+static int n_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
+                             char *fp, int count)
+{
+       return n_tty_receive_buf_common(tty, cp, fp, count, 1);
+}
+
 int is_ignored(int sig)
 {
        return (sigismember(&current->blocked, sig) ||