linux/net/tipc
Jon Maloy 908344cdda tipc: fix bug in multicast congestion handling
One aim of commit 50100a5e39 ("tipc:
use pseudo message to wake up sockets after link congestion") was
to handle link congestion abatement in a uniform way for both unicast
and multicast transmit. However, the latter doesn't work correctly,
and has been broken since the referenced commit was applied.

If a user now sends a burst of multicast messages that is big
enough to cause broadcast link congestion, it will be put to sleep,
and not be waked up when the congestion abates as it should be.

This has two reasons. First, the flag that is used, TIPC_WAKEUP_USERS,
is set correctly, but in the wrong field. Instead of setting it in the
'action_flags' field of the arrival node struct, it is by mistake set
in the dummy node struct that is owned by the broadcast link, where it
will never tested for. Second, we cannot use the same flag for waking
up unicast and multicast users, since the function tipc_node_unlock()
needs to pick the wakeup pseudo messages to deliver from different
queues. It must hence be able to distinguish between the two cases.

This commit solves this problem by adding a new flag
TIPC_WAKEUP_BCAST_USERS, and a new function tipc_bclink_wakeup_user().
The latter is to be called by tipc_node_unlock() when the named flag,
now set in the correct field, is encountered.

v2: using explicit 'unsigned int' declaration instead of 'uint', as
per comment from David Miller.

Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-10-07 14:50:15 -04:00
..
addr.c tipc: compress out gratuitous extra carriage returns 2012-04-30 15:53:56 -04:00
addr.h tipc: explicitly include core.h in addr.h 2014-02-13 17:49:13 -05:00
bcast.c tipc: fix bug in multicast congestion handling 2014-10-07 14:50:15 -04:00
bcast.h tipc: fix bug in multicast congestion handling 2014-10-07 14:50:15 -04:00
bearer.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
bearer.h tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
config.c tipc: use registry when scanning sockets 2014-08-23 11:18:34 -07:00
config.h tipc: obsolete the remote management feature 2014-03-27 13:08:36 -04:00
core.c tipc: remove files ref.h and ref.c 2014-08-23 11:18:35 -07:00
core.h tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00
discover.c tipc: clean up neigbor discovery message reception 2014-05-14 15:19:48 -04:00
discover.h tipc: fix race in disc create/delete 2014-04-22 21:17:53 -04:00
eth_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
ib_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
Kconfig tipc: add InfiniBand media type 2013-04-17 14:18:33 -04:00
link.c tipc: remove include file port.h 2014-08-23 11:18:35 -07:00
link.h tipc: use pseudo message to wake up sockets after link congestion 2014-08-23 11:18:33 -07:00
log.c tipc: remove print_buf and deprecated log buffer code 2012-07-13 19:34:43 -04:00
Makefile tipc: remove files ref.h and ref.c 2014-08-23 11:18:35 -07:00
msg.c tipc: use pseudo message to wake up sockets after link congestion 2014-08-23 11:18:33 -07:00
msg.h tipc: use pseudo message to wake up sockets after link congestion 2014-08-23 11:18:33 -07:00
name_distr.c tipc: fix sparse warnings 2014-09-10 14:00:58 -07:00
name_distr.h tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00
name_table.c tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00
name_table.h tipc: cosmetic realignment of function arguments 2013-06-17 15:53:01 -07:00
net.c tipc: remove include file port.h 2014-08-23 11:18:35 -07:00
net.h tipc: same receive code path for connection protocol and data messages 2014-06-27 12:50:56 -07:00
netlink.c net: Use netlink_ns_capable to verify the permisions of netlink messages 2014-04-24 13:44:54 -04:00
node_subscr.c tipc: eliminate case of writing to freed memory 2014-06-27 12:50:54 -07:00
node_subscr.h tipc: avoid to asynchronously notify subscriptions 2014-05-05 17:26:44 -04:00
node.c tipc: fix bug in multicast congestion handling 2014-10-07 14:50:15 -04:00
node.h tipc: fix bug in multicast congestion handling 2014-10-07 14:50:15 -04:00
server.c net: Fix use after free by removing length arg from sk_data_ready callbacks. 2014-04-11 16:15:36 -04:00
server.h tipc: remove all enabled flags from all tipc components 2014-02-22 00:00:15 -05:00
socket.c tipc: fix a potential oops 2014-08-29 20:22:43 -07:00
socket.h tipc: merge struct tipc_port into struct tipc_sock 2014-08-23 11:18:35 -07:00
subscr.c tipc: remove include file port.h 2014-08-23 11:18:35 -07:00
subscr.h tipc: cosmetic realignment of function arguments 2013-06-17 15:53:01 -07:00
sysctl.c tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00