From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: [PATCH] factor out common code around ->follow_link invocation Date: Thu, 13 Jan 2005 17:53:53 +0100 Message-ID: <20050113165353.GB24377@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org Return-path: Received: from verein.lst.de ([213.95.11.210]:26753 "EHLO mail.lst.de") by vger.kernel.org with ESMTP id S261251AbVAMQyD (ORCPT ); Thu, 13 Jan 2005 11:54:03 -0500 To: akpm@osdl.org, viro@parcelfarce.linux.theplanet.co.uk Content-Disposition: inline Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org --- 1.116/fs/namei.c 2005-01-05 03:48:11 +01:00 +++ edited/fs/namei.c 2005-01-12 19:41:49 +01:00 @@ -481,6 +482,24 @@ return PTR_ERR(link); } +static inline int __do_follow_link(struct dentry *dentry, struct nameidata *nd) +{ + int error; + + touch_atime(nd->mnt, dentry); + nd_set_link(nd, NULL); + error = dentry->d_inode->i_op->follow_link(dentry, nd); + if (!error) { + char *s = nd_get_link(nd); + if (s) + error = __vfs_follow_link(nd, s); + if (dentry->d_inode->i_op->put_link) + dentry->d_inode->i_op->put_link(dentry, nd); + } + + return error; +} + /* * This limits recursive symlink follows to 8, while * limiting consecutive symlinks to 40. @@ -503,16 +522,7 @@ current->link_count++; current->total_link_count++; nd->depth++; - touch_atime(nd->mnt, dentry); - nd_set_link(nd, NULL); - err = dentry->d_inode->i_op->follow_link(dentry, nd); - if (!err) { - char *s = nd_get_link(nd); - if (s) - err = __vfs_follow_link(nd, s); - if (dentry->d_inode->i_op->put_link) - dentry->d_inode->i_op->put_link(dentry, nd); - } + err = __do_follow_link(dentry, nd); current->link_count--; nd->depth--; return err; @@ -1469,16 +1479,7 @@ error = security_inode_follow_link(dentry, nd); if (error) goto exit_dput; - touch_atime(nd->mnt, dentry); - nd_set_link(nd, NULL); - error = dentry->d_inode->i_op->follow_link(dentry, nd); - if (!error) { - char *s = nd_get_link(nd); - if (s) - error = __vfs_follow_link(nd, s); - if (dentry->d_inode->i_op->put_link) - dentry->d_inode->i_op->put_link(dentry, nd); - } + error = __do_follow_link(dentry, nd); dput(dentry); if (error) return error;