Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Sep 1998 14:25:51 -0700 (PDT)
From:      Julian Elischer <julian@whistle.com>
To:        Luoqi Chen <luoqi@watermarkgroup.com>
Cc:        current@FreeBSD.ORG
Subject:   Re: Yet another patch to try for softupdates panic
Message-ID:  <Pine.BSF.3.95.980918142504.5148F-100000@current1.whistle.com>
In-Reply-To: <199809181941.PAA29792@lor.watermarkgroup.com>

next in thread | previous in thread | raw e-mail | index | archive | help
I was just reading kirk's reply when I got this..

wannajob? :-)

On Fri, 18 Sep 1998, Luoqi Chen wrote:

> This patch could be the real cure for the `initiate_write_filepage' panic
> people were seeing during make -j# world. I have posted another patch
> about a week ago (in fact, I have committed it), but it turned out to be
> no more than a no-op (thanks to Bruce for pointing it out, it was an
> embarrassing silly mistake of mine). I certainly hope this patch will do
> its work: this patch should fix a race condition between directory truncation
> and file creation that could lead to the `initiate_write_filepage' panic.
> 
> -lq
> 
> PS. I know it is bad coding style. I'll make it look better if it's
>     proven to work.
> 
> Index: ffs_inode.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_inode.c,v
> retrieving revision 1.47
> diff -u -r1.47 ffs_inode.c
> --- ffs_inode.c	1998/09/15 14:45:28	1.47
> +++ ffs_inode.c	1998/09/18 12:41:16
> @@ -191,7 +191,7 @@
>  			 * rarely, we solve the problem by syncing the file
>  			 * so that it will have no data structures left.
>  			 */
> -			if ((error = VOP_FSYNC(ovp, cred, MNT_WAIT,
> +			if ((error = VOP_FSYNC(ovp, cred, MNT_WAIT|0x80000000,
>  			    p)) != 0)
>  				return (error);
>  		} else {
> Index: ffs_vnops.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_vnops.c,v
> retrieving revision 1.51
> diff -u -r1.51 ffs_vnops.c
> --- ffs_vnops.c	1998/09/07 11:50:19	1.51
> +++ ffs_vnops.c	1998/09/18 16:13:01
> @@ -126,8 +126,8 @@
>  	struct buf *nbp;
>  	int s, error, passes, skipmeta;
>  	daddr_t lbn;
> +	int istrunc = 0;
>  
> -
>  	if (vp->v_type == VBLK) {
>  		lbn = INT_MAX;
>  	} else {
> @@ -137,6 +137,14 @@
>  	}
>  
>  	/*
> +	 * XXX hack to solve directory truncation problem
> +	 */
> +	if (ap->a_waitfor & 0x80000000) {
> +		istrunc = 1;
> +		ap->a_waitfor &= ~0x80000000;
> +	}
> +
> +	/*
>  	 * Flush all dirty buffers associated with a vnode.
>  	 */
>  	passes = NIADDR;
> @@ -251,7 +259,7 @@
>  	getmicrotime(&tv);
>  	if ((error = UFS_UPDATE(vp, &tv, &tv, ap->a_waitfor == MNT_WAIT)) != 0)
>  		return (error);
> -	if (DOINGSOFTDEP(vp) && ap->a_waitfor == MNT_WAIT)
> +	if (DOINGSOFTDEP(vp) && ap->a_waitfor == MNT_WAIT && !istrunc)
>  		error = softdep_fsync(vp);
>  	return (error);
>  }
> 
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-current" in the body of the message
> 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95.980918142504.5148F-100000>