]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Merge conflicts
authorSam Hartman <hartmans@debian.org>
Thu, 8 Mar 2001 05:53:43 +0000 (05:53 +0000)
committerSam Hartman <hartmans@debian.org>
Thu, 8 Mar 2001 05:53:43 +0000 (05:53 +0000)
16 files changed:
src/Makefile
src/afs/LINUX/osi_file.c
src/afs/LINUX/osi_misc.c
src/afs/VNOPS/afs_vnop_lookup.c
src/afs/VNOPS/afs_vnop_readdir.c
src/afs/afs_pioctl.c
src/libafs/Makefile.common
src/libafs/MakefileProto.LINUX
src/lwp/lwp.c
src/lwp/preempt.c
src/lwp/process.c
src/rx/rx.c
src/util/dirpath.c
src/util/dirpath.h
src/venus/Makefile
src/vol/partition.c

index 5ab06778b98f8dc47d01810d87016cf9d1d63386..7b7e85cdc57fa233e55d5e3eb297b578674a2910 100644 (file)
@@ -31,7 +31,7 @@ MKDIR_IF_NEEDED=[ -d $$1 ] || mkdir -p $$1
 
 all:
        set ${SYS_NAME}/dest; $(MKDIR_IF_NEEDED)
-       $(MAKE) install "COMPILE_PART1=cd obj; cd" "COMPILE_PART2=; $(MAKE) install SYS_NAME=${SYS_NAME} DESTDIR=`pwd`/${SYS_NAME}/dest/ SRCDIR=`pwd`/${SYS_NAME}/dest/" SYS_NAME=${SYS_NAME} "WASHTOOL=echo No washtool: "
+       $(MAKE) install "COMPILE_PART1=cd obj; cd" "COMPILE_PART2=; $(MAKE) install SYS_NAME=${SYS_NAME} DESTDIR=`pwd`/${SYS_NAME}/dest/ SRCDIR=`pwd`/${SYS_NAME}/dest/" "COMPILE_PART3=; $(MAKE) test SYS_NAME=${SYS_NAME} DESTDIR=`pwd`/${SYS_NAME}/dest/ SRCDIR=`pwd`/${SYS_NAME}/dest/" SYS_NAME=${SYS_NAME} "WASHTOOL=echo No washtool: "
 
 basics:
        -if test -f "${WASHTOOL}"; \
@@ -94,7 +94,7 @@ rxincls: rxobj
        ${COMPILE_PART1} rx ${COMPILE_PART2}
 
 rxtests: rxobj
-       ${COMPILE_PART1} rx ${COMPILE_PART2}
+       ${COMPILE_PART1} rx ${COMPILE_PART3}
 
 fsint: project kfsint
 
@@ -137,8 +137,9 @@ auth: project comerr des lwp rx sys rxkad audit
 ubik: project auth 
        ${COMPILE_PART1} ubik ${COMPILE_PART2}
 
+#      cd obj/ubik; $(MAKE) test SYS_NAME=${SYS_NAME} 
 ubiktests: ubik sys
-       cd obj/ubik; $(MAKE) test SYS_NAME=${SYS_NAME} 
+       ${COMPILE_PART1} ubik ${COMPILE_PART3}
 
 ptserver: project ubik cmd comerr auth audit
        ${COMPILE_PART1} ptserver ${COMPILE_PART2}
@@ -443,7 +444,7 @@ libafs_setup: config minproject export
 # Warning: The next few lines are _extremely_ sensitive to spaces and tabs.
        ${WASHTOOL} object libafs
        case ${SYS_NAME} in \
-       alpha_dux4* ) \
+       alpha_dux* ) \
                MKAFS_OSTYPE=DUX;; \
        hp_ux* ) \
                MKAFS_OSTYPE=HPUX;; \
@@ -474,7 +475,7 @@ libuafs_setup: config minproject export
                MKAFS_OSTYPE=AIX;; \
        sun4x_5* ) \
                MKAFS_OSTYPE=SOLARIS;; \
-       alpha_dux4* ) \
+       alpha_dux* ) \
                MKAFS_OSTYPE=DUX;; \
        sgi_6* ) \
                MKAFS_OSTYPE=IRIX;; \
@@ -521,12 +522,14 @@ links:
        - /bin/rm -rf @sys/dest/* ;
        - /bin/mkdir @sys/obj ;
        echo "Create the obj directories"
+       here=`pwd` ; \
        cd src; \
        for file in `find [!NW]* -type d -print` ; do \
-               /bin/mkdir ../obj/$${file} ; \
+               /bin/mkdir $${here}/obj/$${file} ; \
        done;
        echo "Create the obj file links"
+       here=`pwd` ; \
        cd src; \
        for file in `find [!NW]* -type f -print` ; do \
-               /bin/ln -s `pwd`/$${file} ../obj/$${file} ; \
+               /bin/ln -s `pwd`/$${file} $${here}/obj/$${file} ; \
        done;
index 7f3ed0ffc01782e3305610b6d3246dffd38e87fb..8571795cc8c99d58ee52321f0d19171587e45579 100644 (file)
@@ -104,33 +104,6 @@ osi_UFSClose(afile)
       return 0;
   }
 
-#if defined(AFS_LINUX24_ENV)
-int osi_notify_change(struct dentry * dentry, struct iattr * attr)
-{
-    struct inode *inode = dentry->d_inode;
-    int error;
-    time_t now = CURRENT_TIME;
-    unsigned int ia_valid = attr->ia_valid;
-
-    attr->ia_ctime = now;
-    if (!(ia_valid & ATTR_ATIME_SET))
-       attr->ia_atime = now;
-    if (!(ia_valid & ATTR_MTIME_SET))
-       attr->ia_mtime = now;
-
-    lock_kernel();
-    if (inode && inode->i_op && inode->i_op->setattr)
-       error = inode->i_op->setattr(dentry, attr);
-    else {
-       error = inode_change_ok(inode, attr);
-       if (!error)
-           inode_setattr(inode, attr);
-    }
-    unlock_kernel();
-    return error;
-}
-#endif
-
 osi_UFSTruncate(afile, asize)
     register struct osi_file *afile;
     afs_int32 asize; {
@@ -150,13 +123,18 @@ osi_UFSTruncate(afile, asize)
     MObtainWriteLock(&afs_xosi,321);    
     AFS_GUNLOCK();
     down(&inode->i_sem);
-#if defined(AFS_LINUX24_ENV)
-    newattrs.ia_size = asize;
-    newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-    code = osi_notify_change(&afile->dentry, &newattrs);
-#else
     inode->i_size = newattrs.ia_size = asize;
     newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
+#if defined(AFS_LINUX24_ENV)
+    newattrs.ia_ctime = CURRENT_TIME;
+
+    /* avoid notify_change() since it wants to update dentry->d_parent */
+    lock_kernel();
+    code = inode_change_ok(inode, &newattrs);
+    if (!code)
+       inode_setattr(inode, &newattrs);
+    unlock_kernel();
+#else
     if (inode->i_sb->s_op && inode->i_sb->s_op->notify_change) {
        code = inode->i_sb->s_op->notify_change(&afile->dentry, &newattrs);
     }
index 1478be6a975da52a02b14e6d451e287aee53cf2a..e40af34af5fb0685987df7eda054dd399e4f99f7 100644 (file)
@@ -15,6 +15,9 @@
 #include "../afs/sysincludes.h"
 #include "../afs/afsincludes.h"
 #include "../afs/afs_stats.h"
+#if defined(AFS_LINUX24_ENV)
+#include "../h/smp_lock.h"
+#endif
 
 char *crash_addr = 0; /* Induce an oops by writing here. */
 
@@ -313,16 +316,37 @@ void osi_linux_free_inode_pages(void)
     }
 }
 
+void osi_clear_inode(struct inode *ip)
+{
+    cred_t *credp = crref();
+    struct vcache *vc = (struct vcache*)ip;
+
+#if defined(AFS_LINUX24_ENV)
+    if (atomic_read(&ip->i_count) > 1)
+#else
+    if (ip->i_count > 1)
+#endif
+        printf("afs_put_inode: ino %d (0x%x) has count %d\n", ip->i_ino, ip);
+
+    afs_InactiveVCache(vc, credp);
+#if defined(AFS_LINUX24_ENV)
+    atomic_set(&ip->i_count, 0);
+#else
+    ip->i_count = 0;
+#endif
+    ip->i_nlink = 0; /* iput checks this after calling this routine. */
+    crfree(credp);
+}
+
 /* iput an inode. Since we still have a separate inode pool, we don't want
  * to call iput on AFS inodes, since they would then end up on Linux's
  * inode_unsed list.
  */
 void osi_iput(struct inode *ip)
 {
-    extern void afs_delete_inode(struct inode *ip);
     extern struct vfs *afs_globalVFS;
 
-    
+    AFS_GLOCK();
 #if defined(AFS_LINUX24_ENV)
     if (atomic_read(&ip->i_count) == 0 || atomic_read(&ip->i_count) & 0xffff0000) {
 #else
@@ -343,9 +367,11 @@ void osi_iput(struct inode *ip)
        ip->i_count --;
        if (!ip->i_count)
 #endif
-           afs_delete_inode(ip);
+           osi_clear_inode(ip);
+        AFS_GUNLOCK();
     }
     else { 
+        AFS_GUNLOCK();
        iput(ip);
     }
 }
index aaed884d022ebcf792951644505e4ff024464213..7df8f041d8b23624b966884cd5b1de0ea3d3742d 100644 (file)
@@ -127,7 +127,7 @@ EvalMountPoint(avc, advc, avolpp, areq)
        volnamep = &avc->linkData[1];
        tcell = afs_GetCell(avc->fid.Cell, READ_LOCK);
     }
-    if (!tcell) return ENODEV;
+    if (!tcell) return ENOENT;
 
     mtptCell = tcell->cell;               /* The cell for the mountpoint */
     if (tcell->lcellp) {
@@ -182,7 +182,7 @@ EvalMountPoint(avc, advc, avolpp, areq)
        }
     }
   
-    if (!tvp) return ENOENT;       /* Couldn't find the volume */
+    if (!tvp) return ENODEV;       /* Couldn't find the volume */
 
     /* Don't cross mountpoint from a BK to a BK volume */
     if ((avc->states & CBackup) && (tvp->states & VBackup)) {
@@ -198,7 +198,7 @@ EvalMountPoint(avc, advc, avolpp, areq)
        tfid.Cell       = tvp->cell;
        afs_PutVolume(tvp, WRITE_LOCK);               /* release old volume */
        tvp = afs_GetVolume(&tfid, areq, WRITE_LOCK); /* get the new one */
-       if (!tvp) return ENOENT;                      /* oops, can't do it */
+       if (!tvp) return ENODEV;                      /* oops, can't do it */
     }
 
     if (avc->mvid == 0)
@@ -1162,6 +1162,12 @@ afs_lookup(adp, aname, avcp, acred)
            ObtainWriteLock(&tvc->lock,133);
            code = EvalMountPoint(tvc, adp, &tvolp, &treq);
            ReleaseWriteLock(&tvc->lock);
+
+           if (code) {
+               if (tvolp) afs_PutVolume(tvolp, WRITE_LOCK);
+               goto done;
+           }
+
            /* next, we want to continue using the target of the mt point */
            if (tvc->mvid && (tvc->states & CMValid)) {
              struct vcache *uvc;
index cd3bf6d87c7d60410709f580ebdb8a8cd760a893..54a70a3319cac5f6009eb60a9f07d08be79d5860 100644 (file)
@@ -641,11 +641,7 @@ tagain:
                }
 #else /* AFS_HPUX_ENV */
                code = afs_readdir_move(ode, avc, auio, o_slen,
-#if defined(AFS_SUN5_ENV)
-                                       len, origOffset);
-#else
                                        auio->afsio_resid, origOffset);
-#endif
 #endif /* AFS_HPUX_ENV */
                /* this next line used to be AFSVFS40 or AIX 3.1, but is
                 * really generic */
index 314f61788433e263f15ac355dc541a80406362a2..d4d00375e8a2ec252e67e18b176f7f437e44a82f 100644 (file)
@@ -61,6 +61,7 @@ static int PSetSPrefs33(), PStoreBehind(), PGCPAGs();
 static int PGetCPrefs(), PSetCPrefs(); /* client network addresses */
 static int PGetInitParams(), PFlushMount(), PRxStatProc(), PRxStatPeer();
 static int PGetRxkcrypt(), PSetRxkcrypt();
+static int PPrefetchFromTape(), PResidencyCmd();
 int PExportAfs();
 
 static int HandleClientContext(struct afs_ioctl *ablob, int *com, struct AFS_UCRED **acred, struct AFS_UCRED *credp);
@@ -134,6 +135,8 @@ static int (*(pioctlSw[]))() = {
   PNoop,                       /* 63 -- arla: print xfs status */
   PNoop,                       /* 64 -- arla: force cache check */
   PNoop,                       /* 65 -- arla: break callback */
+  PPrefetchFromTape,            /* 66 -- MR-AFS: prefetch file from tape */
+  PResidencyCmd,                /* 67 -- MR-AFS: generic commnd interface */
 };
 
 #define PSetClientContext 99   /*  Special pioctl to setup caller's creds  */
@@ -3555,3 +3558,163 @@ out:
     return code;
 }
 
+static PPrefetchFromTape(avc, afun, areq, ain, aout, ainSize, aoutSize)
+  struct vcache *avc;
+  int afun;
+  struct vrequest *areq;
+  char *ain, *aout;
+  afs_int32 ainSize;
+  afs_int32 *aoutSize;  /* set this */
+{
+    register afs_int32 code, code1;
+    afs_int32 bytes;
+    struct conn *tc;
+    struct rx_call *tcall;
+    struct AFSVolSync tsync;
+    struct AFSFetchStatus OutStatus;
+    struct AFSCallBack CallBack;
+    struct VenusFid tfid;
+    struct AFSFid *Fid;
+    struct vcache *tvc;
+    XSTATS_DECLS;
+
+    AFS_STATCNT(PSetAcl);
+    if (!avc)
+      return EINVAL;
+
+    if (ain && (ainSize == 3 * sizeof(afs_int32)))
+        Fid = (struct AFSFid *) ain;
+    else
+        Fid = &avc->fid.Fid;
+    tfid.Cell = avc->fid.Cell;
+    tfid.Fid.Volume = Fid->Volume;
+    tfid.Fid.Vnode = Fid->Vnode;
+    tfid.Fid.Unique = Fid->Unique;
+
+    tvc = afs_GetVCache(&tfid, areq, (afs_int32 *)0, (struct vcache *)0,
+                                WRITE_LOCK);
+    if (!tvc) {
+        afs_Trace3(afs_iclSetp, CM_TRACE_PREFETCHCMD,
+                ICL_TYPE_POINTER, tvc,
+                ICL_TYPE_FID, &tfid,
+                ICL_TYPE_FID, &avc->fid);
+        return ENOENT;
+    }
+    afs_Trace3(afs_iclSetp, CM_TRACE_PREFETCHCMD,
+                ICL_TYPE_POINTER, tvc,
+                ICL_TYPE_FID, &tfid,
+                ICL_TYPE_FID, &tvc->fid);
+
+    do {
+        tc = afs_Conn(&tvc->fid, areq, SHARED_LOCK);
+        if (tc) {
+
+#ifdef RX_ENABLE_LOCKS
+            AFS_GUNLOCK();
+#endif /* RX_ENABLE_LOCKS */
+            tcall = rx_NewCall(tc->id);
+            code = StartRXAFS_FetchData(tcall,
+                                (struct AFSFid *) &tvc->fid.Fid, 0, 0);
+            if (!code) {
+                bytes = rx_Read(tcall, (char *) aout, sizeof(afs_int32));
+                code = EndRXAFS_FetchData(tcall, &OutStatus, &CallBack, &tsync);
+            }
+            code1 = rx_EndCall(tcall, code);
+#ifdef RX_ENABLE_LOCKS
+            AFS_GLOCK();
+#endif /* RX_ENABLE_LOCKS */
+        } else
+            code = -1;
+    } while
+        (afs_Analyze(tc, code, &tvc->fid, areq, 
+               AFS_STATS_FS_RPCIDX_RESIDENCYRPCS, SHARED_LOCK, 
+               (struct cell *)0));
+    /* This call is done only to have the callback things handled correctly */
+    afs_FetchStatus(tvc, &tfid, areq, &OutStatus);
+    afs_PutVCache(tvc, WRITE_LOCK);
+
+    if (!code) {
+        *aoutSize = sizeof(afs_int32);
+    }
+    return code;
+}
+
+static PResidencyCmd(avc, afun, areq, ain, aout, ainSize, aoutSize)
+struct vcache *avc;
+int afun;
+struct vrequest *areq;
+char *ain, *aout;
+afs_int32 ainSize;
+afs_int32 *aoutSize;        /* set this */
+{
+    register afs_int32 code;
+    struct conn *tc;
+    struct vcache *tvc;
+    struct ResidencyCmdInputs *Inputs;
+    struct ResidencyCmdOutputs *Outputs;
+    struct VenusFid tfid;
+    struct AFSFid *Fid;
+
+    Inputs = (struct ResidencyCmdInputs *) ain;
+    Outputs = (struct ResidencyCmdOutputs *) aout;
+    if (!avc) return EINVAL;
+    if (!ain || ainSize != sizeof(struct ResidencyCmdInputs)) return EINVAL;
+
+    Fid = &Inputs->fid;
+    if (!Fid->Volume)
+        Fid = &avc->fid.Fid;
+
+    tfid.Cell = avc->fid.Cell;
+    tfid.Fid.Volume = Fid->Volume;
+    tfid.Fid.Vnode = Fid->Vnode;
+    tfid.Fid.Unique = Fid->Unique;
+
+    tvc = afs_GetVCache(&tfid, areq, (afs_int32 *)0, (struct vcache *)0,
+                                WRITE_LOCK);
+    afs_Trace3(afs_iclSetp, CM_TRACE_RESIDCMD,
+                ICL_TYPE_POINTER, tvc,
+                ICL_TYPE_INT32, Inputs->command,
+                ICL_TYPE_FID, &tfid);
+    if (!tvc)
+        return ENOENT;
+
+    if (Inputs->command) {
+        do {
+            tc = afs_Conn(&tvc->fid, areq, SHARED_LOCK);
+            if (tc) {
+#ifdef RX_ENABLE_LOCKS
+                AFS_GUNLOCK();
+#endif /* RX_ENABLE_LOCKS */
+                code = RXAFS_ResidencyCmd(tc->id, Fid,
+                                 Inputs,
+                                 (struct ResidencyCmdOutputs *) aout);
+#ifdef RX_ENABLE_LOCKS
+                AFS_GLOCK();
+#endif /* RX_ENABLE_LOCKS */
+            } else
+                code = -1;
+        } while
+          (afs_Analyze(tc, code, &tvc->fid, areq, 
+               AFS_STATS_FS_RPCIDX_RESIDENCYRPCS, SHARED_LOCK,
+                (struct cell *)0));
+       /* This call is done to have the callback things handled correctly */
+       afs_FetchStatus(tvc, &tfid, areq, &Outputs->status);
+    } else { /* just a status request, return also link data */
+        code = 0;
+        Outputs->code = afs_FetchStatus(tvc, &tfid, areq, &Outputs->status);
+        Outputs->chars[0] = 0;
+        if (vType(tvc) == VLNK) {
+            ObtainWriteLock(&tvc->lock,555);
+            if (afs_HandleLink(tvc, areq) == 0)
+                strncpy((char *) &Outputs->chars, tvc->linkData, MAXCMDCHARS);
+            ReleaseWriteLock(&tvc->lock);
+        }
+    }
+
+    afs_PutVCache(tvc, WRITE_LOCK);
+
+    if (!code) {
+        *aoutSize = sizeof(struct ResidencyCmdOutputs);
+    }
+    return code;
+}                                  
index 53d50b614b0c33e6faa06a99c632837fd5e477ca..5eb4e8b3300b66958a56ab7cfee90832761c117e 100644 (file)
@@ -125,6 +125,7 @@ AFSAOBJS = \
        rxkad_client.o  \
        rxkad_common.o  \
        xdr_afsuuid.o   \
+       xdr_int64.o     \
        afs_uuid.o $(AFS_OS_OBJS)
 
 # These next two allow nfs and nonfs builds to occur in the same directory.
@@ -230,6 +231,8 @@ afs_uuid.o: $(AFS)/afs_uuid.c
        $(CRULE2);
 xdr_afsuuid.o: $(RX)/xdr_afsuuid.c
        $(CRULE2);
+xdr_int64.o: $(RX)/xdr_int64.c
+       $(CRULE2);
 
 # these files are not to be optimized - subject to change.
 afs_cbqueue.o: $(AFS)/afs_cbqueue.c
index ebb36f52bf6a901924eb9ee872e41d069393d821..428bd45441f47e7e894a2f906f6ef918607b5d71 100644 (file)
@@ -41,6 +41,11 @@ CCFLAGS =   -O2 -fomit-frame-pointer \
        -fno-strength-reduce -pipe -m486 -malign-loops=2 -malign-jumps=2 \
        -malign-functions=2
 DEFINES = -D__KERNEL__  -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
+<s390_linux22 s390_linux24>
+CCFLAGS =   -O2 -fomit-frame-pointer -fno-strength-reduce \
+       -fno-strict-aliasing -fsigned-char 
+DEFINES = -D__KERNEL__  -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
+
 <sparc_linux22 sparc_linux24>
 LD = ld -m elf32_sparc
 CCFLAGS =   -O2 -fomit-frame-pointer \
@@ -52,11 +57,6 @@ LD = ld -m elf64_sparc
 CCFLAGS =   -O2 -fomit-frame-pointer \
        -fno-strength-reduce -pipe -mcpu=ultrasparc -m64 -mno-fpu -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare
 DEFINES = -D__KERNEL__  -DCPU=sparc64 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
-<s390_linux22 s390_linux24>
-CCFLAGS =   -O2 -fomit-frame-pointer -fno-strength-reduce \
-       -fno-strict-aliasing -fsigned-char -pipe \
-       -fno-builtin
-DEFINES = -D__KERNEL__  -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF}
 <ppc_linux22 ppc_linux24>
 CCFLAGS =   -O2 -fomit-frame-pointer -fno-strength-reduce \
        -fno-strict-aliasing -fsigned-char -msoft-float -pipe \
@@ -192,5 +192,7 @@ osi_vnodeops.o: $(AFS)/osi_vnodeops.c
        $(CRULE1);
 xdr.o: $(RX)/xdr.c
        $(CRULE1);
+xdr_int64.o: $(RX)/xdr_int64.c
+       $(CRULE1);
 xdr_array.o: $(RX)/xdr_array.c
        $(CRULE1);
index 7512d4691a43a572fcb4e42cfb763ac218086f60..a70dfa6b531192952b40e46f26b5dc74acfd2893 100644 (file)
@@ -38,6 +38,8 @@ extern char* getenv();
 #ifdef AFS_OSF_ENV
 extern void *malloc(int size);
 extern void *realloc(void *ptr, int size);
+#endif
+#if defined(AFS_OSF_ENV) || defined(AFS_LINUX20_ENV)
 extern int PRE_Block;  /* from preempt.c */
 #else
 extern char PRE_Block; /* from preempt.c */
@@ -56,6 +58,14 @@ extern char PRE_Block;       /* from preempt.c */
 
 #ifdef __hp9000s800
 #define MINFRAME 128
+#define STACK_ALIGN 8
+#else
+#ifdef __s390__
+#define MINFRAME    96
+#define STACK_ALIGN 8
+#else
+#define STACK_ALIGN 4
+#endif
 #endif
 
 /* Debugging macro */
@@ -269,11 +279,7 @@ int LWP_CreateProcess(ep, stacksize, priority, parm, name, pid)
        if (stacksize < MINSTACK)
            stacksize = 1000;
        else
-#ifdef __hp9000s800
-           stacksize = 8 * ((stacksize+7) / 8);
-#else
-           stacksize = 4 * ((stacksize+3) / 4);
-#endif
+           stacksize = STACK_ALIGN * ((stacksize+STACK_ALIGN-1) / STACK_ALIGN);
 #ifdef AFS_AIX32_ENV
        if (!stackptr) {
            /*
@@ -347,10 +353,15 @@ int LWP_CreateProcess(ep, stacksize, priority, parm, name, pid)
                    stackptr+stacksize-0x40); /* lomgjmp does something
                                                 with %fp + 0x38 */
 #else
+#if defined(AFS_S390_LINUX20_ENV)
+       savecontext(Create_Process_Part2, &temp2->context,
+                   stackptr+stacksize-MINFRAME);
+#else /* !AFS_S390_LINUX20_ENV */
        savecontext(Create_Process_Part2, &temp2->context,
                    stackptr+stacksize-sizeof(void *));
-#endif
-#endif
+#endif /* AFS_S390_LINUX20_ENV */
+#endif /* AFS_SPARC64_LINUX20_ENV || AFS_SPARC_LINUX20_ENV */
+#endif /* AFS_SGI62_ENV */
 #endif
        /* End of gross hack */
 
@@ -397,11 +408,7 @@ int LWP_CreateProcess2(ep, stacksize, priority, parm, name, pid)
        if (stacksize < MINSTACK)
            stacksize = 1000;
        else
-#ifdef __hp9000s800
-           stacksize = 8 * ((stacksize+7) / 8);
-#else
-           stacksize = 4 * ((stacksize+3) / 4);
-#endif
+           stacksize = STACK_ALIGN * ((stacksize+STACK_ALIGN-1) / STACK_ALIGN);
        if ((stackptr = (char *) malloc(stacksize)) == NULL) {
            Set_LWP_RC();
            return LWP_ENOMEM;
@@ -421,8 +428,12 @@ int LWP_CreateProcess2(ep, stacksize, priority, parm, name, pid)
        lwp_cpptr = temp;
 #ifdef __hp9000s800
        savecontext(Create_Process_Part2, &temp2->context, stackptr+MINFRAME);
+#else
+#if defined(AFS_S390_LINUX20_ENV)
+       savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-MINFRAME);
 #else
        savecontext(Create_Process_Part2, &temp2->context, stackptr+stacksize-sizeof(void *));
+#endif
 #endif
        /* End of gross hack */
 
@@ -445,6 +456,15 @@ int LWP_CurrentProcess(pid)        /* returns pid of current process */
        return LWP_EINIT;
 }
 
+PROCESS LWP_ThreadId()
+{
+    Debug(0, ("Entered ThreadId"))
+    if (lwp_init)
+        return lwp_cpptr;
+    else
+        return (PROCESS) 0;
+}
+
 #define LWPANCHOR (*lwp_init)
 
 int LWP_DestroyProcess(pid)            /* destroy a lightweight process */
@@ -472,11 +492,16 @@ int LWP_DestroyProcess(pid)               /* destroy a lightweight process */
 #if defined(AFS_SPARC64_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV)
            savecontext(Dispatcher, &(temp -> context),
                        &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-0x40]));
+#else
+#if defined(AFS_S390_LINUX20_ENV)
+           savecontext(Dispatcher, &(temp -> context),
+                       &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-MINFRAME]));
 #else
            savecontext(Dispatcher, &(temp -> context),
                        &(LWPANCHOR.dsptchstack[(sizeof LWPANCHOR.dsptchstack)-sizeof(void *)]));
 #endif
 #endif
+#endif
 #endif
        }
        return LWP_SUCCESS;
index 3b8971c1ada489e730ad4c099e9eb81f5ccb7e7f..e2bcc61d25dee2a0b48cb86d1283bb92a0603764 100644 (file)
@@ -26,7 +26,7 @@ int PRE_Block = 0;
 #include "lwp.h"
 #include "preempt.h"
 
-#ifdef AFS_OSF_ENV
+#if defined(AFS_OSF_ENV) || defined(AFS_S390_LINUX20_ENV)
 int PRE_Block = 0;             /* used in lwp.c and process.s */
 #else
 char PRE_Block = 0;            /* used in lwp.c and process.s */
index 2618ad2dc266755bf64404d73fe204c20df7a33e..56c020a635de09bde48a95a516cf56dd4a23d616 100644 (file)
@@ -13,7 +13,7 @@
 #include <assert.h>
 #include "lwp.h"
 
-#ifdef  AFS_OSF_ENV
+#if defined(AFS_OSF_ENV) || defined(AFS_S390_LINUX20_ENV)
 extern int PRE_Block;              /* used in lwp.c and process.s */
 #else
 extern char PRE_Block;             /* used in lwp.c and process.s */
@@ -35,6 +35,9 @@ extern char PRE_Block;             /* used in lwp.c and process.s */
 #define LWP_SP 0
 #elif   defined(AFS_I386_LINUX20_ENV)
 #define LWP_SP 4
+#elif   defined(AFS_S390_LINUX20_ENV)
+#define LWP_SP 9
+#define LWP_FP 5
 #elif   defined(AFS_SPARC_LINUX20_ENV)
 #define LWP_SP 0
 #define LWP_FP 1
@@ -105,7 +108,7 @@ char*       sp;
                                {
                                case 0: jmpBuffer = (jmp_buf_type *)jmp_tmp;
                                        jmpBuffer[LWP_SP] = (jmp_buf_type)sp; 
-#if defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV))
+#if defined(AFS_S390_LINUX20_ENV) || defined(AFS_SPARC_LINUX20_ENV) || (defined(AFS_SPARC64_LINUX20_ENV) && defined(AFS_32BIT_USR_ENV))
                                        jmpBuffer[LWP_FP] = (jmp_buf_type)sp; 
 #endif
                                        longjmp(jmp_tmp,1);
index eca7a5b380edc598f5d03c7972c31bad5ad7e3f4..f8ef0f0a7ac37905f6965b66efda36162b3c8203 100644 (file)
@@ -91,6 +91,10 @@ extern afs_int32 afs_termState;
 # include <afs/rxgen_consts.h>
 #endif /* KERNEL */
 
+#ifdef RXDEBUG
+extern afs_uint32 LWP_ThreadId();
+#endif /* RXDEBUG */
+
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
 struct rx_tq_debug {
     afs_int32 rxi_start_aborted; /* rxi_start awoke after rxi_Send in error. */
@@ -455,7 +459,7 @@ int rx_Init(u_int port)
 #else
        struct sockaddr_in addr;
        int addrlen = sizeof(addr);
-       if (getsockname(rx_socket, (struct sockaddr *) &addr, &addrlen)) {
+       if (getsockname((int)rx_socket, (struct sockaddr *) &addr, &addrlen)) {
            rx_Finalize();
            return -1;
        }
@@ -6256,6 +6260,8 @@ void shutdown_rx(void)
 {
     struct rx_serverQueueEntry *np;
     register int i, j;
+    register struct rx_call *call;
+    register struct rx_serverQueueEntry *sq;
 
     LOCK_RX_INIT
     if (rxinit_status == 1) {
@@ -6263,6 +6269,35 @@ void shutdown_rx(void)
        return; /* Already shutdown. */
     }
 
+#ifndef KERNEL
+    rx_port = 0;
+#ifndef AFS_PTHREAD_ENV
+    FD_ZERO(&rx_selectMask);
+#endif /* AFS_PTHREAD_ENV */
+    rxi_dataQuota = RX_MAX_QUOTA;
+#ifndef AFS_PTHREAD_ENV
+    rxi_StopListener();
+#endif /* AFS_PTHREAD_ENV */
+    shutdown_rxevent();
+    rx_SetEpoch(0);
+#ifndef AFS_PTHREAD_ENV
+#ifndef AFS_USE_GETTIMEOFDAY
+    clock_UnInit();
+#endif /* AFS_USE_GETTIMEOFDAY */
+#endif /* AFS_PTHREAD_ENV */
+
+    while (!queue_IsEmpty(&rx_freeCallQueue)) {
+        call = queue_First(&rx_freeCallQueue, rx_call);
+        queue_Remove(call);
+        rxi_Free(call, sizeof(struct rx_call));
+    }
+
+    while (!queue_IsEmpty(&rx_idleServerQueue)) {
+        sq = queue_First(&rx_idleServerQueue, rx_serverQueueEntry);
+        queue_Remove(sq);                                                    
+    }
+#endif /* KERNEL */
+
     {  
        struct rx_peer **peer_ptr, **peer_end;
        for (peer_ptr = &rx_peerHashTable[0], 
index 1fd00bf12957c8f5b578a719208d2570454b8f46..5d6f3018c05390c4c0af1f3316ab813284b1c420 100644 (file)
@@ -192,6 +192,12 @@ static void initDirPathArray(void)
   pathp = dirPathArray[AFSDIR_SERVER_BACKUP_DIRPATH_ID];
   AFSDIR_SERVER_DIRPATH(pathp, AFSDIR_BACKUP_DIR);
 
+  pathp = dirPathArray[AFSDIR_SERVER_MIGRATE_DIRPATH_ID];
+  AFSDIR_SERVER_DIRPATH(pathp, AFSDIR_MIGR_DIR);
+
+  pathp = dirPathArray[AFSDIR_SERVER_BIN_FILE_DIRPATH_ID];
+  AFSDIR_SERVER_DIRPATH(pathp, AFSDIR_BIN_FILE_DIR);
+
   /* client dir path */
 
 #ifdef AFS_NT40_ENV
@@ -270,6 +276,9 @@ static void initDirPathArray(void)
   pathp = dirPathArray[AFSDIR_SERVER_BOZCONF_FILEPATH_ID];
   AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_CANONICAL_SERVER_LOCAL_DIRPATH, AFSDIR_BOZCONF_FILE);
 
+  pathp = dirPathArray[AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID];
+  AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_LOCAL_DIR, AFSDIR_BOZCONFNEW_FILE);
+
   pathp = dirPathArray[AFSDIR_SERVER_BOZLOG_FILEPATH_ID];
   AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH, AFSDIR_BOZLOG_FILE);
 
@@ -314,6 +323,17 @@ static void initDirPathArray(void)
   AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_CANONICAL_SERVER_LOCAL_DIRPATH, AFSDIR_NETRESTRICT_FILE);
 
 
+  pathp = dirPathArray[AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID];
+  AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_CANONICAL_SERVER_AFS_DIRPATH"/"AFSDIR_MIGR_DIR, AFSDIR_WEIGHTINGCONST_FILE);
+
+  pathp = dirPathArray[AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID];
+  AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_CANONICAL_SERVER_AFS_DIRPATH"/"AFSDIR_MIGR_DIR, AFSDIR_THRESHOLDCONST_FILE);
+
+  pathp = dirPathArray[AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID];
+  AFSDIR_SERVER_FILEPATH(pathp, AFSDIR_MIGR_DIR, AFSDIR_CANONICAL_SERVER_AFS_DIRPATH"/"AFSDIR_MIGRATE_LOGNAME);
+
+
   /* client file paths */
 
 #ifdef AFS_NT40_ENV
index bd25864f2324820f4038c38f2345188a04e3e195..127c0cc233f9f8f48a2e7bb42e64061aa53b7d4d 100644 (file)
@@ -108,6 +108,8 @@ ConstructLocalLogPath(const char *cpath,
 #define AFSDIR_LOGS_DIR  "logs"
 #define AFSDIR_LOCAL_DIR "server-local"
 #define AFSDIR_BACKUP_DIR "backup"
+#define AFSDIR_MIGR_DIR  "server-local/migrate"
+#define AFSDIR_BIN_FILE_DIR  "server-local/migrate/bin_files"
 
 /* file names */ 
 #define AFSDIR_THISCELL_FILE    "ThisCell"
@@ -131,6 +133,7 @@ ConstructLocalLogPath(const char *cpath,
 #define AFSDIR_SALVAGER_FILE    "salvager"
 #define AFSDIR_SLVGLOCK_FILE    "salvage.lock"
 #define AFSDIR_BOZCONF_FILE     "BosConfig"
+#define AFSDIR_BOZCONFNEW_FILE  "BosConfig.new"
 #define AFSDIR_BOZINIT_FILE     "BozoInit"
 #define AFSDIR_BOZLOG_FILE      "BosLog"
 #define AFSDIR_BOSVR_FILE       "bosserver"
@@ -144,12 +147,16 @@ ConstructLocalLogPath(const char *cpath,
 #define AFSDIR_OLDSYSID_FILE    "sysid.old"
 #define AFSDIR_SYSID_FILE       "sysid"
 #define AFSDIR_FILELOG_FILE     "FileLog"
+#define AFSDIR_MIGRATE_LOGNAME  "wtlog."
 
 #define AFSDIR_CELLSERVDB_FILE_NTCLIENT  "afsdcell.ini"
 
 #define AFSDIR_NETINFO_FILE     "NetInfo"
 #define AFSDIR_NETRESTRICT_FILE "NetRestrict"
 
+#define AFSDIR_LOCALRESIDENCY_FILE "LocalResidency"
+#define AFSDIR_WEIGHTINGCONST_FILE "Weight.LocalConstants"
+#define AFSDIR_THRESHOLDCONST_FILE "Thershold.LocalConstants"
 
 /* -------------- Canonical (wire-format) path macros -------------- */
 
@@ -168,6 +175,7 @@ ConstructLocalLogPath(const char *cpath,
 AFSDIR_CANONICAL_SERVER_AFS_DIRPATH "/server"
 
 #define AFSDIR_CANONICAL_SERVER_LOGS_DIRPATH \
+
 "/var/log/openafs/" 
 #define AFSDIR_CANONICAL_SERVER_LOCAL_DIRPATH \
    "/etc/openafs/server-local"
@@ -218,6 +226,7 @@ typedef enum afsdir_id {
       AFSDIR_SERVER_SLVGLOG_FILEPATH_ID,
       AFSDIR_SERVER_SALVAGER_FILEPATH_ID,
       AFSDIR_SERVER_BOZCONF_FILEPATH_ID,
+      AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID,
       AFSDIR_SERVER_BOZINIT_FILEPATH_ID,
       AFSDIR_SERVER_BOZLOG_FILEPATH_ID,
       AFSDIR_SERVER_BOSVR_FILEPATH_ID,
@@ -237,6 +246,11 @@ typedef enum afsdir_id {
       AFSDIR_CLIENT_NETRESTRICT_FILEPATH_ID,
       AFSDIR_SERVER_NETINFO_FILEPATH_ID,
       AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID,
+      AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID,
+      AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID,
+      AFSDIR_SERVER_MIGRATE_DIRPATH_ID,
+      AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID,
+      AFSDIR_SERVER_BIN_FILE_DIRPATH_ID,
       AFSDIR_PATHSTRING_MAX } afsdir_id_t;
 
 /* getDirPath() returns a pointer to a string from an internal array of path strings 
@@ -255,10 +269,14 @@ const char *getDirPath(afsdir_id_t string_id);
 #define AFSDIR_SERVER_LOGS_DIRPATH getDirPath(AFSDIR_SERVER_LOGS_DIRPATH_ID)
 #define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
 #define AFSDIR_SERVER_BACKUP_DIRPATH getDirPath(AFSDIR_SERVER_BACKUP_DIRPATH_ID)
+#define AFSDIR_SERVER_LOCAL_DIRPATH getDirPath(AFSDIR_SERVER_LOCAL_DIRPATH_ID)
+#define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
+#define AFSDIR_SERVER_MIGRATE_DIRPATH getDirPath(AFSDIR_SERVER_MIGRATE_DIRPATH_ID)
 
 /* client subdir paths */
 #define AFSDIR_CLIENT_VICE_DIRPATH getDirPath(AFSDIR_CLIENT_VICE_DIRPATH_ID)
 #define AFSDIR_CLIENT_ETC_DIRPATH getDirPath(AFSDIR_CLIENT_ETC_DIRPATH_ID)
+#define AFSDIR_SERVER_BIN_FILE_DIRPATH getDirPath(AFSDIR_SERVER_BIN_FILE_DIRPATH_ID)
 
 /* server file paths */
 #define AFSDIR_SERVER_THISCELL_FILEPATH getDirPath(AFSDIR_SERVER_THISCELL_FILEPATH_ID)
@@ -281,6 +299,7 @@ const char *getDirPath(afsdir_id_t string_id);
 #define AFSDIR_SERVER_SLVGLOG_FILEPATH getDirPath(AFSDIR_SERVER_SLVGLOG_FILEPATH_ID)
 #define AFSDIR_SERVER_SALVAGER_FILEPATH getDirPath(AFSDIR_SERVER_SALVAGER_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZCONF_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONF_FILEPATH_ID)
+#define AFSDIR_SERVER_BOZCONFNEW_FILEPATH getDirPath(AFSDIR_SERVER_BOZCONFNEW_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZINIT_FILEPATH getDirPath(AFSDIR_SERVER_BOZINIT_FILEPATH_ID)
 #define AFSDIR_SERVER_BOZLOG_FILEPATH getDirPath(AFSDIR_SERVER_BOZLOG_FILEPATH_ID)
 #define AFSDIR_SERVER_BOSVR_FILEPATH getDirPath(AFSDIR_SERVER_BOSVR_FILEPATH_ID)
@@ -296,6 +315,9 @@ const char *getDirPath(afsdir_id_t string_id);
 #define AFSDIR_SERVER_AUDIT_FILEPATH getDirPath(AFSDIR_SERVER_AUDIT_FILEPATH_ID)
 #define AFSDIR_SERVER_NETINFO_FILEPATH getDirPath(AFSDIR_SERVER_NETINFO_FILEPATH_ID)
 #define AFSDIR_SERVER_NETRESTRICT_FILEPATH getDirPath(AFSDIR_SERVER_NETRESTRICT_FILEPATH_ID)
+#define AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_WEIGHTING_CONSTANTS_FILEPATH_ID)
+#define AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH getDirPath(AFSDIR_SERVER_THRESHOLD_CONSTANTS_FILEPATH_ID)
+#define AFSDIR_SERVER_MIGRATELOG_FILEPATH getDirPath(AFSDIR_SERVER_MIGRATELOG_FILEPATH_ID)
 
 /* client file paths */
 #define AFSDIR_CLIENT_THISCELL_FILEPATH getDirPath(AFSDIR_CLIENT_THISCELL_FILEPATH_ID)
index 28685a92147539f7294179cea11fd1c0778b2773..e16e0cdf350a9872a903c87c248a06e220d46349 100644 (file)
@@ -7,6 +7,7 @@
 
 SHELL = /bin/sh
 COMPONENT=venus
+LINUX_VERS=dummy
 include ../config/Makefile.${SYS_NAME}
 
 INSTALL = ${DESTDIR}bin/install
index 9e3ad50dc51f6cf3e4440c7b1d6e446497e5f036..2a0d9603ec6d2366fd23a537c1fa5e6a12b7db85 100644 (file)
@@ -179,7 +179,11 @@ static void VInitPartition_r(char *path, char *devname, Device dev)
     dp->next = 0;
     strcpy(dp->name, path);
 #if defined(AFS_NAMEI_ENV) && !defined(AFS_NT40_ENV)
+#ifdef AFS_SUN5_ENV
+    strcpy(dp->devName, devname);
+#else /* AFS_SUN5_ENV */
     strcpy(dp->devName, path);
+#endif
     dp->device = volutil_GetPartitionID(path);
 #else
     strcpy(dp->devName, devname);