Searched hist:"95503 d295ad6af20f09efff193e085481a962fd2" (Results 1 – 3 of 3) sorted by relevance
/openbmc/linux/net/sunrpc/xprtrdma/ |
H A D | svc_rdma_rw.c | diff 95503d295ad6af20f09efff193e085481a962fd2 Fri Jan 11 14:36:40 CST 2019 J. Bruce Fields <bfields@redhat.com> svcrpc: fix unlikely races preventing queueing of sockets
In the rpc server, When something happens that might be reason to wake up a thread to do something, what we do is
- modify xpt_flags, sk_sock->flags, xpt_reserved, or xpt_nr_rqsts to indicate the new situation - call svc_xprt_enqueue() to decide whether to wake up a thread.
svc_xprt_enqueue may require multiple conditions to be true before queueing up a thread to handle the xprt. In the SMP case, one of the other CPU's may have set another required condition, and in that case, although both CPUs run svc_xprt_enqueue(), it's possible that neither call sees the writes done by the other CPU in time, and neither one recognizes that all the required conditions have been set. A socket could therefore be ignored indefinitely.
Add memory barries to ensure that any svc_xprt_enqueue() call will always see the conditions changed by other CPUs before deciding to ignore a socket.
I've never seen this race reported. In the unlikely event it happens, another event will usually come along and the problem will fix itself. So I don't think this is worth backporting to stable.
Chuck tried this patch and said "I don't see any performance regressions, but my server has only a single last-level CPU cache."
Tested-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
|
H A D | svc_rdma_recvfrom.c | diff 95503d295ad6af20f09efff193e085481a962fd2 Fri Jan 11 14:36:40 CST 2019 J. Bruce Fields <bfields@redhat.com> svcrpc: fix unlikely races preventing queueing of sockets
In the rpc server, When something happens that might be reason to wake up a thread to do something, what we do is
- modify xpt_flags, sk_sock->flags, xpt_reserved, or xpt_nr_rqsts to indicate the new situation - call svc_xprt_enqueue() to decide whether to wake up a thread.
svc_xprt_enqueue may require multiple conditions to be true before queueing up a thread to handle the xprt. In the SMP case, one of the other CPU's may have set another required condition, and in that case, although both CPUs run svc_xprt_enqueue(), it's possible that neither call sees the writes done by the other CPU in time, and neither one recognizes that all the required conditions have been set. A socket could therefore be ignored indefinitely.
Add memory barries to ensure that any svc_xprt_enqueue() call will always see the conditions changed by other CPUs before deciding to ignore a socket.
I've never seen this race reported. In the unlikely event it happens, another event will usually come along and the problem will fix itself. So I don't think this is worth backporting to stable.
Chuck tried this patch and said "I don't see any performance regressions, but my server has only a single last-level CPU cache."
Tested-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
|
/openbmc/linux/net/sunrpc/ |
H A D | svc_xprt.c | diff 95503d295ad6af20f09efff193e085481a962fd2 Fri Jan 11 14:36:40 CST 2019 J. Bruce Fields <bfields@redhat.com> svcrpc: fix unlikely races preventing queueing of sockets
In the rpc server, When something happens that might be reason to wake up a thread to do something, what we do is
- modify xpt_flags, sk_sock->flags, xpt_reserved, or xpt_nr_rqsts to indicate the new situation - call svc_xprt_enqueue() to decide whether to wake up a thread.
svc_xprt_enqueue may require multiple conditions to be true before queueing up a thread to handle the xprt. In the SMP case, one of the other CPU's may have set another required condition, and in that case, although both CPUs run svc_xprt_enqueue(), it's possible that neither call sees the writes done by the other CPU in time, and neither one recognizes that all the required conditions have been set. A socket could therefore be ignored indefinitely.
Add memory barries to ensure that any svc_xprt_enqueue() call will always see the conditions changed by other CPUs before deciding to ignore a socket.
I've never seen this race reported. In the unlikely event it happens, another event will usually come along and the problem will fix itself. So I don't think this is worth backporting to stable.
Chuck tried this patch and said "I don't see any performance regressions, but my server has only a single last-level CPU cache."
Tested-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
|