Skip to content

Commit

Permalink
[CONNECTOR]: Use netlink_has_listeners() to avoind unnecessary alloca…
Browse files Browse the repository at this point in the history
…tions.

Return -ESRCH from cn_netlink_send() when there are not listeners,
just as it could be done by netlink_broadcast().  Propagate
netlink_broadcast() error back to the caller.

Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Evgeniy Polyakov authored and David S. Miller committed Mar 21, 2006
1 parent 0ac81ae commit b191ba0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
5 changes: 3 additions & 2 deletions Documentation/connector/connector.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,11 @@ Unregisters new callback with connector core.

struct cb_id *id - unique connector's user identifier.

void cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask);
int cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask);

Sends message to the specified groups. It can be safely called from
any context, but may silently fail under strong memory pressure.
softirq context, but may silently fail under strong memory pressure.
If there are no listeners for given group -ESRCH can be returned.

struct cn_msg * - message header(with attached data).
u32 __group - destination group.
Expand Down
7 changes: 4 additions & 3 deletions drivers/connector/connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ int cn_netlink_send(struct cn_msg *msg, u32 __group, gfp_t gfp_mask)
group = __group;
}

if (!netlink_has_listeners(dev->nls, group))
return -ESRCH;

size = NLMSG_SPACE(sizeof(*msg) + msg->len);

skb = alloc_skb(size, gfp_mask);
Expand All @@ -111,9 +114,7 @@ int cn_netlink_send(struct cn_msg *msg, u32 __group, gfp_t gfp_mask)

NETLINK_CB(skb).dst_group = group;

netlink_broadcast(dev->nls, skb, 0, group, gfp_mask);

return 0;
return netlink_broadcast(dev->nls, skb, 0, group, gfp_mask);

nlmsg_failure:
kfree_skb(skb);
Expand Down

0 comments on commit b191ba0

Please sign in to comment.