From: Sam Hartman Date: Sun, 12 May 2002 05:50:44 +0000 (+0000) Subject: Merge in 1.2.4 changes X-Git-Tag: debian/1.2.4-1~10 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=a96c4244cc4fb212dbb6f8d62c0bcdfa0c567d0a;p=packages%2Fo%2Fopenafs.git Merge in 1.2.4 changes --- diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c index 28ff16fbc..6cc594110 100644 --- a/src/afs/LINUX/osi_misc.c +++ b/src/afs/LINUX/osi_misc.c @@ -14,7 +14,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_misc.c,v 1.8 2002/01/28 00:53:20 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_misc.c,v 1.9 2002/05/12 05:50:42 hartmans Exp $"); #include "../afs/sysincludes.h" #include "../afs/afsincludes.h" @@ -51,7 +51,8 @@ int osi_lookupname(char *aname, uio_seg_t seg, int followlink, if (nd.dentry->d_inode) { *dpp = dget(nd.dentry); code = 0; - } + } else + code = ENOENT; path_release(&nd); } #else @@ -299,7 +300,7 @@ void osi_linux_free_inode_pages(void) for (i=0; ihnext) { - ip = (struct inode*)tvc; + ip = AFSTOI(tvc); #if defined(AFS_LINUX24_ENV) if (ip->i_data.nrpages) { #else @@ -328,7 +329,7 @@ void osi_linux_free_inode_pages(void) void osi_clear_inode(struct inode *ip) { cred_t *credp = crref(); - struct vcache *vc = (struct vcache*)ip; + struct vcache *vc = ITOAFS(ip); #if defined(AFS_LINUX24_ENV) if (atomic_read(&ip->i_count) > 1) @@ -404,8 +405,8 @@ void osi_iput(struct inode *ip) void check_bad_parent(struct dentry *dp) { cred_t *credp; - struct vcache *vcp = (struct vcache*)dp->d_inode, *avc = NULL; - struct vcache *pvc = (struct vcache *)dp->d_parent->d_inode; + struct vcache *vcp = ITOAFS(dp->d_inode), *avc = NULL; + struct vcache *pvc = ITOAFS(dp->d_parent->d_inode); if (vcp->mvid->Fid.Volume != pvc->fid.Fid.Volume) { /* bad parent */ credp = crref(); diff --git a/src/afs/LINUX/osi_module.c b/src/afs/LINUX/osi_module.c index 1282877b4..dc7f239f7 100644 --- a/src/afs/LINUX/osi_module.c +++ b/src/afs/LINUX/osi_module.c @@ -14,7 +14,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_module.c,v 1.8 2001/10/14 18:43:26 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_module.c,v 1.9 2002/05/12 05:50:42 hartmans Exp $"); #include "../afs/sysincludes.h" #include "../afs/afsincludes.h" @@ -89,57 +89,78 @@ __asm__ __volatile__ (" #endif #ifdef AFS_IA64_LINUX20_ENV -unsigned char ia64_syscall_stub[] = -{ - 0x00, 0x50, 0x45, 0x16, 0x80, 0x05, // [MII] alloc r42=ar.pfs,8,3,6,0 - 0x90, 0x02, 0x00, 0x62, 0x00, 0x60, // mov r41=b0 - 0x05, 0x00, 0x01, 0x84, // mov r43=r32 - 0x00, 0x60, 0x01, 0x42, 0x00, 0x21, // [MII] mov r44=r33 - 0xd0, 0x02, 0x88, 0x00, 0x42, 0xc0, // mov r45=r34 - 0x05, 0x18, 0x01, 0x84, // mov r46=r35 - 0x0d, 0x78, 0x01, 0x48, 0x00, 0x21, // [MFI] mov r47=r36 - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // nop.f 0x0 - 0x06, 0x08, 0x00, 0x84, // mov r48=gp;; - 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, // [MLX] nop.m 0x0 - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, // movl r15=0x0;; - 0x01, 0x00, 0x00, 0x60, // - 0x0a, 0x80, 0x20, 0x1e, 0x18, 0x14, // [MMI] ld8 r16=[r15],8;; - 0x10, 0x00, 0x3c, 0x30, 0x20, 0xc0, // ld8 gp=[r15] - 0x00, 0x09, 0x00, 0x07, // mov b6=r16 - 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, // [MFB] nop.m 0x0 - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // nop.f 0x0 - 0x68, 0x00, 0x00, 0x10, // br.call.sptk.many b0=b6;; - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, // [MII] nop.m 0x0 - 0x00, 0x50, 0x01, 0x55, 0x00, 0x00, // mov.i ar.pfs=r42 - 0x90, 0x0a, 0x00, 0x07, // mov b0=r41 - 0x1d, 0x08, 0x00, 0x60, 0x00, 0x21, // [MFB] mov gp=r48 - 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, // nop.f 0x0 - 0x08, 0x00, 0x84, 0x00 // br.ret.sptk.many b0;; -}; -void ia64_imm64_fixup(unsigned long v, void *code) +asmlinkage long +afs_syscall_stub(int r0, int r1, long r2, long r3, long r4, long gp) { - unsigned long *bundle = (unsigned long *) code; - - unsigned long insn; - unsigned long slot1; - - insn = ((v & 0x8000000000000000) >> 27) | ((v & 0x0000000000200000)) | - ((v & 0x00000000001f0000) << 6) | ((v & 0x000000000000ff80) << 20) | - ((v & 0x000000000000007f) << 13); - - slot1 = (v & 0x7fffffffffc00000) >> 22; - - *bundle |= slot1 << 46; - *(bundle+1) |= insn << 23; - *(bundle+1) |= slot1 >> 18; +__asm__ __volatile__ (" + alloc r42 = ar.pfs, 8, 3, 6, 0 + mov r41 = b0 /* save rp */ + mov out0 = in0 + mov out1 = in1 + mov out2 = in2 + mov out3 = in3 + mov out4 = in4 + mov out5 = gp /* save gp */ + ;; +.L1: mov r3 = ip + ;; + addl r15=.fptr_afs_syscall-.L1,r3 + ;; + ld8 r15=[r15] + ;; + ld8 r16=[r15],8 + ;; + ld8 gp=[r15] + mov b6=r16 + br.call.sptk.many b0 = b6 + ;; + mov ar.pfs = r42 + mov b0 = r41 + mov gp = r48 /* restore gp */ + br.ret.sptk.many b0 +.fptr_afs_syscall: + data8 @fptr(afs_syscall) +"); } -unsigned char *afs_syscall_stub, *afs_xsetgroups_stub; +asmlinkage long +afs_xsetgroups_stub(int r0, int r1, long r2, long r3, long r4, long gp) +{ +__asm__ __volatile__ (" + alloc r42 = ar.pfs, 8, 3, 6, 0 + mov r41 = b0 /* save rp */ + mov out0 = in0 + mov out1 = in1 + mov out2 = in2 + mov out3 = in3 + mov out4 = in4 + mov out5 = gp /* save gp */ + ;; +.L2: mov r3 = ip + ;; + addl r15=.fptr_afs_xsetgroups - .L2,r3 + ;; + ld8 r15=[r15] + ;; + ld8 r16=[r15],8 + ;; + ld8 gp=[r15] + mov b6=r16 + br.call.sptk.many b0 = b6 + ;; + mov ar.pfs = r42 + mov b0 = r41 + mov gp = r48 /* restore gp */ + br.ret.sptk.many b0 +.fptr_afs_xsetgroups: + data8 @fptr(afs_xsetgroups) +"); +} struct fptr { - unsigned long ip; + void *ip; unsigned long gp; }; @@ -229,11 +250,7 @@ int init_module(void) #if defined(AFS_IA64_LINUX20_ENV) afs_ni_syscall = sys_call_table[__NR_afs_syscall - 1024]; - - afs_syscall_stub = (void *) kmalloc(sizeof(ia64_syscall_stub), GFP_KERNEL); - memcpy(afs_syscall_stub, ia64_syscall_stub, sizeof(ia64_syscall_stub)); - ia64_imm64_fixup((unsigned long)afs_syscall, afs_syscall_stub+0x30); - sys_call_table[__NR_afs_syscall - 1024] = POINTER2SYSCALL afs_syscall_stub; + sys_call_table[__NR_afs_syscall - 1024] = POINTER2SYSCALL ((struct fptr *)afs_syscall_stub)->ip; #else /* AFS_IA64_LINUX20_ENV */ afs_ni_syscall = sys_call_table[__NR_afs_syscall]; sys_call_table[__NR_afs_syscall] = POINTER2SYSCALL afs_syscall; @@ -250,15 +267,11 @@ int init_module(void) #if defined(AFS_IA64_LINUX20_ENV) sys_setgroupsp = (void *) &sys_setgroups; - afs_xsetgroups_stub = (void *) kmalloc(sizeof(ia64_syscall_stub), GFP_KERNEL); - memcpy(afs_xsetgroups_stub, ia64_syscall_stub, sizeof(ia64_syscall_stub)); - ia64_imm64_fixup((unsigned long)afs_xsetgroups, afs_xsetgroups_stub+0x30); - ((struct fptr *)sys_setgroupsp)->ip = SYSCALL2POINTER sys_call_table[__NR_setgroups - 1024]; ((struct fptr *)sys_setgroupsp)->gp = kernel_gp; - sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL afs_xsetgroups_stub; + sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL ((struct fptr *)afs_xsetgroups_stub)->ip; #else /* AFS_IA64_LINUX20_ENV */ sys_setgroupsp = SYSCALL2POINTER sys_call_table[__NR_setgroups]; sys_call_table[__NR_setgroups] = POINTER2SYSCALL afs_xsetgroups; @@ -276,6 +289,8 @@ int init_module(void) # endif #endif /* AFS_IA64_LINUX20_ENV */ + osi_sysctl_init(); + return 0; } @@ -287,6 +302,8 @@ void cleanup_module(void) { struct task_struct *t; + osi_sysctl_clean(); + #if defined(AFS_IA64_LINUX20_ENV) sys_call_table[__NR_setgroups - 1024] = POINTER2SYSCALL ((struct fptr *) sys_setgroupsp)->ip; sys_call_table[__NR_afs_syscall - 1024] = afs_ni_syscall; diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index af787ca46..4da2070ee 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -23,11 +23,12 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.11 2002/01/22 20:29:44 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/LINUX/osi_vnodeops.c,v 1.12 2002/05/12 05:50:42 hartmans Exp $"); #include "../afs/sysincludes.h" #include "../afs/afsincludes.h" #include "../afs/afs_stats.h" +#include "../afs/afs_osidnlc.h" #include "../h/mm.h" #include "../h/pagemap.h" #if defined(AFS_LINUX24_ENV) @@ -60,7 +61,7 @@ static ssize_t afs_linux_read(struct file *fp, char *buf, size_t count, loff_t *offp) { ssize_t code; - struct vcache *vcp = (struct vcache*)fp->f_dentry->d_inode; + struct vcache *vcp = ITOAFS(fp->f_dentry->d_inode); cred_t *credp = crref(); struct vrequest treq; @@ -104,7 +105,7 @@ static ssize_t afs_linux_write(struct file *fp, const char *buf, size_t count, { ssize_t code = 0; int code2; - struct vcache *vcp = (struct vcache *)fp->f_dentry->d_inode; + struct vcache *vcp = ITOAFS(fp->f_dentry->d_inode); struct vrequest treq; cred_t *credp = crref(); @@ -157,7 +158,7 @@ static int afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir) { extern struct DirEntry * afs_dir_GetBlob(); - struct vcache *avc = (struct vcache*)FILE_INODE(fp); + struct vcache *avc = ITOAFS(FILE_INODE(fp)); struct vrequest treq; register struct dcache *tdc; int code; @@ -314,7 +315,7 @@ void afs_linux_vma_close(struct vm_area_struct *vmap) if (!vmap->vm_file) return; - vcp = (struct vcache*)FILE_INODE(vmap->vm_file); + vcp = ITOAFS(FILE_INODE(vmap->vm_file)); if (!vcp) return; @@ -350,7 +351,7 @@ void afs_linux_vma_close(struct vm_area_struct *vmap) static int afs_linux_mmap(struct file *fp, struct vm_area_struct *vmap) { - struct vcache *vcp = (struct vcache*)FILE_INODE(fp); + struct vcache *vcp = ITOAFS(FILE_INODE(fp)); cred_t *credp = crref(); struct vrequest treq; int code; @@ -451,7 +452,7 @@ static int afs_linux_release(struct inode *ip, struct file *fp) { int code = 0; cred_t *credp = crref(); - struct vcache *vcp = (struct vcache*)ip; + struct vcache *vcp = ITOAFS(ip); AFS_GLOCK(); #ifdef AFS_LINUX24_ENV @@ -486,7 +487,7 @@ static int afs_linux_fsync(struct file *fp, struct dentry *dp) #ifdef AFS_LINUX24_ENV lock_kernel(); #endif - code = afs_fsync((struct vcache*)ip, credp); + code = afs_fsync(ITOAFS(ip), credp); #ifdef AFS_LINUX24_ENV unlock_kernel(); #endif @@ -510,7 +511,7 @@ int afs_linux_file_revalidate(kdev_t dev); static int afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) { int code = 0; - struct vcache *vcp = (struct vcache*)FILE_INODE(fp); + struct vcache *vcp = ITOAFS(FILE_INODE(fp)); cred_t *credp = crref(); #ifdef AFS_LINUX24_ENV struct flock64 flock; @@ -548,7 +549,7 @@ static int afs_linux_lock(struct file *fp, int cmd, struct file_lock *flp) */ int afs_linux_flush(struct file *fp) { - struct vcache *vcp = (struct vcache *)FILE_INODE(fp); + struct vcache *vcp = ITOAFS(FILE_INODE(fp)); int code = 0; cred_t *credp; @@ -652,7 +653,7 @@ static int afs_linux_revalidate(struct dentry *dp) int code; cred_t *credp; struct vrequest treq; - struct vcache *vcp = (struct vcache*)dp->d_inode; + struct vcache *vcp = ITOAFS(dp->d_inode); AFS_GLOCK(); #ifdef AFS_LINUX24_ENV @@ -705,15 +706,24 @@ static int afs_linux_dentry_revalidate(struct dentry *dp) struct vcache *lookupvcp = NULL; int code, bad_dentry = 1; struct sysname_info sysState; - struct vcache *vcp = (struct vcache*) dp->d_inode; - struct vcache *parentvcp = (struct vcache*) dp->d_parent->d_inode; + struct vcache *vcp = ITOAFS(dp->d_inode); + struct vcache *parentvcp = ITOAFS(dp->d_parent->d_inode); AFS_GLOCK(); + sysState.allocked = 0; + /* If it's a negative dentry, then there's nothing to do. */ if (!vcp || !parentvcp) goto done; + /* If it is the AFS root, then there's no chance it needs + revalidating */ + if (vcp == afs_globalVp) { + bad_dentry = 0; + goto done; + } + if (code = afs_InitReq(&treq, credp)) goto done; @@ -770,7 +780,7 @@ static int afs_linux_dentry_revalidate(struct dentry *dp) int code; cred_t *credp; struct vrequest treq; - struct inode *ip = (struct inode *)dp->d_inode; + struct inode *ip = AFSTOI(dp->d_inode); unsigned long timeout = 3*HZ; /* 3 seconds */ @@ -844,7 +854,7 @@ int afs_linux_create(struct inode *dip, struct dentry *dp, int mode) vattr.va_mode = mode; AFS_GLOCK(); - code = afs_create((struct vcache*)dip, name, &vattr, NONEXCL, mode, + code = afs_create(ITOAFS(dip), name, &vattr, NONEXCL, mode, (struct vcache**)&ip, credp); if (!code) { @@ -893,10 +903,10 @@ int afs_linux_lookup(struct inode *dip, struct dentry *dp) struct vcache *vcp=NULL; const char *comp = dp->d_name.name; AFS_GLOCK(); - code = afs_lookup((struct vcache *)dip, comp, &vcp, credp); + code = afs_lookup(ITOAFS(dip), comp, &vcp, credp); if (vcp) { - struct inode *ip = (struct inode*)vcp; + struct inode *ip = AFSTOI(vcp); /* Reset ops if symlink or directory. */ #if defined(AFS_LINUX24_ENV) if (S_ISREG(ip->i_mode)) { @@ -918,10 +928,10 @@ int afs_linux_lookup(struct inode *dip, struct dentry *dp) else if (S_ISLNK(ip->i_mode)) ip->i_op = &afs_symlink_iops; #endif + } dp->d_time = jiffies; dp->d_op = afs_dops; - d_add(dp, (struct inode*)vcp); - } + d_add(dp, AFSTOI(vcp)); AFS_GUNLOCK(); crfree(credp); @@ -955,7 +965,7 @@ int afs_linux_link(struct dentry *olddp, struct inode *dip, d_drop(newdp); AFS_GLOCK(); - code = afs_link((struct vcache*)oldip, (struct vcache*)dip, name, credp); + code = afs_link(ITOAFS(oldip), ITOAFS(dip), name, credp); AFS_GUNLOCK(); crfree(credp); @@ -970,7 +980,7 @@ int afs_linux_unlink(struct inode *dip, struct dentry *dp) int putback = 0; AFS_GLOCK(); - code = afs_remove((struct vcache*)dip, name, credp); + code = afs_remove(ITOAFS(dip), name, credp); AFS_GUNLOCK(); if (!code) d_drop(dp); @@ -994,7 +1004,7 @@ int afs_linux_symlink(struct inode *dip, struct dentry *dp, AFS_GLOCK(); VATTR_NULL(&vattr); - code = afs_symlink((struct vcache*)dip, name, &vattr, target, credp); + code = afs_symlink(ITOAFS(dip), name, &vattr, target, credp); AFS_GUNLOCK(); crfree(credp); return -code; @@ -1012,7 +1022,7 @@ int afs_linux_mkdir(struct inode *dip, struct dentry *dp, int mode) VATTR_NULL(&vattr); vattr.va_mask = ATTR_MODE; vattr.va_mode = mode; - code = afs_mkdir((struct vcache*)dip, name, &vattr, &tvcp, credp); + code = afs_mkdir(ITOAFS(dip), name, &vattr, &tvcp, credp); if (tvcp) { tvcp->v.v_op = &afs_dir_iops; @@ -1021,7 +1031,7 @@ int afs_linux_mkdir(struct inode *dip, struct dentry *dp, int mode) #endif dp->d_op = afs_dops; dp->d_time = jiffies; - d_instantiate(dp, (struct inode*)tvcp); + d_instantiate(dp, AFSTOI(tvcp)); } AFS_GUNLOCK(); @@ -1036,7 +1046,7 @@ int afs_linux_rmdir(struct inode *dip, struct dentry *dp) const char *name = dp->d_name.name; AFS_GLOCK(); - code = afs_rmdir((struct vcache*)dip, name, credp); + code = afs_rmdir(ITOAFS(dip), name, credp); /* Linux likes to see ENOTEMPTY returned from an rmdir() syscall * that failed because a directory is not empty. So, we map @@ -1077,7 +1087,7 @@ int afs_linux_rename(struct inode *oldip, struct dentry *olddp, d_drop(newdp); } AFS_GLOCK(); - code = afs_rename((struct vcache*)oldip, oldname, (struct vcache*)newip, + code = afs_rename(ITOAFS(oldip), oldname, ITOAFS(newip), newname, credp); AFS_GUNLOCK(); @@ -1105,7 +1115,7 @@ static int afs_linux_ireadlink(struct inode *ip, char *target, int maxlen, struct iovec iov; setup_uio(&tuio, &iov, target, 0, maxlen, UIO_READ, seg); - code = afs_readlink((struct vcache*)ip, &tuio, credp); + code = afs_readlink(ITOAFS(ip), &tuio, credp); crfree(credp); if (!code) @@ -1207,7 +1217,7 @@ int afs_linux_readpage(struct file *fp, struct page *pp) setup_uio(&tuio, &iovec, (char*)address, offset, PAGESIZE, UIO_READ, AFS_UIOSYS); - code = afs_rdwr((struct vcache*)ip, &tuio, UIO_READ, 0, credp); + code = afs_rdwr(ITOAFS(ip), &tuio, UIO_READ, 0, credp); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) unlock_kernel(); #endif @@ -1302,7 +1312,7 @@ int afs_linux_permission(struct inode *ip, int mode) if (mode & MAY_EXEC) tmp |= VEXEC; if (mode & MAY_READ) tmp |= VREAD; if (mode & MAY_WRITE) tmp |= VWRITE; - code = afs_access((struct vcache*)ip, tmp, credp); + code = afs_access(ITOAFS(ip), tmp, credp); AFS_GUNLOCK(); crfree(credp); @@ -1320,7 +1330,7 @@ int afs_linux_writepage_sync(struct inode *ip, struct page *pp, unsigned long offset, unsigned int count) { - struct vcache *vcp = (struct vcache *) ip; + struct vcache *vcp = ITOAFS(ip); char *buffer; loff_t base; int code = 0; @@ -1373,7 +1383,7 @@ int afs_linux_updatepage(struct file *fp, struct page *pp, unsigned long offset, unsigned int count, int sync) { - struct vcache *vcp = (struct vcache *)FILE_INODE(fp); + struct vcache *vcp = ITOAFS(FILE_INODE(fp)); u8 *page_addr = (u8*) afs_linux_page_address(pp); int code = 0; cred_t *credp; diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index 4aa7a1094..09df8edfb 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -22,7 +22,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.9 2001/10/14 18:43:27 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/VNOPS/afs_vnop_lookup.c,v 1.10 2002/05/12 05:50:43 hartmans Exp $"); #include "../afs/sysincludes.h" /* Standard vendor system headers */ #include "../afs/afsincludes.h" /* Afs-based standard headers */ @@ -924,7 +924,7 @@ afs_lookup(adp, aname, avcp, acred) AFS_STATCNT(afs_lookup); #ifdef AFS_OSF_ENV - ndp->ni_dvp = (struct vnode *)adp; + ndp->ni_dvp = AFSTOV(adp); memcpy(aname, ndp->ni_ptr, ndp->ni_namelen); aname[ndp->ni_namelen] = '\0'; #endif /* AFS_OSF_ENV */ @@ -956,7 +956,7 @@ afs_lookup(adp, aname, avcp, acred) #ifdef AFS_OSF_ENV extern struct vcache *afs_globalVp; if (adp == afs_globalVp) { - struct vnode *rvp = (struct vnode *)adp; + struct vnode *rvp = AFSTOV(adp); /* ndp->ni_vp = rvp->v_vfsp->vfs_vnodecovered; ndp->ni_dvp = ndp->ni_vp; @@ -999,7 +999,7 @@ afs_lookup(adp, aname, avcp, acred) /* Check for read access as well. We need read access in order to stat files, but not to stat subdirectories. */ - if (!afs_AccessOK(adp, PRSFS_READ, &treq, CHECK_MODE_BITS)) + if (!afs_AccessOK(adp, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS)) no_read_access = 1; /* special case lookup of ".". Can we check for it sooner in this code, diff --git a/src/afs/afs.h b/src/afs/afs.h index 9dc152fad..0f03fcda6 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -564,6 +564,13 @@ struct vtodc extern afs_uint32 afs_stampValue; /* stamp for pair's usage */ #define MakeStamp() (++afs_stampValue) +#define VTOAFS(V) ((struct vcache*)(V)) +#define AFSTOV(V) (&(V)->v) +#ifdef AFS_LINUX22_ENV +#define ITOAFS(V) ((struct vcache*)(V)) +#define AFSTOI(V) (struct inode *)(&(V)->v) +#endif + /* INVARIANTs: (vlruq.next != NULL) == (vlruq.prev != NULL) * nextfree => !vlruq.next && ! vlruq.prev * !(avc->nextfree) && !avc->vlruq.next => (FreeVCList == avc->nextfree) @@ -696,9 +703,9 @@ struct vcache { #ifdef AFS_SGI64_ENV #include #define AFS_RWLOCK(V,F) \ - afs_rwlock(&(((struct vcache *)(V))->vc_bhv_desc), (F)); + afs_rwlock(&VTOAFS(V)->vc_bhv_desc, (F)); #define AFS_RWUNLOCK(V,F) \ - afs_rwunlock(&(((struct vcache *)(V))->vc_bhv_desc), (F)); + afs_rwunlock(&VTOAFS(V)->vc_bhv_desc, (F)); #else #define AFS_RWLOCK(V,F) afs_rwlock((vnode_t *)(V), (F) ) @@ -914,7 +921,7 @@ struct dcache { avc->states |= CCore; /* causes close to be called later */ \ \ /* The cred and vnode holds will be released in afs_FlushActiveVcaches */ \ - VN_HOLD((struct vnode *)avc); /* So it won't disappear */ \ + VN_HOLD(AFSTOV(avc)); /* So it won't disappear */ \ CRKEEP(avc, acred); /* Should use a better place for the creds */ \ } \ else { \ diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 54e80dc59..b9fea5a8f 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -10,7 +10,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_call.c,v 1.10 2002/01/28 00:53:19 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_call.c,v 1.11 2002/05/12 05:50:41 hartmans Exp $"); #include "../afs/sysincludes.h" /* Standard vendor system headers */ #include "../afs/afsincludes.h" /* Afs-based standard headers */ @@ -980,6 +980,9 @@ asmlinkage int afs_syscall(long syscall, long parm1, long parm2, long parm3, long linux_ret=0; long *retval = &linux_ret; long eparm[4]; /* matches AFSCALL_ICL in fstrace.c */ +#ifdef AFS_SPARC64_LINUX24_ENV + afs_int32 eparm32[4]; +#endif /* eparm is also used by AFSCALL_CALL in afsd.c */ #else #if defined(UKERNEL) @@ -1042,6 +1045,25 @@ Afs_syscall () uap->parm2 = parm2; uap->parm3 = parm3; if (syscall == AFSCALL_ICL || syscall == AFSCALL_CALL) { +#ifdef AFS_SPARC64_LINUX24_ENV +/* from arch/sparc64/kernel/sys_sparc32.c */ +#define AA(__x) \ +({ unsigned long __ret; \ + __asm__ ("srl %0, 0, %0" \ + : "=r" (__ret) \ + : "0" (__x)); \ + __ret; \ +}) + + + if (current->thread.flags & SPARC_FLAG_32BIT) { + AFS_COPYIN((char*)parm4, (char*)eparm32, sizeof(eparm32), code); + eparm[0]=AA(eparm32[0]); + eparm[1]=AA(eparm32[1]); + eparm[2]=AA(eparm32[2]); +#undef AA +} else +#endif AFS_COPYIN((char*)parm4, (char*)eparm, sizeof(eparm), code); uap->parm4 = eparm[0]; uap->parm5 = eparm[1]; @@ -1072,17 +1094,12 @@ Afs_syscall () #endif } else if (uap->syscall == AFSCALL_SETPAG) { #ifdef AFS_SUN5_ENV - struct cred *cred; register proc_t *procp; procp = ttoproc(curthread); - mutex_enter(&procp->p_crlock); - cred = procp->p_cred; AFS_GLOCK(); - code = afs_setpag(&cred); + code = afs_setpag(&procp->p_cred); AFS_GUNLOCK(); - procp->p_cred = cred; - mutex_exit(&procp->p_crlock); #else AFS_GLOCK(); #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV) diff --git a/src/afs/afs_daemons.c b/src/afs/afs_daemons.c index abd2307ef..a73e1e829 100644 --- a/src/afs/afs_daemons.c +++ b/src/afs/afs_daemons.c @@ -10,7 +10,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_daemons.c,v 1.6 2001/10/14 18:43:25 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_daemons.c,v 1.7 2002/05/12 05:50:42 hartmans Exp $"); #include "../afs/sysincludes.h" /* Standard vendor system headers */ #include "../afs/afsincludes.h" /* Afs-based standard headers */ @@ -338,7 +338,7 @@ afs_CheckRootVolume () { mp = (struct mount *) afs_globalVFS->vfs_data ; mp->m_rootgp = gget(mp, 0, 0, (char *)rootgp); afs_unlock(mp->m_rootgp); /* unlock basic gnode */ - afs_vrele((struct vcache *) rootgp); /* zap afs_root's vnode hold */ + afs_vrele(VTOAFS(rootgp)); /* zap afs_root's vnode hold */ } } #endif @@ -389,9 +389,9 @@ void BPath(ab) return; } #ifdef AFS_DEC_ENV - tvc = (struct vcache *) afs_gntovn(tvn); + tvc = VTOAFS(afs_gntovn(tvn)); #else - tvc = (struct vcache *) tvn; + tvc = VTOAFS(tvn); #endif /* here we know its an afs vnode, so we can get the data for the chunk */ tdc = afs_GetDCache(tvc, ab->parm[1], &treq, &offset, &len, 1); @@ -540,7 +540,7 @@ struct brequest *afs_BQueue(aopcode, avc, dontwait, ause, acred, aparm0, aparm1, #ifdef AFS_DEC_ENV avc->vrefCount++; #else - VN_HOLD((struct vnode *)avc); + VN_HOLD(AFSTOV(avc)); #endif } tb->refCount = ause+1; @@ -778,7 +778,7 @@ afs_BioDaemon (nbiods) AFS_GLOCK(); continue; } - vcp = (struct vcache *)bp->b_vp; + vcp = VTOAFS(bp->b_vp); if (bp->b_flags & B_PFSTORE) { /* XXXX */ ObtainWriteLock(&vcp->lock,404); if (vcp->v.v_gnode->gn_mwrcnt) { @@ -1131,7 +1131,7 @@ afs_BioDaemon (nbiods) splx(s); continue; } - vcp = (struct vcache *)bp->b_vp; + vcp = VTOAFS(bp->b_vp); if (bp->b_flags & B_PFSTORE) { ObtainWriteLock(&vcp->lock,210); if (vcp->v.v_gnode->gn_mwrcnt) { diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 769b4a911..bcb386192 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -10,7 +10,7 @@ #include #include "../afs/param.h" -RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_pioctl.c,v 1.11 2002/01/22 20:29:43 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/afs/afs_pioctl.c,v 1.12 2002/05/12 05:50:42 hartmans Exp $"); #include "../afs/sysincludes.h" /* Standard vendor system headers */ #include "../afs/afsincludes.h" /* Afs-based standard headers */ @@ -484,7 +484,7 @@ afs_xioctl () /* first determine whether this is any sort of vnode */ #ifdef AFS_LINUX22_ENV - tvc = (struct vcache *)ip; + tvc = VTOAFS(ip); { #else #ifdef AFS_SUN5_ENV @@ -494,14 +494,14 @@ afs_xioctl () #endif /* good, this is a vnode; next see if it is an AFS vnode */ #if defined(AFS_AIX32_ENV) || defined(AFS_SUN5_ENV) - tvc = (struct vcache *) fd->f_vnode; /* valid, given a vnode */ + tvc = VTOAFS(fd->f_vnode); /* valid, given a vnode */ #else - tvc = (struct vcache *) fd->f_data; /* valid, given a vnode */ + tvc = VTOAFS((struct vnode*)fd->f_data); /* valid, given a vnode */ #endif #endif /* AFS_LINUX22_ENV */ - if (tvc && IsAfsVnode((struct vnode *)tvc)) { + if (tvc && IsAfsVnode(AFSTOV(tvc))) { #ifdef AFS_DEC_ENV - tvc = (struct vcache *) afs_gntovn((struct gnode *) tvc); + tvc = VTOAFS(afs_gntovn((struct gnode *) tvc)); if (!tvc) { /* shouldn't happen with held gnodes */ u.u_error = ENOENT; return; @@ -2665,7 +2665,7 @@ struct AFS_UCRED *acred; for(tvc = afs_vhashT[i]; tvc; tvc=tvc->hnext) { if (tvc->fid.Fid.Volume == volume && tvc->fid.Cell == cell) { #if defined(AFS_SGI_ENV) || defined(AFS_ALPHA_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV) - VN_HOLD((struct vnode *)tvc); + VN_HOLD(AFSTOV(tvc)); #else #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV) osi_vnhold(tvc, 0); diff --git a/src/bozo/bosoprocs.c b/src/bozo/bosoprocs.c index 6fb4e7dfc..3dfd8c9f4 100644 --- a/src/bozo/bosoprocs.c +++ b/src/bozo/bosoprocs.c @@ -10,7 +10,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/bozo/bosoprocs.c,v 1.4 2002/01/22 20:29:44 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/bozo/bosoprocs.c,v 1.5 2002/05/12 05:50:43 hartmans Exp $"); #include #include @@ -1179,7 +1179,7 @@ char **ainstance; { struct bozo_bosEntryStats bozo_bosEntryStats[] = { {NULL, 1,1, 0755, 02}, /* AFSDIR_SERVER_AFS_DIRPATH */ - {NULL, 1,1, 0700, 02}, /* AFSDIR_SERVER_ETC_DIRPATH */ + {NULL, 1,1, 0755, 02}, /* AFSDIR_SERVER_ETC_DIRPATH */ {NULL, 1,1, 0755, 02}, /* AFSDIR_SERVER_BIN_DIRPATH */ {NULL, 1,1, 0755, 02}, /* AFSDIR_SERVER_LOGS_DIRPATH */ {NULL, 1,0, 0700, 07}, /* AFSDIR_SERVER_BACKUP_DIRPATH */ diff --git a/src/libafs/MakefileProto.LINUX.in b/src/libafs/MakefileProto.LINUX.in index 1ecd276b4..dbd78c978 100644 --- a/src/libafs/MakefileProto.LINUX.in +++ b/src/libafs/MakefileProto.LINUX.in @@ -24,6 +24,8 @@ afssrvsbindir=@afssrvsbindir@ afssrvlibexecdir=@afssrvlibexecdir@ afskerneldir=@afskerneldir@ SYS_NAME=@AFS_SYSNAME@ +KDEBUG=@KERN_DEBUG_OPT@ +FOMIT=@OMIT_FRAME_POINTER@ include config/Makefile.${SYS_NAME} @@ -37,6 +39,7 @@ AFS_OS_OBJS = \ osi_misc.o \ osi_module.o \ osi_sleep.o \ + osi_sysctl.o \ osi_vfsops.o \ osi_vm.o \ osi_vnodeops.o \ @@ -54,40 +57,41 @@ CC = gcc LD = ld # -Wall -CCFLAGS = -O2 -fomit-frame-pointer \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) \ -fno-strength-reduce -pipe -march=i486 -malign-loops=2 -malign-jumps=2 \ -malign-functions=2 DEFINES = -D__KERNEL__ -DCPU=586 -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} ${KDEFINES} -CCFLAGS = -O2 -fomit-frame-pointer -fno-strength-reduce -pipe -mno-fp-regs -ffixed-8 +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) -fno-strength-reduce -pipe -mno-fp-regs -ffixed-8 DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} -CCFLAGS = -O -fomit-frame-pointer -fno-strength-reduce \ +CCFLAGS = -O $(FOMIT) -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 \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) \ -fno-strength-reduce -pipe -mcpu=v8 -mno-fpu -fcall-used-g5 -fcall-used-g7 DEFINES = -D__KERNEL__ -DCPU=sparc -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} CC = sparc64-linux-gcc LD = ld -m elf64_sparc -CCFLAGS = -O2 -fomit-frame-pointer \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) \ -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 \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) -fno-strength-reduce \ -fno-strict-aliasing -fsigned-char -msoft-float -pipe \ -fno-builtin -ffixed-r2 DEFINES = -D__KERNEL__ -D__powerpc__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} -CCFLAGS = -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -fno-strength-reduce \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) \ + -fno-strict-aliasing -fno-common -fno-strength-reduce \ -fno-strict-aliasing -fsigned-char -mno-space-regs -mfast-indirect-calls \ -mdisable-fpregs -ffunction-sections -march=1.1 -mschedule=7100 DEFINES = -D__KERNEL__ -D__linux__ -DKERNEL -D_KERNEL -DMODULE ${SMP_DEF} -CCFLAGS = -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe \ +CCFLAGS = $(KDEBUG) -O2 $(FOMIT) -fno-strict-aliasing -fno-common -pipe \ -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -mb-step DEFINES = -D__KERNEL__ -DKERNEL -D_KERNEL ${SMP_DEF} -DMODULE @@ -271,6 +275,8 @@ osi_module.o: $(AFS)/osi_module.c $(CRULE1) osi_sleep.o: $(AFS)/osi_sleep.c $(CRULE1) +osi_sysctl.o: $(AFS)/osi_sysctl.c + $(CRULE1) osi_vfsops.o: $(AFS)/osi_vfsops.c $(CRULE1) osi_vm.o: $(AFS)/osi_vm.c diff --git a/src/ptserver/ptserver.c b/src/ptserver/ptserver.c index 5985db9e9..938a9d9da 100644 --- a/src/ptserver/ptserver.c +++ b/src/ptserver/ptserver.c @@ -10,7 +10,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/ptserver/ptserver.c,v 1.7 2001/10/14 18:43:29 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/ptserver/ptserver.c,v 1.8 2002/05/12 05:50:43 hartmans Exp $"); #include #ifdef AFS_AIX32_ENV @@ -268,9 +268,8 @@ void main (argc, argv) } else sc[2] = sc[0]; - /* These two lines disallow jumbograms */ - rx_maxReceiveSize = OLD_MAX_PACKET_SIZE; - rxi_nSendFrags = rxi_nRecvFrags = 1; + /* Disable jumbograms */ + rx_SetNoJumbo(); tservice = rx_NewService(0,PRSRV,"Protection Server",sc,3,PR_ExecuteRequest); if (tservice == (struct rx_service *)0) { diff --git a/src/venus/fstrace.c b/src/venus/fstrace.c index 15fa11b03..1c54b9a6c 100644 --- a/src/venus/fstrace.c +++ b/src/venus/fstrace.c @@ -13,7 +13,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/venus/fstrace.c,v 1.6 2001/09/11 15:48:53 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/venus/fstrace.c,v 1.7 2002/05/12 05:50:43 hartmans Exp $"); #include #include @@ -1594,6 +1594,11 @@ tryagain: { if (!failed) { failed = 1; +#if defined(AFS_OSF_ENV) && !defined(AFS_OSF20_ENV) + catclose1 (catd); +#else + catclose (catd); +#endif goto tryagain; } sprintf ((char *) error_text, "status %08x (%s / %s)", diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c index dba0e6375..77d82b03d 100644 --- a/src/viced/afsfileprocs.c +++ b/src/viced/afsfileprocs.c @@ -28,7 +28,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/viced/afsfileprocs.c,v 1.7 2002/01/22 20:29:45 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/viced/afsfileprocs.c,v 1.8 2002/05/12 05:50:44 hartmans Exp $"); #include #include @@ -2293,7 +2293,7 @@ SAFSS_Rename (tcon, OldDirFid, OldName, NewDirFid, NewName, OutOldDirStatus, V_parentId(volptr)); IH_RELEASE(newfileptr->handle); if (errorCode == -1) { - ViceLog(0, ("Del: inode=%d, name=%s, errno=%d\n", + ViceLog(0, ("Del: inode=%s, name=%s, errno=%d\n", PrintInode(NULL, VN_GET_INO(newfileptr)), NewName, errno)); if ((errno != ENOENT) && (errno != EIO) && (errno != ENXIO)) diff --git a/src/vol/partition.c b/src/vol/partition.c index e25678b39..f4c396970 100644 --- a/src/vol/partition.c +++ b/src/vol/partition.c @@ -18,7 +18,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/vol/partition.c,v 1.9 2001/10/14 18:43:31 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/vol/partition.c,v 1.10 2002/05/12 05:50:44 hartmans Exp $"); #include #ifdef AFS_NT40_ENV @@ -303,7 +303,7 @@ int VCheckPartition(part, devname) return -1; #endif -#ifdef AFS_DUX40_ENV +#if defined(AFS_DUX40_ENV) && !defined(AFS_NAMEI_ENV) if (status.st_ino != ROOTINO) { Log("%s is not a mounted file system; ignored.\n", part); return 0; diff --git a/src/volser/volmain.c b/src/volser/volmain.c index e73e2d407..60f965285 100644 --- a/src/volser/volmain.c +++ b/src/volser/volmain.c @@ -10,7 +10,7 @@ #include #include -RCSID("$Header: /tmp/cvstemp/openafs/src/volser/volmain.c,v 1.7 2001/09/11 15:48:58 hartmans Exp $"); +RCSID("$Header: /tmp/cvstemp/openafs/src/volser/volmain.c,v 1.8 2002/05/12 05:50:44 hartmans Exp $"); #include #ifdef AFS_NT40_ENV @@ -337,8 +337,7 @@ usage: } if (!rxJumbograms) { /* Don't allow 3.4 vos clients to send jumbograms and we don't send. */ - rx_maxReceiveSize = OLD_MAX_PACKET_SIZE; - rxi_nSendFrags = rxi_nRecvFrags = 1; + rx_SetNoJumbo(); } rx_GetIFInfo(); rx_SetRxDeadTime(420);