summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-data.h
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2015-06-04 09:52:51 +0530
committerVijay Bellur <vbellur@redhat.com>2015-06-06 22:36:07 -0700
commit6fce83e55c2a4b96de8c9b1ce5b1bc8a60eaacc3 (patch)
treeae8f91b90384a12ac83aa0ab0d1673aa8af4da79 /xlators/cluster/ec/src/ec-data.h
parentd38939e388c819f6c2ba6a6891edc27b6ecf3731 (diff)
cluster/ec: EC_XATTR_DIRTY doesn't come in response
Backport of http://review.gluster.com/11078 Problem: ec_update_size_version expects all the keys it did xattrop with to come in response so that it can set the values again in ec_update_size_version_done. But EC_XATTR_DIRTY is not combined so the value won't be present in the response. So ctx->post/pre_dirty are not updated in ec_update_size_version_done. So these values are still non-zero. When ec_unlock_now is called as part of flush's unlock phase it again tries to perform same xattrop for EC_XATTR_DIRTY. But ec_update_size_version is not expected to be called in unlock phase of flush because ec_flush_size_version should have reset everything to zero and unlock is never invoked from ec_update_size_version_done for flush/fsync/fsyncdir. This leads to stale lock which leads to hang. Fix: EC_XATTR_DIRTY is removed in ex_xattrop_cbk and is never combined with other answers. So remove handling of this in the response. BUG: 1228160 Change-Id: I657efca6e706e7acb541f98f526943f67562da9f Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/11084 Reviewed-by: Xavier Hernandez <xhernandez@datalab.es> Tested-by: Gluster Build System <jenkins@build.gluster.com> Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/cluster/ec/src/ec-data.h')
-rw-r--r--xlators/cluster/ec/src/ec-data.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/xlators/cluster/ec/src/ec-data.h b/xlators/cluster/ec/src/ec-data.h
index 8204cf087de..8f6d5de17a0 100644
--- a/xlators/cluster/ec/src/ec-data.h
+++ b/xlators/cluster/ec/src/ec-data.h
@@ -72,14 +72,12 @@ struct _ec_inode
gf_boolean_t have_config;
gf_boolean_t have_version;
gf_boolean_t have_size;
- gf_boolean_t have_dirty;
ec_config_t config;
uint64_t pre_version[2];
uint64_t post_version[2];
uint64_t pre_size;
uint64_t post_size;
- uint64_t pre_dirty[2];
- uint64_t post_dirty[2];
+ uint64_t dirty[2];
struct list_head heal;
};