Thinking about it, this is probably a better patch. There's only one implementation of vop_access, so inline it into linvfs_permission. - Remove VOP_ACCESS - Remove vop_access - Inline xfs_access into linvfs_permission Index: fs/xfs/xfs_vnodeops.c =================================================================== RCS file: /var/cvs/linux-2.6/fs/xfs/xfs_vnodeops.c,v retrieving revision 1.2 diff -u -p -r1.2 xfs_vnodeops.c --- fs/xfs/xfs_vnodeops.c 12 Aug 2003 19:11:19 -0000 1.2 +++ fs/xfs/xfs_vnodeops.c 16 Aug 2003 22:34:57 -0000 @@ -928,30 +928,6 @@ xfs_setattr( /* - * xfs_access - * Null conversion from vnode mode bits to inode mode bits, as in efs. - */ -STATIC int -xfs_access( - bhv_desc_t *bdp, - int mode, - cred_t *credp) -{ - xfs_inode_t *ip; - int error; - - vn_trace_entry(BHV_TO_VNODE(bdp), __FUNCTION__, - (inst_t *)__return_address); - - ip = XFS_BHVTOI(bdp); - xfs_ilock(ip, XFS_ILOCK_SHARED); - error = xfs_iaccess(ip, mode, credp); - xfs_iunlock(ip, XFS_ILOCK_SHARED); - return error; -} - - -/* * xfs_readlink * */ @@ -4731,7 +4707,6 @@ vnodeops_t xfs_vnodeops = { .vop_ioctl = xfs_ioctl, .vop_getattr = xfs_getattr, .vop_setattr = xfs_setattr, - .vop_access = xfs_access, .vop_lookup = xfs_lookup, .vop_create = xfs_create, .vop_remove = xfs_remove, Index: fs/xfs/linux/xfs_iops.c =================================================================== RCS file: /var/cvs/linux-2.6/fs/xfs/linux/xfs_iops.c,v retrieving revision 1.2 diff -u -p -r1.2 xfs_iops.c --- fs/xfs/linux/xfs_iops.c 12 Aug 2003 19:11:20 -0000 1.2 +++ fs/xfs/linux/xfs_iops.c 16 Aug 2003 22:34:58 -0000 @@ -435,11 +435,18 @@ linvfs_permission( int mode, struct nameidata *nd) { + xfs_inode_t *ip; vnode_t *vp = LINVFS_GET_VP(inode); int error; + vn_trace_entry(BHV_TO_VNODE(bdp), __FUNCTION__, + (inst_t *)__return_address); + mode <<= 6; /* convert from linux to vnode access bits */ - VOP_ACCESS(vp, mode, NULL, error); + ip = XFS_BHVTOI(bdp); + xfs_ilock(ip, XFS_ILOCK_SHARED); + error = xfs_iaccess(ip, mode, NULL); + xfs_iunlock(ip, XFS_ILOCK_SHARED); return -error; } #else Index: fs/xfs/linux/xfs_vnode.h =================================================================== RCS file: /var/cvs/linux-2.6/fs/xfs/linux/xfs_vnode.h,v retrieving revision 1.2 diff -u -p -r1.2 xfs_vnode.h --- fs/xfs/linux/xfs_vnode.h 12 Aug 2003 19:11:20 -0000 1.2 +++ fs/xfs/linux/xfs_vnode.h 16 Aug 2003 22:34:58 -0000 @@ -173,7 +173,6 @@ typedef int (*vop_getattr_t)(bhv_desc_t struct cred *); typedef int (*vop_setattr_t)(bhv_desc_t *, struct vattr *, int, struct cred *); -typedef int (*vop_access_t)(bhv_desc_t *, int, struct cred *); typedef int (*vop_lookup_t)(bhv_desc_t *, vname_t *, vnode_t **, int, vnode_t *, struct cred *); typedef int (*vop_create_t)(bhv_desc_t *, vname_t *, struct vattr *, @@ -226,7 +225,6 @@ typedef struct vnodeops { vop_ioctl_t vop_ioctl; vop_getattr_t vop_getattr; vop_setattr_t vop_setattr; - vop_access_t vop_access; vop_lookup_t vop_lookup; vop_create_t vop_create; vop_remove_t vop_remove; @@ -276,8 +274,6 @@ typedef struct vnodeops { rv = _VOP_(vop_getattr, vp)((vp)->v_fbhv, vap, f, cr) #define VOP_SETATTR(vp, vap, f, cr, rv) \ rv = _VOP_(vop_setattr, vp)((vp)->v_fbhv, vap, f, cr) -#define VOP_ACCESS(vp, mode, cr, rv) \ - rv = _VOP_(vop_access, vp)((vp)->v_fbhv, mode, cr) #define VOP_LOOKUP(vp,d,vpp,f,rdir,cr,rv) \ rv = _VOP_(vop_lookup, vp)((vp)->v_fbhv,d,vpp,f,rdir,cr) #define VOP_CREATE(dvp,d,vap,vpp,cr,rv) \ .