Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Oct 2004 13:42:23 -0700 (PDT)
From:      Don Lewis <truckman@FreeBSD.org>
To:        fbsdlist@merdin.com
Cc:        freebsd-stable@FreeBSD.org
Subject:   Re: ffs_alloc panic patch
Message-ID:  <200410262042.i9QKgNS4018723@gw.catspoiler.org>
In-Reply-To: <1076237332.20040827215245@kaluga.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200410262042.i9QKgNS4018723>