diff options
| author | Robert Watson <rwatson@FreeBSD.org> | 2002-02-08 05:58:41 +0000 |
|---|---|---|
| committer | Robert Watson <rwatson@FreeBSD.org> | 2002-02-08 05:58:41 +0000 |
| commit | 143bb598d0f01ca94a8bbca53dee0abfaa2b6ecf (patch) | |
| tree | 56470f1fa6a94960b13900cb280eb8f592f3e8df /sys | |
| parent | 489b85b027a6390cf73b9636b7271ddb56e031c0 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/kern/vfs_extattr.c | 16 | ||||
| -rw-r--r-- | sys/kern/vfs_syscalls.c | 16 |
2 files changed, 20 insertions, 12 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index 1a5e4019cf207..0500ddeb4b306 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -3929,7 +3929,7 @@ extattrctl(td, uap) { struct vnode *filename_vp; struct nameidata nd; - struct mount *mp; + struct mount *mp, *mp_writable; char attrname[EXTATTR_MAXNAMELEN]; int error; @@ -3960,13 +3960,17 @@ extattrctl(td, uap) /* SCARG(uap, path) always defined. */ NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, path), td); - if ((error = namei(&nd)) != 0) + if ((error = namei(&nd)) != 0) { + if (filename_vp != NULL) + vput(filename_vp); return (error); - error = vn_start_write(nd.ni_vp, &mp, V_WAIT | PCATCH); + } + mp = nd.ni_vp->v_mount; + error = vn_start_write(nd.ni_vp, &mp_writable, V_WAIT | PCATCH); NDFREE(&nd, 0); if (error) { - if (filename_vp) - vrele(filename_vp); + if (filename_vp != NULL) + vput(filename_vp); return (error); } @@ -3978,7 +3982,7 @@ extattrctl(td, uap) SCARG(uap, attrnamespace), NULL, td); } - vn_finished_write(mp); + vn_finished_write(mp_writable); /* * VFS_EXTATTRCTL will have unlocked, but not de-ref'd, * filename_vp, so vrele it if it is defined. diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 1a5e4019cf207..0500ddeb4b306 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -3929,7 +3929,7 @@ extattrctl(td, uap) { struct vnode *filename_vp; struct nameidata nd; - struct mount *mp; + struct mount *mp, *mp_writable; char attrname[EXTATTR_MAXNAMELEN]; int error; @@ -3960,13 +3960,17 @@ extattrctl(td, uap) /* SCARG(uap, path) always defined. */ NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, path), td); - if ((error = namei(&nd)) != 0) + if ((error = namei(&nd)) != 0) { + if (filename_vp != NULL) + vput(filename_vp); return (error); - error = vn_start_write(nd.ni_vp, &mp, V_WAIT | PCATCH); + } + mp = nd.ni_vp->v_mount; + error = vn_start_write(nd.ni_vp, &mp_writable, V_WAIT | PCATCH); NDFREE(&nd, 0); if (error) { - if (filename_vp) - vrele(filename_vp); + if (filename_vp != NULL) + vput(filename_vp); return (error); } @@ -3978,7 +3982,7 @@ extattrctl(td, uap) SCARG(uap, attrnamespace), NULL, td); } - vn_finished_write(mp); + vn_finished_write(mp_writable); /* * VFS_EXTATTRCTL will have unlocked, but not de-ref'd, * filename_vp, so vrele it if it is defined. |
