summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-12-05 19:12:47 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-10 01:23:50 +0100
commit74099b18b8db0670484e0caeb3425fb29ff3144e (patch)
treea50f4085ab7e8d04936a886c7a4f6a535a32ed5d /lib
parentdrivers: hv: Don't OOPS when you cannot init vmbus (diff)
downloadlinux-74099b18b8db0670484e0caeb3425fb29ff3144e.tar.xz
linux-74099b18b8db0670484e0caeb3425fb29ff3144e.zip
driver-core: skip uevent generation when nobody is listening
Most network namespaces unlikely have listeners to uevents, and should benefit from skipping all the string copies. Cc: Eric Biederman <ebiederm@xmission.com> Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/kobject_uevent.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c
index ad72a03ce5e9..e66e9b632617 100644
--- a/lib/kobject_uevent.c
+++ b/lib/kobject_uevent.c
@@ -259,6 +259,9 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
struct sk_buff *skb;
size_t len;
+ if (!netlink_has_listeners(uevent_sock, 1))
+ continue;
+
/* allocate message with the maximum possible size */
len = strlen(action_string) + strlen(devpath) + 2;
skb = alloc_skb(len + env->buflen, GFP_KERNEL);