DragonFly kernel List (threaded) for 2006-05
Re: The Clustering and Userland VFS transport protocol - summary
Well, I hit a hangup. In order for the vnodes to operate well in a
master<->slave environment, vnode operations have to be dispatched
with the vnode unlocked. That is, the locking has to be performed by
the target rather than the originator.
So, for example, instead of calling VOP_READ() with a shared lock on
the vnode held, one would call VOP_READ() with just a vnode ref and
the target VFS would be responsible for locking the vnode for the
Fortunately the really complex locking arrangements... lookup+create,
lookup+delete, lookup+rename, etc, are all target-side operations and
don't have to be modified. But just about everything else does. In
addition, forced unmounts (umount -f) and descriptor revocation (aka
revoke()) will have to be handled completely differently.
On the bright side, the work involved happens to be the same work needed
to make the descriptor and I/O paths MP safe... or at least MP capable.
So it looks like I am going to be doing a bunch of MP-related work before
I can begin work on the userland VFS/CLUSTER coding.