summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohit Agrawal <moagrawa@redhat.com>2017-02-01 15:17:51 +0530
committerShyamsundar Ranganathan <srangana@redhat.com>2017-02-02 12:33:45 -0500
commitdb713127b7d2920ce98999143a502b6f554e9cff (patch)
tree2d6ce518a78ad87a73b8ea8dfc8d72a529f5f630
parentc10507ce75547a7a7899fbf36be650ddc89ba467 (diff)
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 <moagrawa@redhat.com> > Reviewed-on: https://review.gluster.org/16501 > Smoke: Gluster Build System <jenkins@build.gluster.org> > NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> > Reviewed-by: Jeff Darcy <jdarcy@redhat.com> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Vijay Bellur <vbellur@redhat.com> > (cherry picked from commit d7077bca4b372a056d23416294e729637e9af94e) Change-Id: Id029c71382025477bb5ff31f28ec537e4fe58b03 BUG: 1418541 Reviewed-on: https://review.gluster.org/16513 Tested-by: MOHIT AGRAWAL <moagrawa@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
-rw-r--r--rpc/rpc-transport/socket/src/socket.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index e214c772aa6..b128be30603 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) {