* 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);
}
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;
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);
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);
#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)
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);
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;
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. */
#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 */
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,
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;
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,
return 0;
}
-void afs_osi_Wakeup(void *x)
+int afs_osi_Wakeup(void *x)
{
int index;
osi_wait_t *waitp;
}
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 */
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);
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)
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);
}
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 */
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);
}
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"
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)
--- /dev/null
+/*
+ * 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 */
--- /dev/null
+/*
+ * 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 */
--- /dev/null
+#!/unix
+*
+* $Locker$
+*
+* EXPORT exports
+*
+import_kfunc
+import_kvar
+*
+* Overwrite vanilla system calls
+*
+*osetgroups syscall
+okioctl syscall
+
+
+
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);
${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};; \