|
|
50dc83 |
From 783f53b0b09845cd6c38f145eac685a094767ce0 Mon Sep 17 00:00:00 2001
|
|
|
50dc83 |
From: Pranith Kumar K <pkarampu@redhat.com>
|
|
|
50dc83 |
Date: Mon, 27 May 2019 11:43:26 +0530
|
|
|
50dc83 |
Subject: [PATCH 194/221] stack: Make sure to have unique call-stacks in all
|
|
|
50dc83 |
cases
|
|
|
50dc83 |
|
|
|
50dc83 |
At the moment new stack doesn't populate frame->root->unique in all cases. This
|
|
|
50dc83 |
makes it difficult to debug hung frames by examining successive state dumps.
|
|
|
50dc83 |
Fuse and server xlators populate it whenever they can, but other xlators won't
|
|
|
50dc83 |
be able to assign 'unique' when they need to create a new frame/stack because
|
|
|
50dc83 |
they don't know what 'unique' fuse/server xlators already used. What we need is
|
|
|
50dc83 |
for unique to be correct. If a stack with same unique is present in successive
|
|
|
50dc83 |
statedumps, that means the same operation is still in progress. This makes
|
|
|
50dc83 |
'finding hung frames' part of debugging hung frames easier.
|
|
|
50dc83 |
|
|
|
50dc83 |
>upstream: bz#1714098
|
|
|
50dc83 |
>Upstream-patch: https://review.gluster.org/c/glusterfs/+/22773
|
|
|
50dc83 |
fixes bz#1716760
|
|
|
50dc83 |
Change-Id: I3e9a8f6b4111e260106c48a2ac3a41ef29361b9e
|
|
|
50dc83 |
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
|
|
|
50dc83 |
Reviewed-on: https://code.engineering.redhat.com/gerrit/172304
|
|
|
50dc83 |
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
50dc83 |
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
|
|
50dc83 |
---
|
|
|
50dc83 |
libglusterfs/src/stack.c | 2 ++
|
|
|
50dc83 |
xlators/features/quota/src/quotad-helpers.c | 3 ---
|
|
|
50dc83 |
xlators/mount/fuse/src/fuse-bridge.c | 15 ++++++++-------
|
|
|
50dc83 |
xlators/mount/fuse/src/fuse-helpers.c | 1 -
|
|
|
50dc83 |
xlators/protocol/server/src/server-helpers.c | 3 ---
|
|
|
50dc83 |
5 files changed, 10 insertions(+), 14 deletions(-)
|
|
|
50dc83 |
|
|
|
50dc83 |
diff --git a/libglusterfs/src/stack.c b/libglusterfs/src/stack.c
|
|
|
50dc83 |
index 82b3577..371f60c 100644
|
|
|
50dc83 |
--- a/libglusterfs/src/stack.c
|
|
|
50dc83 |
+++ b/libglusterfs/src/stack.c
|
|
|
50dc83 |
@@ -17,6 +17,7 @@ create_frame(xlator_t *xl, call_pool_t *pool)
|
|
|
50dc83 |
{
|
|
|
50dc83 |
call_stack_t *stack = NULL;
|
|
|
50dc83 |
call_frame_t *frame = NULL;
|
|
|
50dc83 |
+ static uint64_t unique = 0;
|
|
|
50dc83 |
|
|
|
50dc83 |
if (!xl || !pool) {
|
|
|
50dc83 |
return NULL;
|
|
|
50dc83 |
@@ -52,6 +53,7 @@ create_frame(xlator_t *xl, call_pool_t *pool)
|
|
|
50dc83 |
{
|
|
|
50dc83 |
list_add(&stack->all_frames, &pool->all_frames);
|
|
|
50dc83 |
pool->cnt++;
|
|
|
50dc83 |
+ stack->unique = unique++;
|
|
|
50dc83 |
}
|
|
|
50dc83 |
UNLOCK(&pool->lock);
|
|
|
50dc83 |
GF_ATOMIC_INC(pool->total_count);
|
|
|
50dc83 |
diff --git a/xlators/features/quota/src/quotad-helpers.c b/xlators/features/quota/src/quotad-helpers.c
|
|
|
50dc83 |
index be8f908..d9f0351 100644
|
|
|
50dc83 |
--- a/xlators/features/quota/src/quotad-helpers.c
|
|
|
50dc83 |
+++ b/xlators/features/quota/src/quotad-helpers.c
|
|
|
50dc83 |
@@ -73,7 +73,6 @@ quotad_aggregator_alloc_frame(rpcsvc_request_t *req)
|
|
|
50dc83 |
goto out;
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->root->state = state;
|
|
|
50dc83 |
- frame->root->unique = 0;
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->this = this;
|
|
|
50dc83 |
out:
|
|
|
50dc83 |
@@ -93,8 +92,6 @@ quotad_aggregator_get_frame_from_req(rpcsvc_request_t *req)
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->root->op = req->procnum;
|
|
|
50dc83 |
|
|
|
50dc83 |
- frame->root->unique = req->xid;
|
|
|
50dc83 |
-
|
|
|
50dc83 |
frame->root->uid = req->uid;
|
|
|
50dc83 |
frame->root->gid = req->gid;
|
|
|
50dc83 |
frame->root->pid = req->pid;
|
|
|
50dc83 |
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
|
|
|
50dc83 |
index c3945d7..c05866b 100644
|
|
|
50dc83 |
--- a/xlators/mount/fuse/src/fuse-bridge.c
|
|
|
50dc83 |
+++ b/xlators/mount/fuse/src/fuse-bridge.c
|
|
|
50dc83 |
@@ -3270,11 +3270,11 @@ fuse_release(xlator_t *this, fuse_in_header_t *finh, void *msg,
|
|
|
50dc83 |
|
|
|
50dc83 |
priv = this->private;
|
|
|
50dc83 |
|
|
|
50dc83 |
- fuse_log_eh(this, "RELEASE(): %" PRIu64 ":, fd: %p, gfid: %s", finh->unique,
|
|
|
50dc83 |
- fd, uuid_utoa(fd->inode->gfid));
|
|
|
50dc83 |
+ fuse_log_eh(this, "RELEASE(): finh->unique: %" PRIu64 ":, fd: %p, gfid: %s",
|
|
|
50dc83 |
+ finh->unique, fd, uuid_utoa(fd->inode->gfid));
|
|
|
50dc83 |
|
|
|
50dc83 |
- gf_log("glusterfs-fuse", GF_LOG_TRACE, "%" PRIu64 ": RELEASE %p",
|
|
|
50dc83 |
- finh->unique, state->fd);
|
|
|
50dc83 |
+ gf_log("glusterfs-fuse", GF_LOG_TRACE,
|
|
|
50dc83 |
+ "finh->unique: %" PRIu64 ": RELEASE %p", finh->unique, state->fd);
|
|
|
50dc83 |
|
|
|
50dc83 |
fuse_fd_ctx_destroy(this, state->fd);
|
|
|
50dc83 |
fd_unref(fd);
|
|
|
50dc83 |
@@ -3759,11 +3759,12 @@ fuse_releasedir(xlator_t *this, fuse_in_header_t *finh, void *msg,
|
|
|
50dc83 |
|
|
|
50dc83 |
priv = this->private;
|
|
|
50dc83 |
|
|
|
50dc83 |
- fuse_log_eh(this, "RELEASEDIR (): %" PRIu64 ": fd: %p, gfid: %s",
|
|
|
50dc83 |
+ fuse_log_eh(this,
|
|
|
50dc83 |
+ "RELEASEDIR (): finh->unique: %" PRIu64 ": fd: %p, gfid: %s",
|
|
|
50dc83 |
finh->unique, state->fd, uuid_utoa(state->fd->inode->gfid));
|
|
|
50dc83 |
|
|
|
50dc83 |
- gf_log("glusterfs-fuse", GF_LOG_TRACE, "%" PRIu64 ": RELEASEDIR %p",
|
|
|
50dc83 |
- finh->unique, state->fd);
|
|
|
50dc83 |
+ gf_log("glusterfs-fuse", GF_LOG_TRACE,
|
|
|
50dc83 |
+ "finh->unique: %" PRIu64 ": RELEASEDIR %p", finh->unique, state->fd);
|
|
|
50dc83 |
|
|
|
50dc83 |
fuse_fd_ctx_destroy(this, state->fd);
|
|
|
50dc83 |
fd_unref(state->fd);
|
|
|
50dc83 |
diff --git a/xlators/mount/fuse/src/fuse-helpers.c b/xlators/mount/fuse/src/fuse-helpers.c
|
|
|
50dc83 |
index cf4f8e1..5bfc40c 100644
|
|
|
50dc83 |
--- a/xlators/mount/fuse/src/fuse-helpers.c
|
|
|
50dc83 |
+++ b/xlators/mount/fuse/src/fuse-helpers.c
|
|
|
50dc83 |
@@ -358,7 +358,6 @@ get_call_frame_for_req(fuse_state_t *state)
|
|
|
50dc83 |
frame->root->uid = finh->uid;
|
|
|
50dc83 |
frame->root->gid = finh->gid;
|
|
|
50dc83 |
frame->root->pid = finh->pid;
|
|
|
50dc83 |
- frame->root->unique = finh->unique;
|
|
|
50dc83 |
set_lk_owner_from_uint64(&frame->root->lk_owner, state->lk_owner);
|
|
|
50dc83 |
}
|
|
|
50dc83 |
|
|
|
50dc83 |
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c
|
|
|
50dc83 |
index 1a34239..e74a24d 100644
|
|
|
50dc83 |
--- a/xlators/protocol/server/src/server-helpers.c
|
|
|
50dc83 |
+++ b/xlators/protocol/server/src/server-helpers.c
|
|
|
50dc83 |
@@ -459,7 +459,6 @@ server_alloc_frame(rpcsvc_request_t *req)
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->root->client = client;
|
|
|
50dc83 |
frame->root->state = state; /* which socket */
|
|
|
50dc83 |
- frame->root->unique = 0; /* which call */
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->this = client->this;
|
|
|
50dc83 |
out:
|
|
|
50dc83 |
@@ -487,8 +486,6 @@ get_frame_from_request(rpcsvc_request_t *req)
|
|
|
50dc83 |
|
|
|
50dc83 |
frame->root->op = req->procnum;
|
|
|
50dc83 |
|
|
|
50dc83 |
- frame->root->unique = req->xid;
|
|
|
50dc83 |
-
|
|
|
50dc83 |
client = req->trans->xl_private;
|
|
|
50dc83 |
this = req->trans->xl;
|
|
|
50dc83 |
priv = this->private;
|
|
|
50dc83 |
--
|
|
|
50dc83 |
1.8.3.1
|
|
|
50dc83 |
|