From owner-freebsd-current@FreeBSD.ORG Mon Sep 26 09:24:09 2005 Return-Path: X-Original-To: freebsd-current@FreeBSD.org Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CDCBC16A41F for ; Mon, 26 Sep 2005 09:24:09 +0000 (GMT) (envelope-from truckman@FreeBSD.org) Received: from gw.catspoiler.org (217-ip-163.nccn.net [209.79.217.163]) by mx1.FreeBSD.org (Postfix) with ESMTP id 71A8943D48 for ; Mon, 26 Sep 2005 09:24:09 +0000 (GMT) (envelope-from truckman@FreeBSD.org) Received: from FreeBSD.org (mousie.catspoiler.org [192.168.101.2]) by gw.catspoiler.org (8.13.3/8.13.3) with ESMTP id j8Q9O0Za094947; Mon, 26 Sep 2005 02:24:04 -0700 (PDT) (envelope-from truckman@FreeBSD.org) Message-Id: <200509260924.j8Q9O0Za094947@gw.catspoiler.org> Date: Mon, 26 Sep 2005 02:24:00 -0700 (PDT) From: Don Lewis To: b_bonev@mail.orbitel.bg In-Reply-To: <000001c5c282$8576ce60$4700000a@server> MIME-Version: 1.0 Content-Type: TEXT/plain; charset=us-ascii Cc: freebsd-current@FreeBSD.org Subject: Re: BETA4: Panic and can't cleanup filesystem X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Sep 2005 09:24:10 -0000 On 26 Sep, B. Bonev wrote: > > > After last update of man page to fsck_ffs I see that altarnate superblock > for UFS2 is 160. I do: #fsck_ufs -b 160 /var Alternate super block location: > 160 > ** /dev/ad2s1d > ** Last Mounted on > ** Phase 1 - Check Blocks and Sizes > fsck_ufs: cannot alloc 1128481600 bytes for inoinfo > # > > Don't know how to continue to cleanup /var. Wanted help, if any has idea > what to do... It is likely that one of the cylinder group blocks got spammed. Try rebuilding fsck_ufs with the following change, but be prepared for the possibility of major file system damage. ------ Forwarded message ------ From: Don Lewis Subject: Re: fsck_ufs: cannot alloc 647172276 bytes for inoinfo Date: Wed, 18 May 2005 17:12:47 -0700 (PDT) To: einstein@yawl.com.br Cc: freebsd-stable@freebsd.org On 18 May, Einstein Oliveira wrote: > Hi, > > I'm using FreeBSD 5.4-RELEASE-p1 and I found some messages about a > problem like this in freebsd-current a few months ago. > > The fact is that this problem has just ocurred (on 5.4-RELEASE-p1), > probably because of a power outage (I didn't find anything in logs that > would cause a forced reboot). > > Here is some information: > > [fsck] > > # fsck /usr > ** /dev/ad0s1f > ** Last Mounted on /usr > ** Phase 1 - Check Blocks and Sizes > fsck_ufs: cannot alloc 647172276 bytes for inoinfo > > [dumpfs] > > # dumpfs /usr > .... > cg 11: > magic 806e54b3 tell 7e584000 time Fri Nov 26 > 01:12:38 1943 > cgx -1312777034 ndblk -931553057 niblk -2017999697 > initiblk -1985690579 > nbfree 2120952272 ndir 831365510 nifree 93179446 > nffree -1130132161 > rotor -541929111 irotor 1807500773 frotor -1630357508 > frsum 237144368 -1927321463 -1872608999 -481058689 > 811654083 830922798 -91646688 > sum of frsum: 1537687372 > Segmentation fault (core dumped) > > > I found in the discussion mentioned above > > http://www.freebsd.org/cgi/getmsg.cgi?fetch=195794+200562+/usr/local/www/db/text/2005/freebsd-current/20050417.freebsd-current > > this possible solution: > >> At line 92 in src/sbin/fsck_ffs/pass1.c, you should see the following >> block of code: >> >> for (c = 0; c < sblock.fs_ncg; c++) { >> inumber = c * sblock.fs_ipg; >> setinodebuf(inumber); >> getblk(&cgblk, cgtod(&sblock, c), sblock.fs_cgsize); >> if (sblock.fs_magic == FS_UFS2_MAGIC) >> inosused = cgrp.cg_initediblk; >> else >> inosused = sblock.fs_ipg; >> >> Try changing >> inosused = cgrp.cg_initediblk; >> to >> inosused = (cgrp.cg_initediblk <= sblock.fs_ipg) ? >> cgrp.cg_initediblk : sblock.fs_ipg; > > but it doesn't solve the problem. It turns out that cg_initediblk is signed, and in your case the sign bit is set, so it is being interpreted as a large negative value. Try this change instead: inosused = (cgrp.cg_initediblk <= sblock.fs_ipg && cgrp.cg_initediblk > 0) ? cgrp.cg_initediblk : sblock.fs_ipg;