summaryrefslogtreecommitdiffstats
path: root/xlators/mount/fuse/src/fuse-resolve.c
diff options
context:
space:
mode:
authorGluster Ant <bugzilla-bot@gluster.org>2018-09-12 17:52:45 +0530
committerNigel Babu <nigelb@redhat.com>2018-09-12 17:52:45 +0530
commite16868dede6455cab644805af6fe1ac312775e13 (patch)
tree15aebdb4fff2d87cf8a72f836816b3aa634da58d /xlators/mount/fuse/src/fuse-resolve.c
parent45a71c0548b6fd2c757aa2e7b7671a1411948894 (diff)
Land part 2 of clang-format changes
Change-Id: Ia84cc24c8924e6d22d02ac15f611c10e26db99b4 Signed-off-by: Nigel Babu <nigelb@redhat.com>
Diffstat (limited to 'xlators/mount/fuse/src/fuse-resolve.c')
-rw-r--r--xlators/mount/fuse/src/fuse-resolve.c1036
1 files changed, 499 insertions, 537 deletions
diff --git a/xlators/mount/fuse/src/fuse-resolve.c b/xlators/mount/fuse/src/fuse-resolve.c
index ed25bf034b8..6206fd47325 100644
--- a/xlators/mount/fuse/src/fuse-resolve.c
+++ b/xlators/mount/fuse/src/fuse-resolve.c
@@ -10,213 +10,205 @@
#include "fuse-bridge.h"
static int
-fuse_resolve_all (fuse_state_t *state);
+fuse_resolve_all(fuse_state_t *state);
-int fuse_resolve_continue (fuse_state_t *state);
-int fuse_resolve_entry_simple (fuse_state_t *state);
-int fuse_resolve_inode_simple (fuse_state_t *state);
-int fuse_migrate_fd (xlator_t *this, fd_t *fd, xlator_t *old_subvol,
- xlator_t *new_subvol);
+int
+fuse_resolve_continue(fuse_state_t *state);
+int
+fuse_resolve_entry_simple(fuse_state_t *state);
+int
+fuse_resolve_inode_simple(fuse_state_t *state);
+int
+fuse_migrate_fd(xlator_t *this, fd_t *fd, xlator_t *old_subvol,
+ xlator_t *new_subvol);
fuse_fd_ctx_t *
-fuse_fd_ctx_get (xlator_t *this, fd_t *fd);
+fuse_fd_ctx_get(xlator_t *this, fd_t *fd);
static int
-fuse_resolve_loc_touchup (fuse_state_t *state)
+fuse_resolve_loc_touchup(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- loc_t *loc = NULL;
+ fuse_resolve_t *resolve = NULL;
+ loc_t *loc = NULL;
- resolve = state->resolve_now;
- loc = state->loc_now;
+ resolve = state->resolve_now;
+ loc = state->loc_now;
- loc_touchup (loc, resolve->bname);
- return 0;
+ loc_touchup(loc, resolve->bname);
+ return 0;
}
-
int
-fuse_resolve_entry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int op_ret, int op_errno, inode_t *inode,
- struct iatt *buf, dict_t *xattr,
- struct iatt *postparent)
+fuse_resolve_entry_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
+ int op_ret, int op_errno, inode_t *inode,
+ struct iatt *buf, dict_t *xattr, struct iatt *postparent)
{
- fuse_state_t *state = NULL;
- fuse_resolve_t *resolve = NULL;
- inode_t *link_inode = NULL;
- loc_t *resolve_loc = NULL;
- uint64_t ctx_value = LOOKUP_NOT_NEEDED;
-
- state = frame->root->state;
- resolve = state->resolve_now;
- resolve_loc = &resolve->resolve_loc;
-
- STACK_DESTROY (frame->root);
-
- if (op_ret == -1) {
- gf_log (this->name, (op_errno == ENOENT)
- ? GF_LOG_DEBUG : GF_LOG_WARNING,
- "%s/%s: failed to resolve (%s)",
- uuid_utoa (resolve_loc->pargfid), resolve_loc->name,
- strerror (op_errno));
- resolve->op_ret = -1;
- resolve->op_errno = op_errno;
- goto out;
- }
-
- link_inode = inode_link (inode, resolve_loc->parent,
- resolve_loc->name, buf);
- if (link_inode == inode)
- inode_ctx_set (link_inode, this, &ctx_value);
- state->loc_now->inode = link_inode;
+ fuse_state_t *state = NULL;
+ fuse_resolve_t *resolve = NULL;
+ inode_t *link_inode = NULL;
+ loc_t *resolve_loc = NULL;
+ uint64_t ctx_value = LOOKUP_NOT_NEEDED;
+
+ state = frame->root->state;
+ resolve = state->resolve_now;
+ resolve_loc = &resolve->resolve_loc;
+
+ STACK_DESTROY(frame->root);
+
+ if (op_ret == -1) {
+ gf_log(this->name, (op_errno == ENOENT) ? GF_LOG_DEBUG : GF_LOG_WARNING,
+ "%s/%s: failed to resolve (%s)", uuid_utoa(resolve_loc->pargfid),
+ resolve_loc->name, strerror(op_errno));
+ resolve->op_ret = -1;
+ resolve->op_errno = op_errno;
+ goto out;
+ }
+
+ link_inode = inode_link(inode, resolve_loc->parent, resolve_loc->name, buf);
+ if (link_inode == inode)
+ inode_ctx_set(link_inode, this, &ctx_value);
+ state->loc_now->inode = link_inode;
out:
- loc_wipe (resolve_loc);
+ loc_wipe(resolve_loc);
- fuse_resolve_continue (state);
- return 0;
+ fuse_resolve_continue(state);
+ return 0;
}
-
int
-fuse_resolve_entry (fuse_state_t *state)
+fuse_resolve_entry(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- loc_t *resolve_loc = NULL;
+ fuse_resolve_t *resolve = NULL;
+ loc_t *resolve_loc = NULL;
- resolve = state->resolve_now;
- resolve_loc = &resolve->resolve_loc;
+ resolve = state->resolve_now;
+ resolve_loc = &resolve->resolve_loc;
- resolve_loc->parent = inode_ref (state->loc_now->parent);
- gf_uuid_copy (resolve_loc->pargfid, state->loc_now->pargfid);
- resolve_loc->name = resolve->bname;
+ resolve_loc->parent = inode_ref(state->loc_now->parent);
+ gf_uuid_copy(resolve_loc->pargfid, state->loc_now->pargfid);
+ resolve_loc->name = resolve->bname;
- resolve_loc->inode = inode_grep (state->itable, resolve->parhint,
- resolve->bname);
- if (!resolve_loc->inode) {
- resolve_loc->inode = inode_new (state->itable);
- }
- inode_path (resolve_loc->parent, resolve_loc->name,
- (char **) &resolve_loc->path);
+ resolve_loc->inode = inode_grep(state->itable, resolve->parhint,
+ resolve->bname);
+ if (!resolve_loc->inode) {
+ resolve_loc->inode = inode_new(state->itable);
+ }
+ inode_path(resolve_loc->parent, resolve_loc->name,
+ (char **)&resolve_loc->path);
- FUSE_FOP (state, fuse_resolve_entry_cbk, GF_FOP_LOOKUP,
- lookup, resolve_loc, NULL);
+ FUSE_FOP(state, fuse_resolve_entry_cbk, GF_FOP_LOOKUP, lookup, resolve_loc,
+ NULL);
- return 0;
+ return 0;
}
-
int
-fuse_resolve_gfid_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
- int op_ret, int op_errno, inode_t *inode,
- struct iatt *buf, dict_t *xattr, struct iatt *postparent)
+fuse_resolve_gfid_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
+ int op_ret, int op_errno, inode_t *inode,
+ struct iatt *buf, dict_t *xattr, struct iatt *postparent)
{
- fuse_state_t *state = NULL;
- fuse_resolve_t *resolve = NULL;
- inode_t *link_inode = NULL;
- loc_t *loc_now = NULL;
- inode_t *tmp_inode = NULL;
- uint64_t ctx_value = LOOKUP_NOT_NEEDED;
-
- state = frame->root->state;
- resolve = state->resolve_now;
- loc_now = state->loc_now;
-
- STACK_DESTROY (frame->root);
-
- if (op_ret == -1) {
- gf_log (this->name, (op_errno == ENOENT)
- ? GF_LOG_DEBUG : GF_LOG_WARNING,
- "%s: failed to resolve (%s)",
- uuid_utoa (resolve->resolve_loc.gfid),
- strerror (op_errno));
- loc_wipe (&resolve->resolve_loc);
-
- /* resolve->op_ret can have 3 values: 0, -1, -2.
- * 0 : resolution was successful.
- * -1: parent inode could not be resolved.
- * -2: entry (inode corresponding to path) could not be resolved
- */
-
- if (gf_uuid_is_null (resolve->gfid)) {
- resolve->op_ret = -1;
- } else {
- resolve->op_ret = -2;
- }
-
- resolve->op_errno = op_errno;
- goto out;
+ fuse_state_t *state = NULL;
+ fuse_resolve_t *resolve = NULL;
+ inode_t *link_inode = NULL;
+ loc_t *loc_now = NULL;
+ inode_t *tmp_inode = NULL;
+ uint64_t ctx_value = LOOKUP_NOT_NEEDED;
+
+ state = frame->root->state;
+ resolve = state->resolve_now;
+ loc_now = state->loc_now;
+
+ STACK_DESTROY(frame->root);
+
+ if (op_ret == -1) {
+ gf_log(this->name, (op_errno == ENOENT) ? GF_LOG_DEBUG : GF_LOG_WARNING,
+ "%s: failed to resolve (%s)",
+ uuid_utoa(resolve->resolve_loc.gfid), strerror(op_errno));
+ loc_wipe(&resolve->resolve_loc);
+
+ /* resolve->op_ret can have 3 values: 0, -1, -2.
+ * 0 : resolution was successful.
+ * -1: parent inode could not be resolved.
+ * -2: entry (inode corresponding to path) could not be resolved
+ */
+
+ if (gf_uuid_is_null(resolve->gfid)) {
+ resolve->op_ret = -1;
+ } else {
+ resolve->op_ret = -2;
}
- link_inode = inode_link (inode, NULL, NULL, buf);
- if (link_inode == inode)
- inode_ctx_set (link_inode, this, &ctx_value);
+ resolve->op_errno = op_errno;
+ goto out;
+ }
- loc_wipe (&resolve->resolve_loc);
+ link_inode = inode_link(inode, NULL, NULL, buf);
+ if (link_inode == inode)
+ inode_ctx_set(link_inode, this, &ctx_value);
- if (!link_inode)
- goto out;
+ loc_wipe(&resolve->resolve_loc);
- if (!gf_uuid_is_null (resolve->gfid)) {
- loc_now->inode = link_inode;
- goto out;
- }
+ if (!link_inode)
+ goto out;
- loc_now->parent = link_inode;
- gf_uuid_copy (loc_now->pargfid, link_inode->gfid);
+ if (!gf_uuid_is_null(resolve->gfid)) {
+ loc_now->inode = link_inode;
+ goto out;
+ }
- tmp_inode = inode_grep (state->itable, link_inode, resolve->bname);
- if (tmp_inode && (!inode_needs_lookup (tmp_inode, THIS))) {
- loc_now->inode = tmp_inode;
- goto out;
- }
+ loc_now->parent = link_inode;
+ gf_uuid_copy(loc_now->pargfid, link_inode->gfid);
- inode_unref (tmp_inode);
- fuse_resolve_entry (state);
+ tmp_inode = inode_grep(state->itable, link_inode, resolve->bname);
+ if (tmp_inode && (!inode_needs_lookup(tmp_inode, THIS))) {
+ loc_now->inode = tmp_inode;
+ goto out;
+ }
- return 0;
+ inode_unref(tmp_inode);
+ fuse_resolve_entry(state);
+
+ return 0;
out:
- fuse_resolve_continue (state);
- return 0;
+ fuse_resolve_continue(state);
+ return 0;
}
-
int
-fuse_resolve_gfid (fuse_state_t *state)
+fuse_resolve_gfid(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- loc_t *resolve_loc = NULL;
- int ret = 0;
-
- resolve = state->resolve_now;
- resolve_loc = &resolve->resolve_loc;
-
- if (!gf_uuid_is_null (resolve->pargfid)) {
- gf_uuid_copy (resolve_loc->gfid, resolve->pargfid);
- } else if (!gf_uuid_is_null (resolve->gfid)) {
- gf_uuid_copy (resolve_loc->gfid, resolve->gfid);
- }
-
- /* inode may already exist in case we are looking up an inode which was
- linked through readdirplus */
- resolve_loc->inode = inode_find (state->itable, resolve_loc->gfid);
- if (!resolve_loc->inode)
- resolve_loc->inode = inode_new (state->itable);
- ret = loc_path (resolve_loc, NULL);
-
- if (ret <= 0) {
- gf_log (THIS->name, GF_LOG_WARNING,
- "failed to get the path for inode %s",
- uuid_utoa (resolve->gfid));
- }
-
- FUSE_FOP (state, fuse_resolve_gfid_cbk, GF_FOP_LOOKUP,
- lookup, resolve_loc, NULL);
-
- return 0;
+ fuse_resolve_t *resolve = NULL;
+ loc_t *resolve_loc = NULL;
+ int ret = 0;
+
+ resolve = state->resolve_now;
+ resolve_loc = &resolve->resolve_loc;
+
+ if (!gf_uuid_is_null(resolve->pargfid)) {
+ gf_uuid_copy(resolve_loc->gfid, resolve->pargfid);
+ } else if (!gf_uuid_is_null(resolve->gfid)) {
+ gf_uuid_copy(resolve_loc->gfid, resolve->gfid);
+ }
+
+ /* inode may already exist in case we are looking up an inode which was
+ linked through readdirplus */
+ resolve_loc->inode = inode_find(state->itable, resolve_loc->gfid);
+ if (!resolve_loc->inode)
+ resolve_loc->inode = inode_new(state->itable);
+ ret = loc_path(resolve_loc, NULL);
+
+ if (ret <= 0) {
+ gf_log(THIS->name, GF_LOG_WARNING,
+ "failed to get the path for inode %s", uuid_utoa(resolve->gfid));
+ }
+
+ FUSE_FOP(state, fuse_resolve_gfid_cbk, GF_FOP_LOOKUP, lookup, resolve_loc,
+ NULL);
+
+ return 0;
}
-
/*
* Return value:
* 0 - resolved parent and entry (as necessary)
@@ -225,443 +217,417 @@ fuse_resolve_gfid (fuse_state_t *state)
*/
int
-fuse_resolve_parent_simple (fuse_state_t *state)
+fuse_resolve_parent_simple(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- loc_t *loc = NULL;
- inode_t *parent = NULL;
- inode_t *inode = NULL;
- xlator_t *this = NULL;
-
- resolve = state->resolve_now;
- loc = state->loc_now;
- this = state->this;
-
- loc->name = resolve->bname;
-
- parent = resolve->parhint;
- if (parent->table == state->itable) {
- if (inode_needs_lookup (parent, THIS))
- return 1;
-
- /* no graph switches since */
- loc->parent = inode_ref (parent);
- gf_uuid_copy (loc->pargfid, parent->gfid);
- loc->inode = inode_grep (state->itable, parent, loc->name);
-
- /* nodeid for root is 1 and we blindly take the latest graph's
- * table->root as the parhint and because of this there is
- * ambiguity whether the entry should have existed or not, and
- * we took the conservative approach of assuming entry should
- * have been there even though it need not have (bug #804592).
- */
-
- if (loc->inode && inode_needs_lookup (loc->inode, THIS)) {
- inode_unref (loc->inode);
- loc->inode = NULL;
- return -1;
- }
-
- if ((loc->inode == NULL)
- && __is_root_gfid (parent->gfid)) {
- /* non decisive result - entry missing */
- return -1;
- }
-
- /* decisive result - resolution success */
- return 0;
- }
-
- parent = inode_find (state->itable, resolve->pargfid);
- if (!parent) {
- /* non decisive result - parent missing */
- return 1;
- }
- if (inode_needs_lookup (parent, THIS)) {
- inode_unref (parent);
- return 1;
- }
-
- loc->parent = parent;
- gf_uuid_copy (loc->pargfid, resolve->pargfid);
-
- inode = inode_grep (state->itable, parent, loc->name);
- if (inode && !inode_needs_lookup (inode, this)) {
- loc->inode = inode;
- /* decisive result - resolution success */
- return 0;
- }
-
- /* non decisive result - entry missing */
- return -1;
-}
-
-
-int
-fuse_resolve_parent (fuse_state_t *state)
-{
- int ret = 0;
-
- ret = fuse_resolve_parent_simple (state);
- if (ret > 0) {
- fuse_resolve_gfid (state);
- return 0;
+ fuse_resolve_t *resolve = NULL;
+ loc_t *loc = NULL;
+ inode_t *parent = NULL;
+ inode_t *inode = NULL;
+ xlator_t *this = NULL;
+
+ resolve = state->resolve_now;
+ loc = state->loc_now;
+ this = state->this;
+
+ loc->name = resolve->bname;
+
+ parent = resolve->parhint;
+ if (parent->table == state->itable) {
+ if (inode_needs_lookup(parent, THIS))
+ return 1;
+
+ /* no graph switches since */
+ loc->parent = inode_ref(parent);
+ gf_uuid_copy(loc->pargfid, parent->gfid);
+ loc->inode = inode_grep(state->itable, parent, loc->name);
+
+ /* nodeid for root is 1 and we blindly take the latest graph's
+ * table->root as the parhint and because of this there is
+ * ambiguity whether the entry should have existed or not, and
+ * we took the conservative approach of assuming entry should
+ * have been there even though it need not have (bug #804592).
+ */
+
+ if (loc->inode && inode_needs_lookup(loc->inode, THIS)) {
+ inode_unref(loc->inode);
+ loc->inode = NULL;
+ return -1;
}
- if (ret < 0) {
- fuse_resolve_entry (state);
- return 0;
- }
-
- fuse_resolve_continue (state);
+ if ((loc->inode == NULL) && __is_root_gfid(parent->gfid)) {
+ /* non decisive result - entry missing */
+ return -1;
+ }
+ /* decisive result - resolution success */
return 0;
-}
+ }
+ parent = inode_find(state->itable, resolve->pargfid);
+ if (!parent) {
+ /* non decisive result - parent missing */
+ return 1;
+ }
+ if (inode_needs_lookup(parent, THIS)) {
+ inode_unref(parent);
+ return 1;
+ }
-int
-fuse_resolve_inode_simple (fuse_state_t *state)
-{
- fuse_resolve_t *resolve = NULL;
- loc_t *loc = NULL;
- inode_t *inode = NULL;
-
- resolve = state->resolve_now;
- loc = state->loc_now;
-
- inode = resolve->hint;
- if (inode->table == state->itable)
- inode_ref (inode);
- else
- inode = inode_find (state->itable, resolve->gfid);
-
- if (inode) {
- if (!inode_needs_lookup (inode, THIS))
- goto found;
- /* inode was linked through readdirplus */
- inode_unref (inode);
- }
+ loc->parent = parent;
+ gf_uuid_copy(loc->pargfid, resolve->pargfid);
- return 1;
-found:
- loc->inode = inode;
- return 0;
-}
+ inode = inode_grep(state->itable, parent, loc->name);
+ if (inode && !inode_needs_lookup(inode, this)) {
+ loc->inode = inode;
+ /* decisive result - resolution success */
+ return 0;
+ }
+ /* non decisive result - entry missing */
+ return -1;
+}
int
-fuse_resolve_inode (fuse_state_t *state)
+fuse_resolve_parent(fuse_state_t *state)
{
- int ret = 0;
+ int ret = 0;
- ret = fuse_resolve_inode_simple (state);
+ ret = fuse_resolve_parent_simple(state);
+ if (ret > 0) {
+ fuse_resolve_gfid(state);
+ return 0;
+ }
- if (ret > 0) {
- fuse_resolve_gfid (state);
- return 0;
- }
+ if (ret < 0) {
+ fuse_resolve_entry(state);
+ return 0;
+ }
- fuse_resolve_continue (state);
+ fuse_resolve_continue(state);
- return 0;
+ return 0;
}
-
int
-fuse_migrate_fd_task (void *data)
+fuse_resolve_inode_simple(fuse_state_t *state)
{
- int ret = -1;
- fuse_state_t *state = NULL;
- fd_t *basefd = NULL, *oldfd = NULL;
- fuse_fd_ctx_t *basefd_ctx = NULL;
- xlator_t *old_subvol = NULL;
-
- state = data;
- if (state == NULL) {
- goto out;
- }
+ fuse_resolve_t *resolve = NULL;
+ loc_t *loc = NULL;
+ inode_t *inode = NULL;
+
+ resolve = state->resolve_now;
+ loc = state->loc_now;
+
+ inode = resolve->hint;
+ if (inode->table == state->itable)
+ inode_ref(inode);
+ else
+ inode = inode_find(state->itable, resolve->gfid);
+
+ if (inode) {
+ if (!inode_needs_lookup(inode, THIS))
+ goto found;
+ /* inode was linked through readdirplus */
+ inode_unref(inode);
+ }
+
+ return 1;
+found:
+ loc->inode = inode;
+ return 0;
+}
- basefd = state->fd;
+int
+fuse_resolve_inode(fuse_state_t *state)
+{
+ int ret = 0;
- basefd_ctx = fuse_fd_ctx_get (state->this, basefd);
- if (!basefd_ctx)
- goto out;
+ ret = fuse_resolve_inode_simple(state);
- LOCK (&basefd->lock);
- {
- oldfd = basefd_ctx->activefd ? basefd_ctx->activefd : basefd;
- fd_ref (oldfd);
- }
- UNLOCK (&basefd->lock);
+ if (ret > 0) {
+ fuse_resolve_gfid(state);
+ return 0;
+ }
- old_subvol = oldfd->inode->table->xl;
+ fuse_resolve_continue(state);
- ret = fuse_migrate_fd (state->this, basefd, old_subvol,
- state->active_subvol);
+ return 0;
+}
- LOCK (&basefd->lock);
- {
- if (ret < 0) {
- basefd_ctx->migration_failed = 1;
- } else {
- basefd_ctx->migration_failed = 0;
- }
+int
+fuse_migrate_fd_task(void *data)
+{
+ int ret = -1;
+ fuse_state_t *state = NULL;
+ fd_t *basefd = NULL, *oldfd = NULL;
+ fuse_fd_ctx_t *basefd_ctx = NULL;
+ xlator_t *old_subvol = NULL;
+
+ state = data;
+ if (state == NULL) {
+ goto out;
+ }
+
+ basefd = state->fd;
+
+ basefd_ctx = fuse_fd_ctx_get(state->this, basefd);
+ if (!basefd_ctx)
+ goto out;
+
+ LOCK(&basefd->lock);
+ {
+ oldfd = basefd_ctx->activefd ? basefd_ctx->activefd : basefd;
+ fd_ref(oldfd);
+ }
+ UNLOCK(&basefd->lock);
+
+ old_subvol = oldfd->inode->table->xl;
+
+ ret = fuse_migrate_fd(state->this, basefd, old_subvol,
+ state->active_subvol);
+
+ LOCK(&basefd->lock);
+ {
+ if (ret < 0) {
+ basefd_ctx->migration_failed = 1;
+ } else {
+ basefd_ctx->migration_failed = 0;
}
- UNLOCK (&basefd->lock);
+ }
+ UNLOCK(&basefd->lock);
- ret = 0;
+ ret = 0;
out:
- if (oldfd)
- fd_unref (oldfd);
+ if (oldfd)
+ fd_unref(oldfd);
- return ret;
+ return ret;
}
-
static int
-fuse_migrate_fd_error (xlator_t *this, fd_t *fd)
+fuse_migrate_fd_error(xlator_t *this, fd_t *fd)
{
- fuse_fd_ctx_t *fdctx = NULL;
- char error = 0;
-
- fdctx = fuse_fd_ctx_get (this, fd);
- if (fdctx != NULL) {
- if (fdctx->migration_failed) {
- error = 1;
- }
+ fuse_fd_ctx_t *fdctx = NULL;
+ char error = 0;
+
+ fdctx = fuse_fd_ctx_get(this, fd);
+ if (fdctx != NULL) {
+ if (fdctx->migration_failed) {
+ error = 1;
}
+ }
- return error;
+ return error;
}
-#define FUSE_FD_GET_ACTIVE_FD(activefd, basefd) \
- do { \
- LOCK (&basefd->lock); \
- { \
- activefd = basefd_ctx->activefd ? \
- basefd_ctx->activefd : basefd; \
- if (activefd != basefd) { \
- fd_ref (activefd); \
- } \
- } \
- UNLOCK (&basefd->lock); \
- \
- if (activefd == basefd) { \
- fd_ref (activefd); \
- } \
- } while (0);
-
+#define FUSE_FD_GET_ACTIVE_FD(activefd, basefd) \
+ do { \
+ LOCK(&basefd->lock); \
+ { \
+ activefd = basefd_ctx->activefd ? basefd_ctx->activefd : basefd; \
+ if (activefd != basefd) { \
+ fd_ref(activefd); \
+ } \
+ } \
+ UNLOCK(&basefd->lock); \
+ \
+ if (activefd == basefd) { \
+ fd_ref(activefd); \
+ } \
+ } while (0);
static int
-fuse_resolve_fd (fuse_state_t *state)
+fuse_resolve_fd(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
- fd_t *basefd = NULL, *activefd = NULL;
- xlator_t *active_subvol = NULL, *this = NULL;
- int ret = 0;
- char fd_migration_error = 0;
- fuse_fd_ctx_t *basefd_ctx = NULL;
-
- resolve = state->resolve_now;
-
- this = state->this;
-
- basefd = resolve->fd;
- basefd_ctx = fuse_fd_ctx_get (this, basefd);
- if (basefd_ctx == NULL) {
- gf_log (state->this->name, GF_LOG_WARNING,
- "fdctx is NULL for basefd (ptr:%p inode-gfid:%s), "
- "resolver erroring out with errno EINVAL",
- basefd, uuid_utoa (basefd->inode->gfid));
- resolve->op_ret = -1;
- resolve->op_errno = EINVAL;
- goto resolve_continue;
- }
-
- FUSE_FD_GET_ACTIVE_FD (activefd, basefd);
-
+ fuse_resolve_t *resolve = NULL;
+ fd_t *basefd = NULL, *activefd = NULL;
+ xlator_t *active_subvol = NULL, *this = NULL;
+ int ret = 0;
+ char fd_migration_error = 0;
+ fuse_fd_ctx_t *basefd_ctx = NULL;
+
+ resolve = state->resolve_now;
+
+ this = state->this;
+
+ basefd = resolve->fd;
+ basefd_ctx = fuse_fd_ctx_get(this, basefd);
+ if (basefd_ctx == NULL) {
+ gf_log(state->this->name, GF_LOG_WARNING,
+ "fdctx is NULL for basefd (ptr:%p inode-gfid:%s), "
+ "resolver erroring out with errno EINVAL",
+ basefd, uuid_utoa(basefd->inode->gfid));
+ resolve->op_ret = -1;
+ resolve->op_errno = EINVAL;
+ goto resolve_continue;
+ }
+
+ FUSE_FD_GET_ACTIVE_FD(activefd, basefd);
+
+ active_subvol = activefd->inode->table->xl;
+
+ fd_migration_error = fuse_migrate_fd_error(state->this, basefd);
+ if (fd_migration_error) {
+ resolve->op_ret = -1;
+ resolve->op_errno = EBADF;
+ } else if (state->active_subvol != active_subvol) {
+ ret = synctask_new(state->this->ctx->env, fuse_migrate_fd_task, NULL,
+ NULL, state);
+
+ fd_migration_error = fuse_migrate_fd_error(state->this, basefd);
+ fd_unref(activefd);
+
+ FUSE_FD_GET_ACTIVE_FD(activefd, basefd);
active_subvol = activefd->inode->table->xl;
- fd_migration_error = fuse_migrate_fd_error (state->this, basefd);
- if (fd_migration_error) {
- resolve->op_ret = -1;
- resolve->op_errno = EBADF;
- } else if (state->active_subvol != active_subvol) {
- ret = synctask_new (state->this->ctx->env, fuse_migrate_fd_task,
- NULL, NULL, state);
-
- fd_migration_error = fuse_migrate_fd_error (state->this,
- basefd);
- fd_unref (activefd);
-
- FUSE_FD_GET_ACTIVE_FD (activefd, basefd);
- active_subvol = activefd->inode->table->xl;
-
- if ((ret == -1) || fd_migration_error
- || (state->active_subvol != active_subvol)) {
- if (ret == -1) {
- gf_log (state->this->name, GF_LOG_WARNING,
- "starting sync-task to migrate "
- "basefd (ptr:%p inode-gfid:%s) failed "
- "(old-subvolume:%s-%d "
- "new-subvolume:%s-%d)",
- basefd,
- uuid_utoa (basefd->inode->gfid),
- active_subvol->name,
- active_subvol->graph->id,
- state->active_subvol->name,
- state->active_subvol->graph->id);
- } else {
- gf_log (state->this->name, GF_LOG_WARNING,
- "fd migration of basefd "
- "(ptr:%p inode-gfid:%s) failed "
- "(old-subvolume:%s-%d "
- "new-subvolume:%s-%d)",
- basefd,
- uuid_utoa (basefd->inode->gfid),
- active_subvol->name,
- active_subvol->graph->id,
- state->active_subvol->name,
- state->active_subvol->graph->id);
- }
-
- resolve->op_ret = -1;
- resolve->op_errno = EBADF;
- } else {
- gf_log (state->this->name, GF_LOG_DEBUG,
- "basefd (ptr:%p inode-gfid:%s) migrated "
- "successfully in resolver "
- "(old-subvolume:%s-%d new-subvolume:%s-%d)",
- basefd, uuid_utoa (basefd->inode->gfid),
- active_subvol->name, active_subvol->graph->id,
- state->active_subvol->name,
- state->active_subvol->graph->id);
- }
+ if ((ret == -1) || fd_migration_error ||
+ (state->active_subvol != active_subvol)) {
+ if (ret == -1) {
+ gf_log(state->this->name, GF_LOG_WARNING,
+ "starting sync-task to migrate "
+ "basefd (ptr:%p inode-gfid:%s) failed "
+ "(old-subvolume:%s-%d "
+ "new-subvolume:%s-%d)",
+ basefd, uuid_utoa(basefd->inode->gfid),
+ active_subvol->name, active_subvol->graph->id,
+ state->active_subvol->name,
+ state->active_subvol->graph->id);
+ } else {
+ gf_log(state->this->name, GF_LOG_WARNING,
+ "fd migration of basefd "
+ "(ptr:%p inode-gfid:%s) failed "
+ "(old-subvolume:%s-%d "
+ "new-subvolume:%s-%d)",
+ basefd, uuid_utoa(basefd->inode->gfid),
+ active_subvol->name, active_subvol->graph->id,
+ state->active_subvol->name,
+ state->active_subvol->graph->id);
+ }
+
+ resolve->op_ret = -1;
+ resolve->op_errno = EBADF;
+ } else {
+ gf_log(state->this->name, GF_LOG_DEBUG,
+ "basefd (ptr:%p inode-gfid:%s) migrated "
+ "successfully in resolver "
+ "(old-subvolume:%s-%d new-subvolume:%s-%d)",
+ basefd, uuid_utoa(basefd->inode->gfid), active_subvol->name,
+ active_subvol->graph->id, state->active_subvol->name,
+ state->active_subvol->graph->id);
}
+ }
- if ((resolve->op_ret == -1) && (resolve->op_errno == EBADF)) {
- gf_log ("fuse-resolve", GF_LOG_WARNING,
- "migration of basefd (ptr:%p inode-gfid:%s) "
- "did not complete, failing fop with EBADF "
- "(old-subvolume:%s-%d new-subvolume:%s-%d)", basefd,
- uuid_utoa (basefd->inode->gfid),
- active_subvol->name, active_subvol->graph->id,
- state->active_subvol->name,
- state->active_subvol->graph->id);
- }
+ if ((resolve->op_ret == -1) && (resolve->op_errno == EBADF)) {
+ gf_log("fuse-resolve", GF_LOG_WARNING,
+ "migration of basefd (ptr:%p inode-gfid:%s) "
+ "did not complete, failing fop with EBADF "
+ "(old-subvolume:%s-%d new-subvolume:%s-%d)",
+ basefd, uuid_utoa(basefd->inode->gfid), active_subvol->name,
+ active_subvol->graph->id, state->active_subvol->name,
+ state->active_subvol->graph->id);
+ }
- if (activefd != basefd) {
- state->fd = fd_ref (activefd);
- fd_unref (basefd);
- }
+ if (activefd != basefd) {
+ state->fd = fd_ref(activefd);
+ fd_unref(basefd);
+ }
- /* state->active_subvol = active_subvol; */
+ /* state->active_subvol = active_subvol; */
resolve_continue:
- if (activefd != NULL) {
- fd_unref (activefd);
- }
+ if (activefd != NULL) {
+ fd_unref(activefd);
+ }
- fuse_resolve_continue (state);
+ fuse_resolve_continue(state);
- return 0;
+ return 0;
}
-
int
-fuse_gfid_set (fuse_state_t *state)
+fuse_gfid_set(fuse_state_t *state)
{
- int ret = 0;
+ int ret = 0;
- if (gf_uuid_is_null (state->gfid))
- goto out;
+ if (gf_uuid_is_null(state->gfid))
+ goto out;
- if (!state->xdata)
- state->xdata = dict_new ();
+ if (!state->xdata)
+ state->xdata = dict_new();
- if (!state->xdata) {
- ret = -1;
- goto out;
- }
+ if (!state->xdata) {
+ ret = -1;
+ goto out;
+ }
- ret = dict_set_gfuuid (state->xdata, "gfid-req",
- state->gfid, true);
+ ret = dict_set_gfuuid(state->xdata, "gfid-req", state->gfid, true);
out:
- return ret;
+ return ret;
}
-
int
-fuse_resolve_entry_init (fuse_state_t *state, fuse_resolve_t *resolve,
- ino_t par, char *name)
+fuse_resolve_entry_init(fuse_state_t *state, fuse_resolve_t *resolve, ino_t par,
+ char *name)
{
- inode_t *parent = NULL;
+ inode_t *parent = NULL;
- parent = fuse_ino_to_inode (par, state->this);
- gf_uuid_copy (resolve->pargfid, parent->gfid);
- resolve->parhint = parent;
- resolve->bname = gf_strdup (name);
+ parent = fuse_ino_to_inode(par, state->this);
+ gf_uuid_copy(resolve->pargfid, parent->gfid);
+ resolve->parhint = parent;
+ resolve->bname = gf_strdup(name);
- return 0;
+ return 0;
}
-
int
-fuse_resolve_inode_init (fuse_state_t *state, fuse_resolve_t *resolve,
- ino_t ino)
+fuse_resolve_inode_init(fuse_state_t *state, fuse_resolve_t *resolve, ino_t ino)
{
- inode_t *inode = NULL;
+ inode_t *inode = NULL;
- inode = fuse_ino_to_inode (ino, state->this);
- gf_uuid_copy (resolve->gfid, inode->gfid);
- resolve->hint = inode;
+ inode = fuse_ino_to_inode(ino, state->this);
+ gf_uuid_copy(resolve->gfid, inode->gfid);
+ resolve->hint = inode;
- return 0;
+ return 0;
}
-
int
-fuse_resolve_fd_init (fuse_state_t *state, fuse_resolve_t *resolve,
- fd_t *fd)
+fuse_resolve_fd_init(fuse_state_t *state, fuse_resolve_t *resolve, fd_t *fd)
{
- resolve->fd = fd_ref (fd);
+ resolve->fd = fd_ref(fd);
- return 0;
+ return 0;
}
-
static int
-fuse_resolve (fuse_state_t *state)
+fuse_resolve(fuse_state_t *state)
{
- fuse_resolve_t *resolve = NULL;
-
- resolve = state->resolve_now;
+ fuse_resolve_t *resolve = NULL;
- if (resolve->fd) {
+ resolve = state->resolve_now;
- fuse_resolve_fd (state);
+ if (resolve->fd) {
+ fuse_resolve_fd(state);
- } else if (!gf_uuid_is_null (resolve->pargfid)) {
+ } else if (!gf_uuid_is_null(resolve->pargfid)) {
+ fuse_resolve_parent(state);
- fuse_resolve_parent (state);
+ } else if (!gf_uuid_is_null(resolve->gfid)) {
+ fuse_resolve_inode(state);
- } else if (!gf_uuid_is_null (resolve->gfid)) {
-
- fuse_resolve_inode (state);
-
- } else {
- fuse_resolve_all (state);
- }
+ } else {
+ fuse_resolve_all(state);
+ }
- return 0;
+ return 0;
}
static int
-fuse_resolve_done (fuse_state_t *state)
+fuse_resolve_done(fuse_state_t *state)
{
- fuse_fop_resume (state);
- return 0;
+ fuse_fop_resume(state);
+ return 0;
}
/*
@@ -669,53 +635,49 @@ fuse_resolve_done (fuse_state_t *state)
* state->resolve_now is used to decide which location/fd is to be resolved now
*/
static int
-fuse_resolve_all (fuse_state_t *state)
+fuse_resolve_all(fuse_state_t *state)
{
- if (state->resolve_now == NULL) {
-
- state->resolve_now = &state->resolve;
- state->loc_now = &state->loc;
-
- fuse_resolve (state);
-
- } else if (state->resolve_now == &state->resolve) {
+ if (state->resolve_now == NULL) {
+ state->resolve_now = &state->resolve;
+ state->loc_now = &state->loc;
- state->resolve_now = &state->resolve2;
- state->loc_now = &state->loc2;
+ fuse_resolve(state);
- fuse_resolve (state);
+ } else if (state->resolve_now == &state->resolve) {
+ state->resolve_now = &state->resolve2;
+ state->loc_now = &state->loc2;
- } else if (state->resolve_now == &state->resolve2) {
+ fuse_resolve(state);
- fuse_resolve_done (state);
+ } else if (state->resolve_now == &state->resolve2) {
+ fuse_resolve_done(state);
- } else {
- gf_log ("fuse-resolve", GF_LOG_ERROR,
- "Invalid pointer for state->resolve_now");
- }
+ } else {
+ gf_log("fuse-resolve", GF_LOG_ERROR,
+ "Invalid pointer for state->resolve_now");
+ }
- return 0;
+ return 0;
}
-
int
-fuse_resolve_continue (fuse_state_t *state)
+fuse_resolve_continue(fuse_state_t *state)
{
- fuse_resolve_loc_touchup (state);
+ fuse_resolve_loc_touchup(state);
- fuse_resolve_all (state);
+ fuse_resolve_all(state);
- return 0;
+ return 0;
}
int
-fuse_resolve_and_resume (fuse_state_t *state, fuse_resume_fn_t fn)
+fuse_resolve_and_resume(fuse_state_t *state, fuse_resume_fn_t fn)
{
- fuse_gfid_set (state);
+ fuse_gfid_set(state);
- state->resume_fn = fn;
+ state->resume_fn = fn;
- fuse_resolve_all (state);
+ fuse_resolve_all(state);
- return 0;
+ return 0;
}