svn commit: r189991 - in stable/7/sys: . compat/linux compat/svr4
contrib/pf dev/ath/ath_hal dev/cxgb fs/coda i386/ibcs2 kern
nfsserver
John Baldwin
jhb at FreeBSD.org
Wed Mar 18 14:51:05 PDT 2009
Author: jhb
Date: Wed Mar 18 21:51:02 2009
New Revision: 189991
URL: http://svn.freebsd.org/changeset/base/189991
Log:
MFC: Use shared vnode locks when invoking VOP_READDIR().
Modified:
stable/7/sys/ (props changed)
stable/7/sys/compat/linux/linux_file.c
stable/7/sys/compat/linux/linux_getcwd.c
stable/7/sys/compat/svr4/svr4_misc.c
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/fs/coda/coda_vnops.c
stable/7/sys/i386/ibcs2/ibcs2_misc.c
stable/7/sys/kern/vfs_syscalls.c
stable/7/sys/nfsserver/nfs_serv.c
Modified: stable/7/sys/compat/linux/linux_file.c
==============================================================================
--- stable/7/sys/compat/linux/linux_file.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/compat/linux/linux_file.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -465,7 +465,7 @@ getdents_common(struct thread *td, struc
buflen = min(buflen, MAXBSIZE);
buf = malloc(buflen, M_TEMP, M_WAITOK);
lbuf = malloc(LINUX_MAXRECLEN, M_TEMP, M_WAITOK | M_ZERO);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
again:
aiov.iov_base = buf;
Modified: stable/7/sys/compat/linux/linux_getcwd.c
==============================================================================
--- stable/7/sys/compat/linux/linux_getcwd.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/compat/linux/linux_getcwd.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -163,7 +163,7 @@ linux_getcwd_scandir(lvpp, uvpp, bpp, bu
cn.cn_nameptr = "..";
cn.cn_namelen = 2;
cn.cn_consume = 0;
- cn.cn_lkflags = LK_EXCLUSIVE;
+ cn.cn_lkflags = LK_SHARED;
/*
* At this point, lvp is locked and will be unlocked by the lookup.
Modified: stable/7/sys/compat/svr4/svr4_misc.c
==============================================================================
--- stable/7/sys/compat/svr4/svr4_misc.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/compat/svr4/svr4_misc.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -278,7 +278,7 @@ svr4_sys_getdents64(td, uap)
buflen = max(DIRBLKSIZ, nbytes);
buflen = min(buflen, MAXBSIZE);
buf = malloc(buflen, M_TEMP, M_WAITOK);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
again:
aiov.iov_base = buf;
aiov.iov_len = buflen;
@@ -447,7 +447,7 @@ svr4_sys_getdents(td, uap)
buflen = min(MAXBSIZE, uap->nbytes);
buf = malloc(buflen, M_TEMP, M_WAITOK);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
off = fp->f_offset;
again:
aiov.iov_base = buf;
Modified: stable/7/sys/fs/coda/coda_vnops.c
==============================================================================
--- stable/7/sys/fs/coda/coda_vnops.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/fs/coda/coda_vnops.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -1510,7 +1510,7 @@ coda_readdir(struct vop_readdir_args *ap
*/
CODADEBUG(CODA_READDIR, myprintf(("indirect readdir: fid = %s, "
"refcnt = %d\n", coda_f2s(&cp->c_fid), vp->v_usecount)););
- vn_lock(cp->c_ovp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(cp->c_ovp, LK_SHARED | LK_RETRY, td);
error = VOP_READDIR(cp->c_ovp, uiop, cred, eofflag, ncookies,
cookies);
VOP_UNLOCK(cp->c_ovp, 0, td);
Modified: stable/7/sys/i386/ibcs2/ibcs2_misc.c
==============================================================================
--- stable/7/sys/i386/ibcs2/ibcs2_misc.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/i386/ibcs2/ibcs2_misc.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -356,7 +356,7 @@ ibcs2_getdents(td, uap)
buflen = max(DIRBLKSIZ, uap->nbytes);
buflen = min(buflen, MAXBSIZE);
buf = malloc(buflen, M_TEMP, M_WAITOK);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
again:
aiov.iov_base = buf;
aiov.iov_len = buflen;
@@ -518,7 +518,7 @@ ibcs2_read(td, uap)
buflen = max(DIRBLKSIZ, uap->nbytes);
buflen = min(buflen, MAXBSIZE);
buf = malloc(buflen, M_TEMP, M_WAITOK);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ vn_lock(vp, LK_SHARED | LK_RETRY, td);
again:
aiov.iov_base = buf;
aiov.iov_len = buflen;
Modified: stable/7/sys/kern/vfs_syscalls.c
==============================================================================
--- stable/7/sys/kern/vfs_syscalls.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/kern/vfs_syscalls.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -3665,7 +3665,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);
@@ -3824,8 +3824,7 @@ unionread:
auio.uio_segflg = UIO_USERSPACE;
auio.uio_td = td;
auio.uio_resid = 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
Modified: stable/7/sys/nfsserver/nfs_serv.c
==============================================================================
--- stable/7/sys/nfsserver/nfs_serv.c Wed Mar 18 21:46:55 2009 (r189990)
+++ stable/7/sys/nfsserver/nfs_serv.c Wed Mar 18 21:51:02 2009 (r189991)
@@ -3236,7 +3236,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;
@@ -3518,7 +3518,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;
More information about the svn-src-stable-7
mailing list