]> www.infradead.org Git - users/jedix/linux-maple.git/commit
rds: fix list corruption and tx hang when netfilter is used
authorshamir rabinovitch <shamir.rabinovitch@oracle.com>
Sun, 21 Sep 2014 21:00:59 +0000 (00:00 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Wed, 8 Jul 2015 21:00:10 +0000 (14:00 -0700)
commit2864ecb83de9541296c309d32b4a82ca68c8e95d
treeecd43be808ad9686a3ae0d32984fdd15ef154e04
parentedca33be359cb000d3918683a230df06f61544dd
rds: fix list corruption and tx hang when netfilter is used

when rds netfilter enabled the below issues can happen and this
patch solve them:

1. rds socket rds-incoming list corruption. this issue happen when
the below code path is executed:
* rds_recv_incoming -> NF_HOOK { nf hook decide to send packet
to local and to origin } ->
* { send to local } -> rds_recv_local -> list_add_tail { rds-incoming
is queued on the rds socket rs_recv_queue list }
* { send to origin } -> rds_recv_route -> rds_recv_forward ->
{ rds_send_internal failed! } -> rds_recv_local -> list_add_tail
{ rds-incoming is queued on the rds socket rs_recv_queue list }
2. rds rx tasklet forced to tx the incoming packet and so is un able
to process acks from remote and free space in the rds sendbuf:
* rds_recv_incoming -> NF_HOOK { nf hook decide to send packet
to origin } -> rds_recv_route -> rds_recv_forward -> rds_send_internal ->
rds_send_xmit { rx tasklet now do the tx! }

Orabug: 18963548

Signed-off-by: shamir rabinovitch <shamir.rabinovitch@oracle.com>
Tested-by: jun yang <jun.yang@oracle.com>
Tested-by: denise iguma <denise.iguma@oracle.com>
Acked-by: chien yen <chien.yen@oracle.com>
Signed-off-by: Guangyu Sun <guangyu.sun@oracle.com>
(cherry picked from commit 61b5557dde8366245a58402f76d8e2d9f8a18b7d)
net/rds/recv.c
net/rds/send.c