]> git.karo-electronics.de Git - karo-tx-linux.git/commit
perf_event: switch to internal refcount, fix race with close()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Aug 2012 13:34:57 +0000 (09:34 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 22 Aug 2012 21:29:30 +0000 (17:29 -0400)
commit342f138c09259da7785b2519648016f7d3fdb6df
treed50f1d6246847709c49e25e21998a16433a07573
parentab833f409645551695b0fdf7ecde1c0879af8d68
perf_event: switch to internal refcount, fix race with close()

Don't mess with file refcounts (or keep a reference to file, for
that matter) in perf_event.  Use explicit refcount of its own
instead.  Deal with the race between the final reference to event
going away and new children getting created for it by use of
atomic_long_inc_not_zero() in inherit_event(); just have the
latter free what it had allocated and return NULL, that works
out just fine (children of siblings of something doomed are
created as singletons, same as if the child of leader had been
created and immediately killed).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
include/linux/perf_event.h
kernel/events/core.c