*is_link = 0;
 
+       if (nd->last_type == LAST_BIND)
+               goto ok;
+
        error = -EISDIR;
        if (nd->last_type != LAST_NORM || nd->last.name[nd->last.len])
                goto exit;
        error = -EISDIR;
        if (S_ISDIR(path->dentry->d_inode->i_mode))
                goto exit;
+ok:
        filp = finish_open(nd, open_flag, acc_mode);
        return filp;
 
                        release_open_intent(&nd);
                if (error)
                        return ERR_PTR(error);
-               goto ok;
+               return finish_open(&nd, open_flag, acc_mode);
        }
 
        /*
                path_put(&nd.root);
        return filp;
 
-ok:
-       filp = finish_open(&nd, open_flag, acc_mode);
-       if (nd.root.mnt)
-               path_put(&nd.root);
-       return filp;
-
 exit_dput:
        path_put_conditional(&path, &nd);
-exit:
        if (!IS_ERR(nd.intent.open.file))
                release_open_intent(&nd);
 exit_parent:
+       path_put(&nd.path);
        if (nd.root.mnt)
                path_put(&nd.root);
-       path_put(&nd.path);
        return ERR_PTR(error);
 
 do_link:
                return ERR_PTR(error);
        }
        nd.flags &= ~LOOKUP_PARENT;
-       if (nd.last_type == LAST_BIND)
-               goto ok;
        filp = do_last(&nd, &path, open_flag, acc_mode, mode,
                       pathname, &is_link);
        if (nd.last_type == LAST_NORM)