Patch for inode SLIST conversion

Michael Neumann mneumann at ntecs.de
Sun Jan 20 03:43:01 PST 2008


Simon 'corecode' Schubert wrote:
Michael Neumann wrote:
Now, ufs_ihashget doesn't modify the hashtable at all. So why not 
store a "transaction id" in each hash table bucket, which gets 
increased by ufs_ihashins and ufs_ihashrem. Then in ufs_ihashget I 
read in this id *before* calling vget and check afterwards if it has 
changed. If it is unchanged, I can omit a second pass over the linked 
list.
This could be an efficient, but not generic solution.  I was thinking of 
something like this:  Have a generation counter in the tokens.  If you 
release a token and somebody else aquires it, the generation will 
change.  Have a function lwkt_token_stale() to check whether the token 
has been used by somebody else since the last check/aquire.  How does 
that sound? This could be applied to different areas in the kernel which 
use tokens.
You mean to add a generation field to lwkt_token plus a 
current_generation field to lwkt_tokref?

lwkt_token_stale(&lock, &token) would then simply check
for ilock->current_generation == token->generation, and
lwkt_gettoken() would increase the generation. Alternatively
a special lwkt_token_inc() could be used to increase the generation.
Don't know if the overhead is justified. Probably only if it's used
that often.
Regards,

  Michael





More information about the Kernel mailing list