summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-locks.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-locks.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-locks.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-locks.c b/xlators/mgmt/glusterd/src/glusterd-locks.c
index 28358aa555e..53c97bea533 100644
--- a/xlators/mgmt/glusterd/src/glusterd-locks.c
+++ b/xlators/mgmt/glusterd/src/glusterd-locks.c
@@ -491,6 +491,7 @@ out:
return ret;
}
+
int32_t
glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
{
@@ -501,6 +502,7 @@ glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
gf_boolean_t is_valid = _gf_true;
uuid_t owner = {0};
xlator_t *this = NULL;
+ char *bt = NULL;
this = THIS;
GF_ASSERT (this);
@@ -568,6 +570,18 @@ glusterd_mgmt_v3_lock (const char *name, uuid_t uuid, char *type)
goto out;
}
+ /* Saving the backtrace into the pre-allocated buffer, ctx->btbuf*/
+ if ((bt = gf_backtrace_save (NULL))) {
+ snprintf (key, sizeof (key), "debug.last-success-bt-%s-%s",
+ name, type);
+ ret = dict_set_dynstr_with_alloc (priv->mgmt_v3_lock, key, bt);
+ if (ret)
+ gf_log (this->name, GF_LOG_WARNING, "Failed to save "
+ "the back trace for lock %s-%s granted to %s",
+ name, type, uuid_utoa (uuid));
+ ret = 0;
+ }
+
gf_log (this->name, GF_LOG_DEBUG,
"Lock for %s %s successfully held by %s",
type, name, uuid_utoa (uuid));