From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: [git pull] Re: fs/dcache.c - BUG: soft lockup - CPU#5 stuck for 22s! [systemd-udevd:1667] Date: Fri, 30 May 2014 17:48:16 +0100 Message-ID: <20140530164815.GS18016@ZenIV.linux.org.uk> References: <20140529133036.GJ18016@ZenIV.linux.org.uk> <20140529154454.GK18016@ZenIV.linux.org.uk> <20140529162307.GL18016@ZenIV.linux.org.uk> <20140529165351.GM18016@ZenIV.linux.org.uk> <20140529185201.GN18016@ZenIV.linux.org.uk> <20140530081238.GA1957@lahna.fi.intel.com> <20140530152151.GR18016@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Mika Westerberg , Linux Kernel Mailing List , Miklos Szeredi , linux-fsdevel To: Linus Torvalds Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Fri, May 30, 2014 at 08:31:30AM -0700, Linus Torvalds wrote: > On Fri, May 30, 2014 at 8:21 AM, Al Viro wrote: > > > > Linus, how would you prefer it to be handled? > > I'll just have to do an rc8. I really hoped to avoid it, because we're > going on our family vacation when school is out in two weeks, and it > causes problems for the merge window, but it's not like there is much > choice - I can't do a 3.15 release with a known regression like that. Sorry about that... ;-/ > So just send me the pull request, and I'll pull it. I'll probably do > the "let's increase the x86-64 stack size to 16kB" too, to close > _that_ issue as well. OK, here it is: Fixes for livelocks in shrink_dentry_list() introduced by fixes to shrink list corruption; the root cause was that trylock of parent's ->d_lock could be disrupted by d_walk() happening on other CPUs, resulting in shrink_dentry_list() making no progress *and* the same d_walk() being called again and again for as long as shrink_dentry_list() doesn't get past that mess. Solution is to have shrink_dentry_list() treat that trylock failure not as "try to do the same thing again", but "lock them in the right order". Please, pull from git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus-2 Shortlog: Al Viro (8): lift the "already marked killed" case into shrink_dentry_list() split dentry_kill() expand dentry_kill(dentry, 0) in shrink_dentry_list() shrink_dentry_list(): take parent's ->d_lock earlier dealing with the rest of shrink_dentry_list() livelock dentry_kill() doesn't need the second argument now d_prune_alias(): just lock the parent and call __dentry_kill() dcache.c: call ->d_prune() regardless of d_unhashed() Diffstat: fs/dcache.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------- 1 file changed, 115 insertions(+), 61 deletions(-)