kern/122961: write operation on msdosfs file system causes panic

Dominic Fandrey kamikaze at bsdforen.de
Thu Apr 24 04:31:28 UTC 2008


Bruce Evans wrote:
> On Wed, 23 Apr 2008, Dominic Fandrey wrote:
> 
>> Bruce Evans wrote:
>>> The broken nocluster* can be worked around by upgrading to a version of
>>> mount_msdsosfs(8) that hasn't been broken by using nmount(2).
>>> mount_msdsosfs(8) from RELENG_5 should work.
>>
>> I feel reluctant about downgrading to 5.x mount_msdosfs,
> 
> But it would be an upgrage :-).  Anyway, running mount_msdosfs on one
> disposable file system that might panic should be safe.

If it really is of help, I will downgrade. Not before the weekend, though.

>> however I can confirm that cp with large files does _not_ cause a 
>> panic. As far as I understand this confirms your theory.
> 
> Not quite.  I would have expected the problem to affect read() and write()
> too unless the file system is mounted with -nocluster*.
> 
>> How can I provide more useful information?
> 
> Check if the cp of large files actually works.  A previous report mentioned
> data corruption but I don't remember it saying anything about panics.  
> Maybe
> mmap() does something different that causes more serious corruption.

I copied a 1.2gb DVD rip and watched it afterwards. No corruption. Md5 
checksums show that the file on the stick and the original are identical.

> I'll have to think more about adding debugging code to mmap() and the
> device driver.
> 
> Meanwhile, can you try changing this code in msdosfs_vnops.c:
> 
> %%%
>     mp = vp->v_mount;
>     maxio = mp->mnt_iosize_max / mp->mnt_stat.f_iosize;
>     bnpercn = de_cn2bn(pmp, 1);
> %%%
> 
> o Add a printf to print out maxio (might need rate limiting).
> o Try lower values of maxio until you find the largest one that works
>   (keep dividing by 2.  Only try one value per boot or per mount of
>   course).  I think it is always 128K initially, and small values will
>   work.  A value of the cluster size (typically 4K) or smaller should
>   give the old behaviour.

I will give it a try.

> or one or more of the following:
> 
> o Check that large i/o's to the raw device work.
> o Check for the problem with other file systems that implement clustering.
>   ffs is easiest.
> o On an older version of FreeBSD that doesn't seem to have the problem,
>   check for the problem with msdosfs with a large cluster size (the
>   cluster can be up to 64K, which is large enough to show the problem that
>   I suspect).   Check on file systems that implement clustering too (now
>   the block size doesn't need to be large to cause large i/o's).
> 
> Bruce
> 

These ones are harder. I will also defer them to the weekend.


More information about the freebsd-bugs mailing list