From 795a095a6740a66744f10f864c99095205c97c1a Mon Sep 17 00:00:00 2001
From: Krutika Dhananjay <kdhananj@redhat.com>
Date: Tue, 28 Mar 2017 19:26:41 +0530
Subject: [PATCH 304/316] features/shard: Pass the correct iatt for cache
invalidation
Backport of: https://review.gluster.org/16961
This fixes a performance issue with shard which was causing
the translator to trigger unusually high number of lookups
for cache invalidation even when there was no modification to
the file.
In shard_common_stat_cbk(), it is local->prebuf that contains the
aggregated size and block count as opposed to buf which only holds the
attributes for the physical copy of base shard. Passing buf for
inode_ctx invalidation would always set refresh to true since the file
size in inode ctx contains the aggregated size and would never be same
as @buf->ia_size. This was leading to every write/read being preceded
by a lookup on the base shard even when the file underwent no
modification.
Change-Id: I97b52224823d57f86eb92cc36a726049bdb5cb23
BUG: 1439731
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/102819
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
---
xlators/features/shard/src/shard.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c
index 39d648b..9504f12 100644
--- a/xlators/features/shard/src/shard.c
+++ b/xlators/features/shard/src/shard.c
@@ -1269,7 +1269,7 @@ shard_common_stat_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
else
inode = local->fd->inode;
- shard_inode_ctx_invalidate (inode, this, buf);
+ shard_inode_ctx_invalidate (inode, this, &local->prebuf);
unwind:
local->handler (frame, this);
--
1.8.3.1