source: trunk/target/linux/generic/patches-2.6.39/911-kobject_add_broadcast_uevent.patch @ 26691

Last change on this file since 26691 was 26691, checked in by nbd, 6 years ago

kernel: reorganize 2.6.39 patches

File size: 2.1 KB
  • include/linux/kobject.h

    a b  
    3131#define UEVENT_NUM_ENVP                 32      /* number of env pointers */ 
    3232#define UEVENT_BUFFER_SIZE              2048    /* buffer for the variables */ 
    3333 
     34struct sk_buff; 
     35 
    3436/* path to the userspace helper executed on an event */ 
    3537extern char uevent_helper[]; 
    3638 
    int add_uevent_var(struct kobj_uevent_en 
    217219 
    218220int kobject_action_type(const char *buf, size_t count, 
    219221                        enum kobject_action *type); 
     222 
     223int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, 
     224                     gfp_t allocation); 
     225 
    220226#else 
    221227static inline int kobject_uevent(struct kobject *kobj, 
    222228                                 enum kobject_action action) 
    int add_uevent_var(struct kobj_uevent_en 
    233239static inline int kobject_action_type(const char *buf, size_t count, 
    234240                                      enum kobject_action *type) 
    235241{ return -EINVAL; } 
     242 
     243void kfree_skb(struct sk_buff *); 
     244 
     245static inline int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, 
     246                                   gfp_t allocation) 
     247{ 
     248        kfree_skb(skb); 
     249        return 0; 
     250} 
     251 
    236252#endif 
    237253 
    238254#endif /* _KOBJECT_H_ */ 
  • lib/kobject_uevent.c

    a b int add_uevent_var(struct kobj_uevent_en 
    377377EXPORT_SYMBOL_GPL(add_uevent_var); 
    378378 
    379379#if defined(CONFIG_NET) 
     380int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, 
     381                     gfp_t allocation) 
     382{ 
     383        struct uevent_sock *ue_sk; 
     384        int err = 0; 
     385 
     386        /* send netlink message */ 
     387        mutex_lock(&uevent_sock_mutex); 
     388        list_for_each_entry(ue_sk, &uevent_sock_list, list) { 
     389                struct sock *uevent_sock = ue_sk->sk; 
     390                struct sk_buff *skb2; 
     391 
     392                skb2 = skb_clone(skb, allocation); 
     393                if (!skb2) 
     394                        break; 
     395 
     396                err = netlink_broadcast(uevent_sock, skb2, pid, group, 
     397                                        allocation); 
     398                if (err) 
     399                        break; 
     400        } 
     401        mutex_unlock(&uevent_sock_mutex); 
     402 
     403        kfree_skb(skb); 
     404        return err; 
     405} 
     406#else 
     407int broadcast_uevent(struct sk_buff *skb, __u32 pid, __u32 group, 
     408                     gfp_t allocation) 
     409{ 
     410        kfree_skb(skb); 
     411        return 0; 
     412} 
     413#endif 
     414EXPORT_SYMBOL_GPL(broadcast_uevent); 
     415 
     416#if defined(CONFIG_NET) 
    380417static int uevent_net_init(struct net *net) 
    381418{ 
    382419        struct uevent_sock *ue_sk; 
Note: See TracBrowser for help on using the repository browser.