X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fn_tty.c;h=b9371d5bf7906b48d4b340c5a8756c3fa132f516;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=603b9ade5eb089f16f041fc15e4876417a6c1505;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c index 603b9ade5..b9371d5bf 100644 --- a/drivers/char/n_tty.c +++ b/drivers/char/n_tty.c @@ -1132,7 +1132,7 @@ static inline int input_available_p(struct tty_struct *tty, int amt) * buffer, and once to drain the space from the (physical) beginning of * the buffer to head pointer. * - * Called under the tty->atomic_read_lock sem + * Called under the tty->atomic_read_lock sem and with TTY_DONT_FLIP set * */ @@ -1271,6 +1271,7 @@ do_it_again: } add_wait_queue(&tty->read_wait, &wait); + set_bit(TTY_DONT_FLIP, &tty->flags); while (nr) { /* First test for status change. */ if (tty->packet && tty->link->ctrl_status) { @@ -1314,7 +1315,9 @@ do_it_again: break; } n_tty_set_room(tty); + clear_bit(TTY_DONT_FLIP, &tty->flags); timeout = schedule_timeout(timeout); + set_bit(TTY_DONT_FLIP, &tty->flags); continue; } __set_current_state(TASK_RUNNING); @@ -1391,6 +1394,7 @@ do_it_again: if (time) timeout = time; } + clear_bit(TTY_DONT_FLIP, &tty->flags); mutex_unlock(&tty->atomic_read_lock); remove_wait_queue(&tty->read_wait, &wait);