diff options
-rw-r--r-- | xlators/mount/fuse/src/fuse-resolve.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/xlators/mount/fuse/src/fuse-resolve.c b/xlators/mount/fuse/src/fuse-resolve.c index 3bdc0b9293e..dd248f3d9bc 100644 --- a/xlators/mount/fuse/src/fuse-resolve.c +++ b/xlators/mount/fuse/src/fuse-resolve.c @@ -145,6 +145,8 @@ fuse_resolve_newfd_cbk (call_frame_t *frame, void *cookie, xlator_t *this, STACK_DESTROY (frame->root); if (op_ret == -1) { + resolve->op_ret = -1; + resolve->op_errno = op_errno; goto out; } @@ -631,7 +633,7 @@ gf_resolve (fuse_state_t *state) } else { - resolve->op_ret = -1; + resolve->op_ret = 0; resolve->op_errno = EINVAL; gf_resolve_all (state); @@ -646,10 +648,17 @@ gf_resolve_done (fuse_state_t *state) { fuse_resume_fn_t fn = NULL; + if (state->resolve.op_ret || state->resolve2.op_ret) { + send_fuse_err (state->this, state->finh, + state->resolve.op_errno); + free_fuse_state (state); + goto out; + } fn = state->resume_fn; if (fn) fn (state); +out: return 0; } |