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