diff options
author | Raghavendra G <raghavendra@gluster.com> | 2011-04-20 12:47:12 +0000 |
---|---|---|
committer | Anand Avati <avati@gluster.com> | 2011-04-21 00:39:27 -0700 |
commit | 2d8f4fae7c06c73cd828c247e462a2b1017f5679 (patch) | |
tree | b710d209ef4a3008b40cb144ea0156ddb13f6902 /xlators | |
parent | 698d972d8256662dc23a012c4328dca37aaced56 (diff) |
features/marker: reduce the size corresponding to destination file if it is already present from parent directories.
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2697 (Quota: add-brick creates the size go awkward, though it was perfect earlier)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2697
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/features/marker/src/marker-quota.c | 7 | ||||
-rw-r--r-- | xlators/features/marker/src/marker-quota.h | 2 | ||||
-rw-r--r-- | xlators/features/marker/src/marker.c | 17 |
3 files changed, 18 insertions, 8 deletions
diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 5fe8ab010..acc13dfee 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -1894,7 +1894,7 @@ init_quota_priv (xlator_t *this) int32_t -quota_rename_update_newpath (xlator_t *this, loc_t *loc, inode_t *inode) +quota_rename_update_newpath (xlator_t *this, loc_t *loc) { int32_t ret = -1; quota_inode_ctx_t *ctx = NULL; @@ -1902,10 +1902,7 @@ quota_rename_update_newpath (xlator_t *this, loc_t *loc, inode_t *inode) GF_VALIDATE_OR_GOTO ("marker", this, out); GF_VALIDATE_OR_GOTO ("marker", loc, out); - GF_VALIDATE_OR_GOTO ("marker", inode, out); - - if (loc->inode == NULL) - loc->inode = inode_ref (inode); + GF_VALIDATE_OR_GOTO ("marker", loc->inode, out); ret = quota_inode_ctx_get (loc->inode, this, &ctx); if (ret < 0) diff --git a/xlators/features/marker/src/marker-quota.h b/xlators/features/marker/src/marker-quota.h index c6ca5bbab..2eecd83e8 100644 --- a/xlators/features/marker/src/marker-quota.h +++ b/xlators/features/marker/src/marker-quota.h @@ -162,7 +162,7 @@ int32_t reduce_parent_size (xlator_t *, loc_t *); int32_t -quota_rename_update_newpath (xlator_t *, loc_t *, inode_t *); +quota_rename_update_newpath (xlator_t *, loc_t *); int32_t quota_forget (xlator_t *, quota_inode_ctx_t *); diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index 640e6faf5..940dc43f4 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -895,6 +895,7 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, marker_conf_t *priv = NULL; marker_local_t *local = NULL; marker_local_t *oplocal = NULL; + loc_t newloc = {0, }; if (op_ret == -1) { gf_log (this->name, GF_LOG_TRACE, "%s occured while " @@ -918,8 +919,20 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (priv->feature_enabled & GF_QUOTA) { reduce_parent_size (this, &oplocal->loc); - quota_rename_update_newpath (this, &local->loc, - oplocal->loc.inode); + + if (local->loc.inode != NULL) { + reduce_parent_size (this, &local->loc); + } + + newloc.inode = inode_ref (oplocal->loc.inode); + newloc.path = gf_strdup (local->loc.path); + newloc.name = gf_strdup (local->loc.name); + newloc.parent = inode_ref (local->loc.parent); + newloc.ino = oplocal->loc.inode->ino; + + quota_rename_update_newpath (this, &newloc); + + loc_wipe (&newloc); } if (priv->feature_enabled & GF_XTIME) { |