lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 9 May 2016 16:39:33 +0100 From: Al Viro <viro@...IV.linux.org.uk> To: Tony Lindgren <tony@...mide.com> Cc: Eric Dumazet <edumazet@...gle.com>, linux-nfs@...r.kernel.org, Jiri Pirko <jiri@...nulli.us>, netdev <netdev@...r.kernel.org>, Trond Myklebust <trond.myklebust@...marydata.com>, Christoph Hellwig <hch@....de>, linux-omap@...r.kernel.org, Anna Schumaker <anna.schumaker@...app.com>, linux-arm-kernel@...ts.infradead.org Subject: Re: NFSroot hangs with bad unlock balance in Linux next On Mon, May 09, 2016 at 08:21:38AM -0700, Tony Lindgren wrote: > Looks like with both patches applied I still also get this eventually: > > ===================================== > [ BUG: bad unlock balance detected! ] > 4.6.0-rc7-next-20160509+ #1264 Not tainted > ------------------------------------- Lockdep warnings are noise. To make them STFU try the following incremental; I'll fold it into #work.lookups and #for-next. Note that it will do nothing to hangs - those are completely unrelated and you need Eric's patch to deal with them. diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c index d367b06..1868246 100644 --- a/fs/nfs/unlink.c +++ b/fs/nfs/unlink.c @@ -64,7 +64,7 @@ static void nfs_async_unlink_release(void *calldata) struct dentry *dentry = data->dentry; struct super_block *sb = dentry->d_sb; - up_read(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem); + up_read_non_owner(&NFS_I(d_inode(dentry->d_parent))->rmdir_sem); d_lookup_done(dentry); nfs_free_unlinkdata(data); dput(dentry); @@ -117,10 +117,10 @@ static int nfs_call_unlink(struct dentry *dentry, struct nfs_unlinkdata *data) struct inode *dir = d_inode(dentry->d_parent); struct dentry *alias; - down_read(&NFS_I(dir)->rmdir_sem); + down_read_non_owner(&NFS_I(dir)->rmdir_sem); alias = d_alloc_parallel(dentry->d_parent, &data->args.name, &data->wq); if (IS_ERR(alias)) { - up_read(&NFS_I(dir)->rmdir_sem); + up_read_non_owner(&NFS_I(dir)->rmdir_sem); return 0; } if (!d_in_lookup(alias)) { @@ -142,7 +142,7 @@ static int nfs_call_unlink(struct dentry *dentry, struct nfs_unlinkdata *data) ret = 0; spin_unlock(&alias->d_lock); dput(alias); - up_read(&NFS_I(dir)->rmdir_sem); + up_read_non_owner(&NFS_I(dir)->rmdir_sem); /* * If we'd displaced old cached devname, free it. At that * point dentry is definitely not a root, so we won't need
Powered by blists - more mailing lists