rem: add_vnode_to_mount_list(v, v->mount);
add: add_vnode_to_mount_list(vnode, vnode->mount);
context: get_vnode(fs_id fsid, vnode_id vnid, struct vnode **outv, int reenter){	struct vnode *v;	int err;	FUNCTION(("get_vnode: fsid %d vnid 0x%Lx 0x%p\n", fsid, vnid,outv));	mutex_lock(&vfs_vnode_mutex);	do {		v = lookup_vnode(fsid, vnid);		if (v) {			if (v->busy) {				mutex_unlock(&vfs_vnode_mutex);				thread_snooze(10000); // 10 ms				mutex_lock(&vfs_vnode_mutex);				continue;			}		}	} while(0);	PRINT(("get_vnode: tried to lookup vnode, got 0x%p\n", v));	if (v) {		inc_vnode_ref_count(v);	} else {		// we need to create a new vnode and read it in		v = create_new_vnode();		if (!v) {			err = ENOMEM;			goto err;		}		v->fsid = fsid;		v->vnid = vnid;		v->mount = fsid_to_mount(fsid);		if (!v->mount) {			err = ERR_INVALID_HANDLE;			goto err;		}		v->busy = true;		hash_insert(vnode_table, v);		mutex_unlock(&vfs_vnode_mutex);		add_vnode_to_mount_list(v, v->mount);		err = FS_CALL(v,fs_get_vnode)(v->mount->cookie, vnid, &v->priv_vnode, reenter);		if (err < 0)			remove_vnode_from_mount_list(v, v->mount);		mutex_lock(&vfs_vnode_mutex);		if (err < 0)			goto err1;		v->busy = false;		v->ref_count = 1;	}	mutex_unlock(&vfs_vnode_mutex);	PRINT(("get_vnode: returning 0x%p\n", v));	*outv = v;	return B_NO_ERROR;err1:	hash_remove(vnode_table, v);err:	mutex_unlock(&vfs_vnode_mutex);	if (v)		kfree(v);	return err;}