Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 6 Feb 2001 16:15:45 -0500 (EST)
From:      Zhiui Zhang <zzhang@cs.binghamton.edu>
To:        freebsd-fs@freebsd.org
Subject:   Design a journalled file system
Message-ID:  <Pine.SOL.4.21.0102061544230.6584-100000@opal>

next in thread | raw e-mail | index | archive | help

I am considering the design of a journalled file system in FreeBSD. I
think each transaction corresponds to a file system update operation and
will therefore consists of a list of modified buffers.  The important
thing is that these buffers should not be written to disk until they have
been logged into the log area. To do so, we need to pin these buffers in
memory for a while. The concept should be simple, but I run into a problem
which I have no idea how to solve it:

If you access a lot of files quickly, some vnodes will be reused.  These
vnodes can contain buffers that are still pinned in the memory because of
the write-ahead logging constraints.  After a vnode is gone, we have
no way to recover its buffers. Note that whenever we need a new vnode, we
are in the process of creating a new file. At this point, we can not flush
the buffers to the log area.  The result is a deadlock.

I could make copies of the buffers that are still pinned, but that incurs
memory copy and need buffer headers, which is also a rare resource.

The design is similar to ext3fs of linux (they do not seem to have a vnode
layer and they use device + physical block number instead of vnode +
logical block number to index buffers, which, I guess, means that buffers
can exist after the inode is gone). I know Mckusick has a paper on
journalling FFS, but I just want to know if this design can work or not.

Any ideas?  Thanks for your help!

-Zhihui



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-fs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SOL.4.21.0102061544230.6584-100000>