Beispiel #1
0
void testfs_close_super_block(struct super_block *sb) {
	testfs_tx_start(sb, TX_UMOUNT);
	// write sb->sb of type dsuper_block to disk at offset 0.
	testfs_write_super_block(sb);
	// assume there are no entries in the inode hash table. 
	// delete the 256 hash size inode hash table 
	inode_hash_destroy();
	if (sb->inode_freemap) {
		// write inode map to disk.
		write_blocks(sb, bitmap_getdata(sb->inode_freemap),
				sb->sb.inode_freemap_start, INODE_FREEMAP_SIZE);
		// free in memory bitmap file.
		bitmap_destroy(sb->inode_freemap);
		sb->inode_freemap = NULL;
	}
	if (sb->block_freemap) {
		// write inode freemap to disk
		write_blocks(sb, bitmap_getdata(sb->block_freemap),
				sb->sb.block_freemap_start, BLOCK_FREEMAP_SIZE);
		// destroy inode freemap
		bitmap_destroy(sb->block_freemap);
		sb->block_freemap = NULL;
	}
	testfs_tx_commit(sb, TX_UMOUNT);
	fflush(sb->dev);
	fclose(sb->dev);
	sb->dev = NULL;
	// free in memory data structure sb superblock
	free(sb);
}
Beispiel #2
0
void
testfs_close_super_block(struct super_block *sb)
{
	testfs_write_super_block(sb);
	inode_hash_destroy();
	if (sb->inode_freemap) {
		write_blocks(sb, bitmap_getdata(sb->inode_freemap),
			     sb->sb.inode_freemap_start, INODE_FREEMAP_SIZE);
		bitmap_destroy(sb->inode_freemap);
		sb->inode_freemap = NULL;
	}
	if (sb->block_freemap) {
		write_blocks(sb, bitmap_getdata(sb->block_freemap),
			     sb->sb.block_freemap_start, BLOCK_FREEMAP_SIZE);
		bitmap_destroy(sb->block_freemap);
		sb->block_freemap = NULL;
	}
	fflush(sb->dev);
	fclose(sb->dev);
	sb->dev = NULL;
	free(sb);
}