From 761c6ca7ff623a85532cd11c946734925a0e1dbc Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Fri, 13 May 2005 22:43:55 +0000 Subject: [PATCH] macos104-not-yet-20050513 rewrite attrs section a bit to deal with 10.4 --- src/afs/DARWIN/osi_machdep.h | 9 +++++++++ src/afs/SOLARIS/osi_machdep.h | 2 ++ src/afs/VNOPS/afs_vnop_attrs.c | 30 +++++++++++++++--------------- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/afs/DARWIN/osi_machdep.h b/src/afs/DARWIN/osi_machdep.h index 8028a935c..f7db2cd7c 100644 --- a/src/afs/DARWIN/osi_machdep.h +++ b/src/afs/DARWIN/osi_machdep.h @@ -70,6 +70,7 @@ enum vcexcl { EXCL, NONEXCL }; #define vnode_clearfsnode(x) ((x)->v_data = 0) #define vnode_fsnode(x) (x)->v_data #define vnode_lock(x) vn_lock(x, LK_EXCLUSIVE | LK_RETRY, current_proc()); +#define vnode_isvroot(x) (((x)->v_flag & VROOT)?1:0) #endif #ifdef AFS_DARWIN80_ENV @@ -78,6 +79,14 @@ enum vcexcl { EXCL, NONEXCL }; #define vref vnode_ref #define vattr vnode_attr +#define va_size va_data_size +#define va_atime va_access_time +#define va_mtime va_modify_time +#define va_ctime va_change_time +#define va_bytes va_total_alloc +#define va_blocksize va_iosize +#define va_nodeid va_fileid + #define SetAfsVnode(vn) /* nothing; done in getnewvnode() */ /* vnode_vfsfsprivate is not declared, so no macro for us */ extern void * afs_fsprivate_data; diff --git a/src/afs/SOLARIS/osi_machdep.h b/src/afs/SOLARIS/osi_machdep.h index e59657802..22455cac5 100644 --- a/src/afs/SOLARIS/osi_machdep.h +++ b/src/afs/SOLARIS/osi_machdep.h @@ -101,4 +101,6 @@ extern kmutex_t afs_rxglobal_lock; #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0) #endif +/* for afs/VNOPS/afs_vnop_attrs.c */ +#define va_blocks va_nblocks #endif /* _OSI_MACHDEP_H_ */ diff --git a/src/afs/VNOPS/afs_vnop_attrs.c b/src/afs/VNOPS/afs_vnop_attrs.c index 84fd3f235..2e5313110 100644 --- a/src/afs/VNOPS/afs_vnop_attrs.c +++ b/src/afs/VNOPS/afs_vnop_attrs.c @@ -93,6 +93,8 @@ afs_CopyOutAttrs(register struct vcache *avc, register struct vattr *attrs) attrs->va_fsid = avc->v.v_vfsp->vfs_fsid.val[0]; #elif defined(AFS_OSF_ENV) attrs->va_fsid = avc->v.v_mount->m_stat.f_fsid.val[0]; +#elif defined(AFS_DARWIN80_ENV) + VATTR_RETURN(attrs, va_fsid, vfs_statfs(vnode_mount(AFSTOV(avc)))->f_fsid.val[0]); #elif defined(AFS_DARWIN70_ENV) attrs->va_fsid = avc->v->v_mount->mnt_stat.f_fsid.val[0]; #else /* ! AFS_DARWIN70_ENV */ @@ -156,26 +158,19 @@ afs_CopyOutAttrs(register struct vcache *avc, register struct vattr *attrs) * Below return 0 (and not 1) blocks if the file is zero length. This conforms * better with the other filesystems that do return 0. */ -#if !defined(AFS_OSF_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV) -#if !defined(AFS_HPUX_ENV) -#ifdef AFS_SUN5_ENV - attrs->va_nblocks = - (attrs->va_size ? ((attrs->va_size + 1023) >> 10) << 1 : 0); +#ifdef AFS_HPUX_ENV + attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023) >> 10) : 0); #elif defined(AFS_SGI_ENV) attrs->va_blocks = BTOBB(attrs->va_size); -#else - attrs->va_blocks = - (attrs->va_size ? ((attrs->va_size + 1023) >> 10) << 1 : 0); -#endif -#else /* !defined(AFS_HPUX_ENV) */ - attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023) >> 10) : 0); -#endif /* !defined(AFS_HPUX_ENV) */ -#else /* ! AFS_OSF_ENV && !AFS_DARWIN_ENV && !AFS_XBSD_ENV */ +#elif defined(AFS_XBSD_ENV) || defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) attrs->va_bytes = (attrs->va_size ? (attrs->va_size + 1023) : 1024); #ifdef va_bytes_rsv attrs->va_bytes_rsv = -1; #endif -#endif /* ! AFS_OSF_ENV && !AFS_DARWIN_ENV && !AFS_XBSD_ENV */ +#else + attrs->va_blocks = + (attrs->va_size ? ((attrs->va_size + 1023) >> 10) << 1 : 0); +#endif #ifdef AFS_LINUX22_ENV /* And linux has its own stash as well. */ @@ -301,9 +296,13 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred) attrs->va_nodeid = ip->i_ino; } #else - if (AFSTOV(avc)->v_flag & VROOT) { + if (vnode_isvroot(AFSTOV(avc))) { struct vnode *vp = AFSTOV(avc); +#ifdef AFS_DARWIN80_ENV + /* XXX vp = vnode_mount(vp)->mnt_vnodecovered; */ + vp = 0; +#else vp = vp->v_vfsp->vfs_vnodecovered; if (vp) { /* Ignore weird failures */ #ifdef AFS_SGI62_ENV @@ -316,6 +315,7 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred) attrs->va_nodeid = ip->i_number; #endif } +#endif } #endif /* AFS_LINUX22_ENV */ } -- 2.39.5