You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The original struct rds_ib_work_ring was implemented using double set
of counters / pointers for the consumer and producer of the ring. It
is complicated and error prone, due to the compilers ability to
re-order execution of the statements and moderns CPUs ability to
re-order execution. Hence, use only a single set of free-running
counters and use only atomic ops, which do not rely on explicit memory
barriers.
Without this commit, we will encounter the following BUG_ON() running
uek7/ga (v5.15.0-0.30.9) on ARM:
kernel BUG at net/rds/ib_send.c:886!
Internal error: Oops - BUG: 0 [#1] SMP
[]
rds_ib_xmit+0xa1c/0xb70 [rds_rdma]
rds_send_xmit+0x4a0/0xd50 [rds]
rds_sendmsg+0xe7c/0xfa0 [rds]
sock_sendmsg+0x74/0x80
____sys_sendmsg+0x270/0x29c
___sys_sendmsg+0xb0/0x118
__sys_sendmsg+0x90/0x104
__arm64_sys_sendmsg+0x30/0x50
invoke_syscall+0x50/0x15c
The bug may also manifest itself as:
kernel: RDS/IB: ib_post_send to ::ffff:192.168.0.4 returned -22
or as:
kernel: RDS/IB: rds_ib_send_unmap_op: unexpected opcode 0xdead in WR!
Orabug: 34137460
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Fixes: f528efe ("RDS/IB: Ring-handling code.")
Tested-by: Gerald Gibson <gerald.gibson@oracle.com>
Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com>
0 commit comments