Most of the VOP_* methods include an argument of type "struct proc *"
called `a_p'.  This pointer is always set to `curproc' as confirmed by
the diff below.  The diff has been though base build with NFS on amd64
and sparc64 as well as a full port bulk on amd64 and is in the current
octeon port bulk.

I'd like to commit it in order to start removing the requirement of
passing a "struct proc *" pointer which is always set to curproc.  This
is unnecessary and has spread in many other places in the kernel.

That makes codes unnecessarily complicated:
 - a "struct proc *" is carried over just to satisfy already complex
   interfaces
 - it isn't obvious which "struct proc *" is not the curproc and 
   asserts like KASSERT(p == curproc) are being made 
 - in many places where curproc is used people put XXX as if it was
   wrong

So this is just a starting diff, cleanups can start afterward.

Ok?

Index: kern/vfs_vops.c
===================================================================
RCS file: /cvs/src/sys/kern/vfs_vops.c,v
retrieving revision 1.25
diff -u -p -r1.25 vfs_vops.c
--- kern/vfs_vops.c     14 Feb 2020 11:57:56 -0000      1.25
+++ kern/vfs_vops.c     16 Mar 2020 14:16:42 -0000
@@ -145,6 +145,8 @@ VOP_OPEN(struct vnode *vp, int mode, str
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
+
        if (vp->v_op->vop_open == NULL)
                return (EOPNOTSUPP);
 
@@ -164,6 +166,7 @@ VOP_CLOSE(struct vnode *vp, int fflag, s
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        ASSERT_VP_ISLOCKED(vp);
 
        if (vp->v_op->vop_close == NULL)
@@ -184,6 +187,7 @@ VOP_ACCESS(struct vnode *vp, int mode, s
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        ASSERT_VP_ISLOCKED(vp);
 
        if (vp->v_op->vop_access == NULL)
@@ -202,6 +206,7 @@ VOP_GETATTR(struct vnode *vp, struct vat
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        if (vp->v_op->vop_getattr == NULL)
                return (EOPNOTSUPP);
 
@@ -219,6 +224,7 @@ VOP_SETATTR(struct vnode *vp, struct vat
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        ASSERT_VP_ISLOCKED(vp);
 
        if (vp->v_op->vop_setattr == NULL)
@@ -282,6 +288,7 @@ VOP_IOCTL(struct vnode *vp, u_long comma
        a.a_cred = cred;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        if (vp->v_op->vop_ioctl == NULL)
                return (EOPNOTSUPP);
 
@@ -300,6 +307,7 @@ VOP_POLL(struct vnode *vp, int fflag, in
        a.a_events = events;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        if (vp->v_op->vop_poll == NULL)
                return (EOPNOTSUPP);
 
@@ -343,6 +351,7 @@ VOP_FSYNC(struct vnode *vp, struct ucred
        a.a_waitfor = waitfor;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        ASSERT_VP_ISLOCKED(vp);
 
        if (vp->v_op->vop_fsync == NULL)
@@ -564,6 +573,7 @@ VOP_INACTIVE(struct vnode *vp, struct pr
        a.a_vp = vp;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        ASSERT_VP_ISLOCKED(vp);
 
        if (vp->v_op->vop_inactive == NULL)
@@ -580,6 +590,7 @@ VOP_RECLAIM(struct vnode *vp, struct pro
        a.a_vp = vp;
        a.a_p = p;
 
+       KASSERT(p == curproc);
        if (vp->v_op->vop_reclaim == NULL)
                return (EOPNOTSUPP);
 

Reply via email to