diff options
| author | Amar Tumballi <amar@gluster.com> | 2011-09-30 12:53:16 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2011-09-30 00:57:05 -0700 | 
| commit | 795c8996c18f5e8ef5986581644374d0c5068772 (patch) | |
| tree | 3990ca2601d59e817a0766a0151b77259e2aa6b8 | |
| parent | 36ef90d6de0e97812bebb303a7fa5215ae4c6ebe (diff) | |
distribute rebalance: preserve proper mode in destinationv3.3.0qa13
* don't set 'sticky' and 'sgid' bits to 0 without checking if the
  source had those bits prior to rebalance.
Change-Id: Ia826cb3cfb55312cdbf00d3421f2bd06b3103ce6
BUG: 3656
Reviewed-on: http://review.gluster.com/541
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
| -rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index edb5c8cdc..71fd7b367 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -375,6 +375,7 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,          struct iatt     new_stbuf      = {0,};          struct iatt     stbuf          = {0,};          struct iatt     empty_iatt     = {0,}; +        ia_prot_t       src_ia_prot    = {0,};          fd_t           *src_fd         = NULL;          fd_t           *dst_fd         = NULL;          dict_t         *dict           = NULL; @@ -403,6 +404,9 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,                  goto out;          } +        /* preserve source mode, so set the same to the destination */ +        src_ia_prot = stbuf.ia_prot; +          /* Check if file can be migrated */          ret = __is_file_migratable (this, loc, rsp_dict, &stbuf);          if (ret) @@ -490,9 +494,13 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,          }          /* source would have both sticky bit and sgid bit set, reset it to 0, -           and set the source permission on destination  */ -        new_stbuf.ia_prot.sticky = 0; -        new_stbuf.ia_prot.sgid = 0; +           and set the source permission on destination, if it was not set +           prior to setting rebalance-modes in source  */ +        if (!src_ia_prot.sticky) +                new_stbuf.ia_prot.sticky = 0; + +        if (!src_ia_prot.sgid) +                new_stbuf.ia_prot.sgid = 0;          /* TODO: if the source actually had sticky bit, or sgid bit set,             we are not handling it */  | 
