diff --git a/fs/namei.c b/fs/namei.c index bff27c08134c22ba31a2da070e71a3b1a0df6717..fc6bed7215c98620ec87b8cd6c6e6417b68b1d39 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1845,8 +1845,6 @@ struct file *do_filp_open(int dfd, const char *pathname, mutex_lock(&dir->d_inode->i_mutex); path.dentry = lookup_hash(&nd); path.mnt = nd.path.mnt; - -do_last: filp = do_last(&nd, &path, open_flag, flag, acc_mode, mode, pathname, dir, &is_link); if (is_link) @@ -1926,7 +1924,13 @@ struct file *do_filp_open(int dfd, const char *pathname, path.dentry = lookup_hash(&nd); path.mnt = nd.path.mnt; __putname(nd.last.name); - goto do_last; + filp = do_last(&nd, &path, open_flag, flag, acc_mode, mode, + pathname, dir, &is_link); + if (is_link) + goto do_link; + if (nd.root.mnt) + path_put(&nd.root); + return filp; } /**