Subject: Re: Log area on-disk for the journal
To: Bill Studenmund <wrstuden@NetBSD.org>
From: Cary G. Gray <Cary.G.Gray@wheaton.edu>
List: tech-kern
Date: 10/23/2006 07:43:45
On Sun, 22 Oct 2006, Bill Studenmund wrote:
...
> I think an inode is the best way for now. I don't think a jffs will have
> the same problem LFS has as files stay put on ffs once allocated. While
> the contents of the journal will change with time, its location won't.
> Thus the only metadata updates would be m & a time. Assuming we desired
> keeping them current (which I don't think we need to bother with).

In order to avoid loss of the journal, you actually need to make sure that 
none of its metadata is rewritten at all--not the block containing its 
inode, nor any indirect blocks.  Failure during a rewrite of those leaves 
you with a corrupted journal, which leaves you with a corrupted 
filesystem.  (My assumption here is that failure during a disk write can 
leave a sector unreadable.)

It is probably necessary to special case the journal inode timestamps, 
too, because writing to the log updates the journal inode timestamps, 
which produces a log write, which updates the timestamps...

Using an inode to track allocation is good--it limits the amount of other 
code that needs to know about the existence of the journal.  But you must 
be sure that nothing threatens future access to the journal.  So once it 
has been set up, it is probably even a good idea to stash a copy of the 
inode in an area of the filesystem that does not get rewritten (except 
when doing off-line operations to reconfigure the filesystem).