From 0c2661248a4912ba5841f5be36101cb37435784d Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sat, 26 Dec 2009 07:04:50 -0500 Subject: [PATCH] --- yaml --- r: 185927 b: refs/heads/master c: 9e67f36169117e07daf16dc7ca314f1db9e2050a h: refs/heads/master i: 185925: 472c196d49dd50978c07efbb3c231995b7694238 185923: 19a9883b5210e73d1801de07ecefd12d61383408 185919: 4d33d18d42334ab768b0fb73d81f708e6582cace v: v3 --- [refs] | 2 +- trunk/fs/namei.c | 21 +++++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index f6d00f2fdd87..28cef4bc54d4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 67ee3ad21d0d0b2cc0b70708de8aed860fadda44 +refs/heads/master: 9e67f36169117e07daf16dc7ca314f1db9e2050a diff --git a/trunk/fs/namei.c b/trunk/fs/namei.c index 0b4d19d47e67..b0c74fe91fb0 100644 --- a/trunk/fs/namei.c +++ b/trunk/fs/namei.c @@ -1647,15 +1647,12 @@ static struct file *finish_open(struct nameidata *nd, static struct file *do_last(struct nameidata *nd, struct path *path, int open_flag, int acc_mode, - int mode, const char *pathname, - int *is_link) + int mode, const char *pathname) { struct dentry *dir = nd->path.dentry; struct file *filp; int error; - *is_link = 0; - if (nd->last_type == LAST_BIND) goto ok; @@ -1727,10 +1724,9 @@ static struct file *do_last(struct nameidata *nd, struct path *path, error = -ENOENT; if (!path->dentry->d_inode) goto exit_dput; - if (path->dentry->d_inode->i_op->follow_link) { - *is_link = 1; + + if (path->dentry->d_inode->i_op->follow_link) return NULL; - } path_to_nameidata(path, nd); error = -EISDIR; @@ -1766,7 +1762,6 @@ struct file *do_filp_open(int dfd, const char *pathname, int count = 0; int flag = open_to_namei_flags(open_flag); int force_reval = 0; - int is_link; /* * O_SYNC is implemented as __O_SYNC|O_DSYNC. As many places only @@ -1849,9 +1844,8 @@ struct file *do_filp_open(int dfd, const char *pathname, nd.flags |= LOOKUP_CREATE | LOOKUP_OPEN; if (open_flag & O_EXCL) nd.flags |= LOOKUP_EXCL; - filp = do_last(&nd, &path, open_flag, acc_mode, mode, - pathname, &is_link); - if (is_link) + filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname); + if (!filp) goto do_link; if (nd.root.mnt) path_put(&nd.root); @@ -1902,11 +1896,10 @@ struct file *do_filp_open(int dfd, const char *pathname, return ERR_PTR(error); } nd.flags &= ~LOOKUP_PARENT; - filp = do_last(&nd, &path, open_flag, acc_mode, mode, - pathname, &is_link); + filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname); if (nd.last_type == LAST_NORM) __putname(nd.last.name); - if (is_link) + if (!filp) goto do_link; if (nd.root.mnt) path_put(&nd.root);