Journalled UFS

Zhihui Zhang zzhang at cs.binghamton.edu
Sat May 15 12:32:00 PDT 2004


I did a journaling file system called yFS and I have two suggestions:

(1) Do piecemeal logging - only log the portion of metadata that has
    been changed.  SGI's XFS does this.

(2) There is no need to lock inode within a journaling file system. The
    VFS layer already does this.  Be careful with free inode reclamation.

You may want to read our FAST'03 paper on yFS.  Good luck with your work.

-Zhihui

On 14 May 2004, David E. Cross wrote:

> Ok... It was brought to my attention  that someone was asking for this
> again, so I figure its time to put out an update on the status.
> 
> The journalling is done.  There are a couple of fixes that need to be
> applied (rename currently panics), and we are logging too much data for
> inode updates (we currently log all data for any inode update). 
> Additionally we need to move the mutex locks up to the VFS/VOP interface
> layer  (question regarding this will follow).  
> 
> After this its just fsck changes, and we have a register based machine
> state to parse from (opcodes and operands) so it should be downright
> trivial with the exception  of metadata blocks that decame data blocks. 
> I have a couple of ideas to work around those issues as well).
> 
> Performance?  Well, its better than softupdates.  But some of the
> changes we make _may_ change that.  We'll see.  Also the devel machine
> isn't that hefty (either RAM or CPU).  Also this loses the ability for
> snapshots.
> 
> We have a paper deadline for this in about ~1 month, and I'd like to get
> the rest of this finished up.
> 
> Ok.. now for the mutex questions.  What we are looking to do is have the
> mutexes be dual use.  1) for MP/MT-safeness.  2) for
> re-entrancy/FS-stacking.
> 
> Here's what I want to do:
> 
> VOP/VFS entry point {
>   Aquire Mutex with RECURSION;
>   If first aquire, inc transaction ID; else don't;
> 
>   NORMAL VOP/VFS Dispatch;
> 
>   Release Mutex;
>   if last release && syn_journal Checkpoint_Routine;
> }
> 
> Checkpoint_Routine {
>  Aquire mutex with RECURSION:
>  if first aquire, last_tid=TID;
>  else last_tid=TID-1;
> 
>  Dump_to last_tid;
> 
>  Release mutex;
> }
> 
> I am not sure how to check if we already have a mutex, and if its
> recursion or not vs. the mutex is already aquired but its not "ours".
> suggestions?
> 
> Recursion is important for stackable FSs, things like quotas, vnode
> backed "devices", etc.
> 
> Suggestions?
> 
> -- 
> David E. Cross
> 
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"
> 



More information about the freebsd-fs mailing list