ffs_alloc panic patch
Don Lewis
truckman at FreeBSD.org
Tue Oct 26 13:42:31 PDT 2004
On 27 Aug, Pavel Merdine wrote:
> Hello,
>
> I'd like to propose the following patch:
>
> ------------------------------------------------------------------
> --- ffs_alloc.c.orig Fri May 14 19:03:50 2004
> +++ ffs_alloc.c Sat Aug 7 03:36:32 2004
> @@ -712,7 +712,7 @@
> minbfree = 1;
> cgsize = fs->fs_fsize * fs->fs_fpg;
> dirsize = fs->fs_avgfilesize * fs->fs_avgfpdir;
> - curdirsize = avgndir ? (cgsize - avgbfree * fs->fs_bsize) / avgndir : 0;
> + curdirsize = avgndir ? (cgsize - avgbfree * fs->fs_bsize) / avgndir : 512;
> if (dirsize < curdirsize)
> dirsize = curdirsize;
> maxcontigdirs = min((avgbfree * fs->fs_bsize) / dirsize, 255);
> ------------------------------------------------------------------
>
> It should solve the problem of "panic: integer divide fault" on the
> last line of the code above. The panic happens on:
> 1. directory creation
> 2. when disk is empty
> 3. when avg_dir_size avg_file_size are set to values, so
> avg_dir_size * avg_file_size is negative in integer.
> example: avg_dir_size = 8000, avf_file_size = 375000.
> (curdirsize == 0 and dirsize < 0, so dirsize = 0)
I'd prefer to cap dirsize at cgsize in this case.
Even without the panic, I think you'll find the performance of the file
system in this case will be terrible.
More information about the freebsd-stable
mailing list