summaryrefslogtreecommitdiffstats
path: root/xlators/mount/fuse/src/fuse-resolve.c
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2015-10-15 19:40:55 +0530
committerRaghavendra G <rgowdapp@redhat.com>2015-11-09 02:50:53 -0800
commit42e23211fcc1f7da320a318a6b212e2af60214f6 (patch)
treeb6eba6804f2b4d5b0e394ac1c63ccf9382bc078e /xlators/mount/fuse/src/fuse-resolve.c
parenta3289b1d062deb211d1648489fe2cb9797acae9f (diff)
Revert "fuse: resolve complete path after a graph switch"
back port of http://review.gluster.org/#/c/12375/ This reverts commit d0edb6d555d687f76837515207b9408be0bdd55e. The same functionality will be provided in a different patch Change-Id: I33538fa159b375a4662eb05ad4f7604458a8ec2b BUG: 1279095 Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> Reviewed-on: http://review.gluster.org/12537 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: N Balachandran <nbalacha@redhat.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'xlators/mount/fuse/src/fuse-resolve.c')
-rw-r--r--xlators/mount/fuse/src/fuse-resolve.c113
1 files changed, 8 insertions, 105 deletions
diff --git a/xlators/mount/fuse/src/fuse-resolve.c b/xlators/mount/fuse/src/fuse-resolve.c
index 474dace5c04..a670f4f6dac 100644
--- a/xlators/mount/fuse/src/fuse-resolve.c
+++ b/xlators/mount/fuse/src/fuse-resolve.c
@@ -82,36 +82,16 @@ out:
int
-fuse_resolve_entry (fuse_state_t *state, gf_boolean_t resolve_path)
+fuse_resolve_entry (fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- loc_t *resolve_loc = NULL;
- loc_t tmp_loc = {0, };
- uuid_t gfid = {0, };
- inode_t *parent = NULL;
+ fuse_resolve_t *resolve = NULL;
+ loc_t *resolve_loc = NULL;
resolve = state->resolve_now;
resolve_loc = &resolve->resolve_loc;
- parent = resolve->parhint ? resolve->parhint : resolve->hint;
-
+ resolve_loc->parent = inode_ref (state->loc_now->parent);
gf_uuid_copy (resolve_loc->pargfid, state->loc_now->pargfid);
-
- if (parent && parent->table != state->itable && resolve_path) {
- /* graph switch happened */
- if (!gf_uuid_is_null (resolve->pargfid)) {
- gf_uuid_copy (gfid, resolve->pargfid);
- } else if (!gf_uuid_is_null (resolve->gfid)) {
- gf_uuid_copy (gfid, resolve->gfid);
- }
-
- /* sending lookup on parent directories */
- fuse_nameless_lookup (state->active_subvol,
- gfid,
- &tmp_loc, _gf_true);
- }
-
- resolve_loc->parent = inode_ref (state->loc_now->parent);
resolve_loc->name = resolve->bname;
resolve_loc->inode = inode_new (state->itable);
@@ -133,7 +113,7 @@ fuse_resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
fuse_state_t *state = NULL;
fuse_resolve_t *resolve = NULL;
inode_t *link_inode = NULL;
- loc_t *loc_now = NULL;
+ loc_t *loc_now = NULL;
state = frame->root->state;
resolve = state->resolve_now;
@@ -180,7 +160,7 @@ fuse_resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
loc_now->parent = link_inode;
gf_uuid_copy (loc_now->pargfid, link_inode->gfid);
- fuse_resolve_entry (state, _gf_false);
+ fuse_resolve_entry (state);
return 0;
out:
@@ -188,73 +168,6 @@ out:
return 0;
}
-inode_t*
-fuse_resolve_path (xlator_t *this, char *path)
-{
- int ret = -1;
- dict_t *xattr_req = NULL;
- struct iatt iatt = {0, };
- inode_t *linked_inode = NULL;
- loc_t loc = {0, };
- char *bname = NULL;
- char *save_ptr = NULL;
- uuid_t gfid = {0, };
- char *tmp_path = NULL;
-
-
- tmp_path = gf_strdup (path);
-
- memset (gfid, 0, 16);
- gfid[15] = 1;
-
- gf_uuid_copy (loc.pargfid, gfid);
- loc.parent = inode_ref (this->itable->root);
-
- xattr_req = dict_new ();
- if (xattr_req == NULL) {
- ret = -ENOMEM;
- goto out;
- }
-
- bname = strtok_r (tmp_path, "/", &save_ptr);
-
- /* sending a lookup on parent directory,
- * Eg: if path is like /a/b/c/d/e/f/g/
- * then we will send a lookup on a first and then b,c,d,etc
- */
-
- while (bname) {
- loc.inode = inode_grep (this->itable, loc.parent, bname);
- if (loc.inode == NULL) {
- loc.inode = inode_new (this->itable);
- if (loc.inode == NULL) {
- ret = -ENOMEM;
- goto out;
- }
- }
-
- loc.name = bname;
- ret = loc_path (&loc, bname);
-
- ret = syncop_lookup (this, &loc, &iatt, NULL, xattr_req, NULL);
- if (ret)
- goto out;
-
- linked_inode = inode_link (loc.inode, loc.parent, bname, &iatt);
- if (!linked_inode)
- goto out;
-
- loc_wipe (&loc);
- gf_uuid_copy (loc.pargfid, linked_inode->gfid);
- loc.inode = NULL;
- loc.parent = linked_inode;
-
- bname = strtok_r (NULL, "/", &save_ptr);
- }
- return linked_inode;
-out:
- return NULL;
-}
int
fuse_resolve_gfid (fuse_state_t *state)
@@ -262,13 +175,10 @@ fuse_resolve_gfid (fuse_state_t *state)
fuse_resolve_t *resolve = NULL;
loc_t *resolve_loc = NULL;
int ret = 0;
- loc_t tmp_loc = {0, };
- inode_t *inode = NULL;
resolve = state->resolve_now;
resolve_loc = &resolve->resolve_loc;
-
if (!gf_uuid_is_null (resolve->pargfid)) {
gf_uuid_copy (resolve_loc->gfid, resolve->pargfid);
} else if (!gf_uuid_is_null (resolve->gfid)) {
@@ -280,21 +190,14 @@ fuse_resolve_gfid (fuse_state_t *state)
resolve_loc->inode = inode_find (state->itable, resolve_loc->gfid);
if (!resolve_loc->inode)
resolve_loc->inode = inode_new (state->itable);
-
ret = loc_path (resolve_loc, NULL);
+
if (ret <= 0) {
gf_log (THIS->name, GF_LOG_WARNING,
"failed to get the path for inode %s",
uuid_utoa (resolve->gfid));
}
- inode = resolve->parhint ? resolve->parhint : resolve->hint;
- if (inode && inode->table != state->itable) {
- /* sending lookup on parent directories */
- fuse_nameless_lookup (state->active_subvol, resolve_loc->gfid,
- &tmp_loc, _gf_true);
- }
-
FUSE_FOP (state, fuse_resolve_gfid_cbk, GF_FOP_LOOKUP,
lookup, resolve_loc, NULL);
@@ -385,7 +288,7 @@ fuse_resolve_parent (fuse_state_t *state)
}
if (ret < 0) {
- fuse_resolve_entry (state, _gf_true);
+ fuse_resolve_entry (state);
return 0;
}