diff options
| author | Junaid <junaid@gluster.com> | 2011-03-25 01:39:12 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2011-03-26 06:45:29 -0700 | 
| commit | 3f6be7a12972684500d4357a170a3de4f452a63b (patch) | |
| tree | d7029dc23d8a7a40eb8989c38b1169e36aaf1349 | |
| parent | 2339b9e87e8e48df9b64ba016949a2f40b50324e (diff) | |
features/marker: Handle fop's gracefully when none of the feaures are enabled.
Signed-off-by: Junaid <junaid@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 2529 (Starting Gsync  causes ENOTCONN to glusterfs client)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2529
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 59 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota.h | 2 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker.c | 337 | 
3 files changed, 253 insertions, 145 deletions
diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index f7b397a5a84..8c4910a7709 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -146,7 +146,7 @@ mark_inode_undirty (call_frame_t *frame, void *cookie, xlator_t *this,          if (!dict)                  goto wind; -        ret = dict_get_bin (dict, priv->size_key, (void **) &size); +        ret = dict_get_bin (dict, QUOTA_SIZE_KEY, (void **) &size);          if (ret)                  goto wind; @@ -157,7 +157,7 @@ wind:          if (!newdict)                  goto err; -        ret = dict_set_int8 (newdict, priv->dirty_key, 0); +        ret = dict_set_int8 (newdict, QUOTA_DIRTY_KEY, 0);          if (ret)                  goto err; @@ -190,7 +190,7 @@ update_size_xattr (call_frame_t *frame, void *cookie, xlator_t *this,          int64_t         *size     = NULL;          int64_t         *delta    = NULL;          quota_local_t   *local    = NULL; -        marker_conf_t    *priv     = NULL; +        marker_conf_t   *priv     = NULL;          if (op_ret == -1)                  goto err; @@ -202,7 +202,7 @@ update_size_xattr (call_frame_t *frame, void *cookie, xlator_t *this,          local = frame->local; -        ret = dict_get_bin (dict, priv->size_key, (void **) &size); +        ret = dict_get_bin (dict, QUOTA_SIZE_KEY, (void **) &size);          if (!size)                  goto err; @@ -217,7 +217,7 @@ update_size_xattr (call_frame_t *frame, void *cookie, xlator_t *this,          new_dict = dict_new ();          if (!new_dict); -        ret = dict_set_bin (new_dict, priv->size_key, delta, 8); +        ret = dict_set_bin (new_dict, QUOTA_SIZE_KEY, delta, 8);          if (ret)                  goto err; @@ -235,7 +235,7 @@ err:          }          if (new_dict) -                dict_unref (dict); +                dict_unref (new_dict);          return 0;  } @@ -258,7 +258,7 @@ get_dirty_inode_size (call_frame_t *frame, xlator_t *this)                  goto err;          } -        ret = dict_set_int64 (dict, priv->size_key, 0); +        ret = dict_set_int64 (dict, QUOTA_SIZE_KEY, 0);          if (ret)                  goto err; @@ -537,7 +537,7 @@ check_if_still_dirty (call_frame_t *frame,                goto err;          } -        ret = dict_get_int8 (dict, priv->dirty_key, &dirty); +        ret = dict_get_int8 (dict, QUOTA_DIRTY_KEY, &dirty);          if (ret)                  goto err; @@ -593,7 +593,7 @@ get_dirty_xattr (call_frame_t *frame, void *cookie,                  goto err;          } -        ret = dict_set_int8 (xattr_req, priv->dirty_key, 0); +        ret = dict_set_int8 (xattr_req, QUOTA_DIRTY_KEY, 0);          if (ret)                  goto err; @@ -706,7 +706,7 @@ create_dirty_xattr (call_frame_t *frame, void *cookie, xlator_t *this,                  if (!newdict)                          goto err; -                ret = dict_set_int8 (newdict, priv->dirty_key, 0); +                ret = dict_set_int8 (newdict, QUOTA_DIRTY_KEY, 0);                  if (ret == -1)                          goto err; @@ -766,7 +766,7 @@ quota_set_inode_xattr (xlator_t *this, loc_t *loc)          if (loc->inode->ia_type == IA_IFDIR) {                  QUOTA_ALLOC_OR_GOTO (size, int64_t, ret, err); -                ret = dict_set_bin (dict, priv->size_key, size, 8); +                ret = dict_set_bin (dict, QUOTA_SIZE_KEY, size, 8);                  if (ret < 0)                          goto free_size;          } @@ -877,8 +877,6 @@ quota_inodelk_cbk (call_frame_t *frame, void *cookie,          int32_t         ret  = 0;          quota_local_t  *local = NULL; -        trap (); -          local = frame->local;          if (op_ret == -1 || local->err) { @@ -985,7 +983,7 @@ quota_mark_undirty (call_frame_t *frame,                  if (ret < 0)                          goto err; -                ret = dict_get_bin (dict, priv->size_key, (void **) &size); +                ret = dict_get_bin (dict, QUOTA_SIZE_KEY, (void **) &size);                  if (ret < 0)                          goto err; @@ -1002,7 +1000,7 @@ quota_mark_undirty (call_frame_t *frame,          if (!newdict)                  goto err; -        ret = dict_set_int8 (newdict, priv->dirty_key, 0); +        ret = dict_set_int8 (newdict, QUOTA_DIRTY_KEY, 0);          if (ret == -1)                  goto err; @@ -1071,7 +1069,7 @@ quota_update_parent_size (call_frame_t *frame,          *size = ntoh64 (local->delta); -        ret = dict_set_bin (newdict, priv->size_key, size, 8); +        ret = dict_set_bin (newdict, QUOTA_SIZE_KEY, size, 8);          if (ret < 0)                  goto err; @@ -1136,7 +1134,7 @@ quota_update_inode_contribution (call_frame_t *frame, void *cookie,          LOCK (&ctx->lock);          {                  if (local->loc.inode->ia_type == IA_IFDIR ) { -                        ret = dict_get_bin (dict, priv->size_key, +                        ret = dict_get_bin (dict, QUOTA_SIZE_KEY,                                              (void **) &size);                          if (ret < 0)                                  goto unlock; @@ -1241,7 +1239,7 @@ quota_fetch_child_size_and_contri (call_frame_t *frame, void *cookie,                  goto err;          if (local->loc.inode->ia_type == IA_IFDIR) { -                ret = dict_set_int64 (newdict, priv->size_key, 0); +                ret = dict_set_int64 (newdict, QUOTA_SIZE_KEY, 0);          }          GET_CONTRI_KEY (contri_key, local->contri->gfid, ret); @@ -1301,7 +1299,7 @@ quota_markdirty (call_frame_t *frame, void *cookie,                  goto err;          } -        ret = dict_set_int8 (dict, priv->dirty_key, 1); +        ret = dict_set_int8 (dict, QUOTA_DIRTY_KEY, 1);          if (ret == -1)                  goto err; @@ -1473,11 +1471,11 @@ inspect_directory_xattr (xlator_t *this,                  }          } -        ret = dict_get_bin (dict, priv->size_key, (void **) &size); +        ret = dict_get_bin (dict, QUOTA_SIZE_KEY, (void **) &size);          if (ret < 0)                  goto out; -        ret = dict_get_int8 (dict, priv->dirty_key, &dirty); +        ret = dict_get_int8 (dict, QUOTA_DIRTY_KEY, &dirty);          if (ret < 0)                  goto out; @@ -1611,13 +1609,13 @@ quota_req_xattr (xlator_t *this,                  goto out;  set_size: -        ret = dict_set_uint64 (dict, priv->size_key, 0); +        ret = dict_set_uint64 (dict, QUOTA_SIZE_KEY, 0);          if (ret < 0) {                  ret = -1;                  goto out;          } -        ret = dict_set_int8 (dict, priv->dirty_key, 0); +        ret = dict_set_int8 (dict, QUOTA_DIRTY_KEY, 0);          if (ret < 0) {                  ret = -1;                  goto out; @@ -1700,8 +1698,7 @@ reduce_parent_size (xlator_t *this, loc_t *loc)                  goto out;          } -        ret = quota_inode_loc_fill ((const char *) loc->parent->gfid, -                                    loc->parent, &local->parent_loc); +        ret = quota_inode_loc_fill (NULL, loc->parent, &local->parent_loc);          if (ret < 0)                  goto free_local; @@ -1715,7 +1712,7 @@ reduce_parent_size (xlator_t *this, loc_t *loc)          *size = hton64 (-contribution->contribution); -        ret = dict_set_bin (dict, priv->size_key, size, 8); +        ret = dict_set_bin (dict, QUOTA_SIZE_KEY, size, 8);          if (ret < 0)                  goto free_size; @@ -1748,18 +1745,8 @@ out:  int32_t  init_quota_priv (xlator_t *this)  { -        marker_conf_t  *priv    = NULL; - -        priv = this->private; -          strcpy (volname, "quota"); -        gf_asprintf (&priv->size_key, QUOTA_XATTR_PREFIX -                     ".%s.size", volname); - -        gf_asprintf (&priv->dirty_key, QUOTA_XATTR_PREFIX -                     ".%s.dirty", volname); -          return 0;  } diff --git a/xlators/features/marker/src/marker-quota.h b/xlators/features/marker/src/marker-quota.h index fdec1230fb8..4e2e480abaf 100644 --- a/xlators/features/marker/src/marker-quota.h +++ b/xlators/features/marker/src/marker-quota.h @@ -29,6 +29,8 @@  #include "marker-mem-types.h"  #define QUOTA_XATTR_PREFIX "trusted.glusterfs" +#define QUOTA_SIZE_KEY "trusted.glusterfs.quota.size" +#define QUOTA_DIRTY_KEY "trusted.glusterfs.quota.dirty"  #define CONTRIBUTION "contri"  #define VOL_NAME volname  #define CONTRI_KEY_MAX 512 diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 9fdca6aecec..044feeae747 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -394,7 +394,7 @@ marker_create_frame (xlator_t *this, marker_local_t *local)  }  int32_t -update_marks (xlator_t *this, marker_local_t *local) +marker_gsync_update_marks (xlator_t *this, marker_local_t *local)  {          marker_gettimeofday (local); @@ -416,7 +416,7 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t     *local   = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "error occurred " +                gf_log (this->name, GF_LOG_TRACE, "error occurred "                          "while Creating a file %s", strerror (op_errno));          } @@ -427,7 +427,7 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (mkdir, frame, op_ret, op_errno, inode,                               buf, preparent, postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -436,7 +436,7 @@ marker_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  quota_set_inode_xattr (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -450,6 +450,12 @@ marker_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -459,7 +465,7 @@ marker_mkdir (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_mkdir_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->mkdir, loc, mode, params); @@ -481,7 +487,7 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "error occurred " +                gf_log (this->name, GF_LOG_TRACE, "error occurred "                          "while Creating a file %s", strerror (op_errno));          } @@ -492,7 +498,7 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (create, frame, op_ret, op_errno, fd, inode, buf,                               preparent, postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -501,7 +507,7 @@ marker_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  quota_set_inode_xattr (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -515,6 +521,12 @@ marker_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -524,7 +536,7 @@ marker_create (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_create_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->create, loc, flags, mode, fd,                      params); @@ -545,7 +557,7 @@ marker_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t     *local   = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "error occurred " +                gf_log (this->name, GF_LOG_TRACE, "error occurred "                          "while write, %s", strerror (op_errno));          } @@ -555,7 +567,7 @@ marker_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, prebuf, postbuf); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -564,7 +576,7 @@ marker_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  initiate_quota_txn (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -583,6 +595,12 @@ marker_writev (call_frame_t *frame,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -592,7 +610,7 @@ marker_writev (call_frame_t *frame,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_writev_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->writev, fd, vector, count, offset,                      iobref); @@ -613,7 +631,7 @@ marker_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t     *local   = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "error occurred " +                gf_log (this->name, GF_LOG_TRACE, "error occurred "                          "rmdir %s", strerror (op_errno));          } @@ -624,7 +642,7 @@ marker_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (rmdir, frame, op_ret, op_errno, preparent,                               postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -633,7 +651,7 @@ marker_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  reduce_parent_size (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -645,6 +663,12 @@ marker_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -654,7 +678,7 @@ marker_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_rmdir_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->rmdir, loc, flags);          return 0; @@ -674,7 +698,7 @@ marker_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t     *local   = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, +                gf_log (this->name, GF_LOG_TRACE,                          "%s occurred in unlink", strerror (op_errno));          } @@ -685,7 +709,7 @@ marker_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, preparent,                               postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -694,7 +718,7 @@ marker_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  reduce_parent_size (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -706,6 +730,12 @@ marker_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -715,7 +745,7 @@ marker_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_unlink_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->unlink, loc);          return 0; @@ -736,7 +766,7 @@ marker_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "linking a file ", strerror (op_errno));          } @@ -747,7 +777,7 @@ marker_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (link, frame, op_ret, op_errno, inode, buf,                               preparent, postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -756,7 +786,7 @@ marker_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  initiate_quota_txn (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -768,6 +798,12 @@ marker_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -777,7 +813,7 @@ marker_link (call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc)          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_link_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->link, oldloc, newloc);          return 0; @@ -799,7 +835,7 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t	   *oplocal = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "renaming a file ", strerror (op_errno));          } @@ -813,7 +849,7 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          oplocal = local->oplocal;          local->oplocal = NULL; -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -826,8 +862,8 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (priv->feature_enabled & GF_GSYNC) {                  //update marks on oldpath -                update_marks (this, oplocal); -                update_marks (this, local); +                marker_gsync_update_marks (this, oplocal); +                marker_gsync_update_marks (this, local);          }  out:          marker_local_unref (local); @@ -842,6 +878,12 @@ marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          int32_t          ret     = 0;          marker_local_t  *local   = NULL;          marker_local_t	*oplocal = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -862,7 +904,7 @@ marker_rename (call_frame_t *frame, xlator_t *this, loc_t *oldloc,          ret = loc_copy (&oplocal->loc, oldloc);          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_rename_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->rename, oldloc, newloc);          return 0; @@ -883,7 +925,7 @@ marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "truncating a file ", strerror (op_errno));          } @@ -894,7 +936,7 @@ marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (truncate, frame, op_ret, op_errno, prebuf,                               postbuf); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -903,7 +945,7 @@ marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  initiate_quota_txn (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -916,6 +958,12 @@ marker_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -925,7 +973,7 @@ marker_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset)          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_truncate_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->truncate, loc, offset);          return 0; @@ -945,7 +993,7 @@ marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "truncating a file ", strerror (op_errno));          } @@ -956,7 +1004,7 @@ marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (ftruncate, frame, op_ret, op_errno, prebuf,                               postbuf); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -965,7 +1013,7 @@ marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  initiate_quota_txn (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -977,6 +1025,12 @@ marker_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -986,7 +1040,7 @@ marker_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset)          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_ftruncate_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->ftruncate, fd, offset);          return 0; @@ -1007,7 +1061,7 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_local_t     *local   = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "creating symlinks ", strerror (op_errno));          } @@ -1018,7 +1072,7 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (symlink, frame, op_ret, op_errno, inode, buf,                               preparent, postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; @@ -1027,7 +1081,7 @@ marker_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  initiate_quota_txn (this, &local->loc);          if (priv->feature_enabled & GF_GSYNC) -                update_marks (this, local); +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1040,6 +1094,12 @@ marker_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -1049,7 +1109,7 @@ marker_symlink (call_frame_t *frame, xlator_t *this, const char *linkpath,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_symlink_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->symlink, linkpath, loc, params);          return 0; @@ -1070,7 +1130,7 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "creating symlinks ", strerror (op_errno));          } @@ -1081,13 +1141,13 @@ marker_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, inode,                               buf, preparent, postparent); -        if (op_ret == -1) +        if (op_ret == -1 ||  local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1100,6 +1160,12 @@ marker_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -1109,7 +1175,7 @@ marker_mknod (call_frame_t *frame, xlator_t *this, loc_t *loc, mode_t mode,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_mknod_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->mknod, loc, mode, rdev, parms);          return 0; @@ -1189,7 +1255,7 @@ marker_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "creating symlinks ", strerror (op_errno));          } @@ -1199,13 +1265,13 @@ marker_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (setxattr, frame, op_ret, op_errno); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1218,6 +1284,12 @@ marker_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ret = call_from_sp_client_to_reset_tmfile (frame, this, dict);          if (ret == 0) @@ -1231,7 +1303,7 @@ marker_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_setxattr_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->setxattr, loc, dict, flags);          return 0; @@ -1250,7 +1322,7 @@ marker_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          marker_conf_t      *priv    = NULL;          if (op_ret == -1) { -                gf_log (this->name, GF_LOG_ERROR, "%s occured while " +                gf_log (this->name, GF_LOG_TRACE, "%s occured while "                          "creating symlinks ", strerror (op_errno));          } @@ -1260,13 +1332,13 @@ marker_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1279,6 +1351,12 @@ marker_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ret = call_from_sp_client_to_reset_tmfile (frame, this, dict);          if (ret == 0) @@ -1292,7 +1370,7 @@ marker_fsetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_fsetxattr_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->fsetxattr, fd, dict, flags);          return 0; @@ -1323,13 +1401,13 @@ marker_fsetattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (fsetattr, frame, op_ret, op_errno, statpre,                               statpost); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1343,6 +1421,12 @@ marker_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -1352,7 +1436,7 @@ marker_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_fsetattr_cbk, FIRST_CHILD (this),                      FIRST_CHILD (this)->fops->fsetattr, fd, stbuf, valid);          return 0; @@ -1383,13 +1467,13 @@ marker_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (setattr, frame, op_ret, op_errno, statpre,                               statpost); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1402,6 +1486,12 @@ marker_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -1411,7 +1501,7 @@ marker_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_setattr_cbk, FIRST_CHILD (this),                      FIRST_CHILD (this)->fops->setattr, loc, stbuf, valid);          return 0; @@ -1440,13 +1530,13 @@ marker_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (removexattr, frame, op_ret, op_errno); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          priv = this->private; -        if (priv->feature_enabled == GF_GSYNC) -                update_marks (this, local); +        if (priv->feature_enabled & GF_GSYNC) +                marker_gsync_update_marks (this, local);  out:          marker_local_unref (local); @@ -1459,6 +1549,12 @@ marker_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,  {          int32_t          ret   = 0;          marker_local_t  *local = NULL; +        marker_conf_t   *priv  = NULL; + +        priv = this->private; + +        if (priv->feature_enabled == 0) +                goto wind;          ALLOCATE_OR_GOTO (local, marker_local_t, err); @@ -1468,7 +1564,7 @@ marker_removexattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          if (ret == -1)                  goto err; - +wind:          STACK_WIND (frame, marker_removexattr_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->removexattr, loc, name);          return 0; @@ -1506,7 +1602,7 @@ marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,                               dict, postparent); -        if (op_ret == -1) +        if (op_ret == -1 || local == NULL)                  goto out;          if (priv->feature_enabled & GF_QUOTA) { @@ -1526,11 +1622,14 @@ marker_lookup (call_frame_t *frame, xlator_t *this,                 loc_t *loc, dict_t *xattr_req)  {          int32_t         ret     = 0; -        marker_conf_t  *priv    = NULL;          marker_local_t *local   = NULL; +        marker_conf_t  *priv    = NULL;          priv = this->private; +        if (priv->feature_enabled == 0) +                goto wind; +          ALLOCATE_OR_GOTO (local, marker_local_t, err);          MARKER_INIT_LOCAL (frame, local); @@ -1541,7 +1640,7 @@ marker_lookup (call_frame_t *frame, xlator_t *this,          if (priv->feature_enabled & GF_QUOTA)                  quota_req_xattr (this, loc, xattr_req); - +wind:          STACK_WIND (frame, marker_lookup_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->lookup, loc, xattr_req);          return 0; @@ -1572,19 +1671,15 @@ mem_acct_init (xlator_t *this)  int32_t -init_gsync_priv (xlator_t *this) +init_gsync_priv (xlator_t *this, dict_t *options)  { -        dict_t          *options = NULL;          data_t          *data    = NULL; -        int32_t          ret     = 0; +        int32_t          ret     = -1;          marker_conf_t   *priv    = NULL; -        if (!this) { -                ret = -1; -                goto out; -        } - -        options = this->options; +        GF_VALIDATE_OR_GOTO ("marker", this, out); +        GF_VALIDATE_OR_GOTO (this->name, options, out); +        GF_VALIDATE_OR_GOTO (this->name, this->private, out);          priv = this->private; @@ -1643,7 +1738,7 @@ out:  }  void -marker_priv_cleanup (xlator_t *this) +marker_gsync_priv_cleanup (xlator_t *this)  {          marker_conf_t *priv = NULL; @@ -1661,12 +1756,22 @@ marker_priv_cleanup (xlator_t *this)          if (priv->marker_xattr != NULL)                  GF_FREE (priv->marker_xattr); +out: +        return; +} -        if (priv->size_key != NULL) -                GF_FREE (priv->size_key); +void +marker_priv_cleanup (xlator_t *this) +{ +        marker_conf_t *priv = NULL; -        if (priv->dirty_key != NULL) -                GF_FREE (priv->dirty_key); +        GF_VALIDATE_OR_GOTO ("marker", this, out); + +        priv = (marker_conf_t *) this->private; + +        GF_VALIDATE_OR_GOTO (this->name, priv, out); + +        marker_gsync_priv_cleanup (this);          GF_FREE (priv);  out: @@ -1678,41 +1783,50 @@ reconfigure (xlator_t *this, dict_t *options)  {          int32_t         ret     = -1;          data_t         *data    = NULL; +        gf_boolean_t    flag    = _gf_false;          marker_conf_t  *priv    = NULL; -        GF_VALIDATE_OR_GOTO ("marker", this, err); -        GF_VALIDATE_OR_GOTO (this->name, options, err); +        GF_ASSERT (this); +        GF_ASSERT (this->private);          priv = this->private; -        GF_VALIDATE_OR_GOTO (this->name, priv, err);          priv->feature_enabled = 0; +        GF_VALIDATE_OR_GOTO (this->name, options, out); +          data = dict_get (options, "quota");          if (data) { -                if (strcmp (data->data, "on") == 0) { -                        priv->feature_enabled |= GF_QUOTA; +                ret = gf_string2boolean (data->data, &flag); +                if (ret == 0 && flag == _gf_true) {                          ret = init_quota_priv (this); -                        if (ret < 0) -                                goto err; +                        if (ret < 0) { +                                gf_log (this->name, GF_LOG_WARNING, +                                        "failed to initialize quota private"); +                        } else { +                                priv->feature_enabled |= GF_QUOTA; +                        }                  }          }          data = dict_get (options, "gsync");          if (data) { -                if (strcmp (data->data, "on") == 0) { -                        priv->feature_enabled |= GF_GSYNC; -                        ret = init_gsync_priv (this); -                        if (ret < 0) -                                goto err; +                ret = gf_string2boolean (data->data, &flag); +                if (ret == 0 && flag == _gf_true) { +                        marker_gsync_priv_cleanup (this); + +                        ret = init_gsync_priv (this, options); +                        if (ret < 0) { +                                gf_log (this->name, GF_LOG_WARNING, +                                        "failed to initialize gsync private, " +                                        "gsync xtime updation will fail"); +                        } else { +                                priv->feature_enabled |= GF_GSYNC; +                        }                  }          } - +out:          return 0; -err: -        marker_priv_cleanup (this); - -        return -1;  } @@ -1722,6 +1836,7 @@ init (xlator_t *this)          dict_t        *options = NULL;          data_t        *data    = NULL;          int32_t        ret     = 0; +        gf_boolean_t   flag    = _gf_false;          marker_conf_t *priv    = NULL;          if (!this->children) { @@ -1746,21 +1861,25 @@ init (xlator_t *this)          data = dict_get (options, "quota");          if (data) { -                if (strcmp (data->data, "on") == 0) { -                        priv->feature_enabled |= GF_QUOTA; +                ret = gf_string2boolean (data->data, &flag); +                if (ret == 0 && flag == _gf_true) {                          ret = init_quota_priv (this);                          if (ret < 0)                                  goto err; + +                        priv->feature_enabled |= GF_QUOTA;                  }          }          data = dict_get (options, "gsync");          if (data) { -                if (strcmp (data->data, "on") == 0) { -                        priv->feature_enabled |= GF_GSYNC; -                        ret = init_gsync_priv (this); +                ret = gf_string2boolean (data->data, &flag); +                if (ret == 0 && flag == _gf_true) { +                        ret = init_gsync_priv (this, options);                          if (ret < 0)                                  goto err; + +                        priv->feature_enabled |= GF_GSYNC;                  }          } @@ -1776,7 +1895,7 @@ marker_forget (xlator_t *this, inode_t *inode)  {          marker_inode_ctx_t      *ctx = NULL; -        if (inode_ctx_get (inode, this, (uint64_t *) &ctx) != 0) +        if (inode_ctx_del (inode, this, (uint64_t *) &ctx) != 0)                  goto out;          quota_forget (this, ctx->quota_ctx);  | 
