From owner-FreeBSD-tech-jp@jp.freebsd.org  Wed Sep 24 13:06:02 1997
Received: by jaz.jp.freebsd.org (8.8.7+2.7Wbeta7/8.7.3) id NAA23588
	Wed, 24 Sep 1997 13:06:02 +0900 (JST)
Received: by jaz.jp.freebsd.org (8.8.7+2.7Wbeta7/8.7.3) with ESMTP id NAA23583
	for <FreeBSD-tech-jp@jp.freebsd.org>; Wed, 24 Sep 1997 13:06:00 +0900 (JST)
Received: from marble.eps.nagoya-u.ac.jp (localhost [127.0.0.1]) by gneiss.eps.nagoya-u.ac.jp (8.8.7/3.5Wpl3) with ESMTP id NAA04805 for <FreeBSD-tech-jp@jp.freebsd.org>; Wed, 24 Sep 1997 13:05:52 +0900 (JST)
Message-Id: <199709240405.NAA04805@gneiss.eps.nagoya-u.ac.jp>
To: FreeBSD-tech-jp@jp.freebsd.org
From: KATO Takenori <kato@ganko.eps.nagoya-u.ac.jp>
In-Reply-To: Your message of "Wed, 24 Sep 1997 09:29:48 +0900"
References: <199709240029.JAA15710@p28.sss.abk.nec.co.jp>
X-Mailer: Mew version 1.70 on Emacs 19.28.1 / Mule 2.3
X-PGP-Fingerprint: 03 72 85 36 62 46 23 03  52 B1 10 22 44 10 0D 9E
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Date: Wed, 24 Sep 1997 13:05:52 +0900
Reply-To: FreeBSD-tech-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=20]
X-Sequence: FreeBSD-tech-jp 635
Subject: [FreeBSD-tech-jp 635] Re: panic when I use vn driver on RELENG_2_2
Errors-To: owner-FreeBSD-tech-jp@jp.freebsd.org
Sender: owner-FreeBSD-tech-jp@jp.freebsd.org

$B2CF#!wL>Bg4d9[$G$9!%(B

> sys/dev/vn/vn.c $B$r(B 1.41 $B$KLa$7$?$i(B panic $B$7$J$/$J$j$^$7$?!#(B

$BLa$9$h$j$b!$0J2<$N%Q%C%A$NJ}$,0BA4$@$H;W$$$^$9!%(B

---------- BEGIN ---------
*** vn.c.ORIG	Wed Sep 24 10:33:10 1997
--- vn.c	Wed Sep 24 11:39:25 1997
***************
*** 234,239 ****
--- 234,240 ----
  	long sz;
  	struct uio auio;
  	struct iovec aiov;
+ 	int vnodelocked = 0;
  
  	IFOPT(vn, VN_DEBUG)
  		printf("vnstrategy(%p): unit %d\n", bp, unit);
***************
*** 279,290 ****
  			auio.uio_rw = UIO_WRITE;
  		auio.uio_resid = bp->b_bcount;
  		auio.uio_procp = curproc;
! 		VOP_LOCK(vn->sc_vp);
  		if( bp->b_flags & B_READ)
  			error = VOP_READ(vn->sc_vp, &auio, 0, vn->sc_cred);
  		else
  			error = VOP_WRITE(vn->sc_vp, &auio, 0, vn->sc_cred);
! 		VOP_UNLOCK(vn->sc_vp);
  
  		bp->b_resid = auio.uio_resid;
  
--- 280,297 ----
  			auio.uio_rw = UIO_WRITE;
  		auio.uio_resid = bp->b_bcount;
  		auio.uio_procp = curproc;
! 		if (!VOP_ISLOCKED(vn->sc_vp)) {
! 			vnodelocked = 1;
! 			VOP_LOCK(vn->sc_vp);
! 		}
  		if( bp->b_flags & B_READ)
  			error = VOP_READ(vn->sc_vp, &auio, 0, vn->sc_cred);
  		else
  			error = VOP_WRITE(vn->sc_vp, &auio, 0, vn->sc_cred);
! 		if (vnodelocked) {
! 			VOP_UNLOCK(vn->sc_vp);
! 			vnodelocked = 0;	/* vnodelocked will be reused bellow. */
! 		}
  
  		bp->b_resid = auio.uio_resid;
  
***************
*** 309,318 ****
  			int off, s, nra;
  
  			nra = 0;
! 			VOP_LOCK(vn->sc_vp);
  			error = VOP_BMAP(vn->sc_vp, (daddr_t)(byten / bsize),
  					 &vp, &nbn, &nra, NULL);
! 			VOP_UNLOCK(vn->sc_vp);
  			if (error == 0 && nbn == -1)
  				error = EIO;
  
--- 316,329 ----
  			int off, s, nra;
  
  			nra = 0;
! 			if (!VOP_ISLOCKED(vn->sc_vp)) {
! 				vnodelocked = 1;
! 				VOP_LOCK(vn->sc_vp);
! 			}
  			error = VOP_BMAP(vn->sc_vp, (daddr_t)(byten / bsize),
  					 &vp, &nbn, &nra, NULL);
! 			if (vnodelocked)
! 				VOP_UNLOCK(vn->sc_vp);
  			if (error == 0 && nbn == -1)
  				error = EIO;
  
---------- END ---------

$B$J$s$+$=$N>l$7$N$.$J%Q%C%A$G7y$J$N$G$9$,!$(Bvn$B%I%i%$%P0J30$G$b(Bunionfs$B$K(B
$BFf$N(BVOP_ISLOCK$BF~$l$J$$$HF0$+$J$$$h$&$J$b$N$@$+$i$7$+$?$J$$$+$J$!$H;W$$(B
$B$^$9!%(B

----
KATO Takenori <kato@ganko.eps.nagoya-u.ac.jp>
Dept. Earth Planet. Sci., Nagoya Univ.,  Nagoya, 464-01, Japan
PGP public key: finger kato@eclogite.eps.nagoya-u.ac.jp
------------------- Powered by FreeBSD(98) -------------------
