rem: status = FS_CALL(vnode,fs_lookup)(vnode->mount->cookie, vnode->private_node, path, &vnodeID, &type);
add: status = FS_CALL(vnode, lookup)(vnode->mount->cookie, vnode->private_node, path, &vnodeID, &type);
context: vnode_path_to_vnode(struct vnode *vnode, char *path, bool traverseLeafLink, struct vnode **_vnode, int count){	int status = 0;	if (!path)		return EINVAL;	while (true) {		struct vnode *nextVnode;		vnode_id vnodeID;		char *nextPath;		int type;		PRINT(("path_to_vnode: top of loop. p = %p, *p = %c, p = '%s'\n", path, *path, path));		// done?		if (*path == '\0')			break;		// walk to find the next path component ("path" will point to a single		// path component), and filter out multiple slashes		for (nextPath = path + 1;*nextPath != '\0' && *nextPath != '/';nextPath++);		if (*nextPath == '/') {			*nextPath = '\0';			do				nextPath++;			while (*nextPath == '/');		}		// see if the .. is at the root of a mount		if (strcmp("..", path) == 0 && vnode->mount->root_vnode == vnode) {			// move to the covered vnode so we pass the '..' parse to the underlying filesystem			if (vnode->mount->covers_vnode) {				nextVnode = vnode->mount->covers_vnode;				inc_vnode_ref_count(nextVnode);				dec_vnode_ref_count(vnode, false);				vnode = nextVnode;			}		}		// tell the filesystem to get the vnode of this path component		status = FS_CALL(vnode,fs_lookup)(vnode->mount->cookie, vnode->private_node, path, &vnodeID, &type);		if (status < 0) {			put_vnode(vnode);			return status;		}		// lookup the vnode, the call to fs_lookup should have caused a get_vnode to be called		// from inside the filesystem, thus the vnode would have to be in the list and it's		// ref count incremented at this point		mutex_lock(&gVnodeMutex);		nextVnode = lookup_vnode(vnode->fs_id, vnodeID);		mutex_unlock(&gVnodeMutex);		if (!nextVnode) {			// pretty screwed up here			panic("path_to_vnode: could not lookup vnode (fsid 0x%lx vnid 0x%Lx)\n", vnode->fs_id, vnodeID);			put_vnode(vnode);			return ERR_VFS_PATH_NOT_FOUND;		}		// If the new node is a symbolic link, resolve it (if we've been told to do it)		if (S_ISLNK(type) && !(!traverseLeafLink && nextPath[0] == '\0')) {			char *buffer;			// it's not exactly nice style using goto in this way, but hey, it works :-/			if (count + 1 > MAX_SYM_LINKS) {				status = B_LINK_LIMIT;				goto resolve_link_error;			}			buffer = kmalloc(SYS_MAX_PATH_LEN);			if (buffer == NULL) {				status = B_NO_MEMORY;				goto resolve_link_error;			}			status = FS_CALL(nextVnode,fs_read_link)(nextVnode->mount->cookie, nextVnode->private_node, buffer, SYS_MAX_PATH_LEN);			if (status < B_OK) {				kfree(buffer);resolve_link_error:				put_vnode(vnode);				put_vnode(nextVnode);				return status;			}			put_vnode(nextVnode);			// Check if we start from the root directory or the current			// directory ("vnode" still points to that one).			// Cut off all leading slashes if it's the root directory			path = buffer;			if (path[0] == '/') {				// we don't need the old directory anymore				put_vnode(vnode);				while (*++path == '/')					;				vnode = root_vnode;				inc_vnode_ref_count(vnode);			}			status = vnode_path_to_vnode(vnode, path, traverseLeafLink, &nextVnode, count + 1);			kfree(buffer);			if (status < B_OK) {				put_vnode(vnode);				return status;			}		}		// decrease the ref count on the old dir we just looked up into		put_vnode(vnode);		path = nextPath;		vnode = nextVnode;		// see if we hit a mount point		if (vnode->covered_by) {			nextVnode = vnode->covered_by;			inc_vnode_ref_count(nextVnode);			put_vnode(vnode);			vnode = nextVnode;		}	}	*_vnode = vnode;	return B_OK;}