From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Kent Subject: Re: [RFC PATCH]autofs4: hang and proposed fix Date: Wed, 30 Nov 2005 23:44:34 +0800 (WST) Message-ID: References: <20051116101740.GA9551@RAM> <17292.64892.680738.833917@segfault.boston.redhat.com> <1133315771.8978.65.camel@lade.trondhjem.org> <17293.10094.111804.682032@segfault.boston.redhat.com> <1133331286.8195.29.camel@lade.trondhjem.org> Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Cc: autofs@linux.kernel.org, linux-fsdevel@vger.kernel.org Return-path: To: Trond Myklebust In-Reply-To: <1133331286.8195.29.camel@lade.trondhjem.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autofs-bounces@linux.kernel.org Errors-To: autofs-bounces@linux.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Wed, 30 Nov 2005, Trond Myklebust wrote: > On Tue, 2005-11-29 at 23:15 -0500, Jeff Moyer wrote: > > > The patch only drops the semaphore if d_lookup finds the dentry and the > > dentry has a revalidate routine. I don't follow how you can end up with > > multiple dentries for the same file in this case. > > > > Sorry if I'm missing something obvious. > > The inode->i_sem is what ensures that nobody can insert a new dentry > between the lookup of the cached dentry by d_lookup() and the call to > ->lookup() (which instantiates a new dentry). > > Imagine you have two separate processes that are doing a __lookup_hash() > of the same cached dentry. Now imagine that d_revalidate() of the dentry > fails. And that would be why lookup is only called if d_lookup fails in do_lookup when called from the link_path_walk routine. Do you think it is possible to do this safely in __lookup_hash with a similar re-ordering? Ian