freebsd-dev/sys/nfsclient
Matthew Dillon 98733bd871 The symlink implementation could improperly return a NULL vp along with
a 0 error code.  The problem occured with NFSv2 mounts and also with
    any NFSv3 mount returning an EEXIST error (which is translated to 0
    prior to return).  The reply to the rpc only contains the file handle
    for the no-error case under NFSv3.  The error case under NFSv3 and
    all cases under NFSv2 do *not* return the file handle.  The fix is
    to do a secondary lookup to obtain the file handle and thus be able
    to generate a return vnode for the situations where the rpc reply
    does not contain the required information.

    The bug was originally introduced when VOP_SYMLINK semantics were
    changed for -CURRENT.  The NFS symlink implementation was not properly
    modified to go along with the change despite the fact that three
    people reviewed the code.  It took four attempts to get the current
    fix correct with five people.  Is NFS obfuscated?  Ha!

Reviewed by:	Alfred Perlstein <bright@wintelcom.net>
Testing and Discussion: "Viren R.Shah" <viren@rstcorp.com>, Eivind Eklund <eivind@FreeBSD.ORG>, Ian Dowse <iedowse@maths.tcd.ie>
1999-11-30 06:56:15 +00:00
..
bootp_subr.c $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
krpc_subr.c $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
krpc.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfs_bio.c useracc() the prequel: 1999-10-29 18:09:36 +00:00
nfs_nfsiod.c Remove special case socket sharing code in order to allow nfsd to 1999-11-11 17:24:02 +00:00
nfs_node.c $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfs_socket.c nm_srtt and nm_sdrtt are arrays[4]. Remove explicit initialization 1999-11-22 04:50:09 +00:00
nfs_subs.c Before we start to mess with the VFS name-cache clean things up a little bit: 1999-10-03 12:18:29 +00:00
nfs_vfsops.c Call bootpc_init before we try to mount an NFS root, if we're configured 1999-11-01 23:55:38 +00:00
nfs_vnops.c The symlink implementation could improperly return a NULL vp along with 1999-11-30 06:56:15 +00:00
nfs.h Move NFS access cache hits/misses into nfsstats structure so 1999-10-25 19:22:33 +00:00
nfsargs.h Move NFS access cache hits/misses into nfsstats structure so 1999-10-25 19:22:33 +00:00
nfsdiskless.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfsm_subs.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfsmount.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfsnode.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
nfsstats.h Move NFS access cache hits/misses into nfsstats structure so 1999-10-25 19:22:33 +00:00