From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [PATCH 1/4] VFS: Add a VFS helper function vfs_remote_path_lookup() Date: Fri, 3 Apr 2009 02:52:20 +0100 Message-ID: <20090403015220.GS28946@ZenIV.linux.org.uk> References: <1238700874.16087.42.camel@heimdal.trondhjem.org> <20090402195212.GK28946@ZenIV.linux.org.uk> <20090402195759.GL28946@ZenIV.linux.org.uk> <20090402202846.GM28946@ZenIV.linux.org.uk> <1238705130.16087.58.camel@heimdal.trondhjem.org> <20090402205418.GN28946@ZenIV.linux.org.uk> <1238710585.31262.28.camel@heimdal.trondhjem.org> <20090402231859.GP28946@ZenIV.linux.org.uk> <20090403010954.GQ28946@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Linus Torvalds , linux-fsdevel@vger.kernel.org To: Trond Myklebust Return-path: Received: from zeniv.linux.org.uk ([195.92.253.2]:48818 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751238AbZDCBwY (ORCPT ); Thu, 2 Apr 2009 21:52:24 -0400 Content-Disposition: inline In-Reply-To: <20090403010954.GQ28946@ZenIV.linux.org.uk> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Fri, Apr 03, 2009 at 02:09:54AM +0100, Al Viro wrote: > On Fri, Apr 03, 2009 at 12:18:59AM +0100, Al Viro wrote: > > > Eww... Let's not. First of all, the really useful part of nd->root for > > normal case is that it allows to get ...->fs->root once. So it's better > > to *cache* ->fs->root in there. At which point the flag disappears, > > since it becomes simply nd->root.mnt != NULL. > > > > The interesting part is keeping refcounting happy. I'll see how to do > > that - it's clearly useful on its own. Hopefully will post later tonight... > > ... and the ugly part is the check in follow_dotdot() - one about crossing > out of chroot. Joy... OK, that's actually doable. See git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6.git/ cache-root for current variant; it's for comments *only* - not for merge. After that one we should be able to do a modified variant of e.g. vfs_path_lookup() that would do get_path(root); nd->root = root; instead of nd->root.mnt = NULL; and have lookup with root set to given place without touching current->fs at all. Warning: this is completely untested. Not even "does it boot?", just a code dump.