diff options
| -rw-r--r-- | libglusterfs/src/common-utils.h | 4 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota-helper.c | 7 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 60 | ||||
| -rw-r--r-- | xlators/features/marker/src/marker.c | 17 | ||||
| -rw-r--r-- | xlators/features/quota/src/quota.c | 3 | 
5 files changed, 90 insertions, 1 deletions
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index d81da35c5..4647c4a4d 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -211,6 +211,10 @@ extern char *gf_mgmt_list[GF_MGMT_MAXVALUE];          } while (0);  #endif +#define GF_UUID_ASSERT(u) \ +        if (uuid_is_null (u))\ +                GF_ASSERT (!"uuid null"); +  union gf_sock_union {          struct sockaddr_storage storage;          struct sockaddr_in6 sin6; diff --git a/xlators/features/marker/src/marker-quota-helper.c b/xlators/features/marker/src/marker-quota-helper.c index 03a8d78ba..7b7c3026f 100644 --- a/xlators/features/marker/src/marker-quota-helper.c +++ b/xlators/features/marker/src/marker-quota-helper.c @@ -168,8 +168,12 @@ __mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, loc_t *l          int32_t ret = 0;          inode_contribution_t *contribution = NULL; +        if (!loc->parent) +                goto out; +          list_for_each_entry (contribution, &ctx->contribution_head, contri_list) { -                if (uuid_compare (contribution->gfid, loc->parent->gfid) == 0) { +                if (loc->parent && +                     uuid_compare (contribution->gfid, loc->parent->gfid) == 0) {                          goto out;                  }          } @@ -223,6 +227,7 @@ mq_dict_set_contribution (xlator_t *this, dict_t *dict,          GF_VALIDATE_OR_GOTO ("marker", this, out);          GF_VALIDATE_OR_GOTO ("marker", dict, out);          GF_VALIDATE_OR_GOTO ("marker", loc, out); +        GF_VALIDATE_OR_GOTO ("marker", loc->parent, out);          GET_CONTRI_KEY (contri_key, loc->parent->gfid, ret);          if (ret < 0) { diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 6f324aca3..bc5fc6040 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -179,6 +179,7 @@ mq_loc_fill_from_name (xlator_t *this, loc_t *newloc, loc_t *oldloc,          }          newloc->parent = inode_ref (oldloc->inode); +        uuid_copy (newloc->pargfid, oldloc->inode->gfid);          len = strlen (oldloc->path); @@ -307,6 +308,10 @@ wind:          if (ret)                  goto err; +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid);          STACK_WIND (frame, mq_release_lock_on_dirty_inode,                      FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->setxattr, @@ -373,6 +378,11 @@ mq_update_size_xattr (call_frame_t *frame, void *cookie, xlator_t *this,          if (ret)                  goto err; +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame, mq_mark_inode_undirty, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->xattrop, &local->loc,                      GF_XATTROP_ADD_ARRAY64, new_dict); @@ -434,6 +444,11 @@ mq_get_dirty_inode_size (call_frame_t *frame, xlator_t *this)          if (ret)                  goto err; +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame, mq_update_size_xattr, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->lookup, &local->loc, dict);          ret =0; @@ -748,6 +763,10 @@ mq_check_if_still_dirty (call_frame_t *frame,          local->d_off = 0; +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid);          STACK_WIND(frame,                     mq_dirty_inode_readdir,                     FIRST_CHILD(this), @@ -794,6 +813,11 @@ mq_get_dirty_xattr (call_frame_t *frame, void *cookie,          if (ret)                  goto err; +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame,                      mq_check_if_still_dirty,                      FIRST_CHILD(this), @@ -956,6 +980,9 @@ mq_create_dirty_xattr (call_frame_t *frame, void *cookie, xlator_t *this,                          goto err;                  } +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); +                GF_UUID_ASSERT (local->loc.gfid); +                  STACK_WIND (frame, mq_xattr_creation_release_lock,                              FIRST_CHILD(this),                              FIRST_CHILD(this)->fops->setxattr, @@ -1030,6 +1057,9 @@ mq_create_xattr (xlator_t *this, call_frame_t *frame)                          goto free_value;          } +        uuid_copy (local->loc.gfid, local->loc.inode->gfid); +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame, mq_create_dirty_xattr, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->xattrop, &local->loc,                      GF_XATTROP_ADD_ARRAY64, dict); @@ -1129,6 +1159,11 @@ mq_get_xattr (call_frame_t *frame, void *cookie, xlator_t *this,                  goto err;          } +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame, mq_check_n_set_inode_xattr, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->lookup, &local->loc, xattr_req); @@ -1434,6 +1469,9 @@ mq_mark_undirty (call_frame_t *frame,                  goto err;          } +        uuid_copy (local->parent_loc.gfid, local->parent_loc.inode->gfid); +        GF_UUID_ASSERT (local->parent_loc.gfid); +          STACK_WIND (frame, mq_release_parent_lock,                      FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->setxattr, @@ -1516,6 +1554,11 @@ mq_update_parent_size (call_frame_t *frame,                  goto err;          } +        if (uuid_is_null (local->parent_loc.gfid)) +                        uuid_copy (local->parent_loc.gfid, +                                   local->parent_loc.inode->gfid); +        GF_UUID_ASSERT (local->parent_loc.gfid); +          STACK_WIND (frame,                      mq_mark_undirty,                      FIRST_CHILD(this), @@ -1637,6 +1680,11 @@ unlock:                  goto err;          } +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame,                      mq_update_parent_size,                      FIRST_CHILD(this), @@ -1728,6 +1776,11 @@ mq_fetch_child_size_and_contri (call_frame_t *frame, void *cookie,          mq_set_ctx_updation_status (local->ctx, _gf_false); +        if (uuid_is_null (local->loc.gfid)) +                uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +        GF_UUID_ASSERT (local->loc.gfid); +          STACK_WIND (frame, mq_update_inode_contribution, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->lookup, &local->loc, newdict); @@ -1785,6 +1838,10 @@ mq_markdirty (call_frame_t *frame, void *cookie,          if (ret == -1)                  goto err; +        uuid_copy (local->parent_loc.gfid, +                   local->parent_loc.inode->gfid); +        GF_UUID_ASSERT (local->parent_loc.gfid); +          STACK_WIND (frame, mq_fetch_child_size_and_contri,                      FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->setxattr, @@ -2298,6 +2355,9 @@ mq_reduce_parent_size_xattr (call_frame_t *frame, void *cookie,          if (ret < 0)                  goto err; +        uuid_copy (local->parent_loc.gfid, +                   local->parent_loc.inode->gfid); +        GF_UUID_ASSERT (local->parent_loc.gfid);          STACK_WIND (frame, mq_inode_remove_done, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->xattrop, &local->parent_loc, diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 291e24bdc..bbd448871 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -813,6 +813,9 @@ marker_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)          if (ret == -1)                  goto err; +        if (uuid_is_null (loc->gfid) && loc->inode) +                uuid_copy (loc->gfid, loc->inode->gfid); +          STACK_WIND (frame, marker_unlink_stat_cbk, FIRST_CHILD(this),                      FIRST_CHILD(this)->fops->stat, loc);          return 0; @@ -1104,6 +1107,7 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (newloc.name)                          newloc.name++;                  newloc.parent = inode_ref (local->loc.parent); +                uuid_copy (newloc.gfid, oplocal->loc.inode->gfid);                  STACK_WIND_COOKIE (frame, marker_rename_release_oldp_lock,                                     frame->cookie, FIRST_CHILD(this), @@ -1242,6 +1246,10 @@ marker_get_newpath_contribution (call_frame_t *frame, void *cookie,                   * reset them in the callback.                   */                  MARKER_SET_UID_GID (frame, local, frame->root); +                if (uuid_is_null (local->loc.gfid)) +                        uuid_copy (local->loc.gfid, local->loc.inode->gfid); + +                GF_UUID_ASSERT (local->loc.gfid);                  STACK_WIND_COOKIE (frame, marker_do_rename,                                     frame->cookie, FIRST_CHILD(this), @@ -1291,6 +1299,12 @@ marker_get_oldpath_contribution (call_frame_t *frame, void *cookie,           */          MARKER_SET_UID_GID (frame, local, frame->root); +        if (uuid_is_null (oplocal->loc.gfid)) +                        uuid_copy (oplocal->loc.gfid, +                                   oplocal->loc.inode->gfid); + +        GF_UUID_ASSERT (oplocal->loc.gfid); +          STACK_WIND_COOKIE (frame, marker_get_newpath_contribution,                             frame->cookie, FIRST_CHILD(this),                             FIRST_CHILD(this)->fops->getxattr, @@ -2137,6 +2151,9 @@ marker_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          frame->local = NULL; +        if (!op_ret && local && uuid_is_null (local->loc.gfid)) +                        uuid_copy (local->loc.gfid, inode->gfid); +          STACK_UNWIND_STRICT (lookup, frame, op_ret, op_errno, inode, buf,                               dict, postparent); diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index a02ec2a79..32144c633 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -597,6 +597,9 @@ quota_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto unwind;          } +        if (local->loc.name == NULL) +                goto unwind; +          ret = quota_inode_ctx_get (local->loc.inode, local->limit, this, dict,                                     buf, &ctx, 1);          if ((ret == -1) || (ctx == NULL)) {  | 
