svn commit: r188734 - in stable/7/sys: . contrib/pf dev/ath/ath_hal
dev/cxgb kern
John Baldwin
jhb at FreeBSD.org
Tue Feb 17 13:35:56 PST 2009
Author: jhb
Date: Tue Feb 17 21:35:54 2009
New Revision: 188734
URL: http://svn.freebsd.org/changeset/base/188734
Log:
MFC: Use shared vnode locks instead of exclusive vnode locks for the
access(), chdir(), chroot(), eaccess(), fchdir(), fpathconf(), fstat(),
fstatfs(), lseek() (when figuring out the current size of the file in the
SEEK_END case), pathconf(), readlink(), and statfs() system calls.
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/ath/ath_hal/ (props changed)
stable/7/sys/dev/cxgb/ (props changed)
stable/7/sys/kern/kern_descrip.c
stable/7/sys/kern/vfs_syscalls.c
stable/7/sys/kern/vfs_vnops.c
Modified: stable/7/sys/kern/kern_descrip.c
==============================================================================
--- stable/7/sys/kern/kern_descrip.c Tue Feb 17 21:35:17 2009 (r188733)
+++ stable/7/sys/kern/kern_descrip.c Tue Feb 17 21:35:54 2009 (r188734)
@@ -1261,7 +1261,7 @@ fpathconf(struct thread *td, struct fpat
if (vp != NULL) {
int vfslocked;
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
error = VOP_PATHCONF(vp, uap->name, td->td_retval);
VOP_UNLOCK(vp, 0, td);
VFS_UNLOCK_GIANT(vfslocked);
Modified: stable/7/sys/kern/vfs_syscalls.c
==============================================================================
--- stable/7/sys/kern/vfs_syscalls.c Tue Feb 17 21:35:17 2009 (r188733)
+++ stable/7/sys/kern/vfs_syscalls.c Tue Feb 17 21:35:54 2009 (r188734)
@@ -296,8 +296,8 @@ kern_statfs(struct thread *td, char *pat
int error;
struct nameidata nd;
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
- pathseg, path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE |
+ AUDITVNODE1, pathseg, path, td);
error = namei(&nd);
if (error)
return (error);
@@ -378,7 +378,7 @@ kern_fstatfs(struct thread *td, int fd,
return (error);
vp = fp->f_vnode;
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
#ifdef AUDIT
AUDIT_ARG(vnode, vp, ARG_VNODE1);
#endif
@@ -746,7 +746,7 @@ fchdir(td, uap)
VREF(vp);
fdrop(fp, td);
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
AUDIT_ARG(vnode, vp, ARG_VNODE1);
error = change_dir(vp, td);
while (!error && (mp = vp->v_mountedhere) != NULL) {
@@ -754,7 +754,7 @@ fchdir(td, uap)
if (vfs_busy(mp, 0, 0, td))
continue;
tvfslocked = VFS_LOCK_GIANT(mp);
- error = VFS_ROOT(mp, LK_EXCLUSIVE, &tdp, td);
+ error = VFS_ROOT(mp, LK_SHARED, &tdp, td);
vfs_unbusy(mp, td);
if (error) {
VFS_UNLOCK_GIANT(tvfslocked);
@@ -810,8 +810,8 @@ kern_chdir(struct thread *td, char *path
struct vnode *vp;
int vfslocked;
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | AUDITVNODE1 | MPSAFE,
- pathseg, path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | AUDITVNODE1 |
+ MPSAFE, pathseg, path, td);
if ((error = namei(&nd)) != 0)
return (error);
vfslocked = NDHASGIANT(&nd);
@@ -896,8 +896,8 @@ chroot(td, uap)
error = priv_check(td, PRIV_VFS_CHROOT);
if (error)
return (error);
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
- UIO_USERSPACE, uap->path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE |
+ AUDITVNODE1, UIO_USERSPACE, uap->path, td);
error = namei(&nd);
if (error)
goto error;
@@ -1779,7 +1779,7 @@ lseek(td, uap)
offset += fp->f_offset;
break;
case L_XTND:
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
error = VOP_GETATTR(vp, &vattr, cred, td);
VOP_UNLOCK(vp, 0, td);
if (error)
@@ -1936,8 +1936,8 @@ kern_access(struct thread *td, char *pat
tmpcred->cr_uid = cred->cr_ruid;
tmpcred->cr_groups[0] = cred->cr_rgid;
td->td_ucred = tmpcred;
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
- pathseg, path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE |
+ AUDITVNODE1, pathseg, path, td);
if ((error = namei(&nd)) != 0)
goto out1;
vfslocked = NDHASGIANT(&nd);
@@ -2308,8 +2308,8 @@ kern_pathconf(struct thread *td, char *p
struct nameidata nd;
int error, vfslocked;
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
- pathseg, path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE |
+ AUDITVNODE1, pathseg, path, td);
if ((error = namei(&nd)) != 0)
return (error);
vfslocked = NDHASGIANT(&nd);
@@ -2360,8 +2360,8 @@ kern_readlink(struct thread *td, char *p
struct nameidata nd;
int vfslocked;
- NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
- pathseg, path, td);
+ NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE |
+ AUDITVNODE1, pathseg, path, td);
if ((error = namei(&nd)) != 0)
return (error);
NDFREE(&nd, NDF_ONLY_PNBUF);
Modified: stable/7/sys/kern/vfs_vnops.c
==============================================================================
--- stable/7/sys/kern/vfs_vnops.c Tue Feb 17 21:35:17 2009 (r188733)
+++ stable/7/sys/kern/vfs_vnops.c Tue Feb 17 21:35:54 2009 (r188734)
@@ -610,7 +610,7 @@ vn_statfile(fp, sb, active_cred, td)
int error;
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
error = vn_stat(vp, sb, active_cred, fp->f_cred, td);
VOP_UNLOCK(vp, 0, td);
VFS_UNLOCK_GIANT(vfslocked);
More information about the svn-src-all
mailing list