diff options
| -rw-r--r-- | libglusterfs/src/stack.h | 53 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 3 | ||||
| -rw-r--r-- | xlators/cluster/stripe/src/stripe.c | 6 | 
3 files changed, 54 insertions, 8 deletions
diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h index 21f9d1739f0..cbf7e9adb95 100644 --- a/libglusterfs/src/stack.h +++ b/libglusterfs/src/stack.h @@ -263,6 +263,11 @@ STACK_RESET (call_stack_t *stack)                  UNLOCK(&frame->root->stack_lock);                       \                  old_THIS = THIS;                                        \                  THIS = obj;                                             \ +                gf_msg_trace ("stack-trace", 0,                         \ +                              "stack-address: %p, "                     \ +                              "winding from %s to %s",                  \ +                              frame->root, old_THIS->name,              \ +                              THIS->name);                              \                  if (frame->this->ctx->measure_latency)                  \                          gf_latency_begin (_new, fn);                    \                  fn (_new, obj, params);                                 \ @@ -279,6 +284,11 @@ STACK_RESET (call_stack_t *stack)                  frame->wind_to = #fn;                                   \                  old_THIS = THIS;                                        \                  THIS = obj;                                             \ +                gf_msg_trace ("stack-trace", 0,                         \ +                              "stack-address: %p, "                     \ +                              "winding from %s to %s",                  \ +                              frame->root, old_THIS->name,              \ +                              THIS->name);                              \                  fn (frame, obj, params);                                \                  THIS = old_THIS;                                        \          } while (0) @@ -313,6 +323,11 @@ STACK_RESET (call_stack_t *stack)                  fn##_cbk = rfn;                                         \                  old_THIS = THIS;                                        \                  THIS = obj;                                             \ +                gf_msg_trace ("stack-trace", 0,                         \ +                              "stack-address: %p, "                     \ +                              "winding from %s to %s",                  \ +                              frame->root, old_THIS->name,              \ +                              THIS->name);                              \                  if (obj->ctx->measure_latency)                          \                          gf_latency_begin (_new, fn);                    \                  fn (_new, obj, params);                                 \ @@ -321,7 +336,7 @@ STACK_RESET (call_stack_t *stack)  /* return from function */ -#define STACK_UNWIND(frame, params ...)                                 \ +#define STACK_UNWIND(frame, op_ret, op_errno, params ...)               \          do {                                                            \                  ret_fn_t      fn = NULL;                                \                  call_frame_t *_parent = NULL;                           \ @@ -331,6 +346,20 @@ STACK_RESET (call_stack_t *stack)                                  LG_MSG_FRAME_ERROR, "!frame");          \                          break;                                          \                  }                                                       \ +                if (op_ret < 0) {                                       \ +                        gf_msg_debug ("stack-trace", op_errno,          \ +                                      "stack-address: %p, "             \ +                                      "%s returned %d error: %s",       \ +                                      frame->root, THIS->name,          \ +                                      (int32_t)op_ret,                  \ +                                      strerror(op_errno));              \ +                } else {                                                \ +                        gf_msg_trace ("stack-trace", 0,                 \ +                                      "stack-address: %p, "             \ +                                      "%s returned %d",                 \ +                                      frame->root, THIS->name,          \ +                                      (int32_t)op_ret);                 \ +                }                                                       \                  fn = frame->ret;                                        \                  _parent = frame->parent;                                \                  LOCK(&frame->root->stack_lock);                         \ @@ -344,13 +373,14 @@ STACK_RESET (call_stack_t *stack)                  frame->unwind_from = __FUNCTION__;                      \                  if (frame->this->ctx->measure_latency)                  \                          gf_latency_end (frame);                         \ -                fn (_parent, frame->cookie, _parent->this, params);     \ +                fn (_parent, frame->cookie, _parent->this, op_ret,      \ +                    op_errno, params);                                  \                  THIS = old_THIS;                                        \          } while (0)  /* return from function in type-safe way */ -#define STACK_UNWIND_STRICT(op, frame, params ...)                      \ +#define STACK_UNWIND_STRICT(op, frame, op_ret, op_errno, params ...)    \          do {                                                            \                  fop_##op##_cbk_t      fn = NULL;                        \                  call_frame_t *_parent = NULL;                           \ @@ -361,6 +391,20 @@ STACK_RESET (call_stack_t *stack)                                  LG_MSG_FRAME_ERROR, "!frame");          \                          break;                                          \                  }                                                       \ +                if (op_ret < 0) {                                       \ +                        gf_msg_debug ("stack-trace", op_errno,          \ +                                      "stack-address: %p, "             \ +                                      "%s returned %d error: %s",       \ +                                      frame->root, THIS->name,          \ +                                      (int32_t)op_ret,                  \ +                                      strerror(op_errno));              \ +                } else {                                                \ +                        gf_msg_trace ("stack-trace", 0,                 \ +                                      "stack-address: %p, "             \ +                                      "%s returned %d",                 \ +                                      frame->root, THIS->name,          \ +                                      (int32_t)op_ret);                 \ +                }                                                       \                  fn = (fop_##op##_cbk_t )frame->ret;                     \                  _parent = frame->parent;                                \                  LOCK(&frame->root->stack_lock);                         \ @@ -374,7 +418,8 @@ STACK_RESET (call_stack_t *stack)                  frame->unwind_from = __FUNCTION__;                      \                  if (frame->this->ctx->measure_latency)                  \                          gf_latency_end (frame);                         \ -                fn (_parent, frame->cookie, _parent->this, params);     \ +                fn (_parent, frame->cookie, _parent->this, op_ret,      \ +                    op_errno, params);                                  \                  THIS = old_THIS;                                        \          } while (0) diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 9dc3a1b9d5b..9a844be435e 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -3740,7 +3740,8 @@ dht_setxattr2 (xlator_t *this, xlator_t *subvol, call_frame_t *frame, int ret)          return 0;  err: -        DHT_STACK_UNWIND (setxattr, frame, local ? local->op_ret : -1, op_errno, NULL); +        DHT_STACK_UNWIND (setxattr, frame, (local ? local->op_ret : -1), +                          op_errno, NULL);          return 0;  } diff --git a/xlators/cluster/stripe/src/stripe.c b/xlators/cluster/stripe/src/stripe.c index 78479129620..287b64646c2 100644 --- a/xlators/cluster/stripe/src/stripe.c +++ b/xlators/cluster/stripe/src/stripe.c @@ -4939,9 +4939,9 @@ out:                  /* all entries are directories */                  frame->local = NULL;                  STRIPE_STACK_UNWIND (readdir, frame, -                                     local ? local->op_ret : -1, -                                     local ? local->op_errno : EINVAL, -                                     local ? &local->entries : NULL, +                                     (local ? local->op_ret : -1), +                                     (local ? local->op_errno : EINVAL), +                                     (local ? &local->entries : NULL),                                       NULL);                  gf_dirent_free (&local->entries);                  stripe_local_wipe (local);  | 
