From: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
To: bfields@fieldses.org, jlayton@poochiereds.net,
trond.myklebust@primarydata.com, anna.schumaker@netapp.com
Cc: linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, gorcunov@virtuozzo.com,
davem@davemloft.net, devel@openvz.org
Subject: [RFC PATCH] sunrpc: do not allow process to freeze within RPC state machine
Date: Wed, 03 Aug 2016 20:54:50 +0400 [thread overview]
Message-ID: <20160803165412.22407.47399.stgit@localhost.localdomain> (raw)
Otherwise freezer cgroup state might never become "FROZEN".
Here is a deadlock scheme for 2 processes in one freezer cgroup, which is
freezing:
CPU 0 CPU 1
-------- --------
do_last
inode_lock(dir->d_inode)
vfs_create
nfs_create
...
__rpc_execute
rpc_wait_bit_killable
__refrigerator
do_last
inode_lock(dir->d_inode)
So, the problem is that one process takes directory inode mutex, executes
creation request and goes to refrigerator.
Another one waits till directory lock is released, remains "thawed" and thus
freezer cgroup state never becomes "FROZEN".
Notes:
1) Interesting, that this is not a pure deadlock: one can thaw cgroup and then
freeze it again.
2) The issue was introduced by commit d310310cbff18ec385c6ab4d58f33b100192a96a.
3) This patch is not aimed to fix the issue, but to show the problem root.
Look like this problem moght be applicable to other hunks from the commit,
mentioned above.
Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
---
net/sunrpc/sched.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
index 9ae5885..ec7ccc1 100644
--- a/net/sunrpc/sched.c
+++ b/net/sunrpc/sched.c
@@ -253,7 +253,6 @@ EXPORT_SYMBOL_GPL(rpc_destroy_wait_queue);
static int rpc_wait_bit_killable(struct wait_bit_key *key, int mode)
{
- freezable_schedule_unsafe();
if (signal_pending_state(mode, current))
return -ERESTARTSYS;
return 0;
next reply other threads:[~2016-08-03 20:12 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-03 16:54 Stanislav Kinsburskiy [this message]
2016-08-03 17:36 ` [RFC PATCH] sunrpc: do not allow process to freeze within RPC state machine Jeff Layton
2016-08-03 18:14 ` Chuck Lever
2016-08-04 10:55 ` Stanislav Kinsburskiy
2016-08-04 13:16 ` Jeff Layton
2016-08-04 13:57 ` Stanislav Kinsburskiy
2016-08-03 17:36 ` Cyrill Gorcunov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160803165412.22407.47399.stgit@localhost.localdomain \
--to=skinsbursky@virtuozzo.com \
--cc=anna.schumaker@netapp.com \
--cc=bfields@fieldses.org \
--cc=davem@davemloft.net \
--cc=devel@openvz.org \
--cc=gorcunov@virtuozzo.com \
--cc=jlayton@poochiereds.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).