diff options
| -rw-r--r-- | configure.ac | 5 | ||||
| -rw-r--r-- | libglusterfs/src/Makefile.am | 4 | ||||
| -rw-r--r-- | libglusterfs/src/timer.c | 25 | ||||
| -rw-r--r-- | libglusterfs/src/timer.h | 4 | ||||
| -rw-r--r-- | libglusterfs/src/timespec.c | 68 | ||||
| -rw-r--r-- | libglusterfs/src/timespec.h | 24 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 23 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heald.c | 5 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 4 | ||||
| -rw-r--r-- | xlators/features/quiesce/src/quiesce.c | 8 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 5 | ||||
| -rw-r--r-- | xlators/nfs/server/src/nlm4.c | 4 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 12 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.c | 10 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.h | 2 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server.c | 10 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server.h | 2 | 
17 files changed, 154 insertions, 61 deletions
diff --git a/configure.ac b/configure.ac index 2ea5937ada6..b8cb855a01c 100644 --- a/configure.ac +++ b/configure.ac @@ -569,9 +569,13 @@ if test "x${have_linkat}" = "xyes"; then  fi  AC_SUBST(HAVE_LINKAT) +dnl check for Monotonic clock +AC_CHECK_FUNC([clock_gettime], [has_monotonic_clock=yes], AC_CHECK_LIB([rt], [clock_gettime], , AC_MSG_WARN([System doesn't have monotonic clock using contrib]))) +  dnl Check for argp  AC_CHECK_HEADER([argp.h], AC_DEFINE(HAVE_ARGP, 1, [have argp]))  AC_CONFIG_SUBDIRS(argp-standalone) +  BUILD_ARGP_STANDALONE=no  if test "x${ac_cv_header_argp_h}" = "xno"; then     BUILD_ARGP_STANDALONE=yes @@ -653,7 +657,6 @@ fi  case $host_os in       linux*) -     dnl        GF_LINUX_HOST_OS=1          GF_HOST_OS="GF_LINUX_HOST_OS"          GF_CFLAGS="${ARGP_STANDALONE_CPPFLAGS} -O0"          GF_GLUSTERFS_CFLAGS="${GF_CFLAGS}" diff --git a/libglusterfs/src/Makefile.am b/libglusterfs/src/Makefile.am index 65ff2654827..2f2ab97697b 100644 --- a/libglusterfs/src/Makefile.am +++ b/libglusterfs/src/Makefile.am @@ -15,7 +15,7 @@ CONTRIB_BUILDDIR = $(top_builddir)/contrib  libglusterfs_la_SOURCES = dict.c xlator.c logging.c \  	hashfn.c defaults.c common-utils.c timer.c inode.c call-stub.c \  	compat.c fd.c compat-errno.c event.c mem-pool.c gf-dirent.c syscall.c \ -	iobuf.c globals.c statedump.c stack.c checksum.c daemon.c \ +	iobuf.c globals.c statedump.c stack.c checksum.c daemon.c timespec.c \  	$(CONTRIBDIR)/rbtree/rb.c rbthash.c store.c latency.c \  	graph.c $(CONTRIBDIR)/uuid/clear.c $(CONTRIBDIR)/uuid/copy.c \  	$(CONTRIBDIR)/uuid/gen_uuid.c $(CONTRIBDIR)/uuid/pack.c \ @@ -33,7 +33,7 @@ nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c gf-error-codes.h  BUILT_SOURCES = graph.lex.c -noinst_HEADERS = common-utils.h defaults.h dict.h glusterfs.h hashfn.h \ +noinst_HEADERS = common-utils.h defaults.h dict.h glusterfs.h hashfn.h timespec.h \  	logging.h xlator.h stack.h timer.h list.h inode.h call-stub.h compat.h \  	fd.h revision.h compat-errno.h event.h mem-pool.h byte-order.h \  	gf-dirent.h locking.h syscall.h iobuf.h globals.h statedump.h \ diff --git a/libglusterfs/src/timer.c b/libglusterfs/src/timer.c index 97a746b91d7..0ad6ea59fc2 100644 --- a/libglusterfs/src/timer.c +++ b/libglusterfs/src/timer.c @@ -17,19 +17,18 @@  #include "logging.h"  #include "common-utils.h"  #include "globals.h" - -#define TS(tv) ((((unsigned long long) tv.tv_sec) * 1000000) + (tv.tv_usec)) +#include "timespec.h"  gf_timer_t *  gf_timer_call_after (glusterfs_ctx_t *ctx, -                     struct timeval delta, +                     struct timespec delta,                       gf_timer_cbk_t callbk,                       void *data)  {          gf_timer_registry_t *reg = NULL;          gf_timer_t *event = NULL;          gf_timer_t *trav = NULL; -        unsigned long long at = 0L; +        uint64_t at = 0;          if (ctx == NULL)          { @@ -48,10 +47,8 @@ gf_timer_call_after (glusterfs_ctx_t *ctx,          if (!event) {                  return NULL;          } -        gettimeofday (&event->at, NULL); -        event->at.tv_usec = ((event->at.tv_usec + delta.tv_usec) % 1000000); -        event->at.tv_sec += ((event->at.tv_usec + delta.tv_usec) / 1000000); -        event->at.tv_sec += delta.tv_sec; +        timespec_now (&event->at); +        timespec_adjust_delta (event->at, delta);          at = TS (event->at);          event->callbk = callbk;          event->data = data; @@ -127,7 +124,7 @@ void *  gf_timer_proc (void *ctx)  {          gf_timer_registry_t *reg = NULL; -	const struct timespec sleepts = {.tv_sec = 1, .tv_nsec = 0, }; +        const struct timespec sleepts = {.tv_sec = 1, .tv_nsec = 0, };          if (ctx == NULL)          { @@ -142,14 +139,14 @@ gf_timer_proc (void *ctx)          }          while (!reg->fin) { -                unsigned long long now; -                struct timeval now_tv; +                uint64_t now; +                struct timespec now_ts;                  gf_timer_t *event = NULL; -                gettimeofday (&now_tv, NULL); -                now = TS (now_tv); +                timespec_now (&now_ts); +                now = TS (now_ts);                  while (1) { -                        unsigned long long at; +                        uint64_t at;                          char need_cbk = 0;                          pthread_mutex_lock (®->lock); diff --git a/libglusterfs/src/timer.h b/libglusterfs/src/timer.h index 2954f6aff5d..2f963adbf55 100644 --- a/libglusterfs/src/timer.h +++ b/libglusterfs/src/timer.h @@ -25,7 +25,7 @@ typedef void (*gf_timer_cbk_t) (void *);  struct _gf_timer {          struct _gf_timer *next, *prev; -        struct timeval    at; +        struct timespec    at;          gf_timer_cbk_t    callbk;          void             *data;          xlator_t         *xl; @@ -44,7 +44,7 @@ typedef struct _gf_timer_registry gf_timer_registry_t;  gf_timer_t *  gf_timer_call_after (glusterfs_ctx_t *ctx, -                     struct timeval delta, +                     struct timespec delta,                       gf_timer_cbk_t cbk,                       void *data); diff --git a/libglusterfs/src/timespec.c b/libglusterfs/src/timespec.c new file mode 100644 index 00000000000..0df74e61c20 --- /dev/null +++ b/libglusterfs/src/timespec.c @@ -0,0 +1,68 @@ +/* +  Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com> +  This file is part of GlusterFS. + +  This file is licensed to you under your choice of the GNU Lesser +  General Public License, version 3 or any later version (LGPLv3 or +  later), or the GNU General Public License, version 2 (GPLv2), in all +  cases as published by the Free Software Foundation. +*/ + +#include <stdio.h> +#include <inttypes.h> +#if defined GF_LINUX_HOST_OS || defined GF_SOLARIS_HOST_OS || defined GF_BSD_HOST_OS +#include <time.h> +#include <sys/time.h> +#endif + +#if defined GF_DARWIN_HOST_OS +#include <mach/mach_time.h> +#endif + +#include "logging.h" +#include "time.h" + + +void tv2ts (struct timeval tv, struct timespec *ts) +{ +        ts->tv_sec  = tv.tv_sec; +        ts->tv_nsec = tv.tv_usec * 1000; +} + +void timespec_now (struct timespec *ts) +{ +#if defined GF_LINUX_HOST_OS || defined GF_SOLARIS_HOST_OS || defined GF_BSD_HOST_OS + +        if (0 == clock_gettime(CLOCK_MONOTONIC, ts)) +                return; +        else { +                struct timeval tv; +                if (0 == gettimeofday(&tv, NULL)) +                        tv2ts(tv, ts); +        } +#elif defined GF_DARWIN_HOST_OS +        mach_timebase_info_data_t tb = { 0 }; +        static double timebase = 0.0; +        uint64_t time = 0; +        mach_timebase_info (&tb); + +        timebase *= info.numer; +        timebase /= info.denom; + +        time = mach_absolute_time(); +        time *= timebase; + +        ts->tv_sec = (time * NANO); +        ts->tv_nsec = (time - (ts.tv_sec * GIGA)); + +#endif /* Platform verification */ +        gf_log_callingfn ("timer", GF_LOG_DEBUG, "%"PRIu64".%09"PRIu64, +                          ts->tv_sec, ts->tv_nsec); +} + +void timespec_adjust_delta (struct timespec ts, struct timespec delta) +{ +        ts.tv_nsec = ((ts.tv_nsec + delta.tv_nsec) % 1000000000); +        ts.tv_sec += ((ts.tv_nsec + delta.tv_nsec) / 1000000000); +        ts.tv_sec += delta.tv_sec; +} diff --git a/libglusterfs/src/timespec.h b/libglusterfs/src/timespec.h new file mode 100644 index 00000000000..c584c82c092 --- /dev/null +++ b/libglusterfs/src/timespec.h @@ -0,0 +1,24 @@ +/* +  Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com> +  This file is part of GlusterFS. + +  This file is licensed to you under your choice of the GNU Lesser +  General Public License, version 3 or any later version (LGPLv3 or +  later), or the GNU General Public License, version 2 (GPLv2), in all +  cases as published by the Free Software Foundation. +*/ + +#ifndef __INCLUDE_TIMESPEC_H__ +#define __INCLUDE_TIMESPEC_H__ + +#include <stdint.h> + +#define TS(ts)  ((ts.tv_sec * 1000000000LL) + ts.tv_nsec) +#define NANO (+1.0E-9) +#define GIGA UINT64_C(1000000000) + +void tv2ts (struct timeval tv, struct timespec *ts); +void timespec_now (struct timespec *ts); +void timespec_adjust_delta (struct timespec ts, struct timespec delta); + +#endif /*  __INCLUDE_TIMESPEC_H__ */ diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index b1d004aa869..9ff712f02d0 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -145,7 +145,7 @@ call_bail (void *data)          struct saved_frame    *trav = NULL;          struct saved_frame    *tmp = NULL;          char                   frame_sent[256] = {0,}; -        struct timeval         timeout = {0,}; +        struct timespec        timeout = {0,};          struct iovec           iov = {0,};          GF_VALIDATE_OR_GOTO ("client", data, out); @@ -163,7 +163,7 @@ call_bail (void *data)                     call-once timer */                  if (conn->timer) {                          timeout.tv_sec = 10; -                        timeout.tv_usec = 0; +                        timeout.tv_nsec = 0;                          gf_timer_call_cancel (clnt->ctx, conn->timer);                          conn->timer = gf_timer_call_after (clnt->ctx, @@ -226,7 +226,7 @@ __save_frame (struct rpc_clnt *rpc_clnt, call_frame_t *frame,                struct rpc_req *rpcreq)  {          rpc_clnt_connection_t *conn        = NULL; -        struct timeval         timeout     = {0, }; +        struct timespec        timeout     = {0, };          struct saved_frame    *saved_frame = NULL;          conn = &rpc_clnt->conn; @@ -240,7 +240,7 @@ __save_frame (struct rpc_clnt *rpc_clnt, call_frame_t *frame,          /* TODO: make timeout configurable */          if (conn->timer == NULL) {                  timeout.tv_sec  = 10; -                timeout.tv_usec = 0; +                timeout.tv_nsec = 0;                  conn->timer = gf_timer_call_after (rpc_clnt->ctx,                                                     timeout,                                                     call_bail, @@ -397,7 +397,7 @@ rpc_clnt_reconnect (void *trans_ptr)  {          rpc_transport_t         *trans = NULL;          rpc_clnt_connection_t   *conn  = NULL; -        struct timeval           tv    = {0, 0}; +        struct timespec          ts    = {0, 0};          int32_t                  ret   = 0;          struct rpc_clnt         *clnt  = NULL; @@ -416,14 +416,15 @@ rpc_clnt_reconnect (void *trans_ptr)                  conn->reconnect = 0;                  if (conn->connected == 0) { -                        tv.tv_sec = 3; +                        ts.tv_sec = 3; +                        ts.tv_nsec = 0;                          gf_log (trans->name, GF_LOG_TRACE,                                  "attempting reconnect");                          ret = rpc_transport_connect (trans,                                                       conn->config.remote_port);                          conn->reconnect = -                                gf_timer_call_after (clnt->ctx, tv, +                                gf_timer_call_after (clnt->ctx, ts,                                                       rpc_clnt_reconnect,                                                       trans);                  } else { @@ -831,7 +832,7 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,          int                     ret         = -1;          rpc_request_info_t     *req_info    = NULL;          rpc_transport_pollin_t *pollin      = NULL; -        struct timeval          tv          = {0, }; +        struct timespec         ts          = {0, };          conn = mydata;          if (conn == NULL) { @@ -850,10 +851,11 @@ rpc_clnt_notify (rpc_transport_t *trans, void *mydata,                  {                          if (!conn->rpc_clnt->disabled                              && (conn->reconnect == NULL)) { -                                tv.tv_sec = 10; +                                ts.tv_sec = 10; +                                ts.tv_nsec = 0;                                  conn->reconnect = -                                        gf_timer_call_after (clnt->ctx, tv, +                                        gf_timer_call_after (clnt->ctx, ts,                                                               rpc_clnt_reconnect,                                                               conn->trans);                          } @@ -1695,4 +1697,3 @@ rpc_clnt_reconfig (struct rpc_clnt *rpc, struct rpc_clnt_config *config)                  rpc->conn.config.remote_host = gf_strdup (config->remote_host);          }  } - diff --git a/xlators/cluster/afr/src/afr-self-heald.c b/xlators/cluster/afr/src/afr-self-heald.c index 877f2f394bf..1b48a1bcaae 100644 --- a/xlators/cluster/afr/src/afr-self-heald.c +++ b/xlators/cluster/afr/src/afr-self-heald.c @@ -991,7 +991,7 @@ afr_poll_self_heal (void *data)  {          afr_private_t    *priv = NULL;          afr_self_heald_t *shd = NULL; -        struct timeval   timeout = {0}; +        struct timespec  timeout = {0};          xlator_t         *this = NULL;          long             child = (long)data;          gf_timer_t       *old_timer = NULL; @@ -1015,7 +1015,7 @@ afr_poll_self_heal (void *data)          if (shd->enabled && (shd->pos[child] == AFR_POS_LOCAL))                  _do_self_heal_on_subvol (this, child, INDEX);          timeout.tv_sec = shd->timeout; -        timeout.tv_usec = 0; +        timeout.tv_nsec = 0;          //notify and previous timer should be synchronized.          LOCK (&priv->lock);          { @@ -1785,4 +1785,3 @@ afr_set_root_gfid (dict_t *dict)          return ret;  } - diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index 0b91f466e11..20306e46924 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -1699,7 +1699,7 @@ afr_delayed_changelog_post_op (xlator_t *this, call_frame_t *frame, fd_t *fd,  {  	afr_fd_ctx_t      *fd_ctx = NULL;  	call_frame_t      *prev_frame = NULL; -	struct timeval     delta = {0, }; +	struct timespec    delta = {0, };  	afr_private_t     *priv = NULL;  	afr_local_t       *local = NULL; @@ -1710,7 +1710,7 @@ afr_delayed_changelog_post_op (xlator_t *this, call_frame_t *frame, fd_t *fd,                  goto out;  	delta.tv_sec = priv->post_op_delay_secs; -	delta.tv_usec = 0; +	delta.tv_nsec = 0;  	pthread_mutex_lock (&fd_ctx->delay_lock);  	{ diff --git a/xlators/features/quiesce/src/quiesce.c b/xlators/features/quiesce/src/quiesce.c index 73eb919477b..24c7dc6ed31 100644 --- a/xlators/features/quiesce/src/quiesce.c +++ b/xlators/features/quiesce/src/quiesce.c @@ -111,7 +111,7 @@ void  gf_quiesce_enqueue (xlator_t *this, call_stub_t *stub)  {          quiesce_priv_t *priv    = NULL; -        struct timeval  timeout = {0,}; +        struct timespec timeout = {0,};          priv = this->private;          if (!priv) { @@ -129,7 +129,7 @@ gf_quiesce_enqueue (xlator_t *this, call_stub_t *stub)          if (!priv->timer) {                  timeout.tv_sec = 20; -                timeout.tv_usec = 0; +                timeout.tv_nsec = 0;                  priv->timer = gf_timer_call_after (this->ctx,                                                     timeout, @@ -2492,7 +2492,7 @@ notify (xlator_t *this, int event, void *data, ...)  {          int             ret     = 0;          quiesce_priv_t *priv    = NULL; -        struct timeval  timeout = {0,}; +        struct timespec timeout = {0,};          priv = this->private;          if (!priv) @@ -2525,7 +2525,7 @@ notify (xlator_t *this, int event, void *data, ...)                  if (priv->timer)                          break;                  timeout.tv_sec = 20; -                timeout.tv_usec = 0; +                timeout.tv_nsec = 0;                  priv->timer = gf_timer_call_after (this->ctx,                                                     timeout, diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 06e7fc7180c..ed12fb8efca 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -3002,7 +3002,7 @@ static int32_t  glusterd_op_start_rb_timer (dict_t *dict)  {          int32_t         op = 0; -        struct timeval  timeout = {0, }; +        struct timespec timeout = {0, };          glusterd_conf_t *priv = NULL;          int32_t         ret = -1;          dict_t          *rb_ctx = NULL; @@ -3023,7 +3023,7 @@ glusterd_op_start_rb_timer (dict_t *dict)          }          timeout.tv_sec  = 5; -        timeout.tv_usec = 0; +        timeout.tv_nsec = 0;          rb_ctx = dict_copy (dict, rb_ctx); @@ -5893,4 +5893,3 @@ glusterd_op_sm_init ()          pthread_mutex_init (&gd_op_sm_lock, NULL);          return 0;  } - diff --git a/xlators/nfs/server/src/nlm4.c b/xlators/nfs/server/src/nlm4.c index 70f5c0815ee..3a92515b50e 100644 --- a/xlators/nfs/server/src/nlm4.c +++ b/xlators/nfs/server/src/nlm4.c @@ -2365,7 +2365,7 @@ nlm4svc_init(xlator_t *nfsx)          int ret = -1;          char *portstr = NULL;          pthread_t thr; -        struct timeval timeout = {0,}; +        struct timespec timeout = {0,};          FILE   *pidfile = NULL;          pid_t   pid     = -1; @@ -2469,6 +2469,8 @@ nlm4svc_init(xlator_t *nfsx)          pthread_create (&thr, NULL, nsm_thread, (void*)NULL);          timeout.tv_sec = nlm_grace_period; +        timeout.tv_nsec = 0; +          gf_timer_call_after (nfsx->ctx, timeout, nlm_grace_period_over, NULL);          return &nlm4prog;  err: diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index adf53f15ea8..5668fea5329 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -53,7 +53,7 @@ rpc_client_ping_timer_expired (void *data)          rpc_clnt_connection_t   *conn               = NULL;          int                      disconnect         = 0;          int                      transport_activity = 0; -        struct timeval           timeout            = {0, }; +        struct timespec          timeout            = {0, };          struct timeval           current            = {0, };          struct rpc_clnt         *clnt               = NULL;          xlator_t                *this               = NULL; @@ -101,7 +101,7 @@ rpc_client_ping_timer_expired (void *data)                                  "ping timer expired but transport activity "                                  "detected - not bailing transport");                          timeout.tv_sec = conf->opt.ping_timeout; -                        timeout.tv_usec = 0; +                        timeout.tv_nsec = 0;                          conn->ping_timer =                                  gf_timer_call_after (this->ctx, timeout, @@ -140,7 +140,7 @@ client_start_ping (void *data)          clnt_conf_t             *conf        = NULL;          rpc_clnt_connection_t   *conn        = NULL;          int32_t                  ret         = -1; -        struct timeval           timeout     = {0, }; +        struct timespec          timeout     = {0, };          call_frame_t            *frame       = NULL;          int                      frame_count = 0; @@ -196,7 +196,7 @@ client_start_ping (void *data)                  }                  timeout.tv_sec = conf->opt.ping_timeout; -                timeout.tv_usec = 0; +                timeout.tv_nsec = 0;                  conn->ping_timer =                          gf_timer_call_after (this->ctx, timeout, @@ -241,7 +241,7 @@ client_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,  {          xlator_t              *this    = NULL;          rpc_clnt_connection_t *conn    = NULL; -        struct timeval         timeout = {0, }; +        struct timespec        timeout = {0, };          call_frame_t          *frame   = NULL;          clnt_conf_t           *conf    = NULL; @@ -281,7 +281,7 @@ client_ping_cbk (struct rpc_req *req, struct iovec *iov, int count,                  timeout.tv_sec  = conf->opt.ping_timeout; -                timeout.tv_usec = 0; +                timeout.tv_nsec = 0;                  gf_timer_call_cancel (this->ctx,                                        conn->ping_timer); diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index aa2b8eef8e5..7703c6e8fba 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -130,7 +130,7 @@ client_register_grace_timer (xlator_t *this, clnt_conf_t *conf)                          conf->grace_timer =                                  gf_timer_call_after (this->ctx, -                                                     conf->grace_tv, +                                                     conf->grace_ts,                                                       client_grace_timeout,                                                       conf->rpc);                  } @@ -2414,14 +2414,14 @@ client_init_grace_timer (xlator_t *this, dict_t *options,          ret = dict_get_int32 (options, "grace-timeout", &grace_timeout);          if (!ret) -                conf->grace_tv.tv_sec = grace_timeout; +                conf->grace_ts.tv_sec = grace_timeout;          else -                conf->grace_tv.tv_sec = 10; +                conf->grace_ts.tv_sec = 10; -        conf->grace_tv.tv_usec  = 0; +        conf->grace_ts.tv_nsec  = 0;          gf_log (this->name, GF_LOG_DEBUG, "Client grace timeout " -                "value = %"PRIu64, conf->grace_tv.tv_sec); +                "value = %"PRIu64, conf->grace_ts.tv_sec);          ret = 0;  out: diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 37ba264ce38..afab2d74fe8 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -104,7 +104,7 @@ typedef struct clnt_conf {          uint16_t               lk_version; /* this variable is used to distinguish                                                client-server transaction while                                                performing lock healing */ -        struct timeval         grace_tv; +        struct timespec        grace_ts;          gf_timer_t            *grace_timer;          gf_boolean_t           grace_timer_needed; /* The state of this flag will                                                        be used to decide whether diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index aa091e2e5a0..7e6e2c0915b 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -537,7 +537,7 @@ server_rpc_notify (rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,                                  client->server_ctx.grace_timer =                                          gf_timer_call_after (this->ctx, -                                                             conf->grace_tv, +                                                             conf->grace_ts,                                                               grace_time_handler,                                                               client);                          } @@ -639,14 +639,14 @@ server_init_grace_timer (xlator_t *this, dict_t *options,          ret = dict_get_int32 (options, "grace-timeout", &grace_timeout);          if (!ret) -                conf->grace_tv.tv_sec = grace_timeout; +                conf->grace_ts.tv_sec = grace_timeout;          else -                conf->grace_tv.tv_sec = 10; +                conf->grace_ts.tv_sec = 10;          gf_log (this->name, GF_LOG_DEBUG, "Server grace timeout " -                "value = %"PRIu64, conf->grace_tv.tv_sec); +                "value = %"PRIu64, conf->grace_ts.tv_sec); -        conf->grace_tv.tv_usec  = 0; +        conf->grace_ts.tv_nsec  = 0;          ret = 0;  out: diff --git a/xlators/protocol/server/src/server.h b/xlators/protocol/server/src/server.h index 6675d5b1a16..3238f6f40e2 100644 --- a/xlators/protocol/server/src/server.h +++ b/xlators/protocol/server/src/server.h @@ -51,7 +51,7 @@ struct server_conf {                                              heal is on else off. */          char                   *conf_dir;          struct _volfile_ctx    *volfile; -        struct timeval          grace_tv; +        struct timespec         grace_ts;          dict_t                 *auth_modules;          pthread_mutex_t         mutex;          struct list_head        xprt_list;  | 
