lkml.org 
[lkml]   [2004]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
SubjectRe: hfsplus bugs in linux-2.6.5
Date

On 22.05.2004, at 14:32, Roman Zippel wrote:

>> I still wasn't able to reproduce it on another partition than my Mac
>> OS
>> X root partition. :-(
>>
>> The symptoms are as follows: Whenever I try to write a sufficently
>> large file (always larger than 512k), or try to read a sufficiently
>> large file (say a 4 MB file) with any program, I get:
>>
>> HFS+-fs: request for non-existent node 1929183232 in B*Tree
>
> It seems you have a very fragmented volume and it goes wrong when the
> driver tries to access the extent file. I tested this with HFS, but it
> seems not all fixes made it to the HFS+ driver.
> Fix is below.

Yes, that solved the problem! Thanks a lot for that fast fix! I'm glad
that's finally resolved.


There is one more annoying thing with the hfsplus driver: the handling
of HFSPLUS_VOL_INCNSTNT.
It seem that both Mac OS X's mount/unmount routines and fsck_hfs don't
ever read or write this bit, in violation of Apple's own
specifications. This means that when linux crashes, a mounted hfs+
volumes will from then on have the INCONSTNT bit set and linux will
refuse to mount it read-write, even after Mac OS X fscked it and
mounted it read/write. This situation can be resolved by running
hpmount on that volume, which clears the INCONSTNT bit, but that's not
user-friendly. I therefore propose this simple patch:

--- linux-2.6.6/fs/hfsplus/super.c.bak Sat May 22 20:32:05 2004
+++ linux-2.6.6/fs/hfsplus/super.c Sat May 22 20:34:48 2004
@@ -245,8 +245,7 @@
if (!(*flags & MS_RDONLY)) {
struct hfsplus_vh *vhdr = HFSPLUS_SB(sb).s_vhdr;

- if ((vhdr->attributes &
cpu_to_be32(HFSPLUS_VOL_INCNSTNT)) ||
- !(vhdr->attributes &
cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
+ if (!(vhdr->attributes &
cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
printk("HFS+-fs warning: Filesystem was not
cleanly unmounted, "
"running fsck.hfsplus is recommended.
leaving read-only.\n");
sb->s_flags |= MS_RDONLY;
@@ -331,8 +330,7 @@
sb->s_op = &hfsplus_sops;
sb->s_maxbytes = MAX_LFS_FILESIZE;

- if ((vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_INCNSTNT)) ||
- !(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
+ if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) {
if (!silent)
printk("HFS+-fs warning: Filesystem was not
cleanly unmounted, "
"running fsck.hfsplus is recommended.
mounting read-only.\n");
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:03    [W:0.073 / U:0.284 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site