diff -u src/filesys/Make.vars~ src/filesys/Make.vars
--- src/filesys/Make.vars~ 2005-05-24 14:46:45.000000000 -0700
+++ src/filesys/Make.vars 2005-06-16 15:09:31.000000000 -0700
-@@ -6,6 +6,6 @@ KERNEL_SUBDIRS = threads devices lib lib
- TEST_SUBDIRS = tests/userprog tests/filesys/base tests/filesys/extended
+@@ -6,7 +6,7 @@ KERNEL_SUBDIRS = threads devices lib lib
+ GRADING_FILE = $(SRCDIR)/tests/filesys/Grading.no-vm
# Uncomment the lines below to enable VM.
-#os.dsk: DEFINES += -DVM
-#KERNEL_SUBDIRS += vm
-#TEST_SUBDIRS += tests/vm
+-#GRADING_FILE = $(SRCDIR)/tests/filesys/Grading.with-vm
+os.dsk: DEFINES += -DVM
+KERNEL_SUBDIRS += vm
+TEST_SUBDIRS += tests/vm
++GRADING_FILE = $(SRCDIR)/tests/filesys/Grading.with-vm
diff -u src/filesys/cache.c~ src/filesys/cache.c
--- src/filesys/cache.c~ 1969-12-31 16:00:00.000000000 -0800
+++ src/filesys/cache.c 2005-06-16 15:09:31.000000000 -0700
/* Closes INODE and writes it to disk.
If this was the last reference to INODE, frees its memory.
If INODE was also a removed inode, frees its blocks. */
-@@ -158,18 +181,59 @@ inode_close (struct inode *inode)
+@@ -158,21 +181,60 @@ inode_close (struct inode *inode)
return;
/* Release resources if this was the last opener. */
/* Remove from inode list and release lock. */
list_remove (&inode->elem);
+ lock_release (&open_inodes_lock);
-
+
/* 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));
+- }
+ deallocate_inode (inode);
+
free (inode);
}
+ else