[PATCH] per-task delay accounting: avoid send without listeners
Don't send taskstats (per-pid or per-tgid) on thread exit when no one is listening for such data. Currently the taskstats interface allocates a structure, fills it in and calls netlink to send out per-pid and per-tgid stats regardless of whether a userspace listener for the data exists (netlink layer would check for that and avoid the multicast). As a result of this patch, the check for the no-listener case is performed early, avoiding the redundant allocation and filling up of the taskstats structures. Signed-off-by: Balbir Singh <balbir@in.ibm.com> Signed-off-by: Shailabh Nagar <nagar@watson.ibm.com> Cc: Jay Lan <jlan@engr.sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
9e06d3f9f6
commit
c8924363da
1 changed files with 12 additions and 1 deletions
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <linux/taskstats.h>
|
||||
#include <linux/sched.h>
|
||||
#include <net/genetlink.h>
|
||||
|
||||
enum {
|
||||
TASKSTATS_MSG_UNICAST, /* send data only to requester */
|
||||
|
@ -19,9 +20,19 @@ enum {
|
|||
extern kmem_cache_t *taskstats_cache;
|
||||
extern struct mutex taskstats_exit_mutex;
|
||||
|
||||
static inline int taskstats_has_listeners(void)
|
||||
{
|
||||
if (!genl_sock)
|
||||
return 0;
|
||||
return netlink_has_listeners(genl_sock, TASKSTATS_LISTEN_GROUP);
|
||||
}
|
||||
|
||||
|
||||
static inline void taskstats_exit_alloc(struct taskstats **ptidstats)
|
||||
{
|
||||
*ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
|
||||
*ptidstats = NULL;
|
||||
if (taskstats_has_listeners())
|
||||
*ptidstats = kmem_cache_zalloc(taskstats_cache, SLAB_KERNEL);
|
||||
}
|
||||
|
||||
static inline void taskstats_exit_free(struct taskstats *tidstats)
|
||||
|
|
Loading…
Reference in a new issue