summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/unify/src/unify.c
diff options
context:
space:
mode:
authorBasavanagowda Kanur <gowda@gluster.com>2009-03-12 20:29:56 +0530
committerAnand V. Avati <avati@amp.gluster.com>2009-03-13 11:01:30 +0530
commit215a91c4729bff06899375c02ae1568f24d683a9 (patch)
tree8b2d82d22df7c60f6227e24468d65493870e7ef7 /xlators/cluster/unify/src/unify.c
parent7af8d8edbd8554235348e0f54348edf222c0b46e (diff)
unify revalidate should propogate the error from any of the subvolume upto the parent, so that parent sends a fresh lookup.
unify revalidate fails if one of the subvolume returns error. Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Diffstat (limited to 'xlators/cluster/unify/src/unify.c')
-rw-r--r--xlators/cluster/unify/src/unify.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/xlators/cluster/unify/src/unify.c b/xlators/cluster/unify/src/unify.c
index 5122a006173..6c3dc0bd242 100644
--- a/xlators/cluster/unify/src/unify.c
+++ b/xlators/cluster/unify/src/unify.c
@@ -522,6 +522,13 @@ unify_lookup_cbk (call_frame_t *frame,
zr_unify_self_heal (frame, this, local);
local_dict = NULL;
} else {
+ if (local->failed) {
+ /* NOTE: directory lookup is sent to all
+ * subvolumes and success from a subvolume
+ * might set local->op_ret to 0 (zero) */
+ local->op_ret = -1;
+ }
+
/* either no self heal, or op_ret == -1 (failure) */
tmp_inode = local->loc1.inode;
unify_local_wipe (local);