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