Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Aug 2002 22:41:53 +0200
From:      Pierre Beyssac <pb@fasterix.frmug.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Re: deadlock in fs/msdosfs/msdosfs_vnops.c:msdosfs_fsync()
Message-ID:  <20020805224153.A564@fasterix.frmug.org>
In-Reply-To: <20020805221247.A78878@fasterix.frmug.org>; from pb@fasterix.frmug.org on Mon, Aug 05, 2002 at 10:12:47PM %2B0200
References:  <20020805104153.A37733@bofh.enst.fr> <20020805203323.M17317-100000@gamplex.bde.org> <20020805221247.A78878@fasterix.frmug.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Well, I think I got it...

--- msdosfs_vnops.c.orig	Mon Aug  5 21:20:13 2002
+++ msdosfs_vnops.c	Mon Aug  5 22:35:52 2002
@@ -830,7 +830,7 @@
 		goto loop;
 	}
 	while (vp->v_numoutput) {
-		vp->v_vflag |= VI_BWAIT;
+		vp->v_iflag |= VI_BWAIT;
 		(void) msleep((caddr_t)&vp->v_numoutput, VI_MTX(vp),
 		    PRIBIO + 1, "msdosfsn", 0);
 	}

I'll commit that if nobody objects to it.

Small test program, hangs everytime on a msdosfs without the above
patch:

#include <stdio.h>
#include <fcntl.h>

int main()
{
	char buf[512*1024];
	int f;
	unsigned long l;
	f = open("testfile", O_CREAT|O_TRUNC|O_WRONLY, 644);
	if (f == -1) {
		perror("open");
		exit(1);
	}
	l = write(f, buf, sizeof buf);
	if (l != sizeof buf)
		fprintf(stderr, "write error\n");
	fsync(f);
	return 0;
}
-- 
Pierre Beyssac	      	    pb@fasterix.frmug.org pb@fasterix.freenix.org
    Free domains: http://www.eu.org/ or mail dns-manager@EU.org

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?20020805224153.A564>