diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-02-23 06:27:28 +0300 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-03-14 16:15:24 +0300 |
commit | f1afe9efc84476ca42fbb7301a441021063eead7 (patch) | |
tree | 5bf606519f5192d97e8da59c989d89c78a62bf27 /fs | |
parent | 36f3b4f69070fee7c647bab5dc4408990bb3606c (diff) | |
download | linux-f1afe9efc84476ca42fbb7301a441021063eead7.tar.xz |
clean up the failure exits after __do_follow_link() in do_filp_open()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/namei.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/fs/namei.c b/fs/namei.c index f956567270bb..e0f59031be87 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -2426,15 +2426,12 @@ reval: nd.flags |= LOOKUP_PARENT; error = __do_follow_link(&link, &nd, &cookie); if (unlikely(error)) { - if (!IS_ERR(cookie) && linki->i_op->put_link) - linki->i_op->put_link(link.dentry, &nd, cookie); - /* nd.path had been dropped */ - nd.path = link; - goto out_path; + filp = ERR_PTR(error); + } else { + nd.flags &= ~LOOKUP_PARENT; + filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname); } - nd.flags &= ~LOOKUP_PARENT; - filp = do_last(&nd, &path, open_flag, acc_mode, mode, pathname); - if (linki->i_op->put_link) + if (!IS_ERR(cookie) && linki->i_op->put_link) linki->i_op->put_link(link.dentry, &nd, cookie); path_put(&link); } |