summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_extattr.c
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2005-12-20 00:49:59 +0000
committerpjd <pjd@FreeBSD.org>2005-12-20 00:49:59 +0000
commitb98bf8f1d52a50da586ac0e1425756a9a9629158 (patch)
tree4f4d46f879af46d5841b813864f671ba6a1d4763 /sys/kern/vfs_extattr.c
parentd4461845a54318cfac55de9e62d38e082ad44f70 (diff)
downloadFreeBSD-src-b98bf8f1d52a50da586ac0e1425756a9a9629158.zip
FreeBSD-src-b98bf8f1d52a50da586ac0e1425756a9a9629158.tar.gz
Reduce Giant scope a bit, as fdrop() is believed to be MPSAFE.
The purpose of this change is consistency (not performance improvement:)), as it was hard to tell if fdrop() is MPSAFE or not when I saw it sometimes under the Giant and sometimes without it. Glanced at by: ssouhlal, kan
Diffstat (limited to 'sys/kern/vfs_extattr.c')
-rw-r--r--sys/kern/vfs_extattr.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index a0ee3ab..1632076 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -323,13 +323,11 @@ kern_fstatfs(struct thread *td, int fd, struct statfs *buf)
error = getvnode(td->td_proc->p_fd, fd, &fp);
if (error)
return (error);
- mtx_lock(&Giant);
mp = fp->f_vnode->v_mount;
fdrop(fp, td);
- if (mp == NULL) {
- mtx_unlock(&Giant);
+ if (mp == NULL)
return (EBADF);
- }
+ mtx_lock(&Giant);
#ifdef MAC
error = mac_check_mount_stat(td->td_ucred, mp);
if (error) {
@@ -679,9 +677,9 @@ fchdir(td, uap)
if ((error = getvnode(fdp, uap->fd, &fp)) != 0)
return (error);
vp = fp->f_vnode;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
VREF(vp);
fdrop(fp, td);
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
if (vp->v_type != VDIR)
error = ENOTDIR;
@@ -2431,8 +2429,8 @@ fchflags(td, uap)
return (error);
vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
error = setfflags(td, fp->f_vnode, uap->flags);
- fdrop(fp, td);
VFS_UNLOCK_GIANT(vfslocked);
+ fdrop(fp, td);
return (error);
}
@@ -2561,8 +2559,8 @@ fchmod(td, uap)
return (error);
vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
error = setfmode(td, fp->f_vnode, uap->mode);
- fdrop(fp, td);
VFS_UNLOCK_GIANT(vfslocked);
+ fdrop(fp, td);
return (error);
}
@@ -2709,8 +2707,8 @@ fchown(td, uap)
return (error);
vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
error = setfown(td, fp->f_vnode, uap->uid, uap->gid);
- fdrop(fp, td);
VFS_UNLOCK_GIANT(vfslocked);
+ fdrop(fp, td);
return (error);
}
@@ -2913,8 +2911,8 @@ kern_futimes(struct thread *td, int fd, struct timeval *tptr,
return (error);
vfslocked = VFS_LOCK_GIANT(fp->f_vnode->v_mount);
error = setutimes(td, fp->f_vnode, ts, 2, tptr == NULL);
- fdrop(fp, td);
VFS_UNLOCK_GIANT(vfslocked);
+ fdrop(fp, td);
return (error);
}
OpenPOWER on IntegriCloud