diff options
-rw-r--r-- | libglusterfs/src/event-epoll.c | 4 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 14 | ||||
-rwxr-xr-x | tests/basic/ec/nfs.t | 23 |
3 files changed, 28 insertions, 13 deletions
diff --git a/libglusterfs/src/event-epoll.c b/libglusterfs/src/event-epoll.c index a8e9a08b93d..62085dbef10 100644 --- a/libglusterfs/src/event-epoll.c +++ b/libglusterfs/src/event-epoll.c @@ -335,7 +335,7 @@ event_register_epoll (struct event_pool *event_pool, int fd, LOCK (&slot->lock); { - /* make epoll edge triggered and 'singleshot', which + /* make epoll 'singleshot', which means we need to re-add the fd with epoll_ctl(EPOLL_CTL_MOD) after delivery of every single event. This assures us that while a poller @@ -344,7 +344,7 @@ event_register_epoll (struct event_pool *event_pool, int fd, time as well. */ - slot->events = EPOLLPRI | EPOLLET | EPOLLONESHOT; + slot->events = EPOLLPRI | EPOLLONESHOT; slot->handler = handler; slot->data = data; diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index a7e2bb0cfdf..2b61eb417d2 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -2263,16 +2263,9 @@ socket_event_poll_in (rpc_transport_t *this) rpc_transport_pollin_t *pollin = NULL; socket_private_t *priv = this->private; - do { - /* consume all we can, this is our only chance - (Edge Triggered polling in epoll) - */ - pollin = NULL; - ret = socket_proto_state_machine (this, &pollin); - - if (!pollin) - break; + ret = socket_proto_state_machine (this, &pollin); + if (pollin) { priv->ot_state = OT_CALLBACK; ret = rpc_transport_notify (this, RPC_TRANSPORT_MSG_RECEIVED, pollin); @@ -2280,8 +2273,7 @@ socket_event_poll_in (rpc_transport_t *this) priv->ot_state = OT_RUNNING; } rpc_transport_pollin_destroy (pollin); - - } while (pollin); + } return ret; } diff --git a/tests/basic/ec/nfs.t b/tests/basic/ec/nfs.t new file mode 100755 index 00000000000..b826296d58b --- /dev/null +++ b/tests/basic/ec/nfs.t @@ -0,0 +1,23 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../nfs.rc + +cleanup + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 redundancy 2 $H0:$B0/${V0}{0..5} +EXPECT "Created" volinfo_field $V0 'Status' +TEST $CLI volume start $V0 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "Started" volinfo_field $V0 'Status' + +EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available; +TEST mount_nfs $H0:/$V0 $N0 nolock + +TEST dd if=/dev/zero of=$N0/test bs=1024k count=1k + +## Before killing daemon to avoid deadlocks +EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" umount_nfs $N0 + +cleanup |