summaryrefslogtreecommitdiffstats
path: root/sys/fs/nfsserver/nfs_nfsdserv.c
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2010-12-25 21:56:25 +0000
committerrmacklem <rmacklem@FreeBSD.org>2010-12-25 21:56:25 +0000
commit6847bfd5821deedbb259c4e8efe6ae27e39c2659 (patch)
tree258688215a96daa778719687986303676b1d8f6a /sys/fs/nfsserver/nfs_nfsdserv.c
parent971b02b7bcce9c49f919797dcad7b646c206b7b6 (diff)
downloadFreeBSD-src-6847bfd5821deedbb259c4e8efe6ae27e39c2659.zip
FreeBSD-src-6847bfd5821deedbb259c4e8efe6ae27e39c2659.tar.gz
Modify the experimental NFS server so that it uses LK_SHARED
for RPC operations when it can. Since VFS_FHTOVP() currently always gets an exclusively locked vnode and is usually called at the beginning of each RPC, the RPCs for a given vnode will still be serialized. As such, passing a lock type argument to VFS_FHTOVP() would be preferable to doing the vn_lock() with LK_DOWNGRADE after the VFS_FHTOVP() call. Reviewed by: kib MFC after: 2 weeks
Diffstat (limited to 'sys/fs/nfsserver/nfs_nfsdserv.c')
-rw-r--r--sys/fs/nfsserver/nfs_nfsdserv.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/fs/nfsserver/nfs_nfsdserv.c b/sys/fs/nfsserver/nfs_nfsdserv.c
index e4976f5..b4a4126 100644
--- a/sys/fs/nfsserver/nfs_nfsdserv.c
+++ b/sys/fs/nfsserver/nfs_nfsdserv.c
@@ -1392,7 +1392,7 @@ nfsrvd_rename(struct nfsrv_descript *nd, int isdgram,
nd->nd_cred->cr_uid = nd->nd_saveduid;
/* Won't lock vfs if already locked, mp == NULL */
tnes.nes_vfslocked = exp->nes_vfslocked;
- nfsd_fhtovp(nd, &tfh, &tdp, &tnes, &mp, 0, p);
+ nfsd_fhtovp(nd, &tfh, LK_EXCLUSIVE, &tdp, &tnes, &mp, 0, p);
if (tdp) {
tdirfor_ret = nfsvno_getattr(tdp, &tdirfor, nd->nd_cred,
p, 1);
@@ -1546,7 +1546,8 @@ nfsrvd_link(struct nfsrv_descript *nd, int isdgram,
}
/* Won't lock vfs if already locked, mp == NULL */
tnes.nes_vfslocked = exp->nes_vfslocked;
- nfsd_fhtovp(nd, &dfh, &dp, &tnes, &mp, 0, p);
+ nfsd_fhtovp(nd, &dfh, LK_EXCLUSIVE, &dp, &tnes, &mp, 0,
+ p);
if (dp)
NFSVOPUNLOCK(dp, 0, p);
}
@@ -3141,7 +3142,7 @@ nfsrvd_secinfo(struct nfsrv_descript *nd, int isdgram,
vput(vp);
savflag = nd->nd_flag;
if (!nd->nd_repstat) {
- nfsd_fhtovp(nd, &fh, &vp, &retnes, &mp, 0, p);
+ nfsd_fhtovp(nd, &fh, LK_SHARED, &vp, &retnes, &mp, 0, p);
if (vp)
vput(vp);
}
OpenPOWER on IntegriCloud