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; }
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); }