return result;
        }
 
-       result =
-           genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC);
-       if (result)
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
-                                 "Failed to send a Genetlink message!\n"));
+       genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC);
        return 0;
 }
 
 
        event->event_code = event_code;
        event->event_data = event_data;
 
-       err = nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS,
-                             GFP_KERNEL);
-       if (err && (err != -ESRCH))     /* filter no recipient errors */
-               /* nlmsg_multicast already kfree_skb'd */
-               goto send_fail;
-
+       nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS,
+                       GFP_KERNEL);
        return;
 
 send_fail_skb:
        event->event_code = FCH_EVT_VENDOR_UNIQUE;
        memcpy(&event->event_data, data_buf, data_len);
 
-       err = nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS,
-                             GFP_KERNEL);
-       if (err && (err != -ESRCH))     /* filter no recipient errors */
-               /* nlmsg_multicast already kfree_skb'd */
-               goto send_vendor_fail;
-
+       nlmsg_multicast(scsi_nl_sock, skb, 0, SCSI_NL_GRP_FC_EVENTS,
+                       GFP_KERNEL);
        return;
 
 send_vendor_fail_skb:
 
 static int
 iscsi_broadcast_skb(struct sk_buff *skb, gfp_t gfp)
 {
-       int rc;
-
-       rc = netlink_broadcast(nls, skb, 0, 1, gfp);
-       if (rc < 0) {
-               printk(KERN_ERR "iscsi: can not broadcast skb (%d)\n", rc);
-               return rc;
-       }
-
-       return 0;
+       return netlink_broadcast(nls, skb, 0, 1, gfp);
 }
 
 static int
         * the user and when the daemon is restarted it will handle it
         */
        rc = iscsi_broadcast_skb(skb, GFP_KERNEL);
-       if (rc < 0)
+       if (rc == -ESRCH)
                iscsi_cls_session_printk(KERN_ERR, session,
                                         "Cannot notify userspace of session "
                                         "event %u. Check iscsi daemon\n",
 
                } else {
                        v86d_started = 1;
                        err = cn_netlink_send(m, 0, gfp_any());
+                       if (err == -ENOBUFS)
+                               err = 0;
                }
-       }
+       } else if (err == -ENOBUFS)
+               err = 0;
 
        if (!err && !(task->t.flags & TF_EXIT))
                err = !wait_for_completion_timeout(task->done,
 
                goto attr_err_out;
        genlmsg_end(skb, msg_head);
 
-       ret = genlmsg_multicast(skb, 0, quota_genl_family.id, GFP_NOFS);
-       if (ret < 0 && ret != -ESRCH)
-               printk(KERN_ERR
-                       "VFS: Failed to send notification message: %d\n", ret);
+       genlmsg_multicast(skb, 0, quota_genl_family.id, GFP_NOFS);
        return;
 attr_err_out:
        printk(KERN_ERR "VFS: Not enough space to compose quota message!\n");
 
                        NETLINK_CB(skb).dst_group = 1;
                        retval = netlink_broadcast(uevent_sock, skb, 0, 1,
                                                   GFP_KERNEL);
+                       /* ENOBUFS should be handled in userspace */
+                       if (retval == -ENOBUFS)
+                               retval = 0;
                } else
                        retval = -ENOMEM;
        }
 
        u32 pid;
        u32 group;
        int failure;
+       int delivery_failure;
        int congested;
        int delivered;
        gfp_t allocation;
                p->skb2 = NULL;
        } else if ((val = netlink_broadcast_deliver(sk, p->skb2)) < 0) {
                netlink_overrun(sk);
+               p->delivery_failure = 1;
        } else {
                p->congested |= val;
                p->delivered = 1;
        info.pid = pid;
        info.group = group;
        info.failure = 0;
+       info.delivery_failure = 0;
        info.congested = 0;
        info.delivered = 0;
        info.allocation = allocation;
        if (info.skb2)
                kfree_skb(info.skb2);
 
+       if (info.delivery_failure || info.failure)
+               return -ENOBUFS;
+
        if (info.delivered) {
                if (info.congested && (allocation & __GFP_WAIT))
                        yield();
                return 0;
        }
-       if (info.failure)
-               return -ENOBUFS;
        return -ESRCH;
 }
 EXPORT_SYMBOL(netlink_broadcast);
 
  */
 int wimax_msg_send(struct wimax_dev *wimax_dev, struct sk_buff *skb)
 {
-       int result;
        struct device *dev = wimax_dev->net_dev->dev.parent;
        void *msg = skb->data;
        size_t size = skb->len;
 
        d_printf(1, dev, "CTX: wimax msg, %zu bytes\n", size);
        d_dump(2, dev, msg, size);
-       result = genlmsg_multicast(skb, 0, wimax_gnl_mcg.id, GFP_KERNEL);
-       d_printf(1, dev, "CTX: genl multicast result %d\n", result);
-       if (result == -ESRCH)   /* Nobody connected, ignore it */
-               result = 0;     /* btw, the skb is freed already */
-       return result;
+       genlmsg_multicast(skb, 0, wimax_gnl_mcg.id, GFP_KERNEL);
+       d_printf(1, dev, "CTX: genl multicast done\n");
+       return 0;
 }
 EXPORT_SYMBOL_GPL(wimax_msg_send);
 
 
        struct device *dev = wimax_dev_to_dev(wimax_dev);
        d_fnstart(3, dev, "(wimax_dev %p report_skb %p)\n",
                  wimax_dev, report_skb);
-       if (report_skb == NULL)
+       if (report_skb == NULL) {
+               result = -ENOMEM;
                goto out;
-       genlmsg_end(report_skb, header);
-       result = genlmsg_multicast(report_skb, 0, wimax_gnl_mcg.id, GFP_KERNEL);
-       if (result == -ESRCH)   /* Nobody connected, ignore it */
-               result = 0;     /* btw, the skb is freed already */
-       if (result < 0) {
-               dev_err(dev, "RE_STCH: Error sending: %d\n", result);
-               nlmsg_free(report_skb);
        }
+       genlmsg_end(report_skb, header);
+       genlmsg_multicast(report_skb, 0, wimax_gnl_mcg.id, GFP_KERNEL);
 out:
        d_fnend(3, dev, "(wimax_dev %p report_skb %p) = %d\n",
                wimax_dev, report_skb, result);