rem: struct vnode *v; file_cookie cookie; struct file_descriptor *f; int err;
context: vfs_open(char *path, stream_type st, int omode, bool kernel){	int fd;	struct vnode *v;	file_cookie cookie;	struct file_descriptor *f;	int err;//dprintf("vfs_open: %s: omode = %d\n", path, omode);#if MAKE_NOIZE	dprintf("vfs_open: entry. path = '%s', omode %d, kernel %d\n", path, omode, kernel);#endif	err = path_to_vnode(path, &v, kernel);	if (err < 0)		goto err;//dprintf("calling fs_open, v= %p\n", v);	err = v->mount->fs->calls->fs_open(v->mount->cookie, v->priv_vnode, &cookie, st, omode);	if (err < 0)		goto err1;	// file is opened, create a fd	f = alloc_fd();	if (!f) {		// xxx leaks		err = ENOMEM;		goto err1;	}	f->vnode = v;	f->cookie = cookie;	f->ops = &vfsops;	f->type = FDTYPE_VNODE;	fd = new_fd(get_current_io_context(kernel), f);	if (fd < 0) {		err = ERR_VFS_FD_TABLE_FULL;		goto err1;	}	return fd;	/* ??? - will this ever be called??? */	vfs_free_fd(f);err1:	dec_vnode_ref_count(v, true, false);err:	return err;}