--- 2.2.19/drivers/char/tty_io.c~ Sun Mar 25 17:31:24 2001 +++ 2.2.19/drivers/char/tty_io.c Mon Dec 3 23:31:43 2001 @@ -667,9 +667,17 @@ struct inode *inode = file->f_dentry->d_inode; up(&inode->i_sem); - if (down_interruptible(&tty->atomic_write)) { - down(&inode->i_sem); - return -ERESTARTSYS; + if (file->f_flags & O_NONBLOCK) { + if (down_trylock(&tty->atomic_write)) { + down(&inode->i_sem); + return -EAGAIN; + } + } + else { + if (down_interruptible(&tty->atomic_write)) { + down(&inode->i_sem); + return -ERESTARTSYS; + } } if ( test_bit(TTY_NO_WRITE_SPLIT, &tty->flags) ) written = write(tty, file, buf, count);