X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffilesys%2Finode.c;h=8e954abc32f35c782cd04c9f0715a7291a86edbb;hb=586d828663e6d77914946c5823bc91ed739682d0;hp=bd68167baa1c5c4b2bcfd02c73b99c194e102c87;hpb=4ebf33908a571a7cde93fe618902b044e3633cdf;p=pintos-anon diff --git a/src/filesys/inode.c b/src/filesys/inode.c index bd68167..8e954ab 100644 --- a/src/filesys/inode.c +++ b/src/filesys/inode.c @@ -162,11 +162,14 @@ inode_close (struct inode *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); } @@ -255,7 +258,7 @@ inode_write_at (struct inode *inode, const void *buffer_, off_t size, 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. */