rem: }
context: bootfs_mount(mount_id id, const char *device, void *args, fs_volume *_fs, vnode_id *root_vnid){	struct bootfs *fs;	struct bootfs_vnode *v;	status_t err;	TRACE(("bootfs_mount: entry\n"));	fs = malloc(sizeof(struct bootfs));	if(fs == NULL) {		err = ENOMEM;		goto err;	}	fs->id = id;	fs->next_vnode_id = 0;	err = mutex_init(&fs->lock, "bootfs_mutex");	if(err < 0) {		goto err1;	}	fs->vnode_list_hash = hash_init(BOOTFS_HASH_SIZE, (addr)&v->all_next - (addr)v,		&bootfs_vnode_compare_func, &bootfs_vnode_hash_func);	if(fs->vnode_list_hash == NULL) {		err = ENOMEM;		goto err2;	}	// create a vnode	v = bootfs_create_vnode(fs, "");	if(v == NULL) {		err = ENOMEM;		goto err3;	}	// set it up	v->parent = v;	// create a dir stream for it to hold	v->stream.type = STREAM_TYPE_DIR;	v->stream.u.dir.dir_head = NULL;	fs->root_vnode = v;	hash_insert(fs->vnode_list_hash, v);	err = bootfs_create_vnode_tree(fs, fs->root_vnode);	if(err < 0) {		goto err4;	}	*root_vnid = v->id;	*_fs = fs;	return 0;err4:	bootfs_delete_vnode(fs, v, true);err3:	hash_uninit(fs->vnode_list_hash);err2:	mutex_destroy(&fs->lock);err1:	free(fs);err:	return err;}