diff options
| author | Jiri Slaby <[email protected]> | 2018-09-07 13:19:06 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2018-09-18 14:07:25 +0000 |
| commit | feacbecb39db098cd9f6d728dcb00d753a3f36ed (patch) | |
| tree | 843e7d9e2a9ee69accaf38ea8fb68d3418efbb40 /drivers/tty/tty_buffer.c | |
| parent | tty_port: Remove incorrect whitespace after comments (diff) | |
| download | kernel-feacbecb39db098cd9f6d728dcb00d753a3f36ed.tar.gz kernel-feacbecb39db098cd9f6d728dcb00d753a3f36ed.zip | |
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 <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/tty/tty_buffer.c')
| -rw-r--r-- | drivers/tty/tty_buffer.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c index c996b6859c5e..76151c002858 100644 --- a/drivers/tty/tty_buffer.c +++ b/drivers/tty/tty_buffer.c @@ -118,9 +118,12 @@ void tty_buffer_free_all(struct tty_port *port) struct tty_bufhead *buf = &port->buf; struct tty_buffer *p, *next; struct llist_node *llist; + unsigned int freed = 0; + int still_used; while ((p = buf->head) != NULL) { buf->head = p->next; + freed += p->size; if (p->size > 0) kfree(p); } @@ -132,7 +135,9 @@ void tty_buffer_free_all(struct tty_port *port) buf->head = &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); } /** |
