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}"; \
${COMPILE_PART1} rx ${COMPILE_PART2}
rxtests: rxobj
- ${COMPILE_PART1} rx ${COMPILE_PART2}
+ ${COMPILE_PART1} rx ${COMPILE_PART3}
fsint: project kfsint
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}
# 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;; \
MKAFS_OSTYPE=AIX;; \
sun4x_5* ) \
MKAFS_OSTYPE=SOLARIS;; \
- alpha_dux4* ) \
+ alpha_dux* ) \
MKAFS_OSTYPE=DUX;; \
sgi_6* ) \
MKAFS_OSTYPE=IRIX;; \
- /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;
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; {
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);
}
#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. */
}
}
+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
ip->i_count --;
if (!ip->i_count)
#endif
- afs_delete_inode(ip);
+ osi_clear_inode(ip);
+ AFS_GUNLOCK();
}
else {
+ AFS_GUNLOCK();
iput(ip);
}
}
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) {
}
}
- 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)) {
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)
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;
}
#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 */
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);
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 */
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;
+}
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.
$(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
-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 \
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 \
$(CRULE1);
xdr.o: $(RX)/xdr.c
$(CRULE1);
+xdr_int64.o: $(RX)/xdr_int64.c
+ $(CRULE1);
xdr_array.o: $(RX)/xdr_array.c
$(CRULE1);
#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 */
#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 */
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) {
/*
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 */
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;
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 */
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 */
#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;
#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 */
#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 */
#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
{
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);
# 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. */
#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;
}
{
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) {
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],
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
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);
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
#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"
#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"
#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 -------------- */
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"
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,
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
#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)
#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)
#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)
SHELL = /bin/sh
COMPONENT=venus
+LINUX_VERS=dummy
include ../config/Makefile.${SYS_NAME}
INSTALL = ${DESTDIR}bin/install
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);