kern/92785: Using exported filesystem on OS/2 NFS client causes
filesystem freeze
Kostik Belousov
kostikbel at gmail.com
Wed Dec 27 04:00:50 PST 2006
The following reply was made to PR kern/92785; it has been noted by GNATS.
From: Kostik Belousov <kostikbel at gmail.com>
To: Ulrich Spoerlein <uspoerlein at gmail.com>
Cc: bug-followup at freebsd.org, Bruce Evans <bde at zeta.org.au>
Subject: Re: kern/92785: Using exported filesystem on OS/2 NFS client causes filesystem freeze
Date: Wed, 27 Dec 2006 12:59:40 +0200
--0aF+6pWUK5w8WdCh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Wed, Dec 27, 2006 at 11:43:36AM +0100, Ulrich Spoerlein wrote:
> While the patch for UFS seems to quiesce the lock-leak in nfsd I now
> exported a FAT32 filesystem. All Linux clients can access the export
> just fine, mounting it from OS/2 will result in the following panic,
> after issuing a 'dir' in the mounted drive. The dir-command will print
> the first line (the "."-DIR) and when trying to look up ".." the nfs
> server paniced.
>=20
> panic: lockmgr: locking against myself
I did not read the code thoroughly, and I prefer not to touch
msdosfs. But, anyway, try this:
Index: sys/fs/msdosfs/msdosfs_lookup.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/local/arch/ncvs/src/sys/fs/msdosfs/msdosfs_lookup.c,v
retrieving revision 1.47
diff -u -r1.47 msdosfs_lookup.c
--- sys/fs/msdosfs/msdosfs_lookup.c 22 Jan 2006 21:09:38 -0000 1.47
+++ sys/fs/msdosfs/msdosfs_lookup.c 27 Dec 2006 10:59:17 -0000
@@ -520,16 +520,16 @@
* that point backwards in the directory structure.
*/
pdp =3D vdp;
- if (flags & ISDOTDOT) {
+ if (dp->de_StartCluster =3D=3D scn && isadir) {
+ VREF(vdp); /* we want ourself, ie "." */
+ *vpp =3D vdp;
+ } else if (flags & ISDOTDOT) {
VOP_UNLOCK(pdp, 0, td);
error =3D deget(pmp, cluster, blkoff, &tdp);
vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, td);=20
if (error)
return (error);
*vpp =3D DETOV(tdp);
- } else if (dp->de_StartCluster =3D=3D scn && isadir) {
- VREF(vdp); /* we want ourself, ie "." */
- *vpp =3D vdp;
} else {
if ((error =3D deget(pmp, cluster, blkoff, &tdp)) !=3D 0)
return (error);
--0aF+6pWUK5w8WdCh
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (FreeBSD)
iD8DBQFFklIcC3+MBN1Mb4gRAlT9AJ0b8N2DP+GPnC6r8s1Kbsq7pvDDpACgiD8g
38i7NiuxiHwlsG+7Olp9wCo=
=FMmX
-----END PGP SIGNATURE-----
--0aF+6pWUK5w8WdCh--
More information about the freebsd-bugs
mailing list