Date: Sun, 7 Sep 2003 17:03:33 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 37753 for review Message-ID: <200309080003.h8803XnV001436@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=37753 Change 37753 by marcel@marcel_nfs on 2003/09/07 17:02:50 IFC @37752 Affected files ... .. //depot/projects/uart/alpha/alpha/pmap.c#10 integrate .. //depot/projects/uart/coda/cnode.h#2 integrate .. //depot/projects/uart/coda/coda.h#2 integrate .. //depot/projects/uart/coda/coda_namecache.c#2 integrate .. //depot/projects/uart/coda/coda_namecache.h#2 integrate .. //depot/projects/uart/coda/coda_subr.c#2 integrate .. //depot/projects/uart/coda/coda_subr.h#2 integrate .. //depot/projects/uart/coda/coda_venus.c#2 integrate .. //depot/projects/uart/coda/coda_venus.h#2 integrate .. //depot/projects/uart/coda/coda_vfsops.c#2 integrate .. //depot/projects/uart/coda/coda_vfsops.h#2 integrate .. //depot/projects/uart/coda/coda_vnops.c#3 integrate .. //depot/projects/uart/compat/linux/linux_misc.c#5 integrate .. //depot/projects/uart/conf/NOTES#12 integrate .. //depot/projects/uart/conf/options#11 integrate .. //depot/projects/uart/dev/sound/isa/ad1816.c#3 integrate .. //depot/projects/uart/dev/sound/isa/ess.c#3 integrate .. //depot/projects/uart/dev/sound/isa/mss.c#3 integrate .. //depot/projects/uart/dev/sound/isa/sb16.c#3 integrate .. //depot/projects/uart/dev/sound/isa/sb8.c#3 integrate .. //depot/projects/uart/dev/sound/isa/sndbuf_dma.c#2 integrate .. //depot/projects/uart/dev/sound/pci/aureal.c#5 integrate .. //depot/projects/uart/dev/sound/pci/aureal.h#2 integrate .. //depot/projects/uart/dev/sound/pci/emu10k1.c#5 integrate .. //depot/projects/uart/dev/sound/pci/es137x.c#6 integrate .. //depot/projects/uart/dev/sound/pci/maestro.c#5 integrate .. //depot/projects/uart/dev/sound/pci/neomagic-coeff.h#2 integrate .. //depot/projects/uart/dev/sound/pci/neomagic.c#4 integrate .. //depot/projects/uart/dev/sound/pci/neomagic.h#2 integrate .. //depot/projects/uart/dev/sound/pci/solo.c#5 integrate .. //depot/projects/uart/dev/sound/pci/t4dwave.c#5 integrate .. //depot/projects/uart/dev/sound/pci/t4dwave.h#2 integrate .. //depot/projects/uart/dev/sound/pcm/ac97.c#5 integrate .. //depot/projects/uart/dev/sound/pcm/ac97.h#3 integrate .. //depot/projects/uart/dev/sound/pcm/buffer.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/buffer.h#2 integrate .. //depot/projects/uart/dev/sound/pcm/channel.c#3 integrate .. //depot/projects/uart/dev/sound/pcm/channel.h#2 integrate .. //depot/projects/uart/dev/sound/pcm/dsp.c#3 integrate .. //depot/projects/uart/dev/sound/pcm/dsp.h#2 integrate .. //depot/projects/uart/dev/sound/pcm/fake.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/feeder.c#4 integrate .. //depot/projects/uart/dev/sound/pcm/feeder.h#4 integrate .. //depot/projects/uart/dev/sound/pcm/feeder_fmt.c#3 integrate .. //depot/projects/uart/dev/sound/pcm/mixer.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/mixer.h#2 integrate .. //depot/projects/uart/dev/sound/pcm/sndstat.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/sound.c#3 integrate .. //depot/projects/uart/dev/sound/pcm/sound.h#3 integrate .. //depot/projects/uart/dev/sound/pcm/vchan.c#2 integrate .. //depot/projects/uart/dev/sound/pcm/vchan.h#2 integrate .. //depot/projects/uart/dev/uart/uart_cpu.h#10 integrate .. //depot/projects/uart/dev/uart/uart_cpu_alpha.c#5 integrate .. //depot/projects/uart/dev/uart/uart_cpu_amd64.c#3 integrate .. //depot/projects/uart/dev/uart/uart_cpu_i386.c#4 integrate .. //depot/projects/uart/dev/uart/uart_cpu_ia64.c#4 integrate .. //depot/projects/uart/dev/uart/uart_cpu_pc98.c#2 integrate .. //depot/projects/uart/dev/uart/uart_cpu_sparc64.c#12 integrate .. //depot/projects/uart/dev/uart/uart_dev_sab82532.c#27 integrate .. //depot/projects/uart/dev/uart/uart_dev_z8530.c#13 integrate .. //depot/projects/uart/i386/i386/db_interface.c#3 integrate .. //depot/projects/uart/i386/i386/machdep.c#4 integrate .. //depot/projects/uart/i386/isa/clock.c#5 integrate .. //depot/projects/uart/i386/linux/imgact_linux.c#2 integrate .. //depot/projects/uart/ia64/acpica/madt.c#3 integrate .. //depot/projects/uart/ia64/conf/GENERIC#3 integrate .. //depot/projects/uart/ia64/conf/GENERIC.hints#3 integrate .. //depot/projects/uart/ia64/ia64/pmap.c#8 integrate .. //depot/projects/uart/kern/kern_umtx.c#5 integrate .. //depot/projects/uart/modules/Makefile#8 integrate .. //depot/projects/uart/modules/coda/Makefile#2 integrate .. //depot/projects/uart/modules/coda5/Makefile#1 branch .. //depot/projects/uart/modules/uart/Makefile#7 integrate .. //depot/projects/uart/vm/vm_mmap.c#4 integrate Differences ... ==== //depot/projects/uart/alpha/alpha/pmap.c#10 (text+ko) ==== @@ -148,7 +148,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.135 2003/08/28 23:12:28 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/pmap.c,v 1.136 2003/09/07 20:02:38 alc Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2749,23 +2749,30 @@ */ if ((*pte & PG_FOW) == 0) val |= MINCORE_MODIFIED|MINCORE_MODIFIED_OTHER; - /* - * Modified by someone - */ - else if (m->dirty || pmap_is_modified(m)) - val |= MINCORE_MODIFIED_OTHER; + else { + /* + * Modified by someone + */ + vm_page_lock_queues(); + if (m->dirty || pmap_is_modified(m)) + val |= MINCORE_MODIFIED_OTHER; + vm_page_unlock_queues(); + } /* * Referenced by us */ if ((*pte & (PG_FOR | PG_FOE)) == 0) val |= MINCORE_REFERENCED|MINCORE_REFERENCED_OTHER; - - /* - * Referenced by someone - */ - else if ((m->flags & PG_REFERENCED) || pmap_ts_referenced(m)) { - val |= MINCORE_REFERENCED_OTHER; - vm_page_flag_set(m, PG_REFERENCED); + else { + /* + * Referenced by someone + */ + vm_page_lock_queues(); + if ((m->flags & PG_REFERENCED) || pmap_ts_referenced(m)) { + val |= MINCORE_REFERENCED_OTHER; + vm_page_flag_set(m, PG_REFERENCED); + } + vm_page_unlock_queues(); } } return val; ==== //depot/projects/uart/coda/cnode.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * Mellon the rights to redistribute these changes without encumbrance. * * @(#) src/sys/coda/cnode.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ - * $FreeBSD: src/sys/coda/cnode.h,v 1.12 2003/03/06 10:48:03 tjr Exp $ + * $FreeBSD: src/sys/coda/cnode.h,v 1.13 2003/09/07 07:43:09 tjr Exp $ * */ @@ -101,7 +101,7 @@ struct cnode { struct vnode *c_vnode; u_short c_flags; /* flags (see below) */ - ViceFid c_fid; /* file handle */ + CodaFid c_fid; /* file handle */ struct lock c_lock; /* new lock protocol */ struct vnode *c_ovp; /* open vnode pointer */ u_short c_ocount; /* count of openers */ @@ -197,7 +197,7 @@ extern int coda_vmflush(struct cnode *cp); /* cfs_vnodeops.h */ -extern struct cnode *make_coda_node(ViceFid *fid, struct mount *vfsp, short type); +extern struct cnode *make_coda_node(CodaFid *fid, struct mount *vfsp, short type); extern int coda_vnodeopstats_init(void); /* coda_vfsops.h */ ==== //depot/projects/uart/coda/coda.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * Mellon the rights to redistribute these changes without encumbrance. * * @(#) src/sys/coda/coda.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ - * $FreeBSD: src/sys/coda/coda.h,v 1.9 1999/12/29 04:54:30 peter Exp $ + * $FreeBSD: src/sys/coda/coda.h,v 1.10 2003/09/07 07:43:09 tjr Exp $ * */ @@ -41,8 +41,8 @@ #ifndef _CODA_HEADER_ #define _CODA_HEADER_ +#include "opt_coda.h" /* for COMPAT_CODA_5 option */ - /* Catch new _KERNEL defn for NetBSD */ #ifdef __NetBSD__ #include <sys/types.h> @@ -162,59 +162,70 @@ #endif -#ifndef _FID_T_ -#define _FID_T_ 1 -typedef u_long VolumeId; -typedef u_long VnodeId; -typedef u_long Unique_t; -typedef u_long FileVersion; -#endif +#ifdef CODA_COMPAT_5 -#ifndef _VICEFID_T_ -#define _VICEFID_T_ 1 -typedef struct ViceFid { - VolumeId Volume; - VnodeId Vnode; - Unique_t Unique; -} ViceFid; -#endif /* VICEFID */ +typedef struct { + u_long Volume; + u_long Vnode; + u_long Unique; +} CodaFid; +static __inline__ ino_t coda_f2i(CodaFid *fid) +{ + if (!fid) return 0; + return (fid->Unique + (fid->Vnode<<10) + (fid->Volume<<20)); +} -#ifdef __linux__ -static __inline__ ino_t coda_f2i(struct ViceFid *fid) +static __inline__ char * coda_f2s(CodaFid *fid) +{ + static char fid_str [35]; + snprintf (fid_str, 35, "[%lx.%lx.%lx]", fid->Volume, + fid->Vnode, fid->Unique); + return fid_str; +} + +static __inline__ int coda_fid_eq (CodaFid *fid1, CodaFid *fid2) { - if ( ! fid ) - return 0; - if (fid->Vnode == 0xfffffffe || fid->Vnode == 0xffffffff) - return ((fid->Volume << 20) | (fid->Unique & 0xfffff)); - else - return (fid->Unique + (fid->Vnode<<10) + (fid->Volume<<20)); + return (fid1->Volume == fid2->Volume && + fid1->Vnode == fid2->Vnode && + fid1->Unique == fid2->Unique); } - -#else -#define coda_f2i(fid)\ - ((fid) ? ((fid)->Unique + ((fid)->Vnode<<10) + ((fid)->Volume<<20)) : 0) -#endif + +struct coda_cred { + u_int32_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ + u_int32_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ +}; +#else /* CODA_COMPAT_5 */ -#ifndef __BIT_TYPES_DEFINED__ -#define u_int32_t unsigned int -#endif +typedef struct { + u_int32_t opaque[4]; +} CodaFid; +static __inline__ ino_t coda_f2i(CodaFid *fid) +{ + if ( ! fid ) + return 0; + return (fid->opaque[3] ^ (fid->opaque[2]<<10) ^ (fid->opaque[1]<<20) ^ fid->opaque[0]); +} + +static __inline__ char * coda_f2s(CodaFid *fid) + { + static char fid_str [35]; + snprintf (fid_str, 35, "[%x.%x.%x.%x]", fid->opaque[0], + fid->opaque[1], fid->opaque[2], fid->opaque[3]); + return fid_str; + } -#ifndef _VUID_T_ -#define _VUID_T_ -typedef u_int32_t vuid_t; -typedef u_int32_t vgid_t; -#endif /*_VUID_T_ */ +static __inline__ int coda_fid_eq (CodaFid *fid1, CodaFid *fid2) +{ + return (fid1->opaque[0] == fid2->opaque[0] && + fid1->opaque[1] == fid2->opaque[1] && + fid1->opaque[2] == fid2->opaque[2] && + fid1->opaque[3] == fid2->opaque[3]); +} -#ifndef _CODACRED_T_ -#define _CODACRED_T_ -struct coda_cred { - vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, efftve, set, fs uid*/ - vgid_t cr_groupid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ -}; -#endif +#endif /* CODA_COMPAT_5 */ #ifndef _VENUS_VATTR_T_ #define _VENUS_VATTR_T_ @@ -227,8 +238,8 @@ int va_type; /* vnode type (for create) */ u_short va_mode; /* files access mode and type */ short va_nlink; /* number of references to file */ - vuid_t va_uid; /* owner user id */ - vgid_t va_gid; /* owner group id */ + uid_t va_uid; /* owner user id */ + gid_t va_gid; /* owner group id */ long va_fileid; /* file id */ u_quad_t va_size; /* file size in bytes */ long va_blocksize; /* blocksize preferred for i/o */ @@ -244,12 +255,21 @@ #endif +/* structure used by CODA_STATFS for getting cache information from venus */ +struct coda_statfs { + int32_t f_blocks; + int32_t f_bfree; + int32_t f_bavail; + int32_t f_files; + int32_t f_ffree; +}; + /* * Kernel <--> Venus communications. */ #define CODA_ROOT 2 -#define CODA_SYNC 3 +#define CODA_OPEN_BY_FD 3 #define CODA_OPEN 4 #define CODA_CLOSE 5 #define CODA_IOCTL 6 @@ -279,7 +299,8 @@ #define CODA_OPEN_BY_PATH 31 #define CODA_RESOLVE 32 #define CODA_REINTEGRATE 33 -#define CODA_NCALLS 34 +#define CODA_STATFS 34 +#define CODA_NCALLS 35 #define DOWNCALL(opcode) (opcode >= CODA_REPLACE && opcode <= CODA_PURGEFID) @@ -293,21 +314,36 @@ #define CODA_KERNEL_VERSION 0 /* The old venus 4.6 compatible interface */ #define CODA_KERNEL_VERSION 1 -#endif +#endif /* realms/cells */ +#ifdef CODA_COMPAT_5 /* venus_lookup gets an extra parameter to aid windows.*/ #define CODA_KERNEL_VERSION 2 +#else + /* 128-bit fids for realms */ +#define CODA_KERNEL_VERSION 3 +#endif /* * Venus <-> Coda RPC arguments */ +#ifdef CODA_COMPAT_5 struct coda_in_hdr { unsigned long opcode; - unsigned long unique; /* Keep multiple outstanding msgs distinct */ - u_short pid; /* Common to all */ - u_short pgid; /* Common to all */ + unsigned long unique; /* Keep multiple outstanding msgs distinct */ + u_short pid; /* Common to all */ + u_short pgid; /* Common to all */ u_short sid; /* Common to all */ - struct coda_cred cred; /* Common to all */ + struct coda_cred cred; /* Common to all */ +}; +#else +struct coda_in_hdr { + u_int32_t opcode; + u_int32_t unique; /* Keep multiple outstanding msgs distinct */ + pid_t pid; /* Common to all */ + pid_t pgid; /* Common to all */ + uid_t uid; /* Common to all */ }; +#endif /* Really important that opcode and unique are 1st two fields! */ struct coda_out_hdr { @@ -319,7 +355,7 @@ /* coda_root: NO_IN */ struct coda_root_out { struct coda_out_hdr oh; - ViceFid VFid; + CodaFid Fid; }; struct coda_root_in { @@ -332,7 +368,7 @@ /* coda_open: */ struct coda_open_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int flags; }; @@ -346,7 +382,7 @@ /* coda_close: */ struct coda_close_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int flags; }; @@ -357,7 +393,7 @@ /* coda_ioctl: */ struct coda_ioctl_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int cmd; int len; int rwflag; @@ -374,7 +410,7 @@ /* coda_getattr: */ struct coda_getattr_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; }; struct coda_getattr_out { @@ -386,7 +422,7 @@ /* coda_setattr: NO_OUT */ struct coda_setattr_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; struct coda_vattr attr; }; @@ -397,7 +433,7 @@ /* coda_access: NO_OUT */ struct coda_access_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int flags; }; @@ -413,14 +449,14 @@ /* coda_lookup: */ struct coda_lookup_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int name; /* Place holder for data. */ int flags; }; struct coda_lookup_out { struct coda_out_hdr oh; - ViceFid VFid; + CodaFid Fid; int vtype; }; @@ -428,7 +464,7 @@ /* coda_create: */ struct coda_create_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; struct coda_vattr attr; int excl; int mode; @@ -437,7 +473,7 @@ struct coda_create_out { struct coda_out_hdr oh; - ViceFid VFid; + CodaFid Fid; struct coda_vattr attr; }; @@ -445,7 +481,7 @@ /* coda_remove: NO_OUT */ struct coda_remove_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int name; /* Place holder for data. */ }; @@ -456,8 +492,8 @@ /* coda_link: NO_OUT */ struct coda_link_in { struct coda_in_hdr ih; - ViceFid sourceFid; /* cnode to link *to* */ - ViceFid destFid; /* Directory in which to place link */ + CodaFid sourceFid; /* cnode to link *to* */ + CodaFid destFid; /* Directory in which to place link */ int tname; /* Place holder for data. */ }; @@ -469,9 +505,9 @@ /* coda_rename: NO_OUT */ struct coda_rename_in { struct coda_in_hdr ih; - ViceFid sourceFid; + CodaFid sourceFid; int srcname; - ViceFid destFid; + CodaFid destFid; int destname; }; @@ -482,14 +518,14 @@ /* coda_mkdir: */ struct coda_mkdir_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; struct coda_vattr attr; int name; /* Place holder for data. */ }; struct coda_mkdir_out { struct coda_out_hdr oh; - ViceFid VFid; + CodaFid Fid; struct coda_vattr attr; }; @@ -497,7 +533,7 @@ /* coda_rmdir: NO_OUT */ struct coda_rmdir_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int name; /* Place holder for data. */ }; @@ -508,7 +544,7 @@ /* coda_readdir: */ struct coda_readdir_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int count; int offset; }; @@ -522,7 +558,7 @@ /* coda_symlink: NO_OUT */ struct coda_symlink_in { struct coda_in_hdr ih; - ViceFid VFid; /* Directory to put symlink in */ + CodaFid Fid; /* Directory to put symlink in */ int srcname; struct coda_vattr attr; int tname; @@ -535,7 +571,7 @@ /* coda_readlink: */ struct coda_readlink_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; }; struct coda_readlink_out { @@ -548,7 +584,7 @@ /* coda_fsync: NO_OUT */ struct coda_fsync_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; }; struct coda_fsync_out { @@ -558,18 +594,18 @@ /* coda_inactive: NO_OUT */ struct coda_inactive_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; }; /* coda_vget: */ struct coda_vget_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; }; struct coda_vget_out { struct coda_out_hdr oh; - ViceFid VFid; + CodaFid Fid; int vtype; }; @@ -582,75 +618,85 @@ /* CODA_PURGEUSER is a venus->kernel call */ struct coda_purgeuser_out { struct coda_out_hdr oh; +#ifdef CODA_COMPAT_5 struct coda_cred cred; +#else + uid_t uid; +#endif }; /* coda_zapfile: */ /* CODA_ZAPFILE is a venus->kernel call */ struct coda_zapfile_out { struct coda_out_hdr oh; - ViceFid CodaFid; + CodaFid Fid; }; /* coda_zapdir: */ /* CODA_ZAPDIR is a venus->kernel call */ struct coda_zapdir_out { struct coda_out_hdr oh; - ViceFid CodaFid; + CodaFid Fid; }; /* coda_zapnode: */ /* CODA_ZAPVNODE is a venus->kernel call */ struct coda_zapvnode_out { struct coda_out_hdr oh; +#ifdef CODA_COMPAT_5 struct coda_cred cred; - ViceFid VFid; +#endif + CodaFid Fid; }; /* coda_purgefid: */ /* CODA_PURGEFID is a venus->kernel call */ struct coda_purgefid_out { struct coda_out_hdr oh; - ViceFid CodaFid; + CodaFid Fid; }; -/* coda_rdwr: */ -struct coda_rdwr_in { - struct coda_in_hdr ih; - ViceFid VFid; - int rwflag; - int count; - int offset; - int ioflag; - caddr_t data; /* Place holder for data. */ +/* coda_replace: */ +/* CODA_REPLACE is a venus->kernel call */ +struct coda_replace_out { /* coda_replace is a venus->kernel call */ + struct coda_out_hdr oh; + CodaFid NewFid; + CodaFid OldFid; }; -struct coda_rdwr_out { - struct coda_out_hdr oh; - int rwflag; - int count; - caddr_t data; /* Place holder for data. */ +/* coda_open_by_fd: */ +struct coda_open_by_fd_in { + struct coda_in_hdr ih; + CodaFid Fid; + int flags; }; - -/* coda_replace: */ -/* CODA_REPLACE is a venus->kernel call */ -struct coda_replace_out { /* coda_replace is a venus->kernel call */ +struct coda_open_by_fd_out { struct coda_out_hdr oh; - ViceFid NewFid; - ViceFid OldFid; + int fd; + struct file *fh; }; /* coda_open_by_path: */ struct coda_open_by_path_in { struct coda_in_hdr ih; - ViceFid VFid; + CodaFid Fid; int flags; }; struct coda_open_by_path_out { struct coda_out_hdr oh; - int path; + int path; +}; + +/* coda_statfs: NO_IN */ +struct coda_statfs_in { + struct coda_in_hdr ih; +}; + +struct coda_statfs_out { + struct coda_out_hdr oh; + struct coda_statfs stat; }; /* @@ -679,10 +725,10 @@ struct coda_symlink_in coda_symlink; struct coda_readlink_in coda_readlink; struct coda_fsync_in coda_fsync; - struct coda_inactive_in coda_inactive; struct coda_vget_in coda_vget; - struct coda_rdwr_in coda_rdwr; - struct coda_open_by_path_in coda_open_by_path; + struct coda_open_by_fd_in coda_open_by_fd; + struct coda_open_by_path_in coda_open_by_path; + struct coda_statfs_in coda_statfs; }; union outputArgs { @@ -702,9 +748,10 @@ struct coda_zapdir_out coda_zapdir; struct coda_zapvnode_out coda_zapvnode; struct coda_purgefid_out coda_purgefid; - struct coda_rdwr_out coda_rdwr; struct coda_replace_out coda_replace; - struct coda_open_by_path_out coda_open_by_path; + struct coda_open_by_fd_out coda_open_by_fd; + struct coda_open_by_path_out coda_open_by_path; + struct coda_statfs_out coda_statfs; }; union coda_downcalls { @@ -747,15 +794,32 @@ #define CODA_CONTROL ".CONTROL" #define CODA_CONTROLLEN 8 -#define CTL_VOL -1 -#define CTL_VNO -1 -#define CTL_UNI -1 #define CTL_INO -1 #define CTL_FILE "/coda/.CONTROL" +#ifdef CODA_COMPAT_5 +#define CTL_FID { -1, -1, -1 } +#define IS_CTL_FID(fidp) ((fidp)->Volume == -1 &&\ + (fidp)->Vnode == -1 &&\ + (fidp)->Unique == -1) +#define INVAL_FID { 0, 0, 0 } +#else +#define CTL_FID { { -1, -1, -1, -1 } } +#define IS_CTL_FID(fidp) ((fidp)->opaque[0] == -1 &&\ + (fidp)->opaque[1] == -1 &&\ + (fidp)->opaque[2] == -1 &&\ + (fidp)->opaque[3] == -1) +#define INVAL_FID { { 0, 0, 0, 0 } } +#endif + +/* Data passed to mount */ + +#define CODA_MOUNT_VERSION 1 -#define IS_CTL_FID(fidp) ((fidp)->Volume == CTL_VOL &&\ - (fidp)->Vnode == CTL_VNO &&\ - (fidp)->Unique == CTL_UNI) +struct coda_mount_data { + int version; + int fd; /* Opened device */ +}; + #endif ==== //depot/projects/uart/coda/coda_namecache.c#2 (text+ko) ==== @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/coda/coda_namecache.c,v 1.19 2003/06/10 21:21:59 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/coda/coda_namecache.c,v 1.20 2003/09/07 07:43:09 tjr Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -354,10 +354,8 @@ * place it at the head of the lru list. */ CODA_NC_DEBUG(CODA_NC_REMOVE, - myprintf(("coda_nc_remove %s from parent %lx.%lx.%lx\n", - cncp->name, (cncp->dcp)->c_fid.Volume, - (cncp->dcp)->c_fid.Vnode, (cncp->dcp)->c_fid.Unique));) - + myprintf(("coda_nc_remove %s from parent %s\n", + cncp->name, coda_f2s(&cncp->dcp->c_fid))); ) CODA_NC_HSHREM(cncp); CODA_NC_HSHNUL(cncp); /* have it be a null chain */ @@ -385,7 +383,7 @@ */ void coda_nc_zapParentfid(fid, dcstat) - ViceFid *fid; + CodaFid *fid; enum dc_status dcstat; { /* To get to a specific fid, we might either have another hashing @@ -397,11 +395,10 @@ int i; if (coda_nc_use == 0) /* Cache is off */ - return; + return; CODA_NC_DEBUG(CODA_NC_ZAPPFID, - myprintf(("ZapParent: fid 0x%lx, 0x%lx, 0x%lx \n", - fid->Volume, fid->Vnode, fid->Unique)); ) + myprintf(("ZapParent: fid %s\n", coda_f2s(fid))); ) coda_nc_stat.zapPfids++; @@ -416,9 +413,7 @@ cncp != (struct coda_cache *)&coda_nc_hash[i]; cncp = ncncp) { ncncp = cncp->hash_next; - if ((cncp->dcp->c_fid.Volume == fid->Volume) && - (cncp->dcp->c_fid.Vnode == fid->Vnode) && - (cncp->dcp->c_fid.Unique == fid->Unique)) { + if (coda_fid_eq(&(cncp->dcp->c_fid), fid)) { coda_nc_hash[i].length--; /* Used for tuning */ coda_nc_remove(cncp, dcstat); } @@ -432,7 +427,7 @@ */ void coda_nc_zapfid(fid, dcstat) - ViceFid *fid; + CodaFid *fid; enum dc_status dcstat; { /* See comment for zapParentfid. This routine will be used @@ -445,8 +440,7 @@ return; CODA_NC_DEBUG(CODA_NC_ZAPFID, - myprintf(("Zapfid: fid 0x%lx, 0x%lx, 0x%lx \n", - fid->Volume, fid->Vnode, fid->Unique)); ) + myprintf(("Zapfid: fid %s\n", coda_f2s(fid))); ) coda_nc_stat.zapFids++; @@ -455,11 +449,9 @@ cncp != (struct coda_cache *)&coda_nc_hash[i]; cncp = ncncp) { ncncp = cncp->hash_next; - if ((cncp->cp->c_fid.Volume == fid->Volume) && - (cncp->cp->c_fid.Vnode == fid->Vnode) && - (cncp->cp->c_fid.Unique == fid->Unique)) { - coda_nc_hash[i].length--; /* Used for tuning */ - coda_nc_remove(cncp, dcstat); + if (coda_fid_eq(&cncp->cp->c_fid, fid)) { + coda_nc_hash[i].length--; /* Used for tuning */ + coda_nc_remove(cncp, dcstat); } } } @@ -470,7 +462,7 @@ */ void coda_nc_zapvnode(fid, cred, dcstat) - ViceFid *fid; + CodaFid *fid; struct ucred *cred; enum dc_status dcstat; { @@ -478,12 +470,15 @@ want to zap a file with a specific cred from the kernel. We'll leave this one unimplemented. */ + if (coda_nc_use == 0) /* Cache is off */ return; - CODA_NC_DEBUG(CODA_NC_ZAPVNODE, - myprintf(("Zapvnode: fid 0x%lx, 0x%lx, 0x%lx cred %p\n", - fid->Volume, fid->Vnode, fid->Unique, cred)); ) + CODA_NC_DEBUG(CODA_NC_ZAPVNODE, + myprintf(("Zapvnode: fid %s cred %p\n", + coda_f2s(fid), cred)); ) + + } @@ -533,7 +528,7 @@ */ void coda_nc_purge_user(uid, dcstat) - vuid_t uid; + uid_t uid; enum dc_status dcstat; { /* @@ -616,7 +611,8 @@ if (CTOV(cncp->cp)->v_vflag & VV_TEXT) { if (coda_vmflush(cncp->cp)) CODADEBUG(CODA_FLUSH, - myprintf(("coda_nc_flush: (%lx.%lx.%lx) busy\n", cncp->cp->c_fid.Volume, cncp->cp->c_fid.Vnode, cncp->cp->c_fid.Unique)); ) + myprintf(("coda_nc_flush: %s busy\n", + coda_f2s(&cncp->cp->c_fid))); ) } if ((dcstat == IS_DOWNCALL) ==== //depot/projects/uart/coda/coda_namecache.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * Mellon the rights to redistribute these changes without encumbrance. * * @(#) src/sys/coda/coda_namecache.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $ - * $FreeBSD: src/sys/coda/coda_namecache.h,v 1.8 2002/09/22 13:25:57 iedowse Exp $ + * $FreeBSD: src/sys/coda/coda_namecache.h,v 1.9 2003/09/07 07:43:09 tjr Exp $ * */ @@ -140,11 +140,11 @@ extern void coda_nc_enter(struct cnode *, const char *, int, struct ucred *, struct cnode *); extern struct cnode *coda_nc_lookup(struct cnode *, const char *, int, struct ucred *); -extern void coda_nc_zapParentfid(ViceFid *, enum dc_status); -extern void coda_nc_zapfid(ViceFid *, enum dc_status); -extern void coda_nc_zapvnode(ViceFid *, struct ucred *, enum dc_status); +extern void coda_nc_zapParentfid(CodaFid *, enum dc_status); +extern void coda_nc_zapfid(CodaFid *, enum dc_status); +extern void coda_nc_zapvnode(CodaFid *, struct ucred *, enum dc_status); extern void coda_nc_zapfile(struct cnode *, const char *, int); -extern void coda_nc_purge_user(vuid_t, enum dc_status); +extern void coda_nc_purge_user(uid_t, enum dc_status); extern void coda_nc_flush(enum dc_status); extern void print_coda_nc(void); ==== //depot/projects/uart/coda/coda_subr.c#2 (text+ko) ==== @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/coda/coda_subr.c,v 1.23 2003/06/10 21:21:59 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/coda/coda_subr.c,v 1.24 2003/09/07 07:43:09 tjr Exp $"); #include <vcoda.h> @@ -74,9 +74,16 @@ struct cnode *coda_freelist = NULL; struct cnode *coda_cache[CODA_CACHESIZE]; -#define coda_hash(fid) (((fid)->Volume + (fid)->Vnode) & (CODA_CACHESIZE-1)) #define CNODE_NEXT(cp) ((cp)->c_next) -#define ODD(vnode) ((vnode) & 0x1) + +#ifdef CODA_COMPAT_5 +#define coda_hash(fid) \ + (((fid)->Volume + (fid)->Vnode) & (CODA_CACHESIZE-1)) +#define IS_DIR(cnode) (cnode.Vnode & 0x1) +#else +#define coda_hash(fid) (coda_f2i(fid) & (CODA_CACHESIZE-1)) +#define IS_DIR(cnode) (cnode.opaque[2] & 0x1) +#endif /* * Allocate a cnode. @@ -161,15 +168,13 @@ */ struct cnode * coda_find(fid) - ViceFid *fid; + CodaFid *fid; { struct cnode *cp; cp = coda_cache[coda_hash(fid)]; while (cp) { - if ((cp->c_fid.Vnode == fid->Vnode) && - (cp->c_fid.Volume == fid->Volume) && - (cp->c_fid.Unique == fid->Unique) && + if (coda_fid_eq(&(cp->c_fid), fid) && (!IS_UNMOUNTING(cp))) { coda_active++; @@ -218,12 +223,10 @@ #endif >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200309080003.h8803XnV001436>