From fb20713b380e1df8d7f9e9df96563be2f9144fd6 Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Thu, 12 Mar 2020 21:12:13 +0530 Subject: Posix: Use simple approach to close fd Problem: posix_release(dir) functions add the fd's into a ctx->janitor_fds and janitor thread closes the fd's.In brick_mux environment it is difficult to handle race condition in janitor threads because brick spawns a single janitor thread for all bricks. Solution: Use synctask to execute posix_release(dir) functions instead of using background a thread to close fds. Credits: Pranith Karampuri Change-Id: Iffb031f0695a7da83d5a2f6bac8863dad225317e Fixes: bz#1811631 Signed-off-by: Mohit Agrawal --- rpc/rpc-lib/src/rpcsvc.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'rpc/rpc-lib/src') diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index 81d40c8ec0e..f7d911bf1c6 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -365,6 +365,12 @@ rpcsvc_program_actor(rpcsvc_request_t *req) req->ownthread = program->ownthread; req->synctask = program->synctask; + if (((req->procnum == GFS3_OP_RELEASE) || + (req->procnum == GFS3_OP_RELEASEDIR)) && + (program->prognum == GLUSTER_FOP_PROGRAM)) { + req->ownthread = _gf_false; + req->synctask = _gf_true; + } err = SUCCESS; gf_log(GF_RPCSVC, GF_LOG_TRACE, "Actor found: %s - %s for %s", -- cgit