From: Johan Danielsson Date: Thu, 15 Mar 2001 17:43:11 +0000 (+0000) Subject: simplification-of-code-in-cache-manager-to-make-dux-advfs-support-simpler-20010315 X-Git-Tag: BP-openafs-devel-autoconf~32 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=3fd459ac396cef49a89be43176b218b573ae8f93;p=packages%2Fo%2Fopenafs.git simplification-of-code-in-cache-manager-to-make-dux-advfs-support-simpler-20010315 with advfs you can't VTOI inodes so provide a wrapper function for dux to ease this problem --- diff --git a/src/afs/DUX/osi_inode.c b/src/afs/DUX/osi_inode.c index 0679b2a18..6bdf32bfa 100644 --- a/src/afs/DUX/osi_inode.c +++ b/src/afs/DUX/osi_inode.c @@ -20,6 +20,42 @@ #include "../afs/afs_stats.h" /* statistics stuff */ #include +/* given a vnode, return the `inode number'; if it's a UFS vnode just + return the i_number from the in kernel inode struct, if not stat + the file to get the inumber from there */ +afs_uint32 +osi_vnodeToInumber(struct vnode *vnode) +{ + int error; + struct vattr attr; + + /* use faster version with UFS */ + if(vnode->v_tag == VT_UFS) + return VTOI(vnode)->i_number; + /* otherwise stat the file */ + VOP_GETATTR(vnode, &attr, NULL, error); + if(error) + osi_Panic("VOP_GETATTR = %d", error); + return attr.va_fileid; +} + +/* return the id of the device containing the file */ +afs_uint32 +osi_vnodeToDev(struct vnode *vnode) +{ + int error; + struct vattr attr; + + /* use faster version with UFS */ + if(vnode->v_tag == VT_UFS) + return VTOI(vnode)->i_dev; + /* otherwise stat the file */ + VOP_GETATTR(vnode, &attr, NULL, error); + if(error) + osi_Panic("VOP_GETATTR = %d", error); + return attr.va_rdev; +} + getinode(fs, dev, inode, ipp, perror) struct mount *fs; struct inode **ipp; diff --git a/src/afs/afs.h b/src/afs/afs.h index 12e3a5a36..82e69fd08 100644 --- a/src/afs/afs.h +++ b/src/afs/afs.h @@ -1062,5 +1062,31 @@ extern int afs_norefpanic; #define VN_UNLOCK(vp) simple_unlock(&(vp)->v_lock) #endif +/* get a file's serial number from a vnode */ +#ifndef afs_vnodeToInumber +#if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) +#define afs_vnodeToInumber(V) VnodeToIno(V) +#else +#ifdef AFS_DECOSF_ENV +#define afs_vnodeToInumber(V) osi_vnodeToInumber(V) +#else +#define afs_vnodeToInumber(V) (VTOI(V)->i_number) +#endif /* AFS_DECOSF_ENV */ +#endif /* AFS_SGI62_ENV */ +#endif + +/* get a file's device number from a vnode */ +#ifndef afs_vnodeToDev +#if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) +#define afs_vnodeToDev(V) VnodeToDev(V) +#else +#ifdef AFS_DECOSF_ENV +#define afs_vnodeToDev(V) osi_vnodeToDev(V) +#else +#define afs_vnodeToDev(V) (VTOI(V)->i_dev) +#endif /* AFS_DECOSF_ENV */ +#endif /* AFS_SGI62_ENV */ +#endif + #endif /* _AFS_H_ */ diff --git a/src/afs/afs_dcache.c b/src/afs/afs_dcache.c index 56c5c83e1..9f264d649 100644 --- a/src/afs/afs_dcache.c +++ b/src/afs/afs_dcache.c @@ -2473,11 +2473,7 @@ int afs_InitCacheFile(afile, ainode) tdc->f.inode = VTOI(filevp->d_inode)->i_number; dput(filevp); #else -#if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) - tdc->f.inode = VnodeToIno(filevp); -#else - tdc->f.inode = VTOI(filevp)->i_number; -#endif + tdc->f.inode = afs_vnodeToInumber(filevp); #ifdef AFS_DEC_ENV grele(filevp); #else diff --git a/src/afs/afs_init.c b/src/afs/afs_init.c index 765f5660f..84fbc7bd6 100644 --- a/src/afs/afs_init.c +++ b/src/afs/afs_init.c @@ -325,11 +325,7 @@ afs_InitVolumeInfo(afile) #else code = gop_lookupname(afile, AFS_UIOSYS, 0, (struct vnode **) 0, &filevp); if (code) return ENOENT; -#if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) - fce.inode = volumeInode = VnodeToIno(filevp); -#else - fce.inode = volumeInode = VTOI(filevp)->i_number; -#endif + fce.inode = volumeInode = afs_vnodeToInumber(filevp); #ifdef AFS_DEC_ENV grele(filevp); #else @@ -449,16 +445,13 @@ afs_InitCacheInfo(afile) #endif } #ifdef AFS_LINUX20_ENV - cacheInode = filevp->i_ino; - afs_cacheSBp = filevp->i_sb; + cacheInode = filevp->i_ino; + afs_cacheSBp = filevp->i_sb; #else + cacheInode = afs_vnodeToInumber(filevp); + cacheDev.dev = afs_vnodeToDev(filevp); #if defined(AFS_SGI62_ENV) || defined(AFS_HAVE_VXFS) afs_InitDualFSCacheOps(filevp); - cacheInode = VnodeToIno(filevp); - cacheDev.dev = VnodeToDev(filevp); -#else - cacheInode = VTOI(filevp)->i_number; - cacheDev.dev = VTOI(filevp)->i_dev; #endif afs_cacheVfsp = filevp->v_vfsp; #endif /* AFS_LINUX20_ENV */