From d7077bca4b372a056d23416294e729637e9af94e Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Wed, 1 Feb 2017 15:17:51 +0530 Subject: rpc/socket.c : Bonnie++ hangs during rewrites in ganesha + SSL Problem: Bonnie++ rewrite operation hangs in ganesha + SSL environment Solution: Bonnie++ hangs during execution of rewrite operation in ganesha + SSL environment.It was hanged due to blocking on poll call in ssl_do because no POLLOUT event was getting on socket. Socket is not getting POLLOUT event because all other threads are waiting to get lock and lock is not released ssl_do because it is not getting any event on poll.To correct it update the condition in ssl_do as same in getting error SSL_ERROR_WANT_READ. Test: To test the patch followed below procedure 1) Setup 2X2 Ganesha + SSL environment. 2) Run bonnie from 3 nfs client parallely 3) After run "Rewwrite operation" by bonnie it is hanged. 4) After apply the patch it is not hanged. BUG: 1418213 Change-Id: I5985cbbc4cfdac5d287268d791e31c274abc3c8d Signed-off-by: Mohit Agrawal Reviewed-on: https://review.gluster.org/16501 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Jeff Darcy CentOS-regression: Gluster Build System Reviewed-by: Vijay Bellur --- rpc/rpc-transport/socket/src/socket.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'rpc') diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index b8815773f41..4b1505c4eef 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -263,6 +263,11 @@ ssl_do (rpc_transport_t *this, void *buf, size_t len, SSL_trinary_func *func) } break; case SSL_ERROR_WANT_WRITE: + if ((func == (SSL_trinary_func *)SSL_read) + || (func == (SSL_trinary_func *) SSL_write)) { + errno = EAGAIN; + return r; + } pfd.fd = priv->sock; pfd.events = POLLOUT; if (poll(&pfd,1,-1) < 0) { -- cgit