summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c81
1 files changed, 13 insertions, 68 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 03f766082e2..447bba6cb81 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -4237,54 +4237,16 @@ fuse_destroy (xlator_t *this, fuse_in_header_t *finh, void *msg)
GF_FREE (finh);
}
-
-
-struct fuse_first_lookup {
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- char fin;
-};
-
-int
-fuse_first_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int32_t op_ret, int32_t op_errno,
- inode_t *inode, struct iatt *buf, dict_t *xattr,
- struct iatt *postparent)
-{
- struct fuse_first_lookup *stub = NULL;
-
- stub = frame->local;
-
- if (op_ret == 0) {
- gf_log (this->name, GF_LOG_TRACE,
- "first lookup on root succeeded.");
- } else {
- gf_log (this->name, GF_LOG_DEBUG,
- "first lookup on root failed.");
- }
-
- pthread_mutex_lock (&stub->mutex);
- {
- stub->fin = 1;
- pthread_cond_broadcast (&stub->cond);
- }
- pthread_mutex_unlock (&stub->mutex);
-
- return 0;
-}
-
-
int
fuse_first_lookup (xlator_t *this)
{
fuse_private_t *priv = NULL;
loc_t loc = {0, };
- call_frame_t *frame = NULL;
xlator_t *xl = NULL;
dict_t *dict = NULL;
- struct fuse_first_lookup stub;
uuid_t gfid;
int ret = -1;
+ struct iatt iatt = {0,};
priv = this->private;
@@ -4295,45 +4257,28 @@ fuse_first_lookup (xlator_t *this)
loc.parent = NULL;
dict = dict_new ();
- frame = create_frame (this, this->ctx->pool);
- if (!frame) {
- gf_log ("fuse", GF_LOG_ERROR, "failed to create frame");
- goto out;
- }
-
- frame->root->type = GF_OP_TYPE_FOP;
xl = priv->active_subvol;
- pthread_mutex_init (&stub.mutex, NULL);
- pthread_cond_init (&stub.cond, NULL);
- stub.fin = 0;
-
- frame->local = &stub;
-
memset (gfid, 0, 16);
gfid[15] = 1;
ret = dict_set_static_bin (dict, "gfid-req", gfid, 16);
if (ret) {
gf_log (xl->name, GF_LOG_ERROR, "failed to set 'gfid-req'");
- } else {
- STACK_WIND (frame, fuse_first_lookup_cbk, xl, xl->fops->lookup,
- &loc, dict);
-
- pthread_mutex_lock (&stub.mutex);
- {
- while (!stub.fin) {
- pthread_cond_wait (&stub.cond, &stub.mutex);
- }
- }
- pthread_mutex_unlock (&stub.mutex);
+ goto out;
}
- pthread_mutex_destroy (&stub.mutex);
- pthread_cond_destroy (&stub.cond);
-
- frame->local = NULL;
- STACK_DESTROY (frame->root);
+ ret = syncop_lookup (xl, &loc, &iatt, NULL, dict, NULL);
+ DECODE_SYNCOP_ERR (ret);
+ if (ret < 0) {
+ gf_log (this->name, GF_LOG_ERROR,
+ "first lookup on root failed (%s)",
+ strerror (errno));
+ /* NOTE: Treat it as an error case. */
+ /* goto out; */ /* commented for preventing coverity warning */
+ }
+ /* Remove comment of above goto statement if you are adding any
+ more code here, before 'out' label */
out:
dict_unref (dict);