]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
struct file leakage
authorKirill Korotaev <dev@sw.ru>
Fri, 14 Jul 2006 07:23:49 +0000 (00:23 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 25 Jul 2006 03:35:28 +0000 (20:35 -0700)
2.6.16 leaks like hell. While testing, I found massive leakage
(reproduced in openvz) in:

*filp
*size-4096

And 1 object leaks in
*size-32
*size-64
*size-128

It is the fix for the first one.  filp leaks in the bowels of namei.c.

Seems, size-4096 is file table leaking in expand_fdtables.

I have no idea what are the rest and why they show only accompanying
another leaks.  Some debugging structs?

[akpm@osdl.org, Trond: remove the IS_ERR() check]
Signed-off-by: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/namei.c

index d6e2ee251736b4eb9bc692e4f0057af5633942c7..21be1248fb961c978c14c9d63948386aabe535f1 100644 (file)
@@ -1712,8 +1712,14 @@ do_link:
        if (error)
                goto exit_dput;
        error = __do_follow_link(&path, nd);
-       if (error)
+       if (error) {
+               /* Does someone understand code flow here? Or it is only
+                * me so stupid? Anathema to whoever designed this non-sense
+                * with "intent.open".
+                */
+               release_open_intent(nd);
                return error;
+       }
        nd->flags &= ~LOOKUP_PARENT;
        if (nd->last_type == LAST_BIND)
                goto ok;