diff options
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 1476 | 
1 files changed, 738 insertions, 738 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 210fbef2ac6..ff68123df65 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -21,7 +21,7 @@   * TODO:   * Need to free_state() when fuse_reply_err() + return.   * Check loc->path for "" after fuse_loc_fill in all fops - * (now being done in getattr, lookup) or better - make  + * (now being done in getattr, lookup) or better - make   * fuse_loc_fill() and inode_path() return success/failure.   */ @@ -88,7 +88,7 @@ typedef struct fuse_private fuse_private_t;                  xlator_t *xl = frame->this->children ?                  \                          frame->this->children->xlator : NULL;           \                  frame->root->state = state;                             \ -                frame->root->op   = op_num;				\ +                frame->root->op   = op_num;                                \                  STACK_WIND (frame, ret, xl, xl->fops->fop, args);       \          } while (0) @@ -168,7 +168,7 @@ get_pid_from_req (fuse_req_t req)  {          const struct fuse_ctx *ctx = NULL; -        ctx = fuse_req_ctx(req); +        ctx = fuse_req_ctx (req);          return ctx->pid;  } @@ -179,24 +179,24 @@ get_call_frame_for_req (fuse_state_t *state, char d)          call_pool_t           *pool = NULL;          fuse_req_t             req = NULL;          const struct fuse_ctx *ctx = NULL; -	call_frame_t          *frame = NULL; +        call_frame_t          *frame = NULL;          xlator_t              *this = NULL;          fuse_private_t        *priv = NULL;          pool = state->pool;          req  = state->req; -	if (req) { -		this = fuse_req_userdata (req); -	} else { -		this = state->this; -	} -	priv = this->private; +        if (req) { +                this = fuse_req_userdata (req); +        } else { +                this = state->this; +        } +        priv = this->private; -	frame = create_frame (this, pool); +        frame = create_frame (this, pool);          if (req) { -                ctx = fuse_req_ctx(req); +                ctx = fuse_req_ctx (req);                  frame->root->uid    = ctx->uid;                  frame->root->gid    = ctx->gid; @@ -216,14 +216,14 @@ fuse_loc_fill (loc_t *loc, fuse_state_t *state, ino_t ino,  {          inode_t  *inode = NULL;          inode_t  *parent = NULL; -	int32_t   ret = -1; -	char     *path = NULL; +        int32_t   ret = -1; +        char     *path = NULL;          /* resistance against multiple invocation of loc_fill not to get             reference leaks via inode_search() */          inode = loc->inode; -	 +          if (!inode) {                  if (ino)                          inode = inode_search (state->itable, ino, NULL); @@ -243,73 +243,73 @@ fuse_loc_fill (loc_t *loc, fuse_state_t *state, ino_t ino,                          parent = inode_search (state->itable, par, NULL);                  loc->parent = parent;          } -   +          if (name && parent) { -		ret = inode_path (parent, name, &path); -		if (ret <= 0) { -			gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -				"inode_path failed for %"PRId64"/%s", -				parent->ino, name); -			goto fail; -		} else { -			loc->path = path; -		} -        } else 	if (inode) { -		ret = inode_path (inode, NULL, &path); -		if (ret <= 0) { -			gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -				"inode_path failed for %"PRId64, -				inode->ino); -			goto fail; -		} else { -			loc->path = path; -		} -	} -	if (loc->path) { -		loc->name = strrchr (loc->path, '/'); -		if (loc->name) -			loc->name++; -		else loc->name = ""; -	} -	 -	if ((ino != 1) && -	    (parent == NULL)) { -		gf_log ("fuse-bridge", GF_LOG_DEBUG, -			"failed to search parent for %"PRId64"/%s (%"PRId64")", -			(ino_t)par, name, (ino_t)ino); -		ret = -1; -		goto fail; -	} -	ret = 0; +                ret = inode_path (parent, name, &path); +                if (ret <= 0) { +                        gf_log ("glusterfs-fuse", GF_LOG_DEBUG, +                                "inode_path failed for %"PRId64"/%s", +                                parent->ino, name); +                        goto fail; +                } else { +                        loc->path = path; +                } +        } else         if (inode) { +                ret = inode_path (inode, NULL, &path); +                if (ret <= 0) { +                        gf_log ("glusterfs-fuse", GF_LOG_DEBUG, +                                "inode_path failed for %"PRId64, +                                inode->ino); +                        goto fail; +                } else { +                        loc->path = path; +                } +        } +        if (loc->path) { +                loc->name = strrchr (loc->path, '/'); +                if (loc->name) +                        loc->name++; +                else loc->name = ""; +        } + +        if ((ino != 1) && +            (parent == NULL)) { +                gf_log ("fuse-bridge", GF_LOG_DEBUG, +                        "failed to search parent for %"PRId64"/%s (%"PRId64")", +                        (ino_t)par, name, (ino_t)ino); +                ret = -1; +                goto fail; +        } +        ret = 0;  fail: -	return ret; +        return ret;  }  static int -need_fresh_lookup (int32_t op_ret, int32_t op_errno,  -		   loc_t *loc, struct stat *buf) +need_fresh_lookup (int32_t op_ret, int32_t op_errno, +                   loc_t *loc, struct stat *buf)  {          if (op_ret == -1) { -		gf_log ("fuse-bridge", GF_LOG_DEBUG, -			"revalidate of %s failed (%s)", -			loc->path, strerror (op_errno)); +                gf_log ("fuse-bridge", GF_LOG_DEBUG, +                        "revalidate of %s failed (%s)", +                        loc->path, strerror (op_errno));                  return 1; -	} +        }          if (loc->inode->ino != buf->st_ino) { -		gf_log ("fuse-bridge", GF_LOG_DEBUG, -			"inode num of %s changed %"PRId64" -> %"PRId64, -			loc->path, loc->inode->ino, buf->st_ino); +                gf_log ("fuse-bridge", GF_LOG_DEBUG, +                        "inode num of %s changed %"PRId64" -> %"PRId64, +                        loc->path, loc->inode->ino, buf->st_ino);                  return 1;          } -	if ((loc->inode->st_mode & S_IFMT) ^ (buf->st_mode & S_IFMT)) { -		gf_log ("fuse-bridge", GF_LOG_DEBUG, -			"inode mode of %s changed 0%o -> 0%o", -			loc->path, loc->inode->st_mode, buf->st_mode); -		return 1; -	} +        if ((loc->inode->st_mode & S_IFMT) ^ (buf->st_mode & S_IFMT)) { +                gf_log ("fuse-bridge", GF_LOG_DEBUG, +                        "inode mode of %s changed 0%o -> 0%o", +                        loc->path, loc->inode->st_mode, buf->st_mode); +                return 1; +        }          return 0;  } @@ -339,14 +339,14 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }          if (state->is_revalidate == 1 -	    && need_fresh_lookup (op_ret, op_errno, &state->loc, buf)) { +            && need_fresh_lookup (op_ret, op_errno, &state->loc, buf)) {                  inode_unref (state->loc.inode);                  state->loc.inode = inode_new (state->itable);                  state->is_revalidate = 2;                  STACK_WIND (frame, fuse_lookup_cbk,                              FIRST_CHILD (this), -			    FIRST_CHILD (this)->fops->lookup, +                            FIRST_CHILD (this)->fops->lookup,                              &state->loc, state->dict);                  return 0; @@ -355,12 +355,12 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret == 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s() %s => %"PRId64" (%"PRId64")", -			frame->root->unique, gf_fop_list[frame->root->op], -			state->loc.path, buf->st_ino, state->loc.ino); +                        frame->root->unique, gf_fop_list[frame->root->op], +                        state->loc.path, buf->st_ino, state->loc.ino); -		inode_link (inode, state->loc.parent, state->loc.name, buf); +                inode_link (inode, state->loc.parent, state->loc.name, buf); -		inode_lookup (inode); +                inode_lookup (inode);                  /* TODO: make these timeouts configurable (via meta?) */                  e.ino = inode->ino; @@ -375,13 +375,13 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  e.entry_timeout = priv->entry_timeout;                  e.attr_timeout  = priv->attribute_timeout;                  e.attr = *buf; -   -		if (!e.ino || !buf->st_ino) { -			gf_log ("glusterfs-fuse", GF_LOG_WARNING, -				"%"PRId64": %s() %s returning inode 0", -				frame->root->unique, -				gf_fop_list[frame->root->op], state->loc.path); -		} + +                if (!e.ino || !buf->st_ino) { +                        gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                                "%"PRId64": %s() %s returning inode 0", +                                frame->root->unique, +                                gf_fop_list[frame->root->op], state->loc.path); +                }                  if (state->loc.parent)                          fuse_reply_entry (req, &e); @@ -392,7 +392,7 @@ fuse_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          (op_errno == ENOENT ? GF_LOG_TRACE : GF_LOG_WARNING),                          "%"PRId64": %s() %s => -1 (%s)", frame->root->unique,                          gf_fop_list[frame->root->op], state->loc.path, -			strerror (op_errno)); +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } @@ -416,20 +416,20 @@ static void  fuse_lookup (fuse_req_t req, fuse_ino_t par, const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; -	 +        int32_t       ret = -1; +          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, -			"%"PRId64": LOOKUP %"PRId64"/%s (fuse_loc_fill() failed)",  -			req_callid (req), (ino_t)par, name); -		free_state (state); -		fuse_reply_err (req, ENOENT); -		return; -	} +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                        "%"PRId64": LOOKUP %"PRId64"/%s (fuse_loc_fill() failed)", +                        req_callid (req), (ino_t)par, name); +                free_state (state); +                fuse_reply_err (req, ENOENT); +                return; +        }          if (!state->loc.inode) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE, @@ -445,8 +445,8 @@ fuse_lookup (fuse_req_t req, fuse_ino_t par, const char *name)                          state->loc.path, state->loc.inode->ino);                  state->is_revalidate = 1;          } -	 -	state->dict = dict_new(); + +        state->dict = dict_new ();          FUSE_FOP (state, fuse_lookup_cbk, GF_FOP_LOOKUP,                    lookup, &state->loc, state->dict); @@ -466,15 +466,15 @@ fuse_forget (fuse_req_t req, fuse_ino_t ino, unsigned long nlookup)          state = state_from_req (req);          fuse_inode = inode_search (state->itable, ino, NULL); -	if (fuse_inode) { -		gf_log ("glusterfs-fuse", GF_LOG_TRACE, -			"got forget on inode (%lu)", ino); -		inode_forget (fuse_inode, nlookup); -		inode_unref (fuse_inode); -	} else { -		gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -			"got forget, but inode (%lu) not found", ino); -	} +        if (fuse_inode) { +                gf_log ("glusterfs-fuse", GF_LOG_TRACE, +                        "got forget on inode (%lu)", ino); +                inode_forget (fuse_inode, nlookup); +                inode_unref (fuse_inode); +        } else { +                gf_log ("glusterfs-fuse", GF_LOG_DEBUG, +                        "got forget, but inode (%lu) not found", ino); +        }          free_state (state);          fuse_reply_none (req); @@ -495,26 +495,26 @@ fuse_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret == 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE, -                        "%"PRId64": %s() %s => %"PRId64, frame->root->unique,  +                        "%"PRId64": %s() %s => %"PRId64, frame->root->unique,                          gf_fop_list[frame->root->op], -			state->loc.path ? state->loc.path : "ERR", +                        state->loc.path ? state->loc.path : "ERR",                          buf->st_ino);                  /* TODO: make these timeouts configurable via meta */ -                /* TODO: what if the inode number has changed by now */  +                /* TODO: what if the inode number has changed by now */                  buf->st_blksize = this->ctx->page_size;                  fuse_reply_attr (req, buf, priv->attribute_timeout);          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": %s() %s => -1 (%s)", frame->root->unique,  +                        "%"PRId64": %s() %s => -1 (%s)", frame->root->unique,                          gf_fop_list[frame->root->op], -			state->loc.path ? state->loc.path : "ERR",  +                        state->loc.path ? state->loc.path : "ERR",                          strerror (op_errno));                  fuse_reply_err (req, op_errno);          } -         +          free_state (state);          STACK_DESTROY (frame->root);          return 0; @@ -526,27 +526,27 @@ fuse_getattr (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          if (ino == 1) {                  ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL); -		if (ret < 0) { -			gf_log ("glusterfs-fuse", GF_LOG_WARNING, -				"%"PRId64": GETATTR %"PRId64" (fuse_loc_fill() failed)", -				req_callid(req), (ino_t)ino); -			fuse_reply_err (req, ENOENT); -			free_state (state); -			return; -		} +                if (ret < 0) { +                        gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                                "%"PRId64": GETATTR %"PRId64" (fuse_loc_fill() failed)", +                                req_callid (req), (ino_t)ino); +                        fuse_reply_err (req, ENOENT); +                        free_state (state); +                        return; +                }                  if (state->loc.inode)                          state->is_revalidate = 1;                  else                          state->is_revalidate = -1; -		state->dict = dict_new(); +                state->dict = dict_new ();                  FUSE_FOP (state, fuse_lookup_cbk, GF_FOP_LOOKUP,                            lookup, &state->loc, state->dict); @@ -557,32 +557,32 @@ fuse_getattr (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)          if (!state->loc.inode) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": GETATTR %"PRId64" (%s) (fuse_loc_fill() returned NULL inode)",  +                        "%"PRId64": GETATTR %"PRId64" (%s) (fuse_loc_fill() returned NULL inode)",                          req_callid (req), (int64_t)ino, state->loc.path);                  fuse_reply_err (req, ENOENT);                  return;          } -         +          fd = fd_lookup (state->loc.inode, get_pid_from_req (req));          state->fd = fd;          if (!fd || S_ISDIR (state->loc.inode->st_mode)) { -		/* this is the @ret of fuse_loc_fill, checked here -		   to permit fstat() to happen even when fuse_loc_fill fails -		*/ -		if (ret < 0) { -			gf_log ("glusterfs-fuse", GF_LOG_WARNING, -				"%"PRId64": GETATTR %"PRId64" (fuse_loc_fill() failed)", -				req_callid(req), (ino_t)ino); -			fuse_reply_err (req, ENOENT); -			free_state (state); -			return; -		} +                /* this is the @ret of fuse_loc_fill, checked here +                   to permit fstat() to happen even when fuse_loc_fill fails +                */ +                if (ret < 0) { +                        gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                                "%"PRId64": GETATTR %"PRId64" (fuse_loc_fill() failed)", +                                req_callid (req), (ino_t)ino); +                        fuse_reply_err (req, ENOENT); +                        free_state (state); +                        return; +                }                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": GETATTR %"PRId64" (%s)",                          req_callid (req), (int64_t)ino, state->loc.path); -     +                  FUSE_FOP (state, fuse_attr_cbk, GF_FOP_STAT,                            stat, &state->loc);          } else { @@ -621,22 +621,22 @@ fuse_fd_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s() %s => %p", frame->root->unique, -			gf_fop_list[frame->root->op], state->loc.path, fd); +                        gf_fop_list[frame->root->op], state->loc.path, fd); -		fd_ref (fd); +                fd_ref (fd);                  if (fuse_reply_open (req, &fi) == -ENOENT) {                          gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -				"open(%s) got EINTR", state->loc.path); -			fd_unref (fd); -				goto out; +                                "open(%s) got EINTR", state->loc.path); +                        fd_unref (fd); +                                goto out;                  } -		 -		fd_bind (fd); + +                fd_bind (fd);          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": %s() %s => -1 (%s)", frame->root->unique,                          gf_fop_list[frame->root->op], state->loc.path, -			strerror (op_errno)); +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } @@ -653,7 +653,7 @@ do_chmod (fuse_req_t req, fuse_ino_t ino, struct stat *attr,  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          if (fi) { @@ -671,13 +671,13 @@ do_chmod (fuse_req_t req, fuse_ino_t ino, struct stat *attr,                  ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);                  if ((state->loc.inode == NULL) || -		    (ret < 0)) { +                    (ret < 0)) {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                                "%"PRId64": CHMOD %"PRId64" (%s) (fuse_loc_fill() failed)",  +                                "%"PRId64": CHMOD %"PRId64" (%s) (fuse_loc_fill() failed)",                                  req_callid (req), (int64_t)ino, -				state->loc.path); +                                state->loc.path);                          fuse_reply_err (req, ENOENT); -			free_state (state); +                        free_state (state);                          return;                  } @@ -698,7 +698,7 @@ do_chown (fuse_req_t req, fuse_ino_t ino, struct stat *attr,  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          uid_t         uid = 0;          gid_t         gid = 0; @@ -720,13 +720,13 @@ do_chown (fuse_req_t req, fuse_ino_t ino, struct stat *attr,          } else {                  ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);                  if ((state->loc.inode == NULL) || -		    (ret < 0)) { +                    (ret < 0)) {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                                "%"PRId64": CHOWN %"PRId64" (%s) (fuse_loc_fill() failed)",  +                                "%"PRId64": CHOWN %"PRId64" (%s) (fuse_loc_fill() failed)",                                  req_callid (req), (int64_t)ino, -				state->loc.path); +                                state->loc.path);                          fuse_reply_err (req, ENOENT); -			free_state (state); +                        free_state (state);                          return;                  } @@ -740,16 +740,16 @@ do_chown (fuse_req_t req, fuse_ino_t ino, struct stat *attr,  } -static void  +static void  do_truncate (fuse_req_t req, fuse_ino_t ino, struct stat *attr,               struct fuse_file_info *fi)  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req); -         +          if (fi) {                  fd = FI_TO_FD (fi);                  state->fd = fd; @@ -764,20 +764,20 @@ do_truncate (fuse_req_t req, fuse_ino_t ino, struct stat *attr,                            ftruncate, fd, attr->st_size);          } else {                  ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL); -                if ((state->loc.inode == NULL) ||  -		    (ret < 0)) { +                if ((state->loc.inode == NULL) || +                    (ret < 0)) {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                                "%"PRId64": TRUNCATE %s/%"PRId64" (fuse_loc_fill() failed)",  +                                "%"PRId64": TRUNCATE %s/%"PRId64" (fuse_loc_fill() failed)",                                  req_callid (req), state->loc.path, -				attr->st_size); +                                attr->st_size);                          fuse_reply_err (req, ENOENT); -			free_state (state); +                        free_state (state);                          return;                  }                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": TRUNCATE %s/%"PRId64"(%lu)", -			req_callid (req), +                        req_callid (req),                          state->loc.path, attr->st_size, ino);                  FUSE_FOP (state, fuse_attr_cbk, GF_FOP_TRUNCATE, @@ -793,22 +793,22 @@ do_utimes (fuse_req_t req, fuse_ino_t ino, struct stat *attr)  {          fuse_state_t    *state = NULL;          struct timespec  tv[2]; -	int32_t          ret = -1; +        int32_t          ret = -1; -	tv[0].tv_sec  = attr->st_atime; -	tv[0].tv_nsec = ST_ATIM_NSEC(attr); +        tv[0].tv_sec  = attr->st_atime; +        tv[0].tv_nsec = ST_ATIM_NSEC (attr);          tv[1].tv_sec  = attr->st_mtime; -        tv[1].tv_nsec = ST_ATIM_NSEC(attr); +        tv[1].tv_nsec = ST_ATIM_NSEC (attr);          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": UTIMENS %s (fuse_loc_fill() failed)",  +                        "%"PRId64": UTIMENS %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -834,7 +834,7 @@ fuse_setattr (fuse_req_t req, fuse_ino_t ino, struct stat *attr,                  do_truncate (req, ino, attr, fi);          else if (valid & (FUSE_SET_ATTR_ATIME | FUSE_SET_ATTR_MTIME))                  do_utimes (req, ino, attr); -        else  +        else                  fuse_getattr (req, ino, fi);  } @@ -851,37 +851,37 @@ fuse_err_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret == 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s() %s => 0", frame->root->unique, -			gf_fop_list[frame->root->op],  +                        gf_fop_list[frame->root->op],                          state->loc.path ? state->loc.path : "ERR");                  fuse_reply_err (req, 0);          } else {                  if (frame->root->op == GF_FOP_SETXATTR) { -			op_ret = gf_compat_setxattr (state->dict); -			if (op_ret == 0) -				op_errno = 0; -			if (op_errno == ENOTSUP) { -				gf_fuse_xattr_enotsup_log++; -				if (!(gf_fuse_xattr_enotsup_log % GF_UNIVERSAL_ANSWER)) -					gf_log ("glusterfs-fuse",  +                        op_ret = gf_compat_setxattr (state->dict); +                        if (op_ret == 0) +                                op_errno = 0; +                        if (op_errno == ENOTSUP) { +                                gf_fuse_xattr_enotsup_log++; +                                if (!(gf_fuse_xattr_enotsup_log % GF_UNIVERSAL_ANSWER)) +                                        gf_log ("glusterfs-fuse",                                                  GF_LOG_CRITICAL, -						"extended attribute not " +                                                "extended attribute not "                                                  "supported by the backend "                                                  "storage"); -			} +                        }                  } else { -			if ((frame->root->op == GF_FOP_REMOVEXATTR) -			    && (op_errno == ENOATTR)) { -				goto nolog; -			} +                        if ((frame->root->op == GF_FOP_REMOVEXATTR) +                            && (op_errno == ENOATTR)) { +                                goto nolog; +                        }                          gf_log ("glusterfs-fuse", GF_LOG_WARNING,                                  "%"PRId64": %s() %s => -1 (%s)", -				frame->root->unique, -				gf_fop_list[frame->root->op], -				state->loc.path ? state->loc.path : "ERR", +                                frame->root->unique, +                                gf_fop_list[frame->root->op], +                                state->loc.path ? state->loc.path : "ERR",                                  strerror (op_errno));                  } -	nolog: +        nolog:                  fuse_reply_err (req, op_errno);          } @@ -905,7 +905,7 @@ fuse_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret == 0)                  inode_unlink (state->loc.inode, state->loc.parent, -			      state->loc.name); +                              state->loc.name);          if (op_ret == 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE, @@ -918,7 +918,7 @@ fuse_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          op_errno == ENOTEMPTY ? GF_LOG_DEBUG : GF_LOG_WARNING,                          "%"PRId64": %s() %s => -1 (%s)", frame->root->unique,                          gf_fop_list[frame->root->op], state->loc.path, -			strerror (op_errno)); +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } @@ -934,18 +934,18 @@ static void  fuse_access (fuse_req_t req, fuse_ino_t ino, int mask)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL); -        if ((state->loc.inode == NULL) ||  -	    (ret < 0)) { +        if ((state->loc.inode == NULL) || +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": ACCESS %"PRId64" (%s) (fuse_loc_fill() failed)",  +                        "%"PRId64": ACCESS %"PRId64" (%s) (fuse_loc_fill() failed)",                          req_callid (req), (int64_t)ino, state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -955,7 +955,7 @@ fuse_access (fuse_req_t req, fuse_ino_t ino, int mask)          FUSE_FOP (state, fuse_err_cbk,                    GF_FOP_ACCESS, access, -		  &state->loc, mask); +                  &state->loc, mask);          return;  } @@ -978,13 +978,13 @@ fuse_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          "%"PRId64": %s => %s", frame->root->unique,                          state->loc.path, linkname); -                fuse_reply_readlink(req, linkname); +                fuse_reply_readlink (req, linkname);          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": %s => -1 (%s)", frame->root->unique, -                        state->loc.path, strerror(op_errno)); +                        state->loc.path, strerror (op_errno)); -                fuse_reply_err(req, op_errno); +                fuse_reply_err (req, op_errno);          }          free_state (state); @@ -998,27 +998,27 @@ static void  fuse_readlink (fuse_req_t req, fuse_ino_t ino)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64" READLINK %s/%"PRId64" (fuse_loc_fill() returned NULL inode)",  +                        "%"PRId64" READLINK %s/%"PRId64" (fuse_loc_fill() returned NULL inode)",                          req_callid (req), state->loc.path, -			state->loc.inode->ino); +                        state->loc.inode->ino);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } -   +          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64" READLINK %s/%"PRId64, req_callid (req),                  state->loc.path, state->loc.inode->ino);          FUSE_FOP (state, fuse_readlink_cbk, GF_FOP_READLINK, -		  readlink, &state->loc, 4096); +                  readlink, &state->loc, 4096);          return;  } @@ -1029,18 +1029,18 @@ fuse_mknod (fuse_req_t req, fuse_ino_t par, const char *name,              mode_t mode, dev_t rdev)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64" MKNOD %s (fuse_loc_fill() failed)",  +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                        "%"PRId64" MKNOD %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return; -	} +        }          state->loc.inode = inode_new (state->itable); @@ -1049,28 +1049,28 @@ fuse_mknod (fuse_req_t req, fuse_ino_t par, const char *name,                  state->loc.path);          FUSE_FOP (state, fuse_entry_cbk, GF_FOP_MKNOD, -		  mknod, &state->loc, mode, rdev); +                  mknod, &state->loc, mode, rdev);          return;  } -static void  +static void  fuse_mkdir (fuse_req_t req, fuse_ino_t par, const char *name, mode_t mode)  {          fuse_state_t *state; -	int32_t ret = -1; +        int32_t ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64" MKDIR %s (fuse_loc_fill() failed)",  +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                        "%"PRId64" MKDIR %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return; -	} +        }          state->loc.inode = inode_new (state->itable); @@ -1079,29 +1079,29 @@ fuse_mkdir (fuse_req_t req, fuse_ino_t par, const char *name, mode_t mode)                  state->loc.path);          FUSE_FOP (state, fuse_entry_cbk, GF_FOP_MKDIR, -		  mkdir, &state->loc, mode); +                  mkdir, &state->loc, mode);          return;  } -static void  +static void  fuse_unlink (fuse_req_t req, fuse_ino_t par, const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": UNLINK %s (fuse_loc_fill() returned NULL inode)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -1110,27 +1110,27 @@ fuse_unlink (fuse_req_t req, fuse_ino_t par, const char *name)                  state->loc.path);          FUSE_FOP (state, fuse_unlink_cbk, GF_FOP_UNLINK, -		  unlink, &state->loc); +                  unlink, &state->loc);          return;  } -static void  +static void  fuse_rmdir (fuse_req_t req, fuse_ino_t par, const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": RMDIR %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -1139,7 +1139,7 @@ fuse_rmdir (fuse_req_t req, fuse_ino_t par, const char *name)                  state->loc.path);          FUSE_FOP (state, fuse_unlink_cbk, GF_FOP_RMDIR, -		  rmdir, &state->loc); +                  rmdir, &state->loc);          return;  } @@ -1150,18 +1150,18 @@ fuse_symlink (fuse_req_t req, const char *linkname, fuse_ino_t par,                const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, par, name); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64" SYMLINK %s -> %s (fuse_loc_fill() failed)",  +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                        "%"PRId64" SYMLINK %s -> %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path, linkname);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return; -	} +        }          state->loc.inode = inode_new (state->itable); @@ -1176,7 +1176,7 @@ fuse_symlink (fuse_req_t req, const char *linkname, fuse_ino_t par,  } -int  +int  fuse_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   int32_t op_ret, int32_t op_errno, struct stat *buf)  { @@ -1189,15 +1189,15 @@ fuse_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret == 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s -> %s => 0 (buf->st_ino=%"PRId64" , loc->ino=%"PRId64")", -			frame->root->unique, state->loc.path, state->loc2.path, -			buf->st_ino, state->loc.ino); +                        frame->root->unique, state->loc.path, state->loc2.path, +                        buf->st_ino, state->loc.ino);                  {                          /* ugly ugly - to stay blind to situation where                             rename happens on a new inode                          */                          buf->st_ino = state->loc.ino; -			buf->st_mode = state->loc.inode->st_mode; +                        buf->st_mode = state->loc.inode->st_mode;                  }                  buf->st_blksize = this->ctx->page_size; @@ -1211,7 +1211,7 @@ fuse_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": %s -> %s => -1 (%s)", frame->root->unique,                          state->loc.path, state->loc2.path, -			strerror (op_errno)); +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } @@ -1225,35 +1225,35 @@ static void  fuse_rename (fuse_req_t req, fuse_ino_t oldpar, const char *oldname,               fuse_ino_t newpar, const char *newname)  { -        fuse_state_t *state = NULL;  -	int32_t       ret = -1; +        fuse_state_t *state = NULL; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 0, oldpar, oldname);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "for %s %"PRId64": RENAME `%s' -> `%s' (fuse_loc_fill() failed)",                          state->loc.path, req_callid (req), state->loc.path,                          state->loc2.path); -     +                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          }          ret = fuse_loc_fill (&state->loc2, state, 0, newpar, newname); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "for %s %"PRId64": RENAME `%s' -> `%s' (fuse_loc_fill() failed)",                          state->loc.path, req_callid (req), state->loc.path,                          state->loc2.path); -     +                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return; -       	} +               }          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": RENAME `%s (%"PRId64")' -> `%s (%"PRId64")'", @@ -1271,7 +1271,7 @@ static void  fuse_link (fuse_req_t req, fuse_ino_t ino, fuse_ino_t par, const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req); @@ -1279,21 +1279,21 @@ fuse_link (fuse_req_t req, fuse_ino_t ino, fuse_ino_t par, const char *name)          ret = fuse_loc_fill (&state->loc2, state, ino, 0, NULL);          if ((state->loc2.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "fuse_loc_fill() failed for %s %"PRId64": LINK %s %s",  -                        state->loc2.path, req_callid (req),  +                        "fuse_loc_fill() failed for %s %"PRId64": LINK %s %s", +                        state->loc2.path, req_callid (req),                          state->loc2.path, state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          }          state->loc.inode = inode_ref (state->loc2.inode);          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": LINK() %s (%"PRId64") -> %s (%"PRId64")", -		req_callid (req), state->loc2.path, state->loc2.ino, -		state->loc.path, state->loc.ino); +                req_callid (req), state->loc2.path, state->loc2.ino, +                state->loc.path, state->loc.ino);          FUSE_FOP (state, fuse_entry_cbk, GF_FOP_LINK,                    link, &state->loc2, &state->loc); @@ -1326,8 +1326,8 @@ fuse_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s() %s => %p (ino=%"PRId64")", -			frame->root->unique, gf_fop_list[frame->root->op], -			state->loc.path, fd, buf->st_ino); +                        frame->root->unique, gf_fop_list[frame->root->op], +                        state->loc.path, fd, buf->st_ino);                  e.ino = buf->st_ino; @@ -1344,21 +1344,21 @@ fuse_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  fi.keep_cache = 0; -		inode_link (inode, state->loc.parent, -			    state->loc.name, buf); -		 -		inode_lookup (inode); +                inode_link (inode, state->loc.parent, +                            state->loc.name, buf); -		fd_ref (fd); +                inode_lookup (inode); + +                fd_ref (fd);                  if (fuse_reply_create (req, &e, &fi) == -ENOENT) {                          gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -				"create(%s) got EINTR", state->loc.path); -			inode_forget (inode, 1); -			fd_unref (fd); -			goto out; -                }  +                                "create(%s) got EINTR", state->loc.path); +                        inode_forget (inode, 1); +                        fd_unref (fd); +                        goto out; +                } -		fd_bind (fd); +                fd_bind (fd);          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": %s => -1 (%s)", req_callid (req), @@ -1379,26 +1379,26 @@ fuse_create (fuse_req_t req, fuse_ino_t par, const char *name,  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          state->flags = fi->flags;          ret = fuse_loc_fill (&state->loc, state, 0, par, name); -	if (ret < 0) { -		gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64" CREATE %s (fuse_loc_fill() failed)",  +        if (ret < 0) { +                gf_log ("glusterfs-fuse", GF_LOG_WARNING, +                        "%"PRId64" CREATE %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return; -	} +        }          state->loc.inode = inode_new (state->itable);          fd = fd_create (state->loc.inode, get_pid_from_req (req));          state->fd = fd; -	fd->flags = state->flags; +        fd->flags = state->flags;          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": CREATE %s", req_callid (req), @@ -1416,26 +1416,26 @@ fuse_open (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          state->flags = fi->flags;          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": OPEN %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path); -   +                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          }          fd = fd_create (state->loc.inode, get_pid_from_req (req));          state->fd = fd; -	fd->flags = fi->flags; +        fd->flags = fi->flags;          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": OPEN %s", req_callid (req), @@ -1463,7 +1463,7 @@ fuse_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret >= 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": READ => %d/%"GF_PRI_SIZET",%"PRId64"/%"PRId64, -			frame->root->unique, +                        frame->root->unique,                          op_ret, state->size, state->off, stbuf->st_size);  #ifdef HAVE_FUSE_REPLY_IOV @@ -1473,7 +1473,7 @@ fuse_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  #endif          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": READ => %d (%s)", frame->root->unique,  +                        "%"PRId64": READ => %d (%s)", frame->root->unique,                          op_ret, strerror (op_errno));                  fuse_reply_err (req, op_errno); @@ -1496,7 +1496,7 @@ fuse_readv (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,          state = state_from_req (req);          state->size = size;          state->off = off; -         +          fd = FI_TO_FD (fi);          state->fd = fd; @@ -1524,18 +1524,18 @@ fuse_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (op_ret >= 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": WRITE => %d/%"GF_PRI_SIZET",%"PRId64"/%"PRId64, -			frame->root->unique, +                        frame->root->unique,                          op_ret, state->size, state->off, stbuf->st_size);                  fuse_reply_write (req, op_ret);          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": WRITE => -1 (%s)", frame->root->unique,  -                        strerror(op_errno)); +                        "%"PRId64": WRITE => -1 (%s)", frame->root->unique, +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } -         +          free_state (state);          STACK_DESTROY (frame->root); @@ -1550,15 +1550,15 @@ fuse_write (fuse_req_t req, fuse_ino_t ino, const char *buf,  {          fuse_state_t    *state = NULL;          struct iovec     vector; -	fd_t            *fd = NULL; +        fd_t            *fd = NULL;          struct iobref   *iobref = NULL;          struct iobuf    *iobuf = NULL;          state       = state_from_req (req);          state->size = size;          state->off  = off; -	fd          = FI_TO_FD (fi); -	state->fd   = fd; +        fd          = FI_TO_FD (fi); +        state->fd   = fd;          vector.iov_base = (void *)buf;          vector.iov_len  = size; @@ -1582,11 +1582,11 @@ static void  fuse_flush (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state = NULL; -	fd_t         *fd = NULL; +        fd_t         *fd = NULL;          state = state_from_req (req); -	fd = FI_TO_FD (fi); -	state->fd = fd; +        fd = FI_TO_FD (fi); +        state->fd = fd;          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": FLUSH %p", req_callid (req), fd); @@ -1598,7 +1598,7 @@ fuse_flush (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  } -static void  +static void  fuse_release (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state = NULL; @@ -1610,15 +1610,15 @@ fuse_release (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)                  "%"PRId64": RELEASE %p", req_callid (req), state->fd);          fd_unref (state->fd); -         +          fuse_reply_err (req, 0); -         +          free_state (state);          return;  } -static void  +static void  fuse_fsync (fuse_req_t req, fuse_ino_t ino, int datasync,              struct fuse_file_info *fi)  { @@ -1644,18 +1644,18 @@ fuse_opendir (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": OPENDIR %s (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path); -   +                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -1677,58 +1677,58 @@ fuse_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  {          fuse_state_t *state = NULL;          fuse_req_t    req = NULL; -	int           size = 0; -	int           entry_size = 0; -	char         *buf = NULL; -	gf_dirent_t  *entry = NULL; -	struct stat   stbuf = {0, }; +        int           size = 0; +        int           entry_size = 0; +        char         *buf = NULL; +        gf_dirent_t  *entry = NULL; +        struct stat   stbuf = {0, };          state = frame->root->state;          req   = state->req;          if (op_ret < 0) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": READDIR => -1 (%s)", frame->root->unique,  +                        "%"PRId64": READDIR => -1 (%s)", frame->root->unique,                          strerror (op_errno));                  fuse_reply_err (req, op_errno); -		goto out; -	} - -	gf_log ("glusterfs-fuse", GF_LOG_TRACE, -		"%"PRId64": READDIR => %d/%"GF_PRI_SIZET",%"PRId64, -		frame->root->unique, op_ret, state->size, state->off); - -	list_for_each_entry (entry, &entries->list, list) { -		size += fuse_dirent_size (strlen (entry->d_name)); -	} - -	buf = CALLOC (1, size); -	if (!buf) { -		gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -			"%"PRId64": READDIR => -1 (%s)", frame->root->unique, -			strerror (ENOMEM)); -		fuse_reply_err (req, -ENOMEM); -		goto out; -	} - -	size = 0; -	list_for_each_entry (entry, &entries->list, list) { -		stbuf.st_ino = entry->d_ino; -		entry_size = fuse_dirent_size (strlen (entry->d_name)); -		fuse_add_direntry (req, buf + size, entry_size, -				   entry->d_name, &stbuf, -				   entry->d_off); -		size += entry_size; -	} - -	fuse_reply_buf (req, (void *)buf, size); +                goto out; +        } + +        gf_log ("glusterfs-fuse", GF_LOG_TRACE, +                "%"PRId64": READDIR => %d/%"GF_PRI_SIZET",%"PRId64, +                frame->root->unique, op_ret, state->size, state->off); + +        list_for_each_entry (entry, &entries->list, list) { +                size += fuse_dirent_size (strlen (entry->d_name)); +        } + +        buf = CALLOC (1, size); +        if (!buf) { +                gf_log ("glusterfs-fuse", GF_LOG_DEBUG, +                        "%"PRId64": READDIR => -1 (%s)", frame->root->unique, +                        strerror (ENOMEM)); +                fuse_reply_err (req, -ENOMEM); +                goto out; +        } + +        size = 0; +        list_for_each_entry (entry, &entries->list, list) { +                stbuf.st_ino = entry->d_ino; +                entry_size = fuse_dirent_size (strlen (entry->d_name)); +                fuse_add_direntry (req, buf + size, entry_size, +                                   entry->d_name, &stbuf, +                                   entry->d_off); +                size += entry_size; +        } + +        fuse_reply_buf (req, (void *)buf, size);  out:          free_state (state);          STACK_DESTROY (frame->root); -	if (buf) -		FREE (buf); +        if (buf) +                FREE (buf);          return 0;  } @@ -1739,13 +1739,13 @@ fuse_readdir (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,                struct fuse_file_info *fi)  {          fuse_state_t *state = NULL; -	fd_t         *fd = NULL; +        fd_t         *fd = NULL;          state = state_from_req (req);          state->size = size;          state->off = off; -	fd = FI_TO_FD (fi); -	state->fd = fd; +        fd = FI_TO_FD (fi); +        state->fd = fd;          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": READDIR (%p, size=%"GF_PRI_SIZET", offset=%"PRId64")", @@ -1756,7 +1756,7 @@ fuse_readdir (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,  } -static void  +static void  fuse_releasedir (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)  {          fuse_state_t *state = NULL; @@ -1766,28 +1766,28 @@ fuse_releasedir (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi)          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": RELEASEDIR %p", req_callid (req), state->fd); -	 -	fd_unref (state->fd); -	fuse_reply_err (req, 0); -	 -	free_state (state); +        fd_unref (state->fd); + +        fuse_reply_err (req, 0); + +        free_state (state);          return;  } -static void  +static void  fuse_fsyncdir (fuse_req_t req, fuse_ino_t ino, int datasync,                 struct fuse_file_info *fi)  {          fuse_state_t *state = NULL; -	fd_t         *fd = NULL; -	 -	fd = FI_TO_FD (fi); +        fd_t         *fd = NULL; + +        fd = FI_TO_FD (fi);          state = state_from_req (req); -	state->fd = fd; +        state->fd = fd;          FUSE_FOP (state, fuse_err_cbk, GF_FOP_FSYNCDIR,                    fsyncdir, fd, datasync); @@ -1837,8 +1837,8 @@ fuse_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          } else {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": ERR => -1 (%s)", frame->root->unique,  -                        strerror(op_errno)); +                        "%"PRId64": ERR => -1 (%s)", frame->root->unique, +                        strerror (op_errno));                  fuse_reply_err (req, op_errno);          } @@ -1853,18 +1853,18 @@ static void  fuse_statfs (fuse_req_t req, fuse_ino_t ino)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, 1, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": STATFS (fuse_loc_fill() fail)", -			req_callid (req)); -     +                        req_callid (req)); +                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -1881,34 +1881,34 @@ fuse_setxattr (fuse_req_t req, fuse_ino_t ino, const char *name,                 const char *value, size_t size, int flags)  {          fuse_state_t *state = NULL; -	char         *dict_value = NULL; -	int32_t       ret = -1; +        char         *dict_value = NULL; +        int32_t       ret = -1;  #ifdef DISABLE_POSIX_ACL -	if (!strncmp (name, "system.", 7)) { -		fuse_reply_err (req, EOPNOTSUPP); -		return; -	} +        if (!strncmp (name, "system.", 7)) { +                fuse_reply_err (req, EOPNOTSUPP); +                return; +        }  #endif          state = state_from_req (req);          state->size = size;          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": SETXATTR %s/%"PRId64" (%s) (fuse_loc_fill() failed)",  +                        "%"PRId64": SETXATTR %s/%"PRId64" (%s) (fuse_loc_fill() failed)",                          req_callid (req),                          state->loc.path, (int64_t)ino, name);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          }          state->dict = get_new_dict (); -	dict_value = memdup (value, size); +        dict_value = memdup (value, size);          dict_set (state->dict, (char *)name,                    data_from_dynptr ((void *)dict_value, size));          dict_ref (state->dict); @@ -1924,7 +1924,7 @@ fuse_setxattr (fuse_req_t req, fuse_ino_t ino, const char *name,  }  static void -fuse_reply_xattr_buf(fuse_state_t *state, fuse_req_t req, const char *value, +fuse_reply_xattr_buf (fuse_state_t *state, fuse_req_t req, const char *value,                       size_t ret)  {          /* linux kernel limits the size of xattr value to 64k */ @@ -1946,11 +1946,11 @@ static int  fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  int32_t op_ret, int32_t op_errno, dict_t *dict)  { -	int             need_to_free_dict = 0; +        int             need_to_free_dict = 0;          char           *value = "";          fuse_state_t   *state = NULL;          fuse_req_t      req = NULL; -	int32_t         dummy_ret = 0; +        int32_t         dummy_ret = 0;          data_t         *value_data = NULL;          fuse_private_t *priv = NULL;          struct stat     st; @@ -1967,29 +1967,29 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          dummy_ret = 0;  #ifdef GF_DARWIN_HOST_OS -	/* This is needed in MacFuse, where MacOSX Finder needs some specific  -	 * keys to be supported from FS -	 */ - -	if (state->name) { -		if (!dict) { -			dict = get_new_dict (); -			need_to_free_dict = 1; -		} -		dummy_ret = gf_compat_getxattr (state->name, dict); -		if (dummy_ret != -1) -			ret = dummy_ret; -	} else { -		if (!dict) { -			dict = get_new_dict (); -			need_to_free_dict = 1; -		} -		dummy_ret = gf_compat_listxattr (ret, dict, state->size); -		if (dummy_ret != -1) -			ret = dummy_ret; -	} +        /* This is needed in MacFuse, where MacOSX Finder needs some specific +         * keys to be supported from FS +         */ + +        if (state->name) { +                if (!dict) { +                        dict = get_new_dict (); +                        need_to_free_dict = 1; +                } +                dummy_ret = gf_compat_getxattr (state->name, dict); +                if (dummy_ret != -1) +                        ret = dummy_ret; +        } else { +                if (!dict) { +                        dict = get_new_dict (); +                        need_to_free_dict = 1; +                } +                dummy_ret = gf_compat_listxattr (ret, dict, state->size); +                if (dummy_ret != -1) +                        ret = dummy_ret; +        }  #endif /* DARWIN */ -	 +          if (ret >= 0) {                  gf_log ("glusterfs-fuse", GF_LOG_TRACE,                          "%"PRId64": %s() %s => %d", frame->root->unique, @@ -2002,39 +2002,39 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          if (value_data) {                                  ret = value_data->len; /* Don't return the value for '\0' */                                  value = value_data->data; -         +                                  fuse_reply_xattr_buf (state, req, value, ret);                                  /* if(ret >...)...else if...else */                          }  else if (!strcmp (state->name, "user.glusterfs-booster-volfile")) { -				if (!priv->volfile) { -					memset (&st, 0, sizeof (st)); -					fd = fileno (this->ctx->specfp); -					ret = fstat (fd, &st); -					if (ret != 0) { -						gf_log (this->name, -							GF_LOG_ERROR, -							"fstat on fd (%d) failed (%s)", fd, strerror (errno)); -						fuse_reply_err (req, ENODATA); -					} -					 -					priv->volfile_size = st.st_size; -					file = priv->volfile = CALLOC (1, priv->volfile_size); -					ret = lseek (fd, 0, SEEK_SET); -					while ((ret = read (fd, file, GF_UNIT_KB)) > 0) { -						file += ret; -					} -				} -				 -				fuse_reply_xattr_buf (state, req, priv->volfile, priv->volfile_size); -				/* if(ret >...)...else if...else */ -			} else if (!strcmp (state->name, "user.glusterfs-booster-path")) { -				fuse_reply_xattr_buf (state, req, state->loc.path, -				                      strlen(state->loc.path) + 1); -			} else { -				fuse_reply_err (req, ENODATA); -			} /* if(value_data)...else */ -		} else { -			/* if callback for listxattr */ +                                if (!priv->volfile) { +                                        memset (&st, 0, sizeof (st)); +                                        fd = fileno (this->ctx->specfp); +                                        ret = fstat (fd, &st); +                                        if (ret != 0) { +                                                gf_log (this->name, +                                                        GF_LOG_ERROR, +                                                        "fstat on fd (%d) failed (%s)", fd, strerror (errno)); +                                                fuse_reply_err (req, ENODATA); +                                        } + +                                        priv->volfile_size = st.st_size; +                                        file = priv->volfile = CALLOC (1, priv->volfile_size); +                                        ret = lseek (fd, 0, SEEK_SET); +                                        while ((ret = read (fd, file, GF_UNIT_KB)) > 0) { +                                                file += ret; +                                        } +                                } + +                                fuse_reply_xattr_buf (state, req, priv->volfile, priv->volfile_size); +                                /* if(ret >...)...else if...else */ +                        } else if (!strcmp (state->name, "user.glusterfs-booster-path")) { +                                fuse_reply_xattr_buf (state, req, state->loc.path, +                                                      strlen (state->loc.path) + 1); +                        } else { +                                fuse_reply_err (req, ENODATA); +                        } /* if(value_data)...else */ +                } else { +                        /* if callback for listxattr */                          trav = dict->members_list;                          while (trav) {                                  len += strlen (trav->key) + 1; @@ -2046,16 +2046,16 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          trav = dict->members_list;                          while (trav) {                                  strcpy (value + len, trav->key); -                                value[len + strlen(trav->key)] = '\0'; +                                value[len + strlen (trav->key)] = '\0';                                  len += strlen (trav->key) + 1;                                  trav = trav->next;                          } /* while(trav) */                          fuse_reply_xattr_buf (state, req, value, len); -		} /* if(state->name)...else */ +                } /* if(state->name)...else */          } else {                  /* if failure - no need to check if listxattr or getxattr */                  if (op_errno != ENODATA) { -                        if (op_errno == ENOTSUP)  +                        if (op_errno == ENOTSUP)                          {                                  gf_fuse_xattr_enotsup_log++;                                  if (!(gf_fuse_xattr_enotsup_log % GF_UNIVERSAL_ANSWER)) @@ -2063,28 +2063,28 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                                  "extended attribute not "                                                  "supported by the backend "                                                  "storage"); -                        }  -                        else  +                        } +                        else                          {                                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                                          "%"PRId64": %s() %s => -1 (%s)", -					frame->root->unique, +                                        frame->root->unique,                                          gf_fop_list[frame->root->op], -					state->loc.path, strerror(op_errno)); +                                        state->loc.path, strerror (op_errno));                          }                  } else {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING,                                  "%"PRId64": %s() %s => -1 (%s)", -				frame->root->unique, +                                frame->root->unique,                                  gf_fop_list[frame->root->op], state->loc.path, -				strerror(op_errno)); +                                strerror (op_errno));                  } /* if(op_errno!= ENODATA)...else */                  fuse_reply_err (req, op_errno);          } /* if(op_ret>=0)...else */ -	if (need_to_free_dict) -		dict_unref (dict); +        if (need_to_free_dict) +                dict_unref (dict);          free_state (state);          STACK_DESTROY (frame->root); @@ -2097,13 +2097,13 @@ static void  fuse_getxattr (fuse_req_t req, fuse_ino_t ino, const char *name, size_t size)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;  #ifdef DISABLE_POSIX_ACL -	if (!strncmp (name, "system.", 7)) { -		fuse_reply_err (req, ENODATA); -		return; -	} +        if (!strncmp (name, "system.", 7)) { +                fuse_reply_err (req, ENODATA); +                return; +        }  #endif          state = state_from_req (req); @@ -2112,13 +2112,13 @@ fuse_getxattr (fuse_req_t req, fuse_ino_t ino, const char *name, size_t size)          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING, -                        "%"PRId64": GETXATTR %s/%"PRId64" (%s) (fuse_loc_fill() failed)",  +                        "%"PRId64": GETXATTR %s/%"PRId64" (%s) (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path, (int64_t)ino, name);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -2137,19 +2137,19 @@ static void  fuse_listxattr (fuse_req_t req, fuse_ino_t ino, size_t size)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          state->size = size;          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_WARNING,                          "%"PRId64": LISTXATTR %s/%"PRId64" (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path, (int64_t)ino);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -2169,18 +2169,18 @@ fuse_removexattr (fuse_req_t req, fuse_ino_t ino, const char *name)  {          fuse_state_t *state = NULL; -	int32_t       ret = -1; +        int32_t       ret = -1;          state = state_from_req (req);          ret = fuse_loc_fill (&state->loc, state, ino, 0, NULL);          if ((state->loc.inode == NULL) || -	    (ret < 0)) { +            (ret < 0)) {                  gf_log ("glusterfs-fuse", GF_LOG_DEBUG,                          "%"PRId64": REMOVEXATTR %s/%"PRId64" (%s) (fuse_loc_fill() failed)",                          req_callid (req), state->loc.path, (int64_t)ino, name);                  fuse_reply_err (req, ENOENT); -		free_state (state); +                free_state (state);                  return;          } @@ -2213,19 +2213,19 @@ fuse_getlk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (op_errno == ENOSYS) {                          gf_fuse_lk_enosys_log++;                          if (!(gf_fuse_lk_enosys_log % GF_UNIVERSAL_ANSWER)) { -				gf_log ("glusterfs-fuse", GF_LOG_ERROR, -					"GETLK not supported. loading " +                                gf_log ("glusterfs-fuse", GF_LOG_ERROR, +                                        "GETLK not supported. loading "                                          "'features/posix-locks' on server side "                                          "will add GETLK support.");                          }                  } else {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING,                                  "%"PRId64": ERR => -1 (%s)", -				frame->root->unique, strerror (op_errno)); +                                frame->root->unique, strerror (op_errno));                  }                  fuse_reply_err (state->req, op_errno);          } -         +          free_state (state);          STACK_DESTROY (frame->root); @@ -2238,12 +2238,12 @@ fuse_getlk (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,              struct flock *lock)  {          fuse_state_t *state = NULL; -	fd_t         *fd = NULL; +        fd_t         *fd = NULL; -	fd = FI_TO_FD (fi); +        fd = FI_TO_FD (fi);          state = state_from_req (req);          state->req = req; -	state->fd = fd; +        state->fd = fd;          gf_log ("glusterfs-fuse", GF_LOG_TRACE,                  "%"PRId64": GETLK %p", req_callid (req), fd); @@ -2271,7 +2271,7 @@ fuse_setlk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (op_errno == ENOSYS) {                          gf_fuse_lk_enosys_log++;                          if (!(gf_fuse_lk_enosys_log % GF_UNIVERSAL_ANSWER)) { -				gf_log ("glusterfs-fuse", GF_LOG_ERROR, +                                gf_log ("glusterfs-fuse", GF_LOG_ERROR,                                          "SETLK not supported. loading "                                          "'features/posix-locks' on server side "                                          "will add SETLK support."); @@ -2279,12 +2279,12 @@ fuse_setlk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  } else  {                          gf_log ("glusterfs-fuse", GF_LOG_WARNING,                                  "%"PRId64": ERR => -1 (%s)", -				frame->root->unique, strerror (op_errno)); +                                frame->root->unique, strerror (op_errno));                  }                  fuse_reply_err (state->req, op_errno);          } -         +          free_state (state);          STACK_DESTROY (frame->root); @@ -2298,7 +2298,7 @@ fuse_setlk (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,  {          fuse_state_t *state = NULL;          fd_t         *fd = NULL; -         +          fd = FI_TO_FD (fi);          state = state_from_req (req);          state->req = req; @@ -2315,10 +2315,10 @@ fuse_setlk (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi,  } -static void  +static void  fuse_init (void *data, struct fuse_conn_info *conn)  { -	return; +        return;  }  static void @@ -2366,78 +2366,78 @@ static struct fuse_lowlevel_ops fuse_ops = {  int  fuse_root_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		      int32_t op_ret, int32_t op_errno, -		      inode_t *inode, struct stat *buf, dict_t *xattr) +                      int32_t op_ret, int32_t op_errno, +                      inode_t *inode, struct stat *buf, dict_t *xattr)  {          fuse_private_t *priv = NULL;          priv = this->private; -	if (op_ret == 0) { -		gf_log (this->name, GF_LOG_TRACE, -			"first lookup on root succeeded."); -		inode_lookup (inode); -	} else { -		gf_log (this->name, GF_LOG_DEBUG, -			"first lookup on root failed."); -	} -	STACK_DESTROY (frame->root); -	pthread_mutex_lock (&priv->first_call_mutex); -	{ -		priv->first_call = 0; -		pthread_cond_broadcast (&priv->first_call_cond); -	} -	pthread_mutex_unlock (&priv->first_call_mutex); -	return 0; +        if (op_ret == 0) { +                gf_log (this->name, GF_LOG_TRACE, +                        "first lookup on root succeeded."); +                inode_lookup (inode); +        } else { +                gf_log (this->name, GF_LOG_DEBUG, +                        "first lookup on root failed."); +        } +        STACK_DESTROY (frame->root); +        pthread_mutex_lock (&priv->first_call_mutex); +        { +                priv->first_call = 0; +                pthread_cond_broadcast (&priv->first_call_cond); +        } +        pthread_mutex_unlock (&priv->first_call_mutex); +        return 0;  }  int  fuse_root_lookup (xlator_t *this)  { -	fuse_private_t *priv = NULL; -	loc_t           loc; -	call_frame_t   *frame = NULL; -	xlator_t       *xl = NULL; -	dict_t         *dict = NULL; +        fuse_private_t *priv = NULL; +        loc_t           loc; +        call_frame_t   *frame = NULL; +        xlator_t       *xl = NULL; +        dict_t         *dict = NULL; -	priv = this->private; +        priv = this->private; -	pthread_cond_init (&priv->first_call_cond, NULL); -	pthread_mutex_init (&priv->first_call_mutex, NULL); +        pthread_cond_init (&priv->first_call_cond, NULL); +        pthread_mutex_init (&priv->first_call_mutex, NULL); -	loc.path = "/"; -	loc.name = ""; -	loc.ino = 1; -	loc.inode = inode_search (this->itable, 1, NULL); -	loc.parent = NULL; +        loc.path = "/"; +        loc.name = ""; +        loc.ino = 1; +        loc.inode = inode_search (this->itable, 1, NULL); +        loc.parent = NULL; -	dict = dict_new(); -	frame = create_frame (this, this->ctx->pool); -	frame->root->type = GF_OP_TYPE_FOP_REQUEST; -	xl = this->children->xlator; +        dict = dict_new (); +        frame = create_frame (this, this->ctx->pool); +        frame->root->type = GF_OP_TYPE_FOP_REQUEST; +        xl = this->children->xlator; -	STACK_WIND (frame, fuse_root_lookup_cbk, xl, xl->fops->lookup,  -		    &loc, dict); -	dict_unref (dict); +        STACK_WIND (frame, fuse_root_lookup_cbk, xl, xl->fops->lookup, +                    &loc, dict); +        dict_unref (dict); -	pthread_mutex_lock (&priv->first_call_mutex); -	{ -		while (priv->first_call) { -			pthread_cond_wait (&priv->first_call_cond,  -					   &priv->first_call_mutex); -		} -	} -	pthread_mutex_unlock (&priv->first_call_mutex); +        pthread_mutex_lock (&priv->first_call_mutex); +        { +                while (priv->first_call) { +                        pthread_cond_wait (&priv->first_call_cond, +                                           &priv->first_call_mutex); +                } +        } +        pthread_mutex_unlock (&priv->first_call_mutex); -	return 0; +        return 0;  }  static void *  fuse_thread_proc (void *data)  { -	char           *mount_point = NULL; +        char           *mount_point = NULL;          xlator_t       *this = NULL;          fuse_private_t *priv = NULL;          int32_t         res = 0; @@ -2462,13 +2462,13 @@ fuse_thread_proc (void *data)                  res = fuse_chan_receive (priv->ch, iobuf->ptr, chan_size); -		if (priv->first_call) { +                if (priv->first_call) {                          if (priv->first_call > 1) {                                  priv->first_call--;                          } else {                                  fuse_root_lookup (this);                          } -		} +                }                  if (res == -1) {                          if (errno != EINTR) { @@ -2490,21 +2490,21 @@ fuse_thread_proc (void *data)                  iobuf_unref (iobuf);          } -	if (dict_get (this->options, ZR_MOUNTPOINT_OPT)) -		mount_point = data_to_str (dict_get (this->options,  -						     ZR_MOUNTPOINT_OPT)); -	if (mount_point) { -		gf_log (this->name, GF_LOG_NORMAL, -			"unmounting %s", mount_point); -		dict_del (this->options, ZR_MOUNTPOINT_OPT); -	} - -	fuse_session_remove_chan (priv->ch); -	fuse_session_destroy (priv->se); -	//  fuse_unmount (priv->mount_point, priv->ch); -	 -	raise (SIGTERM); -	 +        if (dict_get (this->options, ZR_MOUNTPOINT_OPT)) +                mount_point = data_to_str (dict_get (this->options, +                                                     ZR_MOUNTPOINT_OPT)); +        if (mount_point) { +                gf_log (this->name, GF_LOG_NORMAL, +                        "unmounting %s", mount_point); +                dict_del (this->options, ZR_MOUNTPOINT_OPT); +        } + +        fuse_session_remove_chan (priv->ch); +        fuse_session_destroy (priv->se); +        //  fuse_unmount (priv->mount_point, priv->ch); + +        raise (SIGTERM); +          return NULL;  } @@ -2516,11 +2516,11 @@ notify (xlator_t *this, int32_t event, void *data, ...)          fuse_private_t *private = NULL;          private = this->private; -   +          switch (event)          {          case GF_EVENT_CHILD_UP: -        case GF_EVENT_CHILD_CONNECTING:  +        case GF_EVENT_CHILD_CONNECTING:          {                  if (!private->fuse_thread_started)                  { @@ -2531,10 +2531,10 @@ notify (xlator_t *this, int32_t event, void *data, ...)                          if (ret != 0) {                                  gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -                                        "pthread_create() failed (%s)",  +                                        "pthread_create() failed (%s)",                                          strerror (errno)); -                                /* If fuse thread is not started, that means,  +                                /* If fuse thread is not started, that means,                                     its hung, we can't use this process. */                                  raise (SIGTERM);                          } @@ -2549,13 +2549,13 @@ notify (xlator_t *this, int32_t event, void *data, ...)          }          case GF_EVENT_VOLFILE_MODIFIED:          { -                gf_log ("fuse", GF_LOG_CRITICAL,  +                gf_log ("fuse", GF_LOG_CRITICAL,                          "Remote volume file changed, try re-mounting.");                  if (private->strict_volfile_check) {                          //fuse_session_remove_chan (private->ch);                          //fuse_session_destroy (private->se);                          //fuse_unmount (private->mount_point, private->ch); -                        /* TODO: Above code if works, will be a cleaner way,  +                        /* TODO: Above code if works, will be a cleaner way,                             but for now, lets just achieve what we want */                          raise (SIGTERM);                  } @@ -2568,245 +2568,245 @@ notify (xlator_t *this, int32_t event, void *data, ...)  }  static struct fuse_opt subtype_workaround[] = { -	FUSE_OPT_KEY("subtype=", 0), -	FUSE_OPT_KEY("fssubtype=", 0), -	FUSE_OPT_END +        FUSE_OPT_KEY ("subtype=", 0), +        FUSE_OPT_KEY ("fssubtype=", 0), +        FUSE_OPT_END  };  static int -subtype_workaround_optproc(void *data, const char *arg, int key, +subtype_workaround_optproc (void *data, const char *arg, int key,                             struct fuse_args *outargs)  { -	return key ? 1 : 0; +        return key ? 1 : 0;  } -int  +int  init (xlator_t *this_xl)  { -	int                ret = 0; -	dict_t            *options = NULL; -	char              *value_string = NULL; -	char              *fsname = NULL; +        int                ret = 0; +        dict_t            *options = NULL; +        char              *value_string = NULL; +        char              *fsname = NULL;          char              *fsname_opt = NULL; -	fuse_private_t    *priv = NULL; -	struct stat        stbuf = {0,}; -	struct fuse_args   args = FUSE_ARGS_INIT(0, NULL); - -	if (this_xl == NULL) -		return -1; -	 -	if (this_xl->options == NULL) -		return -1; -	 -	options = this_xl->options; -	 -	if (this_xl->name == NULL) { -		this_xl->name = strdup ("fuse"); -		ERR_ABORT(this_xl->name); -	} - -	fsname = this_xl->ctx->cmd_args.volume_file; -	fsname = (fsname ? fsname : this_xl->ctx->cmd_args.volfile_server); -	fsname = (fsname ? fsname : "glusterfs"); -	ret = asprintf(&fsname_opt, "-ofsname=%s", fsname); - -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "glusterfs"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, fsname_opt); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-oallow_other"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-odefault_permissions"); +        fuse_private_t    *priv = NULL; +        struct stat        stbuf = {0,}; +        struct fuse_args   args = FUSE_ARGS_INIT (0, NULL); + +        if (this_xl == NULL) +                return -1; + +        if (this_xl->options == NULL) +                return -1; + +        options = this_xl->options; + +        if (this_xl->name == NULL) { +                this_xl->name = strdup ("fuse"); +                ERR_ABORT (this_xl->name); +        } + +        fsname = this_xl->ctx->cmd_args.volume_file; +        fsname = (fsname ? fsname : this_xl->ctx->cmd_args.volfile_server); +        fsname = (fsname ? fsname : "glusterfs"); +        ret = asprintf (&fsname_opt, "-ofsname=%s", fsname); + +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "glusterfs"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, fsname_opt); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-oallow_other"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-odefault_permissions");  #ifdef GF_DARWIN_HOST_OS -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-ofssubtype=glusterfs"); -	if (ret != -1 && !dict_get (options, "macfuse-local")) -		/* This way, GlusterFS will be detected as 'servers' instead -		 *  of 'devices'. This method is useful if you want to do -		 * 'umount <mount_point>' over network,  instead of 'eject'ing -		 * it from desktop. Works better for servers -		 */ -		ret = fuse_opt_add_arg(&args, "-olocal"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-ofssubtype=glusterfs"); +        if (ret != -1 && !dict_get (options, "macfuse-local")) +                /* This way, GlusterFS will be detected as 'servers' instead +                 *  of 'devices'. This method is useful if you want to do +                 * 'umount <mount_point>' over network,  instead of 'eject'ing +                 * it from desktop. Works better for servers +                 */ +                ret = fuse_opt_add_arg (&args, "-olocal");  #else /* ! DARWIN_OS */ -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-osubtype=glusterfs"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-omax_readahead=131072"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-omax_read=131072"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-omax_write=131072"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-osuid"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-osubtype=glusterfs"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-omax_readahead=131072"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-omax_read=131072"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-omax_write=131072"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-osuid");  #if GF_LINUX_HOST_OS /* LINUX */ -	/* '-o dev', '-o nonempty' is supported only on Linux */ -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-ononempty"); -	if (ret != -1) -		ret = fuse_opt_add_arg(&args, "-odev"); +        /* '-o dev', '-o nonempty' is supported only on Linux */ +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-ononempty"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-odev");  #ifdef HAVE_FUSE_VERSION_28 -	if (ret != -1) -	        ret = fuse_opt_add_arg(&args, "-obig_writes"); +        if (ret != -1) +                ret = fuse_opt_add_arg (&args, "-obig_writes");  #endif /* FUSE 2.8 */  #endif /* LINUX */  #endif /* ! DARWIN_OS */ -	if (ret == -1) -		ERR_ABORT(NULL); -	 +        if (ret == -1) +                ERR_ABORT (NULL); +          priv = CALLOC (1, sizeof (*priv));          ERR_ABORT (priv);          this_xl->private = (void *) priv; -	/* get options from option dictionary */ -	ret = dict_get_str (options, ZR_MOUNTPOINT_OPT, &value_string); -	if (value_string == NULL) { +        /* get options from option dictionary */ +        ret = dict_get_str (options, ZR_MOUNTPOINT_OPT, &value_string); +        if (value_string == NULL) {                  gf_log ("fuse", GF_LOG_ERROR, -			"Mandatory option 'mountpoint' is not specified."); -		goto cleanup_exit; -	} - -	if (stat (value_string, &stbuf) != 0) { -		if (errno == ENOENT) { -			gf_log (this_xl->name, GF_LOG_ERROR, -				"%s %s does not exist", -				ZR_MOUNTPOINT_OPT, value_string); -		} else if (errno == ENOTCONN) { -			gf_log (this_xl->name, GF_LOG_ERROR, -				"Mountpoint %s seems to have a stale " -				"mount, run 'umount %s' and try again.", -				value_string, value_string); -		} else { -			gf_log (this_xl->name, GF_LOG_DEBUG, -				"%s %s : stat returned %s", -				ZR_MOUNTPOINT_OPT, -				value_string, strerror (errno)); -		} -		goto cleanup_exit; -	} -	 -	if (S_ISDIR (stbuf.st_mode) == 0) { -		gf_log (this_xl->name, GF_LOG_ERROR, -			"%s %s is not a directory", -			ZR_MOUNTPOINT_OPT, value_string); -		goto cleanup_exit; -	} -	priv->mount_point = strdup (value_string); -	ERR_ABORT(priv->mount_point); -	 -	ret = dict_get_double (options, "attribute-timeout",  -			       &priv->attribute_timeout); -	if (!priv->attribute_timeout) -		priv->attribute_timeout = 1.0; /* default */ -	 -	ret = dict_get_double (options, "entry-timeout",  -			       &priv->entry_timeout); -	if (!priv->entry_timeout) -		priv->entry_timeout = 1.0; /* default */ -	 - -	priv->direct_io_mode = 1; -	ret = dict_get_str (options, ZR_DIRECT_IO_OPT, &value_string); -	if (value_string) { -		ret = gf_string2boolean (value_string, &priv->direct_io_mode); -	} +                        "Mandatory option 'mountpoint' is not specified."); +                goto cleanup_exit; +        } + +        if (stat (value_string, &stbuf) != 0) { +                if (errno == ENOENT) { +                        gf_log (this_xl->name, GF_LOG_ERROR, +                                "%s %s does not exist", +                                ZR_MOUNTPOINT_OPT, value_string); +                } else if (errno == ENOTCONN) { +                        gf_log (this_xl->name, GF_LOG_ERROR, +                                "Mountpoint %s seems to have a stale " +                                "mount, run 'umount %s' and try again.", +                                value_string, value_string); +                } else { +                        gf_log (this_xl->name, GF_LOG_DEBUG, +                                "%s %s : stat returned %s", +                                ZR_MOUNTPOINT_OPT, +                                value_string, strerror (errno)); +                } +                goto cleanup_exit; +        } + +        if (S_ISDIR (stbuf.st_mode) == 0) { +                gf_log (this_xl->name, GF_LOG_ERROR, +                        "%s %s is not a directory", +                        ZR_MOUNTPOINT_OPT, value_string); +                goto cleanup_exit; +        } +        priv->mount_point = strdup (value_string); +        ERR_ABORT (priv->mount_point); + +        ret = dict_get_double (options, "attribute-timeout", +                               &priv->attribute_timeout); +        if (!priv->attribute_timeout) +                priv->attribute_timeout = 1.0; /* default */ + +        ret = dict_get_double (options, "entry-timeout", +                               &priv->entry_timeout); +        if (!priv->entry_timeout) +                priv->entry_timeout = 1.0; /* default */ + + +        priv->direct_io_mode = 1; +        ret = dict_get_str (options, ZR_DIRECT_IO_OPT, &value_string); +        if (value_string) { +                ret = gf_string2boolean (value_string, &priv->direct_io_mode); +        }          priv->strict_volfile_check = 0; -	ret = dict_get_str (options, ZR_STRICT_VOLFILE_CHECK, &value_string); -	if (value_string) { -		ret = gf_string2boolean (value_string,  +        ret = dict_get_str (options, ZR_STRICT_VOLFILE_CHECK, &value_string); +        if (value_string) { +                ret = gf_string2boolean (value_string,                                           &priv->strict_volfile_check); -	} +        }          priv->ch = fuse_mount (priv->mount_point, &args);          if (priv->ch == NULL) {                  if (errno == ENOTCONN) {                          gf_log ("glusterfs-fuse", GF_LOG_ERROR,                                  "A stale mount is present on %s. " -				"Run 'umount %s' and try again", -                                priv->mount_point,  -				priv->mount_point); +                                "Run 'umount %s' and try again", +                                priv->mount_point, +                                priv->mount_point);                  } else {                          if (errno == ENOENT) { -                                gf_log ("glusterfs-fuse", GF_LOG_ERROR,  +                                gf_log ("glusterfs-fuse", GF_LOG_ERROR,                                          "Unable to mount on %s. Run " -					"'modprobe fuse' and try again",  +                                        "'modprobe fuse' and try again",                                          priv->mount_point);                          } else {                                  gf_log ("glusterfs-fuse", GF_LOG_DEBUG,                                          "fuse_mount() failed with error %s " -					"on mount point %s",  -                                        strerror (errno),  -					priv->mount_point); +                                        "on mount point %s", +                                        strerror (errno), +                                        priv->mount_point);                          }                  } -                 +                  goto cleanup_exit;          }          errno = 0; -        priv->se = fuse_lowlevel_new (&args, &fuse_ops,  -				      sizeof (fuse_ops), this_xl); +        priv->se = fuse_lowlevel_new (&args, &fuse_ops, +                                      sizeof (fuse_ops), this_xl);          if (priv->se == NULL && !errno) { -        	/* -        	 * Option parsing misery. Can happen if libfuse is of -        	 * FUSE < 2.7.0, as then the "-o subtype" option is not -        	 * handled. -        	 * -        	 * Best we can do to is to handle it at runtime -- this is not -        	 * a binary incompatibility issue (which should dealt with at -        	 * compile time), but a behavioural incompatibility issue. Ie. -        	 * we can't tell in advance whether the lib we use supports -        	 * "-o subtype". So try to be clever now. -        	 * -        	 * Delete the subtype option, and try again. -        	 */ -        	if (fuse_opt_parse(&args, NULL, subtype_workaround, -        	                   subtype_workaround_optproc) == 0) -        		priv->se = fuse_lowlevel_new (&args, &fuse_ops, -        			                      sizeof (fuse_ops), -        		                              this_xl); +                /* +                 * Option parsing misery. Can happen if libfuse is of +                 * FUSE < 2.7.0, as then the "-o subtype" option is not +                 * handled. +                 * +                 * Best we can do to is to handle it at runtime -- this is not +                 * a binary incompatibility issue (which should dealt with at +                 * compile time), but a behavioural incompatibility issue. Ie. +                 * we can't tell in advance whether the lib we use supports +                 * "-o subtype". So try to be clever now. +                 * +                 * Delete the subtype option, and try again. +                 */ +                if (fuse_opt_parse (&args, NULL, subtype_workaround, +                                   subtype_workaround_optproc) == 0) +                        priv->se = fuse_lowlevel_new (&args, &fuse_ops, +                                                      sizeof (fuse_ops), +                                                      this_xl);          }          if (priv->se == NULL) {                  gf_log ("glusterfs-fuse", GF_LOG_DEBUG,                          "fuse_lowlevel_new() failed with error %s on " -			"mount point %s",  +                        "mount point %s",                          strerror (errno), priv->mount_point);                  goto umount_exit;          } -         +          ret = fuse_set_signal_handlers (priv->se);          if (ret == -1) {                  gf_log ("glusterfs-fuse", GF_LOG_DEBUG, -                        "fuse_set_signal_handlers() failed on mount point %s",  +                        "fuse_set_signal_handlers() failed on mount point %s",                          priv->mount_point);                  goto umount_exit;          } -         +          fuse_opt_free_args (&args);          FREE (fsname_opt); -         +          fuse_session_add_chan (priv->se, priv->ch); -         +          priv->fd = fuse_chan_fd (priv->ch);          this_xl->ctx->top = this_xl; -	priv->first_call = 2; +        priv->first_call = 2;          this_xl->itable = inode_table_new (0, this_xl);          return 0; -         -umount_exit:  + +umount_exit:          fuse_unmount (priv->mount_point, priv->ch);  cleanup_exit:          fuse_opt_free_args (&args);          FREE (fsname_opt);          if (priv) -        	FREE (priv->mount_point); +                FREE (priv->mount_point);          FREE (priv);          return -1;  } @@ -2816,25 +2816,25 @@ void  fini (xlator_t *this_xl)  {          fuse_private_t *priv = NULL; -	char *mount_point = NULL; -	 -	if (this_xl == NULL) -		return; -	 -	if ((priv = this_xl->private) == NULL) -		return; -	 -	if (dict_get (this_xl->options, ZR_MOUNTPOINT_OPT)) -		mount_point = data_to_str (dict_get (this_xl->options,  -						     ZR_MOUNTPOINT_OPT)); -	if (mount_point != NULL) { -		gf_log (this_xl->name, GF_LOG_NORMAL, -			"Unmounting '%s'.", mount_point); -		 -		dict_del (this_xl->options, ZR_MOUNTPOINT_OPT); -		fuse_session_exit (priv->se); -		fuse_unmount (mount_point, priv->ch); -	} +        char *mount_point = NULL; + +        if (this_xl == NULL) +                return; + +        if ((priv = this_xl->private) == NULL) +                return; + +        if (dict_get (this_xl->options, ZR_MOUNTPOINT_OPT)) +                mount_point = data_to_str (dict_get (this_xl->options, +                                                     ZR_MOUNTPOINT_OPT)); +        if (mount_point != NULL) { +                gf_log (this_xl->name, GF_LOG_NORMAL, +                        "Unmounting '%s'.", mount_point); + +                dict_del (this_xl->options, ZR_MOUNTPOINT_OPT); +                fuse_session_exit (priv->se); +                fuse_unmount (mount_point, priv->ch); +        }  }  struct xlator_fops fops = { @@ -2847,23 +2847,23 @@ struct xlator_mops mops = {  };  struct volume_options options[] = { -	{ .key  = {"direct-io-mode"},  -	  .type = GF_OPTION_TYPE_BOOL  -	}, -	{ .key  = {"macfuse-local"},  -	  .type = GF_OPTION_TYPE_BOOL  -	}, -	{ .key  = {"mountpoint", "mount-point"},  -	  .type = GF_OPTION_TYPE_PATH  -	}, -	{ .key  = {"attribute-timeout"},  -	  .type = GF_OPTION_TYPE_DOUBLE -	}, -	{ .key  = {"entry-timeout"},  -	  .type = GF_OPTION_TYPE_DOUBLE -	}, -	{ .key  = {"strict-volfile-check"},  -	  .type = GF_OPTION_TYPE_BOOL -	}, -	{ .key = {NULL} }, +        { .key  = {"direct-io-mode"}, +          .type = GF_OPTION_TYPE_BOOL +        }, +        { .key  = {"macfuse-local"}, +          .type = GF_OPTION_TYPE_BOOL +        }, +        { .key  = {"mountpoint", "mount-point"}, +          .type = GF_OPTION_TYPE_PATH +        }, +        { .key  = {"attribute-timeout"}, +          .type = GF_OPTION_TYPE_DOUBLE +        }, +        { .key  = {"entry-timeout"}, +          .type = GF_OPTION_TYPE_DOUBLE +        }, +        { .key  = {"strict-volfile-check"}, +          .type = GF_OPTION_TYPE_BOOL +        }, +        { .key = {NULL} },  };  | 
