Glibc networking support (XCC)
[akaros.git] / Documentation / vfs.txt
index 108b17a..e2f1b8a 100644 (file)
@@ -268,7 +268,7 @@ FSs just need to know how to return a char* for a symname - and not do any of
 the actual link following.  Or any of the other stuff they do.  We'll see if
 that turns out to be an issue or not...
 
-Unlinking
+Unlinking and other Link Stuff
 -------------------------
 Unlinking is just disconnecting a dentry-inode pair from the directory tree, and
 decreasing the inode's i_nlink.  Nothing else happens yet, since we need to keep
@@ -279,3 +279,13 @@ eventually the dentry's refcnt hits 0.  When it does, it normally would be up
 for caching, but we can check nlinks and just drop it.  When that happens, it
 releases the inode, which will see its nlinks is 0.  That will trigger the
 underlying FS to clear out the FS-file.
+
+For directories, you can only have one hardlink to a directory - meaning you are
+only in the directory tree in one place.  However, all of your children can get
+to you by going '../'.  We'll count these as hardlinks too.  This means that
+every child increments its parent-dir's nlink.  This is the on-disk links, not
+to be confused with the dentry->d_parent and kref() business that goes on for
+the in-memory objects.  A directory cannot be removed if nlinks > 1.  If it is
+1, then you can rmdir it, which will set its nlinks to 0.  Then its inode's
+storage space will get freed when it is deleted, like any other inode.  In
+theory.