Date: Thu, 10 Aug 1995 19:34:19 +0100 (BST) From: Doug Rabson <dfr@render.com> To: Thomas Graichen <graichen@sirius.physik.fu-berlin.de> Cc: hackers@freebsd.org, davidg@freebsd.org Subject: Re: PLEASE help me to get broken FreeBSD automounter working PLEASE !!! Message-ID: <Pine.BSF.3.91.950810192533.4478X-100000@minnow.render.com> In-Reply-To: <9508101213.AA04318@sirius.physik.fu-berlin.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 10 Aug 1995, Thomas Graichen wrote:
> i've tried all version i was able to find - the NetBSD and the Linux one
> (maybe one of them has the problem fixed) and the upl102 too - all show the
> same problem - can please someone look into my debugging stuff and try to find
> the problem there - i'll try to help as much as i can (i'll now try a -current
> kernel and amd)
Well it turns out that amd direct maps are implemented my amd mounting a
filehandle which represents a symlink (normally one mounts directories).
This turned up no less than three bugs:
1. The nfs client code ignored the type of the object being mounted and
assumed it was a directory.
2. The vfs pathname parsing couldn't cope with the root of a mountpoint
being a symlink instead of a directory.
3. NFS cached the result of looking up the link, defeating the amd mount
timeout code.
This patch to -current seems to allow amd direct maps to work. Use with
care - it has had minimal testing and it touches fundamental system code.
Index: nfs/nfs_bio.c
===================================================================
RCS file: /home/ncvs/src/sys/nfs/nfs_bio.c,v
retrieving revision 1.16
diff -c -r1.16 nfs_bio.c
*** 1.16 1995/07/07 11:01:30
--- nfs_bio.c 1995/08/10 18:15:30
***************
*** 183,189 ****
return (error);
}
}
! if (np->n_flag & NQNFSNONCACHE) {
switch (vp->v_type) {
case VREG:
return (nfs_readrpc(vp, uio, cred));
--- 183,193 ----
return (error);
}
}
! /*
! * Don't cache magic amd symlinks.
! */
! if (np->n_flag & NQNFSNONCACHE
! || ((vp->v_flag & VROOT) && vp->v_type == VLNK)) {
switch (vp->v_type) {
case VREG:
return (nfs_readrpc(vp, uio, cred));
Index: nfs/nfs_vfsops.c
===================================================================
RCS file: /home/ncvs/src/sys/nfs/nfs_vfsops.c,v
retrieving revision 1.17
diff -c -r1.17 nfs_vfsops.c
*** 1.17 1995/07/07 11:01:31
--- nfs_vfsops.c 1995/08/10 18:13:47
***************
*** 542,547 ****
--- 542,548 ----
register struct nfsmount *nmp;
struct nfsnode *np;
int error, maxio;
+ struct vattr attrs;
if (mp->mnt_flag & MNT_UPDATE) {
nmp = VFSTONFS(mp);
***************
*** 691,696 ****
--- 692,698 ----
if (error)
goto bad;
*vpp = NFSTOV(np);
+ VOP_GETATTR(*vpp, &attrs, curproc->p_ucred, curproc);
/*
* Lose the lock but keep the ref.
***************
*** 801,807 ****
return (error);
vp = NFSTOV(np);
VOP_UNLOCK(vp);
! vp->v_type = VDIR;
vp->v_flag = VROOT;
*vpp = vp;
return (0);
--- 803,809 ----
return (error);
vp = NFSTOV(np);
VOP_UNLOCK(vp);
! /* vp->v_type = VDIR; */
vp->v_flag = VROOT;
*vpp = vp;
return (0);
Index: kern/vfs_lookup.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_lookup.c,v
retrieving revision 1.7
diff -c -r1.7 vfs_lookup.c
*** 1.7 1995/05/30 08:06:33
--- vfs_lookup.c 1995/08/10 18:03:19
***************
*** 433,446 ****
}
dp = ndp->ni_vp;
- /*
- * Check for symbolic link
- */
- if ((dp->v_type == VLNK) &&
- ((cnp->cn_flags & FOLLOW) || *ndp->ni_next == '/')) {
- cnp->cn_flags |= ISSYMLINK;
- return (0);
- }
/*
* Check to see if the vnode has been mounted on;
--- 433,438 ----
***************
*** 458,463 ****
--- 450,464 ----
goto bad2;
vput(dp);
ndp->ni_vp = dp = tdp;
+ }
+
+ /*
+ * Check for symbolic link
+ */
+ if ((dp->v_type == VLNK) &&
+ ((cnp->cn_flags & FOLLOW) || *ndp->ni_next == '/')) {
+ cnp->cn_flags |= ISSYMLINK;
+ return (0);
}
nextname:
--
Doug Rabson, Microsoft RenderMorphics Ltd. Mail: dfr@render.com
Phone: +44 171 251 4411
FAX: +44 171 251 0939
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.91.950810192533.4478X-100000>
