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>
