diff options
author | Raghavendra G <rgowdapp@redhat.com> | 2013-09-16 21:35:08 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-11-26 10:23:02 -0800 |
commit | 460ce40d3e2069bf6262dccea6f5ae2fac60d90f (patch) | |
tree | f4f2dec9b963edd4ef9233486e341d940c965ed4 /xlators/features/marker/src/marker-quota-helper.c | |
parent | d6dc8d0e9e2052818c9858f6b073a8bacc3fca88 (diff) |
features/marker: quota friendly changes
* handles renames on dht linkfiles correctly
* nameless lookup friendly changes. uses gfid-to-path conversion
functionality from storage/posix to build ancestry till root.
* log message cleanup.
* build inode contexts in readdirp
* Accounting still not correct with hardlinks.
Credits:
========
Vijay Bellur <vbellur@redhat.com>
Raghavendra Bhat <rabhat@redhat.com>
Change-Id: I415b6fbbc9691f5a38d9fd3c5d083a61e578bb81
BUG: 969461
Signed-off-by: Raghavendra G <rgowdapp@redhat.com>
Reviewed-on: http://review.gluster.org/5953
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'xlators/features/marker/src/marker-quota-helper.c')
-rw-r--r-- | xlators/features/marker/src/marker-quota-helper.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/xlators/features/marker/src/marker-quota-helper.c b/xlators/features/marker/src/marker-quota-helper.c index af5fed13271..ec0d83316c7 100644 --- a/xlators/features/marker/src/marker-quota-helper.c +++ b/xlators/features/marker/src/marker-quota-helper.c @@ -154,15 +154,17 @@ out: inode_contribution_t * -__mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, loc_t *loc) +__mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, + loc_t *loc) { - int32_t ret = 0; + int32_t ret = 0; inode_contribution_t *contribution = NULL; if (!loc->parent) { if (!uuid_is_null (loc->pargfid)) loc->parent = inode_find (loc->inode->table, loc->pargfid); + if (!loc->parent) loc->parent = inode_parent (loc->inode, loc->pargfid, loc->name); @@ -170,9 +172,10 @@ __mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, loc_t *l goto out; } - list_for_each_entry (contribution, &ctx->contribution_head, contri_list) { + list_for_each_entry (contribution, &ctx->contribution_head, + contri_list) { if (loc->parent && - uuid_compare (contribution->gfid, loc->parent->gfid) == 0) { + uuid_compare (contribution->gfid, loc->parent->gfid) == 0) { goto out; } } @@ -196,14 +199,16 @@ out: inode_contribution_t * -mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, loc_t *loc) +mq_add_new_contribution_node (xlator_t *this, quota_inode_ctx_t *ctx, + loc_t *loc) { inode_contribution_t *contribution = NULL; if ((ctx == NULL) || (loc == NULL)) return NULL; - if (strcmp (loc->path, "/") == 0) + if (((loc->path) && (strcmp (loc->path, "/") == 0)) + || (!loc->path && uuid_is_null (loc->pargfid))) return NULL; LOCK (&ctx->lock); @@ -226,12 +231,16 @@ 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) { - ret = -1; - goto out; + if (loc->parent) { + GET_CONTRI_KEY (contri_key, loc->parent->gfid, ret); + if (ret < 0) { + ret = -1; + goto out; + } + } else { + /* nameless lookup, fetch contributions to all parents */ + GET_CONTRI_KEY (contri_key, NULL, ret); } ret = dict_set_int64 (dict, contri_key, 0); |