3 -3 Didn't test/explain large files
4 -3 Didn't test/explain file growth
5 -2 Didn't test/explain directories
6 -2 Didn't test/explain cache performance
7 +1...+3 Bonus for demonstrating VM running on file system
14 -5 Doesn't explain synchronization
15 -5 Doesn't explain inode design (e.g. direct, indirect, etc. structure)
16 -5 Doesn't explain block cache structure
17 -5 Doesn't explain read-ahead/write-behind design
20 -1 Gratuitous use of malloc() (e.g. for allocating a list or a lock)
21 -1 Inappropriate use of ASSERT (e.g. to verify that malloc() succeeded)
23 Synchronization and consistency
24 -5 One big lock for entire file system
25 -3 Doesn't mark inode deleted in bitmap when file removed and closed
26 -2 Doesn't mark indirect blocks deleted in bitmap when file removed, closed
27 -5 Keeps copy of inode_disk in inode but doesn't account for it in cache
31 -10 No indirect or doubly indirect blocks of any sort
34 -2 Directories cannot grow
35 +1 Supports Unix-like . and ..
36 +2 Supports recursive directory removal
39 -3 Uses linear search instead of hash table, etc.
40 -2 Poor cache replacement algorithm (not LRU, etc.)
41 -1 Does not prioritize metadata in cache
42 -2 Locks entire cache during I/O
44 Read-Ahead/Write-Behind (max -10)
47 -5 Busy-waiting in write-behind thread
48 -2 Spawns a new thread on every block read
49 +2 Prioritizes real reads over read-ahead
54 -5...-10 Fixing code after submission
55 -5 Doesn't compile as submitted
56 +1...+5 Cool test programs etc.