From: Sam Hartman Date: Thu, 8 Mar 2001 05:53:43 +0000 (+0000) Subject: Merge conflicts X-Git-Tag: debian/1.0.3-1~5 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ff3d95a50941b91256845e6cf54dae8d8488e9e8;p=packages%2Fo%2Fopenafs.git Merge conflicts --- diff --git a/src/Makefile b/src/Makefile index 5ab06778b..7b7e85cdc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -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; diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c index 7f3ed0ffc..8571795cc 100644 --- a/src/afs/LINUX/osi_file.c +++ b/src/afs/LINUX/osi_file.c @@ -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); } diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c index 1478be6a9..e40af34af 100644 --- a/src/afs/LINUX/osi_misc.c +++ b/src/afs/LINUX/osi_misc.c @@ -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); } } diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index aaed884d0..7df8f041d 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -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; diff --git a/src/afs/VNOPS/afs_vnop_readdir.c b/src/afs/VNOPS/afs_vnop_readdir.c index cd3bf6d87..54a70a331 100644 --- a/src/afs/VNOPS/afs_vnop_readdir.c +++ b/src/afs/VNOPS/afs_vnop_readdir.c @@ -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 */ diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 314f61788..d4d00375e 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -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; +} diff --git a/src/libafs/Makefile.common b/src/libafs/Makefile.common index 53d50b614..5eb4e8b33 100644 --- a/src/libafs/Makefile.common +++ b/src/libafs/Makefile.common @@ -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 diff --git a/src/libafs/MakefileProto.LINUX b/src/libafs/MakefileProto.LINUX index ebb36f52b..428bd4544 100644 --- a/src/libafs/MakefileProto.LINUX +++ b/src/libafs/MakefileProto.LINUX @@ -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} + +CCFLAGS = -O2 -fomit-frame-pointer -fno-strength-reduce \ + -fno-strict-aliasing -fsigned-char +DEFINES = -D__KERNEL__ -D__s390__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} + 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} - -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} 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); diff --git a/src/lwp/lwp.c b/src/lwp/lwp.c index 7512d4691..a70dfa6b5 100644 --- a/src/lwp/lwp.c +++ b/src/lwp/lwp.c @@ -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; diff --git a/src/lwp/preempt.c b/src/lwp/preempt.c index 3b8971c1a..e2bcc61d2 100644 --- a/src/lwp/preempt.c +++ b/src/lwp/preempt.c @@ -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 */ diff --git a/src/lwp/process.c b/src/lwp/process.c index 2618ad2dc..56c020a63 100644 --- a/src/lwp/process.c +++ b/src/lwp/process.c @@ -13,7 +13,7 @@ #include #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); diff --git a/src/rx/rx.c b/src/rx/rx.c index eca7a5b38..f8ef0f0a7 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -91,6 +91,10 @@ extern afs_int32 afs_termState; # include #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], diff --git a/src/util/dirpath.c b/src/util/dirpath.c index 1fd00bf12..5d6f3018c 100644 --- a/src/util/dirpath.c +++ b/src/util/dirpath.c @@ -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 diff --git a/src/util/dirpath.h b/src/util/dirpath.h index bd25864f2..127c0cc23 100644 --- a/src/util/dirpath.h +++ b/src/util/dirpath.h @@ -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) diff --git a/src/venus/Makefile b/src/venus/Makefile index 28685a921..e16e0cdf3 100644 --- a/src/venus/Makefile +++ b/src/venus/Makefile @@ -7,6 +7,7 @@ SHELL = /bin/sh COMPONENT=venus +LINUX_VERS=dummy include ../config/Makefile.${SYS_NAME} INSTALL = ${DESTDIR}bin/install diff --git a/src/vol/partition.c b/src/vol/partition.c index 9e3ad50dc..2a0d9603e 100644 --- a/src/vol/partition.c +++ b/src/vol/partition.c @@ -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);