Index: kern/kern_descrip.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/kern_descrip.c,v retrieving revision 1.310 diff -u -p -r1.310 kern_descrip.c --- kern/kern_descrip.c 31 May 2007 11:51:51 -0000 1.310 +++ kern/kern_descrip.c 3 Jun 2007 17:34:02 -0000 @@ -1152,7 +1152,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); Index: kern/kern_jail.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/kern_jail.c,v retrieving revision 1.70 diff -u -p -r1.70 kern_jail.c --- kern/kern_jail.c 13 Apr 2007 23:54:22 -0000 1.70 +++ kern/kern_jail.c 1 May 2007 19:25:10 -0000 @@ -141,7 +141,7 @@ jail(struct thread *td, struct jail_args error = copyinstr(j.path, &pr->pr_path, sizeof(pr->pr_path), 0); if (error) goto e_killmtx; - NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | LOCKLEAF, UIO_SYSSPACE, + NDINIT(&nd, LOOKUP, MPSAFE | FOLLOW | LOCKSHARED | LOCKLEAF, UIO_SYSSPACE, pr->pr_path, td); error = namei(&nd); if (error) @@ -254,7 +254,7 @@ jail_attach(struct thread *td, struct ja sx_sunlock(&allprison_lock); vfslocked = VFS_LOCK_GIANT(pr->pr_root->v_mount); - vn_lock(pr->pr_root, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(pr->pr_root, LK_SHARED | LK_RETRY, td); if ((error = change_dir(pr->pr_root, td)) != 0) goto e_unlock; #ifdef MAC Index: kern/tty.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/tty.c,v retrieving revision 1.268 diff -u -p -r1.268 tty.c --- kern/tty.c 20 Dec 2006 02:49:59 -0000 1.268 +++ kern/tty.c 1 May 2007 19:27:15 -0000 @@ -972,8 +972,8 @@ ttioctl(struct tty *tp, u_long cmd, void return (EBUSY); /* Ensure user can open the real console. */ - NDINIT(&nid, LOOKUP, LOCKLEAF | FOLLOW, UIO_SYSSPACE, - "/dev/console", td); + NDINIT(&nid, LOOKUP, LOCKLEAF | FOLLOW | LOCKSHARED, + UIO_SYSSPACE, "/dev/console", td); if ((error = namei(&nid)) != 0) return (error); NDFREE(&nid, NDF_ONLY_PNBUF); Index: kern/vfs_acl.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_acl.c,v retrieving revision 1.53 diff -u -p -r1.53 vfs_acl.c --- kern/vfs_acl.c 5 Mar 2007 13:26:07 -0000 1.53 +++ kern/vfs_acl.c 1 May 2007 19:17:08 -0000 @@ -117,7 +117,7 @@ vacl_get_acl(struct thread *td, struct v int error; VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); #ifdef MAC error = mac_check_vnode_getacl(td->td_ucred, vp, type); if (error != 0) Index: kern/vfs_export.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_export.c,v retrieving revision 1.341 diff -u -p -r1.341 vfs_export.c --- kern/vfs_export.c 15 Feb 2007 22:08:35 -0000 1.341 +++ kern/vfs_export.c 1 May 2007 19:20:28 -0000 @@ -334,7 +334,7 @@ vfs_setpublicfs(struct mount *mp, struct bzero(&nfs_pub.np_handle, sizeof(nfs_pub.np_handle)); nfs_pub.np_handle.fh_fsid = mp->mnt_stat.f_fsid; - if ((error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp, curthread /* XXX */))) + if ((error = VFS_ROOT(mp, LK_SHARED, &rvp, curthread /* XXX */))) return (error); if ((error = VOP_VPTOFH(rvp, &nfs_pub.np_handle.fh_fid))) Index: kern/vfs_extattr.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_extattr.c,v retrieving revision 1.431 diff -u -p -r1.431 vfs_extattr.c --- kern/vfs_extattr.c 23 Dec 2006 00:30:03 -0000 1.431 +++ kern/vfs_extattr.c 1 May 2007 19:14:22 -0000 @@ -328,7 +328,7 @@ extattr_get_vp(struct vnode *vp, int att VFS_ASSERT_GIANT(vp->v_mount); VOP_LEASE(vp, td, td->td_ucred, LEASE_READ); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); /* * Slightly unusual semantics: if the user provides a NULL data @@ -651,7 +651,7 @@ extattr_list_vp(struct vnode *vp, int at VFS_ASSERT_GIANT(vp->v_mount); VOP_LEASE(vp, td, td->td_ucred, LEASE_READ); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); auiop = NULL; sizep = NULL; Index: kern/vfs_syscalls.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.439 diff -u -p -r1.439 vfs_syscalls.c --- kern/vfs_syscalls.c 31 May 2007 11:51:52 -0000 1.439 +++ kern/vfs_syscalls.c 3 Jun 2007 17:34:03 -0000 @@ -241,7 +241,7 @@ kern_statfs(struct thread *td, char *pat int error; struct nameidata nd; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td); error = namei(&nd); if (error) @@ -323,7 +323,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 @@ -690,7 +690,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) { @@ -698,7 +698,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); @@ -754,7 +754,7 @@ kern_chdir(struct thread *td, char *path struct vnode *vp; int vfslocked; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | AUDITVNODE1 | MPSAFE, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | AUDITVNODE1 | MPSAFE, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); @@ -841,7 +841,7 @@ chroot(td, uap) SUSER_ALLOWJAIL); if (error) return (error); - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, UIO_USERSPACE, uap->path, td); error = namei(&nd); if (error) @@ -1726,7 +1726,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) @@ -1871,7 +1871,7 @@ 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, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td); if ((error = namei(&nd)) != 0) goto out1; @@ -1917,7 +1917,7 @@ kern_eaccess(struct thread *td, char *pa int vfslocked; int error; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); @@ -2230,7 +2230,7 @@ kern_pathconf(struct thread *td, char *p struct nameidata nd; int error, vfslocked; - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); @@ -2282,7 +2282,7 @@ kern_readlink(struct thread *td, char *p struct nameidata nd; int vfslocked; - NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, pathseg, path, td); if ((error = namei(&nd)) != 0) return (error); @@ -3567,7 +3567,7 @@ unionread: auio.uio_segflg = UIO_USERSPACE; auio.uio_td = td; auio.uio_resid = uap->count; - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); loff = auio.uio_offset = fp->f_offset; #ifdef MAC error = mac_check_vnode_readdir(td->td_ucred, vp); @@ -3709,8 +3709,7 @@ unionread: auio.uio_segflg = UIO_USERSPACE; auio.uio_td = td; auio.uio_resid = uap->count; - /* vn_lock(vp, LK_SHARED | LK_RETRY, td); */ - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); AUDIT_ARG(vnode, vp, ARG_VNODE1); loff = auio.uio_offset = fp->f_offset; #ifdef MAC @@ -3910,7 +3909,7 @@ lgetfh(td, uap) error = priv_check(td, PRIV_VFS_GETFH); if (error) return (error); - NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, UIO_USERSPACE, uap->fname, td); error = namei(&nd); if (error) @@ -3949,7 +3948,7 @@ getfh(td, uap) error = priv_check(td, PRIV_VFS_GETFH); if (error) return (error); - NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1, + NDINIT(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | MPSAFE | AUDITVNODE1, UIO_USERSPACE, uap->fname, td); error = namei(&nd); if (error) Index: nfsclient/nfs_vfsops.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/nfsclient/nfs_vfsops.c,v retrieving revision 1.192 diff -u -p -r1.192 nfs_vfsops.c --- nfsclient/nfs_vfsops.c 23 Mar 2007 08:52:36 -0000 1.192 +++ nfsclient/nfs_vfsops.c 22 May 2007 23:25:17 -0000 @@ -928,7 +928,7 @@ mountnfs(struct nfs_args *argp, struct m * this problem, because one can identify root inodes by their * number == ROOTINO (2). */ - error = nfs_nget(mp, (nfsfh_t *)nmp->nm_fh, nmp->nm_fhsize, &np, LK_EXCLUSIVE); + error = nfs_nget(mp, (nfsfh_t *)nmp->nm_fh, nmp->nm_fhsize, &np, LK_SHARED); if (error) goto bad; *vpp = NFSTOV(np); Index: nfsserver/nfs_serv.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/nfsserver/nfs_serv.c,v retrieving revision 1.172 diff -u -p -r1.172 nfs_serv.c --- nfsserver/nfs_serv.c 26 Mar 2007 15:14:58 -0000 1.172 +++ nfsserver/nfs_serv.c 1 May 2007 19:33:55 -0000 @@ -1887,7 +1887,7 @@ nfsrv_create(struct nfsrv_descript *nfsd nd.ni_dvp = NULL; nd.ni_vp = NULL; - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -2089,7 +2089,7 @@ out: } NDFREE(&nd, NDF_ONLY_PNBUF); if (dirp) { - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -2206,7 +2206,7 @@ out: nd.ni_dvp = NULL; nd.ni_vp = NULL; - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -2417,12 +2417,12 @@ out1: tond.ni_vp = NULL; if (fdirp) { - vn_lock(fdirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(fdirp, LK_SHARED | LK_RETRY, td); fdiraft_ret = VOP_GETATTR(fdirp, &fdiraft, cred, td); VOP_UNLOCK(fdirp, 0, td); } if (tdirp) { - vn_lock(tdirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(tdirp, LK_SHARED | LK_RETRY, td); tdiraft_ret = VOP_GETATTR(tdirp, &tdiraft, cred, td); VOP_UNLOCK(tdirp, 0, td); } @@ -2582,7 +2582,7 @@ out2: nd.ni_dvp = NULL; nd.ni_vp = NULL; - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -2758,7 +2758,7 @@ out: pathcp = NULL; } if (dirp) { - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -2920,7 +2920,7 @@ out: } nd.ni_dvp = NULL; nd.ni_vp = NULL; - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -3057,7 +3057,7 @@ out: vput(nd.ni_vp); nd.ni_dvp = NULL; nd.ni_vp = NULL; - vn_lock(dirp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dirp, LK_SHARED | LK_RETRY, td); diraft_ret = VOP_GETATTR(dirp, &diraft, cred, td); VOP_UNLOCK(dirp, 0, td); } @@ -3233,7 +3233,7 @@ again: io.uio_rw = UIO_READ; io.uio_td = NULL; eofflag = 0; - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); if (cookies) { free((caddr_t)cookies, M_TEMP); cookies = NULL; @@ -3515,7 +3515,7 @@ again: io.uio_rw = UIO_READ; io.uio_td = NULL; eofflag = 0; - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); if (cookies) { free((caddr_t)cookies, M_TEMP); cookies = NULL; @@ -3597,7 +3597,7 @@ again: * Probe one of the directory entries to see if the filesystem * supports VGET. */ - if (VFS_VGET(vp->v_mount, dp->d_fileno, LK_EXCLUSIVE, &nvp) == + if (VFS_VGET(vp->v_mount, dp->d_fileno, LK_SHARED, &nvp) == EOPNOTSUPP) { error = NFSERR_NOTSUPP; vrele(vp); @@ -3632,7 +3632,7 @@ again: * For readdir_and_lookup get the vnode using * the file number. */ - if (VFS_VGET(vp->v_mount, dp->d_fileno, LK_EXCLUSIVE, + if (VFS_VGET(vp->v_mount, dp->d_fileno, LK_SHARED, &nvp)) goto invalid; bzero((caddr_t)nfhp, NFSX_V3FH); Index: nfsserver/nfs_srvsubs.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/nfsserver/nfs_srvsubs.c,v retrieving revision 1.147 diff -u -p -r1.147 nfs_srvsubs.c --- nfsserver/nfs_srvsubs.c 2 Apr 2007 13:53:26 -0000 1.147 +++ nfsserver/nfs_srvsubs.c 1 May 2007 19:34:38 -0000 @@ -692,7 +692,7 @@ nfs_namei(struct nameidata *ndp, fhandle */ *retdirp = dp; if (v3) { - vn_lock(dp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(dp, LK_SHARED | LK_RETRY, td); *retdirattr_retp = VOP_GETATTR(dp, retdirattrp, ndp->ni_cnd.cn_cred, td); VOP_UNLOCK(dp, 0, td); Index: security/audit/audit_bsm_klib.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/security/audit/audit_bsm_klib.c,v retrieving revision 1.7 diff -u -p -r1.7 audit_bsm_klib.c --- security/audit/audit_bsm_klib.c 1 Jun 2007 21:58:58 -0000 1.7 +++ security/audit/audit_bsm_klib.c 3 Jun 2007 17:34:28 -0000 @@ -526,7 +526,7 @@ canon_path(struct thread *td, char *path * attention. */ vfslocked = VFS_LOCK_GIANT(vnp->v_mount); - vn_lock(vnp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vnp, LK_SHARED | LK_RETRY, td); error = vn_fullpath(td, vnp, &retbuf, &freebuf); if (error == 0) { /* Copy and free buffer allocated by vn_fullpath(). Index: security/audit/audit_worker.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/security/audit/audit_worker.c,v retrieving revision 1.16 diff -u -p -r1.16 audit_worker.c --- security/audit/audit_worker.c 1 Jun 2007 21:58:59 -0000 1.16 +++ security/audit/audit_worker.c 3 Jun 2007 17:34:28 -0000 @@ -136,7 +136,7 @@ audit_record_write(struct vnode *vp, str error = VFS_STATFS(vp->v_mount, mnt_stat, td); if (error) goto fail; - 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) Index: security/mac/mac_process.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/security/mac/mac_process.c,v retrieving revision 1.118 diff -u -p -r1.118 mac_process.c --- security/mac/mac_process.c 22 Apr 2007 19:55:56 -0000 1.118 +++ security/mac/mac_process.c 1 May 2007 19:51:06 -0000 @@ -345,7 +345,8 @@ mac_cred_mmapped_drop_perms_recurse(stru continue; vp = (struct vnode *)object->handle; vfslocked = VFS_LOCK_GIANT(vp->v_mount); - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + /* LK_SHARED is enough here? */ + vn_lock(vp, LK_SHARED | LK_RETRY, td); result = vme->max_protection; mac_check_vnode_mmap_downgrade(cred, vp, &result); VOP_UNLOCK(vp, 0, td); Index: vm/swap_pager.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/vm/swap_pager.c,v retrieving revision 1.292 diff -u -p -r1.292 swap_pager.c --- vm/swap_pager.c 31 May 2007 22:52:14 -0000 1.292 +++ vm/swap_pager.c 3 Jun 2007 17:34:35 -0000 @@ -2121,7 +2121,7 @@ swapoff_one(struct swdevt *sp, struct th mtx_assert(&Giant, MA_OWNED); #ifdef MAC - (void) vn_lock(sp->sw_vp, LK_EXCLUSIVE | LK_RETRY, td); + (void) vn_lock(sp->sw_vp, LK_SHARED | LK_RETRY, td); error = mac_check_system_swapoff(td->td_ucred, sp->sw_vp); (void) VOP_UNLOCK(sp->sw_vp, 0, td); if (error != 0) Index: dev/md/md.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/dev/md/md.c,v retrieving revision 1.168 diff -u -p -r1.168 md.c --- dev/md/md.c 31 May 2007 11:51:49 -0000 1.168 +++ dev/md/md.c 3 Jun 2007 17:50:49 -0000 @@ -556,7 +556,7 @@ mdstart_vnode(struct md_s *sc, struct bi */ vfslocked = VFS_LOCK_GIANT(vp->v_mount); if (bp->bio_cmd == BIO_READ) { - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); error = VOP_READ(vp, &auio, IO_DIRECT, sc->cred); VOP_UNLOCK(vp, 0, td); } else { @@ -887,7 +887,7 @@ mdsetcred(struct md_s *sc, struct ucred auio.uio_rw = UIO_READ; auio.uio_segflg = UIO_SYSSPACE; auio.uio_resid = aiov.iov_len; - vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curthread); + vn_lock(sc->vnode, LK_SHARED | LK_RETRY, curthread); error = VOP_READ(sc->vnode, &auio, 0, sc->cred); VOP_UNLOCK(sc->vnode, 0, curthread); free(tmpbuf, M_TEMP); Index: kern/vfs_vnops.c =================================================================== RCS file: /zoo/pjd/repo/src/sys/kern/vfs_vnops.c,v retrieving revision 1.251 diff -u -p -r1.251 vfs_vnops.c --- kern/vfs_vnops.c 31 May 2007 11:51:52 -0000 1.251 +++ kern/vfs_vnops.c 3 Jun 2007 17:48:50 -0000 @@ -364,12 +364,7 @@ vn_rdwr(rw, vp, base, len, offset, segfl return (error); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); } else { - /* - * XXX This should be LK_SHARED but I don't trust VFS - * enough to leave it like that until it has been - * reviewed further. - */ - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); } } @@ -610,7 +605,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); @@ -745,7 +740,7 @@ vn_ioctl(fp, com, data, active_cred, td) case VREG: case VDIR: if (com == FIONREAD) { - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); error = VOP_GETATTR(vp, &vattr, active_cred, td); VOP_UNLOCK(vp, 0, td); if (!error) @@ -1162,7 +1157,7 @@ vn_extattr_get(struct vnode *vp, int iof auio.uio_resid = *buflen; if ((ioflg & IO_NODELOCKED) == 0) - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); + vn_lock(vp, LK_SHARED | LK_RETRY, td); ASSERT_VOP_LOCKED(vp, "IO_NODELOCKED with no vp lock held");