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: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
863299001b
commit
feacbecb39
|
@ -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)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue