diff options
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 4212 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 222 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-diskusage.c | 108 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-hashfn.c | 74 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-helper.c | 300 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 814 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-linkfile.c | 296 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-mem-types.h | 34 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-rename.c | 890 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-selfheal.c | 730 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht.c | 304 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/nufa.c | 666 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/switch.c | 812 | 
13 files changed, 4728 insertions, 4734 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 40dbbe54427..2f976823933 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1,20 +1,20 @@  /* -   Copyright (c) 2009-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) 2009-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/>.  */ @@ -45,40 +45,40 @@  int  dht_lookup_selfheal_cbk (call_frame_t *frame, void *cookie, -			 xlator_t *this, -			 int op_ret, int op_errno) +                         xlator_t *this, +                         int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; -	dht_layout_t *layout = NULL; -	int           ret = 0; +        dht_local_t  *local = NULL; +        dht_layout_t *layout = NULL; +        int           ret = 0; -	local = frame->local; -	ret = op_ret; +        local = frame->local; +        ret = op_ret;          FRAME_SU_UNDO (frame, dht_local_t); -	if (ret == 0) { -		layout = local->selfheal.layout; -		ret = dht_layout_set (this, local->inode, layout); +        if (ret == 0) { +                layout = local->selfheal.layout; +                ret = dht_layout_set (this, local->inode, layout); -		if (local->ia_ino) { -			local->stbuf.ia_ino = local->ia_ino; -		} else { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not find hashed subvolume for %s", -				local->loc.path); -		} +                if (local->ia_ino) { +                        local->stbuf.ia_ino = local->ia_ino; +                } else { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not find hashed subvolume for %s", +                                local->loc.path); +                }                  if (local->loc.parent)                          local->postparent.ia_ino = local->loc.parent->ino; -	} +        }          WIPE (&local->postparent); -	DHT_STACK_UNWIND (lookup, frame, ret, local->op_errno, local->inode, -			  &local->stbuf, local->xattr, &local->postparent); +        DHT_STACK_UNWIND (lookup, frame, ret, local->op_errno, local->inode, +                          &local->stbuf, local->xattr, &local->postparent); -	return 0; +        return 0;  } @@ -88,19 +88,19 @@ dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                      inode_t *inode, struct iatt *stbuf, dict_t *xattr,                      struct iatt *postparent)  { -	dht_conf_t   *conf                    = NULL; +        dht_conf_t   *conf                    = NULL;          dht_local_t  *local                   = NULL;          int           this_call_cnt           = 0;          call_frame_t *prev                    = NULL; -	dht_layout_t *layout                  = NULL; -	int           ret                     = 0; -	int           is_dir                  = 0; +        dht_layout_t *layout                  = NULL; +        int           ret                     = 0; +        int           is_dir                  = 0; -	conf  = this->private; +        conf  = this->private;          local = frame->local;          prev  = cookie; -	layout = local->layout; +        layout = local->layout;          if (!op_ret && uuid_is_null (local->gfid))                  memcpy (local->gfid, stbuf->ia_gfid, 16); @@ -108,45 +108,45 @@ dht_lookup_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          LOCK (&frame->lock);          {                  /* TODO: assert equal mode on stbuf->st_mode and -		   local->stbuf->st_mode +                   local->stbuf->st_mode -		   else mkdir/chmod/chown and fix -		*/ -		ret = dht_layout_merge (this, layout, prev->this, -					op_ret, op_errno, xattr); +                   else mkdir/chmod/chown and fix +                */ +                ret = dht_layout_merge (this, layout, prev->this, +                                        op_ret, op_errno, xattr); -		if (op_ret == -1) { -			local->op_errno = ENOENT; -			gf_log (this->name, GF_LOG_DEBUG, -				"lookup of %s on %s returned error (%s)", -				local->loc.path, prev->this->name, -				strerror (op_errno)); +                if (op_ret == -1) { +                        local->op_errno = ENOENT; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "lookup of %s on %s returned error (%s)", +                                local->loc.path, prev->this->name, +                                strerror (op_errno)); -			goto unlock; -		} +                        goto unlock; +                } - 		is_dir = check_is_dir (inode, stbuf, xattr); - 		if (!is_dir) { +                is_dir = check_is_dir (inode, stbuf, xattr); +                if (!is_dir) {                          gf_log (this->name, GF_LOG_DEBUG,                                  "lookup of %s on %s returned non dir 0%o",                                  local->loc.path, prev->this->name,                                  stbuf->ia_type);                          local->need_selfheal = 1; - 			goto unlock; +                        goto unlock;                  } - 		local->op_ret = 0; - 		if (local->xattr == NULL) - 			local->xattr = dict_ref (xattr); - 		if (local->inode == NULL) - 			local->inode = inode_ref (inode); +                local->op_ret = 0; +                if (local->xattr == NULL) +                        local->xattr = dict_ref (xattr); +                if (local->inode == NULL) +                        local->inode = inode_ref (inode); -		dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); +                dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);                  dht_iatt_merge (this, &local->postparent, postparent,                                  prev->this);                  if (prev->this == dht_first_up_subvol (this)) { -			local->ia_ino = local->stbuf.ia_ino; +                        local->ia_ino = local->stbuf.ia_ino;                  }          } @@ -163,44 +163,44 @@ unlock:                          return 0;                  } -		if (local->op_ret == 0) { -			ret = dht_layout_normalize (this, &local->loc, layout); +                if (local->op_ret == 0) { +                        ret = dht_layout_normalize (this, &local->loc, layout); -			if (ret != 0) { -				gf_log (this->name, GF_LOG_DEBUG, -					"fixing assignment on %s", -					local->loc.path); -				goto selfheal; -			} +                        if (ret != 0) { +                                gf_log (this->name, GF_LOG_DEBUG, +                                        "fixing assignment on %s", +                                        local->loc.path); +                                goto selfheal; +                        } -			dht_layout_set (this, local->inode, layout); +                        dht_layout_set (this, local->inode, layout); -			if (local->ia_ino) { -				local->stbuf.ia_ino = local->ia_ino; -			} else { -				gf_log (this->name, GF_LOG_DEBUG, -					"could not find hashed subvol for %s", -					local->loc.path); -			} +                        if (local->ia_ino) { +                                local->stbuf.ia_ino = local->ia_ino; +                        } else { +                                gf_log (this->name, GF_LOG_DEBUG, +                                        "could not find hashed subvol for %s", +                                        local->loc.path); +                        }                          if (local->loc.parent)                                  local->postparent.ia_ino =                                          local->loc.parent->ino; -		} +                } -		DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, -				  local->inode, &local->stbuf, local->xattr, +                DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, +                                  local->inode, &local->stbuf, local->xattr,                                    &local->postparent);          } -	return 0; +        return 0;  selfheal:          FRAME_SU_DO (frame, dht_local_t); -	ret = dht_selfheal_directory (frame, dht_lookup_selfheal_cbk, -				      &local->loc, layout); +        ret = dht_selfheal_directory (frame, dht_lookup_selfheal_cbk, +                                      &local->loc, layout); -	return 0; +        return 0;  }  int @@ -209,33 +209,33 @@ dht_lookup_root_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                           inode_t *inode, struct iatt *stbuf, dict_t *xattr,                           struct iatt *postparent)  { -	dht_conf_t   *conf                    = NULL; +        dht_conf_t   *conf                    = NULL;          dht_local_t  *local                   = NULL;          int           this_call_cnt           = 0;          call_frame_t *prev                    = NULL; -	dht_layout_t *layout                  = NULL; -	int           ret                     = 0; -	int           is_dir                  = 0; +        dht_layout_t *layout                  = NULL; +        int           ret                     = 0; +        int           is_dir                  = 0; -	conf  = this->private; +        conf  = this->private;          local = frame->local;          prev  = cookie; -	layout = local->layout; +        layout = local->layout;          LOCK (&frame->lock);          { -		ret = dht_layout_merge (this, layout, prev->this, -					op_ret, op_errno, xattr); - -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_ERROR, -				"lookup of %s on %s returned error (%s)", -				local->loc.path, prev->this->name, -				strerror (op_errno)); -			goto unlock; -		} +                ret = dht_layout_merge (this, layout, prev->this, +                                        op_ret, op_errno, xattr); + +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_ERROR, +                                "lookup of %s on %s returned error (%s)", +                                local->loc.path, prev->this->name, +                                strerror (op_errno)); +                        goto unlock; +                }                  is_dir = check_is_dir (inode, stbuf, xattr);                  if (!is_dir) { @@ -252,10 +252,10 @@ dht_lookup_root_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  if (local->inode == NULL)                          local->inode = inode_ref (inode); -		dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); +                dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);                  if (prev->this == dht_first_up_subvol (this)) { -			local->ia_ino = local->stbuf.ia_ino; +                        local->ia_ino = local->stbuf.ia_ino;                  }          } @@ -266,31 +266,31 @@ unlock:          this_call_cnt = dht_frame_return (frame);          if (is_last_call (this_call_cnt)) { -		if (local->op_ret == 0) { -			ret = dht_layout_normalize (this, &local->loc, layout); -			if (ret != 0) { -				gf_log (this->name, GF_LOG_INFO, -					"fixing assignment on %s", -					local->loc.path); -			} +                if (local->op_ret == 0) { +                        ret = dht_layout_normalize (this, &local->loc, layout); +                        if (ret != 0) { +                                gf_log (this->name, GF_LOG_INFO, +                                        "fixing assignment on %s", +                                        local->loc.path); +                        } -			dht_layout_set (this, local->inode, layout); -		} +                        dht_layout_set (this, local->inode, layout); +                } -		DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, -				  local->inode, &local->stbuf, local->xattr, +                DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, +                                  local->inode, &local->stbuf, local->xattr,                                    &local->postparent);          } -	return 0; +        return 0;  }  static int  dht_do_fresh_lookup_on_root (xlator_t *this, call_frame_t *frame)  {          dht_local_t  *local    = NULL; -	dht_conf_t   *conf     = NULL; -	int           ret      = -1; +        dht_conf_t   *conf     = NULL; +        int           ret      = -1;          int           call_cnt = 0;          int           i        = 0; @@ -345,25 +345,25 @@ dht_revalidate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          dht_local_t  *local         = NULL;          int           this_call_cnt = 0;          call_frame_t *prev          = NULL; -	dht_layout_t *layout        = NULL; -	dht_conf_t   *conf          = NULL; -	int           ret  = -1; -	int           is_dir = 0; -	int           is_linkfile = 0; +        dht_layout_t *layout        = NULL; +        dht_conf_t   *conf          = NULL; +        int           ret  = -1; +        int           is_dir = 0; +        int           is_linkfile = 0;          unsigned char root_gfid[16] = {0,};          local = frame->local;          prev  = cookie; -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out;          LOCK (&frame->lock);          { -		if (op_ret == -1) { -			local->op_errno = op_errno; +                if (op_ret == -1) { +                        local->op_errno = op_errno; -			if ((op_errno != ENOTCONN)  +                        if ((op_errno != ENOTCONN)                              && (op_errno != ENOENT)                              && (op_errno != ESTALE)) {  				gf_log (this->name, GF_LOG_INFO, @@ -371,87 +371,86 @@ dht_revalidate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  					prev->this->name, local->loc.path,                                          strerror (op_errno));  			} -                                                  if (op_errno == ESTALE) { -                                /* propogate the ESTALE to parent.  +                                /* propogate the ESTALE to parent.                                   * setting local->layout_mismatch would send                                   * ESTALE to parent. */                                  local->layout_mismatch = 1;                          } -			goto unlock; -		} - -		if (stbuf->ia_type != local->inode->ia_type) { -			gf_log (this->name, GF_LOG_INFO, -				"mismatching filetypes 0%o v/s 0%o for %s", -				(stbuf->ia_type), (local->inode->ia_type), -				local->loc.path); - -			local->op_ret = -1; -			local->op_errno = EINVAL; - -			goto unlock; -		} - -		layout = local->layout; -		 -		is_dir = check_is_dir (inode, stbuf, xattr); -		is_linkfile = check_is_linkfile (inode, stbuf, xattr); -		 -		if (is_linkfile) { -			gf_log (this->name, GF_LOG_INFO, -				"linkfile found in revalidate for %s", -				local->loc.path); -			local->layout_mismatch = 1; - -			goto unlock; -		} - -		if (is_dir) { -			ret = dht_layout_dir_mismatch (this, layout, -						       prev->this, &local->loc, -						       xattr); -			if (ret != 0) { -				gf_log (this->name, GF_LOG_INFO, -					"mismatching layouts for %s",  -					local->loc.path); -			 -				local->layout_mismatch = 1; +                        goto unlock; +                } -				goto unlock; -			} -		}  -		 -		dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); +                if (stbuf->ia_type != local->inode->ia_type) { +                        gf_log (this->name, GF_LOG_INFO, +                                "mismatching filetypes 0%o v/s 0%o for %s", +                                (stbuf->ia_type), (local->inode->ia_type), +                                local->loc.path); + +                        local->op_ret = -1; +                        local->op_errno = EINVAL; + +                        goto unlock; +                } + +                layout = local->layout; + +                is_dir = check_is_dir (inode, stbuf, xattr); +                is_linkfile = check_is_linkfile (inode, stbuf, xattr); + +                if (is_linkfile) { +                        gf_log (this->name, GF_LOG_INFO, +                                "linkfile found in revalidate for %s", +                                local->loc.path); +                        local->layout_mismatch = 1; + +                        goto unlock; +                } + +                if (is_dir) { +                        ret = dht_layout_dir_mismatch (this, layout, +                                                       prev->this, &local->loc, +                                                       xattr); +                        if (ret != 0) { +                                gf_log (this->name, GF_LOG_INFO, +                                        "mismatching layouts for %s", +                                        local->loc.path); + +                                local->layout_mismatch = 1; + +                                goto unlock; +                        } +                } + +                dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);                  dht_iatt_merge (this, &local->postparent, postparent,                                  prev->this); -		 -		local->op_ret = 0; -		local->stbuf.ia_ino = local->ia_ino; + +                local->op_ret = 0; +                local->stbuf.ia_ino = local->ia_ino;                  if (local->loc.parent)                          local->postparent.ia_ino = local->loc.parent->ino; -		if (!local->xattr) -			local->xattr = dict_ref (xattr); -	} +                if (!local->xattr) +                        local->xattr = dict_ref (xattr); +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock);  out:          this_call_cnt = dht_frame_return (frame);          if (is_last_call (this_call_cnt)) { -		if (!IA_ISDIR (local->stbuf.ia_type) -		    && (local->hashed_subvol != local->cached_subvol) -		    && (local->stbuf.ia_nlink == 1) +                if (!IA_ISDIR (local->stbuf.ia_type) +                    && (local->hashed_subvol != local->cached_subvol) +                    && (local->stbuf.ia_nlink == 1)                      && (conf && conf->unhashed_sticky_bit)) { -			local->stbuf.ia_prot.sticky = 1; -		} +                        local->stbuf.ia_prot.sticky = 1; +                } -		if (local->layout_mismatch) { -			local->op_ret = -1; -			local->op_errno = ESTALE; +                if (local->layout_mismatch) { +                        local->op_ret = -1; +                        local->op_errno = ESTALE;                          /* Because for 'root' inode, there is no FRESH lookup                           * sent from FUSE layer upon ESTALE, we need to handle @@ -462,14 +461,14 @@ out:                                  dht_do_fresh_lookup_on_root (this, frame);                                  return 0;                          } -		} +                }                  WIPE (&local->postparent);                  DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, -				  local->inode, &local->stbuf, local->xattr, +                                  local->inode, &local->stbuf, local->xattr,                                    &local->postparent); -	} +        }          return 0;  } @@ -477,19 +476,19 @@ out:  int  dht_lookup_linkfile_create_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,                                  inode_t *inode, struct iatt *stbuf,                                  struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	xlator_t     *cached_subvol = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local = NULL; +        xlator_t     *cached_subvol = NULL; +        dht_conf_t   *conf = NULL;          int           ret = -1; -	local = frame->local; -	cached_subvol = local->cached_subvol; -	conf = this->private; +        local = frame->local; +        cached_subvol = local->cached_subvol; +        conf = this->private;          ret = dht_layout_preset (this, local->cached_subvol, inode);          if (ret < 0) { @@ -501,11 +500,11 @@ dht_lookup_linkfile_create_cbk (call_frame_t *frame, void *cookie,                  goto unwind;          } -	local->op_ret = 0; -	if ((local->stbuf.ia_nlink == 1) -	    && (conf && conf->unhashed_sticky_bit)) { -		local->stbuf.ia_prot.sticky = 1; -	} +        local->op_ret = 0; +        if ((local->stbuf.ia_nlink == 1) +            && (conf && conf->unhashed_sticky_bit)) { +                local->stbuf.ia_prot.sticky = 1; +        }          if (local->loc.parent)                  local->postparent.ia_ino = local->loc.parent->ino; @@ -513,62 +512,62 @@ dht_lookup_linkfile_create_cbk (call_frame_t *frame, void *cookie,  unwind:          WIPE (&local->postparent); -	DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, -			  local->inode, &local->stbuf, local->xattr, +        DHT_STACK_UNWIND (lookup, frame, local->op_ret, local->op_errno, +                          local->inode, &local->stbuf, local->xattr,                            &local->postparent); -	return 0; +        return 0;  }  int  dht_lookup_everywhere_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)  { -	dht_conf_t   *conf          = NULL; +        dht_conf_t   *conf          = NULL;          dht_local_t  *local         = NULL;          int           this_call_cnt = 0;          call_frame_t *prev          = NULL; -	int           is_linkfile   = 0; -	int           is_dir        = 0; -	xlator_t     *subvol        = NULL; -	loc_t        *loc           = NULL; -	xlator_t     *link_subvol   = NULL; -	xlator_t     *hashed_subvol = NULL; -	xlator_t     *cached_subvol = NULL; +        int           is_linkfile   = 0; +        int           is_dir        = 0; +        xlator_t     *subvol        = NULL; +        loc_t        *loc           = NULL; +        xlator_t     *link_subvol   = NULL; +        xlator_t     *hashed_subvol = NULL; +        xlator_t     *cached_subvol = NULL;          int           ret = -1; -	conf   = this->private; +        conf   = this->private; -	local  = frame->local; -	loc    = &local->loc; +        local  = frame->local; +        loc    = &local->loc; -	prev   = cookie; -	subvol = prev->this; +        prev   = cookie; +        subvol = prev->this; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			if (op_errno != ENOENT) -				local->op_errno = op_errno; -			goto unlock; -		} +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        if (op_errno != ENOENT) +                                local->op_errno = op_errno; +                        goto unlock; +                }                  if (uuid_is_null (local->gfid))                          memcpy (local->gfid, buf->ia_gfid, 16); -		is_linkfile = check_is_linkfile (inode, buf, xattr); -		is_dir = check_is_dir (inode, buf, xattr); +                is_linkfile = check_is_linkfile (inode, buf, xattr); +                is_dir = check_is_dir (inode, buf, xattr); -		if (is_linkfile) { -			link_subvol = dht_linkfile_subvol (this, inode, buf, -							   xattr); -			gf_log (this->name, GF_LOG_DEBUG, -				"found on %s linkfile %s (-> %s)", -				subvol->name, loc->path, -				link_subvol ? link_subvol->name : "''"); -			goto unlock; -		} +                if (is_linkfile) { +                        link_subvol = dht_linkfile_subvol (this, inode, buf, +                                                           xattr); +                        gf_log (this->name, GF_LOG_DEBUG, +                                "found on %s linkfile %s (-> %s)", +                                subvol->name, loc->path, +                                link_subvol ? link_subvol->name : "''"); +                        goto unlock; +                }                  if (is_dir) {                          local->dir_count++; @@ -588,7 +587,7 @@ dht_lookup_everywhere_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                  gf_log (this->name, GF_LOG_DEBUG,                                          "found on %s file %s",                                          subvol->name, loc->path); -                                 +                                  dht_iatt_merge (this, &local->postparent,                                                  postparent, subvol);                          } else { @@ -598,25 +597,25 @@ dht_lookup_everywhere_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                          subvol->name, local->loc.path);                          }                  } -	} +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	if (is_linkfile) { -		gf_log (this->name, GF_LOG_DEBUG, -			"deleting stale linkfile %s on %s", -			loc->path, subvol->name); -		dht_linkfile_unlink (frame, this, subvol, loc); -	} +        if (is_linkfile) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "deleting stale linkfile %s on %s", +                        loc->path, subvol->name); +                dht_linkfile_unlink (frame, this, subvol, loc); +        } -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		hashed_subvol = local->hashed_subvol; -		cached_subvol = local->cached_subvol; +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                hashed_subvol = local->hashed_subvol; +                cached_subvol = local->cached_subvol;                  if (local->file_count && local->dir_count) {                          gf_log (this->name, GF_LOG_ERROR, -                                "path %s exists as a file on one subvolume "  +                                "path %s exists as a file on one subvolume "                                  "and directory on another. "                                  "Please fix it manually",                                  loc->path); @@ -630,18 +629,18 @@ unlock:                          return 0;                  } -		if (!cached_subvol) { -			DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL, +                if (!cached_subvol) { +                        DHT_STACK_UNWIND (lookup, frame, -1, ENOENT, NULL, NULL, NULL,                                            NULL); -			return 0; -		} +                        return 0; +                }                  if (!hashed_subvol) {                          gf_log (this->name, GF_LOG_DEBUG,                                  "cannot create linkfile file for %s on %s: "                                  "hashed subvolume cannot be found.",                                  loc->path, cached_subvol->name); -                         +                          local->op_ret = 0;                          local->op_errno = 0; @@ -673,41 +672,41 @@ unlock:                          "linking file %s existing on %s to %s (hash)",                          loc->path, cached_subvol->name,                          hashed_subvol->name); -                         -                dht_linkfile_create (frame,  + +                dht_linkfile_create (frame,                                       dht_lookup_linkfile_create_cbk,                                       cached_subvol, hashed_subvol, loc); -	} +        } -	return 0; +        return 0;  }  int  dht_lookup_everywhere (call_frame_t *frame, xlator_t *this, loc_t *loc)  { -	dht_conf_t     *conf = NULL; -	dht_local_t    *local = NULL; -	int             i = 0; -	int             call_cnt = 0; +        dht_conf_t     *conf = NULL; +        dht_local_t    *local = NULL; +        int             i = 0; +        int             call_cnt = 0; -	conf = this->private; -	local = frame->local; +        conf = this->private; +        local = frame->local;          if (!conf)                  goto out; -	call_cnt = conf->subvolume_cnt; -	local->call_cnt = call_cnt; +        call_cnt = conf->subvolume_cnt; +        local->call_cnt = call_cnt; -	if (!local->inode) -		local->inode = inode_ref (loc->inode); +        if (!local->inode) +                local->inode = inode_ref (loc->inode); -	for (i = 0; i < call_cnt; i++) { -		STACK_WIND (frame, dht_lookup_everywhere_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->lookup, -			    loc, local->xattr_req); -	} +        for (i = 0; i < call_cnt; i++) { +                STACK_WIND (frame, dht_lookup_everywhere_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->lookup, +                            loc, local->xattr_req); +        }          return 0;  out: @@ -723,24 +722,24 @@ dht_lookup_linkfile_cbk (call_frame_t *frame, void *cookie,                           struct iatt *postparent)  {          call_frame_t *prev          = NULL; -	dht_local_t  *local         = NULL; -	xlator_t     *subvol        = NULL; -	loc_t        *loc           = NULL; -	dht_conf_t   *conf          = NULL; +        dht_local_t  *local         = NULL; +        xlator_t     *subvol        = NULL; +        loc_t        *loc           = NULL; +        dht_conf_t   *conf          = NULL;          int           ret           = 0;          prev   = cookie; -	subvol = prev->this; -	conf   = this->private; -	local  = frame->local; -	loc    = &local->loc; +        subvol = prev->this; +        conf   = this->private; +        local  = frame->local; +        loc    = &local->loc;          if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"lookup of %s on %s (following linkfile) failed (%s)", -			local->loc.path, subvol->name, strerror (op_errno)); +                gf_log (this->name, GF_LOG_DEBUG, +                        "lookup of %s on %s (following linkfile) failed (%s)", +                        local->loc.path, subvol->name, strerror (op_errno));                  goto err; -	} +        }          if (check_is_dir (inode, stbuf, xattr)) {                  gf_log (this->name, GF_LOG_DEBUG, @@ -756,23 +755,23 @@ dht_lookup_linkfile_cbk (call_frame_t *frame, void *cookie,                  goto err;          } -	if ((stbuf->ia_nlink == 1) -	    && (conf && conf->unhashed_sticky_bit)) { -		stbuf->ia_prot.sticky = 1; -	} +        if ((stbuf->ia_nlink == 1) +            && (conf && conf->unhashed_sticky_bit)) { +                stbuf->ia_prot.sticky = 1; +        }          dht_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino);          if (local->loc.parent)                  postparent->ia_ino = local->loc.parent->ino; -         -	ret = dht_layout_preset (this, prev->this, inode); -	if (ret < 0) { + +        ret = dht_layout_preset (this, prev->this, inode); +        if (ret < 0) {                  gf_log (this->name, GF_LOG_DEBUG,                          "failed to set layout for subvolume %s",                          prev->this->name); -		op_ret   = -1; -		op_errno = EINVAL; -		goto out; -	} +                op_ret   = -1; +                op_errno = EINVAL; +                goto out; +        }  out:          WIPE (postparent); @@ -858,12 +857,12 @@ dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (uuid_is_null (local->gfid) && !op_ret)                  memcpy (local->gfid, stbuf->ia_gfid, 16); -	if (ENTRY_MISSING (op_ret, op_errno)) { +        if (ENTRY_MISSING (op_ret, op_errno)) {                  if (conf->search_unhashed == GF_DHT_LOOKUP_UNHASHED_ON) { -			local->op_errno = ENOENT; -			dht_lookup_everywhere (frame, this, loc); -			return 0; -		} +                        local->op_errno = ENOENT; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0; +                }                  if ((conf->search_unhashed == GF_DHT_LOOKUP_UNHASHED_AUTO) &&                      (loc->parent)) {                          ret = inode_ctx_get (loc->parent, this, &tmp_layout); @@ -874,21 +873,21 @@ dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                  return 0;                          }                  } -	} +        } - 	if (op_ret == 0) { - 		is_dir      = check_is_dir (inode, stbuf, xattr); - 		if (is_dir) { - 			local->inode = inode_ref (inode); - 			local->xattr = dict_ref (xattr); - 		} - 	} +        if (op_ret == 0) { +                is_dir      = check_is_dir (inode, stbuf, xattr); +                if (is_dir) { +                        local->inode = inode_ref (inode); +                        local->xattr = dict_ref (xattr); +                } +        } - 	if (is_dir || (op_ret == -1 && op_errno == ENOTCONN)) { +        if (is_dir || (op_ret == -1 && op_errno == ENOTCONN)) {                  dht_lookup_directory (frame, this, &local->loc);                  return 0; - 	} -  +        } +          if (op_ret == -1)                  goto out; @@ -898,22 +897,22 @@ dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (!is_dir && !is_linkfile) {                  /* non-directory and not a linkfile */ -		dht_itransform (this, prev->this, stbuf->ia_ino, -				&stbuf->ia_ino); +                dht_itransform (this, prev->this, stbuf->ia_ino, +                                &stbuf->ia_ino);                  if (loc->parent)                          postparent->ia_ino = loc->parent->ino; -		ret = dht_layout_preset (this, prev->this, inode); -		if (ret < 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not set pre-set layout for subvolume %s", -				prev->this->name); -			op_ret   = -1; -			op_errno = EINVAL; -			goto out; -		} -                goto out;  -	} +                ret = dht_layout_preset (this, prev->this, inode); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not set pre-set layout for subvolume %s", +                                prev->this->name); +                        op_ret   = -1; +                        op_errno = EINVAL; +                        goto out; +                } +                goto out; +        }          if (is_linkfile) {                  subvol = dht_linkfile_subvol (this, inode, stbuf, xattr); @@ -922,21 +921,21 @@ dht_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          gf_log (this->name, GF_LOG_DEBUG,                                  "linkfile not having link subvolume. path=%s",                                  loc->path); -			dht_lookup_everywhere (frame, this, loc); -			return 0; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0;                  } -		STACK_WIND (frame, dht_lookup_linkfile_cbk, -			    subvol, subvol->fops->lookup, -			    &local->loc, local->xattr_req); +                STACK_WIND (frame, dht_lookup_linkfile_cbk, +                            subvol, subvol->fops->lookup, +                            &local->loc, local->xattr_req);          }          return 0;  out: -        /*  -         * FIXME: postparent->ia_size and postparent->st_blocks do not have  -         * correct values. since, postparent corresponds to a directory these  +        /* +         * FIXME: postparent->ia_size and postparent->st_blocks do not have +         * correct values. since, postparent corresponds to a directory these           * two members should have values equal to sum of corresponding values           * from each of the subvolume. See dht_iatt_merge for reference.           */ @@ -957,12 +956,12 @@ dht_lookup (call_frame_t *frame, xlator_t *this,          xlator_t     *hashed_subvol = NULL;          xlator_t     *cached_subvol = NULL;          dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_conf_t   *conf = NULL;          int           ret    = -1;          int           op_errno = -1; -	dht_layout_t *layout = NULL; -	int           i = 0; -	int           call_cnt = 0; +        dht_layout_t *layout = NULL; +        int           i = 0; +        int           call_cnt = 0;          VALIDATE_OR_GOTO (frame, err); @@ -971,17 +970,17 @@ dht_lookup (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	conf = this->private; +        conf = this->private;          if (!conf)                  goto err;          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        }          if (!dht_filter_loc_subvol_key (this, loc, &local->loc,                                          &hashed_subvol)) {                  ret = loc_dup (loc, &local->loc); @@ -994,21 +993,21 @@ dht_lookup (call_frame_t *frame, xlator_t *this,                  }          } -	if (xattr_req) { -		local->xattr_req = dict_ref (xattr_req); -	} else { -		local->xattr_req = dict_new (); -	} +        if (xattr_req) { +                local->xattr_req = dict_ref (xattr_req); +        } else { +                local->xattr_req = dict_new (); +        }          if (!hashed_subvol)                  hashed_subvol = dht_subvol_get_hashed (this, loc); -	cached_subvol = dht_subvol_get_cached (this, loc->inode); +        cached_subvol = dht_subvol_get_cached (this, loc->inode); -	local->cached_subvol = cached_subvol; -	local->hashed_subvol = hashed_subvol; +        local->cached_subvol = cached_subvol; +        local->hashed_subvol = hashed_subvol;          if (is_revalidate (loc)) { -		local->layout = layout = dht_layout_get (this, loc->inode); +                local->layout = layout = dht_layout_get (this, loc->inode);                  if (!layout) {                          gf_log (this->name, GF_LOG_DEBUG, @@ -1018,27 +1017,27 @@ dht_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		if (layout->gen && (layout->gen < conf->gen)) { -			gf_log (this->name, GF_LOG_TRACE, -				"incomplete layout failure for path=%s", -				loc->path); +                if (layout->gen && (layout->gen < conf->gen)) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "incomplete layout failure for path=%s", +                                loc->path);                          dht_layout_unref (this, local->layout);                          local->layout = NULL; -			goto do_fresh_lookup; -		} - -		local->inode    = inode_ref (loc->inode); -		local->ia_ino   = loc->inode->ino; -		 -		local->call_cnt = 1; -		call_cnt = local->call_cnt; -		 -		/* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute, -		 *       revalidates directly go to the cached-subvolume. -		 */ -		ret = dict_set_uint32 (local->xattr_req,  -				       "trusted.glusterfs.dht", 4 * 4); +                        goto do_fresh_lookup; +                } + +                local->inode    = inode_ref (loc->inode); +                local->ia_ino   = loc->inode->ino; + +                local->call_cnt = 1; +                call_cnt = local->call_cnt; + +                /* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute, +                 *       revalidates directly go to the cached-subvolume. +                 */ +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4);                  subvol = local->cached_subvol; @@ -1048,37 +1047,37 @@ dht_lookup (call_frame_t *frame, xlator_t *this,          } else {          do_fresh_lookup: -		/* TODO: remove the hard-coding */ -		ret = dict_set_uint32 (local->xattr_req,  -				       "trusted.glusterfs.dht", 4 * 4); +                /* TODO: remove the hard-coding */ +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4); -		ret = dict_set_uint32 (local->xattr_req,  -				       "trusted.glusterfs.dht.linkto", 256); +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht.linkto", 256);                  if (!hashed_subvol) { -			gf_log (this->name, GF_LOG_DEBUG, -				"no subvolume in layout for path=%s, " -				"checking on all the subvols to see if " -				"it is a directory", loc->path); - 			call_cnt        = conf->subvolume_cnt; - 			local->call_cnt = call_cnt; - 			 - 			local->layout = dht_layout_new (this, +                        gf_log (this->name, GF_LOG_DEBUG, +                                "no subvolume in layout for path=%s, " +                                "checking on all the subvols to see if " +                                "it is a directory", loc->path); +                        call_cnt        = conf->subvolume_cnt; +                        local->call_cnt = call_cnt; + +                        local->layout = dht_layout_new (this,                                                          conf->subvolume_cnt); - 			if (!local->layout) { - 				op_errno = ENOMEM; - 				gf_log (this->name, GF_LOG_ERROR, - 					"Out of memory"); - 				goto err; - 			} - -			for (i = 0; i < call_cnt; i++) { - 				STACK_WIND (frame, dht_lookup_dir_cbk, - 					    conf->subvolumes[i], - 					    conf->subvolumes[i]->fops->lookup, - 					    &local->loc, local->xattr_req); - 			} - 			return 0; +                        if (!local->layout) { +                                op_errno = ENOMEM; +                                gf_log (this->name, GF_LOG_ERROR, +                                        "Out of memory"); +                                goto err; +                        } + +                        for (i = 0; i < call_cnt; i++) { +                                STACK_WIND (frame, dht_lookup_dir_cbk, +                                            conf->subvolumes[i], +                                            conf->subvolumes[i]->fops->lookup, +                                            &local->loc, local->xattr_req); +                        } +                        return 0;                  }                  STACK_WIND (frame, dht_lookup_cbk, @@ -1089,7 +1088,7 @@ dht_lookup (call_frame_t *frame, xlator_t *this,          return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; +        op_errno = (op_errno == -1) ? errno : op_errno;          DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL);          return 0;  } @@ -1097,45 +1096,45 @@ err:  int  dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	      int op_ret, int op_errno, struct iatt *prebuf, -              struct iatt *postbuf) +                  int op_ret, int op_errno, struct iatt *prebuf, +                  struct iatt *postbuf)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev = cookie; +        local = frame->local; +        prev = cookie; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno;                          local->op_ret = -1; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                }                  dht_iatt_merge (this, &local->prebuf, prebuf, prev->this); -		dht_iatt_merge (this, &local->stbuf, postbuf, prev->this); +                dht_iatt_merge (this, &local->stbuf, postbuf, prev->this); -		if (local->inode) { -			local->stbuf.ia_ino = local->inode->ino; +                if (local->inode) { +                        local->stbuf.ia_ino = local->inode->ino;                          local->prebuf.ia_ino = local->inode->ino;                  } -		local->op_ret = 0; -	} +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (truncate, frame, local->op_ret, local->op_errno, -				  &local->prebuf, &local->stbuf); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (truncate, frame, local->op_ret, local->op_errno, +                                  &local->prebuf, &local->stbuf);          return 0;  } @@ -1144,39 +1143,39 @@ unlock:  int  dht_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	      int op_ret, int op_errno, struct iatt *stbuf) +              int op_ret, int op_errno, struct iatt *stbuf)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; - - -	local = frame->local; -	prev = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); -		 -		if (local->inode) -			local->stbuf.ia_ino = local->inode->ino; -		local->op_ret = 0; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; + + +        local = frame->local; +        prev = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); + +                if (local->inode) +                        local->stbuf.ia_ino = local->inode->ino; +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (stat, frame, local->op_ret, local->op_errno, -				  &local->stbuf); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (stat, frame, local->op_ret, local->op_errno, +                                  &local->stbuf);          return 0;  } @@ -1184,13 +1183,13 @@ unlock:  int  dht_stat (call_frame_t *frame, xlator_t *this, -	  loc_t *loc) +          loc_t *loc)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; -	dht_layout_t *layout = NULL; -	int           i = 0; +        dht_local_t  *local = NULL; +        dht_layout_t *layout = NULL; +        int           i = 0;          VALIDATE_OR_GOTO (frame, err); @@ -1200,101 +1199,101 @@ dht_stat (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->path, err); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->layout = layout = dht_layout_get (this, loc->inode); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        local->layout = layout = dht_layout_get (this, loc->inode); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local->inode = inode_ref (loc->inode); -	local->call_cnt = layout->cnt; +        local->inode = inode_ref (loc->inode); +        local->call_cnt = layout->cnt; -	for (i = 0; i < layout->cnt; i++) { -		subvol = layout->list[i].xlator; +        for (i = 0; i < layout->cnt; i++) { +                subvol = layout->list[i].xlator; -		STACK_WIND (frame, dht_attr_cbk, -			    subvol, subvol->fops->stat, -			    loc); -	} +                STACK_WIND (frame, dht_attr_cbk, +                            subvol, subvol->fops->stat, +                            loc); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (stat, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (stat, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_fstat (call_frame_t *frame, xlator_t *this, -	   fd_t *fd) +           fd_t *fd)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; -	dht_layout_t *layout = NULL; -	int           i = 0; +        dht_local_t  *local = NULL; +        dht_layout_t *layout = NULL; +        int           i = 0;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->layout = layout = dht_layout_get (this, fd->inode); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} - -	local->inode    = inode_ref (fd->inode); -	local->call_cnt = layout->cnt;; - -	for (i = 0; i < layout->cnt; i++) { -		subvol = layout->list[i].xlator; -		STACK_WIND (frame, dht_attr_cbk, -			    subvol, subvol->fops->fstat, -			    fd); -	} - -	return 0; +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->layout = layout = dht_layout_get (this, fd->inode); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } + +        local->inode    = inode_ref (fd->inode); +        local->call_cnt = layout->cnt;; + +        for (i = 0; i < layout->cnt; i++) { +                subvol = layout->list[i].xlator; +                STACK_WIND (frame, dht_attr_cbk, +                            subvol, subvol->fops->fstat, +                            fd); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fstat, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_truncate (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, off_t offset) +              loc_t *loc, off_t offset)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err); @@ -1303,82 +1302,82 @@ dht_truncate (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (loc->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (loc->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, dht_truncate_cbk, -		    subvol, subvol->fops->truncate, -		    loc, offset); +        STACK_WIND (frame, dht_truncate_cbk, +                    subvol, subvol->fops->truncate, +                    loc, offset); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  }  int  dht_ftruncate (call_frame_t *frame, xlator_t *this, -	       fd_t *fd, off_t offset) +               fd_t *fd, off_t offset)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (fd->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (fd->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, dht_truncate_cbk, -		    subvol, subvol->fops->ftruncate, -		    fd, offset); +        STACK_WIND (frame, dht_truncate_cbk, +                    subvol, subvol->fops->ftruncate, +                    fd, offset); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  } @@ -1387,35 +1386,35 @@ dht_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  int op_ret, int op_errno, struct iatt *preparent,                  struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev  = NULL; +        dht_local_t  *local = NULL; +        call_frame_t *prev  = NULL; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { +        LOCK (&frame->lock); +        { +                if (op_ret == -1) {                          local->op_ret   = -1; -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                }                  preparent->ia_ino = local->loc.parent->ino;                  postparent->ia_ino = local->loc.parent->ino; -		local->op_ret = 0; +                local->op_ret = 0;                  local->postparent = *postparent;                  local->preparent = *preparent;                  WIPE (&local->postparent);                  WIPE (&local->preparent); -	} +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock);          DHT_STACK_UNWIND (unlink, frame, local->op_ret, local->op_errno,                            &local->preparent, &local->postparent); @@ -1429,28 +1428,28 @@ dht_unlink_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                           int op_ret, int op_errno, struct iatt *preparent,                           struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL;          xlator_t *cached_subvol = NULL; -	local = frame->local; -	prev  = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		local->op_ret = 0; -	} +        local = frame->local; +        prev  = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock);          if (op_ret == -1)                  goto err; @@ -1481,37 +1480,37 @@ int  dht_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,                 int op_errno, struct iatt *prebuf, struct iatt *postbuf)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; - - -	local = frame->local; -	prev = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		local->op_ret = 0; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; + + +        local = frame->local; +        prev = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock);          if (local && (op_ret == 0)) {                  prebuf->ia_ino = local->ia_ino;                  postbuf->ia_ino = local->ia_ino;          } -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (fsync, frame, local->op_ret, local->op_errno, +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (fsync, frame, local->op_ret, local->op_errno,                                    prebuf, postbuf);          return 0; @@ -1521,34 +1520,34 @@ unlock:  int  dht_err_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	     int op_ret, int op_errno) +             int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; - - -	local = frame->local; -	prev = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		local->op_ret = 0; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; + + +        local = frame->local; +        prev = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		DHT_STACK_UNWIND (setxattr, frame, local->op_ret, local->op_errno); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                DHT_STACK_UNWIND (setxattr, frame, local->op_ret, local->op_errno);          }          return 0; @@ -1557,11 +1556,11 @@ unlock:  int  dht_access (call_frame_t *frame, xlator_t *this, -	    loc_t *loc, int32_t mask) +            loc_t *loc, int32_t mask)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err); @@ -1570,41 +1569,41 @@ dht_access (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->call_cnt = 1; +        local->call_cnt = 1; -	STACK_WIND (frame, dht_err_cbk, -		    subvol, subvol->fops->access, -		    loc, mask); +        STACK_WIND (frame, dht_err_cbk, +                    subvol, subvol->fops->access, +                    loc, mask); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (access, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (access, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		  int op_ret, int op_errno, const char *path, struct iatt *sbuf) +                  int op_ret, int op_errno, const char *path, struct iatt *sbuf)  {          dht_local_t *local = NULL; @@ -1628,9 +1627,9 @@ err:  int  dht_readlink (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, size_t size) +              loc_t *loc, size_t size)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; @@ -1640,35 +1639,35 @@ dht_readlink (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        }          local->ia_ino = loc->inode->ino; -  -	STACK_WIND (frame, dht_readlink_cbk, -		    subvol, subvol->fops->readlink, -		    loc, size); -	return 0; +        STACK_WIND (frame, dht_readlink_cbk, +                    subvol, subvol->fops->readlink, +                    loc, size); + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (readlink, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (readlink, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  } @@ -1702,7 +1701,7 @@ int  dht_pathinfo_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                             int op_ret, int op_errno, dict_t *xattr)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          int ret = 0;          int flag = 0;          int this_call_cnt = 0; @@ -1772,7 +1771,7 @@ dht_pathinfo_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          gf_log ("this->name", GF_LOG_ERROR, "Unable to find hashed_subvol for path"                  " %s", local->pathinfo); -       +          DHT_STACK_UNWIND (getxattr, frame, -1, op_errno, dict);          return 0;  } @@ -1801,7 +1800,7 @@ dht_linkinfo_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  dht_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		  int op_ret, int op_errno, dict_t *xattr) +                  int op_ret, int op_errno, dict_t *xattr)  {          int             this_call_cnt = 0;          dht_local_t     *local = NULL; @@ -1835,7 +1834,7 @@ out:  int32_t  dht_getxattr_unwind (call_frame_t *frame, -                        int op_ret, int op_errno, dict_t *dict) +                     int op_ret, int op_errno, dict_t *dict)  {          DHT_STACK_UNWIND (getxattr, frame, op_ret, op_errno, dict);          return 0; @@ -1844,13 +1843,13 @@ dht_getxattr_unwind (call_frame_t *frame,  int  dht_getxattr (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, const char *key) +              loc_t *loc, const char *key)  { -	xlator_t     *subvol        = NULL; -	xlator_t     *hashed_subvol = NULL; -	xlator_t     *cached_subvol = NULL; -	dht_conf_t   *conf          = NULL; -	dht_local_t  *local         = NULL; +        xlator_t     *subvol        = NULL; +        xlator_t     *hashed_subvol = NULL; +        xlator_t     *cached_subvol = NULL; +        dht_conf_t   *conf          = NULL; +        dht_local_t  *local         = NULL;          dht_layout_t *layout        = NULL;          xlator_t     **sub_volumes  = NULL;          int           op_errno      = -1; @@ -1879,7 +1878,7 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,          if (!local) {                  op_errno = ENOMEM;                  gf_log (this->name, GF_LOG_ERROR, -                       "Out of memory"); +                        "Out of memory");                  goto err;          } @@ -1976,7 +1975,7 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,          }          if (key && (!strcmp (GF_XATTR_MARKER_KEY, key)) -                && (-1 == frame->root->pid)) { +            && (-1 == frame->root->pid)) {                  if (loc->inode-> ia_type == IA_IFDIR) {                          cnt = layout->cnt; @@ -2027,7 +2026,7 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,          if (ret == -1) {                  op_errno = ENOMEM;                  gf_log (this->name, GF_LOG_ERROR, -                       "Out of memory"); +                        "Out of memory");                  goto err;          } @@ -2039,7 +2038,7 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,                                  "Out of memory");                          goto err;                  } -        }  +        }          local->layout = layout;          if (loc->inode-> ia_type == IA_IFDIR) { @@ -2050,25 +2049,25 @@ dht_getxattr (call_frame_t *frame, xlator_t *this,          for (i = 0; i < cnt; i++) {                  subvol = layout->list[i].xlator; -	        STACK_WIND (frame, dht_getxattr_cbk, -		            subvol, subvol->fops->getxattr, -		            loc, key); +                STACK_WIND (frame, dht_getxattr_cbk, +                            subvol, subvol->fops->getxattr, +                            loc, key);          } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (getxattr, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (getxattr, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_fsetxattr (call_frame_t *frame, xlator_t *this, -	      fd_t *fd, dict_t *xattr, int flags) +               fd_t *fd, dict_t *xattr, int flags)  { -	xlator_t     *subvol   = NULL; -	dht_local_t  *local    = NULL; +        xlator_t     *subvol   = NULL; +        dht_local_t  *local    = NULL;          int           op_errno = EINVAL;          VALIDATE_OR_GOTO (frame, err); @@ -2076,44 +2075,44 @@ dht_fsetxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (fd, err);          VALIDATE_OR_GOTO (fd->inode, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (fd->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (fd->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, dht_err_cbk, subvol, subvol->fops->fsetxattr, -		    fd, xattr, flags); +        STACK_WIND (frame, dht_err_cbk, subvol, subvol->fops->fsetxattr, +                    fd, xattr, flags); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fsetxattr, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fsetxattr, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_setxattr (call_frame_t *frame, xlator_t *this, -	      loc_t *loc, dict_t *xattr, int flags) +              loc_t *loc, dict_t *xattr, int flags)  { -	xlator_t     *subvol   = NULL; -	dht_local_t  *local    = NULL; +        xlator_t     *subvol   = NULL; +        dht_local_t  *local    = NULL;          dht_conf_t   *conf     = NULL;          dht_layout_t *layout   = NULL;          int           i        = 0; @@ -2126,78 +2125,78 @@ dht_setxattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->path, err);          conf   = this->private; -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->layout = layout = dht_layout_get (this, loc->inode); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local->call_cnt = layout->cnt; - -	for (i = 0; i < layout->cnt; i++) { -		STACK_WIND (frame, dht_err_cbk, -			    layout->list[i].xlator, -			    layout->list[i].xlator->fops->setxattr, -			    loc, xattr, flags); -	} - -	return 0; +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->layout = layout = dht_layout_get (this, loc->inode); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local->call_cnt = layout->cnt; + +        for (i = 0; i < layout->cnt; i++) { +                STACK_WIND (frame, dht_err_cbk, +                            layout->list[i].xlator, +                            layout->list[i].xlator->fops->setxattr, +                            loc, xattr, flags); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (setxattr, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (setxattr, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_removexattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		     int op_ret, int op_errno) +                     int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; - -	local = frame->local; -	prev = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		local->op_ret = 0; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; + +        local = frame->local; +        prev = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		DHT_STACK_UNWIND (removexattr, frame, local->op_ret, local->op_errno); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                DHT_STACK_UNWIND (removexattr, frame, local->op_ret, local->op_errno);          }          return 0; @@ -2206,14 +2205,14 @@ unlock:  int  dht_removexattr (call_frame_t *frame, xlator_t *this, -		 loc_t *loc, const char *key) +                 loc_t *loc, const char *key)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; -	dht_layout_t *layout = NULL; +        dht_local_t  *local = NULL; +        dht_layout_t *layout = NULL; -	int i; +        int i;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -2221,80 +2220,80 @@ dht_removexattr (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->layout = layout = dht_layout_get (this, loc->inode); -	if (!local->layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local->call_cnt = layout->cnt; - -	for (i = 0; i < layout->cnt; i++) { -		STACK_WIND (frame, dht_removexattr_cbk, -			    layout->list[i].xlator, -			    layout->list[i].xlator->fops->removexattr, -			    loc, key); -	} - -	return 0; +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->layout = layout = dht_layout_get (this, loc->inode); +        if (!local->layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local->call_cnt = layout->cnt; + +        for (i = 0; i < layout->cnt; i++) { +                STACK_WIND (frame, dht_removexattr_cbk, +                            layout->list[i].xlator, +                            layout->list[i].xlator->fops->removexattr, +                            loc, key); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (removexattr, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (removexattr, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_fd_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	      int op_ret, int op_errno, fd_t *fd) +            int op_ret, int op_errno, fd_t *fd)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; - - -	local = frame->local; -	prev = cookie; - -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} - -		local->op_ret = 0; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; + + +        local = frame->local; +        prev = cookie; + +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } + +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (open, frame, local->op_ret, local->op_errno, -				  local->fd); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (open, frame, local->op_ret, local->op_errno, +                                  local->fd);          return 0;  } @@ -2302,63 +2301,63 @@ unlock:  int  dht_open (call_frame_t *frame, xlator_t *this, -	  loc_t *loc, int flags, fd_t *fd, int wbflags) +          loc_t *loc, int flags, fd_t *fd, int wbflags)  { -	xlator_t     *subvol = NULL; -	int           ret = -1; +        xlator_t     *subvol = NULL; +        int           ret = -1;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->fd = fd_ref (fd); -	ret = loc_dup (loc, &local->loc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->call_cnt = 1; - -	STACK_WIND (frame, dht_fd_cbk, -		    subvol, subvol->fops->open, -		    loc, flags, fd, wbflags); - -	return 0; +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->fd = fd_ref (fd); +        ret = loc_dup (loc, &local->loc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->call_cnt = 1; + +        STACK_WIND (frame, dht_fd_cbk, +                    subvol, subvol->fops->open, +                    loc, flags, fd, wbflags); + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (open, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (open, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	       int op_ret, int op_errno, -	       struct iovec *vector, int count, struct iatt *stbuf, +               int op_ret, int op_errno, +               struct iovec *vector, int count, struct iatt *stbuf,                 struct iobref *iobref)  {          dht_local_t     *local = frame->local; @@ -2381,9 +2380,9 @@ out:  int  dht_readv (call_frame_t *frame, xlator_t *this, -	   fd_t *fd, size_t size, off_t off) +           fd_t *fd, size_t size, off_t off)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; @@ -2391,13 +2390,13 @@ dht_readv (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        }          local = dht_local_init (frame);          if (!local) { @@ -2407,23 +2406,23 @@ dht_readv (call_frame_t *frame, xlator_t *this,          }          local->ia_ino = fd->inode->ino; -	STACK_WIND (frame, dht_readv_cbk, -		    subvol, subvol->fops->readv, -		    fd, size, off); +        STACK_WIND (frame, dht_readv_cbk, +                    subvol, subvol->fops->readv, +                    fd, size, off); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (readv, frame, -1, op_errno, NULL, 0, NULL, NULL); -	return 0; +        return 0;  }  int  dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		int op_ret, int op_errno, struct iatt *prebuf, +                int op_ret, int op_errno, struct iatt *prebuf,                  struct iatt *postbuf)  {          dht_local_t *local = NULL; @@ -2437,8 +2436,8 @@ dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  op_ret = -1;                  op_errno = EINVAL;                  goto out; -        }  -         +        } +          prebuf->ia_ino = local->ia_ino;          postbuf->ia_ino = local->ia_ino; @@ -2451,10 +2450,10 @@ out:  int  dht_writev (call_frame_t *frame, xlator_t *this, -	    fd_t *fd, struct iovec *vector, int count, off_t off, +            fd_t *fd, struct iovec *vector, int count, off_t off,              struct iobref *iobref)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; @@ -2462,13 +2461,13 @@ dht_writev (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        }          local = dht_local_init (frame);          if (!local) { @@ -2480,113 +2479,113 @@ dht_writev (call_frame_t *frame, xlator_t *this,          local->ia_ino = fd->inode->ino; -	STACK_WIND (frame, dht_writev_cbk, -		    subvol, subvol->fops->writev, -		    fd, vector, count, off, iobref); +        STACK_WIND (frame, dht_writev_cbk, +                    subvol, subvol->fops->writev, +                    fd, vector, count, off, iobref); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  }  int  dht_flush (call_frame_t *frame, xlator_t *this, fd_t *fd)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->fd = fd_ref (fd); -	local->call_cnt = 1; +        local->fd = fd_ref (fd); +        local->call_cnt = 1; -	STACK_WIND (frame, dht_err_cbk, -		    subvol, subvol->fops->flush, fd); +        STACK_WIND (frame, dht_err_cbk, +                    subvol, subvol->fops->flush, fd); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (flush, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (flush, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_fsync (call_frame_t *frame, xlator_t *this, -	   fd_t *fd, int datasync) +           fd_t *fd, int datasync)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} -	local->call_cnt = 1; +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } +        local->call_cnt = 1;          local->ia_ino = fd->inode->ino; -	STACK_WIND (frame, dht_fsync_cbk, -		    subvol, subvol->fops->fsync, -		    fd, datasync); +        STACK_WIND (frame, dht_fsync_cbk, +                    subvol, subvol->fops->fsync, +                    fd, datasync); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  }  int  dht_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	    int op_ret, int op_errno, struct gf_flock *flock) +            int op_ret, int op_errno, struct gf_flock *flock)  {          DHT_STACK_UNWIND (lk, frame, op_ret, op_errno, flock); @@ -2596,9 +2595,9 @@ dht_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  dht_lk (call_frame_t *frame, xlator_t *this, -	fd_t *fd, int cmd, struct gf_flock *flock) +        fd_t *fd, int cmd, struct gf_flock *flock)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; @@ -2606,25 +2605,25 @@ dht_lk (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	STACK_WIND (frame, dht_lk_cbk, -		    subvol, subvol->fops->lk, -		    fd, cmd, flock); +        STACK_WIND (frame, dht_lk_cbk, +                    subvol, subvol->fops->lk, +                    fd, cmd, flock); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (lk, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (lk, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  /* @@ -2652,23 +2651,23 @@ dht_normalize_stats (struct statvfs *buf, unsigned long bsize,  int  dht_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		int op_ret, int op_errno, struct statvfs *statvfs) +                int op_ret, int op_errno, struct statvfs *statvfs)  { -	dht_local_t *local         = NULL; -	int          this_call_cnt = 0; +        dht_local_t *local         = NULL; +        int          this_call_cnt = 0;          int          bsize         = 0;          int          frsize        = 0; -	local = frame->local; +        local = frame->local; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			goto unlock; -		} -		local->op_ret = 0; +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        goto unlock; +                } +                local->op_ret = 0;                  if (local->statvfs.f_bsize != 0) {                          bsize = max(local->statvfs.f_bsize, statvfs->f_bsize); @@ -2680,25 +2679,25 @@ dht_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          local->statvfs.f_frsize   = statvfs->f_frsize;                  } -		local->statvfs.f_blocks  += statvfs->f_blocks; -		local->statvfs.f_bfree   += statvfs->f_bfree; -		local->statvfs.f_bavail  += statvfs->f_bavail; -		local->statvfs.f_files   += statvfs->f_files; -		local->statvfs.f_ffree   += statvfs->f_ffree; -		local->statvfs.f_favail  += statvfs->f_favail; -		local->statvfs.f_fsid     = statvfs->f_fsid; -		local->statvfs.f_flag     = statvfs->f_flag; -		local->statvfs.f_namemax  = statvfs->f_namemax; - -	} +                local->statvfs.f_blocks  += statvfs->f_blocks; +                local->statvfs.f_bfree   += statvfs->f_bfree; +                local->statvfs.f_bavail  += statvfs->f_bavail; +                local->statvfs.f_files   += statvfs->f_files; +                local->statvfs.f_ffree   += statvfs->f_ffree; +                local->statvfs.f_favail  += statvfs->f_favail; +                local->statvfs.f_fsid     = statvfs->f_fsid; +                local->statvfs.f_flag     = statvfs->f_flag; +                local->statvfs.f_namemax  = statvfs->f_namemax; + +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (statfs, frame, local->op_ret, local->op_errno, -				  &local->statvfs); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (statfs, frame, local->op_ret, local->op_errno, +                                  &local->statvfs);          return 0;  } @@ -2707,10 +2706,10 @@ unlock:  int  dht_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL;          int           op_errno = -1; -	int           i = -1; +        int           i = -1;          VALIDATE_OR_GOTO (frame, err); @@ -2720,35 +2719,35 @@ dht_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc)          VALIDATE_OR_GOTO (loc->path, err);          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; +        conf = this->private; -	local = dht_local_init (frame); -	local->call_cnt = conf->subvolume_cnt; +        local = dht_local_init (frame); +        local->call_cnt = conf->subvolume_cnt; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_statfs_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->statfs, loc); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_statfs_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->statfs, loc); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (statfs, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; -	int           ret = -1; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL; +        int           ret = -1;          int           op_errno = -1; -	int           i = -1; +        int           i = -1;          VALIDATE_OR_GOTO (frame, err); @@ -2756,41 +2755,41 @@ dht_opendir (call_frame_t *frame, xlator_t *this, loc_t *loc, fd_t *fd)          VALIDATE_OR_GOTO (fd, err);          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; +        conf = this->private; -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->fd = fd_ref (fd); -	ret = loc_dup (loc, &local->loc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local->fd = fd_ref (fd); +        ret = loc_dup (loc, &local->loc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->call_cnt = conf->subvolume_cnt; +        local->call_cnt = conf->subvolume_cnt; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_fd_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->opendir, -			    loc, fd); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_fd_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->opendir, +                            loc, fd); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (opendir, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (opendir, frame, -1, op_errno, NULL); -	return 0; +        return 0;  } @@ -2798,32 +2797,32 @@ int  dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,                    int op_errno, gf_dirent_t *orig_entries)  { -	dht_local_t  *local = NULL; -	gf_dirent_t   entries; -	gf_dirent_t  *orig_entry = NULL; -	gf_dirent_t  *entry = NULL; -	call_frame_t *prev = NULL; -	xlator_t     *next_subvol = NULL; +        dht_local_t  *local = NULL; +        gf_dirent_t   entries; +        gf_dirent_t  *orig_entry = NULL; +        gf_dirent_t  *entry = NULL; +        call_frame_t *prev = NULL; +        xlator_t     *next_subvol = NULL;          off_t         next_offset = 0; -	int           count = 0; +        int           count = 0;          dht_layout_t *layout = 0;          dht_conf_t   *conf   = NULL;          xlator_t     *subvol = 0; -	INIT_LIST_HEAD (&entries.list); -	prev = cookie; -	local = frame->local; -	conf  = this->private; +        INIT_LIST_HEAD (&entries.list); +        prev = cookie; +        local = frame->local; +        conf  = this->private; -	if (op_ret < 0) -		goto done; +        if (op_ret < 0) +                goto done;          if (!local->layout)                  local->layout = dht_layout_get (this, local->fd->inode);          layout = local->layout; -	list_for_each_entry (orig_entry, (&orig_entries->list), list) { +        list_for_each_entry (orig_entry, (&orig_entries->list), list) {                  next_offset = orig_entry->d_off;                  if (check_is_linkfile (NULL, (&orig_entry->d_stat), NULL) @@ -2862,8 +2861,8 @@ dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,                  list_add_tail (&entry->list, &entries.list);                  count++; -	} -	op_ret = count; +        } +        op_ret = count;          /* We need to ensure that only the last subvolume's end-of-directory           * notification is respected so that directory reading does not stop           * before all subvolumes have been read. That could happen because the @@ -2875,7 +2874,7 @@ dht_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,                  op_errno = 0;  done: -	if (count == 0) { +        if (count == 0) {                  /* non-zero next_offset means that                     EOF is not yet hit on the current subvol                  */ @@ -2885,23 +2884,23 @@ done:                          next_subvol = prev->this;                  } -		if (!next_subvol) { -			goto unwind; -		} +                if (!next_subvol) { +                        goto unwind; +                } -		STACK_WIND (frame, dht_readdirp_cbk, -			    next_subvol, next_subvol->fops->readdirp, -			    local->fd, local->size, next_offset); -		return 0; -	} +                STACK_WIND (frame, dht_readdirp_cbk, +                            next_subvol, next_subvol->fops->readdirp, +                            local->fd, local->size, next_offset); +                return 0; +        }  unwind: -	if (op_ret < 0) -		op_ret = 0; +        if (op_ret < 0) +                op_ret = 0; -	DHT_STACK_UNWIND (readdirp, frame, op_ret, op_errno, &entries); +        DHT_STACK_UNWIND (readdirp, frame, op_ret, op_errno, &entries); -	gf_dirent_free (&entries); +        gf_dirent_free (&entries);          return 0;  } @@ -2910,34 +2909,34 @@ unwind:  int  dht_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		 int op_ret, int op_errno, gf_dirent_t *orig_entries) +                 int op_ret, int op_errno, gf_dirent_t *orig_entries)  { -	dht_local_t  *local = NULL; -	gf_dirent_t   entries; -	gf_dirent_t  *orig_entry = NULL; -	gf_dirent_t  *entry = NULL; -	call_frame_t *prev = NULL; -	xlator_t     *next_subvol = NULL; +        dht_local_t  *local = NULL; +        gf_dirent_t   entries; +        gf_dirent_t  *orig_entry = NULL; +        gf_dirent_t  *entry = NULL; +        call_frame_t *prev = NULL; +        xlator_t     *next_subvol = NULL;          off_t         next_offset = 0; -	int           count = 0; +        int           count = 0;          dht_layout_t *layout = 0;          dht_conf_t   *conf   = NULL;          xlator_t     *subvol = 0; -	INIT_LIST_HEAD (&entries.list); -	prev = cookie; -	local = frame->local; -	conf  = this->private; +        INIT_LIST_HEAD (&entries.list); +        prev = cookie; +        local = frame->local; +        conf  = this->private; -	if (op_ret < 0) -		goto done; +        if (op_ret < 0) +                goto done;          if (!local->layout)                  local->layout = dht_layout_get (this, local->fd->inode);          layout = local->layout; -	list_for_each_entry (orig_entry, (&orig_entries->list), list) { +        list_for_each_entry (orig_entry, (&orig_entries->list), list) {                  next_offset = orig_entry->d_off;                  subvol = dht_layout_search (this, layout, orig_entry->d_name); @@ -2962,7 +2961,7 @@ dht_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          count++;                  }          } -	op_ret = count; +        op_ret = count;          /* We need to ensure that only the last subvolume's end-of-directory           * notification is respected so that directory reading does not stop           * before all subvolumes have been read. That could happen because the @@ -2974,7 +2973,7 @@ dht_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  op_errno = 0;  done: -	if (count == 0) { +        if (count == 0) {                  /* non-zero next_offset means that                     EOF is not yet hit on the current subvol                  */ @@ -2984,23 +2983,23 @@ done:                          next_subvol = prev->this;                  } -		if (!next_subvol) { -			goto unwind; -		} +                if (!next_subvol) { +                        goto unwind; +                } -		STACK_WIND (frame, dht_readdir_cbk, -			    next_subvol, next_subvol->fops->readdir, -			    local->fd, local->size, next_offset); -		return 0; -	} +                STACK_WIND (frame, dht_readdir_cbk, +                            next_subvol, next_subvol->fops->readdir, +                            local->fd, local->size, next_offset); +                return 0; +        }  unwind: -	if (op_ret < 0) -		op_ret = 0; +        if (op_ret < 0) +                op_ret = 0; -	DHT_STACK_UNWIND (readdir, frame, op_ret, op_errno, &entries); +        DHT_STACK_UNWIND (readdir, frame, op_ret, op_errno, &entries); -	gf_dirent_free (&entries); +        gf_dirent_free (&entries);          return 0;  } @@ -3010,33 +3009,33 @@ int  dht_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                  off_t yoff, int whichop)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL;          int           op_errno = -1; -	xlator_t     *xvol = NULL; -	off_t         xoff = 0; +        xlator_t     *xvol = NULL; +        off_t         xoff = 0;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	conf = this->private; +        conf = this->private; -	local = dht_local_init (frame); -	if (!local) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	local->fd = fd_ref (fd); -	local->size = size; +        local->fd = fd_ref (fd); +        local->size = size; -	dht_deitransform (this, yoff, &xvol, (uint64_t *)&xoff); +        dht_deitransform (this, yoff, &xvol, (uint64_t *)&xoff); -	/* TODO: do proper readdir */ +        /* TODO: do proper readdir */          if (whichop == GF_FOP_READDIR)                  STACK_WIND (frame, dht_readdir_cbk, xvol, xvol->fops->readdir,                              fd, size, xoff); @@ -3044,13 +3043,13 @@ dht_do_readdir (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,                  STACK_WIND (frame, dht_readdirp_cbk, xvol, xvol->fops->readdirp,                              fd, size, xoff); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (readdir, frame, -1, op_errno, NULL); -	return 0; +        return 0;  } @@ -3093,27 +3092,27 @@ dht_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size,  int  dht_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		  int op_ret, int op_errno) +                  int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; -	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 = 0; -	} -	UNLOCK (&frame->lock); +                if (op_ret == 0) +                        local->op_ret = 0; +        } +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (fsyncdir, frame, local->op_ret, local->op_errno); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (fsyncdir, frame, local->op_ret, local->op_errno);          return 0;  } @@ -3122,10 +3121,10 @@ dht_fsyncdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  dht_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL;          int           op_errno = -1; -	int           i = -1; +        int           i = -1;          VALIDATE_OR_GOTO (frame, err); @@ -3133,49 +3132,49 @@ dht_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync)          VALIDATE_OR_GOTO (fd, err);          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; +        conf = this->private; -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->fd = fd_ref (fd); -	local->call_cnt = conf->subvolume_cnt; +        local->fd = fd_ref (fd); +        local->call_cnt = conf->subvolume_cnt; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_fsyncdir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->fsyncdir, -			    fd, datasync); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_fsyncdir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->fsyncdir, +                            fd, datasync); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fsyncdir, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fsyncdir, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_newfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		 int op_ret, int op_errno, +                 int op_ret, int op_errno,                   inode_t *inode, struct iatt *stbuf, struct iatt *preparent,                   struct iatt *postparent)  { -	call_frame_t *prev = NULL; -	int           ret = -1; +        call_frame_t *prev = NULL; +        int           ret = -1;          dht_local_t  *local = NULL; -	if (op_ret == -1) -		goto out; +        if (op_ret == -1) +                goto out;          local = frame->local;          if (!local) { @@ -3184,9 +3183,9 @@ dht_newfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -	prev = cookie; +        prev = cookie; -	dht_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino); +        dht_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino);          if (local->loc.parent) {                  preparent->ia_ino = local->loc.parent->ino;                  postparent->ia_ino = local->loc.parent->ino; @@ -3196,26 +3195,26 @@ dht_newfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }          ret = dht_layout_preset (this, prev->this, inode); -	if (ret < 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"could not set pre-set layout for subvolume %s", -			prev->this->name); -		op_ret   = -1; -		op_errno = EINVAL; -		goto out; -	} +        if (ret < 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "could not set pre-set layout for subvolume %s", +                        prev->this->name); +                op_ret   = -1; +                op_errno = EINVAL; +                goto out; +        }  out: -        /*  -         * FIXME: ia_size and st_blocks of preparent and postparent do not have  +        /* +         * FIXME: ia_size and st_blocks of preparent and postparent do not have           * correct values. since, preparent and postparent buffers correspond           * to a directory these two members should have values equal to sum of           * corresponding values from each of the subvolume.           * See dht_iatt_merge for reference. -         */  +         */ -	DHT_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode, stbuf, preparent, +        DHT_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode, stbuf, preparent,                            postparent); -	return 0; +        return 0;  }  int @@ -3225,14 +3224,14 @@ dht_mknod_linkfile_create_cbk (call_frame_t *frame, void *cookie,                                 inode_t *inode, struct iatt *stbuf,                                 struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	xlator_t     *cached_subvol = NULL; +        dht_local_t  *local = NULL; +        xlator_t     *cached_subvol = NULL;          if (op_ret == -1)                  goto err; -	local = frame->local; -	cached_subvol = local->cached_subvol; +        local = frame->local; +        cached_subvol = local->cached_subvol;          STACK_WIND (frame, dht_newfile_cbk,                      cached_subvol, cached_subvol->fops->mknod, @@ -3240,46 +3239,46 @@ dht_mknod_linkfile_create_cbk (call_frame_t *frame, void *cookie,                      local->params);          return 0; - err: - 	DHT_STACK_UNWIND (mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL);	 - 	return 0; +err: +        DHT_STACK_UNWIND (mknod, frame, -1, op_errno, NULL, NULL, NULL, NULL); +        return 0;  }  int  dht_mknod (call_frame_t *frame, xlator_t *this, -	   loc_t *loc, mode_t mode, dev_t rdev, dict_t *params) +           loc_t *loc, mode_t mode, dev_t rdev, dict_t *params)  { -	xlator_t    *subvol = NULL; -	int          op_errno = -1; +        xlator_t    *subvol = NULL; +        int          op_errno = -1;          int          ret = -1;          xlator_t    *avail_subvol = NULL; -	dht_conf_t  *conf = NULL; -	dht_local_t *local = NULL; +        dht_conf_t  *conf = NULL; +        dht_local_t *local = NULL; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf = this->private; +        conf = this->private;          dht_get_du_info (frame, this, loc); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          ret = loc_dup (loc, &local->loc);          if (ret == -1) { @@ -3292,75 +3291,75 @@ dht_mknod (call_frame_t *frame, xlator_t *this,          if (!dht_is_subvol_filled (this, subvol)) {                  gf_log (this->name, GF_LOG_TRACE,                          "creating %s on %s", loc->path, subvol->name); -                 +                  STACK_WIND (frame, dht_newfile_cbk,                              subvol, subvol->fops->mknod,                              loc, mode, rdev, params);          } else {                  avail_subvol = dht_free_disk_available_subvol (this, subvol);                  if (avail_subvol != subvol) { -                        /* Choose the minimum filled volume, and create the  +                        /* Choose the minimum filled volume, and create the                             files there */                          local->params = dict_ref (params);                          local->cached_subvol = avail_subvol; -                        local->mode = mode;  +                        local->mode = mode;                          local->rdev = rdev; -                         -                        dht_linkfile_create (frame,  + +                        dht_linkfile_create (frame,                                               dht_mknod_linkfile_create_cbk,                                               avail_subvol, subvol, loc);                  } else {                          gf_log (this->name, GF_LOG_TRACE,                                  "creating %s on %s", loc->path, subvol->name); -                         +                          STACK_WIND (frame, dht_newfile_cbk,                                      subvol, subvol->fops->mknod,                                      loc, mode, rdev, params);                  }          } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (mknod, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,                            NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_symlink (call_frame_t *frame, xlator_t *this, -	     const char *linkname, loc_t *loc, dict_t *params) +             const char *linkname, loc_t *loc, dict_t *params)  { -	xlator_t    *subvol = NULL; -	int          op_errno = -1; +        xlator_t    *subvol = NULL; +        int          op_errno = -1;          dht_local_t *local = NULL;          int          ret = -1; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          ret = loc_copy (&local->loc, loc);          if (ret == -1) { @@ -3369,37 +3368,37 @@ dht_symlink (call_frame_t *frame, xlator_t *this,                  goto err;          } -	gf_log (this->name, GF_LOG_TRACE, -		"creating %s on %s", loc->path, subvol->name); +        gf_log (this->name, GF_LOG_TRACE, +                "creating %s on %s", loc->path, subvol->name); -	STACK_WIND (frame, dht_newfile_cbk, -		    subvol, subvol->fops->symlink, -		    linkname, loc, params); +        STACK_WIND (frame, dht_newfile_cbk, +                    subvol, subvol->fops->symlink, +                    linkname, loc, params); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (link, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (link, frame, -1, op_errno,                            NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)  { -	xlator_t    *cached_subvol = NULL; -	xlator_t    *hashed_subvol = NULL; +        xlator_t    *cached_subvol = NULL; +        xlator_t    *hashed_subvol = NULL;          int          ret = -1; -	int          op_errno = -1; -	dht_local_t *local = NULL; +        int          op_errno = -1; +        dht_local_t *local = NULL; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err);          if (dht_filter_loc_subvol_key (this, loc, &local->loc,                                         &cached_subvol)) { @@ -3412,83 +3411,83 @@ dht_unlink (call_frame_t *frame, xlator_t *this, loc_t *loc)                  goto done;          } -	cached_subvol = dht_subvol_get_cached (this, loc->inode); -	if (!cached_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	hashed_subvol = dht_subvol_get_hashed (this, loc); -	if (!hashed_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = loc_copy (&local->loc, loc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	if (hashed_subvol != cached_subvol) { -		STACK_WIND (frame, dht_unlink_linkfile_cbk, -			    hashed_subvol, hashed_subvol->fops->unlink, loc); +        cached_subvol = dht_subvol_get_cached (this, loc->inode); +        if (!cached_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        hashed_subvol = dht_subvol_get_hashed (this, loc); +        if (!hashed_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = loc_copy (&local->loc, loc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        if (hashed_subvol != cached_subvol) { +                STACK_WIND (frame, dht_unlink_linkfile_cbk, +                            hashed_subvol, hashed_subvol->fops->unlink, loc);          } else {                  STACK_WIND (frame, dht_unlink_cbk,                              cached_subvol, cached_subvol->fops->unlink, loc);          }  done: -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (unlink, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  }  int  dht_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	      int op_ret, int op_errno, +              int op_ret, int op_errno,                inode_t *inode, struct iatt *stbuf, struct iatt *preparent,                struct iatt *postparent)  {          call_frame_t *prev = NULL; -	dht_layout_t *layout = NULL; -	dht_local_t  *local = NULL; +        dht_layout_t *layout = NULL; +        dht_local_t  *local = NULL;          prev = cookie; -	local = frame->local; +        local = frame->local;          if (op_ret == -1)                  goto out; -	layout = dht_layout_for_subvol (this, prev->this); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no pre-set layout for subvolume %s", -			prev->this->name); -		op_ret   = -1; -		op_errno = EINVAL; -		goto out; -	} +        layout = dht_layout_for_subvol (this, prev->this); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no pre-set layout for subvolume %s", +                        prev->this->name); +                op_ret   = -1; +                op_errno = EINVAL; +                goto out; +        } -	stbuf->ia_ino = local->loc.inode->ino; +        stbuf->ia_ino = local->loc.inode->ino;          preparent->ia_ino = local->loc2.parent->ino;          postparent->ia_ino = local->loc2.parent->ino; @@ -3500,129 +3499,129 @@ out:          DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf, preparent,                            postparent); -	return 0; +        return 0;  }  int  dht_link_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int op_ret, int op_errno, +                       int op_ret, int op_errno,                         inode_t *inode, struct iatt *stbuf,                         struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	xlator_t     *srcvol = NULL; +        dht_local_t  *local = NULL; +        xlator_t     *srcvol = NULL; -	if (op_ret == -1) -		goto err; +        if (op_ret == -1) +                goto err; -	local = frame->local; -	srcvol = local->linkfile.srcvol; +        local = frame->local; +        srcvol = local->linkfile.srcvol; -	STACK_WIND (frame, dht_link_cbk, -		    srcvol, srcvol->fops->link, -		    &local->loc, &local->loc2); +        STACK_WIND (frame, dht_link_cbk, +                    srcvol, srcvol->fops->link, +                    &local->loc, &local->loc2); -	return 0; +        return 0;  err: -	DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf, preparent, +        DHT_STACK_UNWIND (link, frame, op_ret, op_errno, inode, stbuf, preparent,                            postparent); -	return 0; +        return 0;  }  int  dht_link (call_frame_t *frame, xlator_t *this, -	  loc_t *oldloc, loc_t *newloc) +          loc_t *oldloc, loc_t *newloc)  { -	xlator_t    *cached_subvol = NULL; -	xlator_t    *hashed_subvol = NULL; -	int          op_errno = -1; -	int          ret = -1; -	dht_local_t *local = NULL; - - -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (oldloc, err); -	VALIDATE_OR_GOTO (newloc, err); - -	cached_subvol = dht_subvol_get_cached (this, oldloc->inode); -	if (!cached_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", oldloc->path); -		op_errno = EINVAL; -		goto err; -	} - -	hashed_subvol = dht_subvol_get_hashed (this, newloc); -	if (!hashed_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			newloc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = loc_copy (&local->loc, oldloc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = loc_copy (&local->loc2, newloc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	if (hashed_subvol != cached_subvol) { +        xlator_t    *cached_subvol = NULL; +        xlator_t    *hashed_subvol = NULL; +        int          op_errno = -1; +        int          ret = -1; +        dht_local_t *local = NULL; + + +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (oldloc, err); +        VALIDATE_OR_GOTO (newloc, err); + +        cached_subvol = dht_subvol_get_cached (this, oldloc->inode); +        if (!cached_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", oldloc->path); +                op_errno = EINVAL; +                goto err; +        } + +        hashed_subvol = dht_subvol_get_hashed (this, newloc); +        if (!hashed_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        newloc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = loc_copy (&local->loc, oldloc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = loc_copy (&local->loc2, newloc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        if (hashed_subvol != cached_subvol) {                  memcpy (local->gfid, oldloc->inode->gfid, 16); -		dht_linkfile_create (frame, dht_link_linkfile_cbk, -				     cached_subvol, hashed_subvol, newloc); -	} else { -		STACK_WIND (frame, dht_link_cbk, -			    cached_subvol, cached_subvol->fops->link, -			    oldloc, newloc); -	} +                dht_linkfile_create (frame, dht_link_linkfile_cbk, +                                     cached_subvol, hashed_subvol, newloc); +        } else { +                STACK_WIND (frame, dht_link_cbk, +                            cached_subvol, cached_subvol->fops->link, +                            oldloc, newloc); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (link, frame, -1, op_errno, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		 int op_ret, int op_errno, -		 fd_t *fd, inode_t *inode, struct iatt *stbuf, -                 struct iatt *preparent, struct iatt *postparent) +                int op_ret, int op_errno, +                fd_t *fd, inode_t *inode, struct iatt *stbuf, +                struct iatt *preparent, struct iatt *postparent)  { -	call_frame_t *prev = NULL; -	int           ret = -1; +        call_frame_t *prev = NULL; +        int           ret = -1;          dht_local_t  *local = NULL; -	if (op_ret == -1) -		goto out; +        if (op_ret == -1) +                goto out;          local = frame->local;          if (!local) { @@ -3631,9 +3630,9 @@ dht_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -	prev = cookie; +        prev = cookie; -	dht_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino); +        dht_itransform (this, prev->this, stbuf->ia_ino, &stbuf->ia_ino);          if (local->loc.parent) {                  preparent->ia_ino = local->loc.parent->ino;                  postparent->ia_ino = local->loc.parent->ino; @@ -3643,37 +3642,37 @@ dht_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          }          ret = dht_layout_preset (this, prev->this, inode); -	if (ret != 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"could not set preset layout for subvol %s", +        if (ret != 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "could not set preset layout for subvol %s",                          prev->this->name); -		op_ret   = -1; -		op_errno = EINVAL; -		goto out; -	} +                op_ret   = -1; +                op_errno = EINVAL; +                goto out; +        }  out: -	DHT_STACK_UNWIND (create, frame, op_ret, op_errno, fd, inode, stbuf, preparent, +        DHT_STACK_UNWIND (create, frame, op_ret, op_errno, fd, inode, stbuf, preparent,                            postparent); -	return 0; +        return 0;  }  int  dht_create_linkfile_create_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,                                  inode_t *inode, struct iatt *stbuf,                                  struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	xlator_t     *cached_subvol = NULL; +        dht_local_t  *local = NULL; +        xlator_t     *cached_subvol = NULL;          if (op_ret == -1)                  goto err; -	local = frame->local; -	cached_subvol = local->cached_subvol; +        local = frame->local; +        cached_subvol = local->cached_subvol;          STACK_WIND (frame, dht_create_cbk,                      cached_subvol, cached_subvol->fops->create, @@ -3681,38 +3680,38 @@ dht_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,                      local->fd, local->params);          return 0; - err: - 	DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); - 	return 0; +err: +        DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); +        return 0;  }  int  dht_create (call_frame_t *frame, xlator_t *this, -	    loc_t *loc, int32_t flags, mode_t mode, +            loc_t *loc, int32_t flags, mode_t mode,              fd_t *fd, dict_t *params)  { -	int          op_errno = -1; +        int          op_errno = -1;          int          ret = -1; -	xlator_t    *subvol = NULL; -	dht_conf_t  *conf = NULL; +        xlator_t    *subvol = NULL; +        dht_conf_t  *conf = NULL;          dht_local_t *local = NULL;          xlator_t    *avail_subvol = NULL; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf = this->private; +        conf = this->private;          dht_get_du_info (frame, this, loc); -	local = dht_local_init (frame); -	if (!local) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        }          if (dht_filter_loc_subvol_key (this, loc, &local->loc,                                         &subvol)) { @@ -3749,7 +3748,7 @@ dht_create (call_frame_t *frame, xlator_t *this,                              loc, flags, mode, fd, params);                  goto done;          } -        /* Choose the minimum filled volume, and create the  +        /* Choose the minimum filled volume, and create the             files there */          /* TODO */          avail_subvol = dht_free_disk_available_subvol (this, subvol); @@ -3775,31 +3774,31 @@ dht_create (call_frame_t *frame, xlator_t *this,                      subvol, subvol->fops->create,                      loc, flags, mode, fd, params);  done: -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (create, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_mkdir_selfheal_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)  { -	dht_local_t   *local = NULL; -	dht_layout_t  *layout = NULL; +        dht_local_t   *local = NULL; +        dht_layout_t  *layout = NULL; -	local = frame->local; -	layout = local->selfheal.layout; +        local = frame->local; +        layout = local->selfheal.layout; -	if (op_ret == 0) { +        if (op_ret == 0) {                  dht_layout_set (this, local->inode, layout); -		local->stbuf.ia_ino = local->ia_ino; +                local->stbuf.ia_ino = local->ia_ino;                  if (local->loc.parent) {                          local->preparent.ia_ino = local->loc.parent->ino;                          local->postparent.ia_ino = local->loc.parent->ino; @@ -3807,13 +3806,13 @@ dht_mkdir_selfheal_cbk (call_frame_t *frame, void *cookie,                          WIPE (&local->preparent);                          WIPE (&local->postparent);                  } -	} +        } -	DHT_STACK_UNWIND (mkdir, frame, op_ret, op_errno, -			  local->inode, &local->stbuf, &local->preparent, +        DHT_STACK_UNWIND (mkdir, frame, op_ret, op_errno, +                          local->inode, &local->stbuf, &local->preparent,                            &local->postparent); -	return 0; +        return 0;  }  int @@ -3821,23 +3820,23 @@ dht_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                 int op_ret, int op_errno, inode_t *inode, struct iatt *stbuf,                 struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	int           ret = -1; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        int           ret = -1;          int           subvol_filled = 0; -	call_frame_t *prev = NULL; -	dht_layout_t *layout = NULL; -	dht_conf_t   *conf = NULL; +        call_frame_t *prev = NULL; +        dht_layout_t *layout = NULL; +        dht_conf_t   *conf = NULL; -	conf = this->private; -	local = frame->local; -	prev  = cookie; -	layout = local->layout; +        conf = this->private; +        local = frame->local; +        prev  = cookie; +        layout = local->layout;          subvol_filled = dht_is_subvol_filled (this, prev->this); -	LOCK (&frame->lock); -	{ +        LOCK (&frame->lock); +        {                  if (subvol_filled && (op_ret != -1)) {                          ret = dht_layout_merge (this, layout, prev->this,                                                  -1, ENOSPC, NULL); @@ -3846,11 +3845,11 @@ dht_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                                  op_ret, op_errno, NULL);                  } -		if (op_ret == -1) { -			local->op_errno = op_errno; -			goto unlock; -		} -		dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        goto unlock; +                } +                dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);                  dht_iatt_merge (this, &local->preparent, preparent, prev->this);                  dht_iatt_merge (this, &local->postparent, postparent,                                  prev->this); @@ -3859,40 +3858,40 @@ dht_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          local->ia_ino = local->stbuf.ia_ino;                  } -	} +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_selfheal_new_directory (frame, dht_mkdir_selfheal_cbk, -					    layout); -	} +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                dht_selfheal_new_directory (frame, dht_mkdir_selfheal_cbk, +                                            layout); +        }          return 0;  }  int -dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie,  -		      xlator_t *this, int op_ret, int op_errno, +dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie, +                      xlator_t *this, int op_ret, int op_errno,                        inode_t *inode, struct iatt *stbuf,                        struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	int           ret = -1; -	call_frame_t *prev = NULL; -	dht_layout_t *layout = NULL; -	dht_conf_t   *conf = NULL; -	int           i = 0; -	xlator_t     *hashed_subvol = NULL; +        dht_local_t  *local = NULL; +        int           ret = -1; +        call_frame_t *prev = NULL; +        dht_layout_t *layout = NULL; +        dht_conf_t   *conf = NULL; +        int           i = 0; +        xlator_t     *hashed_subvol = NULL;          VALIDATE_OR_GOTO (this->private, err); -	local = frame->local; -	prev  = cookie; -	layout = local->layout; -	conf = this->private; -	hashed_subvol = local->hashed_subvol; +        local = frame->local; +        prev  = cookie; +        layout = local->layout; +        conf = this->private; +        hashed_subvol = local->hashed_subvol;          if (uuid_is_null (local->loc.inode->gfid) && !op_ret)                  memcpy (local->loc.inode->gfid, stbuf->ia_gfid, 16); @@ -3903,49 +3902,49 @@ dht_mkdir_hashed_cbk (call_frame_t *frame, void *cookie,          else                  ret = dht_layout_merge (this, layout, prev->this,                                          op_ret, op_errno, NULL); -         -	if (op_ret == -1) { -		local->op_errno = op_errno; -		goto err; -	} -	local->op_ret = 0; - -	dht_iatt_merge (this, &local->stbuf, stbuf, prev->this); + +        if (op_ret == -1) { +                local->op_errno = op_errno; +                goto err; +        } +        local->op_ret = 0; + +        dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);          dht_iatt_merge (this, &local->preparent, preparent, prev->this);          dht_iatt_merge (this, &local->postparent, postparent, prev->this); -	local->ia_ino = local->stbuf.ia_ino; - -	local->call_cnt = conf->subvolume_cnt - 1; -	 -	if (local->call_cnt == 0) { -		dht_selfheal_directory (frame, dht_mkdir_selfheal_cbk, -					&local->loc, layout); -	} -	for (i = 0; i < conf->subvolume_cnt; i++) { -		if (conf->subvolumes[i] == hashed_subvol) -			continue; -		STACK_WIND (frame, dht_mkdir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->mkdir, -			    &local->loc, local->mode, local->params); -	} -	return 0; +        local->ia_ino = local->stbuf.ia_ino; + +        local->call_cnt = conf->subvolume_cnt - 1; + +        if (local->call_cnt == 0) { +                dht_selfheal_directory (frame, dht_mkdir_selfheal_cbk, +                                        &local->loc, layout); +        } +        for (i = 0; i < conf->subvolume_cnt; i++) { +                if (conf->subvolumes[i] == hashed_subvol) +                        continue; +                STACK_WIND (frame, dht_mkdir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->mkdir, +                            &local->loc, local->mode, local->params); +        } +        return 0;  err: -	DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL); +        DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL);          return 0;  }  int  dht_mkdir (call_frame_t *frame, xlator_t *this, -	   loc_t *loc, mode_t mode, dict_t *params) +           loc_t *loc, mode_t mode, dict_t *params)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL;          int           op_errno = -1; -	int           ret = -1; -	xlator_t     *hashed_subvol = NULL; +        int           ret = -1; +        xlator_t     *hashed_subvol = NULL;          VALIDATE_OR_GOTO (frame, err); @@ -3955,133 +3954,133 @@ dht_mkdir (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->path, err);          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; +        conf = this->private;          dht_get_du_info (frame, this, loc); -	local = dht_local_init (frame); -	if (!local) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	hashed_subvol = dht_subvol_get_hashed (this, loc); +        hashed_subvol = dht_subvol_get_hashed (this, loc); -	if (hashed_subvol == NULL) { -		gf_log (this->name, GF_LOG_DEBUG, -			"hashed subvol not found for %s", +        if (hashed_subvol == NULL) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "hashed subvol not found for %s",                          loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local->hashed_subvol = hashed_subvol; -	local->inode = inode_ref (loc->inode); -	ret = loc_copy (&local->loc, loc); -	local->mode = mode; - -	if (ret == -1) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +                op_errno = EINVAL; +                goto err; +        } + +        local->hashed_subvol = hashed_subvol; +        local->inode = inode_ref (loc->inode); +        ret = loc_copy (&local->loc, loc); +        local->mode = mode; + +        if (ret == -1) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        }          local->params = dict_ref (params); -	local->layout = dht_layout_new (this, conf->subvolume_cnt); -	if (!local->layout) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local->layout = dht_layout_new (this, conf->subvolume_cnt); +        if (!local->layout) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	STACK_WIND (frame, dht_mkdir_hashed_cbk, -		    hashed_subvol, -		    hashed_subvol->fops->mkdir, -		    loc, mode, params); +        STACK_WIND (frame, dht_mkdir_hashed_cbk, +                    hashed_subvol, +                    hashed_subvol->fops->mkdir, +                    loc, mode, params); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (mkdir, frame, -1, op_errno, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_rmdir_selfheal_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			int op_ret, int op_errno) +                        int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; +        local = frame->local;          if (local->loc.parent) {                  local->preparent.ia_ino = local->loc.parent->ino;                  local->postparent.ia_ino = local->loc.parent->ino;          } -	DHT_STACK_UNWIND (rmdir, frame, local->op_ret, local->op_errno, +        DHT_STACK_UNWIND (rmdir, frame, local->op_ret, local->op_errno,                            &local->preparent, &local->postparent); -	return 0; +        return 0;  }  int  dht_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -	       int op_ret, int op_errno, struct iatt *preparent, +               int op_ret, int op_errno, struct iatt *preparent,                 struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			local->op_ret   = -1; +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        local->op_ret   = -1; -			if (op_errno != ENOENT) -				local->need_selfheal = 1; +                        if (op_errno != ENOENT) +                                local->need_selfheal = 1; -			gf_log (this->name, GF_LOG_DEBUG, -				"rmdir on %s for %s failed (%s)", -				prev->this->name, local->loc.path, -				strerror (op_errno)); -			goto unlock; -		} +                        gf_log (this->name, GF_LOG_DEBUG, +                                "rmdir on %s for %s failed (%s)", +                                prev->this->name, local->loc.path, +                                strerror (op_errno)); +                        goto unlock; +                }                  dht_iatt_merge (this, &local->preparent, preparent, prev->this);                  dht_iatt_merge (this, &local->postparent, postparent,                                  prev->this); -	} +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		if (local->need_selfheal) { +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                if (local->need_selfheal) {                          local->layout =                                  dht_layout_get (this, local->loc.inode); -			/* TODO: neater interface needed below */ -			local->stbuf.ia_type = local->loc.inode->ia_type; +                        /* TODO: neater interface needed below */ +                        local->stbuf.ia_type = local->loc.inode->ia_type; -			dht_selfheal_restore (frame, dht_rmdir_selfheal_cbk, -					      &local->loc, local->layout); -		} else { +                        dht_selfheal_restore (frame, dht_rmdir_selfheal_cbk, +                                              &local->loc, local->layout); +                } else {                          if (local->loc.parent) {                                  local->preparent.ia_ino =                                          local->loc.parent->ino; @@ -4092,11 +4091,11 @@ unlock:                                  WIPE (&local->postparent);                          } -			DHT_STACK_UNWIND (rmdir, frame, local->op_ret, -					  local->op_errno, &local->preparent, +                        DHT_STACK_UNWIND (rmdir, frame, local->op_ret, +                                          local->op_errno, &local->preparent,                                            &local->postparent); -		} -	} +                } +        }          return 0;  } @@ -4105,33 +4104,33 @@ unlock:  int  dht_rmdir_do (call_frame_t *frame, xlator_t *this)  { -	dht_local_t  *local = NULL; -	dht_conf_t   *conf = NULL; -	int           i = 0; +        dht_local_t  *local = NULL; +        dht_conf_t   *conf = NULL; +        int           i = 0;          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; -	local = frame->local; +        conf = this->private; +        local = frame->local; -	if (local->op_ret == -1) -		goto err; +        if (local->op_ret == -1) +                goto err; -	local->call_cnt = conf->subvolume_cnt; +        local->call_cnt = conf->subvolume_cnt; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_rmdir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->rmdir, -			    &local->loc, local->flags); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_rmdir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->rmdir, +                            &local->loc, local->flags); +        } -	return 0; +        return 0;  err: -	DHT_STACK_UNWIND (rmdir, frame, local->op_ret, local->op_errno, +        DHT_STACK_UNWIND (rmdir, frame, local->op_ret, local->op_errno,                            &local->preparent, &local->postparent); -	return 0; +        return 0;  } @@ -4312,17 +4311,17 @@ int  dht_rmdir_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          int op_ret, int op_errno, gf_dirent_t *entries)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = -1; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = -1; +        call_frame_t *prev = NULL;          xlator_t     *src = NULL;          int           ret = 0; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie;          src   = prev->this; -	if (op_ret > 2) { +        if (op_ret > 2) {                  ret = dht_rmdir_is_subvol_empty (frame, this, entries, src);                  switch (ret) { @@ -4340,63 +4339,63 @@ dht_rmdir_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                  prev->this->name, local->loc.path, ret);                          break;                  } -	} +        } -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_rmdir_do (frame, this); -	} +        if (is_last_call (this_call_cnt)) { +                dht_rmdir_do (frame, this); +        } -	return 0; +        return 0;  }  int  dht_rmdir_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int op_ret, int op_errno, fd_t *fd) +                       int op_ret, int op_errno, fd_t *fd)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = -1; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = -1; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie; -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"opendir on %s for %s failed (%s)", -			prev->this->name, local->loc.path, -			strerror (op_errno)); -		goto err; -	} +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "opendir on %s for %s failed (%s)", +                        prev->this->name, local->loc.path, +                        strerror (op_errno)); +                goto err; +        } -	STACK_WIND (frame, dht_rmdir_readdirp_cbk, -		    prev->this, prev->this->fops->readdirp, -		    local->fd, 4096, 0); +        STACK_WIND (frame, dht_rmdir_readdirp_cbk, +                    prev->this, prev->this->fops->readdirp, +                    local->fd, 4096, 0); -	return 0; +        return 0;  err: -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_rmdir_do (frame, this); -	} +        if (is_last_call (this_call_cnt)) { +                dht_rmdir_do (frame, this); +        } -	return 0; +        return 0;  }  int  dht_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)  { -	dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_local_t  *local  = NULL; +        dht_conf_t   *conf = NULL;          int           op_errno = -1; -	int           i = -1; -	int           ret = -1; +        int           i = -1; +        int           ret = -1;          VALIDATE_OR_GOTO (frame, err); @@ -4406,71 +4405,71 @@ dht_rmdir (call_frame_t *frame, xlator_t *this, loc_t *loc, int flags)          VALIDATE_OR_GOTO (loc->path, err);          VALIDATE_OR_GOTO (this->private, err); -	conf = this->private; +        conf = this->private; -	local = dht_local_init (frame); -	if (!local) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	local->call_cnt = conf->subvolume_cnt; -	local->op_ret   = 0; +        local->call_cnt = conf->subvolume_cnt; +        local->op_ret   = 0; -	ret = loc_copy (&local->loc, loc); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        ret = loc_copy (&local->loc, loc); +        if (ret == -1) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        }          local->flags = flags; -	local->fd = fd_create (local->loc.inode, frame->root->pid); -	if (!local->fd) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local->fd = fd_create (local->loc.inode, frame->root->pid); +        if (!local->fd) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_rmdir_opendir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->opendir, -			    loc, local->fd); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_rmdir_opendir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->opendir, +                            loc, local->fd); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (rmdir, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (rmdir, frame, -1, op_errno,                            NULL, NULL); -	return 0; +        return 0;  }  int  dht_xattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		 int32_t op_ret, int32_t op_errno, dict_t *dict) +                 int32_t op_ret, int32_t op_errno, dict_t *dict)  { -	DHT_STACK_UNWIND (xattrop, frame, op_ret, op_errno, dict); -	return 0; +        DHT_STACK_UNWIND (xattrop, frame, op_ret, op_errno, dict); +        return 0;  }  int  dht_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, -	     gf_xattrop_flags_t flags, dict_t *dict) +             gf_xattrop_flags_t flags, dict_t *dict)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -4478,100 +4477,100 @@ dht_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (loc->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (loc->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, -		    dht_xattrop_cbk, -		    subvol, subvol->fops->xattrop, -		    loc, flags, dict); +        STACK_WIND (frame, +                    dht_xattrop_cbk, +                    subvol, subvol->fops->xattrop, +                    loc, flags, dict); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_fxattrop_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		  int32_t op_ret, int32_t op_errno, dict_t *dict) +                  int32_t op_ret, int32_t op_errno, dict_t *dict)  { -	DHT_STACK_UNWIND (fxattrop, frame, op_ret, op_errno, dict); -	return 0; +        DHT_STACK_UNWIND (fxattrop, frame, op_ret, op_errno, dict); +        return 0;  }  int  dht_fxattrop (call_frame_t *frame, xlator_t *this, -	      fd_t *fd, gf_xattrop_flags_t flags, dict_t *dict) +              fd_t *fd, gf_xattrop_flags_t flags, dict_t *dict)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	STACK_WIND (frame, -		    dht_fxattrop_cbk, -		    subvol, subvol->fops->fxattrop, -		    fd, flags, dict); +        STACK_WIND (frame, +                    dht_fxattrop_cbk, +                    subvol, subvol->fops->fxattrop, +                    fd, flags, dict); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL); -	return 0; +        return 0;  }  int  dht_inodelk_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)  { -	DHT_STACK_UNWIND (inodelk, frame, op_ret, op_errno); -	return 0; +        DHT_STACK_UNWIND (inodelk, frame, op_ret, op_errno); +        return 0;  }  int32_t  dht_inodelk (call_frame_t *frame, xlator_t *this, -	     const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *lock) +             const char *volume, loc_t *loc, int32_t cmd, struct gf_flock *lock)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err); @@ -4580,103 +4579,103 @@ dht_inodelk (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (loc->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (loc->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, -		    dht_inodelk_cbk, -		    subvol, subvol->fops->inodelk, -		    volume, loc, cmd, lock); +        STACK_WIND (frame, +                    dht_inodelk_cbk, +                    subvol, subvol->fops->inodelk, +                    volume, loc, cmd, lock); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (inodelk, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (inodelk, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_finodelk_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)  { -	DHT_STACK_UNWIND (finodelk, frame, op_ret, op_errno); -	return 0; +        DHT_STACK_UNWIND (finodelk, frame, op_ret, op_errno); +        return 0;  }  int  dht_finodelk (call_frame_t *frame, xlator_t *this, -	      const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *lock) +              const char *volume, fd_t *fd, int32_t cmd, struct gf_flock *lock)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	STACK_WIND (frame, -		    dht_finodelk_cbk, -		    subvol, subvol->fops->finodelk, -		    volume, fd, cmd, lock); +        STACK_WIND (frame, +                    dht_finodelk_cbk, +                    subvol, subvol->fops->finodelk, +                    volume, fd, cmd, lock); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (finodelk, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (finodelk, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_entrylk_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)  { -	DHT_STACK_UNWIND (entrylk, frame, op_ret, op_errno); -	return 0; +        DHT_STACK_UNWIND (entrylk, frame, op_ret, op_errno); +        return 0;  }  int  dht_entrylk (call_frame_t *frame, xlator_t *this, -	     const char *volume, loc_t *loc, const char *basename, -	     entrylk_cmd cmd, entrylk_type type) +             const char *volume, loc_t *loc, const char *basename, +             entrylk_cmd cmd, entrylk_type type)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1; -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -4684,80 +4683,80 @@ dht_entrylk (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	subvol = dht_subvol_get_cached (this, loc->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, loc->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } -	local->inode = inode_ref (loc->inode); -	local->call_cnt = 1; +        local->inode = inode_ref (loc->inode); +        local->call_cnt = 1; -	STACK_WIND (frame, dht_entrylk_cbk, -		    subvol, subvol->fops->entrylk, -		    volume, loc, basename, cmd, type); +        STACK_WIND (frame, dht_entrylk_cbk, +                    subvol, subvol->fops->entrylk, +                    volume, loc, basename, cmd, type); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (entrylk, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (entrylk, frame, -1, op_errno); -	return 0; +        return 0;  }  int  dht_fentrylk_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)  { -	DHT_STACK_UNWIND (fentrylk, frame, op_ret, op_errno); -	return 0; +        DHT_STACK_UNWIND (fentrylk, frame, op_ret, op_errno); +        return 0;  }  int  dht_fentrylk (call_frame_t *frame, xlator_t *this, -	      const char *volume, fd_t *fd, const char *basename, -	      entrylk_cmd cmd, entrylk_type type) +              const char *volume, fd_t *fd, const char *basename, +              entrylk_cmd cmd, entrylk_type type)  { -	xlator_t     *subvol = NULL; +        xlator_t     *subvol = NULL;          int           op_errno = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	subvol = dht_subvol_get_cached (this, fd->inode); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} +        subvol = dht_subvol_get_cached (this, fd->inode); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } -	STACK_WIND (frame, dht_fentrylk_cbk, -		    subvol, subvol->fops->fentrylk, -		    volume, fd, basename, cmd, type); +        STACK_WIND (frame, dht_fentrylk_cbk, +                    subvol, subvol->fops->fentrylk, +                    volume, fd, basename, cmd, type); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fentrylk, frame, -1, op_errno); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fentrylk, frame, -1, op_errno); -	return 0; +        return 0;  } @@ -4766,41 +4765,41 @@ dht_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   int op_ret, int op_errno, struct iatt *statpre,                   struct iatt *statpost)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev = cookie; +        local = frame->local; +        prev = cookie; -	LOCK (&frame->lock); -	{ -		if (op_ret == -1) { -			local->op_errno = op_errno; -			gf_log (this->name, GF_LOG_DEBUG, -				"subvolume %s returned -1 (%s)", -				prev->this->name, strerror (op_errno)); -			goto unlock; -		} +        LOCK (&frame->lock); +        { +                if (op_ret == -1) { +                        local->op_errno = op_errno; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "subvolume %s returned -1 (%s)", +                                prev->this->name, strerror (op_errno)); +                        goto unlock; +                } -		dht_iatt_merge (this, &local->prebuf, statpre, prev->this); +                dht_iatt_merge (this, &local->prebuf, statpre, prev->this);                  dht_iatt_merge (this, &local->stbuf, statpost, prev->this); -		 -		if (local->inode) { -			local->prebuf.ia_ino = local->inode->ino; + +                if (local->inode) { +                        local->prebuf.ia_ino = local->inode->ino;                          local->stbuf.ia_ino = local->inode->ino;                  } -		local->op_ret = 0; -	} +                local->op_ret = 0; +        }  unlock: -	UNLOCK (&frame->lock); +        UNLOCK (&frame->lock); -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_UNWIND (setattr, frame, local->op_ret, local->op_errno, -				  &local->prebuf, &local->stbuf); +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_UNWIND (setattr, frame, local->op_ret, local->op_errno, +                                  &local->prebuf, &local->stbuf);          return 0;  } @@ -4810,10 +4809,10 @@ int  dht_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,               struct iatt *stbuf, int32_t valid)  { -	dht_layout_t *layout = NULL; -	dht_local_t  *local  = NULL; +        dht_layout_t *layout = NULL; +        dht_local_t  *local  = NULL;          int           op_errno = -1; -	int           i = -1; +        int           i = -1;          VALIDATE_OR_GOTO (frame, err); @@ -4822,46 +4821,46 @@ dht_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_DEBUG, -			"memory allocation failed :("); -		goto err; -	} - -	local->layout = layout = dht_layout_get (this, loc->inode); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	if (!layout_is_sane (layout)) { -		gf_log (this->name, GF_LOG_DEBUG, -			"layout is not sane for path=%s", loc->path); -		op_errno = EINVAL; -		goto err; -	} - -	local->inode = inode_ref (loc->inode); -	local->call_cnt = layout->cnt; - -	for (i = 0; i < layout->cnt; i++) { -		STACK_WIND (frame, dht_setattr_cbk, -			    layout->list[i].xlator, -			    layout->list[i].xlator->fops->setattr, -			    loc, stbuf, valid); -	} - -	return 0; +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_DEBUG, +                        "memory allocation failed :("); +                goto err; +        } + +        local->layout = layout = dht_layout_get (this, loc->inode); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        if (!layout_is_sane (layout)) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "layout is not sane for path=%s", loc->path); +                op_errno = EINVAL; +                goto err; +        } + +        local->inode = inode_ref (loc->inode); +        local->call_cnt = layout->cnt; + +        for (i = 0; i < layout->cnt; i++) { +                STACK_WIND (frame, dht_setattr_cbk, +                            layout->list[i].xlator, +                            layout->list[i].xlator->fops->setattr, +                            loc, stbuf, valid); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  } @@ -4869,74 +4868,74 @@ int  dht_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,                int32_t valid)  { -	dht_layout_t *layout = NULL; -	dht_local_t  *local  = NULL; +        dht_layout_t *layout = NULL; +        dht_local_t  *local  = NULL;          int           op_errno = -1; -	int           i = -1; +        int           i = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err);          VALIDATE_OR_GOTO (fd, err); -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->layout = layout = dht_layout_get (this, fd->inode); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no layout for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} - -	if (!layout_is_sane (layout)) { -		gf_log (this->name, GF_LOG_DEBUG, -			"layout is not sane for fd=%p", fd); -		op_errno = EINVAL; -		goto err; -	} - -	local->inode = inode_ref (fd->inode); -	local->call_cnt = layout->cnt; - -	for (i = 0; i < layout->cnt; i++) { -		STACK_WIND (frame, dht_setattr_cbk, -			    layout->list[i].xlator, -			    layout->list[i].xlator->fops->fsetattr, -			    fd, stbuf, valid); -	} - -	return 0; +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->layout = layout = dht_layout_get (this, fd->inode); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no layout for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } + +        if (!layout_is_sane (layout)) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "layout is not sane for fd=%p", fd); +                op_errno = EINVAL; +                goto err; +        } + +        local->inode = inode_ref (fd->inode); +        local->call_cnt = layout->cnt; + +        for (i = 0; i < layout->cnt; i++) { +                STACK_WIND (frame, dht_setattr_cbk, +                            layout->list[i].xlator, +                            layout->list[i].xlator->fops->fsetattr, +                            fd, stbuf, valid); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL); -	return 0; +        return 0;  }  int  dht_forget (xlator_t *this, inode_t *inode)  { -	uint64_t      tmp_layout = 0; -	dht_layout_t *layout = NULL; +        uint64_t      tmp_layout = 0; +        dht_layout_t *layout = NULL; -	inode_ctx_get (inode, this, &tmp_layout); +        inode_ctx_get (inode, this, &tmp_layout); -	if (!tmp_layout) -		return 0; +        if (!tmp_layout) +                return 0; -	layout = (dht_layout_t *)(long)tmp_layout; +        layout = (dht_layout_t *)(long)tmp_layout;          dht_layout_unref (this, layout); -	return 0; +        return 0;  } @@ -4966,21 +4965,21 @@ dht_init_subvolumes (xlator_t *this, dht_conf_t *conf)          for (subvols = this->children; subvols; subvols = subvols->next)                  conf->subvolumes[cnt++] = subvols->xlator; -	conf->subvolume_status = GF_CALLOC (cnt, sizeof (char), +        conf->subvolume_status = GF_CALLOC (cnt, sizeof (char),                                              gf_dht_mt_char); -	if (!conf->subvolume_status) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		return -1; -	} +        if (!conf->subvolume_status) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                return -1; +        } -	conf->last_event = GF_CALLOC (cnt, sizeof (int), +        conf->last_event = GF_CALLOC (cnt, sizeof (int),                                        gf_dht_mt_char); -	if (!conf->last_event) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		return -1; -	} +        if (!conf->last_event) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                return -1; +        }          return 0;  } @@ -4988,18 +4987,18 @@ dht_init_subvolumes (xlator_t *this, dht_conf_t *conf)  int  dht_notify (xlator_t *this, int event, void *data, ...)  { -	xlator_t   *subvol = NULL; -	int         cnt    = -1; -	int         i      = -1; -	dht_conf_t *conf   = NULL; -	int         ret    = -1; +        xlator_t   *subvol = NULL; +        int         cnt    = -1; +        int         i      = -1; +        dht_conf_t *conf   = NULL; +        int         ret    = -1;          int         propagate = 0;          int         had_heard_from_all = 0;          int         have_heard_from_all = 0; -	conf = this->private; +        conf = this->private;          if (!conf)                  return ret; @@ -5011,99 +5010,99 @@ dht_notify (xlator_t *this, int event, void *data, ...)                  }          } -	switch (event) { -	case GF_EVENT_CHILD_UP: -		subvol = data; +        switch (event) { +        case GF_EVENT_CHILD_UP: +                subvol = data; -		conf->gen++; +                conf->gen++; -		for (i = 0; i < conf->subvolume_cnt; i++) { -			if (subvol == conf->subvolumes[i]) { -				cnt = i; -				break; -			} -		} - -		if (cnt == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"got GF_EVENT_CHILD_UP bad subvolume %s", -				subvol->name); -			break; -		} - -		LOCK (&conf->subvolume_lock); -		{ -			conf->subvolume_status[cnt] = 1; +                for (i = 0; i < conf->subvolume_cnt; i++) { +                        if (subvol == conf->subvolumes[i]) { +                                cnt = i; +                                break; +                        } +                } + +                if (cnt == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "got GF_EVENT_CHILD_UP bad subvolume %s", +                                subvol->name); +                        break; +                } + +                LOCK (&conf->subvolume_lock); +                { +                        conf->subvolume_status[cnt] = 1;                          conf->last_event[cnt] = event; -		} -		UNLOCK (&conf->subvolume_lock); +                } +                UNLOCK (&conf->subvolume_lock);                  /* one of the node came back up, do a stat update */                  dht_get_du_info_for_subvol (this, cnt); -		break; +                break; -	case GF_EVENT_CHILD_MODIFIED: -		subvol = data; +        case GF_EVENT_CHILD_MODIFIED: +                subvol = data; -		conf->gen++; +                conf->gen++; -		break; +                break; -	case GF_EVENT_CHILD_DOWN: -		subvol = data; +        case GF_EVENT_CHILD_DOWN: +                subvol = data; -		for (i = 0; i < conf->subvolume_cnt; i++) { -			if (subvol == conf->subvolumes[i]) { -				cnt = i; -				break; -			} -		} - -		if (cnt == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"got GF_EVENT_CHILD_DOWN bad subvolume %s", -				subvol->name); -			break; -		} - -		LOCK (&conf->subvolume_lock); -		{ -			conf->subvolume_status[cnt] = 0; +                for (i = 0; i < conf->subvolume_cnt; i++) { +                        if (subvol == conf->subvolumes[i]) { +                                cnt = i; +                                break; +                        } +                } + +                if (cnt == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "got GF_EVENT_CHILD_DOWN bad subvolume %s", +                                subvol->name); +                        break; +                } + +                LOCK (&conf->subvolume_lock); +                { +                        conf->subvolume_status[cnt] = 0;                          conf->last_event[cnt] = event; -		} -		UNLOCK (&conf->subvolume_lock); +                } +                UNLOCK (&conf->subvolume_lock);                  break; -	case GF_EVENT_CHILD_CONNECTING: -		subvol = data; +        case GF_EVENT_CHILD_CONNECTING: +                subvol = data; -		for (i = 0; i < conf->subvolume_cnt; i++) { -			if (subvol == conf->subvolumes[i]) { -				cnt = i; -				break; -			} -		} +                for (i = 0; i < conf->subvolume_cnt; i++) { +                        if (subvol == conf->subvolumes[i]) { +                                cnt = i; +                                break; +                        } +                } -		if (cnt == -1) { -			gf_log (this->name, GF_LOG_DEBUG, -				"got GF_EVENT_CHILD_CONNECTING bad subvolume %s", -				subvol->name); -			break; -		} +                if (cnt == -1) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "got GF_EVENT_CHILD_CONNECTING bad subvolume %s", +                                subvol->name); +                        break; +                } -		LOCK (&conf->subvolume_lock); -		{ +                LOCK (&conf->subvolume_lock); +                {                          conf->last_event[cnt] = event; -		} -		UNLOCK (&conf->subvolume_lock); +                } +                UNLOCK (&conf->subvolume_lock); -		break; +                break;          default:                  propagate = 1;                  break; -	} +        }          /* have all subvolumes reported status once by now? */ @@ -5141,6 +5140,5 @@ dht_notify (xlator_t *this, int event, void *data, ...)          if (propagate || event == GF_EVENT_CHILD_MODIFIED)                  ret = default_notify (this, event, data); -	return ret; +        return ret;  } - diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index f6e5e6d0d07..9c39d0d63b8 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.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/>.  */  #ifndef _CONFIG_H @@ -35,22 +35,22 @@  #include <fnmatch.h>  typedef int (*dht_selfheal_dir_cbk_t) (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);  struct dht_layout {          int               cnt; -	int               preset; +        int               preset;          int               gen; -	int               type; +        int               type;          int               ref;   /* use with dht_conf_t->layout_lock */          int               search_unhashed;          struct { -		int       err;   /* 0 = normal -				   -1 = dir exists and no xattr -				   >0 = dir lookup failed with errno -				 */ +                int       err;   /* 0 = normal +                                    -1 = dir exists and no xattr +                                    >0 = dir lookup failed with errno +                                 */                  uint32_t  start;                  uint32_t  stop;                  xlator_t *xlator; @@ -60,66 +60,66 @@ typedef struct dht_layout dht_layout_t;  typedef enum { -	DHT_HASH_TYPE_DM, +        DHT_HASH_TYPE_DM,  } dht_hashfn_type_t;  struct dht_local { -	int                      call_cnt; -	loc_t                    loc; -	loc_t                    loc2; -	int                      op_ret; -	int                      op_errno; -	int                      layout_mismatch; +        int                      call_cnt; +        loc_t                    loc; +        loc_t                    loc2; +        int                      op_ret; +        int                      op_errno; +        int                      layout_mismatch;          /* Use stbuf as the postbuf, when we require both           * pre and post attrs */ -	struct iatt              stbuf; +        struct iatt              stbuf;          struct iatt              prebuf;          struct iatt              preoldparent;          struct iatt              postoldparent;          struct iatt              preparent;          struct iatt              postparent; -	struct statvfs           statvfs; -	fd_t                    *fd; -	inode_t                 *inode; +        struct statvfs           statvfs; +        fd_t                    *fd; +        inode_t                 *inode;          dict_t                  *params; -	dict_t                  *xattr; -	dict_t                  *xattr_req; -	dht_layout_t            *layout; -	size_t                   size; -	ino_t                    ia_ino; -	xlator_t                *src_hashed, *src_cached; -	xlator_t                *dst_hashed, *dst_cached; -	xlator_t                *cached_subvol; -	xlator_t                *hashed_subvol; -	char                     need_selfheal; +        dict_t                  *xattr; +        dict_t                  *xattr_req; +        dht_layout_t            *layout; +        size_t                   size; +        ino_t                    ia_ino; +        xlator_t                *src_hashed, *src_cached; +        xlator_t                *dst_hashed, *dst_cached; +        xlator_t                *cached_subvol; +        xlator_t                *hashed_subvol; +        char                     need_selfheal;          int                      file_count;          int                      dir_count;          call_frame_t            *main_frame; -	struct { -		fop_mknod_cbk_t  linkfile_cbk; -		struct iatt      stbuf; -		loc_t            loc; -		inode_t         *inode; -		dict_t          *xattr; -		xlator_t        *srcvol; -	} linkfile; -	struct { -		uint32_t         hole_cnt; -		uint32_t         overlaps_cnt; -		uint32_t         missing; -		uint32_t         down; -		uint32_t         misc; -		dht_selfheal_dir_cbk_t   dir_cbk; -		dht_layout_t    *layout; -	} selfheal; +        struct { +                fop_mknod_cbk_t  linkfile_cbk; +                struct iatt      stbuf; +                loc_t            loc; +                inode_t         *inode; +                dict_t          *xattr; +                xlator_t        *srcvol; +        } linkfile; +        struct { +                uint32_t         hole_cnt; +                uint32_t         overlaps_cnt; +                uint32_t         missing; +                uint32_t         down; +                uint32_t         misc; +                dht_selfheal_dir_cbk_t   dir_cbk; +                dht_layout_t    *layout; +        } selfheal;          uint32_t                 uid;          uint32_t                 gid; -	/* needed by nufa */ -	int32_t flags; -	mode_t  mode; -	dev_t   rdev; +        /* needed by nufa */ +        int32_t flags; +        mode_t  mode; +        dev_t   rdev;          /* need for file-info */          char   *pathinfo; @@ -144,22 +144,22 @@ struct dht_du {  typedef struct dht_du dht_du_t;  struct dht_conf { -	gf_lock_t      subvolume_lock; +        gf_lock_t      subvolume_lock;          int            subvolume_cnt;          xlator_t     **subvolumes; -	char          *subvolume_status; +        char          *subvolume_status;          int           *last_event; -	dht_layout_t **file_layouts; -	dht_layout_t **dir_layouts; -	dht_layout_t  *default_dir_layout; -	gf_boolean_t   search_unhashed; -	int            gen; +        dht_layout_t **file_layouts; +        dht_layout_t **dir_layouts; +        dht_layout_t  *default_dir_layout; +        gf_boolean_t   search_unhashed; +        int            gen;          dht_du_t      *du_stats;          uint64_t       min_free_disk;          char           disk_unit;          int32_t        refresh_interval;          gf_boolean_t   unhashed_sticky_bit; -	struct timeval last_stat_fetch; +        struct timeval last_stat_fetch;          gf_lock_t      layout_lock;          void          *private;     /* Can be used by wrapper xlators over                                         dht */ @@ -170,12 +170,12 @@ typedef struct dht_conf dht_conf_t;  struct dht_disk_layout { -	uint32_t           cnt; -	uint32_t           type; -	struct { -		uint32_t   start; -		uint32_t   stop; -	} list[1]; +        uint32_t           cnt; +        uint32_t           type; +        struct { +                uint32_t   start; +                uint32_t   stop; +        } list[1];  };  typedef struct dht_disk_layout dht_disk_layout_t; @@ -200,65 +200,65 @@ typedef struct dht_disk_layout dht_disk_layout_t;  #define layout_is_sane(layout) ((layout) && (layout->cnt > 0))  #define DHT_STACK_UNWIND(fop, frame, params ...) do {           \ -		dht_local_t *__local = NULL;                    \ +                dht_local_t *__local = NULL;                    \                  xlator_t *__xl = NULL;                          \                  if (frame) {                                    \                          __xl = frame->this;                     \                          __local = frame->local;                 \                          frame->local = NULL;                    \                  }                                               \ -		STACK_UNWIND_STRICT (fop, frame, params);       \ -		dht_local_wipe (__xl, __local);                 \ -	} while (0) - -#define DHT_STACK_DESTROY(frame) do {		       \ -		dht_local_t *__local = NULL;           \ -                xlator_t *__xl = NULL;                 \ -                __xl = frame->this;                    \ -		__local = frame->local;                \ -		frame->local = NULL;		       \ -		STACK_DESTROY (frame->root);	       \ -		dht_local_wipe (__xl, __local);	       \ -	} while (0) +                STACK_UNWIND_STRICT (fop, frame, params);       \ +                dht_local_wipe (__xl, __local);                 \ +        } while (0) + +#define DHT_STACK_DESTROY(frame) do {           \ +                dht_local_t *__local = NULL;    \ +                xlator_t *__xl = NULL;          \ +                __xl = frame->this;             \ +                __local = frame->local;         \ +                frame->local = NULL;            \ +                STACK_DESTROY (frame->root);    \ +                dht_local_wipe (__xl, __local); \ +        } while (0)  dht_layout_t *dht_layout_new (xlator_t *this, int cnt);  dht_layout_t *dht_layout_get (xlator_t *this, inode_t *inode);  dht_layout_t *dht_layout_for_subvol (xlator_t *this, xlator_t *subvol);  xlator_t *dht_layout_search (xlator_t *this, dht_layout_t *layout, -			     const char *name); +                             const char *name);  int dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout);  int dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout, -			  uint32_t *holes_p, uint32_t *overlaps_p, -			  uint32_t *missing_p, uint32_t *down_p, -			  uint32_t *misc_p); +                          uint32_t *holes_p, uint32_t *overlaps_p, +                          uint32_t *missing_p, uint32_t *down_p, +                          uint32_t *misc_p);  int dht_layout_dir_mismatch (xlator_t *this, dht_layout_t *layout, -			     xlator_t *subvol, loc_t *loc, dict_t *xattr); +                             xlator_t *subvol, loc_t *loc, dict_t *xattr);  xlator_t *dht_linkfile_subvol (xlator_t *this, inode_t *inode, -			       struct iatt *buf, dict_t *xattr); +                               struct iatt *buf, dict_t *xattr);  int dht_linkfile_unlink (call_frame_t *frame, xlator_t *this, -			 xlator_t *subvol, loc_t *loc); +                         xlator_t *subvol, loc_t *loc);  int dht_layouts_init (xlator_t *this, dht_conf_t *conf);  int dht_layout_merge (xlator_t *this, dht_layout_t *layout, xlator_t *subvol, -		      int op_ret, int op_errno, dict_t *xattr); +                      int op_ret, int op_errno, dict_t *xattr);  int dht_disk_layout_extract (xlator_t *this, dht_layout_t *layout, -			     int pos, int32_t **disk_layout_p); +                             int pos, int32_t **disk_layout_p);  int dht_disk_layout_merge (xlator_t *this, dht_layout_t *layout, -			   int pos, void *disk_layout_raw); +                           int pos, void *disk_layout_raw);  int dht_frame_return (call_frame_t *frame);  int dht_itransform (xlator_t *this, xlator_t *subvol, uint64_t x, uint64_t *y);  int dht_deitransform (xlator_t *this, uint64_t y, xlator_t **subvol, -		      uint64_t *x); +                      uint64_t *x);  void dht_local_wipe (xlator_t *this, dht_local_t *local);  dht_local_t *dht_local_init (call_frame_t *frame);  int dht_iatt_merge (xlator_t *this, struct iatt *to, struct iatt *from, -		    xlator_t *subvol); +                    xlator_t *subvol);  xlator_t *dht_subvol_get_hashed (xlator_t *this, loc_t *loc);  xlator_t *dht_subvol_get_cached (xlator_t *this, inode_t *inode); @@ -268,23 +268,23 @@ int dht_subvol_cnt (xlator_t *this, xlator_t *subvol);  int dht_hash_compute (int type, const char *name, uint32_t *hash_p);  int dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk, -			 xlator_t *tovol, xlator_t *fromvol, loc_t *loc); +                         xlator_t *tovol, xlator_t *fromvol, loc_t *loc);  int dht_lookup_directory (call_frame_t *frame, xlator_t *this, loc_t *loc);  int dht_lookup_everywhere (call_frame_t *frame, xlator_t *this, loc_t *loc);  int  dht_selfheal_directory (call_frame_t *frame, dht_selfheal_dir_cbk_t cbk, -			loc_t *loc, dht_layout_t *layout); +                        loc_t *loc, dht_layout_t *layout);  int  dht_selfheal_new_directory (call_frame_t *frame, dht_selfheal_dir_cbk_t cbk, -			    dht_layout_t *layout); +                            dht_layout_t *layout);  int  dht_selfheal_restore (call_frame_t *frame, dht_selfheal_dir_cbk_t cbk, -		      loc_t *loc, dht_layout_t *layout); +                      loc_t *loc, dht_layout_t *layout);  int  dht_layout_sort_volname (dht_layout_t *layout);  int dht_rename (call_frame_t *frame, xlator_t *this, -		loc_t *oldloc, loc_t *newloc); +                loc_t *oldloc, loc_t *newloc);  int dht_get_du_info (call_frame_t *frame, xlator_t *this, loc_t *loc); diff --git a/xlators/cluster/dht/src/dht-diskusage.c b/xlators/cluster/dht/src/dht-diskusage.c index 14e278b1263..e526d1aec0c 100644 --- a/xlators/cluster/dht/src/dht-diskusage.c +++ b/xlators/cluster/dht/src/dht-diskusage.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/>.  */ @@ -33,13 +33,13 @@  #include <sys/time.h> -int  +int  dht_du_info_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                   int op_ret, int op_errno, struct statvfs *statvfs)  { -	dht_conf_t    *conf         = NULL; +        dht_conf_t    *conf         = NULL;          call_frame_t  *prev          = NULL; -	int            this_call_cnt = 0; +        int            this_call_cnt = 0;          int            i = 0;          double         percent = 0;          uint64_t       bytes = 0; @@ -47,14 +47,14 @@ dht_du_info_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          conf = this->private;          prev = cookie; -        if (op_ret == -1)  +        if (op_ret == -1)                  goto out;          if (statvfs && statvfs->f_blocks) {                  percent = (statvfs->f_bfree * 100) / statvfs->f_blocks;                  bytes = (statvfs->f_bfree * statvfs->f_frsize);          } -         +          LOCK (&conf->subvolume_lock);          {                  for (i = 0; i < conf->subvolume_cnt; i++) @@ -64,17 +64,17 @@ dht_du_info_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                  gf_log (this->name, GF_LOG_DEBUG,                                          "on subvolume '%s': avail_percent is: "                                          "%.2f and avail_space is: %"PRIu64"", -                                        prev->this->name,  +                                        prev->this->name,                                          conf->du_stats[i].avail_percent,                                          conf->du_stats[i].avail_space);                          }          }          UNLOCK (&conf->subvolume_lock); - out: -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) -		DHT_STACK_DESTROY (frame); +out: +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) +                DHT_STACK_DESTROY (frame);          return 0;  } @@ -82,12 +82,12 @@ dht_du_info_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  dht_get_du_info_for_subvol (xlator_t *this, int subvol_idx)  { -	dht_conf_t    *conf         = NULL; -	call_frame_t  *statfs_frame = NULL; -	dht_local_t   *statfs_local = NULL; +        dht_conf_t    *conf         = NULL; +        call_frame_t  *statfs_frame = NULL; +        dht_local_t   *statfs_local = NULL;          call_pool_t   *pool         = NULL; -	conf = this->private; +        conf = this->private;          pool = this->ctx->pool;          statfs_frame = create_frame (this, pool); @@ -96,18 +96,18 @@ dht_get_du_info_for_subvol (xlator_t *this, int subvol_idx)                          "Out of memory");                  goto err;          } -         +          statfs_local = dht_local_init (statfs_frame);          if (!statfs_local) {                  gf_log (this->name, GF_LOG_ERROR,                          "Out of memory");                  goto err;          } -         +          loc_t tmp_loc = { .inode = NULL,                            .path = "/",          }; -         +          statfs_local->call_cnt = 1;          STACK_WIND (statfs_frame, dht_du_info_cbk,                      conf->subvolumes[subvol_idx], @@ -115,10 +115,10 @@ dht_get_du_info_for_subvol (xlator_t *this, int subvol_idx)                      &tmp_loc);          return 0; - err: -	if (statfs_frame) -		DHT_STACK_DESTROY (statfs_frame); -         +err: +        if (statfs_frame) +                DHT_STACK_DESTROY (statfs_frame); +          return -1;  } @@ -126,16 +126,16 @@ int  dht_get_du_info (call_frame_t *frame, xlator_t *this, loc_t *loc)  {          int            i = 0; -	dht_conf_t    *conf         = NULL; -	call_frame_t  *statfs_frame = NULL; -	dht_local_t   *statfs_local = NULL; +        dht_conf_t    *conf         = NULL; +        call_frame_t  *statfs_frame = NULL; +        dht_local_t   *statfs_local = NULL;          struct timeval tv = {0,}; -	conf  = this->private; +        conf  = this->private; -	gettimeofday (&tv, NULL); -	if (tv.tv_sec > (conf->refresh_interval  -			 + conf->last_stat_fetch.tv_sec)) { +        gettimeofday (&tv, NULL); +        if (tv.tv_sec > (conf->refresh_interval +                         + conf->last_stat_fetch.tv_sec)) {                  statfs_frame = copy_frame (frame);                  if (!statfs_frame) { @@ -153,9 +153,9 @@ dht_get_du_info (call_frame_t *frame, xlator_t *this, loc_t *loc)                  loc_copy (&statfs_local->loc, loc);                  loc_t tmp_loc = { .inode = NULL, -                              .path = "/", +                                  .path = "/",                  }; -                 +                  statfs_local->call_cnt = conf->subvolume_cnt;                  for (i = 0; i < conf->subvolume_cnt; i++) {                          STACK_WIND (statfs_frame, dht_du_info_cbk, @@ -168,8 +168,8 @@ dht_get_du_info (call_frame_t *frame, xlator_t *this, loc_t *loc)          }          return 0;  err: -	if (statfs_frame) -		DHT_STACK_DESTROY (statfs_frame); +        if (statfs_frame) +                DHT_STACK_DESTROY (statfs_frame);          return -1;  } @@ -180,7 +180,7 @@ dht_is_subvol_filled (xlator_t *this, xlator_t *subvol)  {          int         i = 0;          int         subvol_filled = 0; -	dht_conf_t *conf = NULL; +        dht_conf_t *conf = NULL;          conf = this->private; @@ -211,8 +211,8 @@ dht_is_subvol_filled (xlator_t *this, xlator_t *subvol)                  if (!(conf->du_stats[i].log++ % (GF_UNIVERSAL_ANSWER * 10))) {                          gf_log (this->name, GF_LOG_WARNING,                                  "disk space on subvolume '%s' is getting " -                                "full (%.2f %%), consider adding more nodes",  -                                subvol->name,  +                                "full (%.2f %%), consider adding more nodes", +                                subvol->name,                                  (100 - conf->du_stats[i].avail_percent));                  }          } @@ -221,12 +221,12 @@ dht_is_subvol_filled (xlator_t *this, xlator_t *subvol)  }  xlator_t * -dht_free_disk_available_subvol (xlator_t *this, xlator_t *subvol)  +dht_free_disk_available_subvol (xlator_t *this, xlator_t *subvol)  {          int         i = 0;          double      max= 0;          xlator_t   *avail_subvol = NULL; -	dht_conf_t *conf = NULL; +        dht_conf_t *conf = NULL;          conf = this->private; @@ -257,7 +257,7 @@ dht_free_disk_available_subvol (xlator_t *this, xlator_t *subvol)                  avail_subvol = subvol;          if (!avail_subvol) -                avail_subvol = subvol;                 +                avail_subvol = subvol;          return avail_subvol;  } diff --git a/xlators/cluster/dht/src/dht-hashfn.c b/xlators/cluster/dht/src/dht-hashfn.c index 528ac2f904b..99bb13265b7 100644 --- a/xlators/cluster/dht/src/dht-hashfn.c +++ b/xlators/cluster/dht/src/dht-hashfn.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/>.  */  #ifndef _CONFIG_H @@ -32,28 +32,28 @@  int  dht_hash_compute_internal (int type, const char *name, uint32_t *hash_p)  { -	int      ret = 0; -	uint32_t hash = 0; - -	switch (type) { -	case DHT_HASH_TYPE_DM: -		hash = gf_dm_hashfn (name, strlen (name)); -		break; -	default: -		ret = -1; -		break; -	} - -	if (ret == 0) { -		*hash_p = hash; -	} - -	return ret; +        int      ret = 0; +        uint32_t hash = 0; + +        switch (type) { +        case DHT_HASH_TYPE_DM: +                hash = gf_dm_hashfn (name, strlen (name)); +                break; +        default: +                ret = -1; +                break; +        } + +        if (ret == 0) { +                *hash_p = hash; +        } + +        return ret;  }  #define MAKE_RSYNC_FRIENDLY_NAME(rsync_frndly_name, name) do {          \ -                rsync_frndly_name = (char *) name;			\ +                rsync_frndly_name = (char *) name;                      \                  if (name[0] == '.') {                                   \                          char *dot   = 0;                                \                          int namelen = 0;                                \ @@ -73,9 +73,9 @@ dht_hash_compute_internal (int type, const char *name, uint32_t *hash_p)  int  dht_hash_compute (int type, const char *name, uint32_t *hash_p)  { -	char     *rsync_friendly_name = NULL; +        char     *rsync_friendly_name = NULL; -	MAKE_RSYNC_FRIENDLY_NAME (rsync_friendly_name, name); +        MAKE_RSYNC_FRIENDLY_NAME (rsync_friendly_name, name); -	return dht_hash_compute_internal (type, rsync_friendly_name, hash_p); +        return dht_hash_compute_internal (type, rsync_friendly_name, hash_p);  } diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c index 7da3a7a61f1..00c710f6145 100644 --- a/xlators/cluster/dht/src/dht-helper.c +++ b/xlators/cluster/dht/src/dht-helper.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/>.  */  #ifndef _CONFIG_H @@ -31,52 +31,52 @@  int  dht_frame_return (call_frame_t *frame)  { -	dht_local_t *local = NULL; -	int          this_call_cnt = -1; +        dht_local_t *local = NULL; +        int          this_call_cnt = -1; -	if (!frame) -		return -1; +        if (!frame) +                return -1; -	local = frame->local; +        local = frame->local; -	LOCK (&frame->lock); -	{ -		this_call_cnt = --local->call_cnt; -	} -	UNLOCK (&frame->lock); +        LOCK (&frame->lock); +        { +                this_call_cnt = --local->call_cnt; +        } +        UNLOCK (&frame->lock); -	return this_call_cnt; +        return this_call_cnt;  }  int  dht_itransform (xlator_t *this, xlator_t *subvol, uint64_t x, uint64_t *y_p)  { -	dht_conf_t *conf = NULL; -	int         cnt = 0; -	int         max = 0; -	uint64_t    y = 0; +        dht_conf_t *conf = NULL; +        int         cnt = 0; +        int         max = 0; +        uint64_t    y = 0; -	if (x == ((uint64_t) -1)) { -		y = (uint64_t) -1; -		goto out; -	} +        if (x == ((uint64_t) -1)) { +                y = (uint64_t) -1; +                goto out; +        } -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out; -	max = conf->subvolume_cnt; -	cnt = dht_subvol_cnt (this, subvol); +        max = conf->subvolume_cnt; +        cnt = dht_subvol_cnt (this, subvol); -	y = ((x * max) + cnt); +        y = ((x * max) + cnt);  out: -	if (y_p) -		*y_p = y; +        if (y_p) +                *y_p = y; -	return 0; +        return 0;  }  int @@ -141,76 +141,76 @@ out:  int  dht_deitransform (xlator_t *this, uint64_t y, xlator_t **subvol_p, -		  uint64_t *x_p) +                  uint64_t *x_p)  { -	dht_conf_t *conf = NULL; -	int         cnt = 0; -	int         max = 0; -	uint64_t    x = 0; -	xlator_t   *subvol = 0; +        dht_conf_t *conf = NULL; +        int         cnt = 0; +        int         max = 0; +        uint64_t    x = 0; +        xlator_t   *subvol = 0;          if (!this->private)                  goto out; -	conf = this->private; -	max = conf->subvolume_cnt; +        conf = this->private; +        max = conf->subvolume_cnt; -	cnt = y % max; -	x   = y / max; +        cnt = y % max; +        x   = y / max; -	subvol = conf->subvolumes[cnt]; +        subvol = conf->subvolumes[cnt]; -	if (subvol_p) -		*subvol_p = subvol; +        if (subvol_p) +                *subvol_p = subvol; -	if (x_p) -		*x_p = x; +        if (x_p) +                *x_p = x;  out: -	return 0; +        return 0;  }  void  dht_local_wipe (xlator_t *this, dht_local_t *local)  { -	if (!local) -		return; +        if (!local) +                return; -	loc_wipe (&local->loc); -	loc_wipe (&local->loc2); +        loc_wipe (&local->loc); +        loc_wipe (&local->loc2); -	if (local->xattr) -		dict_unref (local->xattr); +        if (local->xattr) +                dict_unref (local->xattr); -	if (local->inode) -		inode_unref (local->inode); +        if (local->inode) +                inode_unref (local->inode); -	if (local->layout) { -		dht_layout_unref (this, local->layout); +        if (local->layout) { +                dht_layout_unref (this, local->layout);                  local->layout = NULL;          } -	loc_wipe (&local->linkfile.loc); +        loc_wipe (&local->linkfile.loc); -	if (local->linkfile.xattr) -		dict_unref (local->linkfile.xattr); +        if (local->linkfile.xattr) +                dict_unref (local->linkfile.xattr); -	if (local->linkfile.inode) -		inode_unref (local->linkfile.inode); +        if (local->linkfile.inode) +                inode_unref (local->linkfile.inode); -	if (local->fd) { -		fd_unref (local->fd); -		local->fd = NULL; -	} +        if (local->fd) { +                fd_unref (local->fd); +                local->fd = NULL; +        }          if (local->params) {                  dict_unref (local->params);                  local->params = NULL;          } -	if (local->xattr_req) -		dict_unref (local->xattr_req); +        if (local->xattr_req) +                dict_unref (local->xattr_req);          if (local->selfheal.layout) {                  dht_layout_unref (this, local->selfheal.layout); @@ -222,31 +222,31 @@ dht_local_wipe (xlator_t *this, dht_local_t *local)          }          if (local->key) { -               GF_FREE (local->key); +                GF_FREE (local->key);          } -            -	GF_FREE (local); + +        GF_FREE (local);  }  dht_local_t *  dht_local_init (call_frame_t *frame)  { -	dht_local_t *local = NULL; +        dht_local_t *local = NULL; -	/* TODO: use mem-pool */ -	local = GF_CALLOC (1, sizeof (*local), +        /* TODO: use mem-pool */ +        local = GF_CALLOC (1, sizeof (*local),                             gf_dht_mt_dht_local_t); -	if (!local) -		return NULL; +        if (!local) +                return NULL; -	local->op_ret = -1; -	local->op_errno = EUCLEAN; +        local->op_ret = -1; +        local->op_errno = EUCLEAN; -	frame->local = local; +        frame->local = local; -	return local; +        return local;  } @@ -266,27 +266,27 @@ basestr (const char *str)  xlator_t *  dht_first_up_subvol (xlator_t *this)  { -	dht_conf_t *conf = NULL; -	xlator_t   *child = NULL; -	int         i = 0; +        dht_conf_t *conf = NULL; +        xlator_t   *child = NULL; +        int         i = 0; -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out; -	LOCK (&conf->subvolume_lock); -	{ -		for (i = 0; i < conf->subvolume_cnt; i++) { -			if (conf->subvolume_status[i]) { -				child = conf->subvolumes[i]; -				break; -			} -		} -	} -	UNLOCK (&conf->subvolume_lock); +        LOCK (&conf->subvolume_lock); +        { +                for (i = 0; i < conf->subvolume_cnt; i++) { +                        if (conf->subvolume_status[i]) { +                                child = conf->subvolumes[i]; +                                break; +                        } +                } +        } +        UNLOCK (&conf->subvolume_lock);  out: -	return child; +        return child;  }  xlator_t * @@ -366,7 +366,7 @@ dht_subvol_get_cached (xlator_t *this, inode_t *inode)                  goto out;          } -	subvol = layout->list[0].xlator; +        subvol = layout->list[0].xlator;  out:          if (layout) { @@ -380,84 +380,84 @@ out:  xlator_t *  dht_subvol_next (xlator_t *this, xlator_t *prev)  { -	dht_conf_t *conf = NULL; -	int         i = 0; -	xlator_t   *next = NULL; +        dht_conf_t *conf = NULL; +        int         i = 0; +        xlator_t   *next = NULL; -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		if (conf->subvolumes[i] == prev) { -			if ((i + 1) < conf->subvolume_cnt) -				next = conf->subvolumes[i + 1]; -			break; -		} -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                if (conf->subvolumes[i] == prev) { +                        if ((i + 1) < conf->subvolume_cnt) +                                next = conf->subvolumes[i + 1]; +                        break; +                } +        }  out: -	return next; +        return next;  }  int  dht_subvol_cnt (xlator_t *this, xlator_t *subvol)  { -	int i = 0; -	int ret = -1; -	dht_conf_t *conf = NULL; +        int i = 0; +        int ret = -1; +        dht_conf_t *conf = NULL; -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		if (subvol == conf->subvolumes[i]) { -			ret = i; -			break; -		} -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                if (subvol == conf->subvolumes[i]) { +                        ret = i; +                        break; +                } +        }  out: -	return ret; +        return ret;  } -#define set_if_greater(a, b) do {		\ -		if ((a) < (b))			\ -			(a) = (b);		\ -	} while (0) +#define set_if_greater(a, b) do {               \ +                if ((a) < (b))                  \ +                        (a) = (b);              \ +        } while (0)  int  dht_iatt_merge (xlator_t *this, struct iatt *to, -		struct iatt *from, xlator_t *subvol) +                struct iatt *from, xlator_t *subvol)  {          if (!from || !to)                  return 0; -	to->ia_dev      = from->ia_dev; +        to->ia_dev      = from->ia_dev;          uuid_copy (to->ia_gfid, from->ia_gfid); -	dht_itransform (this, subvol, from->ia_ino, &to->ia_ino); +        dht_itransform (this, subvol, from->ia_ino, &to->ia_ino); -	to->ia_prot     = from->ia_prot; -	to->ia_type     = from->ia_type; -	to->ia_nlink    = from->ia_nlink; -	to->ia_rdev     = from->ia_rdev; -	to->ia_size    += from->ia_size; -	to->ia_blksize  = from->ia_blksize; -	to->ia_blocks  += from->ia_blocks; +        to->ia_prot     = from->ia_prot; +        to->ia_type     = from->ia_type; +        to->ia_nlink    = from->ia_nlink; +        to->ia_rdev     = from->ia_rdev; +        to->ia_size    += from->ia_size; +        to->ia_blksize  = from->ia_blksize; +        to->ia_blocks  += from->ia_blocks; -	set_if_greater (to->ia_uid, from->ia_uid); -	set_if_greater (to->ia_gid, from->ia_gid); +        set_if_greater (to->ia_uid, from->ia_uid); +        set_if_greater (to->ia_gid, from->ia_gid); -	set_if_greater (to->ia_atime, from->ia_atime); -	set_if_greater (to->ia_mtime, from->ia_mtime); -	set_if_greater (to->ia_ctime, from->ia_ctime); +        set_if_greater (to->ia_atime, from->ia_atime); +        set_if_greater (to->ia_mtime, from->ia_mtime); +        set_if_greater (to->ia_ctime, from->ia_ctime); -	return 0; +        return 0;  }  int diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c index 8a5f45d884b..23cec09d780 100644 --- a/xlators/cluster/dht/src/dht-layout.c +++ b/xlators/cluster/dht/src/dht-layout.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/>.  */  #ifndef _CONFIG_H @@ -38,28 +38,28 @@  dht_layout_t *  dht_layout_new (xlator_t *this, int cnt)  { -	dht_layout_t *layout = NULL; +        dht_layout_t *layout = NULL;          dht_conf_t   *conf = NULL;          conf = this->private; -	layout = GF_CALLOC (1, layout_size (cnt), +        layout = GF_CALLOC (1, layout_size (cnt),                              gf_dht_mt_dht_layout_t); -	if (!layout) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto out; -	} +        if (!layout) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto out; +        }          layout->type = DHT_HASH_TYPE_DM; -	layout->cnt = cnt; +        layout->cnt = cnt;          if (conf)                  layout->gen = conf->gen;          layout->ref = 1;  out: -	return layout; +        return layout;  } @@ -167,532 +167,532 @@ dht_layout_ref (xlator_t *this, dht_layout_t *layout)  xlator_t *  dht_layout_search (xlator_t *this, dht_layout_t *layout, const char *name)  { -	uint32_t   hash = 0; +        uint32_t   hash = 0;          xlator_t  *subvol = NULL; -	int        i = 0; -	int        ret = 0; - - -	ret = dht_hash_compute (layout->type, name, &hash); -	if (ret != 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"hash computation failed for type=%d name=%s", -			layout->type, name); -		goto out; -	} - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].start <= hash -		    && layout->list[i].stop >= hash) { -			subvol = layout->list[i].xlator; -			break; -		} -	} - -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume for hash (value) = %u", hash); -	} +        int        i = 0; +        int        ret = 0; + + +        ret = dht_hash_compute (layout->type, name, &hash); +        if (ret != 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "hash computation failed for type=%d name=%s", +                        layout->type, name); +                goto out; +        } + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].start <= hash +                    && layout->list[i].stop >= hash) { +                        subvol = layout->list[i].xlator; +                        break; +                } +        } + +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume for hash (value) = %u", hash); +        }  out: -	return subvol; +        return subvol;  }  dht_layout_t *  dht_layout_for_subvol (xlator_t *this, xlator_t *subvol)  { -	dht_conf_t   *conf = NULL; -	dht_layout_t *layout = NULL; -	int           i = 0; +        dht_conf_t   *conf = NULL; +        dht_layout_t *layout = NULL; +        int           i = 0; -	conf = this->private; +        conf = this->private;          if (!conf)                  goto out; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		if (conf->subvolumes[i] == subvol) { -			layout = conf->file_layouts[i]; -			break; -		} -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                if (conf->subvolumes[i] == subvol) { +                        layout = conf->file_layouts[i]; +                        break; +                } +        }  out: -	return layout; +        return layout;  }  int  dht_layouts_init (xlator_t *this, dht_conf_t *conf)  { -	dht_layout_t *layout = NULL; -	int           i = 0; -	int           ret = -1; +        dht_layout_t *layout = NULL; +        int           i = 0; +        int           ret = -1;          if (!conf)                  goto out; -	conf->file_layouts = GF_CALLOC (conf->subvolume_cnt, -				        sizeof (dht_layout_t *), +        conf->file_layouts = GF_CALLOC (conf->subvolume_cnt, +                                        sizeof (dht_layout_t *),                                          gf_dht_mt_dht_layout_t); -	if (!conf->file_layouts) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto out; -	} +        if (!conf->file_layouts) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto out; +        } -	for (i = 0; i < conf->subvolume_cnt; i++) { -		layout = dht_layout_new (this, 1); +        for (i = 0; i < conf->subvolume_cnt; i++) { +                layout = dht_layout_new (this, 1); -		if (!layout) { -			goto out; -		} +                if (!layout) { +                        goto out; +                } -		layout->preset = 1; +                layout->preset = 1; -		layout->list[0].xlator = conf->subvolumes[i]; +                layout->list[0].xlator = conf->subvolumes[i]; -		conf->file_layouts[i] = layout; -	} +                conf->file_layouts[i] = layout; +        } -	ret = 0; +        ret = 0;  out: -	return ret; +        return ret;  }  int  dht_disk_layout_extract (xlator_t *this, dht_layout_t *layout, -			 int pos, int32_t **disk_layout_p) +                         int pos, int32_t **disk_layout_p)  { -	int      ret = -1; -	int32_t *disk_layout = NULL; +        int      ret = -1; +        int32_t *disk_layout = NULL; -	disk_layout = GF_CALLOC (5, sizeof (int), +        disk_layout = GF_CALLOC (5, sizeof (int),                                   gf_dht_mt_int32_t); -	if (!disk_layout) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto out; -	} +        if (!disk_layout) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto out; +        } -	disk_layout[0] = hton32 (1); -	disk_layout[1] = hton32 (layout->type); -	disk_layout[2] = hton32 (layout->list[pos].start); -	disk_layout[3] = hton32 (layout->list[pos].stop); +        disk_layout[0] = hton32 (1); +        disk_layout[1] = hton32 (layout->type); +        disk_layout[2] = hton32 (layout->list[pos].start); +        disk_layout[3] = hton32 (layout->list[pos].stop); -	if (disk_layout_p) -		*disk_layout_p = disk_layout; -	ret = 0; +        if (disk_layout_p) +                *disk_layout_p = disk_layout; +        ret = 0;  out: -	return ret; +        return ret;  }  int  dht_disk_layout_merge (xlator_t *this, dht_layout_t *layout, -		       int pos, void *disk_layout_raw) +                       int pos, void *disk_layout_raw)  { -	int      cnt = 0; -	int      type = 0; -	int      start_off = 0; -	int      stop_off = 0; +        int      cnt = 0; +        int      type = 0; +        int      start_off = 0; +        int      stop_off = 0;          int      disk_layout[4]; -	/* TODO: assert disk_layout_ptr is of required length */ +        /* TODO: assert disk_layout_ptr is of required length */          memcpy (disk_layout, disk_layout_raw, sizeof (disk_layout)); -	cnt  = ntoh32 (disk_layout[0]); -	if (cnt != 1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"disk layout has invalid count %d", cnt); -		return -1; -	} +        cnt  = ntoh32 (disk_layout[0]); +        if (cnt != 1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "disk layout has invalid count %d", cnt); +                return -1; +        } -	/* TODO: assert type is compatible */ -	type      = ntoh32 (disk_layout[1]); -	start_off = ntoh32 (disk_layout[2]); -	stop_off  = ntoh32 (disk_layout[3]); +        /* TODO: assert type is compatible */ +        type      = ntoh32 (disk_layout[1]); +        start_off = ntoh32 (disk_layout[2]); +        stop_off  = ntoh32 (disk_layout[3]); -	layout->list[pos].start = start_off; -	layout->list[pos].stop  = stop_off; +        layout->list[pos].start = start_off; +        layout->list[pos].stop  = stop_off; -	gf_log (this->name, GF_LOG_TRACE, -		"merged to layout: %u - %u (type %d) from %s", -		start_off, stop_off, type, -		layout->list[pos].xlator->name); +        gf_log (this->name, GF_LOG_TRACE, +                "merged to layout: %u - %u (type %d) from %s", +                start_off, stop_off, type, +                layout->list[pos].xlator->name); -	return 0; +        return 0;  }  int  dht_layout_merge (xlator_t *this, dht_layout_t *layout, xlator_t *subvol, -		  int op_ret, int op_errno, dict_t *xattr) +                  int op_ret, int op_errno, dict_t *xattr)  { -	int      i     = 0; -	int      ret   = -1; -	int      err   = -1; -	void    *disk_layout_raw = NULL; - - -	if (op_ret != 0) { -		err = op_errno; -	} - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].xlator == NULL) { -			layout->list[i].err    = err; -			layout->list[i].xlator = subvol; -			break; -		} -	} - -	if (op_ret != 0) { -		ret = 0; -		goto out; -	} - -	if (xattr) { -		/* during lookup and not mkdir */ -		ret = dict_get_ptr (xattr, "trusted.glusterfs.dht", -				    &disk_layout_raw); -	} - -	if (ret != 0) { -		layout->list[i].err = -1; -		gf_log (this->name, GF_LOG_TRACE, -			"missing disk layout on %s. err = %d", -			subvol->name, err); -		ret = 0; -		goto out; -	} - -	ret = dht_disk_layout_merge (this, layout, i, disk_layout_raw); -	if (ret != 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"layout merge from subvolume %s failed", -			subvol->name); -		goto out; -	} -	layout->list[i].err = 0; +        int      i     = 0; +        int      ret   = -1; +        int      err   = -1; +        void    *disk_layout_raw = NULL; + + +        if (op_ret != 0) { +                err = op_errno; +        } + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].xlator == NULL) { +                        layout->list[i].err    = err; +                        layout->list[i].xlator = subvol; +                        break; +                } +        } + +        if (op_ret != 0) { +                ret = 0; +                goto out; +        } + +        if (xattr) { +                /* during lookup and not mkdir */ +                ret = dict_get_ptr (xattr, "trusted.glusterfs.dht", +                                    &disk_layout_raw); +        } + +        if (ret != 0) { +                layout->list[i].err = -1; +                gf_log (this->name, GF_LOG_TRACE, +                        "missing disk layout on %s. err = %d", +                        subvol->name, err); +                ret = 0; +                goto out; +        } + +        ret = dht_disk_layout_merge (this, layout, i, disk_layout_raw); +        if (ret != 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "layout merge from subvolume %s failed", +                        subvol->name); +                goto out; +        } +        layout->list[i].err = 0;  out: -	return ret; +        return ret;  }  void  dht_layout_entry_swap (dht_layout_t *layout, int i, int j)  { -	uint32_t  start_swap = 0; -	uint32_t  stop_swap = 0; -	xlator_t *xlator_swap = 0; -	int       err_swap = 0; - - -	start_swap  = layout->list[i].start; -	stop_swap   = layout->list[i].stop; -	xlator_swap = layout->list[i].xlator; -	err_swap    = layout->list[i].err; - -	layout->list[i].start  = layout->list[j].start; -	layout->list[i].stop   = layout->list[j].stop; -	layout->list[i].xlator = layout->list[j].xlator; -	layout->list[i].err    = layout->list[j].err; - -	layout->list[j].start  = start_swap; -	layout->list[j].stop   = stop_swap; -	layout->list[j].xlator = xlator_swap; -	layout->list[j].err    = err_swap; +        uint32_t  start_swap = 0; +        uint32_t  stop_swap = 0; +        xlator_t *xlator_swap = 0; +        int       err_swap = 0; + + +        start_swap  = layout->list[i].start; +        stop_swap   = layout->list[i].stop; +        xlator_swap = layout->list[i].xlator; +        err_swap    = layout->list[i].err; + +        layout->list[i].start  = layout->list[j].start; +        layout->list[i].stop   = layout->list[j].stop; +        layout->list[i].xlator = layout->list[j].xlator; +        layout->list[i].err    = layout->list[j].err; + +        layout->list[j].start  = start_swap; +        layout->list[j].stop   = stop_swap; +        layout->list[j].xlator = xlator_swap; +        layout->list[j].err    = err_swap;  }  int64_t  dht_layout_entry_cmp_volname (dht_layout_t *layout, int i, int j)  { -	return (strcmp (layout->list[i].xlator->name,  -			layout->list[j].xlator->name)); +        return (strcmp (layout->list[i].xlator->name, +                        layout->list[j].xlator->name));  }  int64_t  dht_layout_entry_cmp (dht_layout_t *layout, int i, int j)  { -	int64_t diff = 0; +        int64_t diff = 0; -	if (layout->list[i].err || layout->list[j].err) -		diff = layout->list[i].err - layout->list[j].err; -	else -		diff = (int64_t) layout->list[i].start -			- (int64_t) layout->list[j].start; +        if (layout->list[i].err || layout->list[j].err) +                diff = layout->list[i].err - layout->list[j].err; +        else +                diff = (int64_t) layout->list[i].start +                        - (int64_t) layout->list[j].start; -	return diff; +        return diff;  }  int  dht_layout_sort (dht_layout_t *layout)  { -	int       i = 0; -	int       j = 0; -	int64_t   ret = 0; +        int       i = 0; +        int       j = 0; +        int64_t   ret = 0; -	/* TODO: O(n^2) -- bad bad */ +        /* TODO: O(n^2) -- bad bad */ -	for (i = 0; i < layout->cnt - 1; i++) { -		for (j = i + 1; j < layout->cnt; j++) { -			ret = dht_layout_entry_cmp (layout, i, j); -			if (ret > 0) -				dht_layout_entry_swap (layout, i, j); -		} -	} +        for (i = 0; i < layout->cnt - 1; i++) { +                for (j = i + 1; j < layout->cnt; j++) { +                        ret = dht_layout_entry_cmp (layout, i, j); +                        if (ret > 0) +                                dht_layout_entry_swap (layout, i, j); +                } +        } -	return 0; +        return 0;  }  int  dht_layout_sort_volname (dht_layout_t *layout)  { -	int       i = 0; -	int       j = 0; -	int64_t   ret = 0; +        int       i = 0; +        int       j = 0; +        int64_t   ret = 0; -	/* TODO: O(n^2) -- bad bad */ +        /* TODO: O(n^2) -- bad bad */ -	for (i = 0; i < layout->cnt - 1; i++) { -		for (j = i + 1; j < layout->cnt; j++) { -			ret = dht_layout_entry_cmp_volname (layout, i, j); -			if (ret > 0) -				dht_layout_entry_swap (layout, i, j); -		} -	} +        for (i = 0; i < layout->cnt - 1; i++) { +                for (j = i + 1; j < layout->cnt; j++) { +                        ret = dht_layout_entry_cmp_volname (layout, i, j); +                        if (ret > 0) +                                dht_layout_entry_swap (layout, i, j); +                } +        } -	return 0; +        return 0;  }  int  dht_layout_anomalies (xlator_t *this, loc_t *loc, dht_layout_t *layout, -		      uint32_t *holes_p, uint32_t *overlaps_p, -		      uint32_t *missing_p, uint32_t *down_p, uint32_t *misc_p) +                      uint32_t *holes_p, uint32_t *overlaps_p, +                      uint32_t *missing_p, uint32_t *down_p, uint32_t *misc_p)  { -	uint32_t    overlaps = 0; -	uint32_t    missing  = 0; -	uint32_t    down     = 0; -	uint32_t    misc     = 0; -	uint32_t    hole_cnt = 0; -	uint32_t    overlap_cnt = 0; -	int         i = 0; -	int         ret = 0; -	uint32_t    prev_stop = 0; -	uint32_t    last_stop = 0; -	char        is_virgin = 1; - -	/* TODO: explain WTF is happening */ - -	last_stop = layout->list[0].start - 1; -	prev_stop = last_stop; - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].err) { -			switch (layout->list[i].err) { -			case -1: -			case ENOENT: -				missing++; -				break; -			case ENOTCONN: -				down++; -				break; -			case ENOSPC: -				down++; -				break; -			default: -				misc++; -			} -			continue; -		} - -		is_virgin = 0; - -		if ((prev_stop + 1) < layout->list[i].start) { -			hole_cnt++; -		} - -		if ((prev_stop + 1) > layout->list[i].start) { -			overlap_cnt++; -			overlaps += ((prev_stop + 1) - layout->list[i].start); -		} -		prev_stop = layout->list[i].stop; -	} - -	if ((last_stop - prev_stop) || is_virgin) -	    hole_cnt++; - -	if (holes_p) -		*holes_p = hole_cnt; - -	if (overlaps_p) -		*overlaps_p = overlap_cnt; - -	if (missing_p) -		*missing_p = missing; - -	if (down_p) -		*down_p = down; - -	if (misc_p) -		*misc_p = misc; - -	return ret; +        uint32_t    overlaps = 0; +        uint32_t    missing  = 0; +        uint32_t    down     = 0; +        uint32_t    misc     = 0; +        uint32_t    hole_cnt = 0; +        uint32_t    overlap_cnt = 0; +        int         i = 0; +        int         ret = 0; +        uint32_t    prev_stop = 0; +        uint32_t    last_stop = 0; +        char        is_virgin = 1; + +        /* TODO: explain WTF is happening */ + +        last_stop = layout->list[0].start - 1; +        prev_stop = last_stop; + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].err) { +                        switch (layout->list[i].err) { +                        case -1: +                        case ENOENT: +                                missing++; +                                break; +                        case ENOTCONN: +                                down++; +                                break; +                        case ENOSPC: +                                down++; +                                break; +                        default: +                                misc++; +                        } +                        continue; +                } + +                is_virgin = 0; + +                if ((prev_stop + 1) < layout->list[i].start) { +                        hole_cnt++; +                } + +                if ((prev_stop + 1) > layout->list[i].start) { +                        overlap_cnt++; +                        overlaps += ((prev_stop + 1) - layout->list[i].start); +                } +                prev_stop = layout->list[i].stop; +        } + +        if ((last_stop - prev_stop) || is_virgin) +                hole_cnt++; + +        if (holes_p) +                *holes_p = hole_cnt; + +        if (overlaps_p) +                *overlaps_p = overlap_cnt; + +        if (missing_p) +                *missing_p = missing; + +        if (down_p) +                *down_p = down; + +        if (misc_p) +                *misc_p = misc; + +        return ret;  }  int  dht_layout_normalize (xlator_t *this, loc_t *loc, dht_layout_t *layout)  { -	int          ret   = 0; -	int          i = 0; -	uint32_t     holes = 0; -	uint32_t     overlaps = 0; -	uint32_t     missing = 0; -	uint32_t     down = 0; -	uint32_t     misc = 0; - - -	ret = dht_layout_sort (layout); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"sort failed?! how the ...."); -		goto out; -	} - -	ret = dht_layout_anomalies (this, loc, layout, -				    &holes, &overlaps, -				    &missing, &down, &misc); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_WARNING, -			"error while finding anomalies in %s -- not good news", -			loc->path); -		goto out; -	} - -	if (holes || overlaps) { -		if (missing == layout->cnt) { -			gf_log (this->name, GF_LOG_DEBUG, -				"directory %s looked up first time", -				loc->path); -		} else { -			gf_log (this->name, GF_LOG_INFO, -				"found anomalies in %s. holes=%d overlaps=%d", -				loc->path, holes, overlaps); -		} -		ret = 1; -	} - -	for (i = 0; i < layout->cnt; i++) { -	/* TODO During DHT selfheal rewrite (almost) find a better place to  -	 * detect this - probably in dht_layout_anomalies()  -	 */ -		if (layout->list[i].err > 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"path=%s err=%s on subvol=%s", +        int          ret   = 0; +        int          i = 0; +        uint32_t     holes = 0; +        uint32_t     overlaps = 0; +        uint32_t     missing = 0; +        uint32_t     down = 0; +        uint32_t     misc = 0; + + +        ret = dht_layout_sort (layout); +        if (ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "sort failed?! how the ...."); +                goto out; +        } + +        ret = dht_layout_anomalies (this, loc, layout, +                                    &holes, &overlaps, +                                    &missing, &down, &misc); +        if (ret == -1) { +                gf_log (this->name, GF_LOG_WARNING, +                        "error while finding anomalies in %s -- not good news", +                        loc->path); +                goto out; +        } + +        if (holes || overlaps) { +                if (missing == layout->cnt) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "directory %s looked up first time", +                                loc->path); +                } else { +                        gf_log (this->name, GF_LOG_INFO, +                                "found anomalies in %s. holes=%d overlaps=%d", +                                loc->path, holes, overlaps); +                } +                ret = 1; +        } + +        for (i = 0; i < layout->cnt; i++) { +                /* TODO During DHT selfheal rewrite (almost) find a better place to +                 * detect this - probably in dht_layout_anomalies() +                 */ +                if (layout->list[i].err > 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "path=%s err=%s on subvol=%s",                                  loc->path, strerror (layout->list[i].err),                                  (layout->list[i].xlator ?                                   layout->list[i].xlator->name : "<>"));                          if (layout->list[i].err == ENOENT)                                  ret = 1; -		} -	} +                } +        }  out: -	return ret; +        return ret;  }  int  dht_layout_dir_mismatch (xlator_t *this, dht_layout_t *layout, xlator_t *subvol, -			 loc_t *loc, dict_t *xattr) +                         loc_t *loc, dict_t *xattr)  { -	int       idx = 0; -	int       pos = -1; -	int       ret = 0; +        int       idx = 0; +        int       pos = -1; +        int       ret = 0;          int       err = 0;          int       dict_ret = 0; -	int32_t   disk_layout[4]; +        int32_t   disk_layout[4];          void     *disk_layout_raw = NULL; -	int32_t   count = -1; -	uint32_t  start_off = -1; -	uint32_t  stop_off = -1; - - -	for (idx = 0; idx < layout->cnt; idx++) { -		if (layout->list[idx].xlator == subvol) { -			pos = idx; -			break; -		} -	} -	 -	if (pos == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"%s - no layout info for subvolume %s", -			loc->path, subvol->name); -		ret = 1; -		goto out; -	} +        int32_t   count = -1; +        uint32_t  start_off = -1; +        uint32_t  stop_off = -1; + + +        for (idx = 0; idx < layout->cnt; idx++) { +                if (layout->list[idx].xlator == subvol) { +                        pos = idx; +                        break; +                } +        } + +        if (pos == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "%s - no layout info for subvolume %s", +                        loc->path, subvol->name); +                ret = 1; +                goto out; +        }          err = layout->list[pos].err; -	if (!xattr) { +        if (!xattr) {                  if (err == 0) {                          gf_log (this->name, GF_LOG_DEBUG,                                  "%s - xattr dictionary is NULL",                                  loc->path);                          ret = -1;                  } -		goto out; -	} +                goto out; +        } -	dict_ret = dict_get_ptr (xattr, "trusted.glusterfs.dht", +        dict_ret = dict_get_ptr (xattr, "trusted.glusterfs.dht",                                   &disk_layout_raw); -	if (dict_ret < 0) { +        if (dict_ret < 0) {                  if (err == 0) {                          gf_log (this->name, GF_LOG_DEBUG,                                  "%s - disk layout missing", loc->path);                          ret = -1;                  } -		goto out; -	} +                goto out; +        }          memcpy (disk_layout, disk_layout_raw, sizeof (disk_layout)); -	count  = ntoh32 (disk_layout[0]); -	if (count != 1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"%s - disk layout has invalid count %d", -			loc->path, count); -		ret = -1; -		goto out; -	} - -	start_off = ntoh32 (disk_layout[2]); -	stop_off  = ntoh32 (disk_layout[3]); - -	if ((layout->list[pos].start != start_off) -	    || (layout->list[pos].stop != stop_off)) { -		gf_log (this->name, GF_LOG_INFO, -			"subvol: %s; inode layout - %"PRIu32" - %"PRIu32"; " -			"disk layout - %"PRIu32" - %"PRIu32, -			layout->list[pos].xlator->name, -			layout->list[pos].start, layout->list[pos].stop, -			start_off, stop_off); -		ret = 1; -	} else { -		ret = 0; -	} +        count  = ntoh32 (disk_layout[0]); +        if (count != 1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "%s - disk layout has invalid count %d", +                        loc->path, count); +                ret = -1; +                goto out; +        } + +        start_off = ntoh32 (disk_layout[2]); +        stop_off  = ntoh32 (disk_layout[3]); + +        if ((layout->list[pos].start != start_off) +            || (layout->list[pos].stop != stop_off)) { +                gf_log (this->name, GF_LOG_INFO, +                        "subvol: %s; inode layout - %"PRIu32" - %"PRIu32"; " +                        "disk layout - %"PRIu32" - %"PRIu32, +                        layout->list[pos].xlator->name, +                        layout->list[pos].start, layout->list[pos].stop, +                        start_off, stop_off); +                ret = 1; +        } else { +                ret = 0; +        }  out: -	return ret; +        return ret;  } @@ -707,14 +707,14 @@ dht_layout_preset (xlator_t *this, xlator_t *subvol, inode_t *inode)          if (!conf)                  goto out; -	layout = dht_layout_for_subvol (this, subvol); -	if (!layout) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no pre-set layout for subvolume %s", -			subvol ? subvol->name : "<nil>"); -		ret = -1; -		goto out; -	} +        layout = dht_layout_for_subvol (this, subvol); +        if (!layout) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no pre-set layout for subvolume %s", +                        subvol ? subvol->name : "<nil>"); +                ret = -1; +                goto out; +        }          LOCK (&conf->layout_lock);          { diff --git a/xlators/cluster/dht/src/dht-linkfile.c b/xlators/cluster/dht/src/dht-linkfile.c index 6afba25a147..03044421833 100644 --- a/xlators/cluster/dht/src/dht-linkfile.c +++ b/xlators/cluster/dht/src/dht-linkfile.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/>.  */  #ifndef _CONFIG_H @@ -32,17 +32,17 @@  int  dht_linkfile_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			int op_ret, int op_errno) +                        int op_ret, int op_errno)  { -	dht_local_t *local = NULL; +        dht_local_t *local = NULL; -	local = frame->local; -	local->linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno, -				      local->linkfile.inode, -				      &local->linkfile.stbuf, NULL, NULL); +        local = frame->local; +        local->linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno, +                                      local->linkfile.inode, +                                      &local->linkfile.stbuf, NULL, NULL); -	return 0; +        return 0;  } @@ -52,76 +52,76 @@ dht_linkfile_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                           struct iatt *stbuf, struct iatt *preparent,                           struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; -	dict_t       *xattr = NULL; -	data_t       *str_data = NULL; -	int           ret = -1; - -	local = frame->local; -	prev  = cookie; - -	if (op_ret == -1) -		goto err; - -	xattr = get_new_dict (); -	if (!xattr) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} - -	local->linkfile.xattr = dict_ref (xattr); -	local->linkfile.inode = inode_ref (inode); - -	str_data = str_to_data (local->linkfile.srcvol->name); -	if (!str_data) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} - -	ret = dict_set (xattr, "trusted.glusterfs.dht.linkto", str_data); -	if (ret < 0) { -		gf_log (this->name, GF_LOG_DEBUG, -			"failed to initialize linkfile data"); -	} -	str_data = NULL; - -	local->linkfile.stbuf = *stbuf; - -	STACK_WIND (frame, dht_linkfile_xattr_cbk, -		    prev->this, prev->this->fops->setxattr, -		    &local->linkfile.loc, local->linkfile.xattr, 0); - -	return 0; +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL; +        dict_t       *xattr = NULL; +        data_t       *str_data = NULL; +        int           ret = -1; + +        local = frame->local; +        prev  = cookie; + +        if (op_ret == -1) +                goto err; + +        xattr = get_new_dict (); +        if (!xattr) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } + +        local->linkfile.xattr = dict_ref (xattr); +        local->linkfile.inode = inode_ref (inode); + +        str_data = str_to_data (local->linkfile.srcvol->name); +        if (!str_data) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } + +        ret = dict_set (xattr, "trusted.glusterfs.dht.linkto", str_data); +        if (ret < 0) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "failed to initialize linkfile data"); +        } +        str_data = NULL; + +        local->linkfile.stbuf = *stbuf; + +        STACK_WIND (frame, dht_linkfile_xattr_cbk, +                    prev->this, prev->this->fops->setxattr, +                    &local->linkfile.loc, local->linkfile.xattr, 0); + +        return 0;  err: -	if (str_data) { -		data_destroy (str_data); -		str_data = NULL; -	} +        if (str_data) { +                data_destroy (str_data); +                str_data = NULL; +        }          local->linkfile.linkfile_cbk (frame, cookie, this, op_ret, op_errno,                                        inode, stbuf, preparent, postparent); -	return 0; +        return 0;  }  int  dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk, -		     xlator_t *tovol, xlator_t *fromvol, loc_t *loc) +                     xlator_t *tovol, xlator_t *fromvol, loc_t *loc)  { -	dht_local_t *local = NULL; +        dht_local_t *local = NULL;          dict_t      *dict = NULL;          int          ret = 0; -	local = frame->local; -	local->linkfile.linkfile_cbk = linkfile_cbk; -	local->linkfile.srcvol = tovol; -	loc_copy (&local->linkfile.loc, loc); +        local = frame->local; +        local->linkfile.linkfile_cbk = linkfile_cbk; +        local->linkfile.srcvol = tovol; +        loc_copy (&local->linkfile.loc, loc);          if (!uuid_is_null (local->gfid)) {                  dict = dict_new (); @@ -137,111 +137,109 @@ dht_linkfile_create (call_frame_t *frame, fop_mknod_cbk_t linkfile_cbk,                  gf_log ("", GF_LOG_DEBUG,                          "dict is NULL, need to make sure gfid's are same"); -	STACK_WIND (frame, dht_linkfile_create_cbk, -		    fromvol, fromvol->fops->mknod, loc, -		    S_IFREG | DHT_LINKFILE_MODE, 0, dict); +        STACK_WIND (frame, dht_linkfile_create_cbk, +                    fromvol, fromvol->fops->mknod, loc, +                    S_IFREG | DHT_LINKFILE_MODE, 0, dict);          if (dict)                  dict_unref (dict);          return 0;  out: -	local->linkfile.linkfile_cbk (frame, NULL, frame->this, -1, ENOMEM, -				      loc->inode, NULL, NULL, NULL); -	return 0; +        local->linkfile.linkfile_cbk (frame, NULL, frame->this, -1, ENOMEM, +                                      loc->inode, NULL, NULL, NULL); +        return 0;  }  int  dht_linkfile_unlink_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,                           struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t   *local = NULL; -	call_frame_t  *prev = NULL; -	xlator_t      *subvol = NULL; - -	local = frame->local; -	prev = cookie; -	subvol = prev->this; - -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"unlinking linkfile %s on %s failed (%s)", -			local->loc.path, subvol->name, strerror (op_errno)); -	} +        dht_local_t   *local = NULL; +        call_frame_t  *prev = NULL; +        xlator_t      *subvol = NULL; + +        local = frame->local; +        prev = cookie; +        subvol = prev->this; + +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "unlinking linkfile %s on %s failed (%s)", +                        local->loc.path, subvol->name, strerror (op_errno)); +        } -	DHT_STACK_DESTROY (frame); +        DHT_STACK_DESTROY (frame); -	return 0; +        return 0;  }  int  dht_linkfile_unlink (call_frame_t *frame, xlator_t *this, -		     xlator_t *subvol, loc_t *loc) +                     xlator_t *subvol, loc_t *loc)  { -	call_frame_t *unlink_frame = NULL; -	dht_local_t  *unlink_local = NULL; - -	unlink_frame = copy_frame (frame); -	if (!unlink_frame) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	unlink_local = dht_local_init (unlink_frame); -	if (!unlink_local) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	loc_copy (&unlink_local->loc, loc); - -	STACK_WIND (unlink_frame, dht_linkfile_unlink_cbk, -		    subvol, subvol->fops->unlink, -		    &unlink_local->loc); - -	return 0; +        call_frame_t *unlink_frame = NULL; +        dht_local_t  *unlink_local = NULL; + +        unlink_frame = copy_frame (frame); +        if (!unlink_frame) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        unlink_local = dht_local_init (unlink_frame); +        if (!unlink_local) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        loc_copy (&unlink_local->loc, loc); + +        STACK_WIND (unlink_frame, dht_linkfile_unlink_cbk, +                    subvol, subvol->fops->unlink, +                    &unlink_local->loc); + +        return 0;  err: -	if (unlink_frame) -		DHT_STACK_DESTROY (unlink_frame); +        if (unlink_frame) +                DHT_STACK_DESTROY (unlink_frame); -	return -1; +        return -1;  }  xlator_t *  dht_linkfile_subvol (xlator_t *this, inode_t *inode, struct iatt *stbuf, -		     dict_t *xattr) +                     dict_t *xattr)  { -	dht_conf_t *conf = NULL; -	xlator_t   *subvol = NULL; -	void       *volname = NULL; -	int         i = 0, ret = 0; +        dht_conf_t *conf = NULL; +        xlator_t   *subvol = NULL; +        void       *volname = NULL; +        int         i = 0, ret = 0; -	conf = this->private; +        conf = this->private; -	if (!xattr) -		goto out; +        if (!xattr) +                goto out; -	ret = dict_get_ptr (xattr, "trusted.glusterfs.dht.linkto", &volname); +        ret = dict_get_ptr (xattr, "trusted.glusterfs.dht.linkto", &volname); -	if ((-1 == ret) || !volname) -		goto out; +        if ((-1 == ret) || !volname) +                goto out; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		if (strcmp (conf->subvolumes[i]->name, (char *)volname) == 0) { -			subvol = conf->subvolumes[i]; -			break; -		} -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                if (strcmp (conf->subvolumes[i]->name, (char *)volname) == 0) { +                        subvol = conf->subvolumes[i]; +                        break; +                } +        }  out: -	return subvol; +        return subvol;  } - - diff --git a/xlators/cluster/dht/src/dht-mem-types.h b/xlators/cluster/dht/src/dht-mem-types.h index 570f4c24b34..af31c8b0724 100644 --- a/xlators/cluster/dht/src/dht-mem-types.h +++ b/xlators/cluster/dht/src/dht-mem-types.h @@ -1,21 +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/>.  */ @@ -39,4 +38,3 @@ enum gf_dht_mem_types_ {          gf_dht_mt_end  };  #endif - diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c index 52185d2adac..4366c80ae19 100644 --- a/xlators/cluster/dht/src/dht-rename.c +++ b/xlators/cluster/dht/src/dht-rename.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/>.  */  /* TODO: link(oldpath, newpath) fails if newpath already exists. DHT should @@ -33,34 +33,34 @@  int  dht_rename_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		    int32_t op_ret, int32_t op_errno, struct iatt *stbuf, +                    int32_t op_ret, int32_t op_errno, struct iatt *stbuf,                      struct iatt *preoldparent, struct iatt *postoldparent,                      struct iatt *prenewparent, struct iatt *postnewparent)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = 0; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = 0; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev = cookie; +        local = frame->local; +        prev = cookie; -	if (op_ret == -1) { -		/* TODO: undo the damage */ +        if (op_ret == -1) { +                /* TODO: undo the damage */ -		gf_log (this->name, GF_LOG_DEBUG, -			"rename %s -> %s on %s failed (%s)", -			local->loc.path, local->loc2.path, -			prev->this->name, strerror (op_errno)); +                gf_log (this->name, GF_LOG_DEBUG, +                        "rename %s -> %s on %s failed (%s)", +                        local->loc.path, local->loc2.path, +                        prev->this->name, strerror (op_errno)); -		local->op_ret   = op_ret; -		local->op_errno = op_errno; -	} else { -		/* TODO: construct proper stbuf for dir */ -                /*  +                local->op_ret   = op_ret; +                local->op_errno = op_errno; +        } else { +                /* TODO: construct proper stbuf for dir */ +                /*                   * FIXME: is this the correct way to build stbuf and                   * parent bufs? -                */ +                 */                  dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);                  dht_iatt_merge (this, &local->preoldparent, preoldparent,                                  prev->this); @@ -70,10 +70,10 @@ dht_rename_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                                  prev->this);                  dht_iatt_merge (this, &local->postparent, postnewparent,                                  prev->this); -	} +        } -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) {                  local->stbuf.ia_ino = local->loc.inode->ino;                  local->preoldparent.ia_ino = local->loc.parent->ino; @@ -87,13 +87,13 @@ dht_rename_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  WIPE (&local->preparent);                  WIPE (&local->postparent); -		DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, -				  &local->stbuf, &local->preoldparent, +                DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, +                                  &local->stbuf, &local->preoldparent,                                    &local->postoldparent,                                    &local->preparent, &local->postparent); -	} +        } -	return 0; +        return 0;  } @@ -101,114 +101,114 @@ dht_rename_dir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,  int  dht_rename_dir_do (call_frame_t *frame, xlator_t *this)  { -	dht_local_t  *local = NULL; -	dht_conf_t   *conf = NULL; -	int           i = 0; +        dht_local_t  *local = NULL; +        dht_conf_t   *conf = NULL; +        int           i = 0; -	conf = this->private; -	local = frame->local; +        conf = this->private; +        local = frame->local; -	if (local->op_ret == -1) -		goto err; +        if (local->op_ret == -1) +                goto err; -	local->call_cnt = conf->subvolume_cnt; -	local->op_ret = 0; +        local->call_cnt = conf->subvolume_cnt; +        local->op_ret = 0; -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_rename_dir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->rename, -			    &local->loc, &local->loc2); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_rename_dir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->rename, +                            &local->loc, &local->loc2); +        } -	return 0; +        return 0;  err: -	DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, NULL, NULL, +        DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, NULL, NULL,                            NULL, NULL, NULL); -	return 0; +        return 0;  }  int  dht_rename_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			int op_ret, int op_errno, gf_dirent_t *entries) +                        int op_ret, int op_errno, gf_dirent_t *entries)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = -1; -	call_frame_t *prev = NULL; - -	local = frame->local; -	prev  = cookie; - -	if (op_ret > 2) { -		gf_log (this->name, GF_LOG_TRACE, -			"readdir on %s for %s returned %d entries", -			prev->this->name, local->loc.path, op_ret); -		local->op_ret = -1; -		local->op_errno = ENOTEMPTY; -	} +        dht_local_t  *local = NULL; +        int           this_call_cnt = -1; +        call_frame_t *prev = NULL; + +        local = frame->local; +        prev  = cookie; + +        if (op_ret > 2) { +                gf_log (this->name, GF_LOG_TRACE, +                        "readdir on %s for %s returned %d entries", +                        prev->this->name, local->loc.path, op_ret); +                local->op_ret = -1; +                local->op_errno = ENOTEMPTY; +        } -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_rename_dir_do (frame, this); -	} +        if (is_last_call (this_call_cnt)) { +                dht_rename_dir_do (frame, this); +        } -	return 0; +        return 0;  }  int  dht_rename_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			int op_ret, int op_errno, fd_t *fd) +                        int op_ret, int op_errno, fd_t *fd)  { -	dht_local_t  *local = NULL; -	int           this_call_cnt = -1; -	call_frame_t *prev = NULL; +        dht_local_t  *local = NULL; +        int           this_call_cnt = -1; +        call_frame_t *prev = NULL; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie; -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"opendir on %s for %s failed (%s)", -			prev->this->name, local->loc.path, -			strerror (op_errno)); -		goto err; -	} +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "opendir on %s for %s failed (%s)", +                        prev->this->name, local->loc.path, +                        strerror (op_errno)); +                goto err; +        } -	STACK_WIND (frame, dht_rename_readdir_cbk, -		    prev->this, prev->this->fops->readdir, -		    local->fd, 4096, 0); +        STACK_WIND (frame, dht_rename_readdir_cbk, +                    prev->this, prev->this->fops->readdir, +                    local->fd, 4096, 0); -	return 0; +        return 0;  err: -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_rename_dir_do (frame, this); -	} +        if (is_last_call (this_call_cnt)) { +                dht_rename_dir_do (frame, this); +        } -	return 0; +        return 0;  }  int  dht_rename_dir (call_frame_t *frame, xlator_t *this)  { -	dht_conf_t  *conf = NULL; -	dht_local_t *local = NULL; -	int          i = 0; -	int          op_errno = -1; +        dht_conf_t  *conf = NULL; +        dht_local_t *local = NULL; +        int          i = 0; +        int          op_errno = -1; -	conf = frame->this->private; -	local = frame->local; +        conf = frame->this->private; +        local = frame->local; -	local->call_cnt = conf->subvolume_cnt; +        local->call_cnt = conf->subvolume_cnt;          for (i = 0; i < conf->subvolume_cnt; i++) {                  if (!conf->subvolume_status[i]) { @@ -217,48 +217,48 @@ dht_rename_dir (call_frame_t *frame, xlator_t *this)                  }          } -	local->fd = fd_create (local->loc.inode, frame->root->pid); -	if (!local->fd) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		op_errno = ENOMEM; -		goto err; -	} +        local->fd = fd_create (local->loc.inode, frame->root->pid); +        if (!local->fd) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                op_errno = ENOMEM; +                goto err; +        } -	local->op_ret = 0; +        local->op_ret = 0; -	if (!local->dst_cached) { -		dht_rename_dir_do (frame, this); -		return 0; -	} +        if (!local->dst_cached) { +                dht_rename_dir_do (frame, this); +                return 0; +        } -	for (i = 0; i < conf->subvolume_cnt; i++) { -		STACK_WIND (frame, dht_rename_opendir_cbk, -			    conf->subvolumes[i], -			    conf->subvolumes[i]->fops->opendir, -			    &local->loc2, local->fd); -	} +        for (i = 0; i < conf->subvolume_cnt; i++) { +                STACK_WIND (frame, dht_rename_opendir_cbk, +                            conf->subvolumes[i], +                            conf->subvolumes[i]->fops->opendir, +                            &local->loc2, local->fd); +        } -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); -	return 0; +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); +        return 0;  }  int  dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int32_t op_ret, int32_t op_errno, struct iatt *preparent, +                       int32_t op_ret, int32_t op_errno, struct iatt *preparent,                         struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; -	int           this_call_cnt = 0; +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL; +        int           this_call_cnt = 0; -	local = frame->local; -	prev  = cookie; +        local = frame->local; +        prev  = cookie;          if (!local) {                  gf_log (this->name, GF_LOG_ERROR, @@ -266,82 +266,82 @@ dht_rename_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"unlink on %s failed (%s)", -			prev->this->name, strerror (op_errno)); -	} +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "unlink on %s failed (%s)", +                        prev->this->name, strerror (op_errno)); +        }          WIPE (&local->preoldparent);          WIPE (&local->postoldparent);          WIPE (&local->preparent);          WIPE (&local->postparent); -	if (is_last_call (this_call_cnt)) { -		DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, -				  &local->stbuf, &local->preoldparent, +        if (is_last_call (this_call_cnt)) { +                DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, +                                  &local->stbuf, &local->preoldparent,                                    &local->postoldparent, &local->preparent,                                    &local->postparent);          }  out: -	return 0; +        return 0;  }  int  dht_rename_cleanup (call_frame_t *frame)  { -	dht_local_t *local = NULL; -	xlator_t    *this = NULL; -	xlator_t    *src_hashed = NULL; -	xlator_t    *src_cached = NULL; -	xlator_t    *dst_hashed = NULL; -	xlator_t    *dst_cached = NULL; -	int          call_cnt = 0; +        dht_local_t *local = NULL; +        xlator_t    *this = NULL; +        xlator_t    *src_hashed = NULL; +        xlator_t    *src_cached = NULL; +        xlator_t    *dst_hashed = NULL; +        xlator_t    *dst_cached = NULL; +        int          call_cnt = 0; -	local = frame->local; -	this  = frame->this; +        local = frame->local; +        this  = frame->this; -	src_hashed = local->src_hashed; -	src_cached = local->src_cached; -	dst_hashed = local->dst_hashed; -	dst_cached = local->dst_cached; +        src_hashed = local->src_hashed; +        src_cached = local->src_cached; +        dst_hashed = local->dst_hashed; +        dst_cached = local->dst_cached; -	if (src_cached == dst_cached) -		goto nolinks; +        if (src_cached == dst_cached) +                goto nolinks; -	if (dst_hashed != src_hashed && dst_hashed != src_cached) -		call_cnt++; +        if (dst_hashed != src_hashed && dst_hashed != src_cached) +                call_cnt++; -	if (src_cached != dst_hashed) -		call_cnt++; +        if (src_cached != dst_hashed) +                call_cnt++; -	local->call_cnt = call_cnt; +        local->call_cnt = call_cnt;          if (!call_cnt)                  goto nolinks; -	if (dst_hashed != src_hashed && dst_hashed != src_cached) { -		gf_log (this->name, GF_LOG_TRACE, -			"unlinking linkfile %s @ %s => %s", -			local->loc.path, dst_hashed->name, src_cached->name); +        if (dst_hashed != src_hashed && dst_hashed != src_cached) { +                gf_log (this->name, GF_LOG_TRACE, +                        "unlinking linkfile %s @ %s => %s", +                        local->loc.path, dst_hashed->name, src_cached->name);                  STACK_WIND (frame, dht_rename_unlink_cbk,                              dst_hashed, dst_hashed->fops->unlink,                              &local->loc); -	} +        } -	if (src_cached != dst_hashed) { -		gf_log (this->name, GF_LOG_TRACE, -			"unlinking link %s => %s (%s)", local->loc.path, -			local->loc2.path, src_cached->name); -		STACK_WIND (frame, dht_rename_unlink_cbk, -			    src_cached, src_cached->fops->unlink, -			    &local->loc2); -	} +        if (src_cached != dst_hashed) { +                gf_log (this->name, GF_LOG_TRACE, +                        "unlinking link %s => %s (%s)", local->loc.path, +                        local->loc2.path, src_cached->name); +                STACK_WIND (frame, dht_rename_unlink_cbk, +                            src_cached, src_cached->fops->unlink, +                            &local->loc2); +        }          return 0; @@ -351,8 +351,8 @@ nolinks:          WIPE (&local->preparent);          WIPE (&local->postparent); -	DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, -			  &local->stbuf, &local->preoldparent, +        DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, +                          &local->stbuf, &local->preoldparent,                            &local->postoldparent, &local->preparent,                            &local->postparent); @@ -362,34 +362,34 @@ nolinks:  int  dht_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		int32_t op_ret, int32_t op_errno, struct iatt *stbuf, +                int32_t op_ret, int32_t op_errno, struct iatt *stbuf,                  struct iatt *preoldparent, struct iatt *postoldparent,                  struct iatt *prenewparent, struct iatt *postnewparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; -	xlator_t     *src_hashed = NULL; -	xlator_t     *src_cached = NULL; -	xlator_t     *dst_hashed = NULL; -	xlator_t     *dst_cached = NULL; -	xlator_t     *rename_subvol = NULL; - -	local = frame->local; -	prev = cookie; - -	src_hashed = local->src_hashed; -	src_cached = local->src_cached; -	dst_hashed = local->dst_hashed; -	dst_cached = local->dst_cached; - -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"rename on %s failed (%s)", prev->this->name, -			strerror (op_errno)); -		local->op_ret   = op_ret; -		local->op_errno = op_errno; -		goto cleanup; -	} +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL; +        xlator_t     *src_hashed = NULL; +        xlator_t     *src_cached = NULL; +        xlator_t     *dst_hashed = NULL; +        xlator_t     *dst_cached = NULL; +        xlator_t     *rename_subvol = NULL; + +        local = frame->local; +        prev = cookie; + +        src_hashed = local->src_hashed; +        src_cached = local->src_cached; +        dst_hashed = local->dst_hashed; +        dst_cached = local->dst_cached; + +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "rename on %s failed (%s)", prev->this->name, +                        strerror (op_errno)); +                local->op_ret   = op_ret; +                local->op_errno = op_errno; +                goto cleanup; +        }          dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);          dht_iatt_merge (this, &local->preoldparent, preoldparent, prev->this); @@ -404,62 +404,62 @@ dht_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          local->preparent.ia_ino = local->loc2.parent->ino;          local->postparent.ia_ino = local->loc2.parent->ino; -	 -	/* NOTE: rename_subvol is the same subvolume from which dht_rename_cbk -	 *       is called. since rename has already happened on rename_subvol, -	 *       unlink should not be sent for oldpath (either linkfile or cached-file) -	 *       on rename_subvol. */ -	if (src_cached == dst_cached) -		rename_subvol = src_cached; -	else -		rename_subvol = dst_hashed; - -	/* TODO: delete files in background */ - -	if (src_cached != dst_hashed && src_cached != dst_cached) -		local->call_cnt++; - -	if (src_hashed != rename_subvol && src_hashed != src_cached) -		local->call_cnt++; - -	if (dst_cached && dst_cached != dst_hashed && dst_cached != src_cached) -		local->call_cnt++; - -	if (local->call_cnt == 0) -		goto unwind; - -	if (src_cached != dst_hashed && src_cached != dst_cached) { -		gf_log (this->name, GF_LOG_TRACE, -			"deleting old src datafile %s @ %s", -			local->loc.path, src_cached->name); - -		STACK_WIND (frame, dht_rename_unlink_cbk, -			    src_cached, src_cached->fops->unlink, -			    &local->loc); -	} - -	if (src_hashed != rename_subvol && src_hashed != src_cached) { -		gf_log (this->name, GF_LOG_TRACE, -			"deleting old src linkfile %s @ %s", -			local->loc.path, src_hashed->name); - -		STACK_WIND (frame, dht_rename_unlink_cbk, -			    src_hashed, src_hashed->fops->unlink, -			    &local->loc); -	} - -	if (dst_cached -	    && (dst_cached != dst_hashed) -	    && (dst_cached != src_cached)) { -		gf_log (this->name, GF_LOG_TRACE, -			"deleting old dst datafile %s @ %s", -			local->loc2.path, dst_cached->name); - -		STACK_WIND (frame, dht_rename_unlink_cbk, -			    dst_cached, dst_cached->fops->unlink, -			    &local->loc2); -	} -	return 0; + +        /* NOTE: rename_subvol is the same subvolume from which dht_rename_cbk +         *       is called. since rename has already happened on rename_subvol, +         *       unlink should not be sent for oldpath (either linkfile or cached-file) +         *       on rename_subvol. */ +        if (src_cached == dst_cached) +                rename_subvol = src_cached; +        else +                rename_subvol = dst_hashed; + +        /* TODO: delete files in background */ + +        if (src_cached != dst_hashed && src_cached != dst_cached) +                local->call_cnt++; + +        if (src_hashed != rename_subvol && src_hashed != src_cached) +                local->call_cnt++; + +        if (dst_cached && dst_cached != dst_hashed && dst_cached != src_cached) +                local->call_cnt++; + +        if (local->call_cnt == 0) +                goto unwind; + +        if (src_cached != dst_hashed && src_cached != dst_cached) { +                gf_log (this->name, GF_LOG_TRACE, +                        "deleting old src datafile %s @ %s", +                        local->loc.path, src_cached->name); + +                STACK_WIND (frame, dht_rename_unlink_cbk, +                            src_cached, src_cached->fops->unlink, +                            &local->loc); +        } + +        if (src_hashed != rename_subvol && src_hashed != src_cached) { +                gf_log (this->name, GF_LOG_TRACE, +                        "deleting old src linkfile %s @ %s", +                        local->loc.path, src_hashed->name); + +                STACK_WIND (frame, dht_rename_unlink_cbk, +                            src_hashed, src_hashed->fops->unlink, +                            &local->loc); +        } + +        if (dst_cached +            && (dst_cached != dst_hashed) +            && (dst_cached != src_cached)) { +                gf_log (this->name, GF_LOG_TRACE, +                        "deleting old dst datafile %s @ %s", +                        local->loc2.path, dst_cached->name); + +                STACK_WIND (frame, dht_rename_unlink_cbk, +                            dst_cached, dst_cached->fops->unlink, +                            &local->loc2); +        } +        return 0;  unwind:          WIPE (&local->preoldparent); @@ -467,12 +467,12 @@ unwind:          WIPE (&local->preparent);          WIPE (&local->postparent); -	DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, -			  &local->stbuf, &local->preoldparent, +        DHT_STACK_UNWIND (rename, frame, local->op_ret, local->op_errno, +                          &local->stbuf, &local->preoldparent,                            &local->postoldparent, &local->preparent,                            &local->postparent); -	return 0; +        return 0;  cleanup:          dht_rename_cleanup (frame); @@ -484,230 +484,230 @@ cleanup:  int  dht_do_rename (call_frame_t *frame)  { -	dht_local_t *local = NULL; -	xlator_t    *dst_hashed = NULL; -	xlator_t    *src_cached = NULL; -	xlator_t    *dst_cached = NULL; -	xlator_t    *this = NULL; -	xlator_t    *rename_subvol = NULL; +        dht_local_t *local = NULL; +        xlator_t    *dst_hashed = NULL; +        xlator_t    *src_cached = NULL; +        xlator_t    *dst_cached = NULL; +        xlator_t    *this = NULL; +        xlator_t    *rename_subvol = NULL; -	local = frame->local; -	this  = frame->this; +        local = frame->local; +        this  = frame->this; -	dst_hashed = local->dst_hashed; -	dst_cached = local->dst_cached; -	src_cached = local->src_cached; +        dst_hashed = local->dst_hashed; +        dst_cached = local->dst_cached; +        src_cached = local->src_cached; -	if (src_cached == dst_cached) -		rename_subvol = src_cached; -	else -		rename_subvol = dst_hashed; +        if (src_cached == dst_cached) +                rename_subvol = src_cached; +        else +                rename_subvol = dst_hashed; -	gf_log (this->name, GF_LOG_TRACE, -		"renaming %s => %s (%s)", -		local->loc.path, local->loc2.path, rename_subvol->name); +        gf_log (this->name, GF_LOG_TRACE, +                "renaming %s => %s (%s)", +                local->loc.path, local->loc2.path, rename_subvol->name); -	STACK_WIND (frame, dht_rename_cbk, -		    rename_subvol, rename_subvol->fops->rename, -		    &local->loc, &local->loc2); +        STACK_WIND (frame, dht_rename_cbk, +                    rename_subvol, rename_subvol->fops->rename, +                    &local->loc, &local->loc2); -	return 0; +        return 0;  }  int  dht_rename_links_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 *stbuf,                        struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; -	int           this_call_cnt  = 0; - - -	local = frame->local; -	prev = cookie; -	 -	if (op_ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"link/file on %s failed (%s)", -			prev->this->name, strerror (op_errno)); -		local->op_ret   = -1; -		local->op_errno = op_errno; -	} - -	this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		if (local->op_ret == -1) -			goto cleanup; -		 -		dht_do_rename (frame); -	} - -	return 0; +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL; +        int           this_call_cnt  = 0; + + +        local = frame->local; +        prev = cookie; + +        if (op_ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "link/file on %s failed (%s)", +                        prev->this->name, strerror (op_errno)); +                local->op_ret   = -1; +                local->op_errno = op_errno; +        } + +        this_call_cnt = dht_frame_return (frame); +        if (is_last_call (this_call_cnt)) { +                if (local->op_ret == -1) +                        goto cleanup; + +                dht_do_rename (frame); +        } + +        return 0;  cleanup:          dht_rename_cleanup (frame); -	return 0; +        return 0;  }  int  dht_rename_create_links (call_frame_t *frame)  { -	dht_local_t *local = NULL; -	xlator_t    *this = NULL; -	xlator_t    *src_hashed = NULL; -	xlator_t    *src_cached = NULL; -	xlator_t    *dst_hashed = NULL; -	xlator_t    *dst_cached = NULL; -	int          call_cnt = 0; +        dht_local_t *local = NULL; +        xlator_t    *this = NULL; +        xlator_t    *src_hashed = NULL; +        xlator_t    *src_cached = NULL; +        xlator_t    *dst_hashed = NULL; +        xlator_t    *dst_cached = NULL; +        int          call_cnt = 0; -	local = frame->local; -	this  = frame->this; +        local = frame->local; +        this  = frame->this; -	src_hashed = local->src_hashed; -	src_cached = local->src_cached; -	dst_hashed = local->dst_hashed; -	dst_cached = local->dst_cached; +        src_hashed = local->src_hashed; +        src_cached = local->src_cached; +        dst_hashed = local->dst_hashed; +        dst_cached = local->dst_cached; -	if (src_cached == dst_cached) -		goto nolinks; +        if (src_cached == dst_cached) +                goto nolinks; -	if (dst_hashed != src_hashed && dst_hashed != src_cached) -		call_cnt++; +        if (dst_hashed != src_hashed && dst_hashed != src_cached) +                call_cnt++; -	if (src_cached != dst_hashed) -		call_cnt++; +        if (src_cached != dst_hashed) +                call_cnt++; -	local->call_cnt = call_cnt; +        local->call_cnt = call_cnt; -	if (dst_hashed != src_hashed && dst_hashed != src_cached) { -		gf_log (this->name, GF_LOG_TRACE, -			"linkfile %s @ %s => %s", -			local->loc.path, dst_hashed->name, src_cached->name); +        if (dst_hashed != src_hashed && dst_hashed != src_cached) { +                gf_log (this->name, GF_LOG_TRACE, +                        "linkfile %s @ %s => %s", +                        local->loc.path, dst_hashed->name, src_cached->name);                  memcpy (local->gfid, local->loc.inode->gfid, 16); -		dht_linkfile_create (frame, dht_rename_links_cbk, -				     src_cached, dst_hashed, &local->loc); -	} - -	if (src_cached != dst_hashed) { -		gf_log (this->name, GF_LOG_TRACE, -			"link %s => %s (%s)", local->loc.path, -			local->loc2.path, src_cached->name); -		STACK_WIND (frame, dht_rename_links_cbk, -			    src_cached, src_cached->fops->link, -			    &local->loc, &local->loc2); -	} +                dht_linkfile_create (frame, dht_rename_links_cbk, +                                     src_cached, dst_hashed, &local->loc); +        } + +        if (src_cached != dst_hashed) { +                gf_log (this->name, GF_LOG_TRACE, +                        "link %s => %s (%s)", local->loc.path, +                        local->loc2.path, src_cached->name); +                STACK_WIND (frame, dht_rename_links_cbk, +                            src_cached, src_cached->fops->link, +                            &local->loc, &local->loc2); +        }  nolinks: -	if (!call_cnt) { -		/* skip to next step */ -		dht_do_rename (frame); -	} +        if (!call_cnt) { +                /* skip to next step */ +                dht_do_rename (frame); +        } -	return 0; +        return 0;  }  int  dht_rename (call_frame_t *frame, xlator_t *this, -	    loc_t *oldloc, loc_t *newloc) +            loc_t *oldloc, loc_t *newloc)  { -	xlator_t    *src_cached = NULL; -	xlator_t    *src_hashed = NULL; -	xlator_t    *dst_cached = NULL; -	xlator_t    *dst_hashed = NULL; -	int          op_errno = -1; -	int          ret = -1; -	dht_local_t *local = NULL; - - -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (oldloc, err); -	VALIDATE_OR_GOTO (newloc, err); - -	src_hashed = dht_subvol_get_hashed (this, oldloc); -	if (!src_hashed) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			oldloc->path); -		op_errno = EINVAL; -		goto err; -	} - -	src_cached = dht_subvol_get_cached (this, oldloc->inode); -	if (!src_cached) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no cached subvolume for path=%s", oldloc->path); -		op_errno = EINVAL; -		goto err; -	} - -	dst_hashed = dht_subvol_get_hashed (this, newloc); -	if (!dst_hashed) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			newloc->path); -		op_errno = EINVAL; -		goto err; -	} - -	if (newloc->inode) -		dst_cached = dht_subvol_get_cached (this, newloc->inode); - -	local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = loc_copy (&local->loc, oldloc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = loc_copy (&local->loc2, newloc); -	if (ret == -1) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	local->src_hashed = src_hashed; -	local->src_cached = src_cached; -	local->dst_hashed = dst_hashed; -	local->dst_cached = dst_cached; - -	gf_log (this->name, GF_LOG_TRACE, -		"renaming %s (hash=%s/cache=%s) => %s (hash=%s/cache=%s)", -		oldloc->path, src_hashed->name, src_cached->name, -		newloc->path, dst_hashed->name, -		dst_cached ? dst_cached->name : "<nul>"); - -	if (IA_ISDIR (oldloc->inode->ia_type)) { -		dht_rename_dir (frame, this); -	} else { -		local->op_ret = 0; -		dht_rename_create_links (frame); -	} - -	return 0; +        xlator_t    *src_cached = NULL; +        xlator_t    *src_hashed = NULL; +        xlator_t    *dst_cached = NULL; +        xlator_t    *dst_hashed = NULL; +        int          op_errno = -1; +        int          ret = -1; +        dht_local_t *local = NULL; + + +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (oldloc, err); +        VALIDATE_OR_GOTO (newloc, err); + +        src_hashed = dht_subvol_get_hashed (this, oldloc); +        if (!src_hashed) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        oldloc->path); +                op_errno = EINVAL; +                goto err; +        } + +        src_cached = dht_subvol_get_cached (this, oldloc->inode); +        if (!src_cached) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no cached subvolume for path=%s", oldloc->path); +                op_errno = EINVAL; +                goto err; +        } + +        dst_hashed = dht_subvol_get_hashed (this, newloc); +        if (!dst_hashed) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        newloc->path); +                op_errno = EINVAL; +                goto err; +        } + +        if (newloc->inode) +                dst_cached = dht_subvol_get_cached (this, newloc->inode); + +        local = dht_local_init (frame); +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = loc_copy (&local->loc, oldloc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = loc_copy (&local->loc2, newloc); +        if (ret == -1) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        local->src_hashed = src_hashed; +        local->src_cached = src_cached; +        local->dst_hashed = dst_hashed; +        local->dst_cached = dst_cached; + +        gf_log (this->name, GF_LOG_TRACE, +                "renaming %s (hash=%s/cache=%s) => %s (hash=%s/cache=%s)", +                oldloc->path, src_hashed->name, src_cached->name, +                newloc->path, dst_hashed->name, +                dst_cached ? dst_cached->name : "<nul>"); + +        if (IA_ISDIR (oldloc->inode->ia_type)) { +                dht_rename_dir (frame, this); +        } else { +                local->op_ret = 0; +                dht_rename_create_links (frame); +        } + +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (rename, frame, -1, op_errno, NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  } diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c index c9ab2778265..f10f9781a5d 100644 --- a/xlators/cluster/dht/src/dht-selfheal.c +++ b/xlators/cluster/dht/src/dht-selfheal.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/>.  */  #ifndef _CONFIG_H @@ -31,164 +31,164 @@  int  dht_selfheal_dir_finish (call_frame_t *frame, xlator_t *this, int ret)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; -	local->selfheal.dir_cbk (frame, NULL, frame->this, ret, -				 local->op_errno); +        local = frame->local; +        local->selfheal.dir_cbk (frame, NULL, frame->this, ret, +                                 local->op_errno); -	return 0; +        return 0;  }  int  dht_selfheal_dir_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			    int op_ret, int op_errno) +                            int op_ret, int op_errno)  { -	dht_local_t  *local = NULL; -	call_frame_t *prev = NULL; -	xlator_t     *subvol = NULL; -	int           i = 0; -	dht_layout_t *layout = NULL; -	int           err = 0; -	int           this_call_cnt = 0; - -	local = frame->local; -	layout = local->selfheal.layout; -	prev = cookie; -	subvol = prev->this; - -	if (op_ret == 0) -		err = 0; -	else -		err = op_errno; - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].xlator == subvol) { -			layout->list[i].err = err; -			break; -		} -	} - -	this_call_cnt = dht_frame_return (frame); - -	if (is_last_call (this_call_cnt)) { -		dht_selfheal_dir_finish (frame, this, 0); -	} - -	return 0; +        dht_local_t  *local = NULL; +        call_frame_t *prev = NULL; +        xlator_t     *subvol = NULL; +        int           i = 0; +        dht_layout_t *layout = NULL; +        int           err = 0; +        int           this_call_cnt = 0; + +        local = frame->local; +        layout = local->selfheal.layout; +        prev = cookie; +        subvol = prev->this; + +        if (op_ret == 0) +                err = 0; +        else +                err = op_errno; + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].xlator == subvol) { +                        layout->list[i].err = err; +                        break; +                } +        } + +        this_call_cnt = dht_frame_return (frame); + +        if (is_last_call (this_call_cnt)) { +                dht_selfheal_dir_finish (frame, this, 0); +        } + +        return 0;  }  int  dht_selfheal_dir_xattr_persubvol (call_frame_t *frame, loc_t *loc, -				  dht_layout_t *layout, int i) +                                  dht_layout_t *layout, int i)  { -	xlator_t          *subvol = NULL; -	dict_t            *xattr = NULL; -	int                ret = 0; -	xlator_t          *this = NULL; -	int32_t           *disk_layout = NULL; - - -	subvol = layout->list[i].xlator; -	this = frame->this; - -	xattr = get_new_dict (); -	if (!xattr) { -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	ret = dht_disk_layout_extract (this, layout, i, &disk_layout); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"failed to extract disk layout"); -		goto err; -	} - -	ret = dict_set_bin (xattr, "trusted.glusterfs.dht", -			    disk_layout, 4 * 4); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"failed to set xattr dictionary"); -		goto err; -	} -	disk_layout = NULL; - -	gf_log (this->name, GF_LOG_TRACE, -		"setting hash range %u - %u (type %d) on subvolume %s for %s", -		layout->list[i].start, layout->list[i].stop, -		layout->type, subvol->name, loc->path); - -	dict_ref (xattr); - -	STACK_WIND (frame, dht_selfheal_dir_xattr_cbk, -		    subvol, subvol->fops->setxattr, -		    loc, xattr, 0); - -	dict_unref (xattr); - -	return 0; +        xlator_t          *subvol = NULL; +        dict_t            *xattr = NULL; +        int                ret = 0; +        xlator_t          *this = NULL; +        int32_t           *disk_layout = NULL; + + +        subvol = layout->list[i].xlator; +        this = frame->this; + +        xattr = get_new_dict (); +        if (!xattr) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        ret = dht_disk_layout_extract (this, layout, i, &disk_layout); +        if (ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "failed to extract disk layout"); +                goto err; +        } + +        ret = dict_set_bin (xattr, "trusted.glusterfs.dht", +                            disk_layout, 4 * 4); +        if (ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "failed to set xattr dictionary"); +                goto err; +        } +        disk_layout = NULL; + +        gf_log (this->name, GF_LOG_TRACE, +                "setting hash range %u - %u (type %d) on subvolume %s for %s", +                layout->list[i].start, layout->list[i].stop, +                layout->type, subvol->name, loc->path); + +        dict_ref (xattr); + +        STACK_WIND (frame, dht_selfheal_dir_xattr_cbk, +                    subvol, subvol->fops->setxattr, +                    loc, xattr, 0); + +        dict_unref (xattr); + +        return 0;  err: -	if (xattr) -		dict_destroy (xattr); +        if (xattr) +                dict_destroy (xattr); -	if (disk_layout) -		GF_FREE (disk_layout); +        if (disk_layout) +                GF_FREE (disk_layout); -	dht_selfheal_dir_xattr_cbk (frame, subvol, frame->this, -				    -1, ENOMEM); -	return 0; +        dht_selfheal_dir_xattr_cbk (frame, subvol, frame->this, +                                    -1, ENOMEM); +        return 0;  }  int  dht_selfheal_dir_xattr (call_frame_t *frame, loc_t *loc, dht_layout_t *layout)  { -	dht_local_t *local = NULL; -	int          missing_xattr = 0; -	int          i = 0; -	xlator_t    *this = NULL; - -	local = frame->local; -	this = frame->this; - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].err != -1 || !layout->list[i].stop) { -			/* err != -1 would mean xattr present on the directory -			 * or the directory is itself non existant. -			 * !layout->list[i].stop would mean layout absent -			 */ -			continue; -		} -		missing_xattr++; -	} - -	gf_log (this->name, GF_LOG_TRACE, -		"%d subvolumes missing xattr for %s", -		missing_xattr, loc->path); - -	if (missing_xattr == 0) { -		dht_selfheal_dir_finish (frame, this, 0); -		return 0; -	} - -	local->call_cnt = missing_xattr; - -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].err != -1 || !layout->list[i].stop) -			continue; - -		dht_selfheal_dir_xattr_persubvol (frame, loc, layout, i); - -		if (--missing_xattr == 0) -			break; -	} -	return 0; +        dht_local_t *local = NULL; +        int          missing_xattr = 0; +        int          i = 0; +        xlator_t    *this = NULL; + +        local = frame->local; +        this = frame->this; + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].err != -1 || !layout->list[i].stop) { +                        /* err != -1 would mean xattr present on the directory +                         * or the directory is itself non existant. +                         * !layout->list[i].stop would mean layout absent +                         */ +                        continue; +                } +                missing_xattr++; +        } + +        gf_log (this->name, GF_LOG_TRACE, +                "%d subvolumes missing xattr for %s", +                missing_xattr, loc->path); + +        if (missing_xattr == 0) { +                dht_selfheal_dir_finish (frame, this, 0); +                return 0; +        } + +        local->call_cnt = missing_xattr; + +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].err != -1 || !layout->list[i].stop) +                        continue; + +                dht_selfheal_dir_xattr_persubvol (frame, loc, layout, i); + +                if (--missing_xattr == 0) +                        break; +        } +        return 0;  }  int @@ -254,31 +254,31 @@ dht_selfheal_dir_setattr (call_frame_t *frame, loc_t *loc, struct iatt *stbuf,  int  dht_selfheal_dir_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -			    int op_ret, int op_errno, +                            int op_ret, int op_errno,                              inode_t *inode, struct iatt *stbuf,                              struct iatt *preparent, struct iatt *postparent)  { -	dht_local_t   *local = NULL; -	dht_layout_t  *layout = NULL; -	call_frame_t  *prev = NULL; -	xlator_t      *subvol = NULL; -	int            i = 0; -	int            this_call_cnt = 0; - - -	local  = frame->local; -	layout = local->selfheal.layout; -	prev   = cookie; -	subvol = prev->this; - -	if ((op_ret == 0) || ((op_ret == -1) && (op_errno == EEXIST))) { -		for (i = 0; i < layout->cnt; i++) { -			if (layout->list[i].xlator == subvol) { -				layout->list[i].err = -1; -				break; -			} -		} -	} +        dht_local_t   *local = NULL; +        dht_layout_t  *layout = NULL; +        call_frame_t  *prev = NULL; +        xlator_t      *subvol = NULL; +        int            i = 0; +        int            this_call_cnt = 0; + + +        local  = frame->local; +        layout = local->selfheal.layout; +        prev   = cookie; +        subvol = prev->this; + +        if ((op_ret == 0) || ((op_ret == -1) && (op_errno == EEXIST))) { +                for (i = 0; i < layout->cnt; i++) { +                        if (layout->list[i].xlator == subvol) { +                                layout->list[i].err = -1; +                                break; +                        } +                } +        }          if (op_ret)                  goto out; @@ -292,41 +292,41 @@ dht_selfheal_dir_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          dht_iatt_merge (this, &local->postparent, postparent, prev->this);  out: -	this_call_cnt = dht_frame_return (frame); +        this_call_cnt = dht_frame_return (frame); -	if (is_last_call (this_call_cnt)) { -		dht_selfheal_dir_setattr (frame, &local->loc, &local->stbuf, 0xffffff, layout); -	} +        if (is_last_call (this_call_cnt)) { +                dht_selfheal_dir_setattr (frame, &local->loc, &local->stbuf, 0xffffff, layout); +        } -	return 0; +        return 0;  }  int  dht_selfheal_dir_mkdir (call_frame_t *frame, loc_t *loc, -                       dht_layout_t *layout, int force) +                        dht_layout_t *layout, int force)  { -	int           missing_dirs = 0; -	int           i     = 0; -	int           ret   = -1; -	dht_local_t  *local = NULL; -	xlator_t     *this = NULL; +        int           missing_dirs = 0; +        int           i     = 0; +        int           ret   = -1; +        dht_local_t  *local = NULL; +        xlator_t     *this = NULL;          dict_t       *dict = NULL; -	local = frame->local; -	this = frame->this; +        local = frame->local; +        this = frame->this; -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].err == ENOENT || force) -			missing_dirs++; -	} +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].err == ENOENT || force) +                        missing_dirs++; +        } -	if (missing_dirs == 0) { -		dht_selfheal_dir_setattr (frame, loc, &local->stbuf, 0xffffffff, layout); -		return 0; -	} +        if (missing_dirs == 0) { +                dht_selfheal_dir_setattr (frame, loc, &local->stbuf, 0xffffffff, layout); +                return 0; +        } -	local->call_cnt = missing_dirs; +        local->call_cnt = missing_dirs;          if (!uuid_is_null (local->gfid)) {                  dict = dict_new ();                  if (!dict) @@ -345,26 +345,26 @@ dht_selfheal_dir_mkdir (call_frame_t *frame, loc_t *loc,                  gf_log (this->name, GF_LOG_DEBUG,                          "dict is NULL, need to make sure gfid's are same"); -	for (i = 0; i < layout->cnt; i++) { -		if (layout->list[i].err == ENOENT || force) { -			gf_log (this->name, GF_LOG_TRACE, -				"creating directory %s on subvol %s", -				loc->path, layout->list[i].xlator->name); +        for (i = 0; i < layout->cnt; i++) { +                if (layout->list[i].err == ENOENT || force) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "creating directory %s on subvol %s", +                                loc->path, layout->list[i].xlator->name); -			STACK_WIND (frame, dht_selfheal_dir_mkdir_cbk, -				    layout->list[i].xlator, -				    layout->list[i].xlator->fops->mkdir, -				    loc, +                        STACK_WIND (frame, dht_selfheal_dir_mkdir_cbk, +                                    layout->list[i].xlator, +                                    layout->list[i].xlator->fops->mkdir, +                                    loc,                                      st_mode_from_ia (local->stbuf.ia_prot,                                                       local->stbuf.ia_type),                                      dict); -		} -	} +                } +        }          if (dict)                  dict_unref (dict); -	return 0; +        return 0;  } @@ -387,25 +387,25 @@ dht_selfheal_layout_alloc_start (xlator_t *this, loc_t *loc,  void  dht_selfheal_layout_new_directory (call_frame_t *frame, loc_t *loc, -				   dht_layout_t *layout) +                                   dht_layout_t *layout)  { -	xlator_t    *this = NULL; -	uint32_t     chunk = 0; -	int          i = 0; -	uint32_t     start = 0; -	int          cnt = 0; -	int          err = 0; +        xlator_t    *this = NULL; +        uint32_t     chunk = 0; +        int          i = 0; +        uint32_t     start = 0; +        int          cnt = 0; +        int          err = 0;          int          start_subvol = 0; -	this = frame->this; +        this = frame->this; -	for (i = 0; i < layout->cnt; i++) { -		err = layout->list[i].err; -		if (err == -1 || err == 0) { -			layout->list[i].err = -1; -			cnt++; -		} -	} +        for (i = 0; i < layout->cnt; i++) { +                err = layout->list[i].err; +                if (err == -1 || err == 0) { +                        layout->list[i].err = -1; +                        cnt++; +                } +        }          /* no subvolume has enough space, but can't stop directory creation */          if (!cnt) { @@ -418,197 +418,197 @@ dht_selfheal_layout_new_directory (call_frame_t *frame, loc_t *loc,                  }          } -	chunk = ((unsigned long) 0xffffffff) / ((cnt) ? cnt : 1); - -	start_subvol = dht_selfheal_layout_alloc_start (this, loc, layout); - -	for (i = start_subvol; i < layout->cnt; i++) { -		err = layout->list[i].err; -		if (err == -1) { -			layout->list[i].start = start; -			layout->list[i].stop  = start + chunk - 1; -			 -			start = start + chunk; - -			gf_log (this->name, GF_LOG_TRACE, -				"gave fix: %u - %u on %s for %s", -				layout->list[i].start, layout->list[i].stop, -				layout->list[i].xlator->name, loc->path); -			if (--cnt == 0) { -				layout->list[i].stop = 0xffffffff; -				break; -			} -		} -	} - -	for (i = 0; i < start_subvol; i++) { -		err = layout->list[i].err; -		if (err == -1) { -			layout->list[i].start = start; -			layout->list[i].stop  = start + chunk - 1; -			 -			start = start + chunk; - -			gf_log (this->name, GF_LOG_TRACE, -				"gave fix: %u - %u on %s for %s", -				layout->list[i].start, layout->list[i].stop, -				layout->list[i].xlator->name, loc->path); -			if (--cnt == 0) { -				layout->list[i].stop = 0xffffffff; -				break; -			} -		} -	} +        chunk = ((unsigned long) 0xffffffff) / ((cnt) ? cnt : 1); + +        start_subvol = dht_selfheal_layout_alloc_start (this, loc, layout); + +        for (i = start_subvol; i < layout->cnt; i++) { +                err = layout->list[i].err; +                if (err == -1) { +                        layout->list[i].start = start; +                        layout->list[i].stop  = start + chunk - 1; + +                        start = start + chunk; + +                        gf_log (this->name, GF_LOG_TRACE, +                                "gave fix: %u - %u on %s for %s", +                                layout->list[i].start, layout->list[i].stop, +                                layout->list[i].xlator->name, loc->path); +                        if (--cnt == 0) { +                                layout->list[i].stop = 0xffffffff; +                                break; +                        } +                } +        } + +        for (i = 0; i < start_subvol; i++) { +                err = layout->list[i].err; +                if (err == -1) { +                        layout->list[i].start = start; +                        layout->list[i].stop  = start + chunk - 1; + +                        start = start + chunk; + +                        gf_log (this->name, GF_LOG_TRACE, +                                "gave fix: %u - %u on %s for %s", +                                layout->list[i].start, layout->list[i].stop, +                                layout->list[i].xlator->name, loc->path); +                        if (--cnt == 0) { +                                layout->list[i].stop = 0xffffffff; +                                break; +                        } +                } +        }  }  int  dht_selfheal_dir_getafix (call_frame_t *frame, loc_t *loc, -			  dht_layout_t *layout) +                          dht_layout_t *layout)  { -	dht_conf_t  *conf = NULL; -	xlator_t    *this = NULL; -	dht_local_t *local = NULL; -	int          missing = -1; -	int          down = -1; -	int          holes = -1; -	int          ret = -1; -	int          i = -1; -	int          overlaps = -1; - -	this = frame->this; -	conf = this->private; -	local = frame->local; - -	missing = local->selfheal.missing; -	down = local->selfheal.down; -	holes = local->selfheal.hole_cnt; -	overlaps = local->selfheal.overlaps_cnt; - -	if ((missing + down) == conf->subvolume_cnt) { -		dht_selfheal_layout_new_directory (frame, loc, layout); -		ret = 0; -	} - -	if (holes <= down) { -		/* the down subvol might fill up the holes */ -		ret = 0; -	} - -	if (holes || overlaps) { -		dht_selfheal_layout_new_directory (frame, loc, layout); -		ret = 0; -	} - -	for (i = 0; i < layout->cnt; i++) { -		/* directory not present */ -		if (layout->list[i].err == ENOENT) { -			ret = 0; -			break; -		} -	} - -	/* TODO: give a fix to these non-virgins */ - -	return ret; +        dht_conf_t  *conf = NULL; +        xlator_t    *this = NULL; +        dht_local_t *local = NULL; +        int          missing = -1; +        int          down = -1; +        int          holes = -1; +        int          ret = -1; +        int          i = -1; +        int          overlaps = -1; + +        this = frame->this; +        conf = this->private; +        local = frame->local; + +        missing = local->selfheal.missing; +        down = local->selfheal.down; +        holes = local->selfheal.hole_cnt; +        overlaps = local->selfheal.overlaps_cnt; + +        if ((missing + down) == conf->subvolume_cnt) { +                dht_selfheal_layout_new_directory (frame, loc, layout); +                ret = 0; +        } + +        if (holes <= down) { +                /* the down subvol might fill up the holes */ +                ret = 0; +        } + +        if (holes || overlaps) { +                dht_selfheal_layout_new_directory (frame, loc, layout); +                ret = 0; +        } + +        for (i = 0; i < layout->cnt; i++) { +                /* directory not present */ +                if (layout->list[i].err == ENOENT) { +                        ret = 0; +                        break; +                } +        } + +        /* TODO: give a fix to these non-virgins */ + +        return ret;  }  int -dht_selfheal_new_directory (call_frame_t *frame,  -			    dht_selfheal_dir_cbk_t dir_cbk, -			    dht_layout_t *layout) +dht_selfheal_new_directory (call_frame_t *frame, +                            dht_selfheal_dir_cbk_t dir_cbk, +                            dht_layout_t *layout)  { -	dht_local_t *local = NULL; +        dht_local_t *local = NULL; -	local = frame->local; +        local = frame->local; -	local->selfheal.dir_cbk = dir_cbk; -	local->selfheal.layout = dht_layout_ref (frame->this, layout); +        local->selfheal.dir_cbk = dir_cbk; +        local->selfheal.layout = dht_layout_ref (frame->this, layout); -	dht_layout_sort_volname (layout); -	dht_selfheal_layout_new_directory (frame, &local->loc, layout); -	dht_selfheal_dir_xattr (frame, &local->loc, layout); -	return 0; +        dht_layout_sort_volname (layout); +        dht_selfheal_layout_new_directory (frame, &local->loc, layout); +        dht_selfheal_dir_xattr (frame, &local->loc, layout); +        return 0;  }  int  dht_selfheal_directory (call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk, -			loc_t *loc, dht_layout_t *layout) +                        loc_t *loc, dht_layout_t *layout)  { -	dht_local_t *local    = NULL; -	uint32_t     holes    = 0; -	uint32_t     down     = 0; -	uint32_t     misc     = 0; -	int          ret      = 0; -	xlator_t    *this     = NULL; +        dht_local_t *local    = NULL; +        uint32_t     holes    = 0; +        uint32_t     down     = 0; +        uint32_t     misc     = 0; +        int          ret      = 0; +        xlator_t    *this     = NULL; -	local = frame->local; -	this = frame->this; +        local = frame->local; +        this = frame->this; -	dht_layout_anomalies (this, loc, layout, +        dht_layout_anomalies (this, loc, layout,                                &local->selfheal.hole_cnt,                                &local->selfheal.overlaps_cnt,                                &local->selfheal.missing,                                &local->selfheal.down,                                &local->selfheal.misc); -	holes    = local->selfheal.hole_cnt; -	down     = local->selfheal.down; -	misc     = local->selfheal.misc; +        holes    = local->selfheal.hole_cnt; +        down     = local->selfheal.down; +        misc     = local->selfheal.misc; -	local->selfheal.dir_cbk = dir_cbk; -	local->selfheal.layout = dht_layout_ref (this, layout); +        local->selfheal.dir_cbk = dir_cbk; +        local->selfheal.layout = dht_layout_ref (this, layout); -	if (down) { -		gf_log (this->name, GF_LOG_DEBUG, -			"%d subvolumes down -- not fixing", down); -		ret = 0; -		goto sorry_no_fix; -	} +        if (down) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "%d subvolumes down -- not fixing", down); +                ret = 0; +                goto sorry_no_fix; +        } -	if (misc) { -		gf_log (this->name, GF_LOG_DEBUG, -			"%d subvolumes have unrecoverable errors", misc); -		ret = 0; -		goto sorry_no_fix; -	} +        if (misc) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "%d subvolumes have unrecoverable errors", misc); +                ret = 0; +                goto sorry_no_fix; +        } -	dht_layout_sort_volname (layout); -	ret = dht_selfheal_dir_getafix (frame, loc, layout); +        dht_layout_sort_volname (layout); +        ret = dht_selfheal_dir_getafix (frame, loc, layout); -	if (ret == -1) { -		gf_log (this->name, GF_LOG_DEBUG, -			"not able to form layout for the directory"); -		goto sorry_no_fix; -	} +        if (ret == -1) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "not able to form layout for the directory"); +                goto sorry_no_fix; +        } -	dht_selfheal_dir_mkdir (frame, loc, layout, 0); +        dht_selfheal_dir_mkdir (frame, loc, layout, 0); -	return 0; +        return 0;  sorry_no_fix: -	/* TODO: need to put appropriate local->op_errno */ -	dht_selfheal_dir_finish (frame, this, ret); +        /* TODO: need to put appropriate local->op_errno */ +        dht_selfheal_dir_finish (frame, this, ret); -	return 0; +        return 0;  }  int  dht_selfheal_restore (call_frame_t *frame, dht_selfheal_dir_cbk_t dir_cbk, -		      loc_t *loc, dht_layout_t *layout) +                      loc_t *loc, dht_layout_t *layout)  { -	int          ret = 0; -	dht_local_t *local    = NULL; +        int          ret = 0; +        dht_local_t *local    = NULL; -	local = frame->local; +        local = frame->local; -	local->selfheal.dir_cbk = dir_cbk; -	local->selfheal.layout = dht_layout_ref (frame->this, layout); +        local->selfheal.dir_cbk = dir_cbk; +        local->selfheal.layout = dht_layout_ref (frame->this, layout); -	ret = dht_selfheal_dir_mkdir (frame, loc, layout, 1); +        ret = dht_selfheal_dir_mkdir (frame, loc, layout, 1); -	return ret; +        return ret;  } diff --git a/xlators/cluster/dht/src/dht.c b/xlators/cluster/dht/src/dht.c index 3f81ba75509..fc500b61a2e 100644 --- a/xlators/cluster/dht/src/dht.c +++ b/xlators/cluster/dht/src/dht.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/>.  */ @@ -79,8 +79,8 @@ dht_layout_dump (dht_layout_t  *layout, const char *prefix)  int32_t  dht_priv_dump (xlator_t *this)  { -	char            key_prefix[GF_DUMP_MAX_BUF_LEN]; -	char            key[GF_DUMP_MAX_BUF_LEN]; +        char            key_prefix[GF_DUMP_MAX_BUF_LEN]; +        char            key[GF_DUMP_MAX_BUF_LEN];          int             i = 0;          dht_conf_t      *conf = NULL;          int             ret = 0; @@ -97,7 +97,7 @@ dht_priv_dump (xlator_t *this)          if (ret != 0) {                  gf_log("", GF_LOG_WARNING, "Unable to lock dht subvolume %s", -                                this->name); +                       this->name);                  return ret;          } @@ -117,14 +117,14 @@ dht_priv_dump (xlator_t *this)                  }                  if (conf->dir_layouts && conf->dir_layouts[i]) {                          gf_proc_dump_build_key(key, key_prefix, -                                              "dir_layouts[%d]",i); +                                               "dir_layouts[%d]",i);                          dht_layout_dump(conf->dir_layouts[i], key);                  }                  if (conf->subvolume_status) {                          gf_proc_dump_build_key(key, key_prefix, -                                                "subvolume_status[%d]", i); +                                               "subvolume_status[%d]", i);                          gf_proc_dump_write(key, "%d", -                                               (int)conf->subvolume_status[i]); +                                           (int)conf->subvolume_status[i]);                  }          } @@ -146,13 +146,13 @@ dht_priv_dump (xlator_t *this)          gf_proc_dump_write(key, "%d", conf->unhashed_sticky_bit);          if (conf ->du_stats) {                  gf_proc_dump_build_key(key, key_prefix, -                                "du_stats.avail_percent"); +                                       "du_stats.avail_percent");                  gf_proc_dump_write(key, "%lf", conf->du_stats->avail_percent);                  gf_proc_dump_build_key(key, key_prefix, -                                "du_stats.avail_space"); +                                       "du_stats.avail_space");                  gf_proc_dump_write(key, "%lu", conf->du_stats->avail_space);                  gf_proc_dump_build_key(key, key_prefix, -                                "du_stats.log"); +                                       "du_stats.log");                  gf_proc_dump_write(key, "%lu", conf->du_stats->log);          }          gf_proc_dump_build_key(key, key_prefix, "last_stat_fetch"); @@ -169,12 +169,12 @@ dht_inodectx_dump (xlator_t *this, inode_t *inode)          int             ret = -1;          char            key_prefix[GF_DUMP_MAX_BUF_LEN];          dht_layout_t    *layout = NULL; -	uint64_t        tmp_layout = 0; +        uint64_t        tmp_layout = 0;          if (!inode)                  return -1; -	ret = inode_ctx_get (inode, this, &tmp_layout); +        ret = inode_ctx_get (inode, this, &tmp_layout);          if (ret != 0)                  return ret; @@ -194,11 +194,11 @@ dht_inodectx_dump (xlator_t *this, inode_t *inode)  int  notify (xlator_t *this, int event, void *data, ...)  { -	int ret = -1; +        int ret = -1; -	ret = dht_notify (this, event, data); +        ret = dht_notify (this, event, data); -	return ret; +        return ret;  }  void @@ -207,7 +207,7 @@ fini (xlator_t *this)          int         i = 0;          dht_conf_t *conf = NULL; -	conf = this->private; +        conf = this->private;          this->private = NULL;          if (conf) {                  if (conf->file_layouts) { @@ -223,13 +223,13 @@ fini (xlator_t *this)                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  GF_FREE (conf);          } -	return; +        return;  }  int32_t @@ -241,10 +241,10 @@ mem_acct_init (xlator_t *this)                  return ret;          ret = xlator_mem_acct_init (this, gf_dht_mt_end + 1); -         +          if (ret != 0) {                  gf_log (this->name, GF_LOG_ERROR, "Memory accounting init" -                                "failed"); +                        "failed");                  return ret;          } @@ -256,7 +256,7 @@ validate_options (xlator_t *this, dict_t *options, char **op_errstr)          char            *temp_str = NULL;          gf_boolean_t     search_unhashed;          int              ret = 0; -         + @@ -265,76 +265,76 @@ validate_options (xlator_t *this, dict_t *options, char **op_errstr)                  if (strcasecmp (temp_str, "auto")) {                          if (!gf_string2boolean (temp_str, &search_unhashed)) {                                  gf_log(this->name, GF_LOG_DEBUG, "Validated" -                                                " lookup-unahashed (%s)", -                                                                temp_str); +                                       " lookup-unahashed (%s)", +                                       temp_str);                          }                          else {                                  gf_log(this->name, GF_LOG_ERROR, "Validation:" -                                                " lookup-unahashed should be boolean," -                                                                " not (%s)", -                                                                temp_str); +                                       " lookup-unahashed should be boolean," +                                       " not (%s)", +                                       temp_str);                                  *op_errstr = gf_strdup ("Error, lookup-" -                                                "unhashed be boolean"); +                                                        "unhashed be boolean");                                  ret = -1;                                  goto out;                          } -                 +                  }          } -         +  out: -                return ret; +        return ret;  }  int  reconfigure (xlator_t *this, dict_t *options)  { -	dht_conf_t	*conf = NULL; -	char		*temp_str = NULL; -	gf_boolean_t     search_unhashed; -	uint32_t         temp_free_disk = 0; -	int		 ret = 0; +        dht_conf_t      *conf = NULL; +        char            *temp_str = NULL; +        gf_boolean_t     search_unhashed; +        uint32_t         temp_free_disk = 0; +        int              ret = 0; -	conf = this->private; +        conf = this->private;          if (!conf)                  return 0; -	if (dict_get_str (options, "lookup-unhashed", &temp_str) == 0) { +        if (dict_get_str (options, "lookup-unhashed", &temp_str) == 0) {                  /* If option is not "auto", other options _should_ be boolean*/                  if (strcasecmp (temp_str, "auto")) {                          if (!gf_string2boolean (temp_str, &search_unhashed)) { -				gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" -				       " lookup-unahashed reconfigured (%s)", -				       temp_str); -				conf->search_unhashed = search_unhashed; -			} -			else { -				gf_log(this->name, GF_LOG_ERROR, "Reconfigure:" -				       " lookup-unahashed should be boolean," -				        " not (%s), defaulting to (%d)", -				       temp_str, conf->search_unhashed); -				//return -1; -				ret = -1; -				goto out; -			} -		 -		} +                                gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" +                                       " lookup-unahashed reconfigured (%s)", +                                       temp_str); +                                conf->search_unhashed = search_unhashed; +                        } +                        else { +                                gf_log(this->name, GF_LOG_ERROR, "Reconfigure:" +                                       " lookup-unahashed should be boolean," +                                       " not (%s), defaulting to (%d)", +                                       temp_str, conf->search_unhashed); +                                //return -1; +                                ret = -1; +                                goto out; +                        } + +                }                  else { -			gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" -			       " lookup-unahashed reconfigured auto "); +                        gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" +                               " lookup-unahashed reconfigured auto ");                          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO; -		} -	} +                } +        } -	if (dict_get_str (options, "min-free-disk", &temp_str) == 0) { -		if (gf_string2percent (temp_str, &temp_free_disk) == 0) { +        if (dict_get_str (options, "min-free-disk", &temp_str) == 0) { +                if (gf_string2percent (temp_str, &temp_free_disk) == 0) {                          if (temp_free_disk > 100) { -                                gf_string2bytesize (temp_str,  +                                gf_string2bytesize (temp_str,                                                      &conf->min_free_disk);                                  conf->disk_unit = 'b';                          } else { @@ -345,35 +345,35 @@ reconfigure (xlator_t *this, dict_t *options)                          conf->disk_unit = 'b';                  } -		gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:" +                gf_log(this->name, GF_LOG_DEBUG, "Reconfigure:"                         " min-free-disk reconfigured to %s",                         temp_str); -	} +        }  out: -	return ret; +        return ret;  }  int  init (xlator_t *this)  {          dht_conf_t    *conf = NULL; -	char          *temp_str = NULL; +        char          *temp_str = NULL;          int            ret = -1;          int            i = 0;          uint32_t       temp_free_disk = 0; -	if (!this->children) { -		gf_log (this->name, GF_LOG_CRITICAL, -			"Distribute needs more than one subvolume"); -		return -1; -	} -   -	if (!this->parents) { -		gf_log (this->name, GF_LOG_WARNING, -			"dangling volume. check volfile"); -	} +        if (!this->children) { +                gf_log (this->name, GF_LOG_CRITICAL, +                        "Distribute needs more than one subvolume"); +                return -1; +        } + +        if (!this->parents) { +                gf_log (this->name, GF_LOG_WARNING, +                        "dangling volume. check volfile"); +        }          conf = GF_CALLOC (1, sizeof (*conf), gf_dht_mt_dht_conf_t);          if (!conf) { @@ -383,35 +383,35 @@ init (xlator_t *this)          }          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON; -	if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) { +        if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) {                  /* If option is not "auto", other options _should_ be boolean */                  if (strcasecmp (temp_str, "auto"))                          gf_string2boolean (temp_str, &conf->search_unhashed);                  else                          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO; -	} +        } -	conf->unhashed_sticky_bit = 0; +        conf->unhashed_sticky_bit = 0; -	if (dict_get_str (this->options, "unhashed-sticky-bit",  +        if (dict_get_str (this->options, "unhashed-sticky-bit",                            &temp_str) == 0) { -	        gf_string2boolean (temp_str, &conf->unhashed_sticky_bit); -	} +                gf_string2boolean (temp_str, &conf->unhashed_sticky_bit); +        } -	conf->use_readdirp = 1; +        conf->use_readdirp = 1; -	if (dict_get_str (this->options, "use-readdirp", +        if (dict_get_str (this->options, "use-readdirp",                            &temp_str) == 0) { -	        gf_string2boolean (temp_str, &conf->use_readdirp); -	} +                gf_string2boolean (temp_str, &conf->use_readdirp); +        }          conf->disk_unit = 'p';          conf->min_free_disk = 10; -	if (dict_get_str (this->options, "min-free-disk", &temp_str) == 0) { -		if (gf_string2percent (temp_str, &temp_free_disk) == 0) { +        if (dict_get_str (this->options, "min-free-disk", &temp_str) == 0) { +                if (gf_string2percent (temp_str, &temp_free_disk) == 0) {                          if (temp_free_disk > 100) { -                                gf_string2bytesize (temp_str,  +                                gf_string2bytesize (temp_str,                                                      &conf->min_free_disk);                                  conf->disk_unit = 'b';                          } else { @@ -421,7 +421,7 @@ init (xlator_t *this)                          gf_string2bytesize (temp_str, &conf->min_free_disk);                          conf->disk_unit = 'b';                  } -	} +        }          ret = dht_init_subvolumes (this, conf); @@ -442,10 +442,10 @@ init (xlator_t *this)                  goto err;          } -	LOCK_INIT (&conf->subvolume_lock); -	LOCK_INIT (&conf->layout_lock); +        LOCK_INIT (&conf->subvolume_lock); +        LOCK_INIT (&conf->layout_lock); -	conf->gen = 1; +        conf->gen = 1;          this->private = conf; @@ -466,8 +466,8 @@ err:                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  if (conf->du_stats)                          GF_FREE (conf->du_stats); @@ -480,44 +480,44 @@ err:  struct xlator_fops fops = { -	.lookup      = dht_lookup, -	.mknod       = dht_mknod, -	.create      = dht_create, - -	.stat        = dht_stat, -	.fstat       = dht_fstat, -	.truncate    = dht_truncate, -	.ftruncate   = dht_ftruncate, -	.access      = dht_access, -	.readlink    = dht_readlink, -	.setxattr    = dht_setxattr, -	.fsetxattr   = dht_fsetxattr, -	.getxattr    = dht_getxattr, -	.removexattr = dht_removexattr, -	.open        = dht_open, -	.readv       = dht_readv, -	.writev      = dht_writev, -	.flush       = dht_flush, -	.fsync       = dht_fsync, -	.statfs      = dht_statfs, -	.lk          = dht_lk, -	.opendir     = dht_opendir, -	.readdir     = dht_readdir, -	.readdirp    = dht_readdirp, -	.fsyncdir    = dht_fsyncdir, -	.symlink     = dht_symlink, -	.unlink      = dht_unlink, -	.link        = dht_link, -	.mkdir       = dht_mkdir, -	.rmdir       = dht_rmdir, -	.rename      = dht_rename, -	.inodelk     = dht_inodelk, -	.finodelk    = dht_finodelk, -	.entrylk     = dht_entrylk, -	.fentrylk    = dht_fentrylk, -	.xattrop     = dht_xattrop, -	.fxattrop    = dht_fxattrop, -        .setattr     = dht_setattr,  +        .lookup      = dht_lookup, +        .mknod       = dht_mknod, +        .create      = dht_create, + +        .stat        = dht_stat, +        .fstat       = dht_fstat, +        .truncate    = dht_truncate, +        .ftruncate   = dht_ftruncate, +        .access      = dht_access, +        .readlink    = dht_readlink, +        .setxattr    = dht_setxattr, +        .fsetxattr   = dht_fsetxattr, +        .getxattr    = dht_getxattr, +        .removexattr = dht_removexattr, +        .open        = dht_open, +        .readv       = dht_readv, +        .writev      = dht_writev, +        .flush       = dht_flush, +        .fsync       = dht_fsync, +        .statfs      = dht_statfs, +        .lk          = dht_lk, +        .opendir     = dht_opendir, +        .readdir     = dht_readdir, +        .readdirp    = dht_readdirp, +        .fsyncdir    = dht_fsyncdir, +        .symlink     = dht_symlink, +        .unlink      = dht_unlink, +        .link        = dht_link, +        .mkdir       = dht_mkdir, +        .rmdir       = dht_rmdir, +        .rename      = dht_rename, +        .inodelk     = dht_inodelk, +        .finodelk    = dht_finodelk, +        .entrylk     = dht_entrylk, +        .fentrylk    = dht_fentrylk, +        .xattrop     = dht_xattrop, +        .fxattrop    = dht_fxattrop, +        .setattr     = dht_setattr,          .fsetattr    = dht_fsetattr,  }; @@ -528,9 +528,9 @@ struct xlator_dumpops dumpops = {  struct xlator_cbks cbks = { -//	.release    = dht_release, +//      .release    = dht_release,  //      .releasedir = dht_releasedir, -	.forget     = dht_forget +        .forget     = dht_forget  }; @@ -538,8 +538,8 @@ struct volume_options options[] = {          { .key  = {"lookup-unhashed"},            .value = {"auto", "yes", "no", "enable", "disable", "1", "0",                      "on", "off"}, -	  .type = GF_OPTION_TYPE_STR -	}, +          .type = GF_OPTION_TYPE_STR +        },          { .key  = {"min-free-disk"},            .type = GF_OPTION_TYPE_PERCENT_OR_SIZET,          }, @@ -549,5 +549,5 @@ struct volume_options options[] = {          { .key = {"use-readdirp"},            .type = GF_OPTION_TYPE_BOOL          }, -	{ .key  = {NULL} }, +        { .key  = {NULL} },  }; diff --git a/xlators/cluster/dht/src/nufa.c b/xlators/cluster/dht/src/nufa.c index 09388cbb005..6f81269d6b1 100644 --- a/xlators/cluster/dht/src/nufa.c +++ b/xlators/cluster/dht/src/nufa.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/>.  */ @@ -29,7 +29,7 @@  int  nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -		       int op_ret, int op_errno, +                       int op_ret, int op_errno,                         inode_t *inode, struct iatt *stbuf, dict_t *xattr,                         struct iatt *postparent)  { @@ -41,7 +41,7 @@ nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          loc_t        *loc         = NULL;          int           i           = 0;          call_frame_t *prev        = NULL; -	int           call_cnt    = 0; +        int           call_cnt    = 0;          int           ret         = 0; @@ -51,13 +51,13 @@ nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          local = frame->local;          loc   = &local->loc; -	if (ENTRY_MISSING (op_ret, op_errno)) { -		if (conf->search_unhashed) { -			local->op_errno = ENOENT; -			dht_lookup_everywhere (frame, this, loc); -			return 0; -		} -	} +        if (ENTRY_MISSING (op_ret, op_errno)) { +                if (conf->search_unhashed) { +                        local->op_errno = ENOENT; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0; +                } +        }          if (op_ret == -1)                  goto out; @@ -68,40 +68,40 @@ nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (!is_dir && !is_linkfile) {                  /* non-directory and not a linkfile */ -		dht_itransform (this, prev->this, stbuf->ia_ino, -				&stbuf->ia_ino); +                dht_itransform (this, prev->this, stbuf->ia_ino, +                                &stbuf->ia_ino); -		ret = dht_layout_preset (this, prev->this, inode); -		if (ret < 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not set pre-set layout for subvol %s", -				prev->this->name); -			op_ret   = -1; -			op_errno = EINVAL; -			goto err; -		} +                ret = dht_layout_preset (this, prev->this, inode); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not set pre-set layout for subvol %s", +                                prev->this->name); +                        op_ret   = -1; +                        op_errno = EINVAL; +                        goto err; +                }                  goto out;          }          if (is_dir) {                  call_cnt        = conf->subvolume_cnt; -		local->call_cnt = call_cnt; +                local->call_cnt = call_cnt;                  local->inode = inode_ref (inode);                  local->xattr = dict_ref (xattr); -		local->op_ret = 0; -		local->op_errno = 0; +                local->op_ret = 0; +                local->op_errno = 0; -		local->layout = dht_layout_new (this, conf->subvolume_cnt); -		if (!local->layout) { -			op_ret   = -1; -			op_errno = ENOMEM; -			gf_log (this->name, GF_LOG_DEBUG, -				"memory allocation failed :("); -			goto err; -		} +                local->layout = dht_layout_new (this, conf->subvolume_cnt); +                if (!local->layout) { +                        op_ret   = -1; +                        op_errno = ENOMEM; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "memory allocation failed :("); +                        goto err; +                }                  for (i = 0; i < call_cnt; i++) {                          STACK_WIND (frame, dht_lookup_dir_cbk, @@ -118,34 +118,34 @@ nufa_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          gf_log (this->name, GF_LOG_DEBUG,                                  "linkfile not having link subvolume. path=%s",                                  loc->path); -			dht_lookup_everywhere (frame, this, loc); -			return 0; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0;                  } -		STACK_WIND (frame, dht_lookup_linkfile_cbk, -			    subvol, subvol->fops->lookup, -			    &local->loc, local->xattr_req); +                STACK_WIND (frame, dht_lookup_linkfile_cbk, +                            subvol, subvol->fops->lookup, +                            &local->loc, local->xattr_req);          }          return 0;  out: -	if (!local->hashed_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			local->loc.path); +        if (!local->hashed_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        local->loc.path);                  local->op_errno = ENOENT;                  dht_lookup_everywhere (frame, this, loc);                  return 0; -	} +        } -	STACK_WIND (frame, dht_lookup_cbk, -		    local->hashed_subvol, local->hashed_subvol->fops->lookup, -		    &local->loc, local->xattr_req); +        STACK_WIND (frame, dht_lookup_cbk, +                    local->hashed_subvol, local->hashed_subvol->fops->lookup, +                    &local->loc, local->xattr_req); -	return 0; +        return 0; - err: +err:          DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno,                            inode, stbuf, xattr, NULL);          return 0; @@ -153,18 +153,18 @@ out:  int  nufa_lookup (call_frame_t *frame, xlator_t *this, -	     loc_t *loc, dict_t *xattr_req) +             loc_t *loc, dict_t *xattr_req)  {          xlator_t     *hashed_subvol = NULL;          xlator_t     *cached_subvol = NULL;          xlator_t     *subvol = NULL;          dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_conf_t   *conf = NULL;          int           ret    = -1;          int           op_errno = -1; -	dht_layout_t *layout = NULL; -	int           i = 0; -	int           call_cnt = 0; +        dht_layout_t *layout = NULL; +        int           i = 0; +        int           call_cnt = 0;          VALIDATE_OR_GOTO (frame, err); @@ -173,15 +173,15 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	conf = this->private; +        conf = this->private;          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        }          ret = loc_dup (loc, &local->loc);          if (ret == -1) { @@ -192,20 +192,20 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,                  goto err;          } -	if (xattr_req) { -		local->xattr_req = dict_ref (xattr_req); -	} else { -		local->xattr_req = dict_new (); -	} +        if (xattr_req) { +                local->xattr_req = dict_ref (xattr_req); +        } else { +                local->xattr_req = dict_new (); +        } -	hashed_subvol = dht_subvol_get_hashed (this, &local->loc); -	cached_subvol = dht_subvol_get_cached (this, local->loc.inode); +        hashed_subvol = dht_subvol_get_hashed (this, &local->loc); +        cached_subvol = dht_subvol_get_cached (this, local->loc.inode); -	local->cached_subvol = cached_subvol; -	local->hashed_subvol = hashed_subvol; +        local->cached_subvol = cached_subvol; +        local->hashed_subvol = hashed_subvol;          if (is_revalidate (loc)) { -		local->layout = layout = dht_layout_get (this, loc->inode); +                local->layout = layout = dht_layout_get (this, loc->inode);                  if (!layout) {                          gf_log (this->name, GF_LOG_DEBUG, @@ -215,25 +215,25 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		if (layout->gen && (layout->gen < conf->gen)) { -			gf_log (this->name, GF_LOG_DEBUG, -				"incomplete layout failure for path=%s", -				loc->path); +                if (layout->gen && (layout->gen < conf->gen)) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "incomplete layout failure for path=%s", +                                loc->path);                          dht_layout_unref (this, local->layout); -			goto do_fresh_lookup; -		} +                        goto do_fresh_lookup; +                } -		local->inode    = inode_ref (loc->inode); -		local->ia_ino   = loc->inode->ino; +                local->inode    = inode_ref (loc->inode); +                local->ia_ino   = loc->inode->ino; -		local->call_cnt = layout->cnt; -		call_cnt = local->call_cnt; +                local->call_cnt = layout->cnt; +                call_cnt = local->call_cnt; -		/* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute, -		 *       revalidates directly go to the cached-subvolume. -		 */ -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht", 4 * 4); +                /* NOTE: we don't require 'trusted.glusterfs.dht.linkto' attribute, +                 *       revalidates directly go to the cached-subvolume. +                 */ +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4);                  if (ret < 0) {                          gf_log (this->name, GF_LOG_ERROR,                                  "Failed to set dict value."); @@ -241,20 +241,20 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		for (i = 0; i < layout->cnt; i++) { -			subvol = layout->list[i].xlator; +                for (i = 0; i < layout->cnt; i++) { +                        subvol = layout->list[i].xlator; -			STACK_WIND (frame, dht_revalidate_cbk, -				    subvol, subvol->fops->lookup, -				    loc, local->xattr_req); +                        STACK_WIND (frame, dht_revalidate_cbk, +                                    subvol, subvol->fops->lookup, +                                    loc, local->xattr_req); -			if (!--call_cnt) -				break; -		} -	} else { +                        if (!--call_cnt) +                                break; +                } +        } else {          do_fresh_lookup: -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht", 4 * 4); +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4);                  if (ret < 0) {                          gf_log (this->name, GF_LOG_ERROR,                                  "Failed to set dict value."); @@ -262,8 +262,8 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht.linkto", 256); +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht.linkto", 256);                  if (ret < 0) {                          gf_log (this->name, GF_LOG_ERROR,                                  "Failed to set dict value."); @@ -271,84 +271,84 @@ nufa_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		/* Send it to only local volume */ -		STACK_WIND (frame, nufa_local_lookup_cbk, -			    (xlator_t *)conf->private, -			    ((xlator_t *)conf->private)->fops->lookup, -			    loc, local->xattr_req); -	} +                /* Send it to only local volume */ +                STACK_WIND (frame, nufa_local_lookup_cbk, +                            (xlator_t *)conf->private, +                            ((xlator_t *)conf->private)->fops->lookup, +                            loc, local->xattr_req); +        }          return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; +        op_errno = (op_errno == -1) ? errno : op_errno;          DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  nufa_create_linkfile_create_cbk (call_frame_t *frame, void *cookie, -				 xlator_t *this, int op_ret, int op_errno, +                                 xlator_t *this, int op_ret, int op_errno,                                   inode_t *inode, struct iatt *stbuf,                                   struct iatt *preparent,                                   struct iatt *postparent)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; +        local = frame->local; -	if (op_ret == -1) -		goto err; +        if (op_ret == -1) +                goto err; -	STACK_WIND (frame, dht_create_cbk, -		    local->cached_subvol, local->cached_subvol->fops->create, -		    &local->loc, local->flags, local->mode, local->fd, +        STACK_WIND (frame, dht_create_cbk, +                    local->cached_subvol, local->cached_subvol->fops->create, +                    &local->loc, local->flags, local->mode, local->fd,                      local->params); -	return 0; +        return 0; - err: -	DHT_STACK_UNWIND (create, frame, -1, op_errno, +err: +        DHT_STACK_UNWIND (create, frame, -1, op_errno,                            NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  nufa_create (call_frame_t *frame, xlator_t *this, -	     loc_t *loc, int32_t flags, mode_t mode, +             loc_t *loc, int32_t flags, mode_t mode,               fd_t *fd, dict_t *params)  { -	dht_local_t *local = NULL; -	dht_conf_t  *conf  = NULL; -	xlator_t    *subvol = NULL; +        dht_local_t *local = NULL; +        dht_conf_t  *conf  = NULL; +        xlator_t    *subvol = NULL;          xlator_t    *avail_subvol = NULL; -	int          op_errno = -1; -	int          ret = -1; +        int          op_errno = -1; +        int          ret = -1; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf  = this->private; +        conf  = this->private;          dht_get_du_info (frame, this, loc);          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          avail_subvol = conf->private;          if (dht_is_subvol_filled (this, (xlator_t *)conf->private)) { @@ -361,10 +361,10 @@ nufa_create (call_frame_t *frame, xlator_t *this,                  /* create a link file instead of actual file */                  ret = loc_copy (&local->loc, loc);                  if (ret == -1) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Out of memory"); -                                op_errno = ENOMEM; -                                goto err; +                        gf_log (this->name, GF_LOG_ERROR, +                                "Out of memory"); +                        op_errno = ENOMEM; +                        goto err;                  }                  local->fd = fd_ref (fd); @@ -389,11 +389,11 @@ nufa_create (call_frame_t *frame, xlator_t *this,          return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (create, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (create, frame, -1, op_errno,                            NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int @@ -402,64 +402,64 @@ nufa_mknod_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                           struct iatt *stbuf, struct iatt *preparent,                           struct iatt *postparent)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; +        local = frame->local; -	if (op_ret >= 0) { -		STACK_WIND (frame, dht_newfile_cbk, -			    local->cached_subvol, -			    local->cached_subvol->fops->mknod, -			    &local->loc, local->mode, local->rdev, +        if (op_ret >= 0) { +                STACK_WIND (frame, dht_newfile_cbk, +                            local->cached_subvol, +                            local->cached_subvol->fops->mknod, +                            &local->loc, local->mode, local->rdev,                              local->params); -		return 0; -	} +                return 0; +        }          WIPE (postparent);          WIPE (preparent); -	DHT_STACK_UNWIND (link, frame, op_ret, op_errno, +        DHT_STACK_UNWIND (link, frame, op_ret, op_errno,                            inode, stbuf, preparent, postparent); -	return 0; +        return 0;  }  int  nufa_mknod (call_frame_t *frame, xlator_t *this, -	    loc_t *loc, mode_t mode, dev_t rdev, dict_t *params) +            loc_t *loc, mode_t mode, dev_t rdev, dict_t *params)  { -	dht_local_t *local = NULL; -	dht_conf_t  *conf  = NULL; -	xlator_t    *subvol = NULL; +        dht_local_t *local = NULL; +        dht_conf_t  *conf  = NULL; +        xlator_t    *subvol = NULL;          xlator_t    *avail_subvol = NULL; -	int          op_errno = -1; -	int          ret = -1; +        int          op_errno = -1; +        int          ret = -1; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf  = this->private; +        conf  = this->private;          dht_get_du_info (frame, this, loc);          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          /* Consider the disksize in consideration */          avail_subvol = conf->private; @@ -469,52 +469,52 @@ nufa_mknod (call_frame_t *frame, xlator_t *this,                                                          (xlator_t *)conf->private);          } -	if (avail_subvol != subvol) { -		/* Create linkfile first */ -		ret = loc_copy (&local->loc, loc); -		if (ret == -1) { -			gf_log (this->name, GF_LOG_ERROR, -				"Out of memory"); -			op_errno = ENOMEM; -			goto err; -		} +        if (avail_subvol != subvol) { +                /* Create linkfile first */ +                ret = loc_copy (&local->loc, loc); +                if (ret == -1) { +                        gf_log (this->name, GF_LOG_ERROR, +                                "Out of memory"); +                        op_errno = ENOMEM; +                        goto err; +                }                  local->params = dict_ref (params); -		local->mode = mode; -		local->rdev = rdev; -		local->cached_subvol = avail_subvol; +                local->mode = mode; +                local->rdev = rdev; +                local->cached_subvol = avail_subvol; -		dht_linkfile_create (frame, nufa_mknod_linkfile_cbk, +                dht_linkfile_create (frame, nufa_mknod_linkfile_cbk,                                       avail_subvol, subvol, loc); -		return 0; -	} +                return 0; +        } -	gf_log (this->name, GF_LOG_TRACE, -		"creating %s on %s", loc->path, subvol->name); +        gf_log (this->name, GF_LOG_TRACE, +                "creating %s on %s", loc->path, subvol->name); -	STACK_WIND (frame, dht_newfile_cbk, -		    subvol, subvol->fops->mknod, -		    loc, mode, rdev, params); +        STACK_WIND (frame, dht_newfile_cbk, +                    subvol, subvol->fops->mknod, +                    loc, mode, rdev, params); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (mknod, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,                            NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  notify (xlator_t *this, int event, void *data, ...)  { -	int ret = -1; +        int ret = -1; -	ret = dht_notify (this, event, data); +        ret = dht_notify (this, event, data); -	return ret; +        return ret;  }  void @@ -523,7 +523,7 @@ fini (xlator_t *this)          int         i = 0;          dht_conf_t *conf = NULL; -	conf = this->private; +        conf = this->private;          if (conf) {                  if (conf->file_layouts) { @@ -539,38 +539,38 @@ fini (xlator_t *this)                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  GF_FREE (conf);          } -	return; +        return;  }  int  init (xlator_t *this)  {          dht_conf_t    *conf = NULL; -	xlator_list_t *trav = NULL; -	data_t        *data = NULL; -	char          *local_volname = NULL; -	char          *temp_str = NULL; +        xlator_list_t *trav = NULL; +        data_t        *data = NULL; +        char          *local_volname = NULL; +        char          *temp_str = NULL;          int            ret = -1;          int            i = 0; -	char           my_hostname[256]; -	uint32_t       temp_free_disk = 0; +        char           my_hostname[256]; +        uint32_t       temp_free_disk = 0; -	if (!this->children) { -		gf_log (this->name, GF_LOG_CRITICAL, -			"NUFA needs more than one subvolume"); -		return -1; -	} +        if (!this->children) { +                gf_log (this->name, GF_LOG_CRITICAL, +                        "NUFA needs more than one subvolume"); +                return -1; +        } -	if (!this->parents) { -		gf_log (this->name, GF_LOG_WARNING, -			"dangling volume. check volfile"); -	} +        if (!this->parents) { +                gf_log (this->name, GF_LOG_WARNING, +                        "dangling volume. check volfile"); +        }          conf = GF_CALLOC (1, sizeof (*conf),                            gf_dht_mt_dht_conf_t); @@ -581,13 +581,13 @@ init (xlator_t *this)          }          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON; -	if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) { +        if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) {                  /* If option is not "auto", other options _should_ be boolean */                  if (strcasecmp (temp_str, "auto"))                          gf_string2boolean (temp_str, &conf->search_unhashed);                  else                          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO; -	} +        }          ret = dht_init_subvolumes (this, conf);          if (ret == -1) { @@ -599,44 +599,44 @@ init (xlator_t *this)                  goto err;          } -	LOCK_INIT (&conf->subvolume_lock); -	LOCK_INIT (&conf->layout_lock); - -	conf->gen = 1; - -	local_volname = "localhost"; -	ret = gethostname (my_hostname, 256); -	if (ret < 0) { -		gf_log (this->name, GF_LOG_WARNING, -			"could not find hostname (%s)", -			strerror (errno)); -	} - -	if (ret == 0) -		local_volname = my_hostname; - -	data = dict_get (this->options, "local-volume-name"); -	if (data) { -		local_volname = data->data; -	} - -	trav = this->children; -	while (trav) { -		if (strcmp (trav->xlator->name, local_volname) == 0) -			break; -		trav = trav->next; -	} - -	if (!trav) { -		gf_log (this->name, GF_LOG_ERROR, -			"Could not find subvolume named '%s'. " -			"Please define volume with the name as the hostname " -			"or override it with 'option local-volume-name'", -			local_volname); -		goto err; -	} -	/* The volume specified exists */ -	conf->private = trav->xlator; +        LOCK_INIT (&conf->subvolume_lock); +        LOCK_INIT (&conf->layout_lock); + +        conf->gen = 1; + +        local_volname = "localhost"; +        ret = gethostname (my_hostname, 256); +        if (ret < 0) { +                gf_log (this->name, GF_LOG_WARNING, +                        "could not find hostname (%s)", +                        strerror (errno)); +        } + +        if (ret == 0) +                local_volname = my_hostname; + +        data = dict_get (this->options, "local-volume-name"); +        if (data) { +                local_volname = data->data; +        } + +        trav = this->children; +        while (trav) { +                if (strcmp (trav->xlator->name, local_volname) == 0) +                        break; +                trav = trav->next; +        } + +        if (!trav) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Could not find subvolume named '%s'. " +                        "Please define volume with the name as the hostname " +                        "or override it with 'option local-volume-name'", +                        local_volname); +                goto err; +        } +        /* The volume specified exists */ +        conf->private = trav->xlator;          conf->min_free_disk = 10;          conf->disk_unit = 'p'; @@ -647,7 +647,7 @@ init (xlator_t *this)                                         &temp_free_disk) == 0) {                          if (temp_free_disk > 100) {                                  gf_string2bytesize (temp_str, -                                                        &conf->min_free_disk); +                                                    &conf->min_free_disk);                                  conf->disk_unit = 'b';                          } else {                                  conf->min_free_disk = (uint64_t)temp_free_disk; @@ -655,7 +655,7 @@ init (xlator_t *this)                          }                  } else {                          gf_string2bytesize (temp_str, -                                                &conf->min_free_disk); +                                            &conf->min_free_disk);                          conf->disk_unit = 'b';                  }          } @@ -687,8 +687,8 @@ err:                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  if (conf->du_stats)                          GF_FREE (conf->du_stats); @@ -701,48 +701,48 @@ err:  struct xlator_fops fops = { -	.lookup      = nufa_lookup, -	.create      = nufa_create, -	.mknod       = nufa_mknod, - -	.stat        = dht_stat, -	.fstat       = dht_fstat, -	.truncate    = dht_truncate, -	.ftruncate   = dht_ftruncate, -	.access      = dht_access, -	.readlink    = dht_readlink, -	.setxattr    = dht_setxattr, -	.getxattr    = dht_getxattr, -	.removexattr = dht_removexattr, -	.open        = dht_open, -	.readv       = dht_readv, -	.writev      = dht_writev, -	.flush       = dht_flush, -	.fsync       = dht_fsync, -	.statfs      = dht_statfs, -	.lk          = dht_lk, -	.opendir     = dht_opendir, -	.readdir     = dht_readdir, -	.readdirp    = dht_readdirp, -	.fsyncdir    = dht_fsyncdir, -	.symlink     = dht_symlink, -	.unlink      = dht_unlink, -	.link        = dht_link, -	.mkdir       = dht_mkdir, -	.rmdir       = dht_rmdir, -	.rename      = dht_rename, -	.inodelk     = dht_inodelk, -	.finodelk    = dht_finodelk, -	.entrylk     = dht_entrylk, -	.fentrylk    = dht_fentrylk, -	.xattrop     = dht_xattrop, -	.fxattrop    = dht_fxattrop, +        .lookup      = nufa_lookup, +        .create      = nufa_create, +        .mknod       = nufa_mknod, + +        .stat        = dht_stat, +        .fstat       = dht_fstat, +        .truncate    = dht_truncate, +        .ftruncate   = dht_ftruncate, +        .access      = dht_access, +        .readlink    = dht_readlink, +        .setxattr    = dht_setxattr, +        .getxattr    = dht_getxattr, +        .removexattr = dht_removexattr, +        .open        = dht_open, +        .readv       = dht_readv, +        .writev      = dht_writev, +        .flush       = dht_flush, +        .fsync       = dht_fsync, +        .statfs      = dht_statfs, +        .lk          = dht_lk, +        .opendir     = dht_opendir, +        .readdir     = dht_readdir, +        .readdirp    = dht_readdirp, +        .fsyncdir    = dht_fsyncdir, +        .symlink     = dht_symlink, +        .unlink      = dht_unlink, +        .link        = dht_link, +        .mkdir       = dht_mkdir, +        .rmdir       = dht_rmdir, +        .rename      = dht_rename, +        .inodelk     = dht_inodelk, +        .finodelk    = dht_finodelk, +        .entrylk     = dht_entrylk, +        .fentrylk    = dht_fentrylk, +        .xattrop     = dht_xattrop, +        .fxattrop    = dht_fxattrop,          .setattr     = dht_setattr,  };  struct xlator_cbks cbks = { -	.forget     = dht_forget +        .forget     = dht_forget  }; @@ -750,13 +750,13 @@ struct volume_options options[] = {          { .key  = {"lookup-unhashed"},            .value = {"auto", "yes", "no", "enable", "disable", "1", "0",                      "on", "off"}, -	  .type = GF_OPTION_TYPE_STR -	}, -	{ .key  = {"local-volume-name"}, -	  .type = GF_OPTION_TYPE_XLATOR -	}, +          .type = GF_OPTION_TYPE_STR +        }, +        { .key  = {"local-volume-name"}, +          .type = GF_OPTION_TYPE_XLATOR +        },          { .key  = {"min-free-disk"},            .type = GF_OPTION_TYPE_PERCENT_OR_SIZET,          }, -	{ .key  = {NULL} }, +        { .key  = {NULL} },  }; diff --git a/xlators/cluster/dht/src/switch.c b/xlators/cluster/dht/src/switch.c index 344a657897c..e48e369a4d4 100644 --- a/xlators/cluster/dht/src/switch.c +++ b/xlators/cluster/dht/src/switch.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/>.  */ @@ -32,20 +32,20 @@  #include <string.h>  struct switch_sched_array { -	xlator_t *xl; -	int32_t   eligible; -	int32_t   considered; +        xlator_t *xl; +        int32_t   eligible; +        int32_t   considered;  };  /* Select one of this struct based on the path's pattern match */  struct switch_struct { -	struct switch_struct      *next; +        struct switch_struct      *next;          struct switch_sched_array *array; -	int32_t                    node_index; /* Index of the node in +        int32_t                    node_index; /* Index of the node in                                                    this pattern. */ -	int32_t                    num_child;  /* Total num of child nodes +        int32_t                    num_child;  /* Total num of child nodes                                                    with this pattern. */ -	char                       path_pattern[256]; +        char                       path_pattern[256];  };  /* TODO: all 'TODO's in dht.c holds good */ @@ -74,9 +74,9 @@ get_switch_matching_subvol (const char *path, dht_conf_t *conf,                              xlator_t *hashed_subvol)  {          struct switch_struct *cond      = NULL; -	struct switch_struct *trav      = NULL; -	char                 *pathname  = NULL; -	int                   idx     = 0; +        struct switch_struct *trav      = NULL; +        char                 *pathname  = NULL; +        int                   idx     = 0;          cond = conf->private;          if (!cond) @@ -84,9 +84,9 @@ get_switch_matching_subvol (const char *path, dht_conf_t *conf,          trav = cond;          pathname = gf_strdup (path); -	while (trav) { -		if (fnmatch (trav->path_pattern, -			     pathname, FNM_NOESCAPE) == 0) { +        while (trav) { +                if (fnmatch (trav->path_pattern, +                             pathname, FNM_NOESCAPE) == 0) {                          for (idx = 0; idx < trav->num_child; idx++) {                                  if (trav->array[idx].xl == hashed_subvol)                                          return hashed_subvol; @@ -94,11 +94,11 @@ get_switch_matching_subvol (const char *path, dht_conf_t *conf,                          idx = trav->node_index++;                          trav->node_index %= trav->num_child;                          return trav->array[idx].xl; -		} -		trav = trav->next; -	} -	GF_FREE (pathname); -	return hashed_subvol; +                } +                trav = trav->next; +        } +        GF_FREE (pathname); +        return hashed_subvol;  } @@ -116,7 +116,7 @@ switch_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          loc_t        *loc         = NULL;          int           i           = 0;          call_frame_t *prev        = NULL; -	int           call_cnt    = 0; +        int           call_cnt    = 0;          int           ret         = 0;          conf  = this->private; @@ -125,13 +125,13 @@ switch_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          local = frame->local;          loc   = &local->loc; -	if (ENTRY_MISSING (op_ret, op_errno)) { -		if (conf->search_unhashed) { -			local->op_errno = ENOENT; -			dht_lookup_everywhere (frame, this, loc); -			return 0; -		} -	} +        if (ENTRY_MISSING (op_ret, op_errno)) { +                if (conf->search_unhashed) { +                        local->op_errno = ENOENT; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0; +                } +        }          if (op_ret == -1)                  goto out; @@ -142,40 +142,40 @@ switch_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (!is_dir && !is_linkfile) {                  /* non-directory and not a linkfile */ -		dht_itransform (this, prev->this, stbuf->ia_ino, -				&stbuf->ia_ino); +                dht_itransform (this, prev->this, stbuf->ia_ino, +                                &stbuf->ia_ino); -		ret = dht_layout_preset (this, prev->this, inode); -		if (ret < 0) { -			gf_log (this->name, GF_LOG_DEBUG, -				"could not set pre-set layout for subvol %s", -				prev->this->name); -			op_ret   = -1; -			op_errno = EINVAL; -			goto err; -		} +                ret = dht_layout_preset (this, prev->this, inode); +                if (ret < 0) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "could not set pre-set layout for subvol %s", +                                prev->this->name); +                        op_ret   = -1; +                        op_errno = EINVAL; +                        goto err; +                }                  goto out;          }          if (is_dir) {                  call_cnt        = conf->subvolume_cnt; -		local->call_cnt = call_cnt; +                local->call_cnt = call_cnt;                  local->inode = inode_ref (inode);                  local->xattr = dict_ref (xattr); -		local->op_ret = 0; -		local->op_errno = 0; +                local->op_ret = 0; +                local->op_errno = 0; -		local->layout = dht_layout_new (this, conf->subvolume_cnt); -		if (!local->layout) { -			op_ret   = -1; -			op_errno = ENOMEM; -			gf_log (this->name, GF_LOG_DEBUG, -				"memory allocation failed :("); -			goto err; -		} +                local->layout = dht_layout_new (this, conf->subvolume_cnt); +                if (!local->layout) { +                        op_ret   = -1; +                        op_errno = ENOMEM; +                        gf_log (this->name, GF_LOG_DEBUG, +                                "memory allocation failed :("); +                        goto err; +                }                  for (i = 0; i < call_cnt; i++) {                          STACK_WIND (frame, dht_lookup_dir_cbk, @@ -192,34 +192,34 @@ switch_local_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          gf_log (this->name, GF_LOG_DEBUG,                                  "linkfile not having link subvolume. path=%s",                                  loc->path); -			dht_lookup_everywhere (frame, this, loc); -			return 0; +                        dht_lookup_everywhere (frame, this, loc); +                        return 0;                  } -		STACK_WIND (frame, dht_lookup_linkfile_cbk, -			    subvol, subvol->fops->lookup, -			    &local->loc, local->xattr_req); +                STACK_WIND (frame, dht_lookup_linkfile_cbk, +                            subvol, subvol->fops->lookup, +                            &local->loc, local->xattr_req);          }          return 0;  out: -	if (!local->hashed_subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			local->loc.path); +        if (!local->hashed_subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        local->loc.path);                  local->op_errno = ENOENT;                  dht_lookup_everywhere (frame, this, loc);                  return 0; -	} +        } -	STACK_WIND (frame, dht_lookup_cbk, -		    local->hashed_subvol, local->hashed_subvol->fops->lookup, -		    &local->loc, local->xattr_req); +        STACK_WIND (frame, dht_lookup_cbk, +                    local->hashed_subvol, local->hashed_subvol->fops->lookup, +                    &local->loc, local->xattr_req); -	return 0; +        return 0; - err: +err:          DHT_STACK_UNWIND (lookup, frame, op_ret, op_errno,                            inode, stbuf, xattr, NULL);          return 0; @@ -227,18 +227,18 @@ out:  int  switch_lookup (call_frame_t *frame, xlator_t *this, -	     loc_t *loc, dict_t *xattr_req) +               loc_t *loc, dict_t *xattr_req)  {          xlator_t     *hashed_subvol = NULL;          xlator_t     *cached_subvol = NULL;          xlator_t     *subvol = NULL;          dht_local_t  *local  = NULL; -	dht_conf_t   *conf = NULL; +        dht_conf_t   *conf = NULL;          int           ret    = -1;          int           op_errno = -1; -	dht_layout_t *layout = NULL; -	int           i = 0; -	int           call_cnt = 0; +        dht_layout_t *layout = NULL; +        int           i = 0; +        int           call_cnt = 0;          VALIDATE_OR_GOTO (frame, err); @@ -247,15 +247,15 @@ switch_lookup (call_frame_t *frame, xlator_t *this,          VALIDATE_OR_GOTO (loc->inode, err);          VALIDATE_OR_GOTO (loc->path, err); -	conf = this->private; +        conf = this->private;          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        }          ret = loc_dup (loc, &local->loc);          if (ret == -1) { @@ -266,20 +266,20 @@ switch_lookup (call_frame_t *frame, xlator_t *this,                  goto err;          } -	if (xattr_req) { -		local->xattr_req = dict_ref (xattr_req); -	} else { -		local->xattr_req = dict_new (); -	} +        if (xattr_req) { +                local->xattr_req = dict_ref (xattr_req); +        } else { +                local->xattr_req = dict_new (); +        } -	hashed_subvol = dht_subvol_get_hashed (this, &local->loc); -	cached_subvol = dht_subvol_get_cached (this, local->loc.inode); +        hashed_subvol = dht_subvol_get_hashed (this, &local->loc); +        cached_subvol = dht_subvol_get_cached (this, local->loc.inode); -	local->cached_subvol = cached_subvol; -	local->hashed_subvol = hashed_subvol; +        local->cached_subvol = cached_subvol; +        local->hashed_subvol = hashed_subvol;          if (is_revalidate (loc)) { -		local->layout = layout = dht_layout_get (this, loc->inode); +                local->layout = layout = dht_layout_get (this, loc->inode);                  if (!layout) {                          gf_log (this->name, GF_LOG_DEBUG, @@ -289,83 +289,83 @@ switch_lookup (call_frame_t *frame, xlator_t *this,                          goto err;                  } -		if (layout->gen && (layout->gen < conf->gen)) { -			gf_log (this->name, GF_LOG_DEBUG, -				"incomplete layout failure for path=%s", -				loc->path); +                if (layout->gen && (layout->gen < conf->gen)) { +                        gf_log (this->name, GF_LOG_DEBUG, +                                "incomplete layout failure for path=%s", +                                loc->path);                          dht_layout_unref (this, local->layout); -			goto do_fresh_lookup; -		} +                        goto do_fresh_lookup; +                } -		local->inode    = inode_ref (loc->inode); -		local->ia_ino   = loc->inode->ino; +                local->inode    = inode_ref (loc->inode); +                local->ia_ino   = loc->inode->ino; -		local->call_cnt = layout->cnt; -		call_cnt = local->call_cnt; +                local->call_cnt = layout->cnt; +                call_cnt = local->call_cnt; -		/* NOTE: we don't require 'trusted.glusterfs.dht.linkto' +                /* NOTE: we don't require 'trusted.glusterfs.dht.linkto'                   * attribute, revalidates directly go to the cached-subvolume. -		 */ -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht", 4 * 4); +                 */ +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4);                  if (ret < 0)                          gf_log (this->name, GF_LOG_WARNING,                                  "failed to set dict value for "                                  "trusted.glusterfs.dht"); -		for (i = 0; i < layout->cnt; i++) { -			subvol = layout->list[i].xlator; +                for (i = 0; i < layout->cnt; i++) { +                        subvol = layout->list[i].xlator; -			STACK_WIND (frame, dht_revalidate_cbk, -				    subvol, subvol->fops->lookup, -				    loc, local->xattr_req); +                        STACK_WIND (frame, dht_revalidate_cbk, +                                    subvol, subvol->fops->lookup, +                                    loc, local->xattr_req); -			if (!--call_cnt) -				break; -		} -	} else { +                        if (!--call_cnt) +                                break; +                } +        } else {          do_fresh_lookup: -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht", 4 * 4); +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht", 4 * 4);                  if (ret < 0)                          gf_log (this->name, GF_LOG_WARNING,                                  "failed to set dict value for "                                  "trusted.glusterfs.dht"); -                 -		ret = dict_set_uint32 (local->xattr_req, -				       "trusted.glusterfs.dht.linkto", 256); + +                ret = dict_set_uint32 (local->xattr_req, +                                       "trusted.glusterfs.dht.linkto", 256);                  if (ret < 0) -                        gf_log (this->name, GF_LOG_WARNING,  -                                "failed to set dict value for "  +                        gf_log (this->name, GF_LOG_WARNING, +                                "failed to set dict value for "                                  "trusted.glusterfs.dht.linkto");                  if (!hashed_subvol) { -			gf_log (this->name, GF_LOG_DEBUG, -				"no subvolume in layout for path=%s, " -				"checking on all the subvols to see if " -				"it is a directory", loc->path); - 			call_cnt        = conf->subvolume_cnt; - 			local->call_cnt = call_cnt; - - 			local->layout = dht_layout_new (this, +                        gf_log (this->name, GF_LOG_DEBUG, +                                "no subvolume in layout for path=%s, " +                                "checking on all the subvols to see if " +                                "it is a directory", loc->path); +                        call_cnt        = conf->subvolume_cnt; +                        local->call_cnt = call_cnt; + +                        local->layout = dht_layout_new (this,                                                          conf->subvolume_cnt); - 			if (!local->layout) { - 				op_errno = ENOMEM; - 				gf_log (this->name, GF_LOG_ERROR, - 					"Out of memory"); - 				goto err; - 			} - -			for (i = 0; i < call_cnt; i++) { - 				STACK_WIND (frame, dht_lookup_dir_cbk, - 					    conf->subvolumes[i], - 					    conf->subvolumes[i]->fops->lookup, - 					    &local->loc, local->xattr_req); - 			} - 			return 0; +                        if (!local->layout) { +                                op_errno = ENOMEM; +                                gf_log (this->name, GF_LOG_ERROR, +                                        "Out of memory"); +                                goto err; +                        } + +                        for (i = 0; i < call_cnt; i++) { +                                STACK_WIND (frame, dht_lookup_dir_cbk, +                                            conf->subvolumes[i], +                                            conf->subvolumes[i]->fops->lookup, +                                            &local->loc, local->xattr_req); +                        } +                        return 0;                  } -		/*  */ +                /*  */                  cached_subvol = get_switch_matching_subvol (loc->path, conf,                                                              hashed_subvol);                  if (cached_subvol == hashed_subvol) { @@ -384,36 +384,36 @@ switch_lookup (call_frame_t *frame, xlator_t *this,          return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; +        op_errno = (op_errno == -1) ? errno : op_errno;          DHT_STACK_UNWIND (lookup, frame, -1, op_errno, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  switch_create_linkfile_create_cbk (call_frame_t *frame, void *cookie, -				 xlator_t *this, int op_ret, int op_errno, -                                 inode_t *inode, struct iatt *stbuf, -                                 struct iatt *preparent, -                                 struct iatt *postparent) +                                   xlator_t *this, int op_ret, int op_errno, +                                   inode_t *inode, struct iatt *stbuf, +                                   struct iatt *preparent, +                                   struct iatt *postparent)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; +        local = frame->local; -	if (op_ret == -1) -		goto err; +        if (op_ret == -1) +                goto err; -	STACK_WIND (frame, dht_create_cbk, -		    local->cached_subvol, local->cached_subvol->fops->create, -		    &local->loc, local->flags, local->mode, local->fd, +        STACK_WIND (frame, dht_create_cbk, +                    local->cached_subvol, local->cached_subvol->fops->create, +                    &local->loc, local->flags, local->mode, local->fd,                      local->params); -	return 0; +        return 0; - err: -	DHT_STACK_UNWIND (create, frame, -1, op_errno, +err: +        DHT_STACK_UNWIND (create, frame, -1, op_errno,                            NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int @@ -421,37 +421,37 @@ switch_create (call_frame_t *frame, xlator_t *this,                 loc_t *loc, int32_t flags, mode_t mode,                 fd_t *fd, dict_t *params)  { -	dht_local_t *local = NULL; -	dht_conf_t  *conf  = NULL; -	xlator_t    *subvol = NULL; +        dht_local_t *local = NULL; +        dht_conf_t  *conf  = NULL; +        xlator_t    *subvol = NULL;          xlator_t    *avail_subvol = NULL; -	int          op_errno = -1; -	int          ret = -1; +        int          op_errno = -1; +        int          ret = -1; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf  = this->private; +        conf  = this->private;          dht_get_du_info (frame, this, loc);          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          avail_subvol = get_switch_matching_subvol (loc->path, conf, subvol);          if (dht_is_subvol_filled (this, avail_subvol)) { @@ -463,10 +463,10 @@ switch_create (call_frame_t *frame, xlator_t *this,                  /* create a link file instead of actual file */                  ret = loc_copy (&local->loc, loc);                  if (ret == -1) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Out of memory"); -                                op_errno = ENOMEM; -                                goto err; +                        gf_log (this->name, GF_LOG_ERROR, +                                "Out of memory"); +                        op_errno = ENOMEM; +                        goto err;                  }                  local->fd = fd_ref (fd); @@ -490,36 +490,36 @@ switch_create (call_frame_t *frame, xlator_t *this,          return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (create, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (create, frame, -1, op_errno,                            NULL, NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  switch_mknod_linkfile_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                         int op_ret, int op_errno, inode_t *inode, -                         struct iatt *stbuf, struct iatt *preparent, -                         struct iatt *postparent) +                           int op_ret, int op_errno, inode_t *inode, +                           struct iatt *stbuf, struct iatt *preparent, +                           struct iatt *postparent)  { -	dht_local_t  *local = NULL; +        dht_local_t  *local = NULL; -	local = frame->local; +        local = frame->local; -	if (op_ret >= 0) { -		STACK_WIND (frame, dht_newfile_cbk, -			    local->cached_subvol, -			    local->cached_subvol->fops->mknod, -			    &local->loc, local->mode, local->rdev, +        if (op_ret >= 0) { +                STACK_WIND (frame, dht_newfile_cbk, +                            local->cached_subvol, +                            local->cached_subvol->fops->mknod, +                            &local->loc, local->mode, local->rdev,                              local->params); -		return 0; -	} +                return 0; +        } -	DHT_STACK_UNWIND (link, frame, op_ret, op_errno, +        DHT_STACK_UNWIND (link, frame, op_ret, op_errno,                            inode, stbuf, preparent, postparent); -	return 0; +        return 0;  } @@ -527,37 +527,37 @@ int  switch_mknod (call_frame_t *frame, xlator_t *this,                loc_t *loc, mode_t mode, dev_t rdev, dict_t *params)  { -	dht_local_t *local = NULL; -	dht_conf_t  *conf  = NULL; -	xlator_t    *subvol = NULL; +        dht_local_t *local = NULL; +        dht_conf_t  *conf  = NULL; +        xlator_t    *subvol = NULL;          xlator_t    *avail_subvol = NULL; -	int          op_errno = -1; -	int          ret = -1; +        int          op_errno = -1; +        int          ret = -1; -	VALIDATE_OR_GOTO (frame, err); -	VALIDATE_OR_GOTO (this, err); -	VALIDATE_OR_GOTO (loc, err); +        VALIDATE_OR_GOTO (frame, err); +        VALIDATE_OR_GOTO (this, err); +        VALIDATE_OR_GOTO (loc, err); -	conf  = this->private; +        conf  = this->private;          dht_get_du_info (frame, this, loc);          local = dht_local_init (frame); -	if (!local) { -		op_errno = ENOMEM; -		gf_log (this->name, GF_LOG_ERROR, -			"Out of memory"); -		goto err; -	} - -	subvol = dht_subvol_get_hashed (this, loc); -	if (!subvol) { -		gf_log (this->name, GF_LOG_DEBUG, -			"no subvolume in layout for path=%s", -			loc->path); -		op_errno = ENOENT; -		goto err; -	} +        if (!local) { +                op_errno = ENOMEM; +                gf_log (this->name, GF_LOG_ERROR, +                        "Out of memory"); +                goto err; +        } + +        subvol = dht_subvol_get_hashed (this, loc); +        if (!subvol) { +                gf_log (this->name, GF_LOG_DEBUG, +                        "no subvolume in layout for path=%s", +                        loc->path); +                op_errno = ENOENT; +                goto err; +        }          /* Consider the disksize in consideration */          avail_subvol = get_switch_matching_subvol (loc->path, conf, subvol); @@ -566,52 +566,52 @@ switch_mknod (call_frame_t *frame, xlator_t *this,                          dht_free_disk_available_subvol (this, avail_subvol);          } -	if (avail_subvol != subvol) { -		/* Create linkfile first */ -		ret = loc_copy (&local->loc, loc); -		if (ret == -1) { -			gf_log (this->name, GF_LOG_ERROR, -				"Out of memory"); -			op_errno = ENOMEM; -			goto err; -		} +        if (avail_subvol != subvol) { +                /* Create linkfile first */ +                ret = loc_copy (&local->loc, loc); +                if (ret == -1) { +                        gf_log (this->name, GF_LOG_ERROR, +                                "Out of memory"); +                        op_errno = ENOMEM; +                        goto err; +                }                  local->params = dict_ref (params); -		local->mode = mode; -		local->rdev = rdev; -		local->cached_subvol = avail_subvol; +                local->mode = mode; +                local->rdev = rdev; +                local->cached_subvol = avail_subvol; -		dht_linkfile_create (frame, switch_mknod_linkfile_cbk, +                dht_linkfile_create (frame, switch_mknod_linkfile_cbk,                                       avail_subvol, subvol, loc); -		return 0; -	} +                return 0; +        } -	gf_log (this->name, GF_LOG_TRACE, -		"creating %s on %s", loc->path, subvol->name); +        gf_log (this->name, GF_LOG_TRACE, +                "creating %s on %s", loc->path, subvol->name); -	STACK_WIND (frame, dht_newfile_cbk, -		    subvol, subvol->fops->mknod, -		    loc, mode, rdev, params); +        STACK_WIND (frame, dht_newfile_cbk, +                    subvol, subvol->fops->mknod, +                    loc, mode, rdev, params); -	return 0; +        return 0;  err: -	op_errno = (op_errno == -1) ? errno : op_errno; -	DHT_STACK_UNWIND (mknod, frame, -1, op_errno, +        op_errno = (op_errno == -1) ? errno : op_errno; +        DHT_STACK_UNWIND (mknod, frame, -1, op_errno,                            NULL, NULL, NULL, NULL); -	return 0; +        return 0;  }  int  notify (xlator_t *this, int event, void *data, ...)  { -	int ret = -1; +        int ret = -1; -	ret = dht_notify (this, event, data); +        ret = dht_notify (this, event, data); -	return ret; +        return ret;  }  void @@ -622,7 +622,7 @@ fini (xlator_t *this)          struct switch_struct *trav = NULL;          struct switch_struct *prev = NULL; -	conf = this->private; +        conf = this->private;          if (conf) {                  trav = (struct switch_struct *)conf->private; @@ -648,13 +648,13 @@ fini (xlator_t *this)                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  GF_FREE (conf);          } -	return; +        return;  }  int @@ -679,32 +679,32 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf,          struct switch_struct        *switch_buf = NULL;          struct switch_struct        *switch_opt = NULL;          struct switch_struct        *trav = NULL; -	struct switch_sched_array  *switch_buf_array = NULL; -	xlator_list_t              *trav_xl = NULL; +        struct switch_sched_array  *switch_buf_array = NULL; +        xlator_list_t              *trav_xl = NULL;          trav_xl = this->children; -	while (trav_xl) { -		index++; -		trav_xl = trav_xl->next; -	} -	child_count = index; -	switch_buf_array = GF_CALLOC ((index + 1), +        while (trav_xl) { +                index++; +                trav_xl = trav_xl->next; +        } +        child_count = index; +        switch_buf_array = GF_CALLOC ((index + 1),                                        sizeof (struct switch_sched_array),                                        gf_switch_mt_switch_sched_array);          if (!switch_buf_array)                  goto err; -	trav_xl = this->children; -	index = 0; +        trav_xl = this->children; +        index = 0; -	while (trav_xl) { -		switch_buf_array[index].xl = trav_xl->xlator; -		switch_buf_array[index].eligible = 1; -		trav_xl = trav_xl->next; -		index++; -	} +        while (trav_xl) { +                switch_buf_array[index].xl = trav_xl->xlator; +                switch_buf_array[index].eligible = 1; +                trav_xl = trav_xl->next; +                index++; +        } -	/*  *jpg:child1,child2;*mpg:child3;*:child4,child5,child6 */ +        /*  *jpg:child1,child2;*mpg:child3;*:child4,child5,child6 */          /* Get the pattern for considering switch case.             "option block-size *avi:10MB" etc */ @@ -749,7 +749,7 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf,                          child = strtok_r (childs, ",", &tmp1);                          switch_opt->num_child = idx;                          switch_opt->array = GF_CALLOC (1, (idx * -                                                       sizeof (struct switch_sched_array)), +                                                           sizeof (struct switch_sched_array)),                                                         gf_switch_mt_switch_sched_array);                          if (!switch_opt->array)                                  goto err; @@ -785,7 +785,7 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf,                          goto err;                  }                  GF_FREE (dup_str); -                 +                  /* Link it to the main structure */                  if (switch_buf) {                          /* there are already few entries */ @@ -800,60 +800,60 @@ set_switch_pattern (xlator_t *this, dht_conf_t *conf,                  switch_str = strtok_r (NULL, ";", &tmp_str);          } -	/* Now, all the pattern based considerations done, so for all the -	 * remaining pattern, '*' to all the remaining child nodes -	 */ -	{ -		for (index=0; index < child_count; index++) { -			/* check for considered flag */ -			if (switch_buf_array[index].considered) -				continue; -			flag++; -		} -		if (!flag) { -			gf_log ("switch", GF_LOG_ERROR, -				"No nodes left for pattern '*'. Exiting"); -			goto err; -		} -		switch_opt = GF_CALLOC (1, sizeof (struct switch_struct), +        /* Now, all the pattern based considerations done, so for all the +         * remaining pattern, '*' to all the remaining child nodes +         */ +        { +                for (index=0; index < child_count; index++) { +                        /* check for considered flag */ +                        if (switch_buf_array[index].considered) +                                continue; +                        flag++; +                } +                if (!flag) { +                        gf_log ("switch", GF_LOG_ERROR, +                                "No nodes left for pattern '*'. Exiting"); +                        goto err; +                } +                switch_opt = GF_CALLOC (1, sizeof (struct switch_struct),                                          gf_switch_mt_switch_struct);                  if (!switch_opt)                          goto err; -		/* Add the '*' pattern to the array */ -		memcpy (switch_opt->path_pattern, "*", 2); -		switch_opt->num_child = flag; -		switch_opt->array = -			GF_CALLOC (1,  +                /* Add the '*' pattern to the array */ +                memcpy (switch_opt->path_pattern, "*", 2); +                switch_opt->num_child = flag; +                switch_opt->array = +                        GF_CALLOC (1,                                     flag * sizeof (struct switch_sched_array),                                     gf_switch_mt_switch_sched_array);                  if (!switch_opt->array)                          goto err; -		flag = 0; -		for (index=0; index < child_count; index++) { -			/* check for considered flag */ -			if (switch_buf_array[index].considered) -				continue; -			gf_log ("switch", GF_LOG_DEBUG, -				"'%s' pattern will be scheduled to \"%s\"", -				switch_opt->path_pattern, -				switch_buf_array[index].xl->name); -			switch_opt->array[flag].xl = -				switch_buf_array[index].xl; -			switch_buf_array[index].considered = 1; -			flag++; +                flag = 0; +                for (index=0; index < child_count; index++) { +                        /* check for considered flag */ +                        if (switch_buf_array[index].considered) +                                continue; +                        gf_log ("switch", GF_LOG_DEBUG, +                                "'%s' pattern will be scheduled to \"%s\"", +                                switch_opt->path_pattern, +                                switch_buf_array[index].xl->name); +                        switch_opt->array[flag].xl = +                                switch_buf_array[index].xl; +                        switch_buf_array[index].considered = 1; +                        flag++; +                } +                if (switch_buf) { +                        /* there are already few entries */ +                        trav = switch_buf; +                        while (trav->next) +                                trav = trav->next; +                        trav->next = switch_opt; +                } else { +                        /* First entry */ +                        switch_buf = switch_opt;                  } -		if (switch_buf) { -			/* there are already few entries */ -			trav = switch_buf; -			while (trav->next) -				trav = trav->next; -			trav->next = switch_opt; -		} else { -			/* First entry */ -			switch_buf = switch_opt; -		} -	} +        }          /* */          conf->private = switch_buf; @@ -879,22 +879,22 @@ int  init (xlator_t *this)  {          dht_conf_t            *conf = NULL; -	data_t                *data = NULL; -	char                  *temp_str = NULL; +        data_t                *data = NULL; +        char                  *temp_str = NULL;          int                    ret = -1;          int                    i = 0; -	uint32_t               temp_free_disk = 0; +        uint32_t               temp_free_disk = 0; -	if (!this->children) { -		gf_log (this->name, GF_LOG_CRITICAL, -			"SWITCH needs more than one subvolume"); -		return -1; -	} +        if (!this->children) { +                gf_log (this->name, GF_LOG_CRITICAL, +                        "SWITCH needs more than one subvolume"); +                return -1; +        } -	if (!this->parents) { -		gf_log (this->name, GF_LOG_WARNING, -			"dangling volume. check volfile"); -	} +        if (!this->parents) { +                gf_log (this->name, GF_LOG_WARNING, +                        "dangling volume. check volfile"); +        }          conf = GF_CALLOC (1, sizeof (*conf), gf_switch_mt_dht_conf_t);          if (!conf) { @@ -904,19 +904,19 @@ init (xlator_t *this)          }          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_ON; -	if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) { +        if (dict_get_str (this->options, "lookup-unhashed", &temp_str) == 0) {                  /* If option is not "auto", other options _should_ be boolean */                  if (strcasecmp (temp_str, "auto"))                          gf_string2boolean (temp_str, &conf->search_unhashed);                  else                          conf->search_unhashed = GF_DHT_LOOKUP_UNHASHED_AUTO; -	} +        } -	conf->unhashed_sticky_bit = 0; -	if (dict_get_str (this->options, "unhashed-sticky-bit", +        conf->unhashed_sticky_bit = 0; +        if (dict_get_str (this->options, "unhashed-sticky-bit",                            &temp_str) == 0) { -	        gf_string2boolean (temp_str, &conf->unhashed_sticky_bit); -	} +                gf_string2boolean (temp_str, &conf->unhashed_sticky_bit); +        }          conf->min_free_disk = 10;          conf->disk_unit = 'p'; @@ -927,7 +927,7 @@ init (xlator_t *this)                                         &temp_free_disk) == 0) {                          if (temp_free_disk > 100) {                                  gf_string2bytesize (temp_str, -                                                        &conf->min_free_disk); +                                                    &conf->min_free_disk);                                  conf->disk_unit = 'b';                          } else {                                  conf->min_free_disk = (uint64_t)temp_free_disk; @@ -935,19 +935,19 @@ init (xlator_t *this)                          }                  } else {                          gf_string2bytesize (temp_str, -                                                &conf->min_free_disk); +                                            &conf->min_free_disk);                          conf->disk_unit = 'b';                  }          } -	data = dict_get (this->options, "pattern.switch.case"); -	if (data) { +        data = dict_get (this->options, "pattern.switch.case"); +        if (data) {                  /* TODO: */                  ret = set_switch_pattern (this, conf, data->data);                  if (ret) {                          goto err;                  } -	} +        }          ret = dht_init_subvolumes (this, conf);          if (ret == -1) { @@ -959,10 +959,10 @@ init (xlator_t *this)                  goto err;          } -	LOCK_INIT (&conf->subvolume_lock); -	LOCK_INIT (&conf->layout_lock); +        LOCK_INIT (&conf->subvolume_lock); +        LOCK_INIT (&conf->layout_lock); -	conf->gen = 1; +        conf->gen = 1;          conf->du_stats = GF_CALLOC (conf->subvolume_cnt, sizeof (dht_du_t),                                      gf_switch_mt_dht_du_t); @@ -991,8 +991,8 @@ err:                  if (conf->subvolumes)                          GF_FREE (conf->subvolumes); -		if (conf->subvolume_status) -			GF_FREE (conf->subvolume_status); +                if (conf->subvolume_status) +                        GF_FREE (conf->subvolume_status);                  if (conf->du_stats)                          GF_FREE (conf->du_stats); @@ -1005,48 +1005,48 @@ err:  struct xlator_fops fops = { -	.lookup      = switch_lookup, -	.create      = switch_create, -	.mknod       = switch_mknod, - -	.stat        = dht_stat, -	.fstat       = dht_fstat, -	.truncate    = dht_truncate, -	.ftruncate   = dht_ftruncate, -	.access      = dht_access, -	.readlink    = dht_readlink, -	.setxattr    = dht_setxattr, -	.getxattr    = dht_getxattr, -	.removexattr = dht_removexattr, -	.open        = dht_open, -	.readv       = dht_readv, -	.writev      = dht_writev, -	.flush       = dht_flush, -	.fsync       = dht_fsync, -	.statfs      = dht_statfs, -	.lk          = dht_lk, -	.opendir     = dht_opendir, -	.readdir     = dht_readdir, -	.readdirp    = dht_readdirp, -	.fsyncdir    = dht_fsyncdir, -	.symlink     = dht_symlink, -	.unlink      = dht_unlink, -	.link        = dht_link, -	.mkdir       = dht_mkdir, -	.rmdir       = dht_rmdir, -	.rename      = dht_rename, -	.inodelk     = dht_inodelk, -	.finodelk    = dht_finodelk, -	.entrylk     = dht_entrylk, -	.fentrylk    = dht_fentrylk, -	.xattrop     = dht_xattrop, -	.fxattrop    = dht_fxattrop, +        .lookup      = switch_lookup, +        .create      = switch_create, +        .mknod       = switch_mknod, + +        .stat        = dht_stat, +        .fstat       = dht_fstat, +        .truncate    = dht_truncate, +        .ftruncate   = dht_ftruncate, +        .access      = dht_access, +        .readlink    = dht_readlink, +        .setxattr    = dht_setxattr, +        .getxattr    = dht_getxattr, +        .removexattr = dht_removexattr, +        .open        = dht_open, +        .readv       = dht_readv, +        .writev      = dht_writev, +        .flush       = dht_flush, +        .fsync       = dht_fsync, +        .statfs      = dht_statfs, +        .lk          = dht_lk, +        .opendir     = dht_opendir, +        .readdir     = dht_readdir, +        .readdirp    = dht_readdirp, +        .fsyncdir    = dht_fsyncdir, +        .symlink     = dht_symlink, +        .unlink      = dht_unlink, +        .link        = dht_link, +        .mkdir       = dht_mkdir, +        .rmdir       = dht_rmdir, +        .rename      = dht_rename, +        .inodelk     = dht_inodelk, +        .finodelk    = dht_finodelk, +        .entrylk     = dht_entrylk, +        .fentrylk    = dht_fentrylk, +        .xattrop     = dht_xattrop, +        .fxattrop    = dht_fxattrop,          .setattr     = dht_setattr,  };  struct xlator_cbks cbks = { -	.forget     = dht_forget +        .forget     = dht_forget  }; @@ -1054,13 +1054,13 @@ struct volume_options options[] = {          { .key  = {"lookup-unhashed"},            .value = {"auto", "yes", "no", "enable", "disable", "1", "0",                      "on", "off"}, -	  .type = GF_OPTION_TYPE_STR -	}, -	{ .key  = {"pattern.switch.case"}, -	  .type = GF_OPTION_TYPE_ANY -	}, +          .type = GF_OPTION_TYPE_STR +        }, +        { .key  = {"pattern.switch.case"}, +          .type = GF_OPTION_TYPE_ANY +        },          { .key  = {"min-free-disk"},            .type = GF_OPTION_TYPE_PERCENT_OR_SIZET,          }, -	{ .key  = {NULL} }, +        { .key  = {NULL} },  };  | 
