diff options
author | mohans <mohans@FreeBSD.org> | 2006-09-13 18:39:09 +0000 |
---|---|---|
committer | mohans <mohans@FreeBSD.org> | 2006-09-13 18:39:09 +0000 |
commit | 21daa650a97ea27eb3fdf3915832cb2c1e49aa4f (patch) | |
tree | ecb7983045b3f7e892ee6bce4b4f36f4080332f4 /sys/nfsclient/nfsnode.h | |
parent | e751eb98323de041fcb2da0c3b6973368e75da67 (diff) | |
download | FreeBSD-src-21daa650a97ea27eb3fdf3915832cb2c1e49aa4f.zip FreeBSD-src-21daa650a97ea27eb3fdf3915832cb2c1e49aa4f.tar.gz |
Fixes up the handling of shared vnode lock lookups in the NFS client,
adds a FS type specific flag indicating that the FS supports shared
vnode lock lookups, adds some logic in vfs_lookup.c to test this flag
and set lock flags appropriately.
- amd on 6.x is a non-starter (without this change). Using amd under
heavy load results in a deadlock (with cascading vnode locks all the
way to the root) very quickly.
- This change should also fix the more general problem of cascading
vnode deadlocks when an NFS server goes down.
Ideally, we wouldn't need these changes, as enabling shared vnode lock
lookups globally would work. Unfortunately, UFS, for example isn't
ready for shared vnode lock lookups, crashing pretty quickly.
This change is the result of discussions with Stephan Uphoff (ups@).
Reviewed by: ups@
Diffstat (limited to 'sys/nfsclient/nfsnode.h')
-rw-r--r-- | sys/nfsclient/nfsnode.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/nfsclient/nfsnode.h b/sys/nfsclient/nfsnode.h index e03e97c..2287235 100644 --- a/sys/nfsclient/nfsnode.h +++ b/sys/nfsclient/nfsnode.h @@ -189,7 +189,7 @@ int nfs_reclaim(struct vop_reclaim_args *); /* other stuff */ int nfs_removeit(struct sillyrename *); int nfs4_removeit(struct sillyrename *); -int nfs_nget(struct mount *, nfsfh_t *, int, struct nfsnode **); +int nfs_nget(struct mount *, nfsfh_t *, int, struct nfsnode **, int flags); nfsuint64 *nfs_getcookie(struct nfsnode *, off_t, int); uint64_t *nfs4_getcookie(struct nfsnode *, off_t, int); void nfs_invaldir(struct vnode *); |