From: Hartmut Reuter Date: Wed, 9 Oct 2002 02:02:47 +0000 (+0000) Subject: aix51-support-20021008 X-Git-Tag: openafs-devel-1_3_50~575 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=56e095daea32028fa58a043370e9b7fd9120dd87;p=packages%2Fo%2Fopenafs.git aix51-support-20021008 aix 5.1 support, not yet ready for prime-time --- diff --git a/src/afs/AIX/osi_vnodeops.c b/src/afs/AIX/osi_vnodeops.c index 63330bea9..2a548a6fd 100644 --- a/src/afs/AIX/osi_vnodeops.c +++ b/src/afs/AIX/osi_vnodeops.c @@ -594,8 +594,13 @@ struct ucred *cred; * We map the segment into our address space using the handle returned by vm_create. */ if (!vcp->vmh) { + afs_uint32 tlen = vcp->m.Length; +#ifdef AFS_64BIT_CLIENT + if (vcp->m.Length > afs_vmMappingEnd) + tlen = afs_vmMappingEnd; +#endif /* Consider V_INTRSEG too for interrupts */ - if (error = vms_create(&vcp->segid, V_CLIENT, vcp->v.v_gnode, vcp->m.Length, 0, 0)) { + if (error = vms_create(&vcp->segid, V_CLIENT, vcp->v.v_gnode, tlen, 0, 0)) { ReleaseWriteLock(&vcp->lock); return(EOPNOTSUPP); } @@ -1040,8 +1045,8 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) register afs_int32 code = 0; register int i; afs_int32 blockSize; - afs_size_t fileSize, xfrOffset, offset, old_offset; - afs_int32 xfrSize; + afs_size_t fileSize, xfrOffset, offset, old_offset, xfrSize; + afs_int32 txfrSize; #ifdef AFS_64BIT_CLIENT afs_size_t finalOffset; afs_int32 toffset; @@ -1092,8 +1097,9 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) mixed = 1; finalOffset = xfrOffset + xfrSize; tsize = (afs_size_t) (xfrOffset + xfrSize - afs_vmMappingEnd); + txfrSize = xfrSize; afsio_copy(uiop, &tuio, tvec); - afsio_skip(&tuio, xfrSize - tsize); + afsio_skip(&tuio, txfrSize - tsize); afsio_trim(&tuio, tsize); tuio.afsio_offset = afs_vmMappingEnd; ReleaseReadLock(&vcp->lock); @@ -1106,8 +1112,9 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) ReleaseWriteLock(&vcp->lock); ObtainReadLock(&vcp->lock); if (code) goto fail; - xfrSize = (afs_size_t) (afs_vmMappingEnd - xfrOffset); - afsio_trim(uiop, xfrSize); + xfrSize = afs_vmMappingEnd - xfrOffset; + txfrSize = xfrSize; + afsio_trim(uiop, txfrSize); } else { ReleaseReadLock(&vcp->lock); code = afs_direct_rdwr(vp, uiop, rw, ioflag, credp); @@ -1117,13 +1124,19 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) #endif /* AFS_64BIT_CLIENT */ if (!vcp->vmh) { + afs_uint32 tlen = vcp->m.Length; +#ifdef AFS_64BIT_CLIENT + if (vcp->m.Length > afs_vmMappingEnd) + tlen = afs_vmMappingEnd; +#endif /* Consider V_INTRSEG too for interrupts */ if (code = vms_create(&vcp->segid, V_CLIENT, vcp->v.v_gnode, - vcp->m.Length, 0, 0)) { + tlen, 0, 0)) { goto fail; } vcp->vmh = SRVAL(vcp->segid, 0, 0); } + vcp->v.v_gnode->gn_seg = vcp->segid; if (rw == UIO_READ) { /* don't read past EOF */ if (xfrSize+xfrOffset > fileSize) @@ -1136,9 +1149,10 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) afs_Trace3(afs_iclSetp, CM_TRACE_VMWRITE, ICL_TYPE_POINTER, vcp, ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(xfrOffset), - ICL_TYPE_INT32, xfrSize); + ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(xfrSize)); AFS_GUNLOCK(); - code = vm_move(vcp->segid, toffset, xfrSize, rw, uiop); + txfrSize = xfrSize; + code = vm_move(vcp->segid, toffset, txfrSize, rw, uiop); #else /* AFS_64BIT_CLIENT */ AFS_GUNLOCK(); code = vm_move(vcp->segid, xfrOffset, xfrSize, rw, uiop); @@ -1172,13 +1186,17 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) afs_Trace3(afs_iclSetp, CM_TRACE_VMWRITE, ICL_TYPE_POINTER, vcp, ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(start_offset), - ICL_TYPE_INT32, xfrSize); + ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(xfrSize)); ReleaseReadLock(&vcp->lock); ObtainWriteLock(&vcp->lock,400); vcp->m.Date = osi_Time(); /* Set file date (for ranlib) */ /* extend file */ /* un-protect last page. */ last_page = vcp->m.Length/PAGESIZE; +#ifdef AFS_64BIT_CLIENT + if (vcp->m.Length > afs_vmMappingEnd) + last_page = afs_vmMappingEnd/PAGESIZE; +#endif vm_protectp(vcp->vmh, last_page, 1, FILEKEY); if (xfrSize + xfrOffset > fileSize) { vcp->m.Length = xfrSize+xfrOffset; @@ -1210,7 +1228,7 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) len = xfrSize; if (AFS_CHUNKSIZE(xfrOffset) <= len) - len = AFS_CHUNKSIZE(xfrOffset) - (xfrOffset - offset); + len = (afs_size_t)AFS_CHUNKSIZE(xfrOffset) - (xfrOffset - offset); if (len == xfrSize) { /* All data goes to this one chunk. */ @@ -1219,7 +1237,8 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) #ifdef AFS_64BIT_CLIENT uiop->afsio_offset = xfrOffset; toffset = xfrOffset; - code = vm_move(vcp->segid, toffset, xfrSize, rw, uiop); + txfrSize = xfrSize; + code = vm_move(vcp->segid, toffset, txfrSize, rw, uiop); #else /* AFS_64BIT_CLIENT */ code = vm_move(vcp->segid, xfrOffset, xfrSize, rw, uiop); #endif /* AFS_64BIT_CLIENT */ @@ -1265,8 +1284,8 @@ afs_vm_rdwr(vp, uiop, rw, ioflag, credp) xfrOffset += len; } - first_page = old_offset >> PGSHIFT; - pages = 1 + ((old_offset + (len - 1)) >> PGSHIFT) - first_page; + first_page = (afs_size_t)old_offset >> PGSHIFT; + pages = 1 + (((afs_size_t)old_offset + (len - 1)) >> PGSHIFT) - first_page; afs_Trace3(afs_iclSetp, CM_TRACE_VMWRITE2, ICL_TYPE_POINTER, (afs_int32) vcp, ICL_TYPE_INT32, first_page, @@ -1333,8 +1352,7 @@ afs_direct_rdwr(vp, uiop, rw, ioflag, credp) struct ucred *credp; { register afs_int32 code = 0; - afs_int32 xfrSize; - afs_size_t fileSize, xfrOffset, offset, old_offset; + afs_size_t fileSize, xfrOffset, offset, old_offset, xfrSize; struct vcache *vcp = VTOAFS(vp); afs_int32 save_resid = uiop->afsio_resid; struct vrequest treq; @@ -1370,9 +1388,8 @@ afs_direct_rdwr(vp, uiop, rw, ioflag, credp) ObtainWriteLock(&vcp->lock,400); vcp->m.Date = osi_Time(); /* Set file date (for ranlib) */ /* extend file */ - if (xfrSize + xfrOffset > fileSize) { - vcp->m.Length = xfrSize+xfrOffset; - } + if (xfrSize + xfrOffset > fileSize) + vcp->m.Length = xfrSize + xfrOffset; ReleaseWriteLock(&vcp->lock); } afs_Trace3(afs_iclSetp, CM_TRACE_DIRECTRDWR, diff --git a/src/afs/UKERNEL/afs_usrops.c b/src/afs/UKERNEL/afs_usrops.c index 6043a637e..63d3cbdd0 100644 --- a/src/afs/UKERNEL/afs_usrops.c +++ b/src/afs/UKERNEL/afs_usrops.c @@ -477,7 +477,7 @@ int afs_osi_SleepSig(void *x) return 0; } -void afs_osi_Wakeup(void *x) +int afs_osi_Wakeup(void *x) { int index; osi_wait_t *waitp; diff --git a/src/afs/VNOPS/afs_vnop_read.c b/src/afs/VNOPS/afs_vnop_read.c index e4475cb2f..2aa65be61 100644 --- a/src/afs/VNOPS/afs_vnop_read.c +++ b/src/afs/VNOPS/afs_vnop_read.c @@ -471,7 +471,7 @@ int afs_UFSReadFast(register struct vcache *avc, struct uio *auio, } if ((tdc->stamp == avc->quick.stamp) /* hint matches */ - && ((offDiff = (auio->afsio_offset - avc->quick.minLoc)) >= 0) + && ((offDiff = (afs_size_t)(auio->afsio_offset - avc->quick.minLoc)) >= 0) && (tdc->f.chunkBytes >= auio->afsio_resid + offDiff) && !(tdc->dflags & DFFetching)) { /* fits in chunk */ diff --git a/src/afs/VNOPS/afs_vnop_remove.c b/src/afs/VNOPS/afs_vnop_remove.c index 08d81f407..b4dc2a94d 100644 --- a/src/afs/VNOPS/afs_vnop_remove.c +++ b/src/afs/VNOPS/afs_vnop_remove.c @@ -459,7 +459,7 @@ int afs_remunlink(register struct vcache *avc, register int doit) adp = afs_GetVCache(&dirFid, &treq, NULL, NULL); if (adp) { - tdc = afs_FindDCache(adp, 0); + tdc = afs_FindDCache(adp, (afs_size_t)0); ObtainWriteLock(&adp->lock, 159); if (tdc) ObtainSharedLock(&tdc->lock, 639); diff --git a/src/afs/VNOPS/afs_vnop_rename.c b/src/afs/VNOPS/afs_vnop_rename.c index 908ad981e..9d2bb2865 100644 --- a/src/afs/VNOPS/afs_vnop_rename.c +++ b/src/afs/VNOPS/afs_vnop_rename.c @@ -98,7 +98,7 @@ tagain: else if (andp->fid.Fid.Vnode < aodp->fid.Fid.Vnode) { ObtainWriteLock(&andp->lock,148); /* lock smaller one first */ ObtainWriteLock(&aodp->lock,149); - tdc2 = afs_FindDCache(andp, 0); + tdc2 = afs_FindDCache(andp, (afs_size_t)0); if (tdc2) ObtainWriteLock(&tdc2->lock, 644); tdc1 = afs_GetDCache(aodp, (afs_size_t) 0, areq, &offset, &len, 0); if (tdc1) @@ -114,7 +114,7 @@ tagain: ObtainWriteLock(&tdc1->lock, 646); else code = ENOENT; - tdc2 = afs_FindDCache(andp, 0); + tdc2 = afs_FindDCache(andp, (afs_size_t)0); if (tdc2) ObtainWriteLock(&tdc2->lock, 647); } @@ -332,7 +332,7 @@ tagain: tvc = afs_GetVCache(&fileFid, areq, NULL, (struct vcache*)0); if (tvc && (vType(tvc) == VDIR)) { ObtainWriteLock(&tvc->lock,152); - tdc1 = afs_FindDCache(tvc, 0); + tdc1 = afs_FindDCache(tvc, (afs_size_t)0); if (tdc1) { ObtainWriteLock(&tdc1->lock, 648); ZapDCE(tdc1); /* mark as unknown */ diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index 175eafd4b..28c9dcef7 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -1126,8 +1126,16 @@ afs_BioDaemon (nbiods) if (bp->b_flags & B_PFSTORE) { ObtainWriteLock(&vcp->lock,210); if (vcp->v.v_gnode->gn_mwrcnt) { - if (vcp->m.Length < bp->b_bcount + (u_int)dbtob(bp->b_blkno)) - vcp->m.Length = bp->b_bcount + (u_int)dbtob(bp->b_blkno); + afs_offs_t newlength = + (afs_offs_t) dbtob(bp->b_blkno) + bp->b_bcount; + if (vcp->m.Length < newlength) { + afs_Trace4(afs_iclSetp, CM_TRACE_SETLENGTH, + ICL_TYPE_STRING, __FILE__, + ICL_TYPE_LONG, __LINE__, + ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(vcp->m.Length), + ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(newlength)); + vcp->m.Length = newlength; + } } ReleaseWriteLock(&vcp->lock); } diff --git a/src/afs/afs_trace.et b/src/afs/afs_trace.et index 2f3f0c214..21c564925 100644 --- a/src/afs/afs_trace.et +++ b/src/afs/afs_trace.et @@ -134,7 +134,7 @@ error_table 2 ZCM ec CM_TRACE_FETCH64CODE, "StartRX_FetchData64 for vp 0x%x returned %d" ec CM_TRACE_FETCH64LENG, "FetchData64 for vp 0x%x code = %d, length = (0x%x, 0x%x)" ec CM_TRACE_FETCH64READ, "FetchData64 for vp 0x%x code = %d, length = 0x%x" - ec CM_TRACE_VMWRITE, "afs_vm_rdwr: vp 0x%x offset (0x%x, 0x%x) length 0x%x" + ec CM_TRACE_VMWRITE, "afs_vm_rdwr: vp 0x%x offset (0x%x, 0x%x) length (0x%x, 0x%x)" ec CM_TRACE_VMWRITE2, "afs_vm_rdwr: vp 0x%x first page 0x%x pages %d" ec CM_TRACE_VMSTOREALL, "osi_VM_StoreAllSegments for vp 0x%x call %d" ec CM_TRACE_PARTIALWRITE0, "Partial write currDirty %d maxDirty %d" diff --git a/src/cf/osconf.m4 b/src/cf/osconf.m4 index 1010b7a8b..1cb5431d2 100644 --- a/src/cf/osconf.m4 +++ b/src/cf/osconf.m4 @@ -313,6 +313,7 @@ case $AFS_SYSNAME in TXLIBS="-lcurses" XCFLAGS="-K -D_NO_PROTO -D_NONSTD_TYPES -D_MBI=void" XLIBS="${LIB_AFSDB} -ldl" + SHLIB_LINKER="${MT_CC} -bM:SRE -berok" ;; s390_linux22) diff --git a/src/config/param.rs_aix51.h b/src/config/param.rs_aix51.h new file mode 100644 index 000000000..230a27e15 --- /dev/null +++ b/src/config/param.rs_aix51.h @@ -0,0 +1,76 @@ +/* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http://www.openafs.org/dl/license10.html + */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_AIX_ENV 1 +#define AFS_AIX32_ENV 1 +#define AFS_AIX41_ENV 1 +#define AFS_AIX42_ENV 1 +#define AFS_AIX51_ENV 1 + +#define AFS_64BIT_ENV 1 +#define AFS_64BIT_CLIENT 1 +#define AFS_NAMEI_ENV 1 +#ifdef AFS_NAMEI_ENV +#define AFS_64BIT_IOPS_ENV 1 +#endif +#define BITMAP_LATER 1 +#define FAST_RESTART 1 + +#include + +/* Global lock in AFS part of client. */ +#define AFS_GLOBAL_SUNLOCK 1 +#define AFS_GCPAGS 1 /* if nonzero, garbage collect PAGs */ + +/* File system entry (used if vmount.h doesn't define MNT_AFS */ +#define AFS_MOUNT_AFS 4 +#define AFS_SYSCALL 31 + +/* Machine / Operating system information */ +#define SYS_NAME "rs_aix51" +#define SYS_NAME_ID SYS_NAME_ID_rs_aix51 +#define AFSBIG_ENDIAN 1 +#define RIOS 1 /* POWERseries 6000. (sj/pc) */ +#define AFS_VM_RDWR_ENV 1 /* read/write implemented via VM */ +#define AFS_USE_GETTIMEOFDAY 1 /* use gettimeofday to implement rx clock */ +#define AFS_HAVE_STATVFS 1 /* System supports statvfs */ + +#ifndef _POWER +#define _POWER 1 /* _POWERseries! */ +#endif +#ifndef COMPAT_43 +#define COMPAT_43 +#endif + +/* Extra kernel definitions (from kdefs file) */ +#ifdef _KERNEL +#define AFS_SHORTGID 1 +#define AFS_UIOFMODE 1 +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_fmode uio_fmode +#define afsio_resid uio_resid +#define AFS_UIOSYS UIO_SYSSPACE +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES CLBYTES +#define AFS_MINCHANGE 2 +#define osi_GetTime(x) do {curtime(x); (x)->tv_usec = (x)->tv_usec/1000;} while (0) +#define osi_GTime(x) time /* something for the silly time(0)?? */ +#define AFS_KALLOC kmem_alloc +#define AFS_KFREE kmem_free +#define VATTR_NULL(V) memset((void*)V, -1, sizeof(*(V))) +#define va_nodeid va_serialno +#endif /* !_KERNEL */ +#define AFS_DIRENT +#endif /* AFS_PARAM_H */ diff --git a/src/config/param.rs_aix51_usr.h b/src/config/param.rs_aix51_usr.h new file mode 100644 index 000000000..62d3d1f8a --- /dev/null +++ b/src/config/param.rs_aix51_usr.h @@ -0,0 +1,85 @@ +/* + * Copyright 2000, International Business Machines Corporation and others. + * All Rights Reserved. + * + * This software has been released under the terms of the IBM Public + * License. For details, see the LICENSE file in the top-level source + * directory or online at http://www.openafs.org/dl/license10.html + */ + +#ifndef AFS_PARAM_H +#define AFS_PARAM_H + +#define AFS_64BIT_ENV 1 +#define AFS_64BIT_CLIENT 1 +#define AFS_NAMEI_ENV 1 +#ifdef AFS_NAMEI_ENV +#define AFS_64BIT_IOPS_ENV 1 +#endif +#define BITMAP_LATER 1 +#define FAST_RESTART 1 + +#define AFS_VFS_ENV 1 +/* Used only in vfsck code; is it needed any more???? */ +#define RXK_LISTENER_ENV 1 +#define AFS_USERSPACE_IP_ADDR 1 +#define AFS_GCPAGS 0 /* if nonzero, garbage collect PAGs */ + +#ifdef KERNEL + +#define UKERNEL 1 /* user space kernel */ +#define AFS_ENV 1 +#define AFS_USR_AIX_ENV 1 +#define AFS_USR_AIX41_ENV 1 +#define AFS_USR_AIX42_ENV 1 + +#else /* KERNEL */ + +#define AFS_AIX_ENV 1 +#define AFS_AIX32_ENV 1 +#define AFS_AIX41_ENV 1 +#define AFS_AIX42_ENV 1 + +#endif /* KERNEL */ + +#include + +/*#define AFS_GLOBAL_SUNLOCK 1*/ /* For global locking */ + +#define AFS_3DISPARES 1 /* Utilize the 3 available disk inode 'spares' */ +#define AFS_SYSCALL 105 + +/* File system entry (used if mount.h doesn't define MOUNT_AFS */ +#define AFS_MOUNT_AFS 4 + +/* Machine / Operating system information */ +#define sys_rs_aix42 1 +#define SYS_NAME "rs_aix42" +#define SYS_NAME_ID SYS_NAME_ID_rs_aix42 +#define AFSBIG_ENDIAN 1 +#define AFS_HAVE_FFS 1 /* Use system's ffs. */ +#define AFS_HAVE_STATVFS 0 /* System doesn't support statvfs */ + +/* Extra kernel definitions (from kdefs file) */ +#ifdef KERNEL +#define AFS_UIOFMODE 1 /* Only in afs/afs_vnodeops.c (afs_ustrategy) */ +#define AFS_SYSVLOCK 1 /* sys v locking supported */ +/*#define AFS_USEBUFFERS 1*/ +#define afsio_iov uio_iov +#define afsio_iovcnt uio_iovcnt +#define afsio_offset uio_offset +#define afsio_seg uio_segflg +#define afsio_fmode uio_fmode +#define afsio_resid uio_resid +#define AFS_UIOSYS 1 +#define AFS_UIOUSER UIO_USERSPACE +#define AFS_CLBYTES MCLBYTES +#define AFS_MINCHANGE 2 +#define VATTR_NULL usr_vattr_null +#endif /* KERNEL */ +#define AFS_DIRENT +#ifndef CMSERVERPREF +#define CMSERVERPREF +#endif + +#endif /* AFS_PARAM_H */ diff --git a/src/export/export5.exp b/src/export/export5.exp new file mode 100644 index 000000000..14a8b3e89 --- /dev/null +++ b/src/export/export5.exp @@ -0,0 +1,16 @@ +#!/unix +* +* $Locker$ +* +* EXPORT exports +* +import_kfunc +import_kvar +* +* Overwrite vanilla system calls +* +*osetgroups syscall +okioctl syscall + + + diff --git a/src/rx/rx_prototypes.h b/src/rx/rx_prototypes.h index 63ff5929b..12152e937 100644 --- a/src/rx/rx_prototypes.h +++ b/src/rx/rx_prototypes.h @@ -484,7 +484,7 @@ extern void *afs_osi_Alloc(size_t x); extern void *afs_osi_Alloc_NoSleep(size_t x); extern void afs_osi_Free(void *x, size_t asize); #ifndef afs_osi_Wakeup -extern void afs_osi_Wakeup(void *event); +extern int afs_osi_Wakeup(void *event); #endif #ifndef afs_osi_Sleep extern void afs_osi_Sleep(void *event); diff --git a/src/shlibafsrpc/Makefile.in b/src/shlibafsrpc/Makefile.in index 75dbef1cb..8e7ce6605 100644 --- a/src/shlibafsrpc/Makefile.in +++ b/src/shlibafsrpc/Makefile.in @@ -131,7 +131,7 @@ ${DEST}/lib/libafsrpc.${SHLIB_SUFFIX}: ${DEST}/lib/${LIBAFSRPC} ${LIBAFSRPC}: ${LIBOBJS} case ${SYS_NAME} in \ - rs_aix4*) \ + rs_aix4* | rs_aix5*) \ ${SHLIB_LINKER} -o ${LIBAFSRPC} ${LIBOBJS} -bE:afsrpc.exp ${MT_LIBS};; \ sun*_5*) \ ${SHLIB_LINKER} -h ${LIBAFSRPC} -o ${LIBAFSRPC} ${LIBOBJS} ${MT_LIBS};; \