From: Chaskiel M Grundman Date: Wed, 21 Aug 2002 23:08:54 +0000 (+0000) Subject: STABLE12-darwin-updates-20020821 X-Git-Tag: openafs-stable-1_2_7~41 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=df6400465966ac56b0785b28ab95d1ce3262ee38;p=packages%2Fo%2Fopenafs.git STABLE12-darwin-updates-20020821 should be correct support for 10.2. also updates for 10.1 (cherry picked from commit 89f411e22c2d63c78cbd52410ca3e15b8aaf1c4a) --- diff --git a/acinclude.m4 b/acinclude.m4 index 4e468e612..a44e4c666 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -260,6 +260,9 @@ else powerpc-apple-darwin5.5*) AFS_SYSNAME="ppc_darwin_14" ;; + powerpc-apple-darwin6.0*) + AFS_SYSNAME="ppc_darwin_60" + ;; sparc-sun-solaris2.5*) AFS_SYSNAME="sun4x_55" ;; diff --git a/src/afs/DARWIN/osi_machdep.h b/src/afs/DARWIN/osi_machdep.h index 0aa14a706..9feda0345 100644 --- a/src/afs/DARWIN/osi_machdep.h +++ b/src/afs/DARWIN/osi_machdep.h @@ -42,7 +42,9 @@ enum vcexcl { EXCL, NONEXCL } ; /* * Time related macros */ +#ifndef AFS_DARWIN60_ENV extern struct timeval time; +#endif #define osi_Time() (time.tv_sec) #define afs_hz hz diff --git a/src/afs/DARWIN/osi_module.c b/src/afs/DARWIN/osi_module.c index 1959deadd..823dd1aab 100644 --- a/src/afs/DARWIN/osi_module.c +++ b/src/afs/DARWIN/osi_module.c @@ -5,7 +5,11 @@ RCSID("$Header$"); #include "../afs/sysincludes.h" #include "../afs/afsincludes.h" +#ifdef AFS_DARWIN60_ENV /* not in Kernel.framework anymore !?! */ +#include +#else #include "../sys/syscall.h" +#endif #include struct vfsconf afs_vfsconf; diff --git a/src/afs/DARWIN/osi_prototypes.h b/src/afs/DARWIN/osi_prototypes.h index 852e1c388..ed68243c1 100644 --- a/src/afs/DARWIN/osi_prototypes.h +++ b/src/afs/DARWIN/osi_prototypes.h @@ -19,5 +19,5 @@ extern int osi_lookupname(char *aname, enum uio_seg seg, int followlink, struct vnode **dirvpp, struct vnode **vpp); /* osi_vm.c */ extern void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size); -extern int osi_VM_Setup(struct vcache *avc); +extern int osi_VM_Setup(struct vcache *avc, int force); #endif /* _OSI_PROTO_H_ */ diff --git a/src/afs/DARWIN/osi_vm.c b/src/afs/DARWIN/osi_vm.c index 4cc6aa4dd..8f924183e 100644 --- a/src/afs/DARWIN/osi_vm.c +++ b/src/afs/DARWIN/osi_vm.c @@ -320,16 +320,18 @@ void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size) { #endif } -int osi_VM_Setup(struct vcache *avc) { +int osi_VM_Setup(struct vcache *avc, int force) { int error; struct vnode *vp=AFSTOV(avc); - if (UBCISVALID(vp) && (avc->states & CStatd)) { + if (UBCISVALID(vp) && ((avc->states & CStatd) || force)) { if (!UBCINFOEXISTS(vp) && !ISSET(vp->v_flag, VTERMINATE)) { osi_vnhold(avc,0); + avc->states |= CUBCinit; AFS_GUNLOCK(); if ((error=ubc_info_init(&avc->v))) { AFS_GLOCK(); + avc->states &= ~CUBCinit; AFS_RELE(avc); return error; } @@ -345,6 +347,7 @@ int osi_VM_Setup(struct vcache *avc) { simple_unlock(&avc->v.v_interlock); #endif AFS_GLOCK(); + avc->states &= ~CUBCinit; AFS_RELE(avc); } if (UBCINFOEXISTS(&avc->v)) diff --git a/src/afs/DARWIN/osi_vnodeops.c b/src/afs/DARWIN/osi_vnodeops.c index 769b290c0..c44ddb98f 100644 --- a/src/afs/DARWIN/osi_vnodeops.c +++ b/src/afs/DARWIN/osi_vnodeops.c @@ -309,6 +309,17 @@ afs_vop_close(ap) osi_FlushPages(avc); /* hold bozon lock, but not basic vnode lock */ afs_BozonUnlock(&avc->pvnLock, avc); AFS_GUNLOCK(); +#ifdef AFS_DARWIN14_ENV + if (UBCINFOEXISTS(ap->a_vp) && ap->a_vp->v_ubcinfo->ui_refcount < 2) { + ubc_hold(ap->a_vp); + if (ap->a_vp->v_ubcinfo->ui_refcount < 2) { + printf("afs: Imminent ui_refcount panic\n"); + } else { + printf("afs: WARNING: ui_refcount panic averted\n"); + } + } +#endif + return code; } @@ -1214,21 +1225,23 @@ afs_vop_print(ap) register struct vnode *vp = ap->a_vp; register struct vcache *vc = VTOAFS(ap->a_vp); int s = vc->states; - char buf[20]; printf("tag %d, fid: %ld.%x.%x.%x, opens %d, writers %d", vp->v_tag, vc->fid.Cell, vc->fid.Fid.Volume, vc->fid.Fid.Vnode, vc->fid.Fid.Unique, vc->opens, vc->execsOrWriters); printf("\n states%s%s%s%s%s", (s&CStatd) ? " statd" : "", (s&CRO) ? " readonly" : "",(s&CDirty) ? " dirty" : "",(s&CMAPPED) ? " mapped" : "", (s&CVFlushed) ? " flush in progress" : ""); - if (UBCISVALID(vp)) - printf("\n UBC: %s%s", - UBCINFOEXISTS(vp) ? "exists, " : "does not exist", + if (UBCISVALID(vp)) { + printf("\n UBC: "); + if (UBCINFOEXISTS(vp)) { + printf("exists, ") ; #ifdef AFS_DARWIN14_ENV - UBCINFOEXISTS(vp) ? - sprintf(buf, "refs %d", vp->v_ubcinfo->ui_refcount),buf : ""); + printf("refs %d%s%s", vp->v_ubcinfo->ui_refcount, + ubc_issetflags(vp, UI_HASOBJREF) ? " HASOBJREF" : "", + ubc_issetflags(vp, UI_WASMAPPED) ? " WASMAPPED" : ""); #else - UBCINFOEXISTS(vp) ? - sprintf(buf, "holdcnt %d", vp->v_ubcinfo->ui_holdcnt),buf : ""); + printf("holdcnt %d", vp->v_ubcinfo->ui_holdcnt); #endif + } else printf("does not exist"); + } printf("\n"); return 0; } diff --git a/src/afs/VNOPS/afs_vnop_attrs.c b/src/afs/VNOPS/afs_vnop_attrs.c index 32157ff3e..a0bd65644 100644 --- a/src/afs/VNOPS/afs_vnop_attrs.c +++ b/src/afs/VNOPS/afs_vnop_attrs.c @@ -219,6 +219,12 @@ afs_getattr(OSI_VC_ARG(avc), attrs, acred) return code; } #endif +#if defined(AFS_DARWIN_ENV) + if (avc->states & CUBCinit) { + code = afs_CopyOutAttrs(avc, attrs); + return code; + } +#endif #if defined(AFS_SUN_ENV) || defined(AFS_ALPHA_ENV) || defined(AFS_SUN5_ENV) afs_BozonLock(&avc->pvnLock, avc); diff --git a/src/afs/afs.h b/src/afs/afs.h index 210544d7c..4fb486b31 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -497,8 +497,12 @@ struct SimpleLocks { #ifdef AFS_OSF_ENV #define CWired 0x00000800 /* OSF hack only */ #else +#ifdef AFS_DARWIN_ENV +#define CUBCinit 0x00000800 +#else #define CWRITE_IGN 0x00000800 /* Next OS hack only */ #endif +#endif #define CUnique 0x00001000 /* vc's uniquifier - latest unifiquier for fid */ #define CForeign 0x00002000 /* this is a non-afs vcache */ #define CHasPages 0x00004000 @@ -1036,7 +1040,7 @@ extern int afs_DynrootVOPRemove(); #else #ifdef AFS_DARWIN_ENV #define afs_VerifyVCache(avc, areq) \ - (((avc)->states & CStatd) ? (osi_VM_Setup(avc), 0) : \ + (((avc)->states & CStatd) ? (osi_VM_Setup(avc, 0), 0) : \ afs_VerifyVCache2((avc),areq)) #else #define afs_VerifyVCache(avc, areq) \ diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c index 95855aff1..90540117b 100644 --- a/src/afs/afs_analyze.c +++ b/src/afs/afs_analyze.c @@ -27,7 +27,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_FBSD_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif #endif /* !UKERNEL */ diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index ba600f4d5..1305fafca 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -21,7 +21,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_DARWIN60_ENV) #include "netinet/in_var.h" #endif #endif /* !defined(UKERNEL) */ @@ -618,11 +618,19 @@ long parm, parm2, parm3, parm4, parm5, parm6; } #else /* AFS_USERSPACE_IP_ADDR */ struct ifnet *tifnp; +#ifdef AFS_DARWIN60_ENV + struct ifaddr *tifadp = (struct ifaddr *) 0; +#else struct in_ifaddr *tifadp = (struct in_ifaddr *) 0; +#endif extern struct ifnet *rxi_FindIfnet(); tifnp = rxi_FindIfnet(parm2, &tifadp); /* make iterative */ if (tifnp && tifadp) { +#ifdef AFS_DARWIN60_ENV + mask = ((struct sockaddr_in *)tifadp->ifa_netmask)->sin_addr.s_addr; +#else mask = tifadp->ia_subnetmask; +#endif } else { code = -1; } diff --git a/src/afs/afs_cell.c b/src/afs/afs_cell.c index be0cadfce..e00e6548e 100644 --- a/src/afs/afs_cell.c +++ b/src/afs/afs_cell.c @@ -25,7 +25,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* ! ASF_HPUX110_ENV */ #endif /* !defined(UKERNEL) */ diff --git a/src/afs/afs_conn.c b/src/afs/afs_conn.c index 8fa12739a..7965d58c1 100644 --- a/src/afs/afs_conn.c +++ b/src/afs/afs_conn.c @@ -25,7 +25,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* ! AFS_HPUX110_ENV */ #endif /* !defined(UKERNEL) */ diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c index 2dc146eb2..b8019a46a 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -44,9 +44,12 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* AFS_HPUX110_ENV */ +#ifdef AFS_DARWIN60_ENV +#include +#endif #endif /* !defined(UKERNEL) */ #include "../afs/afsincludes.h" /* Afs-based standard headers */ @@ -1039,7 +1042,7 @@ afsi_SetServerIPRank(sa, addr, subnetmask) } } #else /* AFS_USERSPACE_IP_ADDR */ -#if (! defined(AFS_SUN5_ENV)) && defined(USEIFADDR) +#if (! defined(AFS_SUN5_ENV)) && !defined(AFS_DARWIN60_ENV) && defined(USEIFADDR) void afsi_SetServerIPRank(sa, ifa) struct srvAddr *sa; @@ -1078,6 +1081,65 @@ afsi_SetServerIPRank(sa, ifa) #endif /* IFF_POINTTOPOINT */ } #endif /*(!defined(AFS_SUN5_ENV)) && defined(USEIFADDR)*/ +#if defined(AFS_DARWIN60_ENV) && defined(USEIFADDR) +#ifndef afs_min +#define afs_min(A,B) ((A)<(B)) ? (A) : (B) +#endif +void +afsi_SetServerIPRank(sa, ifa) + struct srvAddr *sa; + struct ifaddr *ifa; +{ + struct sockaddr_in *sin; + int t; + + afs_uint32 subnetmask, myAddr, myNet, myDstaddr, mySubnet, netMask; + afs_uint32 serverAddr ; + + if (ifa->ifa_addr->sa_family != AF_INET) + return; + sin=(struct sockaddr_in *)ifa->ifa_addr; + myAddr = ntohl(sin->sin_addr.s_addr); /* one of my IP addr in host order */ + serverAddr = ntohl(sa->sa_ip); /* server's IP addr in host order */ + sin=(struct sockaddr_in *)ifa->ifa_netmask; + subnetmask = ntohl(sin->sin_addr.s_addr);/* subnet mask in host order */ + sin=(struct sockaddr_in *)ifa->ifa_dstaddr; + if (sin) + myDstaddr=sin->sin_addr.s_addr; + + if ( IN_CLASSA(myAddr) ) netMask = IN_CLASSA_NET; + else if ( IN_CLASSB(myAddr) ) netMask = IN_CLASSB_NET; + else if ( IN_CLASSC(myAddr) ) netMask = IN_CLASSC_NET; + else netMask = 0; + + myNet = myAddr & netMask; + mySubnet = myAddr & subnetmask; + + if ( (serverAddr & netMask ) == myNet ) { + if ( (serverAddr & subnetmask ) == mySubnet) { + if ( serverAddr == myAddr ) { /* same machine */ + sa->sa_iprank = afs_min(sa->sa_iprank, TOPR); + } else { /* same subnet */ + sa->sa_iprank = afs_min(sa->sa_iprank, HI + ifa->ifa_metric); + } + } else { /* same net */ + sa->sa_iprank = afs_min(sa->sa_iprank, MED + ifa->ifa_metric); + } + } +#ifdef IFF_POINTTOPOINT + /* check for case #4 -- point-to-point link */ + if ((ifa->ia_ifp->if_flags & IFF_POINTOPOINT) && + (myDstaddr == serverAddr))) { + if (ifa->ia_ifp->if_metric >= (MAXDEFRANK - MED)/PPWEIGHT) + t = MAXDEFRANK; + else + t = MED + (PPWEIGHT << ifa->->ifa_metric); + if (sa->sa_iprank > t) + sa->sa_iprank = t; + } +#endif /* IFF_POINTTOPOINT */ +} +#endif /*(!defined(AFS_SUN5_ENV)) && defined(USEIFADDR)*/ #endif /* else AFS_USERSPACE_IP_ADDR */ #ifdef AFS_SGI62_ENV @@ -1235,6 +1297,16 @@ static afs_SetServerPrefs(sa) #ifdef AFS_SGI62_ENV (void) hash_enum(&hashinfo_inaddr, afsi_enum_set_rank, HTF_INET, NULL, (caddr_t)sa, NULL); +#elif defined(AFS_DARWIN60_ENV) + { + struct ifnet *ifn; + struct ifaddr *ifa; + TAILQ_FOREACH(ifn , &ifnet, if_link) { + TAILQ_FOREACH(ifa , &ifn->if_addrhead, ifa_link) { + afsi_SetServerIPRank(sa, ifa); + } + } + } #elif defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV) { struct in_ifaddr *ifa; diff --git a/src/afs/afs_user.c b/src/afs/afs_user.c index 39350634d..ccdb2bbd2 100644 --- a/src/afs/afs_user.c +++ b/src/afs/afs_user.c @@ -25,7 +25,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* ! AFS_HPUX110_ENV */ #endif /* !defined(UKERNEL) */ diff --git a/src/afs/afs_util.c b/src/afs/afs_util.c index cbdca631b..ddc9e9542 100644 --- a/src/afs/afs_util.c +++ b/src/afs/afs_util.c @@ -27,7 +27,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* ! AFS_HPUX110_ENV */ #endif /* !defined(UKERNEL) */ diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index afecfda92..4abcd82cf 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -1531,6 +1531,9 @@ afs_ProcessFS(avc, astat, areq) #ifdef AFS_LINUX22_ENV vcache2inode(avc); /* Set the inode attr cache */ #endif +#ifdef AFS_DARWIN_ENV + osi_VM_Setup(avc,1); +#endif } /*afs_ProcessFS*/ @@ -1672,7 +1675,7 @@ loop: #endif ReleaseWriteLock(&tvc->lock); #ifdef AFS_DARWIN_ENV - osi_VM_Setup(tvc); + osi_VM_Setup(tvc,0); #endif return tvc; } @@ -1737,9 +1740,6 @@ loop: } ReleaseWriteLock(&tvc->lock); -#ifdef AFS_DARWIN_ENV - osi_VM_Setup(avc); -#endif return tvc; } /*afs_GetVCache*/ @@ -1895,9 +1895,6 @@ struct vcache *afs_LookupVCache(struct VenusFid *afid, struct vrequest *areq, afs_ProcessFS(tvc, &OutStatus, areq); ReleaseWriteLock(&tvc->lock); -#ifdef AFS_DARWIN_ENV - osi_VM_Setup(tvc); -#endif return tvc; } @@ -2467,7 +2464,7 @@ struct vcache *afs_FindVCache(struct VenusFid *afid, afs_int32 lockit, #endif #ifdef AFS_DARWIN_ENV if (tvc) - osi_VM_Setup(tvc); + osi_VM_Setup(tvc, 0); #endif return tvc; } /*afs_FindVCache*/ diff --git a/src/afs/afs_volume.c b/src/afs/afs_volume.c index 9642fd81a..d75eb1696 100644 --- a/src/afs/afs_volume.c +++ b/src/afs/afs_volume.c @@ -30,7 +30,7 @@ RCSID("$Header$"); #ifdef AFS_SGI62_ENV #include "../h/hashing.h" #endif -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN60_ENV) #include #endif /* ! AFS_HPUX110_ENV */ #endif /* !defined(UKERNEL) */ diff --git a/src/afsd/afs.rc.darwin b/src/afsd/afs.rc.darwin index ed0509004..a8240b39d 100644 --- a/src/afsd/afs.rc.darwin +++ b/src/afsd/afs.rc.darwin @@ -30,12 +30,20 @@ SMALL="-stat 300 -dcache 100 -daemons 2 -volumes 50" if [ -f $AFSDOPT ]; then OPTIONS=`cat $AFSDOPT` else - OPTIONS=$MEDIUM + OPTIONS="$MEDIUM -fakestat" +fi + +if [ -x /usr/sbin/kmodstat ]; then + KMODSTAT=/usr/sbin/kmodstat +else + if [ -x /usr/sbin/kextstat ]; then + KMODSTAT=/usr/sbin/kextstat +fi fi # Need the commands ps, awk, kill, sleep PATH=${PATH}${PATH:+:}/sbin:/bin:/usr/bin -if kmodstat | grep -q openafs ; then +if $KMODSTAT | grep -q openafs ; then : else if [ -d $VICEETC/afs.kext ]; then @@ -46,7 +54,7 @@ else exit 1 fi fi -if kmodstat | grep -q openafs ; then +if $KMODSTAT | grep -q openafs ; then : else echo "AFS kernel extensions failed to initialize. Skipping AFS startup." diff --git a/src/butc/dump.c b/src/butc/dump.c index 6c038a703..55490c29f 100644 --- a/src/butc/dump.c +++ b/src/butc/dump.c @@ -101,7 +101,7 @@ afs_int32 tapeblocks; /* Number of 16K tape datablocks in buffer (!CONF_XBS else \ sprintf(dumpname, "%s (DumpId %u)", name, dbDumpId); -#if defined(AFS_NT40_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_SUN4_ENV) +#if defined(AFS_NT40_ENV) || (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV)) || defined(AFS_SUN4_ENV) localtime_r(t, tm) time_t *t; struct tm *tm; diff --git a/src/config/Makefile.ppc_darwin_60.in b/src/config/Makefile.ppc_darwin_60.in new file mode 100644 index 000000000..d032a3646 --- /dev/null +++ b/src/config/Makefile.ppc_darwin_60.in @@ -0,0 +1,43 @@ +# Keep macros within each section in sorted order for clean diff displays. +# +# AFS_OSTYPE used to indicate suffixes and os specific subdirectories. +AFS_OSTYPE = DARWIN +# +# +# compilation and link editor flags +XCFLAGS=-no-cpp-precomp +#MT_CFLAGS=-D_REENTRANT -DAFS_PTHREAD_ENV ${XCFLAGS} +#MT_CC=cc +KROOT= +KINCLUDES=-I$(KROOT)/System/Library/Frameworks/Kernel.framework/Headers +#SHARE_LDFLAGS = +LWP_OPTMZ=-O2 +OPTMZ=-O2 +DBG=-g +REGEX_OBJ=regex.o + + +# +# libraries +XLIBS=@LIB_AFSDB@ +TXLIBS=-lncurses +#MTLIBS= +#XLIBELFA= +#XLIBKVM= +# +SHLIB_SUFFIX= +SHLIB_CFLAGS= +# +# programs +AR=ar +AS=as +CC=cc +CP=cp +INSTALL=${TOP_SRCDIR}/pinstall/pinstall +LEX=lex -l +LD= ld +LORDER = lorder +MV=mv +RANLIB=ranlib +RM=rm +STRIP= strip diff --git a/src/config/afs_sysnames.h b/src/config/afs_sysnames.h index 4cdc5e61c..1d2ae36ea 100644 --- a/src/config/afs_sysnames.h +++ b/src/config/afs_sysnames.h @@ -50,6 +50,7 @@ #define SYS_NAME_ID_ppc_darwin_12 503 #define SYS_NAME_ID_ppc_darwin_13 504 #define SYS_NAME_ID_ppc_darwin_14 505 +#define SYS_NAME_ID_ppc_darwin_60 506 #define SYS_NAME_ID_next_mach20 601 #define SYS_NAME_ID_next_mach30 602 diff --git a/src/config/param.ppc_darwin_60.h b/src/config/param.ppc_darwin_60.h new file mode 100644 index 000000000..acaec0641 --- /dev/null +++ b/src/config/param.ppc_darwin_60.h @@ -0,0 +1,65 @@ +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_ENV 1 +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ +#define AFS_PPC_ENV 1 +#define AFS_VFSINCL_ENV 1 + +#include + +#define AFS_DARWIN_ENV +#define AFS_DARWIN13_ENV +#define AFS_DARWIN14_ENV +#define AFS_DARWIN60_ENV +#define AFS_NONFSTRANS +#define AFS_SYSCALL 230 +#define AFS_NAMEI_ENV 1 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS "afs" + +/* Machine / Operating system information */ +#define sys_ppc_darwin_12 1 +#define sys_ppc_darwin_13 1 +#define sys_ppc_darwin_14 1 +#define sys_ppc_darwin_60 1 +#define SYS_NAME "ppc_darwin_60" +#define SYS_NAME_ID SYS_NAME_ID_ppc_darwin_60 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ + +#define AFS_GCPAGS 1 /* if nonzero, garbage collect PAGs */ +#define RXK_LISTENER_ENV 1 + +#ifdef KERNEL +#undef MACRO_BEGIN +#undef MACRO_END +#include +#define AFS_GLOBAL_SUNLOCK 1 +#define AFS_VFS34 1 /* What is VFS34??? */ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_resid uio_resid +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES CLBYTES +#define osi_GetTime(x) microtime(x) +#define AFS_KALLOC(x) kalloc(x) +#define AFS_KFREE(x,y) kfree(x,y) +#define v_count v_usecount +#define v_vfsp v_mount +#define vfs_bsize mnt_stat.f_bsize +#define vfs_fsid mnt_stat.f_fsid +#define va_nodeid va_fileid +#define vfs_vnodecovered mnt_vnodecovered +#define direct dirent +#define vnode_t struct vnode + +#define VN_RELE(vp) vrele(((struct vnode *)(vp))) +#define VN_HOLD(vp) VREF(((struct vnode *)(vp))) + +#endif +#endif /* AFS_PARAM_H */ diff --git a/src/config/param.ppc_darwin_60_usr.h b/src/config/param.ppc_darwin_60_usr.h new file mode 100644 index 000000000..e61538119 --- /dev/null +++ b/src/config/param.ppc_darwin_60_usr.h @@ -0,0 +1,52 @@ +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_VFSINCL_ENV 1 /* NOBODY uses this.... */ +#define AFS_ENV 1 +#define AFS_64BIT_ENV 1 /* Defines afs_int32 as int, not long. */ +#define AFS_PPC_ENV 1 + +#include +#define AFS_USERSPACE_ENV +#define AFS_USR_DARWIN_ENV +#define AFS_USR_DARWIN13_ENV +#define AFS_USR_DARWIN14_ENV +#define AFS_USR_DARWIN60_ENV +#define AFS_NONFSTRANS +#define AFS_SYSCALL 230 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS "afs" + +/* Machine / Operating system information */ +#define sys_ppc_darwin_12 1 +#define sys_ppc_darwin_13 1 +#define sys_ppc_darwin_14 1 +#define sys_ppc_darwin_60 1 +#define SYS_NAME "ppc_darwin_60" +#define SYS_NAME_ID SYS_NAME_ID_ppc_darwin_60 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ + +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE + +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ +#define RXK_LISTENER_ENV 1 + +#define AFS_VFS34 1 /* What is VFS34??? */ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_resid uio_resid +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE +#define VATTR_NULL usr_vattr_null + +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif + +#endif /* AFS_PARAM_H */ diff --git a/src/dir/dir.c b/src/dir/dir.c index d9b1b6d61..401647d67 100644 --- a/src/dir/dir.c +++ b/src/dir/dir.c @@ -34,7 +34,6 @@ RCSID("$Header$"); #if defined(AFS_SUN56_ENV) || defined(AFS_HPUX_ENV) #include "../afs/sysincludes.h" #endif -#ifndef AFS_SGI64_ENV #if defined(AFS_FBSD_ENV) #include "../h/lock.h" #include "../vm/vm.h" @@ -42,6 +41,7 @@ RCSID("$Header$"); #include "../vm/pmap.h" #include "../vm/vm_map.h" #endif /* AFS_FBSD_ENV */ +#if !defined(AFS_SGI64_ENV) && !defined(AFS_DARWIN60_ENV) #include "../h/user.h" #endif /* AFS_SGI64_ENV */ #include "../h/uio.h" diff --git a/src/gtx/curseswindows.c b/src/gtx/curseswindows.c index 8bfd871c3..4c9fa6ea9 100644 --- a/src/gtx/curseswindows.c +++ b/src/gtx/curseswindows.c @@ -758,7 +758,7 @@ int gator_cursesgwin_getdimensions(gwp, aparms) struct gator_cursesgwin *cwp; /*Curses-specific data*/ cwp = (struct gator_cursesgwin *)(gwp->w_data); -#ifdef AFS_DARWIN_ENV +#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV) aparms->maxx = cwp->wp->maxx; aparms->maxy = cwp->wp->maxy; #else diff --git a/src/libafs/MakefileProto.DARWIN.in b/src/libafs/MakefileProto.DARWIN.in index 39141034e..efbc760bb 100644 --- a/src/libafs/MakefileProto.DARWIN.in +++ b/src/libafs/MakefileProto.DARWIN.in @@ -46,7 +46,11 @@ AFS_OS_NONFSOBJS = osi_vfsops.o KDEFS= DBUG = DEFINES= -D_KERNEL -DKERNEL -DKERNEL_PRIVATE -DDIAGNOSTIC -DUSE_SELECT -DMACH_USER_API -DMACH_KERNEL + +KOPTS=-no-cpp-precomp -static -fno-common -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float -mlong-branch + KOPTS=-no-precomp -static -fno-common -finline -fno-keep-inline-functions -force_cpusubtype_ALL -msoft-float -mlong-branch + #CFLAGS=-Werror-implicit-function-declaration -I. -I.. ${KINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} #CFLAGS=-framework Kernel -I. -I.. ${KINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} CFLAGS=-I. -I.. -I${TOP_SRCDIR}/config ${KINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} ${OPTMZ} diff --git a/src/libafs/afs.ppc_darwin_60.plist.in b/src/libafs/afs.ppc_darwin_60.plist.in new file mode 100644 index 000000000..98ab34421 --- /dev/null +++ b/src/libafs/afs.ppc_darwin_60.plist.in @@ -0,0 +1,31 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + afs + CFBundleIdentifier + org.openafs.filesystems.afs + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + afs + CFBundlePackageType + KEXT + CFBundleShortVersionString + @VERSION@ + CFBundleSignature + ???? + CFBundleVersion + @VERSION@ + OSBundleLibraries + + com.apple.kernel.bsd + 6.0 + com.apple.kernel.mach + 6.0 + + + diff --git a/src/pinstall/install.c b/src/pinstall/install.c index 33eee3b0d..6a8ffc3a7 100644 --- a/src/pinstall/install.c +++ b/src/pinstall/install.c @@ -86,7 +86,9 @@ RCSID("$Header$"); struct stat istat, ostat; extern int errno; +#if !defined(AFS_DARWIN60_ENV) extern int sys_nerr; +#endif #if !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_FBSD_ENV) extern char *sys_errlist[]; #endif diff --git a/src/rx/DARWIN/rx_kmutex.h b/src/rx/DARWIN/rx_kmutex.h index 530b3ceba..a7700733c 100644 --- a/src/rx/DARWIN/rx_kmutex.h +++ b/src/rx/DARWIN/rx_kmutex.h @@ -35,6 +35,28 @@ */ #define CV_INIT(cv,a,b,c) #define CV_DESTROY(cv) +#ifdef AFS_DARWIN14_ENV +#define CV_WAIT(cv, lck) { \ + int isGlockOwner = ISAFS_GLOCK(); \ + if (isGlockOwner) AFS_GUNLOCK(); \ + MUTEX_EXIT(lck); \ + sleep(cv, PVFS); \ + if (isGlockOwner) AFS_GLOCK(); \ + MUTEX_ENTER(lck); \ + } + +#define CV_TIMEDWAIT(cv,lck,t) { \ + int isGlockOwner = ISAFS_GLOCK(); \ + if (isGlockOwner) AFS_GUNLOCK(); \ + MUTEX_EXIT(lck); \ + tsleep(cv,PVFS, "afs_CV_TIMEDWAIT",t); \ + if (isGlockOwner) AFS_GLOCK(); \ + MUTEX_ENTER(lck); \ + } + +#define CV_SIGNAL(cv) wakeup_one(cv) +#define CV_BROADCAST(cv) wakeup(cv) +#else #define CV_WAIT(cv, lck) { \ int isGlockOwner = ISAFS_GLOCK(); \ if (isGlockOwner) AFS_GUNLOCK(); \ @@ -57,6 +79,7 @@ #define CV_SIGNAL(cv) thread_wakeup_one((event_t)(cv)) #define CV_BROADCAST(cv) thread_wakeup((event_t)(cv)) +#endif typedef struct { struct lock__bsd__ lock; diff --git a/src/rx/rx_kcommon.c b/src/rx/rx_kcommon.c index a8cbde40b..114f4e69f 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -368,7 +368,11 @@ register struct rx_peer *pp; pp->ifMTU = RX_REMOTE_PACKET_SIZE; } #else /* AFS_USERSPACE_IP_ADDR */ +#ifdef AFS_DARWIN60_ENV + struct ifaddr *ifad = (struct ifaddr *) 0; +#else struct in_ifaddr *ifad = (struct in_ifaddr *) 0; +#endif struct ifnet *ifn; /* At some time we need to iterate through rxi_FindIfnet() to find the @@ -645,7 +649,25 @@ int rxi_GetIFInfo() } return different; } +#ifdef AFS_DARWIN60_ENV +/* Returns ifnet which best matches address */ +struct ifnet * +rxi_FindIfnet(addr, pifad) + afs_uint32 addr; + struct ifaddr **pifad; +{ + struct sockaddr_in s; + if (numMyNetAddrs == 0) + (void) rxi_GetIFInfo(); + + s.sin_family=AF_INET; + s.sin_addr.s_addr=addr; + *pifad=ifa_ifwithnet((struct sockaddr *)&s); + done: + return (*pifad ? (*pifad)->ifa_ifp : NULL ); +} +#else /* Returns ifnet which best matches address */ struct ifnet * rxi_FindIfnet(addr, pifad) @@ -710,6 +732,7 @@ rxi_FindIfnet(addr, pifad) done: return (*pifad ? (*pifad)->ia_ifp : NULL ); } +#endif #endif /* else AFS_USERSPACE_IP_ADDR */ #endif /* !SUN5 && !SGI62 */ diff --git a/src/rx/rx_kcommon.h b/src/rx/rx_kcommon.h index 23d48adf1..6f18d52e2 100644 --- a/src/rx/rx_kcommon.h +++ b/src/rx/rx_kcommon.h @@ -57,15 +57,17 @@ typedef unsigned short etap_event_t; #include "../net/route.h" #include "../netinet/in_systm.h" #include "../netinet/ip.h" -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV) #include "../netinet/in_pcb.h" #endif /* ! AFS_HPUX110_ENV && ! AFS_LINUX22_ENV */ #ifndef AFS_LINUX22_ENV +#if !defined(AFS_DARWIN60_ENV) #include "../netinet/ip_var.h" +#endif #include "../netinet/ip_icmp.h" #endif /* AFS_LINUX22_ENV */ #include "../netinet/udp.h" -#if !defined(AFS_SGI62_ENV) && !defined(AFS_LINUX22_ENV) +#if !defined(AFS_SGI62_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV) #include "../netinet/udp_var.h" #endif #if defined(AFS_HPUX102_ENV) || (defined(AFS_SGI62_ENV) && !defined(AFS_SGI64_ENV)) @@ -81,7 +83,7 @@ struct coda_inode_info {}; #include "../h/file.h" #endif #include "../net/if.h" -#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) +#if !defined(AFS_HPUX110_ENV) && !defined(AFS_LINUX22_ENV) && !defined(AFS_DARWIN60_ENV) #include "../netinet/in_var.h" #endif /* ! AFS_HPUX110_ENV && ! AFS_LINUX22_ENV */ #ifndef AFS_LINUX22_ENV diff --git a/src/rxgen/rpc_main.c b/src/rxgen/rpc_main.c index d1f450c37..09988ca94 100644 --- a/src/rxgen/rpc_main.c +++ b/src/rxgen/rpc_main.c @@ -95,7 +95,7 @@ int debug = 0; static char *cmdname; #ifdef AFS_SUN5_ENV static char CPP[] = "/usr/ccs/lib/cpp"; -#elif defined(AFS_XBSD_ENV) +#elif defined(AFS_XBSD_ENV) || defined(AFS_DARWIN60_ENV) static char CPP[] = "/usr/bin/cpp"; #elif defined(AFS_NT40_ENV) static char CPP[MAXCMDLINE]; diff --git a/src/rxkad/rxkad_common.c b/src/rxkad/rxkad_common.c index 6d24c0ff4..2a0215c31 100644 --- a/src/rxkad/rxkad_common.c +++ b/src/rxkad/rxkad_common.c @@ -29,6 +29,9 @@ RCSID("$Header$"); #ifdef AFS_AIX_ENV #include "../h/systm.h" #endif +#ifdef AFS_DARWIN60_ENV +#include "../h/kernel.h" +#endif #include "../h/types.h" #include "../h/time.h" #ifndef AFS_LINUX22_ENV