Deleted Added
full compact
39c39
< * $FreeBSD: head/sys/kern/vfs_syscalls.c 73909 2001-03-07 02:25:13Z jhb $
---
> * $FreeBSD: head/sys/kern/vfs_syscalls.c 74273 2001-03-15 02:54:29Z rwatson $
3683a3684
> struct vnode *filename_vp;
3685a3687
> char attrname[EXTATTR_MAXNAMELEN];
3687a3690,3715
> /*
> * SCARG(uap, attrname) not always defined. We check again later
> * when we invoke the VFS call so as to pass in NULL there if needed.
> */
> if (SCARG(uap, attrname) != NULL) {
> error = copyinstr(SCARG(uap, attrname), attrname,
> EXTATTR_MAXNAMELEN, NULL);
> if (error)
> return (error);
> }
>
> /*
> * SCARG(uap, filename) not always defined. If it is, grab
> * a vnode lock, which VFS_EXTATTRCTL() will later release.
> */
> filename_vp = NULL;
> if (SCARG(uap, filename) != NULL) {
> NDINIT(&nd, LOOKUP | LOCKLEAF, FOLLOW, UIO_USERSPACE,
> SCARG(uap, filename), p);
> if ((error = namei(&nd)) != 0)
> return (error);
> filename_vp = nd.ni_vp;
> NDFREE(&nd, NDF_NO_VP_RELE | NDF_NO_VP_UNLOCK);
> }
>
> /* SCARG(uap, path) always defined. */
3693c3721,3723
< if (error)
---
> if (error) {
> if (filename_vp)
> vrele(filename_vp);
3695,3696c3725,3734
< error = VFS_EXTATTRCTL(mp, SCARG(uap, cmd), SCARG(uap, attrname),
< SCARG(uap, arg), p);
---
> }
>
> if (SCARG(uap, attrname) != NULL) {
> error = VFS_EXTATTRCTL(mp, SCARG(uap, cmd), filename_vp,
> SCARG(uap, namespace), attrname, p);
> } else {
> error = VFS_EXTATTRCTL(mp, SCARG(uap, cmd), filename_vp,
> SCARG(uap, namespace), NULL, p);
> }
>
3697a3736,3742
> /*
> * VFS_EXTATTRCTL will have unlocked, but not de-ref'd,
> * filename_vp, so vrele it if it is defined.
> */
> if (filename_vp != NULL)
> vrele(filename_vp);
>
3759,3760c3804,3805
< error = VOP_SETEXTATTR(nd.ni_vp, attrname, &auio, p->p_cred->pc_ucred,
< p);
---
> error = VOP_SETEXTATTR(nd.ni_vp, SCARG(uap, namespace), attrname,
> &auio, p->p_cred->pc_ucred, p);
3826,3827c3871,3872
< error = VOP_GETEXTATTR(nd.ni_vp, attrname, &auio, p->p_cred->pc_ucred,
< p);
---
> error = VOP_GETEXTATTR(nd.ni_vp, SCARG(uap, namespace), attrname,
> &auio, p->p_cred->pc_ucred, p);
3862,3863c3907,3908
< error = VOP_SETEXTATTR(nd.ni_vp, attrname, NULL, p->p_cred->pc_ucred,
< p);
---
> error = VOP_SETEXTATTR(nd.ni_vp, SCARG(uap, namespace), attrname,
> NULL, p->p_cred->pc_ucred, p);