summaryrefslogtreecommitdiffstats
path: root/xlators/features/marker
diff options
context:
space:
mode:
authorManikandan Selvaganesh <mselvaga@redhat.com>2016-02-05 12:17:22 +0530
committerRaghavendra G <rgowdapp@redhat.com>2016-02-10 22:12:08 -0800
commit0c3e7174ac74f7222f3b8a27fe8b146b4c104852 (patch)
tree02c3986f506f7c03caa5173b24e10bd464c5c5a4 /xlators/features/marker
parentbd71d153475761de4b99bf47d90850dc7f05c4a6 (diff)
quota: Fix incorrect disk usage shown on a tiered volume
When quota is enabled on a tiered volume, incorrect data usage is shown, it is because, during the process of migrating files in tiering, we are accounting both for the src file and dst file at some point. By the time we make the srcfile as a T file, marker has already accounted the contri and has updated it's parent and also we are not accounting for the truncate operation done, which accounts to incorrect data usage even after unlinking the file. The size can increase drastically with multiple promotes and demotes since the contri keeps changing and the parent is being updated. Backport of http://review.gluster.org/#/c/13363/ > Change-Id: Ie567228786713d7dc257ff374a69ad3be40f9e82 > BUG: 1304970 > Signed-off-by: Manikandan Selvaganesh <mselvaga@redhat.com> Change-Id: I72138aa3bb9ad180287e9bed916b845ec028f259 BUG: 1305029 Signed-off-by: Manikandan Selvaganesh <mselvaga@redhat.com> Reviewed-on: http://review.gluster.org/13388 Reviewed-by: Vijaikumar Mallikarjuna <vmallika@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/features/marker')
-rw-r--r--xlators/features/marker/src/marker.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c
index 3aae155..ebe18d6 100644
--- a/xlators/features/marker/src/marker.c
+++ b/xlators/features/marker/src/marker.c
@@ -1738,8 +1738,23 @@ marker_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
priv = this->private;
- if (priv->feature_enabled & GF_QUOTA)
- mq_initiate_quota_txn (this, &local->loc, postbuf);
+ if (priv->feature_enabled & GF_QUOTA) {
+ /* DHT Rebalance process, at the end of migration will
+ * first make the src file as a linkto file and then
+ * truncate the file. By doing a truncate after making the
+ * src file as linkto file, the contri which is already
+ * accounted is left over.
+ * So, we need to account for the linkto file when a truncate
+ * happens, thereby updating the contri properly.
+ * By passing NULL for postbuf, mq_prevalidate does not check
+ * for linkto file.
+ * Same happens with ftruncate as well.
+ */
+ if (postbuf && IS_DHT_LINKFILE_MODE (postbuf))
+ mq_initiate_quota_txn (this, &local->loc, NULL);
+ else
+ mq_initiate_quota_txn (this, &local->loc, postbuf);
+ }
if (priv->feature_enabled & GF_XTIME)
marker_xtime_update_marks (this, local);
@@ -1807,8 +1822,12 @@ marker_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
priv = this->private;
- if (priv->feature_enabled & GF_QUOTA)
- mq_initiate_quota_txn (this, &local->loc, postbuf);
+ if (priv->feature_enabled & GF_QUOTA) {
+ if (postbuf && IS_DHT_LINKFILE_MODE (postbuf))
+ mq_initiate_quota_txn (this, &local->loc, NULL);
+ else
+ mq_initiate_quota_txn (this, &local->loc, postbuf);
+ }
if (priv->feature_enabled & GF_XTIME)
marker_xtime_update_marks (this, local);