Date: Fri, 14 Mar 2008 17:27:21 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: freebsd-fs@FreeBSD.org Subject: RELENG_7 Coda updates Message-ID: <20080314172047.S85888@fledge.watson.org>
next in thread | raw e-mail | index | archive | help
FYI to Coda users in the 7.x series -- I've MFC'd the last batch of infrastructural cleanups and enhancements to RELENG_7 as of this afternoon. The main goal was to reduce the size of the Coda kernel module implementation by relying on native facilities, such as the namecache; along the way I picked up an access cache similar to the one in the NFS client, smbfs client, and the Linux version of the Coda kernel module. The main remaining issues I'm aware of are: - I still need to MFC the queue(9) conversion and a few other cleanups. - There are known issues with signal handling interrupting upcalls to Venus, and I've actually disabled that in HEAD for the time being, and will likely MFC that disabling to RELENG_7. This code requires revisiting, especially in light of threading, which the code doesn't really take into account properly (taking a process-centric rather than thread-centric view of signals). - getcwd(3) and friends still don't work reliably with Coda, and there are also occasional problems with ".." when going up the tree from one volume to another. - There are reports of issues with the Linux emulator and Coda, which likely come from Coda returning directory data in a format not entirely expected by the Linux emulation code. - The Coda kernel module still requires the Giant lock, and a quick review of the Coda module suggests that it would require some reworking in order to remove that limitation. All but the first are issues I won't be able to look at for some time, but I'm happy to help test, review, and commit submitted patches relating to the Coda kernel module. FYI, I probably will go ahead and garbage collect support for the Coda 5 upcall/downcall protocol at some point before FreeBSD 8.0. Robert N M Watson Computer Laboratory University of Cambridge ---------- Forwarded message ---------- Date: Fri, 14 Mar 2008 17:12:41 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/fs/coda cnode.h coda_namecache.c coda_namecache.h coda_psdev.c coda_subr.c coda_subr.h coda_vnops.c coda_vnops.h src/sys/modules/coda Makefile rwatson 2008-03-14 17:12:41 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/fs/coda cnode.h coda_psdev.c coda_subr.c coda_subr.h coda_vnops.c coda_vnops.h sys/modules/coda Makefile Removed files: (Branch: RELENG_7) sys/fs/coda coda_namecache.c coda_namecache.h Log: Merge cnode.h:1.26, coda_psdev.c:1.44, coda_subr.c:1.36, coda_subr.h:1.12, coda_vnops.c:1.94, coda_vnops.h:1.24, coda_namecache.c:1.26, coda_namecache.h:1.15, Makefile:1.18, from HEAD to RELENG_7: Rather than having the Coda module use its own namecache, use the global VFS namecache, as is done by the Coda module on Linux. Unlike the Coda namecache, the global VFS namecache isn't tagged by credential, so use ore conservative flushing behavior (for now) when CODA_PURGEUSER is issued by Venus. This improves overall integration with the FreeBSD VFS, including allowing __getcwd() to work better, procfs/procstat monitoring, and so on. This improves shell behavior in many cases, and improves ".." handling. It may lead to some slowdown until we've implemented a specific access cache, which should net improve performance, but in the mean time, lookup access control now always goes to Venus, whereas previously it didn't. Revision Changes Path 1.21.2.5 +2 -1 src/sys/fs/coda/cnode.h 1.23.2.3 +0 -700 src/sys/fs/coda/coda_namecache.c (dead) 1.11.2.3 +0 -205 src/sys/fs/coda/coda_namecache.h (dead) 1.39.2.5 +5 -20 src/sys/fs/coda/coda_psdev.c 1.33.2.3 +30 -17 src/sys/fs/coda/coda_subr.c 1.10.2.2 +1 -1 src/sys/fs/coda/coda_subr.h 1.76.2.10 +75 -127 src/sys/fs/coda/coda_vnops.c 1.19.2.5 +1 -1 src/sys/fs/coda/coda_vnops.h 1.17.2.1 +2 -3 src/sys/modules/coda/Makefile ---------- Forwarded message ---------- Date: Fri, 14 Mar 2008 17:14:42 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/conf files rwatson 2008-03-14 17:14:42 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/conf files Log: Merge files:1.1268 from HEAD to RELENG_7: Remove coda_namecache from "options vcoda", it is no longer required. Revision Changes Path 1.1243.2.5 +0 -1 src/sys/conf/files ---------- Forwarded message ---------- Date: Fri, 14 Mar 2008 17:15:12 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/modules/coda5 Makefile rwatson 2008-03-14 17:15:12 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/modules/coda5 Makefile Log: Merge Makefile:1.9 from HEAD to RELENG_7: Remove coda_namecache from coda5 as well. We should probably GC coda5 entirely at this point as coda6 is considered the supported branch. Revision Changes Path 1.8.2.1 +1 -1 src/sys/modules/coda5/Makefile ---------- Forwarded message ---------- Date: Fri, 14 Mar 2008 17:17:01 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/fs/coda cnode.h coda_subr.c coda_vnops.c rwatson 2008-03-14 17:17:01 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/fs/coda cnode.h coda_subr.c coda_vnops.c Log: Merge cnode.h:1.27, coda_subr.c:1.37, coda_vnops.c:1.95 from HEAD to RELENG_7: Implement a rudimentary access cache for the Coda kernel module, modeled on the access cache found in NFS, smbfs, and the Linux coda module. This is a positive access cache of a single entry per file, tracking recently granted rights, but unlike NFS and smbfs, supporting explicit invalidation by the distributed file system. For each cnode, maintain a C_ACCCACHE flag indicating the validity of the cache, and a cached uid and mode tracking recently granted positive access control decisions. Prefer the cache to venus_access() in VOP_ACCESS() if it is valid, and when we must fall back to venus_access(), update the cache. Allow Venus to clear the access cache, either the whole cache on CODA_FLUSH, or just entries for a specific uid on CODA_PURGEUSER. Unlike the Coda module on Linux, we don't flush all entries on a user purge using a generation number, we instead walk present cnodes and clear only entries for the specific user, meaning it is somewhat more expensive but won't hit all users. Since the Coda module is agressive about not keeping around unopened cnodes, the utility of the cache is somewhat limited for files, but works will for directories. We should make Coda less agressive about GCing cnodes in VOP_INACTIVE() in order to improve the effectiveness of in-kernel caching of attributes and access rights. Revision Changes Path 1.21.2.6 +4 -0 src/sys/fs/coda/cnode.h 1.33.2.4 +63 -8 src/sys/fs/coda/coda_subr.c 1.76.2.11 +51 -21 src/sys/fs/coda/coda_vnops.c ---------- Forwarded message ---------- Date: Fri, 14 Mar 2008 17:17:49 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/fs/coda coda_subr.c rwatson 2008-03-14 17:17:49 UTC FreeBSD src repository Modified files: (Branch: RELENG_7) sys/fs/coda coda_subr.c Log: Merge coda_subr.c:1.38 from HEAD to RELENG_7: Update cache flushing behavior in light of recent namecache and access cache improvements: - Flush just access control state on CODA_PURGEUSER, not the full namecache for /coda. - When replacing a fid on a cnode as a result of, e.g., reintegration after offline operation, we no longer need to purge the namecache entries associated with its vnode. Revision Changes Path 1.33.2.5 +0 -7 src/sys/fs/coda/coda_subr.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080314172047.S85888>