From 3373379303afa575c0616482c8ab8c3c4a08cc22 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Thu, 4 Jun 2015 09:52:51 +0530 Subject: cluster/ec: Don't handle EC_XATTR_DIRTY in response 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. Change-Id: If0ea3efec3235a6e312465d8838585fbe752c7ea BUG: 1227654 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.org/11078 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- xlators/cluster/ec/src/ec-data.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'xlators/cluster/ec/src/ec-data.h') 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; }; -- cgit