diff options
author | Andrew Morton <akpm@osdl.org> | 2005-10-23 12:57:18 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-23 16:38:39 -0700 |
commit | 8d3b35914aa54232b27e6a2b57d84092aadc5e86 (patch) | |
tree | 809be8fad6743a751964677e68c5c01af3198e4b /include/linux/idr.h | |
parent | c0fef676bbd75e711711ed3ff5bebb7bfd1bdb00 (diff) | |
download | op-kernel-dev-8d3b35914aa54232b27e6a2b57d84092aadc5e86.zip op-kernel-dev-8d3b35914aa54232b27e6a2b57d84092aadc5e86.tar.gz |
[PATCH] inotify/idr leak fix
Fix a bug which was reported and diagnosed by
Stefan Jones <stefan.jones@churchillrandoms.co.uk>
IDR trees include a cache of idr_layer objects. There's no way to destroy
this cache, so when we discard an overall idr tree we end up leaking some
memory.
Add and use idr_destroy() for this. v9fs and infiniband also need to use
idr_destroy() to avoid leaks.
Or, we make the cache global, like radix_tree_preload(). Which is probably
better. Later.
Cc: Eric Van Hensbergen <ericvh@ericvh.myip.org>
Cc: Roland Dreier <rolandd@cisco.com>
Cc: Robert Love <rml@novell.com>
Cc: John McCutchan <ttb@tentacle.dhs.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/idr.h')
-rw-r--r-- | include/linux/idr.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/idr.h b/include/linux/idr.h index ca3b7e4..3d5de45 100644 --- a/include/linux/idr.h +++ b/include/linux/idr.h @@ -75,4 +75,5 @@ int idr_pre_get(struct idr *idp, unsigned gfp_mask); int idr_get_new(struct idr *idp, void *ptr, int *id); int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id); void idr_remove(struct idr *idp, int id); +void idr_destroy(struct idr *idp); void idr_init(struct idr *idp); |