Commit feacbecb authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman

TTY: tty_buffer, warn on leaks

When we leak some tty buffer, warn about that. For that we need to
account the memory used also in the tty_buffer_free_all function. On
other locations, the accounting is handled correctly.

Note that we do not account the free list, as that was accounted in
tty_buffer_free before put on the free list.

I have been using this patch for ages, so let's see if anybody else
encounters any issues.
Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 86329900
...@@ -118,9 +118,12 @@ void tty_buffer_free_all(struct tty_port *port) ...@@ -118,9 +118,12 @@ void tty_buffer_free_all(struct tty_port *port)
struct tty_bufhead *buf = &port->buf; struct tty_bufhead *buf = &port->buf;
struct tty_buffer *p, *next; struct tty_buffer *p, *next;
struct llist_node *llist; struct llist_node *llist;
unsigned int freed = 0;
int still_used;
while ((p = buf->head) != NULL) { while ((p = buf->head) != NULL) {
buf->head = p->next; buf->head = p->next;
freed += p->size;
if (p->size > 0) if (p->size > 0)
kfree(p); kfree(p);
} }
...@@ -132,7 +135,9 @@ void tty_buffer_free_all(struct tty_port *port) ...@@ -132,7 +135,9 @@ void tty_buffer_free_all(struct tty_port *port)
buf->head = &buf->sentinel; buf->head = &buf->sentinel;
buf->tail = &buf->sentinel; buf->tail = &buf->sentinel;
atomic_set(&buf->mem_used, 0); still_used = atomic_xchg(&buf->mem_used, 0);
WARN(still_used != freed, "we still have not freed %d bytes!",
still_used - freed);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment