Skip site navigation (1)Skip section navigation (2)
Date:      07 Dec 1998 22:28:14 -0500
From:      "Robert V. Baron" <rvb@cs.cmu.edu>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Sloppy uio.uio_procp initialization ...
Message-ID:  <yzs1zmbmhwx.fsf_-_@sicily.odyssey.cs.cmu.edu>
In-Reply-To: "Robert V. Baron"'s message of 02 Dec 1998 10:23:01 -0500
References:  <4.1.19981123122653.00abfe40@206.25.93.69> <19981125142249.B38959@matti.ee> <yzsogpmk1pm.fsf_-_@sicily.odyssey.cs.cmu.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

Recently I fixed vnode_pager_input_old, because it was doing a
VOP_READ into a Coda fs, but it had set the uio.uio_procp to 0 vs
curproc.  (Coda freaks because it vgets a vnode [and hence locks it
with curproc], then tries to unlock it with a 0 process pointer.)
I just noticed (the hard way) the same design happens in ktrwrite():
ktrwrite(vp, kth)
        struct vnode *vp;
        register struct ktr_header *kth;
{
        struct uio auio;
        struct iovec aiov[2];
        register struct proc *p = curproc;      /* XXX */
        int error;

	...
        auio.uio_procp = (struct proc *)0;
	...
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
        error = VOP_WRITE(vp, &auio, IO_UNIT|IO_APPEND, p->p_ucred);
        VOP_UNLOCK(vp, 0, p);

So here the vn_locks are using the actual process pointer, but since
uio_procp is 0, coda will try an unlock not with curproc and fail.  I'll
change ktrwrite to use auio.uio_procp = curproc, Wed Noon EST, unless
anyone objects.

PS
For the curious, Coda is locking and unlocking a vnode associated with
the Coda vnode (which caches the file data) -- not the Coda vnode.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?yzs1zmbmhwx.fsf_-_>