u32 dentry_offset;
int ret;
struct dentry *dentry;
- struct inode_table *inode_tab;
+ struct inode_table inode_tab;
const struct lookup_table_entry *metadata_lte;
u64 metadata_len;
u64 metadata_offset;
dentry->prev = dentry;
if (ret != 0)
goto out_free_dentry_tree;
+ inode_add_dentry(dentry, dentry->inode);
/* Now read the entire directory entry tree into memory. */
DEBUG("Reading dentry tree");
/* Build hash table that maps hard link group IDs to dentry sets */
DEBUG("Building link group table");
- inode_tab = new_inode_table(9001);
- if (!inode_tab)
+ ret = init_inode_table(&inode_tab, 9001);
+ if (ret != 0)
goto out_free_dentry_tree;
- for_dentry_in_tree(dentry, inode_table_insert, inode_tab);
- DEBUG("Fixing inconsistencies in the link groups");
- ret = fix_inodes(inode_tab, &inode_list);
- free_inode_table(inode_tab);
+ for_dentry_in_tree(dentry, inode_table_insert, &inode_tab);
+
+ DEBUG("Fixing inconsistencies in the hard link groups");
+ ret = fix_inodes(&inode_tab, &inode_list);
+ destroy_inode_table(&inode_tab);
if (ret != 0)
goto out_free_dentry_tree;
DEBUG("Running miscellaneous verifications on the dentry tree");
+ for_lookup_table_entry(w->lookup_table, lte_zero_real_refcnt, NULL);
ret = for_dentry_in_tree(dentry, verify_dentry, w);
if (ret != 0)
goto out_free_dentry_tree;
DEBUG("Done reading image metadata");
imd->root_dentry = dentry;
+ imd->inode_list = inode_list;
goto out_free_buf;
out_free_dentry_tree:
free_dentry_tree(dentry, NULL);