Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 134306
b: refs/heads/master
c: ff491a7
h: refs/heads/master
v: v3
  • Loading branch information
Pablo Neira Ayuso authored and David S. Miller committed Feb 6, 2009
1 parent 0febce9 commit e705f36
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 49 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 612e244c12215f6f74973ea3b89bff96450dc530
refs/heads/master: ff491a7334acfd74e515c896632e37e401f52676
6 changes: 1 addition & 5 deletions trunk/drivers/acpi/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,7 @@ int acpi_bus_generate_netlink_event(const char *device_class,
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;
}

Expand Down
16 changes: 4 additions & 12 deletions trunk/drivers/scsi/scsi_transport_fc.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,12 +533,8 @@ fc_host_post_event(struct Scsi_Host *shost, u32 event_number,
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:
Expand Down Expand Up @@ -607,12 +603,8 @@ fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number,
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:
Expand Down
12 changes: 2 additions & 10 deletions trunk/drivers/scsi/scsi_transport_iscsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -966,15 +966,7 @@ iscsi_if_transport_lookup(struct iscsi_transport *tt)
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
Expand Down Expand Up @@ -1207,7 +1199,7 @@ int iscsi_session_event(struct iscsi_cls_session *session,
* 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",
Expand Down
5 changes: 4 additions & 1 deletion trunk/drivers/video/uvesafb.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,11 @@ static int uvesafb_exec(struct uvesafb_ktask *task)
} 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,
Expand Down
5 changes: 1 addition & 4 deletions trunk/fs/dquot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1057,10 +1057,7 @@ static void send_warning(const struct dquot *dquot, const char warntype)
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");
Expand Down
3 changes: 3 additions & 0 deletions trunk/lib/kobject_uevent.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,9 @@ int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
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;
}
Expand Down
8 changes: 6 additions & 2 deletions trunk/net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -950,6 +950,7 @@ struct netlink_broadcast_data {
u32 pid;
u32 group;
int failure;
int delivery_failure;
int congested;
int delivered;
gfp_t allocation;
Expand Down Expand Up @@ -999,6 +1000,7 @@ static inline int do_one_broadcast(struct sock *sk,
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;
Expand All @@ -1025,6 +1027,7 @@ int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
info.pid = pid;
info.group = group;
info.failure = 0;
info.delivery_failure = 0;
info.congested = 0;
info.delivered = 0;
info.allocation = allocation;
Expand All @@ -1045,13 +1048,14 @@ int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, u32 pid,
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);
Expand Down
9 changes: 3 additions & 6 deletions trunk/net/wimax/op-msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,19 +258,16 @@ EXPORT_SYMBOL_GPL(wimax_msg_len);
*/
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;
might_sleep();

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);

Expand Down
12 changes: 4 additions & 8 deletions trunk/net/wimax/stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,16 +163,12 @@ int wimax_gnl_re_state_change_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);
Expand Down

0 comments on commit e705f36

Please sign in to comment.