X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=lib%2Fkobject_uevent.c;h=920a3ca6e2590ddc3d64950a729441758d0a5ce5;hb=2864697cefb6e7596e39aef933b4131f6c9fa9e1;hp=ca215bc2329a6fdf38fe901808f6cb013f26fddd;hpb=c65b9145f40da99cad000f81823265dc70e5fcf9;p=safe%2Fjmp%2Flinux-2.6 diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index ca215bc..920a3ca 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c @@ -118,6 +118,13 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, kset = top_kobj->kset; uevent_ops = kset->uevent_ops; + /* skip the event, if uevent_suppress is set*/ + if (kobj->uevent_suppress) { + pr_debug("kobject: '%s' (%p): %s: uevent_suppress " + "caused the event to drop!\n", + kobject_name(kobj), kobj, __func__); + return 0; + } /* skip the event, if the filter returns zero. */ if (uevent_ops && uevent_ops->filter) if (!uevent_ops->filter(kset, kobj)) { @@ -225,8 +232,13 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action, } NETLINK_CB(skb).dst_group = 1; - netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); - } + retval = netlink_broadcast(uevent_sock, skb, 0, 1, + GFP_KERNEL); + /* ENOBUFS should be handled in userspace */ + if (retval == -ENOBUFS) + retval = 0; + } else + retval = -ENOMEM; } #endif @@ -316,7 +328,7 @@ static int __init kobject_uevent_init(void) "kobject_uevent: unable to create netlink socket!\n"); return -ENODEV; } - + netlink_set_nonroot(NETLINK_KOBJECT_UEVENT, NL_NONROOT_RECV); return 0; }