aix51-support-20021008
authorHartmut Reuter <reuter@rzg.mpg.de>
Wed, 9 Oct 2002 02:02:47 +0000 (02:02 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 9 Oct 2002 02:02:47 +0000 (02:02 +0000)
aix 5.1 support, not yet ready for prime-time

13 files changed:
src/afs/AIX/osi_vnodeops.c
src/afs/UKERNEL/afs_usrops.c
src/afs/VNOPS/afs_vnop_read.c
src/afs/VNOPS/afs_vnop_remove.c
src/afs/VNOPS/afs_vnop_rename.c
src/afs/afs_daemons.c
src/afs/afs_trace.et
src/cf/osconf.m4
src/config/param.rs_aix51.h [new file with mode: 0644]
src/config/param.rs_aix51_usr.h [new file with mode: 0644]
src/export/export5.exp [new file with mode: 0644]
src/rx/rx_prototypes.h
src/shlibafsrpc/Makefile.in

index 63330be..2a548a6 100644 (file)
@@ -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, 
index 6043a63..63d3cbd 100644 (file)
@@ -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;
index e4475cb..2aa65be 100644 (file)
@@ -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 */
 
index 08d81f4..b4dc2a9 100644 (file)
@@ -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);
 
index 908ad98..9d2bb28 100644 (file)
@@ -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 */
index 175eafd..28c9dce 100644 (file)
@@ -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);
        }
index 2f3f0c2..21c5649 100644 (file)
@@ -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"
index 1010b7a..1cb5431 100644 (file)
@@ -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 (file)
index 0000000..230a27e
--- /dev/null
@@ -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 <afs/afs_sysnames.h>
+
+/* 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 (file)
index 0000000..62d3d1f
--- /dev/null
@@ -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 <afs/afs_sysnames.h>
+
+/*#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 (file)
index 0000000..14a8b3e
--- /dev/null
@@ -0,0 +1,16 @@
+#!/unix
+*
+* $Locker$
+*
+* EXPORT exports
+*
+import_kfunc
+import_kvar
+*
+* Overwrite vanilla system calls
+*
+*osetgroups    syscall
+okioctl                syscall
+
+
+
index 63ff592..12152e9 100644 (file)
@@ -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);
index 75dbef1..8e7ce66 100644 (file)
@@ -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};; \