162 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 1cd16553d436fa703f5e18d71c35108d0e179e8b Mon Sep 17 00:00:00 2001
 | |
| From: nik-redhat <nladha@redhat.com>
 | |
| Date: Thu, 9 Apr 2020 11:36:34 +0530
 | |
| Subject: [PATCH 600/610] dht xlator: integer handling issue
 | |
| 
 | |
| Issue: The ret value is passed to the function
 | |
| instead of the proper errno value
 | |
| 
 | |
| Fix: Passing the errno generated to
 | |
| the log function
 | |
| 
 | |
| CID: 1415824 : Improper use of negative value
 | |
| CID: 1420205 : Improper use of negative value
 | |
| >Change-Id: Iaa7407ebd03eda46a2c027695e6bf0f598b371b2
 | |
| >Updates: #1060
 | |
| >Signed-off-by: nik-redhat <nladha@redhat.com>
 | |
| 
 | |
| Upstream link: https://review.gluster.org/c/glusterfs/+/24314
 | |
| BUG: 1997447
 | |
| 
 | |
| Change-Id: Ibb7f432dbcc9ffd8dff6be6f984a6705894d6bef
 | |
| Signed-off-by: nik-redhat <nladha@redhat.com>
 | |
| Reviewed-on: https://code.engineering.redhat.com/gerrit/c/rhs-glusterfs/+/280086
 | |
| Tested-by: RHGS Build Bot <nigelb@redhat.com>
 | |
| Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
 | |
| ---
 | |
|  xlators/cluster/dht/src/dht-common.c   | 12 ++++++++----
 | |
|  xlators/cluster/dht/src/dht-common.h   |  2 +-
 | |
|  xlators/cluster/dht/src/dht-helper.c   |  9 ++++++---
 | |
|  xlators/cluster/dht/src/dht-selfheal.c |  8 +++++---
 | |
|  4 files changed, 20 insertions(+), 11 deletions(-)
 | |
| 
 | |
| diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c
 | |
| index e6a16ff..5eaaa1e 100644
 | |
| --- a/xlators/cluster/dht/src/dht-common.c
 | |
| +++ b/xlators/cluster/dht/src/dht-common.c
 | |
| @@ -672,13 +672,14 @@ dht_discover_complete(xlator_t *this, call_frame_t *discover_frame)
 | |
|  
 | |
|          if (local->need_xattr_heal && !heal_path) {
 | |
|              local->need_xattr_heal = 0;
 | |
| -            ret = dht_dir_xattr_heal(this, local);
 | |
| -            if (ret)
 | |
| -                gf_msg(this->name, GF_LOG_ERROR, ret,
 | |
| +            ret = dht_dir_xattr_heal(this, local, &op_errno);
 | |
| +            if (ret) {
 | |
| +                gf_msg(this->name, GF_LOG_ERROR, op_errno,
 | |
|                         DHT_MSG_DIR_XATTR_HEAL_FAILED,
 | |
|                         "xattr heal failed for "
 | |
|                         "directory  gfid is %s ",
 | |
|                         gfid_local);
 | |
| +            }
 | |
|          }
 | |
|      }
 | |
|  
 | |
| @@ -1205,7 +1206,7 @@ dht_dict_get_array(dict_t *dict, char *key, int32_t value[], int32_t size,
 | |
|     to non hashed subvol
 | |
|  */
 | |
|  int
 | |
| -dht_dir_xattr_heal(xlator_t *this, dht_local_t *local)
 | |
| +dht_dir_xattr_heal(xlator_t *this, dht_local_t *local, int *op_errno)
 | |
|  {
 | |
|      dht_local_t *copy_local = NULL;
 | |
|      call_frame_t *copy = NULL;
 | |
| @@ -1217,6 +1218,7 @@ dht_dir_xattr_heal(xlator_t *this, dht_local_t *local)
 | |
|                 "No gfid exists for path %s "
 | |
|                 "so healing xattr is not possible",
 | |
|                 local->loc.path);
 | |
| +        *op_errno = EIO;
 | |
|          goto out;
 | |
|      }
 | |
|  
 | |
| @@ -1230,6 +1232,7 @@ dht_dir_xattr_heal(xlator_t *this, dht_local_t *local)
 | |
|                     "Memory allocation failed "
 | |
|                     "for path %s gfid %s ",
 | |
|                     local->loc.path, gfid_local);
 | |
| +            *op_errno = ENOMEM;
 | |
|              DHT_STACK_DESTROY(copy);
 | |
|          } else {
 | |
|              copy_local->stbuf = local->stbuf;
 | |
| @@ -1244,6 +1247,7 @@ dht_dir_xattr_heal(xlator_t *this, dht_local_t *local)
 | |
|                         "Synctask creation failed to heal xattr "
 | |
|                         "for path %s gfid %s ",
 | |
|                         local->loc.path, gfid_local);
 | |
| +                *op_errno = ENOMEM;
 | |
|                  DHT_STACK_DESTROY(copy);
 | |
|              }
 | |
|          }
 | |
| diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h
 | |
| index b856c68..1cb1c0c 100644
 | |
| --- a/xlators/cluster/dht/src/dht-common.h
 | |
| +++ b/xlators/cluster/dht/src/dht-common.h
 | |
| @@ -1493,7 +1493,7 @@ dht_dir_set_heal_xattr(xlator_t *this, dht_local_t *local, dict_t *dst,
 | |
|                         dict_t *src, int *uret, int *uflag);
 | |
|  
 | |
|  int
 | |
| -dht_dir_xattr_heal(xlator_t *this, dht_local_t *local);
 | |
| +dht_dir_xattr_heal(xlator_t *this, dht_local_t *local, int *op_errno);
 | |
|  
 | |
|  int32_t
 | |
|  dht_dict_get_array(dict_t *dict, char *key, int32_t value[], int32_t size,
 | |
| diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c
 | |
| index 4c3940a..d3444b3 100644
 | |
| --- a/xlators/cluster/dht/src/dht-helper.c
 | |
| +++ b/xlators/cluster/dht/src/dht-helper.c
 | |
| @@ -2105,6 +2105,7 @@ dht_heal_full_path_done(int op_ret, call_frame_t *heal_frame, void *data)
 | |
|      dht_local_t *local = NULL;
 | |
|      xlator_t *this = NULL;
 | |
|      int ret = -1;
 | |
| +    int op_errno = 0;
 | |
|  
 | |
|      local = heal_frame->local;
 | |
|      main_frame = local->main_frame;
 | |
| @@ -2114,10 +2115,12 @@ dht_heal_full_path_done(int op_ret, call_frame_t *heal_frame, void *data)
 | |
|      dht_set_fixed_dir_stat(&local->postparent);
 | |
|      if (local->need_xattr_heal) {
 | |
|          local->need_xattr_heal = 0;
 | |
| -        ret = dht_dir_xattr_heal(this, local);
 | |
| -        if (ret)
 | |
| -            gf_msg(this->name, GF_LOG_ERROR, ret, DHT_MSG_DIR_XATTR_HEAL_FAILED,
 | |
| +        ret = dht_dir_xattr_heal(this, local, &op_errno);
 | |
| +        if (ret) {
 | |
| +            gf_msg(this->name, GF_LOG_ERROR, op_errno,
 | |
| +                   DHT_MSG_DIR_XATTR_HEAL_FAILED,
 | |
|                     "xattr heal failed for directory  %s ", local->loc.path);
 | |
| +        }
 | |
|      }
 | |
|  
 | |
|      DHT_STACK_UNWIND(lookup, main_frame, 0, 0, local->inode, &local->stbuf,
 | |
| diff --git a/xlators/cluster/dht/src/dht-selfheal.c b/xlators/cluster/dht/src/dht-selfheal.c
 | |
| index 8af7301..2da9817 100644
 | |
| --- a/xlators/cluster/dht/src/dht-selfheal.c
 | |
| +++ b/xlators/cluster/dht/src/dht-selfheal.c
 | |
| @@ -1471,6 +1471,7 @@ dht_selfheal_dir_mkdir(call_frame_t *frame, loc_t *loc, dht_layout_t *layout,
 | |
|  {
 | |
|      int missing_dirs = 0;
 | |
|      int i = 0;
 | |
| +    int op_errno = 0;
 | |
|      int ret = -1;
 | |
|      dht_local_t *local = NULL;
 | |
|      xlator_t *this = NULL;
 | |
| @@ -1493,13 +1494,14 @@ dht_selfheal_dir_mkdir(call_frame_t *frame, loc_t *loc, dht_layout_t *layout,
 | |
|          if (!__is_root_gfid(local->stbuf.ia_gfid)) {
 | |
|              if (local->need_xattr_heal) {
 | |
|                  local->need_xattr_heal = 0;
 | |
| -                ret = dht_dir_xattr_heal(this, local);
 | |
| -                if (ret)
 | |
| -                    gf_msg(this->name, GF_LOG_ERROR, ret,
 | |
| +                ret = dht_dir_xattr_heal(this, local, &op_errno);
 | |
| +                if (ret) {
 | |
| +                    gf_msg(this->name, GF_LOG_ERROR, op_errno,
 | |
|                             DHT_MSG_DIR_XATTR_HEAL_FAILED,
 | |
|                             "%s:xattr heal failed for "
 | |
|                             "directory (gfid = %s)",
 | |
|                             local->loc.path, local->gfid);
 | |
| +                }
 | |
|              } else {
 | |
|                  if (!gf_uuid_is_null(local->gfid))
 | |
|                      gf_uuid_copy(loc->gfid, local->gfid);
 | |
| -- 
 | |
| 1.8.3.1
 | |
| 
 |