summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/ec/src/ec-generic.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/ec/src/ec-generic.c')
-rw-r--r--xlators/cluster/ec/src/ec-generic.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/xlators/cluster/ec/src/ec-generic.c b/xlators/cluster/ec/src/ec-generic.c
index bccbc009457..73df0d89db8 100644
--- a/xlators/cluster/ec/src/ec-generic.c
+++ b/xlators/cluster/ec/src/ec-generic.c
@@ -753,16 +753,17 @@ void ec_lookup_rebuild(ec_t * ec, ec_fop_data_t * fop, ec_cbk_data_t * cbk)
for (i = 0, ans = cbk; (ans != NULL) && (i < ec->fragments);
ans = ans->next)
{
- data = dict_get(ans->xdata, GF_CONTENT_KEY);
- if (data != NULL)
- {
- values[i] = ans->idx;
- blocks[i] = (uint8_t *)data->data;
- if (size > data->len)
+ if (!ans->dirty) {
+ data = dict_get(ans->xdata, GF_CONTENT_KEY);
+ if (data != NULL)
{
- size = data->len;
+ values[i] = ans->idx;
+ blocks[i] = (uint8_t *)data->data;
+ if (size > data->len) {
+ size = data->len;
+ }
+ i++;
}
- i++;
}
}
@@ -871,6 +872,8 @@ int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this,
}
if (xdata != NULL)
{
+ uint64_t dirty;
+
cbk->xdata = dict_ref(xdata);
if (cbk->xdata == NULL)
{
@@ -879,6 +882,9 @@ int32_t ec_lookup_cbk(call_frame_t * frame, void * cookie, xlator_t * this,
goto out;
}
+ if (ec_dict_del_number(cbk->xdata, EC_XATTR_DIRTY, &dirty) == 0) {
+ cbk->dirty = dirty != 0;
+ }
}
ec_combine(cbk, ec_combine_lookup);
@@ -938,7 +944,8 @@ int32_t ec_manager_lookup(ec_fop_data_t * fop, int32_t state)
}
}
if ((dict_set_uint64(fop->xdata, EC_XATTR_SIZE, 0) != 0) ||
- (dict_set_uint64(fop->xdata, EC_XATTR_VERSION, 0) != 0))
+ (dict_set_uint64(fop->xdata, EC_XATTR_VERSION, 0) != 0) ||
+ (dict_set_uint64(fop->xdata, EC_XATTR_DIRTY, 0) != 0))
{
gf_log(fop->xl->name, GF_LOG_ERROR, "Unable to prepare lookup "
"request");
@@ -1339,6 +1346,8 @@ int32_t ec_xattrop_cbk(call_frame_t * frame, void * cookie, xlator_t * this,
}
if (xdata != NULL)
{
+ uint64_t dirty;
+
cbk->xdata = dict_ref(xdata);
if (cbk->xdata == NULL)
{
@@ -1347,6 +1356,9 @@ int32_t ec_xattrop_cbk(call_frame_t * frame, void * cookie, xlator_t * this,
goto out;
}
+ if (ec_dict_del_number(cbk->xdata, EC_XATTR_DIRTY, &dirty) == 0) {
+ cbk->dirty = dirty != 0;
+ }
}
ec_combine(cbk, ec_combine_xattrop);