bool success = false;
ASSERT (length >= 0);
+
+ /* If this assertion fails, the inode structure is not exactly
+ one sector in size, and you should fix that. */
ASSERT (sizeof *disk_inode == DISK_SECTOR_SIZE);
disk_inode = calloc (1, sizeof *disk_inode);
{
/* Remove from inode list and release lock. */
list_remove (&inode->elem);
-
+
/* Deallocate blocks if removed. */
- if (inode->removed)
- free_map_release (inode->sector,
- bytes_to_sectors (inode->data.length));
+ if (inode->removed)
+ {
+ free_map_release (inode->sector, 1);
+ free_map_release (inode->data.start,
+ bytes_to_sectors (inode->data.length));
+ }
free (inode);
}
while (size > 0)
{
/* Sector to write, starting byte offset within sector. */
- off_t sector_idx = byte_to_sector (inode, offset);
+ disk_sector_t sector_idx = byte_to_sector (inode, offset);
int sector_ofs = offset % DISK_SECTOR_SIZE;
/* Bytes left in inode, bytes left in sector, lesser of the two. */