diff options
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | xlators/cluster/ec/src/ec-combine.c | 2 | ||||
-rw-r--r-- | xlators/cluster/ec/src/ec-common.c | 19 |
2 files changed, 17 insertions, 4 deletions
diff --git a/xlators/cluster/ec/src/ec-combine.c b/xlators/cluster/ec/src/ec-combine.c index 4d0cc076680..01a865628f9 100644 --- a/xlators/cluster/ec/src/ec-combine.c +++ b/xlators/cluster/ec/src/ec-combine.c @@ -163,8 +163,6 @@ int32_t ec_iatt_combine(ec_fop_data_t *fop, struct iatt *dst, struct iatt *src, * inode is not locked. */ if (!failed && ((dst[i].ia_uid != src[i].ia_uid) || (dst[i].ia_gid != src[i].ia_gid) || - ((dst[i].ia_type == IA_IFREG) && - (dst[i].ia_size != src[i].ia_size)) || (st_mode_from_ia(dst[i].ia_prot, dst[i].ia_type) != st_mode_from_ia(src[i].ia_prot, src[i].ia_type)))) { if (ec_iatt_is_trusted(fop, dst)) { diff --git a/xlators/cluster/ec/src/ec-common.c b/xlators/cluster/ec/src/ec-common.c index 284c2cd5a62..14aefff0ae3 100644 --- a/xlators/cluster/ec/src/ec-common.c +++ b/xlators/cluster/ec/src/ec-common.c @@ -1121,6 +1121,7 @@ void ec_get_size_version(ec_lock_link_t *link) ec_inode_t *ctx; ec_fop_data_t *fop; dict_t *dict = NULL; + dict_t *xdata = NULL; ec_t *ec = NULL; int32_t error = 0; gf_boolean_t getting_xattr; @@ -1177,6 +1178,16 @@ void ec_get_size_version(ec_lock_link_t *link) error = -ENOMEM; goto out; } + + if (lock->loc.inode->ia_type == IA_IFREG || + lock->loc.inode->ia_type == IA_INVAL) { + xdata = dict_new(); + if (xdata == NULL || dict_set_int32 (xdata, GF_GET_SIZE, 1)) { + error = -ENOMEM; + goto out; + } + } + if (lock->query && !ctx->have_info) { fop->flags |= EC_FLAG_QUERY_METADATA; /* Once we know that an xattrop will be needed, @@ -1234,11 +1245,11 @@ void ec_get_size_version(ec_lock_link_t *link) ec_xattrop (fop->frame, fop->xl, fop->mask, fop->minimum, ec_prepare_update_cbk, link, &loc, - GF_XATTROP_ADD_ARRAY64, dict, NULL); + GF_XATTROP_ADD_ARRAY64, dict, xdata); } else { ec_fxattrop(fop->frame, fop->xl, fop->mask, fop->minimum, ec_prepare_update_cbk, link, lock->fd, - GF_XATTROP_ADD_ARRAY64, dict, NULL); + GF_XATTROP_ADD_ARRAY64, dict, xdata); } error = 0; @@ -1253,6 +1264,10 @@ out: dict_unref(dict); } + if (xdata != NULL) { + dict_unref(xdata); + } + if (error != 0) { ec_fop_set_error(fop, -error); } |