diff options
Diffstat (limited to '0194-stack-Make-sure-to-have-unique-call-stacks-in-all-ca.patch')
-rw-r--r-- | 0194-stack-Make-sure-to-have-unique-call-stacks-in-all-ca.patch | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/0194-stack-Make-sure-to-have-unique-call-stacks-in-all-ca.patch b/0194-stack-Make-sure-to-have-unique-call-stacks-in-all-ca.patch new file mode 100644 index 0000000..7b8371f --- /dev/null +++ b/0194-stack-Make-sure-to-have-unique-call-stacks-in-all-ca.patch @@ -0,0 +1,144 @@ +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 + |