[PATCH] new tty buffering access fix

From: Paul Fulghum
Date: Wed Jan 11 2006 - 18:50:39 EST



Fix typos in new tty buffering that incorrectly
access and update buffers in pending queue.

Signed-off-by: Paul Fulghum <paulkf@xxxxxxxxxxxxx>
Acked-by: Alan Cox <alan@xxxxxxxxxx>


--- linux-2.6.15/drivers/char/tty_io.c 2006-01-11 16:22:10.000000000 -0600
+++ linux-2.6.15-mg/drivers/char/tty_io.c 2006-01-11 16:21:52.000000000 -0600
@@ -312,7 +312,7 @@ static struct tty_buffer *tty_buffer_fin

int tty_buffer_request_room(struct tty_struct *tty, size_t size)
{
- struct tty_buffer *b = tty->buf.head, *n;
+ struct tty_buffer *b = tty->buf.tail, *n;
int left = 0;

/* OPTIMISATION: We could keep a per tty "zero" sized buffer to
@@ -326,7 +326,6 @@ int tty_buffer_request_room(struct tty_s
n = tty_buffer_find(tty, size);
if(n == NULL)
return left;
- n->next = b;
if(b != NULL)
b->next = n;
else
@@ -2751,6 +2750,8 @@ static void flush_to_ldisc(void *private
spin_lock_irqsave(&tty->read_lock, flags);
while((tbuf = tty->buf.head) != NULL) {
tty->buf.head = tbuf->next;
+ if (tty->buf.head == NULL)
+ tty->buf.tail = NULL;
spin_unlock_irqrestore(&tty->read_lock, flags);
/* printk("Process buffer %p for %d\n", tbuf, tbuf->used); */
disc->receive_buf(tty, tbuf->char_buf_ptr,
@@ -2759,7 +2760,6 @@ static void flush_to_ldisc(void *private
spin_lock_irqsave(&tty->read_lock, flags);
tty_buffer_free(tty, tbuf);
}
- tty->buf.tail = NULL;
spin_unlock_irqrestore(&tty->read_lock, flags);
out:
tty_ldisc_deref(disc);



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/