Messages in this thread | | | Date | Tue, 3 Jun 2008 09:59:50 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: Linux 2.6.26-rc4 |
| |
On Tue, 3 Jun 2008, Al Viro wrote: > > > > If the dentry is unhashed, it means that it _either_ > > > > - has already been deleted (rmdir'ed) or d_invalidate()'d. Right? > > > > I don't see why you should ever return the dentry in this case.. > > From my reading of that code looks like it's been rmdir'ed. And no, I > don't understand what the hell is that code trying to do.
Hmm. Looking closer, I think that code is meant to handle the d_invalidate() that it did in autofs4_tree_busy().
However, that should never trigger for a directory entry that can be reached some other way, because that code has done a "dget()" on the dentry, and d_invalidate() does
if (atomic_read(&dentry->d_count) > 1) { if (dentry->d_inode && S_ISDIR(dentry->d_inode->i_mode)) { ..unlock.. return -EBUSY; } }
so I dunno. I still think the expire code shouldn't even use d_invalidate() at all, and just revalidate() at lookup.
Linus
| |