A friend and I were discussing zfs the other day and decided it would be fun to port it to Windows! This seems like a good level of challenge without being utterly impossible (we''re both reasonably competent systems programmers). So I''m looking for some information about the vfs driver model. I''ve got a copy of Solaris Internals on the way. Is there any information on the ''net which might help me to get a grip on the filesystem driver model? In particular, I want to know what context a vfs driver runs in. I see a lot of calls like kmem_alloc(..., KM_SLEEP) which have to run in a thread context. How much of zfs runs in a thread context and how much is purely async (i.e. functions cannot block)? In Windows, drivers operate purely asychronously. Calls made into the driver cannot block (but the driver can create kernel worker threads). I don''t mind using worker threads to handle "open" but I''m hoping that I can run the entire "read" and "write" paths asynchronously. Is that going to be possible? Is it going to be easy? :) Is doesn''t seem easy to tell which zfs functions require a thread context just by looking (e.g. is zio_execute non-blocking in all cases?) Is there a reliable way of finding out, other than to go from leaf functions upwards marking functions which call blocking routines? -- This message posted from opensolaris.org