diff options
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-read.c | 544 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-inode-read.c | 806 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-open.c | 196 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-algorithm.c | 424 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-data.c | 1069 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-metadata.c | 847 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 692 | 
7 files changed, 2288 insertions, 2290 deletions
diff --git a/xlators/cluster/afr/src/afr-dir-read.c b/xlators/cluster/afr/src/afr-dir-read.c index 19ddcbda7..59bd7872e 100644 --- a/xlators/cluster/afr/src/afr-dir-read.c +++ b/xlators/cluster/afr/src/afr-dir-read.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */ @@ -98,8 +98,8 @@ afr_examine_dir_readdir_cbk (call_frame_t *frame, void *cookie,                               xlator_t *this, int32_t op_ret, int32_t op_errno,                               gf_dirent_t *entries)  { -	afr_private_t *    priv  = NULL; -	afr_local_t *      local = NULL; +        afr_private_t *    priv  = NULL; +        afr_local_t *      local = NULL;          afr_self_heal_t *  sh    = NULL;          gf_dirent_t * entry = NULL; @@ -166,7 +166,7 @@ out:                                                             sizeof(sh_type_str));                                  gf_log (this->name, GF_LOG_NORMAL,                                          "%s self-heal triggered. path: %s, " -                                         "reason: checksums of directory differ," +                                        "reason: checksums of directory differ,"                                          " forced merge option set",                                          sh_type_str, local->loc.path); @@ -197,8 +197,8 @@ afr_examine_dir (call_frame_t *frame, xlator_t *this)          priv  = this->private;          local->cont.opendir.checksum = GF_CALLOC (priv->child_count, -                                        sizeof (*local->cont.opendir.checksum), -                                        gf_afr_mt_int32_t); +                                                  sizeof (*local->cont.opendir.checksum), +                                                  gf_afr_mt_int32_t);          call_count = afr_up_children_count (priv->child_count, local->child_up); @@ -223,15 +223,15 @@ afr_examine_dir (call_frame_t *frame, xlator_t *this)  int32_t  afr_opendir_cbk (call_frame_t *frame, void *cookie, -		 xlator_t *this, int32_t op_ret, int32_t op_errno, -		 fd_t *fd) +                 xlator_t *this, int32_t op_ret, int32_t op_errno, +                 fd_t *fd)  {          afr_private_t *priv              = NULL; -	afr_local_t   *local             = NULL; +        afr_local_t   *local             = NULL;          int32_t        up_children_count = 0;          int           ret                = -1; -	int call_count = -1; +        int call_count = -1;          priv  = this->private;          local = frame->local; @@ -239,18 +239,18 @@ afr_opendir_cbk (call_frame_t *frame, void *cookie,          up_children_count = afr_up_children_count (priv->child_count,                                                     local->child_up); -	LOCK (&frame->lock); -	{ -		if (op_ret >= 0) -			local->op_ret = op_ret; +        LOCK (&frame->lock); +        { +                if (op_ret >= 0) +                        local->op_ret = op_ret; -		local->op_errno = op_errno; -	} -	UNLOCK (&frame->lock); +                local->op_errno = op_errno; +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { +        if (call_count == 0) {                  if (local->op_ret == 0) {                          ret = afr_fd_ctx_set (this, local->fd); @@ -286,79 +286,79 @@ afr_opendir_cbk (call_frame_t *frame, void *cookie,                                                    local->op_errno, local->fd);                          }                  } else { -out: +                out:                          AFR_STACK_UNWIND (opendir, frame, local->op_ret,                                            local->op_errno, local->fd);                  }          } -	return 0; +        return 0;  } -int32_t  +int32_t  afr_opendir (call_frame_t *frame, xlator_t *this, -	     loc_t *loc, fd_t *fd) +             loc_t *loc, fd_t *fd)  { -	afr_private_t * priv        = NULL; -	afr_local_t   * local       = NULL; +        afr_private_t * priv        = NULL; +        afr_local_t   * local       = NULL; -	int             child_count = 0; -	int             i           = 0; +        int             child_count = 0; +        int             i           = 0; -	int ret = -1; -	int call_count = -1; +        int ret = -1; +        int call_count = -1; -	int32_t         op_ret   = -1; -	int32_t         op_errno = 0; +        int32_t         op_ret   = -1; +        int32_t         op_errno = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv = this->private; +        priv = this->private; -	child_count = priv->child_count; +        child_count = priv->child_count; -	ALLOC_OR_GOTO (local, afr_local_t, out); -	ret = AFR_LOCAL_INIT (local, priv); -	if (ret < 0) { -		op_errno = -ret; -		goto out; -	} +        ALLOC_OR_GOTO (local, afr_local_t, out); +        ret = AFR_LOCAL_INIT (local, priv); +        if (ret < 0) { +                op_errno = -ret; +                goto out; +        }          loc_copy (&local->loc, loc); -	frame->local = local; -	local->fd    = fd_ref (fd); +        frame->local = local; +        local->fd    = fd_ref (fd); -	call_count = local->call_count; -	 -	for (i = 0; i < child_count; i++) { -		if (local->child_up[i]) { -			STACK_WIND (frame, afr_opendir_cbk,  -				    priv->children[i], -				    priv->children[i]->fops->opendir, -				    loc, fd); +        call_count = local->call_count; -			if (!--call_count) -				break; -		} -	} +        for (i = 0; i < child_count; i++) { +                if (local->child_up[i]) { +                        STACK_WIND (frame, afr_opendir_cbk, +                                    priv->children[i], +                                    priv->children[i]->fops->opendir, +                                    loc, fd); + +                        if (!--call_count) +                                break; +                } +        } -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (opendir, frame, op_ret, op_errno, fd); -	} +        if (op_ret == -1) { +                AFR_STACK_UNWIND (opendir, frame, op_ret, op_errno, fd); +        } -	return 0; +        return 0;  }  /**   * Common algorithm for directory read calls: - *  + *   * - Try the fop on the first child that is up   * - if we have failed due to ENOTCONN:   *     try the next child @@ -394,110 +394,110 @@ out:  static void  afr_remember_entries (gf_dirent_t *entries, fd_t *fd)  { -	struct entry_name *n       = NULL; -	gf_dirent_t *      entry   = NULL; +        struct entry_name *n       = NULL; +        gf_dirent_t *      entry   = NULL; -	int ret = 0; +        int ret = 0; -	uint64_t      ctx; -	afr_fd_ctx_t *fd_ctx; +        uint64_t      ctx; +        afr_fd_ctx_t *fd_ctx; -	ret = fd_ctx_get (fd, THIS, &ctx); -	if (ret < 0) { -		gf_log (THIS->name, GF_LOG_DEBUG, -			"could not get fd ctx for fd=%p", fd); -		return; -	} +        ret = fd_ctx_get (fd, THIS, &ctx); +        if (ret < 0) { +                gf_log (THIS->name, GF_LOG_DEBUG, +                        "could not get fd ctx for fd=%p", fd); +                return; +        }          fd_ctx = (afr_fd_ctx_t *)(long) ctx; -	list_for_each_entry (entry, &entries->list, list) { -		n = GF_CALLOC (1, sizeof (*n), gf_afr_mt_entry_name); -		n->name = gf_strdup (entry->d_name); -		INIT_LIST_HEAD (&n->list); +        list_for_each_entry (entry, &entries->list, list) { +                n = GF_CALLOC (1, sizeof (*n), gf_afr_mt_entry_name); +                n->name = gf_strdup (entry->d_name); +                INIT_LIST_HEAD (&n->list); -		list_add (&n->list, &fd_ctx->entries); -	} +                list_add (&n->list, &fd_ctx->entries); +        }  }  static off_t  afr_filter_entries (gf_dirent_t *entries, fd_t *fd)  { -	gf_dirent_t *entry, *tmp; -	int ret = 0; +        gf_dirent_t *entry, *tmp; +        int ret = 0; -	uint64_t      ctx; -	afr_fd_ctx_t *fd_ctx; +        uint64_t      ctx; +        afr_fd_ctx_t *fd_ctx; -	off_t offset = 0; +        off_t offset = 0; -	ret = fd_ctx_get (fd, THIS, &ctx); -	if (ret < 0) { -		gf_log (THIS->name, GF_LOG_DEBUG, -			"could not get fd ctx for fd=%p", fd); -		return -1; -	} +        ret = fd_ctx_get (fd, THIS, &ctx); +        if (ret < 0) { +                gf_log (THIS->name, GF_LOG_DEBUG, +                        "could not get fd ctx for fd=%p", fd); +                return -1; +        }          fd_ctx = (afr_fd_ctx_t *)(long) ctx; -	list_for_each_entry_safe (entry, tmp, &entries->list, list) { -		offset = entry->d_off; +        list_for_each_entry_safe (entry, tmp, &entries->list, list) { +                offset = entry->d_off; -		if (remembered_name (entry->d_name, &fd_ctx->entries)) { -			list_del (&entry->list); -			GF_FREE (entry); -		} -	} +                if (remembered_name (entry->d_name, &fd_ctx->entries)) { +                        list_del (&entry->list); +                        GF_FREE (entry); +                } +        } -	return offset; +        return offset;  }  static void  afr_forget_entries (fd_t *fd)  { -	struct entry_name *entry, *tmp; -	int ret = 0; +        struct entry_name *entry, *tmp; +        int ret = 0; -	uint64_t      ctx; -	afr_fd_ctx_t *fd_ctx; +        uint64_t      ctx; +        afr_fd_ctx_t *fd_ctx; -	ret = fd_ctx_get (fd, THIS, &ctx); -	if (ret < 0) { -		gf_log (THIS->name, GF_LOG_DEBUG, -			"could not get fd ctx for fd=%p", fd); -		return; -	} +        ret = fd_ctx_get (fd, THIS, &ctx); +        if (ret < 0) { +                gf_log (THIS->name, GF_LOG_DEBUG, +                        "could not get fd ctx for fd=%p", fd); +                return; +        }          fd_ctx = (afr_fd_ctx_t *)(long) ctx; -	list_for_each_entry_safe (entry, tmp, &fd_ctx->entries, list) { -		GF_FREE (entry->name); -		list_del (&entry->list); -		GF_FREE (entry); -	} +        list_for_each_entry_safe (entry, tmp, &fd_ctx->entries, list) { +                GF_FREE (entry->name); +                list_del (&entry->list); +                GF_FREE (entry); +        }  }  int32_t  afr_readdir_cbk (call_frame_t *frame, void *cookie, -		 xlator_t *this, int32_t op_ret, int32_t op_errno, -		 gf_dirent_t *entries) +                 xlator_t *this, int32_t op_ret, int32_t op_errno, +                 gf_dirent_t *entries)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL;          gf_dirent_t * entry = NULL;          gf_dirent_t * tmp   = NULL;          int child_index = -1; -	priv     = this->private; -	local = frame->local; +        priv     = this->private; +        local = frame->local;          child_index = (long) cookie; -	if (op_ret != -1) { +        if (op_ret != -1) {                  list_for_each_entry_safe (entry, tmp, &entries->list, list) {                          entry->d_ino = afr_itransform (entry->d_ino,                                                         priv->child_count, @@ -509,11 +509,11 @@ afr_readdir_cbk (call_frame_t *frame, void *cookie,                                  GF_FREE (entry);                          }                  } -    	} +        }          AFR_STACK_UNWIND (readdir, frame, op_ret, op_errno, entries); -	return 0; +        return 0;  } @@ -537,7 +537,7 @@ afr_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          uint64_t      ctx    = 0;          afr_fd_ctx_t *fd_ctx = NULL; -	off_t offset = 0; +        off_t offset = 0;          priv     = this->private;          children = priv->children; @@ -546,88 +546,88 @@ afr_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          child_index = (long) cookie; -	if (priv->strict_readdir) { -		ret = fd_ctx_get (local->fd, this, &ctx); -		if (ret < 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not get fd ctx for fd=%p", local->fd); -			op_ret   = -1; -			op_errno = -ret; -			goto out; -		} - -		fd_ctx = (afr_fd_ctx_t *)(long) ctx; - -		if (child_went_down (op_ret, op_errno)) { -			if (all_tried (child_index, priv->child_count)) { -				goto out; -			} - -			call_child = ++child_index; - -			gf_log (this->name, GF_LOG_TRACE, -				"starting readdir afresh on child %d, offset %"PRId64, -				call_child, (uint64_t) 0); - -			fd_ctx->failed_over = _gf_true; - -			STACK_WIND_COOKIE (frame, afr_readdirp_cbk, -					   (void *) (long) call_child, -					   children[call_child], -					   children[call_child]->fops->readdirp, local->fd, -					   local->cont.readdir.size, 0); -			return 0; -		} -	} - -	if (op_ret != -1) { -		list_for_each_entry_safe (entry, tmp, &entries->list, list) { -			inum = afr_itransform (entry->d_ino, priv->child_count, -					       child_index); -			entry->d_ino = inum; -			inum  = afr_itransform (entry->d_stat.ia_ino, -						priv->child_count, child_index); -			entry->d_stat.ia_ino = inum; - -			if ((local->fd->inode == local->fd->inode->table->root) -			    && !strcmp (entry->d_name, GF_REPLICATE_TRASH_DIR)) { -				list_del_init (&entry->list); -				GF_FREE (entry); -			} -		} -	} - -	if (priv->strict_readdir) { -		if (fd_ctx->failed_over) { -			if (list_empty (&entries->list)) { -				goto out; -			} - -			offset = afr_filter_entries (entries, local->fd); - -			afr_remember_entries (entries, local->fd); - -			if (list_empty (&entries->list)) { -				/* All the entries we got were duplicate. We -				   shouldn't send an empty list now, because -				   that'll make the application stop reading. So -				   try to get more entries */ - -				gf_log (this->name, GF_LOG_TRACE, -					"trying to fetch non-duplicate entries from offset %"PRId64", child %s", -					offset, children[child_index]->name); - -				STACK_WIND_COOKIE (frame, afr_readdirp_cbk, -						   (void *) (long) child_index, -						   children[child_index], -						   children[child_index]->fops->readdirp, -						   local->fd, local->cont.readdir.size, offset); -				return 0; -			} -		} else { -			afr_remember_entries (entries, local->fd); -		} -	} +        if (priv->strict_readdir) { +                ret = fd_ctx_get (local->fd, this, &ctx); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not get fd ctx for fd=%p", local->fd); +                        op_ret   = -1; +                        op_errno = -ret; +                        goto out; +                } + +                fd_ctx = (afr_fd_ctx_t *)(long) ctx; + +                if (child_went_down (op_ret, op_errno)) { +                        if (all_tried (child_index, priv->child_count)) { +                                goto out; +                        } + +                        call_child = ++child_index; + +                        gf_log (this->name, GF_LOG_TRACE, +                                "starting readdir afresh on child %d, offset %"PRId64, +                                call_child, (uint64_t) 0); + +                        fd_ctx->failed_over = _gf_true; + +                        STACK_WIND_COOKIE (frame, afr_readdirp_cbk, +                                           (void *) (long) call_child, +                                           children[call_child], +                                           children[call_child]->fops->readdirp, local->fd, +                                           local->cont.readdir.size, 0); +                        return 0; +                } +        } + +        if (op_ret != -1) { +                list_for_each_entry_safe (entry, tmp, &entries->list, list) { +                        inum = afr_itransform (entry->d_ino, priv->child_count, +                                               child_index); +                        entry->d_ino = inum; +                        inum  = afr_itransform (entry->d_stat.ia_ino, +                                                priv->child_count, child_index); +                        entry->d_stat.ia_ino = inum; + +                        if ((local->fd->inode == local->fd->inode->table->root) +                            && !strcmp (entry->d_name, GF_REPLICATE_TRASH_DIR)) { +                                list_del_init (&entry->list); +                                GF_FREE (entry); +                        } +                } +        } + +        if (priv->strict_readdir) { +                if (fd_ctx->failed_over) { +                        if (list_empty (&entries->list)) { +                                goto out; +                        } + +                        offset = afr_filter_entries (entries, local->fd); + +                        afr_remember_entries (entries, local->fd); + +                        if (list_empty (&entries->list)) { +                                /* All the entries we got were duplicate. We +                                   shouldn't send an empty list now, because +                                   that'll make the application stop reading. So +                                   try to get more entries */ + +                                gf_log (this->name, GF_LOG_TRACE, +                                        "trying to fetch non-duplicate entries from offset %"PRId64", child %s", +                                        offset, children[child_index]->name); + +                                STACK_WIND_COOKIE (frame, afr_readdirp_cbk, +                                                   (void *) (long) child_index, +                                                   children[child_index], +                                                   children[child_index]->fops->readdirp, +                                                   local->fd, local->cont.readdir.size, offset); +                                return 0; +                        } +                } else { +                        afr_remember_entries (entries, local->fd); +                } +        }  out:          AFR_STACK_UNWIND (readdirp, frame, op_ret, op_errno, entries); @@ -638,70 +638,70 @@ out:  int32_t  afr_do_readdir (call_frame_t *frame, xlator_t *this, -	        fd_t *fd, size_t size, off_t offset, int whichop) +                fd_t *fd, size_t size, off_t offset, int whichop)  { -	afr_private_t * priv       = NULL; -	xlator_t **     children   = NULL; -	int             call_child = 0; -	afr_local_t     *local     = NULL; +        afr_private_t * priv       = NULL; +        xlator_t **     children   = NULL; +        int             call_child = 0; +        afr_local_t     *local     = NULL;          uint64_t      ctx;          afr_fd_ctx_t *fd_ctx; -	int ret = -1; +        int ret = -1; -	int32_t op_ret   = -1; -	int32_t op_errno = 0; +        int32_t op_ret   = -1; +        int32_t op_errno = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); -	ret = AFR_LOCAL_INIT (local, priv); -	if (ret < 0) { -		op_errno = -ret; -		goto out; -	} +        ALLOC_OR_GOTO (local, afr_local_t, out); +        ret = AFR_LOCAL_INIT (local, priv); +        if (ret < 0) { +                op_errno = -ret; +                goto out; +        } -	frame->local = local; +        frame->local = local; -	call_child = afr_first_up_child (priv); -	if (call_child == -1) { -		op_errno = ENOTCONN; -		gf_log (this->name, GF_LOG_DEBUG, -			"no child is up"); -		goto out; -	} +        call_child = afr_first_up_child (priv); +        if (call_child == -1) { +                op_errno = ENOTCONN; +                gf_log (this->name, GF_LOG_DEBUG, +                        "no child is up"); +                goto out; +        }          local->fd                  = fd_ref (fd);          local->cont.readdir.size   = size; -	if (priv->strict_readdir) { -		ret = fd_ctx_get (fd, this, &ctx); -		if (ret < 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not get fd ctx for fd=%p", fd); -			op_errno = -ret; -			goto out; -		} +        if (priv->strict_readdir) { +                ret = fd_ctx_get (fd, this, &ctx); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not get fd ctx for fd=%p", fd); +                        op_errno = -ret; +                        goto out; +                } -		fd_ctx = (afr_fd_ctx_t *)(long) ctx; +                fd_ctx = (afr_fd_ctx_t *)(long) ctx; -		if (fd_ctx->last_tried != call_child) { -			gf_log (this->name, GF_LOG_TRACE, -				"first up child has changed from %d to %d, restarting readdir from offset 0", -				fd_ctx->last_tried, call_child); +                if (fd_ctx->last_tried != call_child) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "first up child has changed from %d to %d, restarting readdir from offset 0", +                                fd_ctx->last_tried, call_child); -			fd_ctx->failed_over = _gf_true; -			offset = 0; -		} +                        fd_ctx->failed_over = _gf_true; +                        offset = 0; +                } -		fd_ctx->last_tried = call_child; -	} +                fd_ctx->last_tried = call_child; +        }          if (whichop == GF_FOP_READDIR)                  STACK_WIND_COOKIE (frame, afr_readdir_cbk, @@ -716,12 +716,12 @@ afr_do_readdir (call_frame_t *frame, xlator_t *this,                                     children[call_child]->fops->readdirp, fd,                                     size, offset); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (readdir, frame, op_ret, op_errno, NULL); -	} -	return 0; +        if (op_ret == -1) { +                AFR_STACK_UNWIND (readdir, frame, op_ret, op_errno, NULL); +        } +        return 0;  } @@ -746,8 +746,8 @@ afr_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  int32_t  afr_releasedir (xlator_t *this, fd_t *fd)  { -	afr_forget_entries (fd); +        afr_forget_entries (fd);          afr_cleanup_fd_ctx (this, fd); -	return 0; +        return 0;  } diff --git a/xlators/cluster/afr/src/afr-inode-read.c b/xlators/cluster/afr/src/afr-inode-read.c index d2089db8e..11db1e1d7 100644 --- a/xlators/cluster/afr/src/afr-inode-read.c +++ b/xlators/cluster/afr/src/afr-inode-read.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */ @@ -61,80 +61,80 @@  int32_t  afr_access_cbk (call_frame_t *frame, void *cookie, -		xlator_t *this, int32_t op_ret, int32_t op_errno) +                xlator_t *this, int32_t op_ret, int32_t op_errno)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try = -1;          int read_child = -1; -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	local = frame->local; +        local = frame->local;          read_child = (long) cookie; -	if (op_ret == -1) { +        if (op_ret == -1) {          retry: -		last_tried = local->cont.access.last_tried; +                last_tried = local->cont.access.last_tried; -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try    = ++local->cont.access.last_tried; +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try    = ++local->cont.access.last_tried;                  if (this_try == read_child) {                          goto retry;                  } -		unwind = 0; +                unwind = 0; -		STACK_WIND_COOKIE (frame, afr_access_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->access, -				   &local->loc, local->cont.access.mask); -	} +                STACK_WIND_COOKIE (frame, afr_access_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->access, +                                   &local->loc, local->cont.access.mask); +        }  out: -	if (unwind) { -		AFR_STACK_UNWIND (access, frame, op_ret, op_errno); -	} +        if (unwind) { +                AFR_STACK_UNWIND (access, frame, op_ret, op_errno); +        } -	return 0; +        return 0;  }  int32_t  afr_access (call_frame_t *frame, xlator_t *this, -	    loc_t *loc, int32_t mask) +            loc_t *loc, int32_t mask)  { -	afr_private_t * priv       = NULL; -	xlator_t **     children   = NULL; -	int             call_child = 0; -	afr_local_t     *local     = NULL; +        afr_private_t * priv       = NULL; +        xlator_t **     children   = NULL; +        int             call_child = 0; +        afr_local_t     *local     = NULL;          int32_t         read_child = -1; -	int32_t op_ret   = -1; -	int32_t op_errno = 0; +        int32_t op_ret   = -1; +        int32_t op_errno = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out);          read_child = afr_read_child (this, loc->inode); @@ -155,20 +155,20 @@ afr_access (call_frame_t *frame, xlator_t *this,                  local->cont.access.last_tried = call_child;          } -	loc_copy (&local->loc, loc); -	local->cont.access.mask       = mask; +        loc_copy (&local->loc, loc); +        local->cont.access.mask       = mask; -	STACK_WIND_COOKIE (frame, afr_access_cbk, -			   (void *) (long) call_child, -			   children[call_child], children[call_child]->fops->access, -			   loc, mask); +        STACK_WIND_COOKIE (frame, afr_access_cbk, +                           (void *) (long) call_child, +                           children[call_child], children[call_child]->fops->access, +                           loc, mask); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (access, frame, op_ret, op_errno); -	} -	return 0; +        if (op_ret == -1) { +                AFR_STACK_UNWIND (access, frame, op_ret, op_errno); +        } +        return 0;  } @@ -178,85 +178,85 @@ out:  int32_t  afr_stat_cbk (call_frame_t *frame, void *cookie, -	      xlator_t *this, int32_t op_ret, int32_t op_errno, -	      struct iatt *buf) +              xlator_t *this, int32_t op_ret, int32_t op_errno, +              struct iatt *buf)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try = -1; -	int read_child = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try = -1; +        int read_child = -1; -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	read_child = (long) cookie; +        read_child = (long) cookie; -	local = frame->local; +        local = frame->local; -	if (op_ret == -1) { -	retry: -		last_tried = local->cont.stat.last_tried; +        if (op_ret == -1) { +        retry: +                last_tried = local->cont.stat.last_tried; -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try = ++local->cont.stat.last_tried; +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try = ++local->cont.stat.last_tried; -		if (this_try == read_child) { -			goto retry; -		} +                if (this_try == read_child) { +                        goto retry; +                } -		unwind = 0; +                unwind = 0; -		STACK_WIND_COOKIE (frame, afr_stat_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->stat, -				   &local->loc); -	} +                STACK_WIND_COOKIE (frame, afr_stat_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->stat, +                                   &local->loc); +        }  out: -	if (unwind) { -		if (buf) -			buf->ia_ino = local->cont.stat.ino; +        if (unwind) { +                if (buf) +                        buf->ia_ino = local->cont.stat.ino; -		AFR_STACK_UNWIND (stat, frame, op_ret, op_errno, buf); -	} +                AFR_STACK_UNWIND (stat, frame, op_ret, op_errno, buf); +        } -	return 0; +        return 0;  }  int32_t  afr_stat (call_frame_t *frame, xlator_t *this, -	  loc_t *loc) +          loc_t *loc)  { -	afr_private_t * priv       = NULL; -	afr_local_t   * local      = NULL; -	xlator_t **     children   = NULL; +        afr_private_t * priv       = NULL; +        afr_local_t   * local      = NULL; +        xlator_t **     children   = NULL;          int32_t         read_child = -1; -	int             call_child = 0; +        int             call_child = 0; -	int32_t         op_ret     = -1; -	int32_t         op_errno   = 0; +        int32_t         op_ret     = -1; +        int32_t         op_errno   = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out); -	frame->local = local; +        frame->local = local;          read_child = afr_read_child (this, loc->inode); @@ -266,33 +266,33 @@ afr_stat (call_frame_t *frame, xlator_t *this,                  local->cont.stat.last_tried = -1;          } else { -		call_child = afr_first_up_child (priv); -		if (call_child == -1) { -			op_errno = ENOTCONN; -			gf_log (this->name, GF_LOG_DEBUG, -				"no child is up"); -			goto out; -		} +                call_child = afr_first_up_child (priv); +                if (call_child == -1) { +                        op_errno = ENOTCONN; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "no child is up"); +                        goto out; +                } -		local->cont.stat.last_tried = call_child; -	} +                local->cont.stat.last_tried = call_child; +        } -	loc_copy (&local->loc, loc); +        loc_copy (&local->loc, loc); -	local->cont.stat.ino = loc->inode->ino; +        local->cont.stat.ino = loc->inode->ino; -	STACK_WIND_COOKIE (frame, afr_stat_cbk, (void *) (long) call_child, -			   children[call_child], -			   children[call_child]->fops->stat, -			   loc); +        STACK_WIND_COOKIE (frame, afr_stat_cbk, (void *) (long) call_child, +                           children[call_child], +                           children[call_child]->fops->stat, +                           loc); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (stat, frame, op_ret, op_errno, NULL); -	} +        if (op_ret == -1) { +                AFR_STACK_UNWIND (stat, frame, op_ret, op_errno, NULL); +        } -	return 0; +        return 0;  } @@ -302,88 +302,88 @@ out:  int32_t  afr_fstat_cbk (call_frame_t *frame, void *cookie, -	       xlator_t *this, int32_t op_ret, int32_t op_errno, -	       struct iatt *buf) +               xlator_t *this, int32_t op_ret, int32_t op_errno, +               struct iatt *buf)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try = -1;          int read_child = -1; -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	local = frame->local; +        local = frame->local; -	read_child = (long) cookie; +        read_child = (long) cookie; -	if (op_ret == -1) { -	retry: -		last_tried = local->cont.fstat.last_tried; +        if (op_ret == -1) { +        retry: +                last_tried = local->cont.fstat.last_tried; -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try   = ++local->cont.fstat.last_tried; +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try   = ++local->cont.fstat.last_tried; -		if (this_try == read_child) { -			goto retry; -		} +                if (this_try == read_child) { +                        goto retry; +                } -		unwind = 0; +                unwind = 0; -		STACK_WIND_COOKIE (frame, afr_fstat_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->fstat, -				   local->fd); -	} +                STACK_WIND_COOKIE (frame, afr_fstat_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->fstat, +                                   local->fd); +        }  out: -	if (unwind) { -		if (buf) -			buf->ia_ino = local->cont.fstat.ino; +        if (unwind) { +                if (buf) +                        buf->ia_ino = local->cont.fstat.ino; -		AFR_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf); -	} +                AFR_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf); +        } -	return 0; +        return 0;  }  int32_t  afr_fstat (call_frame_t *frame, xlator_t *this, -	   fd_t *fd) +           fd_t *fd)  { -	afr_private_t * priv       = NULL; -	afr_local_t   * local      = NULL; -	xlator_t **     children   = NULL; +        afr_private_t * priv       = NULL; +        afr_local_t   * local      = NULL; +        xlator_t **     children   = NULL; -	int             call_child = 0; +        int             call_child = 0;          int32_t         read_child = -1; -	int32_t         op_ret     = -1; -	int32_t         op_errno   = 0; +        int32_t         op_ret     = -1; +        int32_t         op_errno   = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (fd, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (fd, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out); -	frame->local = local; +        frame->local = local; -	VALIDATE_OR_GOTO (fd->inode, out); +        VALIDATE_OR_GOTO (fd->inode, out);          read_child = afr_read_child (this, fd->inode); @@ -397,28 +397,28 @@ afr_fstat (call_frame_t *frame, xlator_t *this,                  if (call_child == -1) {                          op_errno = ENOTCONN;                          gf_log (this->name, GF_LOG_DEBUG, -				"no child is up"); -			goto out; -		} +                                "no child is up"); +                        goto out; +                }                  local->cont.fstat.last_tried = call_child;          } -	local->cont.fstat.ino = fd->inode->ino; -	local->fd = fd_ref (fd); +        local->cont.fstat.ino = fd->inode->ino; +        local->fd = fd_ref (fd); -	STACK_WIND_COOKIE (frame, afr_fstat_cbk, (void *) (long) call_child, -			   children[call_child], -			   children[call_child]->fops->fstat, -			   fd); +        STACK_WIND_COOKIE (frame, afr_fstat_cbk, (void *) (long) call_child, +                           children[call_child], +                           children[call_child]->fops->fstat, +                           fd); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (fstat, frame, op_ret, op_errno, NULL); -	} +        if (op_ret == -1) { +                AFR_STACK_UNWIND (fstat, frame, op_ret, op_errno, NULL); +        } -	return 0; +        return 0;  }  /* }}} */ @@ -427,85 +427,85 @@ out:  int32_t  afr_readlink_cbk (call_frame_t *frame, void *cookie, -		  xlator_t *this, int32_t op_ret, int32_t op_errno, -		  const char *buf, struct iatt *sbuf) +                  xlator_t *this, int32_t op_ret, int32_t op_errno, +                  const char *buf, struct iatt *sbuf)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try = -1;          int read_child = -1; -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	local = frame->local; +        local = frame->local;          read_child = (long) cookie; -	if (op_ret == -1) { +        if (op_ret == -1) {          retry: -		last_tried = local->cont.readlink.last_tried; +                last_tried = local->cont.readlink.last_tried; -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try = ++local->cont.readlink.last_tried; +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try = ++local->cont.readlink.last_tried;                  if (this_try == read_child) {                          goto retry;                  } -		unwind = 0; -		STACK_WIND_COOKIE (frame, afr_readlink_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->readlink, -				   &local->loc, -				   local->cont.readlink.size); -	} +                unwind = 0; +                STACK_WIND_COOKIE (frame, afr_readlink_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->readlink, +                                   &local->loc, +                                   local->cont.readlink.size); +        }  out: -	if (unwind) { +        if (unwind) {                  if (sbuf)                          sbuf->ia_ino = local->cont.readlink.ino; -		AFR_STACK_UNWIND (readlink, frame, op_ret, op_errno, buf, sbuf); -	} +                AFR_STACK_UNWIND (readlink, frame, op_ret, op_errno, buf, sbuf); +        } -	return 0; +        return 0;  }  int32_t  afr_readlink (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, size_t size) +              loc_t *loc, size_t size)  { -	afr_private_t * priv       = NULL; -	xlator_t **     children   = NULL; -	int             call_child = 0; -	afr_local_t     *local     = NULL; +        afr_private_t * priv       = NULL; +        xlator_t **     children   = NULL; +        int             call_child = 0; +        afr_local_t     *local     = NULL;          int32_t         read_child = -1; -	int32_t op_ret   = -1; -	int32_t op_errno = 0; +        int32_t op_ret   = -1; +        int32_t op_errno = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out); -	frame->local = local; +        frame->local = local;          read_child = afr_read_child (this, loc->inode); @@ -527,22 +527,22 @@ afr_readlink (call_frame_t *frame, xlator_t *this,                  local->cont.readlink.last_tried = call_child;          } -	loc_copy (&local->loc, loc); +        loc_copy (&local->loc, loc); -	local->cont.readlink.size       = size; +        local->cont.readlink.size       = size;          local->cont.readlink.ino        = loc->inode->ino; -	STACK_WIND_COOKIE (frame, afr_readlink_cbk, -			   (void *) (long) call_child, -			   children[call_child], children[call_child]->fops->readlink, -			   loc, size); +        STACK_WIND_COOKIE (frame, afr_readlink_cbk, +                           (void *) (long) call_child, +                           children[call_child], children[call_child]->fops->readlink, +                           loc, size); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (readlink, frame, op_ret, op_errno, NULL, NULL); -	} -	return 0; +        if (op_ret == -1) { +                AFR_STACK_UNWIND (readlink, frame, op_ret, op_errno, NULL, NULL); +        } +        return 0;  } @@ -604,61 +604,61 @@ __filter_xattrs (dict_t *dict)  int32_t  afr_getxattr_cbk (call_frame_t *frame, void *cookie, -		  xlator_t *this, int32_t op_ret, int32_t op_errno, -		  dict_t *dict) +                  xlator_t *this, int32_t op_ret, int32_t op_errno, +                  dict_t *dict)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try = -1;          int read_child = -1; -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	local = frame->local; +        local = frame->local;          read_child = (long) cookie; -	if (op_ret == -1) { +        if (op_ret == -1) {          retry: -		last_tried = local->cont.getxattr.last_tried; +                last_tried = local->cont.getxattr.last_tried; -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try = ++local->cont.getxattr.last_tried; +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try = ++local->cont.getxattr.last_tried;                  if (this_try == read_child) {                          goto retry;                  } -		unwind = 0; -		STACK_WIND_COOKIE (frame, afr_getxattr_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->getxattr, -				   &local->loc, -				   local->cont.getxattr.name); -	} +                unwind = 0; +                STACK_WIND_COOKIE (frame, afr_getxattr_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->getxattr, +                                   &local->loc, +                                   local->cont.getxattr.name); +        }  out: -	if (unwind) { +        if (unwind) {                  if (op_ret >= 0 && dict)                          __filter_xattrs (dict); -		AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict); -	} +                AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict); +        } -	return 0; +        return 0;  }  int32_t  afr_getxattr_unwind (call_frame_t *frame, -                        int op_ret, int op_errno, dict_t *dict) +                     int op_ret, int op_errno, dict_t *dict)  {          AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict); @@ -667,33 +667,33 @@ afr_getxattr_unwind (call_frame_t *frame,  int32_t  afr_getxattr (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, const char *name) +              loc_t *loc, const char *name)  { -	afr_private_t *   priv       = NULL; -	xlator_t **       children   = NULL; -	int               call_child = 0; -	afr_local_t     * local      = NULL; +        afr_private_t *   priv       = NULL; +        xlator_t **       children   = NULL; +        int               call_child = 0; +        afr_local_t     * local      = NULL;          xlator_list_t   * trav       = NULL;          xlator_t       ** sub_volumes= NULL;          int               read_child = -1;          int               i          = 0; -	int32_t op_ret   = -1; -	int32_t op_errno = 0; +        int32_t op_ret   = -1; +        int32_t op_errno = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); -	frame->local = local; +        ALLOC_OR_GOTO (local, afr_local_t, out); +        frame->local = local;          loc_copy (&local->loc, loc);          if (name) @@ -714,7 +714,7 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,                          sub_volumes = alloca ( priv->child_count * sizeof (xlator_t *));                          for (i = 0, trav = this->children; trav ; -                                                trav = trav->next, i++) { +                             trav = trav->next, i++) {                                  *(sub_volumes + i)  = trav->xlator;                          } @@ -728,7 +728,7 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,                                  op_errno = EINVAL;                                  goto out; -                       } +                        }                          return 0;                  } @@ -741,7 +741,7 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,                                  sub_volumes = alloca ( priv->child_count * sizeof (xlator_t *));                                  for (i = 0, trav = this->children; trav ; -                                                trav = trav->next, i++) { +                                     trav = trav->next, i++) {                                          *(sub_volumes + i)  = trav->xlator; @@ -784,17 +784,17 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,          } -	STACK_WIND_COOKIE (frame, afr_getxattr_cbk, -			   (void *) (long) call_child, -			   children[call_child], children[call_child]->fops->getxattr, -			   loc, name); +        STACK_WIND_COOKIE (frame, afr_getxattr_cbk, +                           (void *) (long) call_child, +                           children[call_child], children[call_child]->fops->getxattr, +                           loc, name); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, NULL); -	} -	return 0; +        if (op_ret == -1) { +                AFR_STACK_UNWIND (getxattr, frame, op_ret, op_errno, NULL); +        } +        return 0;  } @@ -816,140 +816,140 @@ out:  int32_t  afr_readv_cbk (call_frame_t *frame, void *cookie, -	       xlator_t *this, int32_t op_ret, int32_t op_errno, -	       struct iovec *vector, int32_t count, struct iatt *buf, +               xlator_t *this, int32_t op_ret, int32_t op_errno, +               struct iovec *vector, int32_t count, struct iatt *buf,                 struct iobref *iobref)  { -	afr_private_t * priv     = NULL; -	afr_local_t *   local    = NULL; -	xlator_t **     children = NULL; +        afr_private_t * priv     = NULL; +        afr_local_t *   local    = NULL; +        xlator_t **     children = NULL; -	int unwind     = 1; -	int last_tried = -1; -	int this_try   = -1; +        int unwind     = 1; +        int last_tried = -1; +        int this_try   = -1;          int read_child = -1; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); -	priv     = this->private; -	VALIDATE_OR_GOTO (priv->children, out); +        priv     = this->private; +        VALIDATE_OR_GOTO (priv->children, out); -	children = priv->children; +        children = priv->children; -	local = frame->local; +        local = frame->local;          read_child = (long) cookie; -	if (op_ret == -1) { -	retry: -		last_tried = local->cont.readv.last_tried; - -		if (all_tried (last_tried, priv->child_count)) { -			goto out; -		} -		this_try = ++local->cont.readv.last_tried; - -		if (this_try == read_child) { -			/* -			   skip the read child since if we are here -			   we must have already tried that child -			*/ -			goto retry; -		} - -		unwind = 0; - -		STACK_WIND_COOKIE (frame, afr_readv_cbk, -				   (void *) (long) read_child, -				   children[this_try], -				   children[this_try]->fops->readv, -				   local->fd, local->cont.readv.size, -				   local->cont.readv.offset); -	} +        if (op_ret == -1) { +        retry: +                last_tried = local->cont.readv.last_tried; + +                if (all_tried (last_tried, priv->child_count)) { +                        goto out; +                } +                this_try = ++local->cont.readv.last_tried; + +                if (this_try == read_child) { +                        /* +                          skip the read child since if we are here +                          we must have already tried that child +                        */ +                        goto retry; +                } + +                unwind = 0; + +                STACK_WIND_COOKIE (frame, afr_readv_cbk, +                                   (void *) (long) read_child, +                                   children[this_try], +                                   children[this_try]->fops->readv, +                                   local->fd, local->cont.readv.size, +                                   local->cont.readv.offset); +        }  out: -	if (unwind) { +        if (unwind) {                  if (buf && local)                          buf->ia_ino = local->cont.readv.ino; -		AFR_STACK_UNWIND (readv, frame, op_ret, op_errno, +                AFR_STACK_UNWIND (readv, frame, op_ret, op_errno,                                    vector, count, buf, iobref); -	} +        } -	return 0; +        return 0;  }  int32_t  afr_readv (call_frame_t *frame, xlator_t *this, -	   fd_t *fd, size_t size, off_t offset) +           fd_t *fd, size_t size, off_t offset)  { -	afr_private_t * priv       = NULL; -	afr_local_t   * local      = NULL; -	xlator_t **     children   = NULL; +        afr_private_t * priv       = NULL; +        afr_local_t   * local      = NULL; +        xlator_t **     children   = NULL;          int32_t         read_child = -1; -	int             call_child = 0; +        int             call_child = 0; -	int32_t         op_ret     = -1; -	int32_t         op_errno   = 0; +        int32_t         op_ret     = -1; +        int32_t         op_errno   = 0; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); -	VALIDATE_OR_GOTO (fd, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (fd, out); -	priv     = this->private; -	children = priv->children; +        priv     = this->private; +        children = priv->children; -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out); -	frame->local = local; +        frame->local = local;          read_child = afr_read_child (this, fd->inode);          if ((read_child >= 0) && (priv->child_up[read_child])) {                  call_child = read_child; -		/* -		   if read fails from the read child, we try -		   all children starting with the first one -		*/ +                /* +                  if read fails from the read child, we try +                  all children starting with the first one +                */                  local->cont.readv.last_tried = -1;          } else { -		call_child = afr_first_up_child (priv); -		if (call_child == -1) { -			op_errno = ENOTCONN; -			gf_log (this->name, GF_LOG_DEBUG, -				"no child is up"); -			goto out; -		} +                call_child = afr_first_up_child (priv); +                if (call_child == -1) { +                        op_errno = ENOTCONN; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "no child is up"); +                        goto out; +                } -		local->cont.readv.last_tried = call_child; -	} +                local->cont.readv.last_tried = call_child; +        } -	local->fd                    = fd_ref (fd); +        local->fd                    = fd_ref (fd);          local->cont.readv.ino        = fd->inode->ino; -	local->cont.readv.size       = size; -	local->cont.readv.offset     = offset; +        local->cont.readv.size       = size; +        local->cont.readv.offset     = offset; -	STACK_WIND_COOKIE (frame, afr_readv_cbk, -			   (void *) (long) call_child, -			   children[call_child], -			   children[call_child]->fops->readv, -			   fd, size, offset); +        STACK_WIND_COOKIE (frame, afr_readv_cbk, +                           (void *) (long) call_child, +                           children[call_child], +                           children[call_child]->fops->readv, +                           fd, size, offset); -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (readv, frame, op_ret, op_errno, NULL, 0, NULL, +        if (op_ret == -1) { +                AFR_STACK_UNWIND (readv, frame, op_ret, op_errno, NULL, 0, NULL,                                    NULL); -	} -	return 0; +        } +        return 0;  }  /* }}} */ diff --git a/xlators/cluster/afr/src/afr-open.c b/xlators/cluster/afr/src/afr-open.c index 8c87ce893..5b96c4e34 100644 --- a/xlators/cluster/afr/src/afr-open.c +++ b/xlators/cluster/afr/src/afr-open.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2007-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */  #include <libgen.h> @@ -57,24 +57,24 @@  int -afr_open_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  -			int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +afr_open_ftruncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                          struct iatt *postbuf)  { -	afr_local_t * local = frame->local; +        afr_local_t * local = frame->local; -	AFR_STACK_UNWIND (open, frame, local->op_ret, local->op_errno, -			  local->fd); -	return 0; +        AFR_STACK_UNWIND (open, frame, local->op_ret, local->op_errno, +                          local->fd); +        return 0;  }  int  afr_open_cbk (call_frame_t *frame, void *cookie, -	      xlator_t *this, int32_t op_ret, int32_t op_errno, -	      fd_t *fd) +              xlator_t *this, int32_t op_ret, int32_t op_errno, +              fd_t *fd)  { -	afr_local_t *  local = NULL; +        afr_local_t *  local = NULL;          int child_index = (long) cookie; @@ -83,18 +83,18 @@ afr_open_cbk (call_frame_t *frame, void *cookie,          int ret = 0; -	int call_count = -1; +        int call_count = -1; -	local = frame->local; +        local = frame->local; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -		} +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                } -		if (op_ret >= 0) { -			local->op_ret = op_ret; +                if (op_ret >= 0) { +                        local->op_ret = op_ret;                          local->success_count++;                          ret = afr_fd_ctx_set (this, fd); @@ -124,26 +124,26 @@ afr_open_cbk (call_frame_t *frame, void *cookie,                          fd_ctx->opened_on[child_index] = 1;                          fd_ctx->flags                  = local->cont.open.flags;                          fd_ctx->wbflags                = local->cont.open.wbflags; -		} -	} +                } +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { -		if ((local->cont.open.flags & O_TRUNC) -		    && (local->op_ret >= 0)) { -			STACK_WIND (frame, afr_open_ftruncate_cbk, -				    this, this->fops->ftruncate, -				    fd, 0); -		} else { +        if (call_count == 0) { +                if ((local->cont.open.flags & O_TRUNC) +                    && (local->op_ret >= 0)) { +                        STACK_WIND (frame, afr_open_ftruncate_cbk, +                                    this, this->fops->ftruncate, +                                    fd, 0); +                } else {                          AFR_STACK_UNWIND (open, frame, local->op_ret,                                            local->op_errno, local->fd); -		} -	} +                } +        } -	return 0; +        return 0;  } @@ -151,67 +151,67 @@ int  afr_open (call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,            fd_t *fd, int32_t wbflags)  { -	afr_private_t * priv  = NULL; -	afr_local_t *   local = NULL; +        afr_private_t * priv  = NULL; +        afr_local_t *   local = NULL; -	int     i = 0; -	int   ret = -1; +        int     i = 0; +        int   ret = -1; -	int32_t call_count = 0;	 -	int32_t op_ret   = -1; -	int32_t op_errno = 0; -	int32_t wind_flags = flags & (~O_TRUNC); +        int32_t call_count = 0; +        int32_t op_ret   = -1; +        int32_t op_errno = 0; +        int32_t wind_flags = flags & (~O_TRUNC); -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); -	VALIDATE_OR_GOTO (loc, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (loc, out); -	priv = this->private; +        priv = this->private;          if (afr_is_split_brain (this, loc->inode)) { -		/* self-heal failed */ -		op_errno = EIO; -		goto out; -	} +                /* self-heal failed */ +                op_errno = EIO; +                goto out; +        } -	ALLOC_OR_GOTO (local, afr_local_t, out); +        ALLOC_OR_GOTO (local, afr_local_t, out); -	ret = AFR_LOCAL_INIT (local, priv); -	if (ret < 0) { -		op_errno = -ret; -		goto out; -	} +        ret = AFR_LOCAL_INIT (local, priv); +        if (ret < 0) { +                op_errno = -ret; +                goto out; +        } -	frame->local = local; -	call_count   = local->call_count; +        frame->local = local; +        call_count   = local->call_count;          loc_copy (&local->loc, loc); -	local->cont.open.flags   = flags; +        local->cont.open.flags   = flags;          local->cont.open.wbflags = wbflags; -	local->fd = fd_ref (fd); +        local->fd = fd_ref (fd); -	for (i = 0; i < priv->child_count; i++) { -		if (local->child_up[i]) { -			STACK_WIND_COOKIE (frame, afr_open_cbk, (void *) (long) i, -					   priv->children[i], -					   priv->children[i]->fops->open, -					   loc, wind_flags, fd, wbflags); +        for (i = 0; i < priv->child_count; i++) { +                if (local->child_up[i]) { +                        STACK_WIND_COOKIE (frame, afr_open_cbk, (void *) (long) i, +                                           priv->children[i], +                                           priv->children[i]->fops->open, +                                           loc, wind_flags, fd, wbflags); -			if (!--call_count) -				break; -		} -	} +                        if (!--call_count) +                                break; +                } +        } -	op_ret = 0; +        op_ret = 0;  out: -	if (op_ret == -1) { -		AFR_STACK_UNWIND (open, frame, op_ret, op_errno, fd); -	} +        if (op_ret == -1) { +                AFR_STACK_UNWIND (open, frame, op_ret, op_errno, fd); +        } -	return 0; +        return 0;  } @@ -447,7 +447,7 @@ int  afr_openfd_flush_done (call_frame_t *frame, xlator_t *this)  {          afr_private_t *priv = NULL; -	afr_local_t *local  = NULL; +        afr_local_t *local  = NULL;          uint64_t       ctx;          afr_fd_ctx_t * fd_ctx = NULL; @@ -455,7 +455,7 @@ afr_openfd_flush_done (call_frame_t *frame, xlator_t *this)          int _ret = -1;          priv  = this->private; -	local = frame->local; +        local = frame->local;          LOCK (&local->fd->lock);          { @@ -481,7 +481,7 @@ out:          fd_unref (local->fd);          local->openfd_flush_cbk (frame, this); -	return 0; +        return 0;  } @@ -489,11 +489,11 @@ out:  int  afr_openfd_xaction (call_frame_t *frame, xlator_t *this, fd_t *fd)  { -	afr_local_t   * local = NULL; +        afr_local_t   * local = NULL; -	VALIDATE_OR_GOTO (frame, out); -	VALIDATE_OR_GOTO (this, out); -	VALIDATE_OR_GOTO (this->private, out); +        VALIDATE_OR_GOTO (frame, out); +        VALIDATE_OR_GOTO (this, out); +        VALIDATE_OR_GOTO (this->private, out);          local = frame->local; @@ -512,7 +512,7 @@ afr_openfd_xaction (call_frame_t *frame, xlator_t *this, fd_t *fd)          afr_transaction (frame, this, AFR_DATA_TRANSACTION);  out: -	return 0; +        return 0;  } diff --git a/xlators/cluster/afr/src/afr-self-heal-algorithm.c b/xlators/cluster/afr/src/afr-self-heal-algorithm.c index f72da7741..4bb70915e 100644 --- a/xlators/cluster/afr/src/afr-self-heal-algorithm.c +++ b/xlators/cluster/afr/src/afr-self-heal-algorithm.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */ @@ -108,8 +108,8 @@ sh_full_loop_return (call_frame_t *rw_frame, xlator_t *this, off_t offset)          afr_self_heal_t *           rw_sh      = NULL;          call_frame_t *sh_frame              = NULL; -	afr_local_t * sh_local              = NULL; -	afr_self_heal_t *sh                 = NULL; +        afr_local_t * sh_local              = NULL; +        afr_self_heal_t *sh                 = NULL;          afr_sh_algo_full_private_t *sh_priv = NULL;          rw_local = rw_frame->local; @@ -133,52 +133,52 @@ sh_full_write_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                     struct iatt *postbuf)  { -	afr_private_t * priv    = NULL; -	afr_local_t * rw_local  = NULL; -	afr_self_heal_t *rw_sh  = NULL; +        afr_private_t * priv    = NULL; +        afr_local_t * rw_local  = NULL; +        afr_self_heal_t *rw_sh  = NULL;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL; -	int child_index = (long) cookie; -	int call_count = 0; +        int child_index = (long) cookie; +        int call_count = 0; -	priv = this->private; +        priv = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local;          sh       = &sh_local->self_heal; -	gf_log (this->name, GF_LOG_TRACE, -		"wrote %d bytes of data from %s to child %d, offset %"PRId64"", -		op_ret, sh_local->loc.path, child_index, +        gf_log (this->name, GF_LOG_TRACE, +                "wrote %d bytes of data from %s to child %d, offset %"PRId64"", +                op_ret, sh_local->loc.path, child_index,                  rw_sh->offset - op_ret); -	LOCK (&sh_frame->lock); -	{ -		if (op_ret == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"write to %s failed on subvolume %s (%s)", -				sh_local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); - -			sh->op_failed = 1; -		} -	} -	UNLOCK (&sh_frame->lock); +        LOCK (&sh_frame->lock); +        { +                if (op_ret == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "write to %s failed on subvolume %s (%s)", +                                sh_local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); + +                        sh->op_failed = 1; +                } +        } +        UNLOCK (&sh_frame->lock); -	call_count = afr_frame_return (rw_frame); +        call_count = afr_frame_return (rw_frame); -	if (call_count == 0) { -		sh_full_loop_return (rw_frame, this, rw_sh->offset - op_ret); -	} +        if (call_count == 0) { +                sh_full_loop_return (rw_frame, this, rw_sh->offset - op_ret); +        } -	return 0; +        return 0;  } @@ -188,91 +188,91 @@ sh_full_read_cbk (call_frame_t *rw_frame, void *cookie,                    struct iovec *vector, int32_t count, struct iatt *buf,                    struct iobref *iobref)  { -	afr_private_t * priv    = NULL; -	afr_local_t * rw_local  = NULL; -	afr_self_heal_t *rw_sh  = NULL; +        afr_private_t * priv    = NULL; +        afr_local_t * rw_local  = NULL; +        afr_self_heal_t *rw_sh  = NULL;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL; -	int i = 0; -	int call_count = 0; +        int i = 0; +        int call_count = 0; -	off_t offset = (long) cookie; +        off_t offset = (long) cookie; -	priv = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        priv = this->private; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local;          sh       = &sh_local->self_heal; -	call_count = sh->active_sinks; +        call_count = sh->active_sinks;          rw_local->call_count = call_count; -	gf_log (this->name, GF_LOG_TRACE, -		"read %d bytes of data from %s, offset %"PRId64"", -		op_ret, sh_local->loc.path, offset); +        gf_log (this->name, GF_LOG_TRACE, +                "read %d bytes of data from %s, offset %"PRId64"", +                op_ret, sh_local->loc.path, offset); -	if (op_ret <= 0) { +        if (op_ret <= 0) {                  sh->op_failed = 1;                  sh_full_loop_return (rw_frame, this, offset); -		return 0; -	} +                return 0; +        } -	rw_sh->offset += op_ret; +        rw_sh->offset += op_ret; -	if (sh->file_has_holes) { -		if (iov_0filled (vector, count) == 0) { -			/* the iter function depends on the -			   sh->offset already being updated -			   above -			*/ +        if (sh->file_has_holes) { +                if (iov_0filled (vector, count) == 0) { +                        /* the iter function depends on the +                           sh->offset already being updated +                           above +                        */                          sh_full_loop_return (rw_frame, this, offset); -			goto out; -		} -	} +                        goto out; +                } +        } -	for (i = 0; i < priv->child_count; i++) { -		if (sh->sources[i] || !sh_local->child_up[i]) -			continue; +        for (i = 0; i < priv->child_count; i++) { +                if (sh->sources[i] || !sh_local->child_up[i]) +                        continue; -		/* this is a sink, so write to it */ +                /* this is a sink, so write to it */ -		STACK_WIND_COOKIE (rw_frame, sh_full_write_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->writev, -				   sh->healing_fd, vector, count, offset, +                STACK_WIND_COOKIE (rw_frame, sh_full_write_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->writev, +                                   sh->healing_fd, vector, count, offset,                                     iobref); -		if (!--call_count) -			break; -	} +                if (!--call_count) +                        break; +        }  out: -	return 0; +        return 0;  }  static int  sh_full_read_write (call_frame_t *frame, xlator_t *this, off_t offset)  { -	afr_private_t * priv    = NULL; -	afr_local_t * local     = NULL; -	afr_local_t * rw_local  = NULL; -	afr_self_heal_t *rw_sh  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_private_t * priv    = NULL; +        afr_local_t * local     = NULL; +        afr_local_t * rw_local  = NULL; +        afr_self_heal_t *rw_sh  = NULL; +        afr_self_heal_t *sh     = NULL;          call_frame_t *rw_frame = NULL;          int32_t op_errno = 0; -	priv  = this->private; +        priv  = this->private;          local = frame->local;          sh    = &local->self_heal; @@ -283,17 +283,17 @@ sh_full_read_write (call_frame_t *frame, xlator_t *this, off_t offset)          ALLOC_OR_GOTO (rw_local, afr_local_t, out);          rw_frame->local = rw_local; -	rw_sh           = &rw_local->self_heal; +        rw_sh           = &rw_local->self_heal;          rw_sh->offset       = offset;          rw_sh->sh_frame     = frame; -	STACK_WIND_COOKIE (rw_frame, sh_full_read_cbk, -			   (void *) (long) offset, -			   priv->children[sh->source], -			   priv->children[sh->source]->fops->readv, -			   sh->healing_fd, sh->block_size, -			   offset); +        STACK_WIND_COOKIE (rw_frame, sh_full_read_cbk, +                           (void *) (long) offset, +                           priv->children[sh->source], +                           priv->children[sh->source]->fops->readv, +                           sh->healing_fd, sh->block_size, +                           offset);          return 0;  out: @@ -301,16 +301,16 @@ out:          sh_full_loop_driver (frame, this, _gf_false); -	return 0; +        return 0;  }  static int  sh_full_loop_driver (call_frame_t *frame, xlator_t *this, gf_boolean_t is_first_call)  { -	afr_private_t * priv = NULL; -	afr_local_t * local  = NULL; -	afr_self_heal_t *sh  = NULL; +        afr_private_t * priv = NULL; +        afr_local_t * local  = NULL; +        afr_self_heal_t *sh  = NULL;          afr_sh_algo_full_private_t *sh_priv = NULL;          gf_boolean_t    is_driver_done = _gf_false;          blksize_t       block_size = 0; @@ -318,9 +318,9 @@ sh_full_loop_driver (call_frame_t *frame, xlator_t *this, gf_boolean_t is_first_          int   loop    = 0; -	priv    = this->private; -	local   = frame->local; -	sh      = &local->self_heal; +        priv    = this->private; +        local   = frame->local; +        sh      = &local->self_heal;          sh_priv = sh->private;          LOCK (&sh_priv->lock); @@ -330,8 +330,8 @@ sh_full_loop_driver (call_frame_t *frame, xlator_t *this, gf_boolean_t is_first_                  offset           = sh_priv->offset;                  block_size       = sh->block_size;                  while ((sh->op_failed == 0) && -                    (sh_priv->loops_running < priv->data_self_heal_window_size) -                    && (sh_priv->offset < sh->file_size)) { +                       (sh_priv->loops_running < priv->data_self_heal_window_size) +                       && (sh_priv->offset < sh->file_size)) {                          loop++;                          gf_log (this->name, GF_LOG_TRACE, @@ -365,7 +365,7 @@ sh_full_loop_driver (call_frame_t *frame, xlator_t *this, gf_boolean_t is_first_                  sh_full_loop_driver_done (frame, this);          } -	return 0; +        return 0;  } @@ -545,8 +545,8 @@ sh_diff_loop_return (call_frame_t *rw_frame, xlator_t *this,          afr_self_heal_t *           rw_sh      = NULL;          call_frame_t *sh_frame              = NULL; -	afr_local_t * sh_local              = NULL; -	afr_self_heal_t *sh                 = NULL; +        afr_local_t * sh_local              = NULL; +        afr_self_heal_t *sh                 = NULL;          afr_sh_algo_diff_private_t *sh_priv = NULL;          priv  = this->private; @@ -575,24 +575,24 @@ sh_diff_write_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,                     int32_t op_ret, int32_t op_errno, struct iatt *buf,                     struct iatt *postbuf)  { -	afr_private_t *   priv     = NULL; -	afr_local_t *     rw_local = NULL; -	afr_self_heal_t * rw_sh    = NULL; +        afr_private_t *   priv     = NULL; +        afr_local_t *     rw_local = NULL; +        afr_self_heal_t * rw_sh    = NULL;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL;          afr_sh_algo_diff_private_t *sh_priv;          struct sh_diff_loop_state *loop_state; -	int call_count  = 0; +        int call_count  = 0;          int child_index = 0;          int loop_index  = 0; -	priv     = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        priv     = this->private; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local; @@ -603,32 +603,32 @@ sh_diff_write_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,          loop_index  = __loop_index ((uint32_t) (long) cookie);          loop_state  = sh_priv->loops[loop_index]; -	gf_log (this->name, GF_LOG_TRACE, -		"wrote %d bytes of data from %s to child %d, offset %"PRId64"", -		op_ret, sh_local->loc.path, child_index, +        gf_log (this->name, GF_LOG_TRACE, +                "wrote %d bytes of data from %s to child %d, offset %"PRId64"", +                op_ret, sh_local->loc.path, child_index,                  loop_state->offset); -	LOCK (&sh_frame->lock); -	{ -		if (op_ret == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"write to %s failed on subvolume %s (%s)", -				sh_local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); - -			sh->op_failed = 1; -		} -	} -	UNLOCK (&sh_frame->lock); +        LOCK (&sh_frame->lock); +        { +                if (op_ret == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "write to %s failed on subvolume %s (%s)", +                                sh_local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); + +                        sh->op_failed = 1; +                } +        } +        UNLOCK (&sh_frame->lock); -	call_count = afr_frame_return (rw_frame); +        call_count = afr_frame_return (rw_frame); -	if (call_count == 0) { -		sh_diff_loop_return (rw_frame, this, loop_state); -	} +        if (call_count == 0) { +                sh_diff_loop_return (rw_frame, this, loop_state); +        } -	return 0; +        return 0;  } @@ -638,27 +638,27 @@ sh_diff_read_cbk (call_frame_t *rw_frame, void *cookie,                    struct iovec *vector, int32_t count, struct iatt *buf,                    struct iobref *iobref)  { -	afr_private_t *   priv     = NULL; -	afr_local_t *     rw_local = NULL; -	afr_self_heal_t * rw_sh    = NULL; +        afr_private_t *   priv     = NULL; +        afr_local_t *     rw_local = NULL; +        afr_self_heal_t * rw_sh    = NULL;          afr_sh_algo_diff_private_t * sh_priv = NULL;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL;          int loop_index;          struct sh_diff_loop_state *loop_state;          uint32_t wcookie; -	int i = 0; -	int call_count = 0; +        int i = 0; +        int call_count = 0; -	priv     = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        priv     = this->private; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local; @@ -668,31 +668,31 @@ sh_diff_read_cbk (call_frame_t *rw_frame, void *cookie,          loop_index = __loop_index ((uint32_t) (long) cookie);          loop_state = sh_priv->loops[loop_index]; -	call_count = sh_diff_number_of_writes_needed (loop_state->write_needed, +        call_count = sh_diff_number_of_writes_needed (loop_state->write_needed,                                                        priv->child_count); -	rw_local->call_count = call_count; +        rw_local->call_count = call_count; -	gf_log (this->name, GF_LOG_TRACE, -		"read %d bytes of data from %s, offset %"PRId64"", -		op_ret, sh_local->loc.path, loop_state->offset); +        gf_log (this->name, GF_LOG_TRACE, +                "read %d bytes of data from %s, offset %"PRId64"", +                op_ret, sh_local->loc.path, loop_state->offset); -	if ((op_ret <= 0) || +        if ((op_ret <= 0) ||              (call_count == 0)) {                  sh_diff_loop_return (rw_frame, this, loop_state); -		return 0; -	} +                return 0; +        } -	if (sh->file_has_holes) { -		if (iov_0filled (vector, count) == 0) { +        if (sh->file_has_holes) { +                if (iov_0filled (vector, count) == 0) {                          sh_diff_loop_return (rw_frame, this, loop_state); -			goto out; -		} -	} +                        goto out; +                } +        } -	for (i = 0; i < priv->child_count; i++) { +        for (i = 0; i < priv->child_count; i++) {                  if (loop_state->write_needed[i]) {                          wcookie = __make_cookie (loop_index, i); @@ -709,7 +709,7 @@ sh_diff_read_cbk (call_frame_t *rw_frame, void *cookie,          }  out: -	return 0; +        return 0;  } @@ -717,22 +717,22 @@ static int  sh_diff_read (call_frame_t *rw_frame, xlator_t *this,                int loop_index)  { -	afr_private_t *   priv     = NULL; -	afr_local_t *     rw_local = NULL; -	afr_self_heal_t * rw_sh    = NULL; +        afr_private_t *   priv     = NULL; +        afr_local_t *     rw_local = NULL; +        afr_self_heal_t * rw_sh    = NULL;          afr_sh_algo_diff_private_t * sh_priv = NULL;          struct sh_diff_loop_state *loop_state;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL;          uint32_t cookie; -	priv     = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        priv     = this->private; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local; @@ -743,14 +743,14 @@ sh_diff_read (call_frame_t *rw_frame, xlator_t *this,          cookie = __make_cookie (loop_index, sh->source); -	STACK_WIND_COOKIE (rw_frame, sh_diff_read_cbk, -			   (void *) (long) cookie, -			   priv->children[sh->source], -			   priv->children[sh->source]->fops->readv, -			   sh->healing_fd, sh_priv->block_size, -			   loop_state->offset); +        STACK_WIND_COOKIE (rw_frame, sh_diff_read_cbk, +                           (void *) (long) cookie, +                           priv->children[sh->source], +                           priv->children[sh->source]->fops->readv, +                           sh->healing_fd, sh_priv->block_size, +                           loop_state->offset); -	return 0; +        return 0;  } @@ -759,13 +759,13 @@ sh_diff_checksum_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,                        int32_t op_ret, int32_t op_errno,                        uint32_t weak_checksum, uint8_t *strong_checksum)  { -	afr_private_t * priv    = NULL; -	afr_local_t * rw_local  = NULL; -	afr_self_heal_t *rw_sh  = NULL; +        afr_private_t * priv    = NULL; +        afr_local_t * rw_local  = NULL; +        afr_self_heal_t *rw_sh  = NULL;          call_frame_t *sh_frame  = NULL; -	afr_local_t * sh_local  = NULL; -	afr_self_heal_t *sh     = NULL; +        afr_local_t * sh_local  = NULL; +        afr_self_heal_t *sh     = NULL;          afr_sh_algo_diff_private_t * sh_priv = NULL; @@ -777,10 +777,10 @@ sh_diff_checksum_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,          int i            = 0;          int write_needed = 0; -	priv  = this->private; +        priv  = this->private; -	rw_local = rw_frame->local; -	rw_sh    = &rw_local->self_heal; +        rw_local = rw_frame->local; +        rw_sh    = &rw_local->self_heal;          sh_frame = rw_sh->sh_frame;          sh_local = sh_frame->local; @@ -817,8 +817,8 @@ sh_diff_checksum_cbk (call_frame_t *rw_frame, void *cookie, xlator_t *this,                                      loop_state->checksum + (sh->source * MD5_DIGEST_LEN),                                      MD5_DIGEST_LEN)) {                                  /* -                                   Checksums differ, so this block -                                   must be written to this sink +                                  Checksums differ, so this block +                                  must be written to this sink                                  */                                  gf_log (this->name, GF_LOG_TRACE, @@ -880,11 +880,11 @@ sh_diff_find_unused_loop (afr_sh_algo_diff_private_t *sh_priv, int max)  static int  sh_diff_checksum (call_frame_t *frame, xlator_t *this, off_t offset)  { -	afr_private_t *   priv     = NULL; -	afr_local_t *     local    = NULL; -	afr_local_t *     rw_local = NULL; -	afr_self_heal_t * sh       = NULL; -	afr_self_heal_t * rw_sh    = NULL; +        afr_private_t *   priv     = NULL; +        afr_local_t *     local    = NULL; +        afr_local_t *     rw_local = NULL; +        afr_self_heal_t * sh       = NULL; +        afr_self_heal_t * rw_sh    = NULL;          afr_sh_algo_diff_private_t * sh_priv = NULL; @@ -899,9 +899,9 @@ sh_diff_checksum (call_frame_t *frame, xlator_t *this, off_t offset)          int call_count = 0;          int i          = 0; -	priv    = this->private; -	local   = frame->local; -	sh      = &local->self_heal; +        priv    = this->private; +        local   = frame->local; +        sh      = &local->self_heal;          sh_priv = sh->private; @@ -912,7 +912,7 @@ sh_diff_checksum (call_frame_t *frame, xlator_t *this, off_t offset)          ALLOC_OR_GOTO (rw_local, afr_local_t, out);          rw_frame->local = rw_local; -	rw_sh           = &rw_local->self_heal; +        rw_sh           = &rw_local->self_heal;          rw_sh->offset       = sh->offset;          rw_sh->sh_frame     = frame; @@ -971,9 +971,9 @@ sh_diff_loop_driver (call_frame_t *frame, xlator_t *this,                       gf_boolean_t is_first_call,                       struct sh_diff_loop_state *loop_state)  { -	afr_private_t *   priv  = NULL; -	afr_local_t *     local = NULL; -	afr_self_heal_t * sh    = NULL; +        afr_private_t *   priv  = NULL; +        afr_local_t *     local = NULL; +        afr_self_heal_t * sh    = NULL;          afr_sh_algo_diff_private_t *sh_priv = NULL;          gf_boolean_t      is_driver_done = _gf_false;          blksize_t         block_size = 0; @@ -983,9 +983,9 @@ sh_diff_loop_driver (call_frame_t *frame, xlator_t *this,          off_t offset = 0;          char  sh_type_str[256] = {0,}; -	priv    = this->private; -	local   = frame->local; -	sh      = &local->self_heal; +        priv    = this->private; +        local   = frame->local; +        sh      = &local->self_heal;          sh_priv = sh->private;          afr_self_heal_type_str_get(sh, sh_type_str, sizeof(sh_type_str)); @@ -999,8 +999,8 @@ sh_diff_loop_driver (call_frame_t *frame, xlator_t *this,                  offset = sh_priv->offset;                  block_size = sh_priv->block_size;                  while ((0 == sh->op_failed) && -                    (sh_priv->loops_running < priv->data_self_heal_window_size) -                    && (sh_priv->offset < sh->file_size)) { +                       (sh_priv->loops_running < priv->data_self_heal_window_size) +                       && (sh_priv->offset < sh->file_size)) {                          loop++;                          gf_log (this->name, GF_LOG_TRACE, diff --git a/xlators/cluster/afr/src/afr-self-heal-data.c b/xlators/cluster/afr/src/afr-self-heal-data.c index 0fd8dae69..ca7dd92d8 100644 --- a/xlators/cluster/afr/src/afr-self-heal-data.c +++ b/xlators/cluster/afr/src/afr-self-heal-data.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */  #include <libgen.h> @@ -53,75 +53,75 @@  int  afr_sh_data_done (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	/*  -	   TODO: cleanup sh->*  -	 */ +        /* +          TODO: cleanup sh->* +        */          if (sh->healing_fd && !sh->healing_fd_opened) {                  /* unref only if we created the fd ourselves */ -		fd_unref (sh->healing_fd); -		sh->healing_fd = NULL; +                fd_unref (sh->healing_fd); +                sh->healing_fd = NULL;          }  /*         for (i = 0; i < priv->child_count; i++) */  /*                 sh->locked_nodes[i] = 0; */ -	gf_log (this->name, GF_LOG_TRACE, -		"self heal of %s completed", -		local->loc.path); +        gf_log (this->name, GF_LOG_TRACE, +                "self heal of %s completed", +                local->loc.path); -	sh->completion_cbk (frame, this); +        sh->completion_cbk (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int32_t op_ret, int32_t op_errno) +                       int32_t op_ret, int32_t op_errno)  { -	afr_local_t     *local = NULL; -	afr_private_t   *priv  = NULL; -	int              call_count = 0; +        afr_local_t     *local = NULL; +        afr_private_t   *priv  = NULL; +        int              call_count = 0;          int child_index = (long) cookie; -	local = frame->local; -	priv = this->private; +        local = frame->local; +        priv = this->private; -	LOCK (&frame->lock); -	{ +        LOCK (&frame->lock); +        {                  if (op_ret == -1) {                          gf_log (this->name, GF_LOG_DEBUG,                                  "flush or setattr failed on %s on subvolume %s: %s",                                  local->loc.path, priv->children[child_index]->name,                                  strerror (op_errno));                  } -	} -	UNLOCK (&frame->lock); +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { -		afr_sh_data_done (frame, this); -	} +        if (call_count == 0) { +                afr_sh_data_done (frame, this); +        } -	return 0; +        return 0;  }  int  afr_sh_data_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                        int32_t op_ret, int32_t op_errno, struct iatt *statpre, struct iatt *statpost) +                         int32_t op_ret, int32_t op_errno, struct iatt *statpre, struct iatt *statpost)  {          afr_sh_data_flush_cbk (frame, cookie, this, op_ret, op_errno); @@ -132,12 +132,12 @@ afr_sh_data_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  afr_sh_data_close (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_private_t   *priv  = NULL; -	afr_self_heal_t *sh    = NULL; +        afr_local_t     *local = NULL; +        afr_private_t   *priv  = NULL; +        afr_self_heal_t *sh    = NULL; -	int  i            = 0; -	int  call_count   = 0; +        int  i            = 0; +        int  call_count   = 0;          int  source       = 0;          int32_t valid     = 0; @@ -151,10 +151,10 @@ afr_sh_data_close (call_frame_t *frame, xlator_t *this)          valid |= (GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME); -	stbuf.ia_atime = sh->buf[source].ia_atime; -	stbuf.ia_atime_nsec = sh->buf[source].ia_atime_nsec; -	stbuf.ia_mtime = sh->buf[source].ia_mtime; -	stbuf.ia_mtime_nsec = sh->buf[source].ia_mtime_nsec; +        stbuf.ia_atime = sh->buf[source].ia_atime; +        stbuf.ia_atime_nsec = sh->buf[source].ia_atime_nsec; +        stbuf.ia_mtime = sh->buf[source].ia_mtime; +        stbuf.ia_mtime_nsec = sh->buf[source].ia_mtime_nsec;          if (sh->healing_fd_opened) {                  /* not our job to close the fd */ @@ -163,25 +163,25 @@ afr_sh_data_close (call_frame_t *frame, xlator_t *this)                  return 0;          } -	if (!sh->healing_fd) { -		afr_sh_data_done (frame, this); -		return 0; -	} +        if (!sh->healing_fd) { +                afr_sh_data_done (frame, this); +                return 0; +        } -	call_count        = (sh->active_sinks + 1) * 2; -	local->call_count = call_count; +        call_count        = (sh->active_sinks + 1) * 2; +        local->call_count = call_count; -	/* closed source */ -	gf_log (this->name, GF_LOG_TRACE, -		"closing fd of %s on %s", -		local->loc.path, priv->children[sh->source]->name); +        /* closed source */ +        gf_log (this->name, GF_LOG_TRACE, +                "closing fd of %s on %s", +                local->loc.path, priv->children[sh->source]->name); -	STACK_WIND_COOKIE (frame, afr_sh_data_flush_cbk, -			   (void *) (long) sh->source, -			   priv->children[sh->source], -			   priv->children[sh->source]->fops->flush, -			   sh->healing_fd); -	call_count--; +        STACK_WIND_COOKIE (frame, afr_sh_data_flush_cbk, +                           (void *) (long) sh->source, +                           priv->children[sh->source], +                           priv->children[sh->source]->fops->flush, +                           sh->healing_fd); +        call_count--;          STACK_WIND_COOKIE (frame, afr_sh_data_setattr_cbk,                             (void *) (long) sh->source, @@ -194,69 +194,69 @@ afr_sh_data_close (call_frame_t *frame, xlator_t *this)          if (call_count == 0)                  return 0; -	for (i = 0; i < priv->child_count; i++) { -		if (sh->sources[i] || !local->child_up[i]) -			continue; +        for (i = 0; i < priv->child_count; i++) { +                if (sh->sources[i] || !local->child_up[i]) +                        continue; -		gf_log (this->name, GF_LOG_TRACE, -			"closing fd of %s on %s", -			local->loc.path, priv->children[i]->name); +                gf_log (this->name, GF_LOG_TRACE, +                        "closing fd of %s on %s", +                        local->loc.path, priv->children[i]->name); -		STACK_WIND_COOKIE (frame, afr_sh_data_flush_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->flush, -				   sh->healing_fd); +                STACK_WIND_COOKIE (frame, afr_sh_data_flush_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->flush, +                                   sh->healing_fd);                  call_count--;                  STACK_WIND_COOKIE (frame, afr_sh_data_setattr_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->setattr, -				   &local->loc, &stbuf, valid); +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->setattr, +                                   &local->loc, &stbuf, valid); -		if (!--call_count) -			break; -	} +                if (!--call_count) +                        break; +        } -	return 0; +        return 0;  }  int  afr_sh_data_unlck_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int32_t op_ret, int32_t op_errno) +                       int32_t op_ret, int32_t op_errno)  { -	afr_local_t * local = NULL; -	int           call_count = 0; -	int           child_index = (long) cookie; - -	 -	local = frame->local; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"locking inode of %s on child %d failed: %s", -				local->loc.path, child_index, -				strerror (op_errno)); -		} else { -			gf_log (this->name, GF_LOG_TRACE, -				"inode of %s on child %d locked", -				local->loc.path, child_index); -		} -	} -	UNLOCK (&frame->lock); - -	call_count = afr_frame_return (frame); - -	if (call_count == 0) { -		afr_sh_data_close (frame, this); -	} - -	return 0; +        afr_local_t * local = NULL; +        int           call_count = 0; +        int           child_index = (long) cookie; + + +        local = frame->local; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "locking inode of %s on child %d failed: %s", +                                local->loc.path, child_index, +                                strerror (op_errno)); +                } else { +                        gf_log (this->name, GF_LOG_TRACE, +                                "inode of %s on child %d locked", +                                local->loc.path, child_index); +                } +        } +        UNLOCK (&frame->lock); + +        call_count = afr_frame_return (frame); + +        if (call_count == 0) { +                afr_sh_data_close (frame, this); +        } + +        return 0;  } @@ -265,197 +265,197 @@ afr_sh_data_unlock (call_frame_t *frame, xlator_t *this)  {          afr_local_t         *local    = NULL;          afr_internal_lock_t *int_lock = NULL; -	afr_self_heal_t     *sh       = NULL; +        afr_self_heal_t     *sh       = NULL;          local    = frame->local;          int_lock = &local->internal_lock; -	sh       = &local->self_heal; +        sh       = &local->self_heal;          GF_ASSERT (!sh->data_lock_held);          int_lock->lock_cbk = afr_sh_data_close;          afr_unlock (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_finish (call_frame_t *frame, xlator_t *this)  { -	afr_local_t   *local = NULL; -	afr_self_heal_t *sh = NULL; +        afr_local_t   *local = NULL; +        afr_self_heal_t *sh = NULL; -	local = frame->local; -	sh = &local->self_heal; +        local = frame->local; +        sh = &local->self_heal; -	gf_log (this->name, GF_LOG_TRACE, -		"finishing data selfheal of %s", local->loc.path); +        gf_log (this->name, GF_LOG_TRACE, +                "finishing data selfheal of %s", local->loc.path);          if (!sh->data_lock_held)                  afr_sh_data_unlock (frame, this);          else                  afr_sh_data_close (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_erase_pending_cbk (call_frame_t *frame, void *cookie, -			       xlator_t *this, int32_t op_ret, -			       int32_t op_errno, dict_t *xattr) +                               xlator_t *this, int32_t op_ret, +                               int32_t op_errno, dict_t *xattr)  { -	int             call_count = 0; +        int             call_count = 0; -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) -		afr_sh_data_finish (frame, this); +        if (call_count == 0) +                afr_sh_data_finish (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_erase_pending (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              call_count = 0; -	int              i = 0; -	dict_t          **erase_xattr = NULL; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              call_count = 0; +        int              i = 0; +        dict_t          **erase_xattr = NULL; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	afr_sh_pending_to_delta (priv, sh->xattr, sh->delta_matrix, sh->success, +        afr_sh_pending_to_delta (priv, sh->xattr, sh->delta_matrix, sh->success,                                   priv->child_count, AFR_DATA_TRANSACTION); -	erase_xattr = GF_CALLOC (sizeof (*erase_xattr), priv->child_count, -                              gf_afr_mt_dict_t); - -	for (i = 0; i < priv->child_count; i++) { -		if (sh->xattr[i]) { -			call_count++; - -			erase_xattr[i] = get_new_dict(); -			dict_ref (erase_xattr[i]); -		} -	} - -	afr_sh_delta_to_xattr (priv, sh->delta_matrix, erase_xattr, -			       priv->child_count, AFR_DATA_TRANSACTION); - -	local->call_count = call_count; -	for (i = 0; i < priv->child_count; i++) { -		if (!erase_xattr[i]) -			continue; - -		gf_log (this->name, GF_LOG_TRACE, -			"erasing pending flags from %s on %s", -			local->loc.path, priv->children[i]->name); - -		STACK_WIND_COOKIE (frame, afr_sh_data_erase_pending_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->fxattrop, -				   sh->healing_fd, -				   GF_XATTROP_ADD_ARRAY, erase_xattr[i]); -		if (!--call_count) -			break; -	} - -	for (i = 0; i < priv->child_count; i++) { -		if (erase_xattr[i]) { -			dict_unref (erase_xattr[i]); -		} -	} -	GF_FREE (erase_xattr); - -	return 0; +        erase_xattr = GF_CALLOC (sizeof (*erase_xattr), priv->child_count, +                                 gf_afr_mt_dict_t); + +        for (i = 0; i < priv->child_count; i++) { +                if (sh->xattr[i]) { +                        call_count++; + +                        erase_xattr[i] = get_new_dict(); +                        dict_ref (erase_xattr[i]); +                } +        } + +        afr_sh_delta_to_xattr (priv, sh->delta_matrix, erase_xattr, +                               priv->child_count, AFR_DATA_TRANSACTION); + +        local->call_count = call_count; +        for (i = 0; i < priv->child_count; i++) { +                if (!erase_xattr[i]) +                        continue; + +                gf_log (this->name, GF_LOG_TRACE, +                        "erasing pending flags from %s on %s", +                        local->loc.path, priv->children[i]->name); + +                STACK_WIND_COOKIE (frame, afr_sh_data_erase_pending_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->fxattrop, +                                   sh->healing_fd, +                                   GF_XATTROP_ADD_ARRAY, erase_xattr[i]); +                if (!--call_count) +                        break; +        } + +        for (i = 0; i < priv->child_count; i++) { +                if (erase_xattr[i]) { +                        dict_unref (erase_xattr[i]); +                } +        } +        GF_FREE (erase_xattr); + +        return 0;  }  int  afr_sh_data_trim_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		      int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                        struct iatt *postbuf)  { -	afr_private_t * priv = NULL; -	afr_local_t * local  = NULL; -	int              call_count = 0; -	int              child_index = 0; - -	priv = this->private; -	local = frame->local; - -	child_index = (long) cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) -			gf_log (this->name, GF_LOG_DEBUG, -				"ftruncate of %s on subvolume %s failed (%s)", -				local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); -		else -			gf_log (this->name, GF_LOG_TRACE, -				"ftruncate of %s on subvolume %s completed", -				local->loc.path, -				priv->children[child_index]->name); -	} -	UNLOCK (&frame->lock); - -	call_count = afr_frame_return (frame); - -	if (call_count == 0) { -		afr_sh_data_erase_pending (frame, this); -	} - -	return 0; +        afr_private_t * priv = NULL; +        afr_local_t * local  = NULL; +        int              call_count = 0; +        int              child_index = 0; + +        priv = this->private; +        local = frame->local; + +        child_index = (long) cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) +                        gf_log (this->name, GF_LOG_DEBUG, +                                "ftruncate of %s on subvolume %s failed (%s)", +                                local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); +                else +                        gf_log (this->name, GF_LOG_TRACE, +                                "ftruncate of %s on subvolume %s completed", +                                local->loc.path, +                                priv->children[child_index]->name); +        } +        UNLOCK (&frame->lock); + +        call_count = afr_frame_return (frame); + +        if (call_count == 0) { +                afr_sh_data_erase_pending (frame, this); +        } + +        return 0;  }  int  afr_sh_data_trim_sinks (call_frame_t *frame, xlator_t *this)  { -	afr_private_t * priv = NULL; -	afr_local_t * local  = NULL; -	afr_self_heal_t *sh  = NULL; -	int             *sources = NULL; -	int              call_count = 0; -	int              i = 0; +        afr_private_t * priv = NULL; +        afr_local_t * local  = NULL; +        afr_self_heal_t *sh  = NULL; +        int             *sources = NULL; +        int              call_count = 0; +        int              i = 0; -	priv = this->private; -	local = frame->local; -	sh = &local->self_heal; +        priv = this->private; +        local = frame->local; +        sh = &local->self_heal; -	sources = sh->sources; -	call_count = sh->active_sinks; +        sources = sh->sources; +        call_count = sh->active_sinks; -	local->call_count = call_count; +        local->call_count = call_count; -	for (i = 0; i < priv->child_count; i++) { -		if (sources[i] || !local->child_up[i]) -			continue; +        for (i = 0; i < priv->child_count; i++) { +                if (sources[i] || !local->child_up[i]) +                        continue; -		STACK_WIND_COOKIE (frame, afr_sh_data_trim_cbk, -				   (void *) (long) i, -				   priv->children[i],  -				   priv->children[i]->fops->ftruncate, -				   sh->healing_fd, sh->file_size);  +                STACK_WIND_COOKIE (frame, afr_sh_data_trim_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->ftruncate, +                                   sh->healing_fd, sh->file_size); -		if (!--call_count) -			break; -	} +                if (!--call_count) +                        break; +        } -	return 0; +        return 0;  } @@ -540,41 +540,41 @@ afr_sh_data_pick_algo (call_frame_t *frame, xlator_t *this)  int  afr_sh_data_sync_prepare (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              active_sinks = 0; -	int              source = 0; -	int              i = 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              active_sinks = 0; +        int              source = 0; +        int              i = 0;          struct afr_sh_algorithm *sh_algo = NULL; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -	source = sh->source; - -	for (i = 0; i < priv->child_count; i++) { -		if (sh->sources[i] == 0 && local->child_up[i] == 1) { -			active_sinks++; -			sh->success[i] = 1; -		} -	} -	sh->success[source] = 1; - -	if (active_sinks == 0) { -		gf_log (this->name, GF_LOG_TRACE, -			"no active sinks for performing self-heal on file %s", -			local->loc.path); -		afr_sh_data_finish (frame, this); -		return 0; -	} -	sh->active_sinks = active_sinks; - -	gf_log (this->name, GF_LOG_DEBUG, -		"self-healing file %s from subvolume %s to %d other", -		local->loc.path, priv->children[source]->name, active_sinks); +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        source = sh->source; + +        for (i = 0; i < priv->child_count; i++) { +                if (sh->sources[i] == 0 && local->child_up[i] == 1) { +                        active_sinks++; +                        sh->success[i] = 1; +                } +        } +        sh->success[source] = 1; + +        if (active_sinks == 0) { +                gf_log (this->name, GF_LOG_TRACE, +                        "no active sinks for performing self-heal on file %s", +                        local->loc.path); +                afr_sh_data_finish (frame, this); +                return 0; +        } +        sh->active_sinks = active_sinks; + +        gf_log (this->name, GF_LOG_DEBUG, +                "self-healing file %s from subvolume %s to %d other", +                local->loc.path, priv->children[source]->name, active_sinks);          sh->algo_completion_cbk = afr_sh_data_trim_sinks;          sh->algo_abort_cbk      = afr_sh_data_finish; @@ -583,36 +583,36 @@ afr_sh_data_sync_prepare (call_frame_t *frame, xlator_t *this)          sh_algo->fn (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_fix (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local      = NULL; +        afr_local_t     *local      = NULL;          afr_local_t *    orig_local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              nsources = 0; -	int              source = 0; -	int              i = 0; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              nsources = 0; +        int              source = 0; +        int              i = 0; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	afr_sh_build_pending_matrix (priv, sh->pending_matrix, sh->xattr,  -				     priv->child_count, AFR_DATA_TRANSACTION); +        afr_sh_build_pending_matrix (priv, sh->pending_matrix, sh->xattr, +                                     priv->child_count, AFR_DATA_TRANSACTION); -	afr_sh_print_pending_matrix (sh->pending_matrix, this); +        afr_sh_print_pending_matrix (sh->pending_matrix, this); -	nsources = afr_sh_mark_sources (sh, priv->child_count, +        nsources = afr_sh_mark_sources (sh, priv->child_count,                                          AFR_SELF_HEAL_DATA); -	afr_sh_supress_errenous_children (sh->sources, sh->child_errno, -					  priv->child_count); +        afr_sh_supress_errenous_children (sh->sources, sh->child_errno, +                                          priv->child_count);          if (nsources == 0) {                  gf_log (this->name, GF_LOG_TRACE, @@ -623,35 +623,35 @@ afr_sh_data_fix (call_frame_t *frame, xlator_t *this)                  return 0;          } -	if ((nsources == -1) -	    && (priv->favorite_child != -1) -	    && (sh->child_errno[priv->favorite_child] == 0)) { +        if ((nsources == -1) +            && (priv->favorite_child != -1) +            && (sh->child_errno[priv->favorite_child] == 0)) { -		gf_log (this->name, GF_LOG_DEBUG, -			"Picking favorite child %s as authentic source to resolve conflicting data of %s", -			priv->children[priv->favorite_child]->name, -			local->loc.path); +                gf_log (this->name, GF_LOG_DEBUG, +                        "Picking favorite child %s as authentic source to resolve conflicting data of %s", +                        priv->children[priv->favorite_child]->name, +                        local->loc.path); -		sh->sources[priv->favorite_child] = 1; +                sh->sources[priv->favorite_child] = 1; -		nsources = afr_sh_source_count (sh->sources, -						priv->child_count); -	} +                nsources = afr_sh_source_count (sh->sources, +                                                priv->child_count); +        } -	if (nsources == -1) { -		gf_log (this->name, GF_LOG_ERROR, -			"Unable to self-heal contents of '%s' (possible split-brain). " +        if (nsources == -1) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Unable to self-heal contents of '%s' (possible split-brain). "                          "Please delete the file from all but the preferred "                          "subvolume.", local->loc.path); -		local->govinda_gOvinda = 1; +                local->govinda_gOvinda = 1; + +                afr_sh_data_finish (frame, this); +                return 0; +        } -		afr_sh_data_finish (frame, this); -		return 0; -	} +        source = afr_sh_select_source (sh->sources, priv->child_count); -	source = afr_sh_select_source (sh->sources, priv->child_count); -                  if (source == -1) {                  gf_log (this->name, GF_LOG_DEBUG,                          "No active sources found."); @@ -660,33 +660,33 @@ afr_sh_data_fix (call_frame_t *frame, xlator_t *this)                  return 0;          } -	sh->source     = source; -	sh->block_size = 65536; -	sh->file_size  = sh->buf[source].ia_size; +        sh->source     = source; +        sh->block_size = 65536; +        sh->file_size  = sh->buf[source].ia_size; -	if (FILE_HAS_HOLES (&sh->buf[source])) -		sh->file_has_holes = 1; +        if (FILE_HAS_HOLES (&sh->buf[source])) +                sh->file_has_holes = 1;          orig_local = sh->orig_frame->local;          orig_local->cont.lookup.buf.ia_size = sh->buf[source].ia_size; -	/* detect changes not visible through pending flags -- JIC */ -	for (i = 0; i < priv->child_count; i++) { -		if (i == source || sh->child_errno[i]) -			continue; +        /* detect changes not visible through pending flags -- JIC */ +        for (i = 0; i < priv->child_count; i++) { +                if (i == source || sh->child_errno[i]) +                        continue; -		if (SIZE_DIFFERS (&sh->buf[i], &sh->buf[source])) -			sh->sources[i] = 0; -	} +                if (SIZE_DIFFERS (&sh->buf[i], &sh->buf[source])) +                        sh->sources[i] = 0; +        }          afr_set_read_child (this, local->loc.inode, sh->source); -	/* -	   quick-read might have read the file, so send xattr from -	   the source subvolume (http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=815) -	*/ +        /* +          quick-read might have read the file, so send xattr from +          the source subvolume (http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=815) +        */ -	dict_unref (orig_local->cont.lookup.xattr); +        dict_unref (orig_local->cont.lookup.xattr);          if (orig_local->cont.lookup.xattrs)                  orig_local->cont.lookup.xattr = dict_ref (orig_local->cont.lookup.xattrs[sh->source]); @@ -695,43 +695,43 @@ afr_sh_data_fix (call_frame_t *frame, xlator_t *this)                  sh->unwound = _gf_true;          } -	afr_sh_data_sync_prepare (frame, this); +        afr_sh_data_sync_prepare (frame, this); -	return 0; +        return 0;  }  int  afr_self_heal_get_source (xlator_t *this, afr_local_t *local, dict_t **xattr)  { -	afr_self_heal_t *sh   = NULL; -	afr_private_t   *priv = NULL; +        afr_self_heal_t *sh   = NULL; +        afr_private_t   *priv = NULL; -	int              source = 0; -	int              i = 0; +        int              source = 0; +        int              i = 0; -	sh   = &local->self_heal; -	priv = this->private; +        sh   = &local->self_heal; +        priv = this->private; -	sh->pending_matrix = GF_CALLOC (sizeof (int32_t *), priv->child_count, +        sh->pending_matrix = GF_CALLOC (sizeof (int32_t *), priv->child_count,                                          gf_afr_mt_int32_t); -	for (i = 0; i < priv->child_count; i++) { -		sh->pending_matrix[i] = GF_CALLOC (sizeof (int32_t), -						priv->child_count, -                                                gf_afr_mt_int32_t); -	} +        for (i = 0; i < priv->child_count; i++) { +                sh->pending_matrix[i] = GF_CALLOC (sizeof (int32_t), +                                                   priv->child_count, +                                                   gf_afr_mt_int32_t); +        } -	sh->sources = GF_CALLOC (priv->child_count, sizeof (*sh->sources), +        sh->sources = GF_CALLOC (priv->child_count, sizeof (*sh->sources),                                   gf_afr_mt_int32_t); -	afr_sh_build_pending_matrix (priv, sh->pending_matrix, xattr, -				     priv->child_count, AFR_DATA_TRANSACTION); +        afr_sh_build_pending_matrix (priv, sh->pending_matrix, xattr, +                                     priv->child_count, AFR_DATA_TRANSACTION); -	(void)afr_sh_mark_sources (sh, priv->child_count, AFR_SELF_HEAL_DATA); +        (void)afr_sh_mark_sources (sh, priv->child_count, AFR_SELF_HEAL_DATA); -	source = afr_sh_select_source (sh->sources, priv->child_count); +        source = afr_sh_select_source (sh->sources, priv->child_count); -	return source; +        return source;  } @@ -740,73 +740,73 @@ afr_sh_data_fstat_cbk (call_frame_t *frame, void *cookie,                         xlator_t *this, int32_t op_ret, int32_t op_errno,                         struct iatt *buf)  { -	afr_private_t   *priv  = NULL; -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; +        afr_private_t   *priv  = NULL; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; -	int call_count  = -1; -	int child_index = (long) cookie; +        int call_count  = -1; +        int child_index = (long) cookie; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	LOCK (&frame->lock); -	{ -		if (op_ret != -1) { +        LOCK (&frame->lock); +        { +                if (op_ret != -1) {                          gf_log (this->name, GF_LOG_TRACE,                                  "fstat of %s on %s succeeded",                                  local->loc.path,                                  priv->children[child_index]->name); -			sh->buf[child_index] = *buf; -		} -	} -	UNLOCK (&frame->lock); +                        sh->buf[child_index] = *buf; +                } +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { -		afr_sh_data_fix (frame, this); -	} +        if (call_count == 0) { +                afr_sh_data_fix (frame, this); +        } -	return 0; +        return 0;  }  int  afr_sh_data_fstat (call_frame_t *frame, xlator_t *this)  { -	afr_self_heal_t *sh    = NULL;  -	afr_local_t     *local = NULL; -	afr_private_t   *priv  = NULL; +        afr_self_heal_t *sh    = NULL; +        afr_local_t     *local = NULL; +        afr_private_t   *priv  = NULL; -	int call_count = 0; -	int i = 0; +        int call_count = 0; +        int i = 0; -	priv  = this->private; -	local = frame->local; -	sh    = &local->self_heal; +        priv  = this->private; +        local = frame->local; +        sh    = &local->self_heal; -	call_count = afr_up_children_count (priv->child_count, +        call_count = afr_up_children_count (priv->child_count,                                              local->child_up); -	local->call_count = call_count; +        local->call_count = call_count; -	for (i = 0; i < priv->child_count; i++) { -		if (local->child_up[i]) { -			STACK_WIND_COOKIE (frame, afr_sh_data_fstat_cbk, -					   (void *) (long) i, -					   priv->children[i],  -					   priv->children[i]->fops->fstat, -					   sh->healing_fd); +        for (i = 0; i < priv->child_count; i++) { +                if (local->child_up[i]) { +                        STACK_WIND_COOKIE (frame, afr_sh_data_fstat_cbk, +                                           (void *) (long) i, +                                           priv->children[i], +                                           priv->children[i]->fops->fstat, +                                           sh->healing_fd); -			if (!--call_count) -				break; -		} -	} +                        if (!--call_count) +                                break; +                } +        } -	return 0; +        return 0;  } @@ -815,92 +815,92 @@ afr_sh_data_fxattrop_cbk (call_frame_t *frame, void *cookie,                            xlator_t *this, int32_t op_ret, int32_t op_errno,                            dict_t *xattr)  { -	afr_private_t   *priv  = NULL; -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; +        afr_private_t   *priv  = NULL; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; -	int call_count  = -1; -	int child_index = (long) cookie; +        int call_count  = -1; +        int child_index = (long) cookie; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	LOCK (&frame->lock); -	{ -		if (op_ret != -1) { +        LOCK (&frame->lock); +        { +                if (op_ret != -1) {                          gf_log (this->name, GF_LOG_TRACE,                                  "fxattrop of %s on %s succeeded",                                  local->loc.path,                                  priv->children[child_index]->name); -			sh->xattr[child_index] = dict_ref (xattr); -		} -	} -	UNLOCK (&frame->lock); +                        sh->xattr[child_index] = dict_ref (xattr); +                } +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { -		afr_sh_data_fstat (frame, this); -	} +        if (call_count == 0) { +                afr_sh_data_fstat (frame, this); +        } -	return 0; +        return 0;  }  int  afr_sh_data_fxattrop (call_frame_t *frame, xlator_t *this)  { -	afr_self_heal_t *sh    = NULL; -	afr_local_t     *local = NULL; -	afr_private_t   *priv  = NULL; -	dict_t          *xattr_req = NULL; +        afr_self_heal_t *sh    = NULL; +        afr_local_t     *local = NULL; +        afr_private_t   *priv  = NULL; +        dict_t          *xattr_req = NULL;          int32_t zero_pending[3] = {0, 0, 0}; -	int call_count = 0; -	int i = 0; -	int ret = 0; +        int call_count = 0; +        int i = 0; +        int ret = 0; -	priv  = this->private; -	local = frame->local; -	sh    = &local->self_heal; +        priv  = this->private; +        local = frame->local; +        sh    = &local->self_heal; -	call_count = afr_up_children_count (priv->child_count, +        call_count = afr_up_children_count (priv->child_count,                                              local->child_up); -	local->call_count = call_count; +        local->call_count = call_count; -	xattr_req = dict_new(); -	if (xattr_req) { +        xattr_req = dict_new(); +        if (xattr_req) {                  for (i = 0; i < priv->child_count; i++) {                          ret = dict_set_static_bin (xattr_req, priv->pending_key[i],                                                     zero_pending, 3 * sizeof(int32_t));                          if (ret < 0) -				gf_log (this->name, GF_LOG_WARNING, -					"Unable to set dict value"); +                                gf_log (this->name, GF_LOG_WARNING, +                                        "Unable to set dict value");                  }          } -	for (i = 0; i < priv->child_count; i++) { -		if (local->child_up[i]) { -			STACK_WIND_COOKIE (frame, afr_sh_data_fxattrop_cbk, -					   (void *) (long) i, -					   priv->children[i], -					   priv->children[i]->fops->fxattrop, -					   sh->healing_fd, GF_XATTROP_ADD_ARRAY, +        for (i = 0; i < priv->child_count; i++) { +                if (local->child_up[i]) { +                        STACK_WIND_COOKIE (frame, afr_sh_data_fxattrop_cbk, +                                           (void *) (long) i, +                                           priv->children[i], +                                           priv->children[i]->fops->fxattrop, +                                           sh->healing_fd, GF_XATTROP_ADD_ARRAY,                                             xattr_req); -			if (!--call_count) -				break; -		} -	} +                        if (!--call_count) +                                break; +                } +        } -	if (xattr_req) -		dict_unref (xattr_req); +        if (xattr_req) +                dict_unref (xattr_req); -	return 0; +        return 0;  } @@ -954,21 +954,21 @@ afr_sh_data_lock_rec (call_frame_t *frame, xlator_t *this)          afr_nonblocking_inodelk (frame, this); -	return 0; +        return 0;  }  int  afr_sh_data_lock (call_frame_t *frame, xlator_t *this)  { -	afr_local_t *   local = NULL; -	afr_private_t * priv  = NULL; -	afr_self_heal_t * sh  = NULL; +        afr_local_t *   local = NULL; +        afr_private_t * priv  = NULL; +        afr_self_heal_t * sh  = NULL; -	local = frame->local; -	sh    = &local->self_heal; -	priv  = this->private; +        local = frame->local; +        sh    = &local->self_heal; +        priv  = this->private;          if (sh->data_lock_held) {                  /* caller has held the lock already, @@ -984,76 +984,76 @@ afr_sh_data_lock (call_frame_t *frame, xlator_t *this)  int  afr_sh_data_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		      int32_t op_ret, int32_t op_errno, fd_t *fd) +                      int32_t op_ret, int32_t op_errno, fd_t *fd)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              call_count = 0; -	int              child_index = 0; - -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -	child_index = (long) cookie; - -	/* TODO: some of the open's might fail. -	   In that case, modify cleanup fn to send flush on those  -	   fd's which are already open */ - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			gf_log (this->name, GF_LOG_TRACE, -				"open of %s failed on child %s (%s)", -				local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); -			sh->op_failed = 1; -		} +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              call_count = 0; +        int              child_index = 0; + +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        child_index = (long) cookie; + +        /* TODO: some of the open's might fail. +           In that case, modify cleanup fn to send flush on those +           fd's which are already open */ + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "open of %s failed on child %s (%s)", +                                local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); +                        sh->op_failed = 1; +                }                  gf_log (this->name, GF_LOG_TRACE,                          "open of %s succeeded on child %s",                          local->loc.path,                          priv->children[child_index]->name); -	} -	UNLOCK (&frame->lock); +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) { -		if (sh->op_failed) { -			afr_sh_data_finish (frame, this); -			return 0; -		} +        if (call_count == 0) { +                if (sh->op_failed) { +                        afr_sh_data_finish (frame, this); +                        return 0; +                } -		gf_log (this->name, GF_LOG_TRACE, -			"fd for %s opened, commencing sync", -			local->loc.path); +                gf_log (this->name, GF_LOG_TRACE, +                        "fd for %s opened, commencing sync", +                        local->loc.path);                  afr_sh_data_lock (frame, this); -	} +        } -	return 0; +        return 0;  }  int  afr_sh_data_open (call_frame_t *frame, xlator_t *this)  { -	int i = 0; -	int call_count = 0; +        int i = 0; +        int call_count = 0; -	fd_t *fd = NULL; +        fd_t *fd = NULL; -	afr_local_t *   local = NULL; -	afr_private_t * priv  = NULL; -	afr_self_heal_t *sh = NULL; +        afr_local_t *   local = NULL; +        afr_private_t * priv  = NULL; +        afr_self_heal_t *sh = NULL; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private;          if (sh->healing_fd_opened) {                  /* caller has opened the fd for us already, so skip open */ @@ -1062,52 +1062,51 @@ afr_sh_data_open (call_frame_t *frame, xlator_t *this)                  return 0;          } -	call_count = afr_up_children_count (priv->child_count, local->child_up); -	local->call_count = call_count; +        call_count = afr_up_children_count (priv->child_count, local->child_up); +        local->call_count = call_count; -	fd = fd_create (local->loc.inode, frame->root->pid); -	sh->healing_fd = fd; +        fd = fd_create (local->loc.inode, frame->root->pid); +        sh->healing_fd = fd; -	/* open sinks */ -	for (i = 0; i < priv->child_count; i++) { -		if(!local->child_up[i]) -			continue; +        /* open sinks */ +        for (i = 0; i < priv->child_count; i++) { +                if(!local->child_up[i]) +                        continue; -		STACK_WIND_COOKIE (frame, afr_sh_data_open_cbk, -				   (void *) (long) i, -				   priv->children[i],  -				   priv->children[i]->fops->open, -				   &local->loc,  -				   O_RDWR|O_LARGEFILE, fd, 0);  +                STACK_WIND_COOKIE (frame, afr_sh_data_open_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->open, +                                   &local->loc, +                                   O_RDWR|O_LARGEFILE, fd, 0); -		if (!--call_count) -			break; -	} +                if (!--call_count) +                        break; +        } -	return 0; +        return 0;  }  int  afr_self_heal_data (call_frame_t *frame, xlator_t *this)  { -	afr_local_t   *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t *priv = this->private; +        afr_local_t   *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t *priv = this->private; -	local = frame->local; -	sh = &local->self_heal; +        local = frame->local; +        sh = &local->self_heal; -	if (sh->need_data_self_heal && priv->data_self_heal) { -		afr_sh_data_open (frame, this); -	} else { -		gf_log (this->name, GF_LOG_TRACE, -			"not doing data self heal on %s", -			local->loc.path); -		afr_sh_data_done (frame, this); -	} +        if (sh->need_data_self_heal && priv->data_self_heal) { +                afr_sh_data_open (frame, this); +        } else { +                gf_log (this->name, GF_LOG_TRACE, +                        "not doing data self heal on %s", +                        local->loc.path); +                afr_sh_data_done (frame, this); +        } -	return 0; +        return 0;  } - diff --git a/xlators/cluster/afr/src/afr-self-heal-metadata.c b/xlators/cluster/afr/src/afr-self-heal-metadata.c index e76d58850..3f2e657a4 100644 --- a/xlators/cluster/afr/src/afr-self-heal-metadata.c +++ b/xlators/cluster/afr/src/afr-self-heal-metadata.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */  #include <libgen.h> @@ -52,73 +52,73 @@  int  afr_sh_metadata_done (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              i = 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              i = 0; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -//	memset (sh->child_errno, 0, sizeof (int) * priv->child_count); -	memset (sh->buf, 0, sizeof (struct iatt) * priv->child_count); -	memset (sh->success, 0, sizeof (int) * priv->child_count); +//      memset (sh->child_errno, 0, sizeof (int) * priv->child_count); +        memset (sh->buf, 0, sizeof (struct iatt) * priv->child_count); +        memset (sh->success, 0, sizeof (int) * priv->child_count);  /*         for (i = 0; i < priv->child_count; i++) { */  /*                 sh->locked_nodes[i] = 1; */  /*         } */ -	for (i = 0; i < priv->child_count; i++) { -		if (sh->xattr[i]) -			dict_unref (sh->xattr[i]); -		sh->xattr[i] = NULL; -	} - -	if (local->govinda_gOvinda) { -		gf_log (this->name, GF_LOG_DEBUG, -			"aborting selfheal of %s", -			local->loc.path); -		sh->completion_cbk (frame, this); -	} else { -		if (IA_ISREG (sh->type)) { -			gf_log (this->name, GF_LOG_TRACE, -				"proceeding to data check on %s", -				local->loc.path); -			afr_self_heal_data (frame, this); -			return 0; -		} - -		if (IA_ISDIR (sh->type)) { -			gf_log (this->name, GF_LOG_TRACE, -				"proceeding to entry check on %s", -				local->loc.path); -			afr_self_heal_entry (frame, this); -			return 0; -		} -		gf_log (this->name, GF_LOG_DEBUG, -			"completed self heal of %s", -			local->loc.path); - -		sh->completion_cbk (frame, this); -	} - -	return 0; +        for (i = 0; i < priv->child_count; i++) { +                if (sh->xattr[i]) +                        dict_unref (sh->xattr[i]); +                sh->xattr[i] = NULL; +        } + +        if (local->govinda_gOvinda) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "aborting selfheal of %s", +                        local->loc.path); +                sh->completion_cbk (frame, this); +        } else { +                if (IA_ISREG (sh->type)) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "proceeding to data check on %s", +                                local->loc.path); +                        afr_self_heal_data (frame, this); +                        return 0; +                } + +                if (IA_ISDIR (sh->type)) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "proceeding to entry check on %s", +                                local->loc.path); +                        afr_self_heal_entry (frame, this); +                        return 0; +                } +                gf_log (this->name, GF_LOG_DEBUG, +                        "completed self heal of %s", +                        local->loc.path); + +                sh->completion_cbk (frame, this); +        } + +        return 0;  }  int  afr_sh_metadata_unlck_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			   int32_t op_ret, int32_t op_errno) +                           int32_t op_ret, int32_t op_errno)  { -	int               call_count = 0; +        int               call_count = 0; -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) -		afr_sh_metadata_done (frame, this); +        if (call_count == 0) +                afr_sh_metadata_done (frame, this); -	return 0; +        return 0;  }  int @@ -141,144 +141,144 @@ afr_sh_metadata_finish (call_frame_t *frame, xlator_t *this)  {          afr_sh_inode_unlock (frame, this); -	return 0; +        return 0;  }  int  afr_sh_metadata_erase_pending_cbk (call_frame_t *frame, void *cookie, -				   xlator_t *this, int32_t op_ret, -				   int32_t op_errno, dict_t *xattr) +                                   xlator_t *this, int32_t op_ret, +                                   int32_t op_errno, dict_t *xattr)  { -	afr_local_t     *local = NULL; -	int             call_count = 0; +        afr_local_t     *local = NULL; +        int             call_count = 0; -	local = frame->local; +        local = frame->local; -	LOCK (&frame->lock); -	{ -	} -	UNLOCK (&frame->lock); +        LOCK (&frame->lock); +        { +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) -		afr_sh_metadata_finish (frame, this); +        if (call_count == 0) +                afr_sh_metadata_finish (frame, this); -	return 0; +        return 0;  }  int  afr_sh_metadata_erase_pending (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              call_count = 0; -	int              i = 0; -	dict_t          **erase_xattr = NULL; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              call_count = 0; +        int              i = 0; +        dict_t          **erase_xattr = NULL; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	afr_sh_pending_to_delta (priv, sh->xattr, sh->delta_matrix,  +        afr_sh_pending_to_delta (priv, sh->xattr, sh->delta_matrix,                                   sh->success, priv->child_count,                                   AFR_METADATA_TRANSACTION); -	erase_xattr = GF_CALLOC (sizeof (*erase_xattr), priv->child_count, +        erase_xattr = GF_CALLOC (sizeof (*erase_xattr), priv->child_count,                                   gf_afr_mt_dict_t); -	for (i = 0; i < priv->child_count; i++) { -		if (sh->xattr[i]) { -			call_count++; - -			erase_xattr[i] = get_new_dict(); -			dict_ref (erase_xattr[i]); -		} -	} - -	afr_sh_delta_to_xattr (priv, sh->delta_matrix, erase_xattr, -			       priv->child_count, AFR_METADATA_TRANSACTION); - -	local->call_count = call_count; - -	if (call_count == 0) { -		gf_log (this->name, GF_LOG_WARNING, -			"metadata of %s not healed on any subvolume", -			local->loc.path); - -		afr_sh_metadata_finish (frame, this); -	} - -	for (i = 0; i < priv->child_count; i++) { -		if (!erase_xattr[i]) -			continue; - -		gf_log (this->name, GF_LOG_TRACE, -			"erasing pending flags from %s on %s", -			local->loc.path, priv->children[i]->name); - -		STACK_WIND_COOKIE (frame, afr_sh_metadata_erase_pending_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->xattrop, -				   &local->loc, -				   GF_XATTROP_ADD_ARRAY, erase_xattr[i]); -		if (!--call_count) -			break; -	} - -	for (i = 0; i < priv->child_count; i++) { -		if (erase_xattr[i]) { -			dict_unref (erase_xattr[i]); -		} -	} -	GF_FREE (erase_xattr); - -	return 0; +        for (i = 0; i < priv->child_count; i++) { +                if (sh->xattr[i]) { +                        call_count++; + +                        erase_xattr[i] = get_new_dict(); +                        dict_ref (erase_xattr[i]); +                } +        } + +        afr_sh_delta_to_xattr (priv, sh->delta_matrix, erase_xattr, +                               priv->child_count, AFR_METADATA_TRANSACTION); + +        local->call_count = call_count; + +        if (call_count == 0) { +                gf_log (this->name, GF_LOG_WARNING, +                        "metadata of %s not healed on any subvolume", +                        local->loc.path); + +                afr_sh_metadata_finish (frame, this); +        } + +        for (i = 0; i < priv->child_count; i++) { +                if (!erase_xattr[i]) +                        continue; + +                gf_log (this->name, GF_LOG_TRACE, +                        "erasing pending flags from %s on %s", +                        local->loc.path, priv->children[i]->name); + +                STACK_WIND_COOKIE (frame, afr_sh_metadata_erase_pending_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->xattrop, +                                   &local->loc, +                                   GF_XATTROP_ADD_ARRAY, erase_xattr[i]); +                if (!--call_count) +                        break; +        } + +        for (i = 0; i < priv->child_count; i++) { +                if (erase_xattr[i]) { +                        dict_unref (erase_xattr[i]); +                } +        } +        GF_FREE (erase_xattr); + +        return 0;  }  int  afr_sh_metadata_sync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			  int32_t op_ret, int32_t op_errno) +                          int32_t op_ret, int32_t op_errno)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              call_count = 0; -	int              child_index = 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              call_count = 0; +        int              child_index = 0; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	child_index = (long) cookie; +        child_index = (long) cookie; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"setting attributes failed for %s on %s (%s)", -				local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "setting attributes failed for %s on %s (%s)", +                                local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); -			sh->success[child_index] = 0; -		} -	} -	UNLOCK (&frame->lock); +                        sh->success[child_index] = 0; +                } +        } +        UNLOCK (&frame->lock); -	call_count = afr_frame_return (frame); +        call_count = afr_frame_return (frame); -	if (call_count == 0) -		afr_sh_metadata_erase_pending (frame, this); +        if (call_count == 0) +                afr_sh_metadata_erase_pending (frame, this); -	return 0; +        return 0;  } @@ -287,211 +287,211 @@ afr_sh_metadata_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                               int32_t op_ret, int32_t op_errno,                               struct iatt *preop, struct iatt *postop)  { -	afr_sh_metadata_sync_cbk (frame, cookie, this, op_ret, op_errno); +        afr_sh_metadata_sync_cbk (frame, cookie, this, op_ret, op_errno); -	return 0; +        return 0;  }  int  afr_sh_metadata_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			   int32_t op_ret, int32_t op_errno) +                           int32_t op_ret, int32_t op_errno)  { -	afr_sh_metadata_sync_cbk (frame, cookie, this, op_ret, op_errno); +        afr_sh_metadata_sync_cbk (frame, cookie, this, op_ret, op_errno); -	return 0; +        return 0;  }  int  afr_sh_metadata_sync (call_frame_t *frame, xlator_t *this, dict_t *xattr)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              source = 0; -	int              active_sinks = 0; -	int              call_count = 0; -	int              i = 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              source = 0; +        int              active_sinks = 0; +        int              call_count = 0; +        int              i = 0;          struct iatt      stbuf;          int32_t          valid = 0; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	source = sh->source; -	active_sinks = sh->active_sinks; +        source = sh->source; +        active_sinks = sh->active_sinks; -	/* -	 * 2 calls per sink - setattr, setxattr -	 */ -	if (xattr) -		call_count = active_sinks * 2; -	else -		call_count = active_sinks; +        /* +         * 2 calls per sink - setattr, setxattr +         */ +        if (xattr) +                call_count = active_sinks * 2; +        else +                call_count = active_sinks; -	local->call_count = call_count; +        local->call_count = call_count; -	stbuf.ia_atime = sh->buf[source].ia_atime; -	stbuf.ia_atime_nsec = sh->buf[source].ia_atime_nsec; -	stbuf.ia_mtime = sh->buf[source].ia_mtime; -	stbuf.ia_mtime_nsec = sh->buf[source].ia_mtime_nsec; +        stbuf.ia_atime = sh->buf[source].ia_atime; +        stbuf.ia_atime_nsec = sh->buf[source].ia_atime_nsec; +        stbuf.ia_mtime = sh->buf[source].ia_mtime; +        stbuf.ia_mtime_nsec = sh->buf[source].ia_mtime_nsec;          stbuf.ia_uid = sh->buf[source].ia_uid;          stbuf.ia_gid = sh->buf[source].ia_gid;          stbuf.ia_type = sh->buf[source].ia_type;          stbuf.ia_prot = sh->buf[source].ia_prot; -         -        valid = GF_SET_ATTR_MODE  |  + +        valid = GF_SET_ATTR_MODE  |                  GF_SET_ATTR_UID   | GF_SET_ATTR_GID |                  GF_SET_ATTR_ATIME | GF_SET_ATTR_MTIME; -	for (i = 0; i < priv->child_count; i++) { -		if (call_count == 0) { -			break; -		} -		if (sh->sources[i] || !local->child_up[i]) -			continue; - -		gf_log (this->name, GF_LOG_DEBUG, -			"self-healing metadata of %s from %s to %s", -			local->loc.path, priv->children[source]->name, -			priv->children[i]->name); - -		STACK_WIND_COOKIE (frame, afr_sh_metadata_setattr_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->setattr, -				   &local->loc, &stbuf, valid); - -		call_count--; - -		if (!xattr) -			continue; - -		STACK_WIND_COOKIE (frame, afr_sh_metadata_xattr_cbk, -				   (void *) (long) i, -				   priv->children[i], -				   priv->children[i]->fops->setxattr, -				   &local->loc, xattr, 0); -		call_count--; -	} - -	return 0; +        for (i = 0; i < priv->child_count; i++) { +                if (call_count == 0) { +                        break; +                } +                if (sh->sources[i] || !local->child_up[i]) +                        continue; + +                gf_log (this->name, GF_LOG_DEBUG, +                        "self-healing metadata of %s from %s to %s", +                        local->loc.path, priv->children[source]->name, +                        priv->children[i]->name); + +                STACK_WIND_COOKIE (frame, afr_sh_metadata_setattr_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->setattr, +                                   &local->loc, &stbuf, valid); + +                call_count--; + +                if (!xattr) +                        continue; + +                STACK_WIND_COOKIE (frame, afr_sh_metadata_xattr_cbk, +                                   (void *) (long) i, +                                   priv->children[i], +                                   priv->children[i]->fops->setxattr, +                                   &local->loc, xattr, 0); +                call_count--; +        } + +        return 0;  }  int  afr_sh_metadata_getxattr_cbk (call_frame_t *frame, void *cookie, -			      xlator_t *this, -			      int32_t op_ret, int32_t op_errno, dict_t *xattr) +                              xlator_t *this, +                              int32_t op_ret, int32_t op_errno, dict_t *xattr)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              source = 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              source = 0;          int i; -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; -	source = sh->source; +        source = sh->source; -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"getxattr of %s failed on subvolume %s (%s). proceeding without xattr", -			local->loc.path, priv->children[source]->name, -			strerror (op_errno)); +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "getxattr of %s failed on subvolume %s (%s). proceeding without xattr", +                        local->loc.path, priv->children[source]->name, +                        strerror (op_errno)); -		afr_sh_metadata_sync (frame, this, NULL); -	} else { +                afr_sh_metadata_sync (frame, this, NULL); +        } else {                  for (i = 0; i < priv->child_count; i++) {                          dict_del (xattr, priv->pending_key[i]);                  } -		afr_sh_metadata_sync (frame, this, xattr); -	} +                afr_sh_metadata_sync (frame, this, xattr); +        } -	return 0; +        return 0;  }  int  afr_sh_metadata_sync_prepare (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              active_sinks = 0; -	int              source = 0; -	int              i = 0; - -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -	source = sh->source; - -	for (i = 0; i < priv->child_count; i++) { -		if (sh->sources[i] == 0 && local->child_up[i] == 1) { -			active_sinks++; -			sh->success[i] = 1; -		} -	} -	sh->success[source] = 1; - -	if (active_sinks == 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no active sinks for performing self-heal on file %s", -			local->loc.path); -		afr_sh_metadata_finish (frame, this); -		return 0; -	} -	sh->active_sinks = active_sinks; - -	gf_log (this->name, GF_LOG_TRACE, -		"syncing metadata of %s from subvolume %s to %d active sinks", -		local->loc.path, priv->children[source]->name, active_sinks); - -	STACK_WIND (frame, afr_sh_metadata_getxattr_cbk, -		    priv->children[source], -		    priv->children[source]->fops->getxattr, -		    &local->loc, NULL); - -	return 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              active_sinks = 0; +        int              source = 0; +        int              i = 0; + +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        source = sh->source; + +        for (i = 0; i < priv->child_count; i++) { +                if (sh->sources[i] == 0 && local->child_up[i] == 1) { +                        active_sinks++; +                        sh->success[i] = 1; +                } +        } +        sh->success[source] = 1; + +        if (active_sinks == 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no active sinks for performing self-heal on file %s", +                        local->loc.path); +                afr_sh_metadata_finish (frame, this); +                return 0; +        } +        sh->active_sinks = active_sinks; + +        gf_log (this->name, GF_LOG_TRACE, +                "syncing metadata of %s from subvolume %s to %d active sinks", +                local->loc.path, priv->children[source]->name, active_sinks); + +        STACK_WIND (frame, afr_sh_metadata_getxattr_cbk, +                    priv->children[source], +                    priv->children[source]->fops->getxattr, +                    &local->loc, NULL); + +        return 0;  }  int  afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              nsources = 0; -	int              source = 0; -	int              i = 0; - -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -	afr_sh_build_pending_matrix (priv, sh->pending_matrix, sh->xattr,  -				     priv->child_count,  +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              nsources = 0; +        int              source = 0; +        int              i = 0; + +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        afr_sh_build_pending_matrix (priv, sh->pending_matrix, sh->xattr, +                                     priv->child_count,                                       AFR_METADATA_TRANSACTION); -	afr_sh_print_pending_matrix (sh->pending_matrix, this); +        afr_sh_print_pending_matrix (sh->pending_matrix, this); -	nsources = afr_sh_mark_sources (sh, priv->child_count, +        nsources = afr_sh_mark_sources (sh, priv->child_count,                                          AFR_SELF_HEAL_METADATA); -	afr_sh_supress_errenous_children (sh->sources, sh->child_errno, -					  priv->child_count); +        afr_sh_supress_errenous_children (sh->sources, sh->child_errno, +                                          priv->child_count);          if (nsources == 0) {                  gf_log (this->name, GF_LOG_TRACE, @@ -502,34 +502,34 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this)                  return 0;          } -	if ((nsources == -1) -	    && (priv->favorite_child != -1) -	    && (sh->child_errno[priv->favorite_child] == 0)) { +        if ((nsources == -1) +            && (priv->favorite_child != -1) +            && (sh->child_errno[priv->favorite_child] == 0)) { -		gf_log (this->name, GF_LOG_WARNING, -			"Picking favorite child %s as authentic source to resolve conflicting metadata of %s", -			priv->children[priv->favorite_child]->name, -			local->loc.path); +                gf_log (this->name, GF_LOG_WARNING, +                        "Picking favorite child %s as authentic source to resolve conflicting metadata of %s", +                        priv->children[priv->favorite_child]->name, +                        local->loc.path); -		sh->sources[priv->favorite_child] = 1; +                sh->sources[priv->favorite_child] = 1; -		nsources = afr_sh_source_count (sh->sources, -						priv->child_count); -	} +                nsources = afr_sh_source_count (sh->sources, +                                                priv->child_count); +        } -	if (nsources == -1) { -		gf_log (this->name, GF_LOG_ERROR, -			"Unable to self-heal permissions/ownership of '%s' " +        if (nsources == -1) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Unable to self-heal permissions/ownership of '%s' "                          "(possible split-brain). Please fix the file on "                          "all backend volumes", local->loc.path); -		local->govinda_gOvinda = 1; +                local->govinda_gOvinda = 1; -		afr_sh_metadata_finish (frame, this); -		return 0; -	} +                afr_sh_metadata_finish (frame, this); +                return 0; +        } -	source = afr_sh_select_source (sh->sources, priv->child_count); +        source = afr_sh_select_source (sh->sources, priv->child_count);          if (source == -1) {                  gf_log (this->name, GF_LOG_DEBUG, @@ -539,98 +539,98 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this)                  return 0;          } -	sh->source = source; +        sh->source = source; -	/* detect changes not visible through pending flags -- JIC */ -	for (i = 0; i < priv->child_count; i++) { -		if (i == source || sh->child_errno[i]) -			continue; +        /* detect changes not visible through pending flags -- JIC */ +        for (i = 0; i < priv->child_count; i++) { +                if (i == source || sh->child_errno[i]) +                        continue; -		if (PERMISSION_DIFFERS (&sh->buf[i], &sh->buf[source])) -			sh->sources[i] = 0; +                if (PERMISSION_DIFFERS (&sh->buf[i], &sh->buf[source])) +                        sh->sources[i] = 0; -		if (OWNERSHIP_DIFFERS (&sh->buf[i], &sh->buf[source])) -			sh->sources[i] = 0; -	} +                if (OWNERSHIP_DIFFERS (&sh->buf[i], &sh->buf[source])) +                        sh->sources[i] = 0; +        } -	afr_sh_metadata_sync_prepare (frame, this); +        afr_sh_metadata_sync_prepare (frame, this); -	return 0; +        return 0;  }  int  afr_sh_metadata_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			    int32_t op_ret, int32_t op_errno, +                            int32_t op_ret, int32_t op_errno,                              inode_t *inode, struct iatt *buf, dict_t *xattr,                              struct iatt *postparent)  { -	afr_local_t     *local = NULL; -	afr_self_heal_t *sh = NULL; -	afr_private_t   *priv = NULL; -	int              call_count = 0; -	int              child_index = 0; - - -	local = frame->local; -	sh = &local->self_heal; -	priv = this->private; - -	child_index = (long) cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == 0) { -			gf_log (this->name, GF_LOG_TRACE, -				"path %s on subvolume %s is of mode 0%o", -				local->loc.path, -				priv->children[child_index]->name, -				buf->ia_type); - -			sh->buf[child_index] = *buf; -			if (xattr) -				sh->xattr[child_index] = dict_ref (xattr); -		} else { -			gf_log (this->name, GF_LOG_DEBUG, -				"path %s on subvolume %s => -1 (%s)", -				local->loc.path, -				priv->children[child_index]->name, -				strerror (op_errno)); - -			sh->child_errno[child_index] = op_errno; -		} -	} -	UNLOCK (&frame->lock); - -	call_count = afr_frame_return (frame); - -	if (call_count == 0) -		afr_sh_metadata_fix (frame, this); - -	return 0; +        afr_local_t     *local = NULL; +        afr_self_heal_t *sh = NULL; +        afr_private_t   *priv = NULL; +        int              call_count = 0; +        int              child_index = 0; + + +        local = frame->local; +        sh = &local->self_heal; +        priv = this->private; + +        child_index = (long) cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == 0) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "path %s on subvolume %s is of mode 0%o", +                                local->loc.path, +                                priv->children[child_index]->name, +                                buf->ia_type); + +                        sh->buf[child_index] = *buf; +                        if (xattr) +                                sh->xattr[child_index] = dict_ref (xattr); +                } else { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "path %s on subvolume %s => -1 (%s)", +                                local->loc.path, +                                priv->children[child_index]->name, +                                strerror (op_errno)); + +                        sh->child_errno[child_index] = op_errno; +                } +        } +        UNLOCK (&frame->lock); + +        call_count = afr_frame_return (frame); + +        if (call_count == 0) +                afr_sh_metadata_fix (frame, this); + +        return 0;  }  int  afr_sh_metadata_lookup (call_frame_t *frame, xlator_t *this)  { -	afr_local_t     *local = NULL; -	afr_private_t   *priv = NULL; -	int              i = 0; -	int              call_count = 0; -	dict_t          *xattr_req = NULL; -	int              ret = 0; +        afr_local_t     *local = NULL; +        afr_private_t   *priv = NULL; +        int              i = 0; +        int              call_count = 0; +        dict_t          *xattr_req = NULL; +        int              ret = 0; -	local = frame->local; -	priv = this->private; +        local = frame->local; +        priv = this->private; -	call_count = afr_up_children_count (priv->child_count, +        call_count = afr_up_children_count (priv->child_count,                                              local->child_up); -	local->call_count = call_count; +        local->call_count = call_count; -	xattr_req = dict_new(); +        xattr_req = dict_new(); -	if (xattr_req) { +        if (xattr_req) {                  for (i = 0; i < priv->child_count; i++) {                          ret = dict_set_uint64 (xattr_req,                                                 priv->pending_key[i], @@ -641,26 +641,26 @@ afr_sh_metadata_lookup (call_frame_t *frame, xlator_t *this)                  }          } -	for (i = 0; i < priv->child_count; i++) { -		if (local->child_up[i]) { -			gf_log (this->name, GF_LOG_TRACE, -				"looking up %s on %s", -				local->loc.path, priv->children[i]->name); - -			STACK_WIND_COOKIE (frame, afr_sh_metadata_lookup_cbk, -					   (void *) (long) i, -					   priv->children[i], -					   priv->children[i]->fops->lookup, -					   &local->loc, xattr_req); -			if (!--call_count) -				break; -		} -	} -	 -	if (xattr_req) -		dict_unref (xattr_req); - -	return 0; +        for (i = 0; i < priv->child_count; i++) { +                if (local->child_up[i]) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "looking up %s on %s", +                                local->loc.path, priv->children[i]->name); + +                        STACK_WIND_COOKIE (frame, afr_sh_metadata_lookup_cbk, +                                           (void *) (long) i, +                                           priv->children[i], +                                           priv->children[i]->fops->lookup, +                                           &local->loc, xattr_req); +                        if (!--call_count) +                                break; +                } +        } + +        if (xattr_req) +                dict_unref (xattr_req); + +        return 0;  }  int @@ -707,25 +707,24 @@ afr_sh_metadata_lock (call_frame_t *frame, xlator_t *this)          afr_nonblocking_inodelk (frame, this); -	return 0; +        return 0;  }  int  afr_self_heal_metadata (call_frame_t *frame, xlator_t *this)  { -	afr_local_t   *local = NULL; -	afr_private_t *priv = this->private; +        afr_local_t   *local = NULL; +        afr_private_t *priv = this->private; -	local = frame->local; +        local = frame->local; -	if (local->self_heal.need_metadata_self_heal && priv->metadata_self_heal) { -		afr_sh_metadata_lock (frame, this); -	} else { -		afr_sh_metadata_done (frame, this); -	} +        if (local->self_heal.need_metadata_self_heal && priv->metadata_self_heal) { +                afr_sh_metadata_lock (frame, this); +        } else { +                afr_sh_metadata_done (frame, this); +        } -	return 0; +        return 0;  } - diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index e6cd9bf49..a2da671a7 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -1,20 +1,20 @@  /* -   Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> -   This file is part of GlusterFS. - -   GlusterFS is free software; you can redistribute it and/or modify -   it under the terms of the GNU Affero General Public License as published -   by the Free Software Foundation; either version 3 of the License, -   or (at your option) any later version. - -   GlusterFS is distributed in the hope that it will be useful, but -   WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -   Affero General Public License for more details. - -   You should have received a copy of the GNU Affero General Public License -   along with this program.  If not, see -   <http://www.gnu.org/licenses/>. +  Copyright (c) 2008-2010 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU Affero General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  Affero General Public License for more details. + +  You should have received a copy of the GNU Affero General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>.  */ @@ -37,55 +37,55 @@  struct _pump_private;  typedef struct _afr_private { -	gf_lock_t lock;               /* to guard access to child_count, etc */ -	unsigned int child_count;     /* total number of children   */ +        gf_lock_t lock;               /* to guard access to child_count, etc */ +        unsigned int child_count;     /* total number of children   */          unsigned int read_child_rr;   /* round-robin index of the read_child */          gf_lock_t read_child_lock;    /* lock to protect above */ -	xlator_t **children; +        xlator_t **children;          gf_lock_t root_inode_lk;          int first_lookup;          inode_t *root_inode; -	unsigned char *child_up; +        unsigned char *child_up;          char **pending_key; -	gf_boolean_t data_self_heal;              /* on/off */ +        gf_boolean_t data_self_heal;              /* on/off */          char *       data_self_heal_algorithm;    /* name of algorithm */          unsigned int data_self_heal_window_size;  /* max number of pipelined                                                       read/writes */          unsigned int background_self_heal_count;          unsigned int background_self_heals_started; -	gf_boolean_t metadata_self_heal;   /* on/off */ -	gf_boolean_t entry_self_heal;      /* on/off */ +        gf_boolean_t metadata_self_heal;   /* on/off */ +        gf_boolean_t entry_self_heal;      /* on/off */ -	gf_boolean_t data_change_log;       /* on/off */ -	gf_boolean_t metadata_change_log;   /* on/off */ -	gf_boolean_t entry_change_log;      /* on/off */ +        gf_boolean_t data_change_log;       /* on/off */ +        gf_boolean_t metadata_change_log;   /* on/off */ +        gf_boolean_t entry_change_log;      /* on/off */ -	int read_child;               /* read-subvolume */ -	unsigned int favorite_child;  /* subvolume to be preferred in resolving -					 split-brain cases */ +        int read_child;               /* read-subvolume */ +        unsigned int favorite_child;  /* subvolume to be preferred in resolving +                                         split-brain cases */ -	unsigned int data_lock_server_count; -	unsigned int metadata_lock_server_count; -	unsigned int entry_lock_server_count; +        unsigned int data_lock_server_count; +        unsigned int metadata_lock_server_count; +        unsigned int entry_lock_server_count; -	gf_boolean_t inodelk_trace; -	gf_boolean_t entrylk_trace; +        gf_boolean_t inodelk_trace; +        gf_boolean_t entrylk_trace; -	gf_boolean_t strict_readdir; +        gf_boolean_t strict_readdir; -	unsigned int wait_count;      /* # of servers to wait for success */ +        unsigned int wait_count;      /* # of servers to wait for success */          uint64_t up_count;      /* number of CHILD_UPs we have seen */          uint64_t down_count;    /* number of CHILD_DOWNs we have seen */ -	struct _pump_private *pump_private; /* Set if we are loaded as pump */ +        struct _pump_private *pump_private; /* Set if we are loaded as pump */          int                   use_afr_in_pump;          pthread_mutex_t  mutex; @@ -112,7 +112,7 @@ typedef struct {          gf_boolean_t data_lock_held;      /* true if caller has already                                               acquired 0-0 lock */ -	fd_t *healing_fd;                 /* set if callers has opened fd */ +        fd_t *healing_fd;                 /* set if callers has opened fd */          gf_boolean_t background;          /* do self-heal in background                                               if possible */ @@ -128,39 +128,39 @@ typedef struct {          /* End of external interface members */ -	/* array of stat's, one for each child */ -	struct iatt *buf; +        /* array of stat's, one for each child */ +        struct iatt *buf;          struct iatt parentbuf;          struct iatt entrybuf; -	/* array of xattr's, one for each child */ -	dict_t **xattr; +        /* array of xattr's, one for each child */ +        dict_t **xattr; -	/* array of errno's, one for each child */ -	int *child_errno; +        /* array of errno's, one for each child */ +        int *child_errno; -	int32_t **pending_matrix; -	int32_t **delta_matrix; +        int32_t **pending_matrix; +        int32_t **delta_matrix; -	int *sources; -	int source; -	int active_source; -	int active_sinks; -	int *success; -	unsigned char *locked_nodes; +        int *sources; +        int source; +        int active_source; +        int active_sinks; +        int *success; +        unsigned char *locked_nodes;          int lock_count;          mode_t impunging_entry_mode;          const char *linkname; -	int   op_failed; +        int   op_failed; -	int   file_has_holes; -	blksize_t block_size; -	off_t file_size; -	off_t offset; +        int   file_has_holes; +        blksize_t block_size; +        off_t file_size; +        off_t offset; -	loc_t parent_loc; +        loc_t parent_loc;          call_frame_t *orig_frame;          gf_boolean_t unwound; @@ -170,19 +170,19 @@ typedef struct {          int (*flush_self_heal_cbk) (call_frame_t *frame, xlator_t *this); -	int (*completion_cbk) (call_frame_t *frame, xlator_t *this); +        int (*completion_cbk) (call_frame_t *frame, xlator_t *this);          int (*algo_completion_cbk) (call_frame_t *frame, xlator_t *this);          int (*algo_abort_cbk) (call_frame_t *frame, xlator_t *this); -	call_frame_t *sh_frame; +        call_frame_t *sh_frame;  } afr_self_heal_t;  typedef enum { -	AFR_DATA_TRANSACTION,          /* truncate, write, ... */ -	AFR_METADATA_TRANSACTION,      /* chmod, chown, ... */ -	AFR_ENTRY_TRANSACTION,         /* create, rmdir, ... */ -	AFR_ENTRY_RENAME_TRANSACTION,  /* rename */ +        AFR_DATA_TRANSACTION,          /* truncate, write, ... */ +        AFR_METADATA_TRANSACTION,      /* chmod, chown, ... */ +        AFR_ENTRY_TRANSACTION,         /* create, rmdir, ... */ +        AFR_ENTRY_RENAME_TRANSACTION,  /* rename */  } afr_transaction_type;  typedef enum { @@ -279,39 +279,39 @@ typedef struct _afr_locked_fd {  typedef struct _afr_local {          int     uid;          int     gid; -	unsigned int call_count; -	unsigned int success_count; -	unsigned int enoent_count; +        unsigned int call_count; +        unsigned int success_count; +        unsigned int enoent_count; -	unsigned int govinda_gOvinda; +        unsigned int govinda_gOvinda; -	unsigned int read_child_index; +        unsigned int read_child_index;          unsigned char read_child_returned;          unsigned int first_up_child;          pid_t saved_pid; -	int32_t op_ret; -	int32_t op_errno; +        int32_t op_ret; +        int32_t op_errno; -	int32_t **pending; +        int32_t **pending; -	loc_t loc; -	loc_t newloc; +        loc_t loc; +        loc_t newloc; -	fd_t *fd; +        fd_t *fd; -	glusterfs_fop_t fop; +        glusterfs_fop_t fop; -	unsigned char *child_up; +        unsigned char *child_up; -	int32_t *child_errno; +        int32_t *child_errno; -	dict_t  *xattr_req; +        dict_t  *xattr_req; -	int32_t  inodelk_count; -	int32_t  entrylk_count; +        int32_t  inodelk_count; +        int32_t  entrylk_count;          afr_internal_lock_t internal_lock; @@ -324,123 +324,123 @@ typedef struct _afr_local {          int (*openfd_flush_cbk) (call_frame_t *frame, xlator_t *this); -	/* -	   This struct contains the arguments for the "continuation" -	   (scheme-like) of fops -	*/ - -	int   op; -	struct { -		struct { -			unsigned char buf_set; -			struct statvfs buf; -		} statfs; - -		struct { -			inode_t *inode; -			struct iatt buf; +        /* +          This struct contains the arguments for the "continuation" +          (scheme-like) of fops +        */ + +        int   op; +        struct { +                struct { +                        unsigned char buf_set; +                        struct statvfs buf; +                } statfs; + +                struct { +                        inode_t *inode; +                        struct iatt buf;                          struct iatt read_child_buf;                          struct iatt postparent;                          ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			dict_t *xattr; -			dict_t **xattrs; +                        dict_t *xattr; +                        dict_t **xattrs;                          gf_boolean_t is_revalidate; -		} lookup; +                } lookup; -		struct { -			int32_t flags; +                struct { +                        int32_t flags;                          int32_t wbflags; -		} open; +                } open; -		struct { -			int32_t cmd; +                struct { +                        int32_t cmd;                          struct gf_flock user_flock;                          struct gf_flock ret_flock; -			unsigned char *locked_nodes; -		} lk; +                        unsigned char *locked_nodes; +                } lk; -		/* inode read */ +                /* inode read */ -		struct { -			int32_t mask; -			int last_tried;  /* index of the child we tried previously */ -		} access; +                struct { +                        int32_t mask; +                        int last_tried;  /* index of the child we tried previously */ +                } access; -		struct { -			int last_tried; -			ino_t ino; -		} stat; +                struct { +                        int last_tried; +                        ino_t ino; +                } stat; -		struct { -			int last_tried; -			ino_t ino; -		} fstat; +                struct { +                        int last_tried; +                        ino_t ino; +                } fstat; -		struct { -			size_t size; -			int last_tried; +                struct { +                        size_t size; +                        int last_tried;                          ino_t ino; -		} readlink; +                } readlink; -		struct { -			char *name; -			int last_tried; -		} getxattr; +                struct { +                        char *name; +                        int last_tried; +                } getxattr; -		struct { +                struct {                          ino_t ino; -			size_t size; -			off_t offset; -			int last_tried; -		} readv; +                        size_t size; +                        off_t offset; +                        int last_tried; +                } readv; -		/* dir read */ +                /* dir read */ -		struct { -			int success_count; -			int32_t op_ret; -			int32_t op_errno; +                struct { +                        int success_count; +                        int32_t op_ret; +                        int32_t op_errno;                          uint32_t *checksum; -		} opendir; +                } opendir; -		struct { -			int32_t op_ret; -			int32_t op_errno; -			size_t size; -			off_t offset; +                struct { +                        int32_t op_ret; +                        int32_t op_errno; +                        size_t size; +                        off_t offset;                          gf_boolean_t failed; -			int last_tried; -		} readdir; +                        int last_tried; +                } readdir; -		struct { -			int32_t op_ret; -			int32_t op_errno; +                struct { +                        int32_t op_ret; +                        int32_t op_errno; -			size_t size; -			off_t offset; -			int32_t flag; +                        size_t size; +                        off_t offset; +                        int32_t flag; -			int last_tried; -		} getdents; +                        int last_tried; +                } getdents; -		/* inode write */ +                /* inode write */ -		struct { -			ino_t ino; -			struct iatt prebuf; -			struct iatt postbuf; +                struct { +                        ino_t ino; +                        struct iatt prebuf; +                        struct iatt postbuf; -			int32_t op_ret; +                        int32_t op_ret; -			struct iovec *vector; -			struct iobref *iobref; -			int32_t count; -			off_t offset; -		} writev; +                        struct iovec *vector; +                        struct iobref *iobref; +                        int32_t count; +                        off_t offset; +                } writev;                  struct {                          ino_t ino; @@ -448,181 +448,181 @@ typedef struct _afr_local {                          struct iatt postbuf;                  } fsync; -		struct { -			ino_t ino; -			off_t offset; -			struct iatt prebuf; +                struct { +                        ino_t ino; +                        off_t offset; +                        struct iatt prebuf;                          struct iatt postbuf; -		} truncate; +                } truncate; -		struct { -			ino_t ino; -			off_t offset; -			struct iatt prebuf; +                struct { +                        ino_t ino; +                        off_t offset; +                        struct iatt prebuf;                          struct iatt postbuf; -		} ftruncate; +                } ftruncate; -		struct { -			ino_t ino; -			struct iatt in_buf; +                struct { +                        ino_t ino; +                        struct iatt in_buf;                          int32_t valid;                          struct iatt preop_buf;                          struct iatt postop_buf; -		} setattr; +                } setattr; -		struct { -			ino_t ino; -			struct iatt in_buf; +                struct { +                        ino_t ino; +                        struct iatt in_buf;                          int32_t valid;                          struct iatt preop_buf;                          struct iatt postop_buf; -		} fsetattr; +                } fsetattr; -		struct { -			dict_t *dict; -			int32_t flags; -		} setxattr; +                struct { +                        dict_t *dict; +                        int32_t flags; +                } setxattr; -		struct { -			char *name; -		} removexattr; +                struct { +                        char *name; +                } removexattr; -		/* dir write */ +                /* dir write */ -		struct { -			ino_t ino; +                struct { +                        ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			fd_t *fd; +                        fd_t *fd;                          dict_t *params; -			int32_t flags; -			mode_t mode; -			inode_t *inode; -			struct iatt buf; +                        int32_t flags; +                        mode_t mode; +                        inode_t *inode; +                        struct iatt buf;                          struct iatt preparent;                          struct iatt postparent;                          struct iatt read_child_buf; -		} create; +                } create; -		struct { -			ino_t ino; +                struct { +                        ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			dev_t dev; -			mode_t mode; +                        dev_t dev; +                        mode_t mode;                          dict_t *params; -			inode_t *inode; -			struct iatt buf; +                        inode_t *inode; +                        struct iatt buf;                          struct iatt preparent;                          struct iatt postparent;                          struct iatt read_child_buf; -		} mknod; +                } mknod; -		struct { -			ino_t ino; +                struct { +                        ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			int32_t mode; +                        int32_t mode;                          dict_t *params; -			inode_t *inode; -			struct iatt buf; +                        inode_t *inode; +                        struct iatt buf;                          struct iatt read_child_buf;                          struct iatt preparent;                          struct iatt postparent; -		} mkdir; +                } mkdir; -		struct { +                struct {                          ino_t parent_ino; -			int32_t op_ret; -			int32_t op_errno; +                        int32_t op_ret; +                        int32_t op_errno;                          struct iatt preparent;                          struct iatt postparent; -		} unlink; +                } unlink; -		struct { +                struct {                          int   flags;                          ino_t parent_ino; -			int32_t op_ret; -			int32_t op_errno; +                        int32_t op_ret; +                        int32_t op_errno;                          struct iatt preparent;                          struct iatt postparent; -		} rmdir; +                } rmdir; -		struct { +                struct {                          ino_t oldparent_ino;                          ino_t newparent_ino; -			ino_t ino; -			struct iatt buf; +                        ino_t ino; +                        struct iatt buf;                          struct iatt read_child_buf;                          struct iatt preoldparent;                          struct iatt prenewparent;                          struct iatt postoldparent;                          struct iatt postnewparent; -		} rename; +                } rename; -		struct { -			ino_t ino; +                struct { +                        ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			inode_t *inode; -			struct iatt buf; +                        inode_t *inode; +                        struct iatt buf;                          struct iatt read_child_buf;                          struct iatt preparent;                          struct iatt postparent; -		} link; +                } link; -		struct { -			ino_t ino; +                struct { +                        ino_t ino;                          uint64_t gen;                          ino_t parent_ino; -			inode_t *inode; +                        inode_t *inode;                          dict_t *params; -			struct iatt buf; +                        struct iatt buf;                          struct iatt read_child_buf; -			char *linkpath; +                        char *linkpath;                          struct iatt preparent;                          struct iatt postparent; -		} symlink; +                } symlink; -		struct { -			int32_t flags; -			dir_entry_t *entries; -			int32_t count; -		} setdents; -	} cont; +                struct { +                        int32_t flags; +                        dir_entry_t *entries; +                        int32_t count; +                } setdents; +        } cont; -	struct { -		off_t start, len; +        struct { +                off_t start, len; -		char *basename; -		char *new_basename; +                char *basename; +                char *new_basename; -		loc_t parent_loc; -		loc_t new_parent_loc; +                loc_t parent_loc; +                loc_t new_parent_loc; -		afr_transaction_type type; +                afr_transaction_type type; -		int success_count; -		int erase_pending; -		int failure_count; +                int success_count; +                int erase_pending; +                int failure_count; -		int last_tried; -		int32_t *child_errno; +                int last_tried; +                int32_t *child_errno; -		call_frame_t *main_frame; +                call_frame_t *main_frame; -		int (*fop) (call_frame_t *frame, xlator_t *this); +                int (*fop) (call_frame_t *frame, xlator_t *this); -		int (*done) (call_frame_t *frame, xlator_t *this); +                int (*done) (call_frame_t *frame, xlator_t *this); -		int (*resume) (call_frame_t *frame, xlator_t *this); +                int (*resume) (call_frame_t *frame, xlator_t *this); -		int (*unwind) (call_frame_t *frame, xlator_t *this); +                int (*unwind) (call_frame_t *frame, xlator_t *this);                  /* post-op hook */ -	} transaction; +        } transaction; -	afr_self_heal_t self_heal; +        afr_self_heal_t self_heal;          struct marker_str     marker;  } afr_local_t; @@ -649,22 +649,22 @@ typedef struct {  /* try alloc and if it fails, goto label */ -#define ALLOC_OR_GOTO(var, type, label) do {                     \ -		var = GF_CALLOC (sizeof (type), 1,               \ -                                 gf_afr_mt_##type);              \ -		if (!var) {                                      \ -			gf_log (this->name, GF_LOG_ERROR,        \ -				"out of memory :(");             \ -			op_errno = ENOMEM;                       \ -			goto label;                              \ -		}                                                \ -	} while (0); +#define ALLOC_OR_GOTO(var, type, label) do {                    \ +                var = GF_CALLOC (sizeof (type), 1,              \ +                                 gf_afr_mt_##type);             \ +                if (!var) {                                     \ +                        gf_log (this->name, GF_LOG_ERROR,       \ +                                "out of memory :(");            \ +                        op_errno = ENOMEM;                      \ +                        goto label;                             \ +                }                                               \ +        } while (0);  /* did a call fail due to a child failing? */ -#define child_went_down(op_ret, op_errno) (((op_ret) < 0) &&	      \ -					   ((op_errno == ENOTCONN) || \ -					    (op_errno == EBADFD))) +#define child_went_down(op_ret, op_errno) (((op_ret) < 0) &&            \ +                                           ((op_errno == ENOTCONN) ||   \ +                                            (op_errno == EBADFD)))  #define afr_fop_failed(op_ret, op_errno) ((op_ret) == -1) @@ -774,42 +774,42 @@ afr_cleanup_fd_ctx (xlator_t *this, fd_t *fd);  int  afr_openfd_flush (call_frame_t *frame, xlator_t *this, fd_t *fd); -#define AFR_STACK_UNWIND(fop, frame, params ...)        \ -	do {						\ -		afr_local_t *__local = NULL;		\ -		xlator_t    *__this = NULL;		\ -                if (frame) {                            \ -                        __local = frame->local;		\ -                        __this = frame->this;           \ -                        frame->local = NULL;            \ +#define AFR_STACK_UNWIND(fop, frame, params ...)                \ +        do {                                                    \ +                afr_local_t *__local = NULL;                    \ +                xlator_t    *__this = NULL;                     \ +                if (frame) {                                    \ +                        __local = frame->local;                 \ +                        __this = frame->this;                   \ +                        frame->local = NULL;                    \                  }                                               \ -		STACK_UNWIND_STRICT (fop, frame, params);       \ -		afr_local_cleanup (__local, __this);            \ -		GF_FREE (__local);				\ +                STACK_UNWIND_STRICT (fop, frame, params);       \ +                afr_local_cleanup (__local, __this);            \ +                GF_FREE (__local);                              \          } while (0); -#define AFR_STACK_DESTROY(frame)			\ -	do {						\ -		afr_local_t *__local = NULL;		\ -		xlator_t    *__this = NULL;		\ -		__local = frame->local;			\ -		__this = frame->this;			\ -		frame->local = NULL;                    \ -		STACK_DESTROY (frame->root);		\ -		afr_local_cleanup (__local, __this);	\ -		GF_FREE (__local);			\ +#define AFR_STACK_DESTROY(frame)                        \ +        do {                                            \ +                afr_local_t *__local = NULL;            \ +                xlator_t    *__this = NULL;             \ +                __local = frame->local;                 \ +                __this = frame->this;                   \ +                frame->local = NULL;                    \ +                STACK_DESTROY (frame->root);            \ +                afr_local_cleanup (__local, __this);    \ +                GF_FREE (__local);                      \          } while (0);  /* allocate and return a string that is the basename of argument */  static inline char *  AFR_BASENAME (const char *str)  { -	char *__tmp_str = NULL; -	char *__basename_str = NULL; -	__tmp_str = gf_strdup (str); -	__basename_str = gf_strdup (basename (__tmp_str)); -	GF_FREE (__tmp_str); -	return __basename_str; +        char *__tmp_str = NULL; +        char *__basename_str = NULL; +        __tmp_str = gf_strdup (str); +        __basename_str = gf_strdup (basename (__tmp_str)); +        GF_FREE (__tmp_str); +        return __basename_str;  }  /* initialize local_t */ @@ -818,35 +818,35 @@ AFR_LOCAL_INIT (afr_local_t *local, afr_private_t *priv)  {          int  child_up_count = 0; -	local->child_up = GF_CALLOC (sizeof (*local->child_up), +        local->child_up = GF_CALLOC (sizeof (*local->child_up),                                       priv->child_count,                                       gf_afr_mt_char); -	if (!local->child_up) { -		return -ENOMEM; -	} +        if (!local->child_up) { +                return -ENOMEM; +        } -	memcpy (local->child_up, priv->child_up, -		sizeof (*local->child_up) * priv->child_count); +        memcpy (local->child_up, priv->child_up, +                sizeof (*local->child_up) * priv->child_count);          child_up_count = afr_up_children_count (priv->child_count, local->child_up);          if (priv->optimistic_change_log && child_up_count == priv->child_count)                  local->optimistic_change_log = 1; -	local->call_count = afr_up_children_count (priv->child_count, local->child_up); -	if (local->call_count == 0) -		return -ENOTCONN; +        local->call_count = afr_up_children_count (priv->child_count, local->child_up); +        if (local->call_count == 0) +                return -ENOTCONN; -	local->transaction.erase_pending = 1; +        local->transaction.erase_pending = 1; -	local->op_ret = -1; -	local->op_errno = EUCLEAN; +        local->op_ret = -1; +        local->op_errno = EUCLEAN;          local->internal_lock.lock_op_ret   = -1;          local->internal_lock.lock_op_errno = EUCLEAN; -	return 0; +        return 0;  } @@ -857,23 +857,23 @@ AFR_LOCAL_INIT (afr_local_t *local, afr_private_t *priv)  static inline int  afr_first_up_child (afr_private_t *priv)  { -	xlator_t ** children = NULL; -	int         ret      = -1; -	int         i        = 0; - -	LOCK (&priv->lock); -	{ -		children = priv->children; -		for (i = 0; i < priv->child_count; i++) { -			if (priv->child_up[i]) { -				ret = i; -				break; -			} -		} -	} -	UNLOCK (&priv->lock); - -	return ret; +        xlator_t ** children = NULL; +        int         ret      = -1; +        int         i        = 0; + +        LOCK (&priv->lock); +        { +                children = priv->children; +                for (i = 0; i < priv->child_count; i++) { +                        if (priv->child_up[i]) { +                                ret = i; +                                break; +                        } +                } +        } +        UNLOCK (&priv->lock); + +        return ret;  } @@ -884,20 +884,20 @@ afr_transaction_local_init (afr_local_t *local, afr_private_t *priv)          local->first_up_child = afr_first_up_child (priv); -	local->child_errno = GF_CALLOC (sizeof (*local->child_errno), -				        priv->child_count, +        local->child_errno = GF_CALLOC (sizeof (*local->child_errno), +                                        priv->child_count,                                          gf_afr_mt_int32_t); -	if (!local->child_errno) { -		return -ENOMEM; -	} +        if (!local->child_errno) { +                return -ENOMEM; +        } -	local->pending = GF_CALLOC (sizeof (*local->pending), +        local->pending = GF_CALLOC (sizeof (*local->pending),                                      priv->child_count,                                      gf_afr_mt_int32_t); -	if (!local->pending) { -		return -ENOMEM; -	} +        if (!local->pending) { +                return -ENOMEM; +        }          for (i = 0; i < priv->child_count; i++) {                  local->pending[i] = GF_CALLOC (sizeof (*local->pending[i]), @@ -907,37 +907,37 @@ afr_transaction_local_init (afr_local_t *local, afr_private_t *priv)                          return -ENOMEM;          } -	local->internal_lock.inode_locked_nodes = +        local->internal_lock.inode_locked_nodes =                  GF_CALLOC (sizeof (*local->internal_lock.inode_locked_nodes),                             priv->child_count,                             gf_afr_mt_char); -	local->internal_lock.entry_locked_nodes = +        local->internal_lock.entry_locked_nodes =                  GF_CALLOC (sizeof (*local->internal_lock.entry_locked_nodes),                             priv->child_count,                             gf_afr_mt_char); -	local->internal_lock.locked_nodes = +        local->internal_lock.locked_nodes =                  GF_CALLOC (sizeof (*local->internal_lock.locked_nodes),                             priv->child_count,                             gf_afr_mt_char); -	local->internal_lock.lower_locked_nodes +        local->internal_lock.lower_locked_nodes                  = GF_CALLOC (sizeof (*local->internal_lock.lower_locked_nodes),                               priv->child_count,                               gf_afr_mt_char); -	local->transaction.child_errno = GF_CALLOC (sizeof (*local->transaction.child_errno), -					            priv->child_count, +        local->transaction.child_errno = GF_CALLOC (sizeof (*local->transaction.child_errno), +                                                    priv->child_count,                                                      gf_afr_mt_int32_t);          local->internal_lock.transaction_lk_type = AFR_TRANSACTION_LK; -	return 0; +        return 0;  }  int32_t  afr_marker_getxattr (call_frame_t *frame, xlator_t *this, -              loc_t *loc, const char *name,afr_local_t *local, afr_private_t *priv ); +                     loc_t *loc, const char *name,afr_local_t *local, afr_private_t *priv );  #endif /* __AFR_H__ */  | 
