summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/afr/src')
-rw-r--r--xlators/cluster/afr/src/afr-common.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 474ab9b5020..e457dbce73c 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -642,6 +642,9 @@ afr_accuse_smallfiles (xlator_t *this, struct afr_reply *replies,
priv = this->private;
for (i = 0; i < priv->child_count; i++) {
+ if (replies[i].valid && replies[i].xdata &&
+ dict_get (replies[i].xdata, GLUSTERFS_BAD_INODE))
+ continue;
if (data_accused[i])
continue;
if (replies[i].poststat.ia_size > maxsize)
@@ -703,6 +706,13 @@ afr_replies_interpret (call_frame_t *frame, xlator_t *this, inode_t *inode)
continue;
}
+ if (replies[i].xdata &&
+ dict_get (replies[i].xdata, GLUSTERFS_BAD_INODE)) {
+ data_readable[i] = 0;
+ metadata_readable[i] = 0;
+ continue;
+ }
+
afr_accused_fill (this, replies[i].xdata, data_accused,
(replies[i].poststat.ia_type == IA_IFDIR) ?
AFR_ENTRY_TRANSACTION : AFR_DATA_TRANSACTION);
@@ -861,7 +871,8 @@ afr_inode_refresh_subvol_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
local->replies[call_child].poststat = *buf;
if (par)
local->replies[call_child].postparent = *par;
- local->replies[call_child].xdata = dict_ref (xdata);
+ if (xdata)
+ local->replies[call_child].xdata = dict_ref (xdata);
}
if (xdata) {
ret = dict_get_int8 (xdata, "link-count", &need_heal);