Just to follow up on my last comment - I do think a problem remains, even if we 
fully process inodes before data blocks.  Specifically, the inode pool can 
become exhausted during file system restoration.

The below is not the greatest explanation in the world.  Please don't hesitate 
to ask if something is not clear.

Unfortunately, when we discover an inode deletion record, we cannot immediately 
discard the deleted inode and its children.  Instead, we need to remember that 
these items are deleted.  If we were to discard deleted inodes during the 
restore process, that would introduce an ambiguity for subsequently discovered 
children: is the parent deleted, or has it just not been discovered yet?  
Currently, we are allowed to assume that the parent is not discovered yet, 
because we maintain records of deleted inodes.

I have an idea for how to solve this.  I think the core issue here is that the 
contents of an NFFS disk are not in chronological order.  For example, say a 
disk contains 1) a parent directory `P`, 2) a child file `C`, and 3) a deletion 
record for `P`.  NFFS allows these objects to be be located on disk in any 
order relative to one another.  If we had some guarantee that children always 
appear after their parent, and that deletion records are after the inodes they 
delete, then the restore process would not need to remember which inodes were 
deleted.  Instead, NFFS could assume that an orphan's parent has been deleted, 
and could safely discard the orphan.

Currently, NFFS writes an object to any disk area that can accommodate it.  
This is what introduces the uncertainty in the ordering of objects.  Instead, 
NFFS could write to areas in a sequential fashion.  If the object being written 
does not fit in the current area, NFFS would select the next area as its new 
current area.  Nothing new would get written to the first area until it is 
garbage collected, even if it could accommodate a subsequent write.

[ Full content available at: https://github.com/apache/mynewt-nffs/issues/10 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to