|
|
About
TODO
Blog
RSS
Old blog
Projects
Gallery
Notes
Wed, 21 May 2008
iput() locking in POHMELFS.
iput() is a very tricky call in Linux VFS,
besides the fact that it drops inode when its reference counter
reached zero, it also waits until all associated pages are
flushed to storage too.
POHMELFS uses singler per network state (network connection structure)
thread, which only reads async replies from the server, so it is possible,
that reply which requres iput() (for example create command
reply) will happend in parallel with object removal, so inode will be deleted,
but yet not freed. When reply is received and iput() called,
it will try to free inode and wait until all associated to its mapping pages
are synced. But page sync happens on reply to another command (consider for
example several writeback transactions), which can not be processed, since thread
is waiting them to be completed. This problem can not be fixed by introducing
multiple threads, since each one can be exactly in the same situation simultaneously.
In turn we should not allow to grab inode and free it in the receiving path.
This is ok for writeback transactions, since inode can not be freed until pages are synced,
so just by holding pages we are able not to lock, but object creation for empty files
or directories does not have pages attached, so they have to be synced with special
transaction. There still can be a problem with empty file though - some pages can be
attached and it can be removed while system waits for creation transaction complete,
but actually we do not need to know about that - we shuold not grab inode it all,
since transaction already contains all needed into, namely inode number, so we can lookup
inode (if it still exist) and mark it as created without need for lock-prone grab/put.
This bit took me last three days, during which POHMELFS moved to non-blocking receiving and
timeout-based sending (and returned back), it got scanning 'watchdog' which resends trasactions
if they were not acked after some time and eventually dropes them if they still does not get
a reply, POHMELFS got couple of new operations supported and likely something else to existing set
of features implemented to date (full transaction support for all operations
and data and metadata coherency protool were added for the next release).
New release is scheduled for the end of the week, and there is no readpage transaction support yet...
So, stay tuned!
/devel/fs :: Link / Comments (3)
Things getting worse...
$ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.42 (2007-10-16)
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2007
Type :h and hit Enter for context help.
[1]> (defun test-func () (format t "It's a test func"))
TEST-FUNC
[2]> (test-func)
It's a test func
NIL
[3] (exit)
Bye.
This one has, imho, the less ugly command line... And I'm against SLIME
and Emacs. Also tried SBCL, GNU CL and something else, but likely CLIPS will
stay.
Instead of sleeping (it will be time to wake up soon in Moscow slums) or at least
catching
POHMELFS
bugs (last several days were solely devoted to this task and fair
number of them were fixed as long as some interesting features introduced (probably new),
so likely new release will see the light later this week),
I'm drinking some beer and making first steps into this. So far looks quite new and probably
interesting, but every entrance article about it I read told, that if you are after 25 years old,
it is likely impossible to change something in your perception. I'm after, but think that
it will be fun and probably will become a really good tool for me.
The more I think about it, the more interesting tasks (as long as those I'm already thinking
about like
CAPTCHA) I find...
/devel/other :: Link / Comments (5)
|