[Tux3] Patch: Improve new_btree interface, fix lock init

OGAWA Hirofumi hirofumi at mail.parknet.co.jp
Wed Dec 24 17:32:50 PST 2008

Daniel Phillips <phillips at phunq.net> writes:

>> This is incremental patch of this patch.
>> This adds init_btree() to initialize btree. And it calls new
>> ->btree_init() method to initialize per btree fields (it is only
>> ->entries_per_leaf currently).
>> Then, this uses it except btree in main(). So, with this, new_btree()
>> allocates new btree, and init_btree initialize ->btree with existing
>> btree.
> I applied both our patches, then took advantage of the opportunity to
> simplify things a little.  Thinking ahead to when inodes do not always
> have btrees, inode initialization does not do any btree initialization,
> except set the entire embedded btree to zero.  The semaphore init that
> started this whole chase is now done in your new init_btree, and btrees
> are initialized only when the persistent object is created or loaded
> from disk.  Now, ops is never NULL: the initialization is always done
> at a point where we know what the ops should be.

It makes the uninitialized inode->btree. kmem_cache_alloc() doesn't
initialize inode at all. I.e. it has old btree.  It may hide bug (in my
thought, to hide bug makes hard to debug much), and it is what I want to
prevent. Because uninitialized btree on memory can still be valid some

For the delayed btree allocation, it was going to define the delayed
btree state explicitly, and I thought we may want to use one of btree
fields to load/create btree (E.g. lock to create btree). We can add it
to delayed btree state.

Anyway, please apply this patch instead.

OGAWA Hirofumi <hirofumi at mail.parknet.co.jp>

diff -puN user/kernel/super.c~inode_init-fix user/kernel/super.c
--- tux3/user/kernel/super.c~inode_init-fix	2008-12-25 09:54:19.000000000 +0900
+++ tux3-hirofumi/user/kernel/super.c	2008-12-25 09:54:19.000000000 +0900
@@ -88,6 +88,7 @@ static struct inode *tux3_alloc_inode(st
 	tuxnode_t *tuxi = kmem_cache_alloc(tux_inode_cachep, GFP_KERNEL);
 	if (!tuxi)
 		return NULL;
+	tuxi->btree = (struct btree){};
 	tuxi->present = 0;
 	tuxi->xcache = NULL;

Tux3 mailing list
Tux3 at tux3.org

More information about the Tux3 mailing list