Date: Wed, 11 Feb 2004 21:36:45 +0300 From: Yar Tikhiy <yar@freebsd.org> To: Murata Shuuichirou <mrt@notwork.org> Cc: fs@freebsd.org Subject: Re: updating HFS for 5.2R [patch] Message-ID: <20040211183645.GA18497@comp.chem.msu.su> In-Reply-To: <87ad41z6ru.fsf@fons-adae.s.notwork.org> References: <1074080151.733.51.camel@cyclops.thehouse> <87ad41z6ru.fsf@fons-adae.s.notwork.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Feb 03, 2004 at 03:16:21AM +0900, Murata Shuuichirou wrote: > > > With these changes, the code compiles. I can install and load the > > resulting kernel module, and I can sucessfully use newfs_hfs and > > fsck_hfs, but mount_hfs on the same volume always fails with an > > "Input/output error". > > If you have not gotten good results yet, try attached patch. Of > course, your patch is also needed. > > With this patch, I can mount hfs successfully. Creating and > removing files on the filesystem are also succeeded. Excellent work, gentlemen! While currently I have very little time left for hacking, you helped me to bring the HFS port back into functional state. Thank you! > But, I have not tested this fully and found some problems such as: > > 1. Sometime, hfs partitions become unmountable by FreeBSD > (mount_hfs returns "Invalid argument"), although the > partition can still be mounted by MacOSX. Did you try to fsck_hfs such a broken volume? > 2. After editing files on hfs filesystem with vi(1), umounting > the filesystem causes these errors: > > Feb 2 21:13:11 roma kernel: hfs_fsync: dirty: 0xc2d74000: tag hfs, type VREG, usecount 2, writecount 0, refcount 2, flags (VV_SYSTEM), lock type cnode: EXCL (count 1) by thread 0xc2b42a80 (pid 1068) > Feb 2 21:13:11 roma kernel: tag VT_HFS, cnid 4, on dev 4, 24 lock type cnode: EXCL (count 1) by thread 0xc2b42a80 (pid 1068) > (lots of same errors continue) > > Then system crashed. It's me who introduced this bug. I forgot to unlock a buffer at one place. Please try the patch attached. -- Yar --- hfs_vnops.c 20 Jan 2004 17:48:16 -0000 1.52.2.1 +++ hfs_vnops.c 11 Feb 2004 18:23:34 -0000 @@ -1295,6 +1295,7 @@ hfs_fsync(ap) /* * Flush all dirty buffers associated with a vnode. */ +#ifdef DARWIN loop: s = splbio(); VI_LOCK(vp); @@ -1381,6 +1382,9 @@ loop: } VI_UNLOCK(vp); splx(s); +#else /* !DARWIN */ + vop_stdfsync(ap); +#endif /* DARWIN */ metasync: getmicrotime(&tv); @@ -1449,6 +1453,7 @@ hfs_metasync(struct hfsmount *hfsmp, dad (void) VOP_BWRITE(bp); goto exit; } + BUF_UNLOCK(bp); VI_LOCK(vp); } VI_UNLOCK(vp);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040211183645.GA18497>