diff options
author | Mohit Agrawal <moagrawa@redhat.com> | 2017-02-01 15:17:51 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2017-02-02 12:33:45 -0500 |
commit | db713127b7d2920ce98999143a502b6f554e9cff (patch) | |
tree | 2d6ce518a78ad87a73b8ea8dfc8d72a529f5f630 /rpc | |
parent | c10507ce75547a7a7899fbf36be650ddc89ba467 (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>
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 5 |
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) { |