Messages in this thread | | | Subject | Re: [PATCH] autofs - fix lockref lookup | From | Ian Kent <> | Date | Thu, 24 Apr 2014 12:10:38 +0800 |
| |
On Wed, 2014-04-23 at 14:46 -0700, Andrew Morton wrote: > On Wed, 23 Apr 2014 13:20:36 +0800 Ian Kent <raven@themaw.net> wrote: > > > autofs needs to be able to see private data dentry flags for > > its dentrys that are being created but not yet hashed and for > > its dentys that have been rmdir()ed but not yet freed. It > > needs to do this so it can block processes in these states > > until a status has been returned to indicate the given > > operation is complete. > > > > It does this by keeping two lists, active and expring, of > > dentrys in this state and uses ->d_release() to keep them > > stable while it checks the reference count to determine > > if they should be used. > > > > But with the recent lockref changes dentrys being freed > > sometimes don't transition to a reference count of 0 before > > being freed so autofs can occassionally use a dentry that > > is invalid which can lead to a panic. > > What's the value of "recent"? I assume 3.14 is OK?
I'll need to look again but from memory it's broken from 3.12 onward.
The breakage happened when lockref_mark_dead() was introduced because it sets lockref->count = -128 instead of reducing count by one as was done previously.
Ian
| |