Ejemplo n.º 1
0
int
ai_btree_dump(char *ns_name, char *setname, char *filename)
{
	char *tname;

	if (!(tname = create_tname(ns_name, setname))) {
		return -1;
	}

	AI_GRLOCK();

	int retval = dump_btree(tname, (filename ? filename : DEFAULT_BTREE_DUMP_FILENAME));

	AI_UNLOCK();

	cf_free(tname);

	return retval;
}
Ejemplo n.º 2
0
void sd_inode_set_vid(write_node_fn writer, read_node_fn reader,
		      struct sd_inode *inode, uint32_t idx, uint32_t vdi_id)
{
	struct sd_extent_header *header;
	struct find_path path;
	int ret;

	path.p_ext_header = NULL;

	if (inode->store_policy == 0)
		inode->data_vdi_id[idx] = vdi_id;
	else {
		if (inode->data_vdi_id[0] == 0)
			sd_inode_init(inode->data_vdi_id, 1);
		header = EXT_HEADER(inode->data_vdi_id);
		if (header->magic != INODE_BTREE_MAGIC)
			panic("%s() B-tree in inode is corrupt!", __func__);
		while (1) {
			memset(&path, 0, sizeof(path));
			ret = search_whole_btree(reader, inode, idx, &path);
			if (ret == SD_RES_BTREE_FOUND) {
				path.p_ext->vdi_id = vdi_id;
				goto out;
			} else {
				ret = insert_new_node(writer, reader, inode,
						&path, idx, vdi_id);
				if (SD_RES_BTREE_REPEAT == ret) {
					if (path.p_ext_header)
						free(path.p_ext_header);
					continue;
				} else
					goto out;
			}
		}
	}
out:
	if (path.p_ext_header)
		free(path.p_ext_header);
	dump_btree(reader, inode);
}