Date: Thu, 22 Jan 1998 00:16:37 +0000 (GMT) From: Terry Lambert <tlambert@primenet.com> To: dyson@freebsd.org Cc: kato@migmatite.eps.nagoya-u.ac.jp, current@freebsd.org Subject: Re: Panic while clustered I/O Message-ID: <199801220016.RAA14275@usr09.primenet.com> In-Reply-To: <199801211201.HAA00803@dyson.iquest.net> from "John S. Dyson" at Jan 21, 98 07:01:17 am
next in thread | previous in thread | raw e-mail | index | archive | help
> The VFS layering is being worked on aggressively right now. Hopefully, > it will be more possible to fix the problem, after I get done with my > part of the layering issues. PHK has started working on it, and I am > working on the VFS/VM interface. Once we all get done with it, I think > that it will be much easier to debug these problems. What exactly are you doing to the VFS layering? Is there anything I can help with? I would *dearly* love to get the following changes in: 1. Enforced use of VOP_GETPAGE/VOP_PUTPAGE in all cases so that there are no buffer list aliases in an FS stack. This will allow nullfs to truly be nullfs. The synchronization failures have been from stacked dirty pages. 2. Hang the advisory lock list off the vnode where the pages live instead of off the in-core inode. 3. Make the advisory locking code veto-based instead of call-down based. This would move much duplicate code out of each FS instance, as well as reducing the number of kernel interfaces each FS depends upon. This is also necessary to support NFS client locking. 4. Do the same for VOP_LOCK. Right now, there is a heck of a lot of imperfectly duplicated functionality in the per-FS VOP_LOCK code. This is a primary source of strange errors. 5. Have the code that allocated the path name buffer free it, so that each FS in a stack does not have to be aware of the internals of the path name buffer. I think this is necessary for Unicode and dual namespace support (NTFS/VFAT/VFAT32/HFS/HPFS). 6. Get rid of the VFS_MOUNTROOT/VFS_MOUNT dichotomy. There is no good reason for an fs mount to know if it's a root mount or not. The root mount and the non-rooot mount vnode overlay code should go to common code, both of which call a single VOP_MOUNT. Right now there are FS types that can not be mounted as your root FS because of this dichotomy. 7. Fix path lookup to actually recurse instead of rewriting the path buffer. This will remove the MAXPATHLEN restriction from a list of relative symlinks. 8. Add a VOP_VALLOC/VOP_VRELE to allow FS's to own their own vnode structures if they want, instead of using a vnode from the global vnode pool. 9. Seperate the VOP_READDIR code into two functions to allow us to get rid of "cookies" and the NFS directory read restart problems for some FS types. 10. Order the contents of the vnodeop_desc array. We can't add new ops not in vfs_op_descs[] in vnode_if.c at runtime, and ordering the array will allow us to directly reference the functions out with the VOP_XXX macro instead packing the argument list into an argument structure on the stack and VCALL using the VOCALL descriptor dereference (saves one function call and much argument munging per VOP_XXX). On a related note: 1. Seperate lock assertion from coelescing in the advisory locking. This is also necessary for NFS client locking so that the lock can be asserted locally, asserted remotely, and deasserted locally if the remote assertion fails. 2. Seperate quotas out into a stacking layer so they will work with all FS's. Is it now the time for this stuff??? Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199801220016.RAA14275>
