From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [PATCH 06/13] VFS/namei: new flag to support RCU symlinks: LOOKUP_LINK_RCU. Date: Mon, 16 Mar 2015 22:33:45 +0000 Message-ID: <20150316223345.GD29656@ZenIV.linux.org.uk> References: <20150316043602.23648.52734.stgit@notabene.brown> <20150316044320.23648.45500.stgit@notabene.brown> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org To: NeilBrown Return-path: Content-Disposition: inline In-Reply-To: <20150316044320.23648.45500.stgit@notabene.brown> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Mon, Mar 16, 2015 at 03:43:20PM +1100, NeilBrown wrote: > When we support ->follow_link in RCU-walk we will not want to > take a reference to the 'struct path *link' passed to follow_link, > and correspondingly will not want to drop that reference. > > As link_path_walk will complete_walk() in the case of an error, > and as complete_walk() will clear LOOKUP_RCU, we cannot test > LOOKUP_RCU to determine if the path should be 'put'. > > So introduce a new flag: LOOKUP_LINK_RCU. This is set on > entry to follow_link() if appropriate and put_link() will > only call path_put() if it is clear. Umm... How is it different from nd->depth > 0 && nd->flags & LOOKUP_RCU? IOW, could we bump nd->depth before that (conditional) mntget()?