From: Christoph Hellwig Signed-off-by: Andrew Morton --- 25-akpm/fs/namei.c | 40 ++++++++++++++++++++-------------------- 1 files changed, 20 insertions(+), 20 deletions(-) diff -puN fs/namei.c~factor-out-common-code-around-follow_link-invocation fs/namei.c --- 25/fs/namei.c~factor-out-common-code-around-follow_link-invocation Thu Jan 13 15:55:24 2005 +++ 25-akpm/fs/namei.c Thu Jan 13 15:55:24 2005 @@ -482,6 +482,24 @@ fail: 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. @@ -504,16 +522,7 @@ static inline int do_follow_link(struct 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; @@ -1470,16 +1479,7 @@ do_link: 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; _