From: Chaskiel M Grundman Date: Wed, 21 Aug 2002 23:07:52 +0000 (+0000) Subject: darwin-updates-20020821 X-Git-Tag: BP-openafs-rxkad-krb5~10 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=89f411e22c2d63c78cbd52410ca3e15b8aaf1c4a darwin-updates-20020821 should be correct support for 10.2. also updates for 10.1 --- diff --git a/acinclude.m4 b/acinclude.m4 index c360b49..a5f7798 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -292,6 +292,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 0aa14a7..9feda03 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 1959dea..823dd1a 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 852e1c3..ed68243 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 b419ccc..f5a6086 100644 --- a/src/afs/DARWIN/osi_vm.c +++ b/src/afs/DARWIN/osi_vm.c @@ -301,36 +301,38 @@ void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size) #endif } -int osi_VM_Setup(struct vcache *avc) -{ - int error; - struct vnode *vp=AFSTOV(avc); - - if (UBCISVALID(vp) && (avc->states & CStatd)) { - if (!UBCINFOEXISTS(vp) && !ISSET(vp->v_flag, VTERMINATE)) { - osi_vnhold(avc,0); - AFS_GUNLOCK(); - if ((error=ubc_info_init(&avc->v))) { - AFS_GLOCK(); - AFS_RELE(avc); - return error; - } +int osi_VM_Setup(struct vcache *avc, int force) { + int error; + struct vnode *vp=AFSTOV(avc); + + 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; + } #ifndef AFS_DARWIN14_ENV - simple_lock(&avc->v.v_interlock); - if (!ubc_issetflags(&avc->v, UI_HASOBJREF)) + simple_lock(&avc->v.v_interlock); + if (!ubc_issetflags(&avc->v, UI_HASOBJREF)) #ifdef AFS_DARWIN13_ENV - if (ubc_getobject(&avc->v, (UBC_NOREACTIVATE|UBC_HOLDOBJECT))) - panic("VM_Setup: null object"); + if (ubc_getobject(&avc->v, (UBC_NOREACTIVATE|UBC_HOLDOBJECT))) + panic("VM_Setup: null object"); #else (void)_ubc_getobject(&avc->v, 1); /* return value not used */ #endif - simple_unlock(&avc->v.v_interlock); + simple_unlock(&avc->v.v_interlock); #endif - AFS_GLOCK(); - AFS_RELE(avc); - } - if (UBCINFOEXISTS(&avc->v)) - ubc_setsize(&avc->v, avc->m.Length); - } - return 0; + AFS_GLOCK(); + avc->states &= ~CUBCinit; + AFS_RELE(avc); + } + if (UBCINFOEXISTS(&avc->v)) + ubc_setsize(&avc->v, avc->m.Length); + } + return 0; } diff --git a/src/afs/DARWIN/osi_vnodeops.c b/src/afs/DARWIN/osi_vnodeops.c index 769b290..c44ddb9 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 953fb6e..6d903aa 100644 --- a/src/afs/VNOPS/afs_vnop_attrs.c +++ b/src/afs/VNOPS/afs_vnop_attrs.c @@ -224,6 +224,12 @@ int afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *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 fe939fe..5fc2e73 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -513,8 +513,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 CUnlinked 0x00010000 @@ -1036,7 +1040,7 @@ extern struct brequest afs_brs[NBRS]; /* request structures */ #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 e51edc0..ac5fa41 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 15b1b7c..e9e804d 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) */ @@ -622,11 +622,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 07aee48..ba13ea9 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 ee351bf..f476246 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 0723773..fc83995 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 */ @@ -1016,7 +1019,7 @@ int afsi_SetServerIPRank(struct srvAddr *sa, afs_int32 addr, afs_uint32 subnetma } } #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(struct srvAddr *sa, struct in_ifaddr *ifa) { struct sockaddr_in *sin; @@ -1052,6 +1055,65 @@ void afsi_SetServerIPRank(struct srvAddr *sa, struct in_ifaddr *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 @@ -1206,6 +1268,16 @@ static int afs_SetServerPrefs(struct srvAddr *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 228c8b7..2a2d31c 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 0215c85..3c2a6d7 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 4594339..54a8c11 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -1559,6 +1559,9 @@ void afs_ProcessFS(register struct vcache *avc, register struct AFSFetchStatus * #ifdef AFS_LINUX22_ENV vcache2inode(avc); /* Set the inode attr cache */ #endif +#ifdef AFS_DARWIN_ENV + osi_VM_Setup(avc,1); +#endif } /*afs_ProcessFS*/ @@ -1689,7 +1692,7 @@ loop: #endif ReleaseWriteLock(&tvc->lock); #ifdef AFS_DARWIN_ENV - osi_VM_Setup(tvc); + osi_VM_Setup(tvc,0); #endif return tvc; } @@ -1754,9 +1757,6 @@ loop: } ReleaseWriteLock(&tvc->lock); -#ifdef AFS_DARWIN_ENV - osi_VM_Setup(avc); -#endif return tvc; } /*afs_GetVCache*/ @@ -1917,9 +1917,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; } @@ -2474,7 +2471,7 @@ struct vcache *afs_FindVCache(struct VenusFid *afid, afs_int32 *retry, afs_int32 #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 2a76bb2..4a2062e 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 ed05090..a8240b3 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 063807f..a05320d 100644 --- a/src/butc/dump.c +++ b/src/butc/dump.c @@ -101,10 +101,8 @@ 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) -localtime_r(t, tm) - time_t *t; - struct tm *tm; +#if defined(AFS_NT40_ENV) || (defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN60_ENV)) || defined(AFS_SUN4_ENV) +int localtime_r(time_t *t, struct tm *tm) { memcpy(tm, localtime(t), sizeof(struct tm)); } @@ -148,11 +146,8 @@ afs_int32 tc_KEndMargin; char *bufferBlock; /* compute the absolute expiration date */ -afs_int32 -calcExpirationDate(expType, expDate, createTime) - afs_int32 expType; - afs_int32 expDate; - afs_int32 createTime; +afs_int32 calcExpirationDate(afs_int32 expType, afs_int32 expDate, + afs_int32 createTime) { struct ktime_date kd; afs_int32 Add_RelDate_to_Time(); @@ -180,8 +175,7 @@ calcExpirationDate(expType, expDate, createTime) afs_int32 curr_bserver = 0; struct rx_connection *curr_fromconn = (struct rx_connection *)0; -struct rx_connection *Bind(server) - afs_int32 server; +struct rx_connection *Bind(afs_int32 server) { if (curr_fromconn) { if (curr_bserver == server) /* Keep connection if have it */ @@ -211,9 +205,7 @@ struct rx_connection *Bind(server) #define BIGCHUNK 102400 afs_int32 -dumpVolume(curDump, dparamsPtr) - struct tc_dumpDesc *curDump; - struct dumpRock *dparamsPtr; +dumpVolume(struct tc_dumpDesc *curDump, struct dumpRock *dparamsPtr) { struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr; struct dumpNode *nodePtr = dparamsPtr->node; @@ -502,9 +494,7 @@ abort_exit: } afs_int32 -xbsaDumpVolume(curDump, dparamsPtr) - struct tc_dumpDesc *curDump; - struct dumpRock *dparamsPtr; +xbsaDumpVolume(struct tc_dumpDesc *curDump, struct dumpRock *dparamsPtr) { #ifdef xbsa struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr; @@ -801,10 +791,7 @@ abort_exit: * be done for user aborts? */ -afs_int32 -dumpPass(dparamsPtr, passNumber) - struct dumpRock *dparamsPtr; - int passNumber; +afs_int32 dumpPass(struct dumpRock *dparamsPtr, int passNumber) { struct dumpNode *nodePtr = dparamsPtr->node; struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr; @@ -1090,8 +1077,7 @@ error_exit: return(code); } -Dumper(nodePtr) - struct dumpNode *nodePtr; +int Dumper(struct dumpNode *nodePtr) { struct dumpRock dparams; struct butm_tapeInfo tapeInfo; @@ -1354,11 +1340,7 @@ Dumper(nodePtr) * character typed by user, one of r, o or a */ -char -retryPrompt(volumeName, volumeId, taskId) - char *volumeName; - afs_int32 volumeId; - afs_uint32 taskId; +char retryPrompt(char *volumeName, afs_int32 volumeId, afs_uint32 taskId) { afs_int32 start; char ch; @@ -1416,8 +1398,7 @@ again: } /* For testing: it prints the tape label */ -printTapeLabel(tl) - struct butm_tapeLabel *tl; +int printTapeLabel(struct butm_tapeLabel *tl) { printf("Tape Label\n"); printf(" structVersion = %d\n", tl->structVersion); @@ -1437,8 +1418,7 @@ printTapeLabel(tl) * Create a tape structure to be satisfy the backup database * even though we don't really use a tape with XBSA. */ -getXBSATape(dparamsPtr) - struct dumpRock *dparamsPtr; +int getXBSATape(struct dumpRock *dparamsPtr) { struct dumpNode *nodePtr = dparamsPtr->node; struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr; @@ -1476,10 +1456,8 @@ getXBSATape(dparamsPtr) * 1 - prompt regardless */ -getDumpTape(dparamsPtr, interactiveFlag, append) - struct dumpRock *dparamsPtr; - int interactiveFlag; - afs_int32 append; +int getDumpTape(struct dumpRock *dparamsPtr, int interactiveFlag, + afs_int32 append) { struct dumpNode *nodePtr = dparamsPtr->node; struct butm_tapeInfo *tapeInfoPtr = dparamsPtr->tapeInfoPtr; @@ -1822,10 +1800,8 @@ error_exit: return(code); } -makeVolumeHeader(vhptr, dparamsPtr, fragmentNumber) - struct volumeHeader *vhptr; - struct dumpRock *dparamsPtr; - int fragmentNumber; +int makeVolumeHeader(struct volumeHeader *vhptr, struct dumpRock *dparamsPtr, + int fragmentNumber) { struct dumpNode *nodePtr = dparamsPtr->node; struct tc_dumpDesc *curDump; @@ -1855,8 +1831,8 @@ error_exit: return (code); } -volumeHeader_hton(hostPtr, netPtr) - struct volumeHeader *hostPtr, *netPtr; +int volumeHeader_hton(struct volumeHeader *hostPtr, + struct volumeHeader *netPtr) { struct volumeHeader volHdr; @@ -1883,9 +1859,7 @@ volumeHeader_hton(hostPtr, netPtr) /* database related routines */ -afs_int32 -createDump(dparamsPtr) - struct dumpRock *dparamsPtr; +afs_int32 createDump(struct dumpRock *dparamsPtr) { struct dumpNode *nodePtr = dparamsPtr->node; struct budb_dumpEntry *dumpPtr; @@ -1946,7 +1920,8 @@ createDump(dparamsPtr) * server as the original server and go back to it each time we pass 0 * as the server. */ -afs_int32 InitToServer(afs_int32 taskId, struct butx_transactionInfo *butxInfoP, char *server) +afs_int32 InitToServer(afs_int32 taskId, + struct butx_transactionInfo *butxInfoP, char *server) { static char origserver[BSA_MAX_DESC]; static int init=0; @@ -2000,8 +1975,7 @@ afs_int32 InitToServer(afs_int32 taskId, struct butx_transactionInfo *butxInfoP, /* DeleteDump * */ -DeleteDump(ptr) - struct deleteDumpIf *ptr; +int DeleteDump(struct deleteDumpIf *ptr) { afs_int32 taskId; afs_int32 rc, code=0; diff --git a/src/config/Makefile.ppc_darwin_60.in b/src/config/Makefile.ppc_darwin_60.in new file mode 100644 index 0000000..d032a36 --- /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 5394f49..58e86d4 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 0000000..acaec06 --- /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 0000000..e615381 --- /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 853f303..4828b7c 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 473b95d..f37a6c8 100644 --- a/src/gtx/curseswindows.c +++ b/src/gtx/curseswindows.c @@ -767,7 +767,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; #elif defined(AFS_NBSD_ENV) diff --git a/src/libafs/MakefileProto.DARWIN.in b/src/libafs/MakefileProto.DARWIN.in index 7072345..be61239 100644 --- a/src/libafs/MakefileProto.DARWIN.in +++ b/src/libafs/MakefileProto.DARWIN.in @@ -28,7 +28,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=-I. -I.. -I${TOP_OBJDIR}/src/config ${KINCLUDES} $(DEFINES) $(KDEFS) $(KOPTS) ${DBUG} ${OPTMZ} KINCLUDES=-I${KROOT}/System/Library/Frameworks/Kernel.Framework/Headers 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 0000000..98ab344 --- /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 cbc3739..aeece2d 100644 --- a/src/pinstall/install.c +++ b/src/pinstall/install.c @@ -91,7 +91,9 @@ static struct stat istat, ostat; static int stripcalled = 0; extern int errno; +#if !defined(AFS_DARWIN60_ENV) extern int sys_nerr; +#endif #if !defined(AFS_LINUX20_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV) extern char *sys_errlist[]; #endif diff --git a/src/rx/DARWIN/rx_kmutex.h b/src/rx/DARWIN/rx_kmutex.h index 98fecf6..49557e2 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(); \ @@ -58,6 +80,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 aa04db1..b19dac7 100644 --- a/src/rx/rx_kcommon.c +++ b/src/rx/rx_kcommon.c @@ -364,7 +364,11 @@ void rxi_InitPeerParams(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 @@ -638,7 +642,25 @@ int rxi_GetIFInfo(void) } 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(afs_uint32 addr, struct in_ifaddr **pifad) { @@ -700,6 +722,7 @@ struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct in_ifaddr **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 92cb944..d50ba41 100644 --- a/src/rx/rx_kcommon.h +++ b/src/rx/rx_kcommon.h @@ -61,15 +61,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)) @@ -85,7 +87,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 b8e669c..d40e138 100644 --- a/src/rxgen/rpc_main.c +++ b/src/rxgen/rpc_main.c @@ -98,7 +98,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 b861f3e..0aaeadc 100644 --- a/src/rxkad/rxkad_common.c +++ b/src/rxkad/rxkad_common.c @@ -31,6 +31,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