summaryrefslogtreecommitdiffstats
path: root/xlators/protocol/server/src/server-resolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/protocol/server/src/server-resolve.c')
-rw-r--r--xlators/protocol/server/src/server-resolve.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c
index 1ad45394dd7..a1fe2e85267 100644
--- a/xlators/protocol/server/src/server-resolve.c
+++ b/xlators/protocol/server/src/server-resolve.c
@@ -11,6 +11,7 @@
#include "server.h"
#include "server-helpers.h"
#include "server-messages.h"
+#include "compat-errno.h"
int
@@ -58,6 +59,10 @@ resolve_gfid_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
resolve = state->resolve_now;
resolve_loc = &resolve->resolve_loc;
+ if (!state->loc.inode && inode) {
+ state->loc.inode = inode_ref (inode);
+ }
+
if (op_ret == -1) {
if (op_errno == ENOENT) {
gf_msg_debug (this->name, 0, "%s/%s: failed to resolve"
@@ -71,7 +76,9 @@ resolve_gfid_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
uuid_utoa (resolve_loc->pargfid),
resolve_loc->name, strerror (op_errno));
}
- goto out;
+ if (op_errno != ENODATA) {
+ goto out;
+ }
}
link_inode = inode_link (inode, resolve_loc->parent,