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>