[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
times.
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.
Thanks.
--
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
http://mailman.tux3.org/cgi-bin/mailman/listinfo/tux3
More information about the Tux3
mailing list