summaryrefslogtreecommitdiffstats
path: root/xlators/mount/fuse/src/fuse-resolve.c
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2016-01-12 12:54:42 +0530
committerDan Lambright <dlambrig@redhat.com>2016-01-13 19:26:43 -0800
commitad8c65612d6d7e32c06fd3aed11b7a9edd514607 (patch)
tree552f5df1b68124217a65aeac9cd1bba08d0d6ff8 /xlators/mount/fuse/src/fuse-resolve.c
parentca515db012718f2d4998edf682c70ccba29924c6 (diff)
fuse: send lookup if inode_ctx is not set
During resolving of an entry or inode, if inode ctx was not set, we will send a lookup. This patch also make sure that inode_ctx will be created after every inode_link Change-Id: I4211533ca96a51b89d9f010fc57133470e52dc11 BUG: 1297311 Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> Reviewed-on: http://review.gluster.org/13225 Reviewed-by: Dan Lambright <dlambrig@redhat.com> Tested-by: Dan Lambright <dlambrig@redhat.com>
Diffstat (limited to 'xlators/mount/fuse/src/fuse-resolve.c')
-rw-r--r--xlators/mount/fuse/src/fuse-resolve.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/xlators/mount/fuse/src/fuse-resolve.c b/xlators/mount/fuse/src/fuse-resolve.c
index 9e38cbe7e40..a0352bcf43f 100644
--- a/xlators/mount/fuse/src/fuse-resolve.c
+++ b/xlators/mount/fuse/src/fuse-resolve.c
@@ -45,6 +45,7 @@ fuse_resolve_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
fuse_resolve_t *resolve = NULL;
inode_t *link_inode = NULL;
loc_t *resolve_loc = NULL;
+ uint64_t ctx_value = LOOKUP_NOT_NEEDED;
state = frame->root->state;
resolve = state->resolve_now;
@@ -65,7 +66,8 @@ fuse_resolve_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
link_inode = inode_link (inode, resolve_loc->parent,
resolve_loc->name, buf);
-
+ if (link_inode == inode)
+ inode_ctx_set (link_inode, this, &ctx_value);
state->loc_now->inode = link_inode;
out:
@@ -114,6 +116,7 @@ fuse_resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
inode_t *link_inode = NULL;
loc_t *loc_now = NULL;
inode_t *tmp_inode = NULL;
+ uint64_t ctx_value = LOOKUP_NOT_NEEDED;
state = frame->root->state;
resolve = state->resolve_now;
@@ -146,6 +149,8 @@ fuse_resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
}
link_inode = inode_link (inode, NULL, NULL, buf);
+ if (link_inode == inode)
+ inode_ctx_set (link_inode, this, &ctx_value);
loc_wipe (&resolve->resolve_loc);
@@ -226,9 +231,11 @@ fuse_resolve_parent_simple (fuse_state_t *state)
loc_t *loc = NULL;
inode_t *parent = NULL;
inode_t *inode = NULL;
+ xlator_t *this = NULL;
resolve = state->resolve_now;
loc = state->loc_now;
+ this = state->this;
loc->name = resolve->bname;
@@ -276,7 +283,7 @@ fuse_resolve_parent_simple (fuse_state_t *state)
gf_uuid_copy (loc->pargfid, resolve->pargfid);
inode = inode_grep (state->itable, parent, loc->name);
- if (inode) {
+ if (inode && !inode_needs_lookup (inode, this)) {
loc->inode = inode;
/* decisive result - resolution success */
return 0;