From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Subject: Re: [PATCH] factor out common code around ->follow_link invocation Date: Thu, 13 Jan 2005 16:06:34 -0800 Message-ID: <20050113160634.0fd416b7.akpm@osdl.org> References: <20050113165353.GB24377@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: viro@parcelfarce.linux.theplanet.co.uk, linux-fsdevel@vger.kernel.org Return-path: Received: from fw.osdl.org ([65.172.181.6]:11157 "EHLO mail.osdl.org") by vger.kernel.org with ESMTP id S261778AbVANACH (ORCPT ); Thu, 13 Jan 2005 19:02:07 -0500 To: Christoph Hellwig In-Reply-To: <20050113165353.GB24377@lst.de> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Christoph Hellwig wrote: > > +static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd) Now there's a fairly insane amount of inlining going on around do_follow_link() and __do_follow_link(). It makes my fingers itchy. ow. __do_follow_link inlines __vfs_follow_link inlines walk_init_root and __do_follow_link has maybe three callsites. This: --- 25/fs/namei.c~namei-uninlining Thu Jan 13 16:01:24 2005 +++ 25-akpm/fs/namei.c Thu Jan 13 16:04:21 2005 @@ -447,7 +447,7 @@ walk_init_root(const char *name, struct return 1; } -static inline int __vfs_follow_link(struct nameidata *nd, const char *link) +static int __vfs_follow_link(struct nameidata *nd, const char *link) { int res = 0; char *name; @@ -482,7 +482,7 @@ fail: return PTR_ERR(link); } -static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd) +static int __do_follow_link(struct dentry *dentry, struct nameidata *nd) { int error; @@ -507,7 +507,7 @@ static inline int __do_follow_link(struc * Without that kind of total limit, nasty chains of consecutive * symlinks can cause almost arbitrarily long lookups. */ -static inline int do_follow_link(struct dentry *dentry, struct nameidata *nd) +static int do_follow_link(struct dentry *dentry, struct nameidata *nd) { int err = -ELOOP; if (current->link_count >= MAX_NESTED_LINKS) does this: text data bss dec hex filename 16602 96 0 16698 413a fs/namei.o 14986 96 0 15082 3aea fs/namei.o Is it still the case that we need inlining in the link-following code to prevent stack windup? If so, some commentary is needed to protect it. what are the guidelines?