From pengxihan@gmail.com Tue Dec 1 00:34:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB16YQUm105871 for ; Tue, 1 Dec 2009 00:34:26 -0600 X-ASG-Debug-ID: 1259649295-2ada025d0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-pz0-f173.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1A5C3DA4589 for ; Mon, 30 Nov 2009 22:34:56 -0800 (PST) Received: from mail-pz0-f173.google.com (mail-pz0-f173.google.com [209.85.222.173]) by cuda.sgi.com with ESMTP id f9MKhroKPKb396aG for ; Mon, 30 Nov 2009 22:34:56 -0800 (PST) Received: by pzk3 with SMTP id 3so3255502pzk.20 for ; Mon, 30 Nov 2009 22:34:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=ANTXEgk+NBFmAztFUUTauKMydz2pHpgpCEyDn+K4M2A=; b=A9LcfwYgVyUl5DZ/0M5JCu300exZpoDB7c4cDQSVZDKRH0qRy5mVvVIujeWPtH7gmE wXu9Fhdae5FL/OXH2D/IV02RxbQmDGBAo3sUjwpMguICEF8FVyq3ZkGXRjkaws9c1rpp h7RkRCamim4NDW/wZClwG9nbXIeV3Sic1uQS8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=L4AWff4wEv2jxtemE/ggobyrJwBPkWv8GBYvkJymUA+74Ex/GZgDJmoUGabI2H0MlI 4CYDSt9/EUVaRAqbLMhkQaH7Qhxc9v2heiG1617impe5Be0GFCslYdI0CX8qIk7hgiT5 eTkQ++TbyVTrWBdwhF39aIhFR9/bLb5benWms= MIME-Version: 1.0 Received: by 10.142.249.6 with SMTP id w6mr552323wfh.346.1259649295531; Mon, 30 Nov 2009 22:34:55 -0800 (PST) In-Reply-To: <4B14B077.5090500@sandeen.net> References: <389deec70911301805j37df7397l1c3ddbbad7e91768@mail.gmail.com> <4B14936F.7040401@sandeen.net> <389deec70911302037v19764c2cr7686b353c5e933fa@mail.gmail.com> <4B14B077.5090500@sandeen.net> Date: Tue, 1 Dec 2009 14:34:55 +0800 Message-ID: <389deec70911302234v2fc792ddt54bf88f5200500be@mail.gmail.com> X-ASG-Orig-Subj: Re: can xfs_repair guarantee a complete clean filesystem? Subject: Re: can xfs_repair guarantee a complete clean filesystem? From: hank peng To: Eric Sandeen Cc: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-pz0-f173.google.com[209.85.222.173] X-Barracuda-Start-Time: 1259649296 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16003 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/12/1 Eric Sandeen : > hank peng wrote: >> 2009/12/1 Eric Sandeen : >>> hank peng wrote: >>>> When using xfs_repair, I want my XFS filesystem complete clean and >>>> continue to work even if some files lost. Becase we use XFS in low-end >>>> NAS box, customers want a tool to repair the filesystem when it has >>>> problem and they allow some files be lost and don't want the whole >>>> system to stop. >>>> So, I wonder if xfs_repair or some other tools can satisfy this funcit= on? >>>> >>> Yes, that is exactly its purpose (any potential bugs notwithstanding...= ) >>> >> Thanks for your reply. >> Is there some points I should notice about when using xfs_repair? I >> used to encounter some cases in which xfs_repair complete successfully >> but some errors like "Corrupt in memory detected" occured when the >> filesytem is put into online for short time. > > It's possible that you encountered a bug (in xfs or elsewhere), or > bad hardware... > >> Should I reboot the machine and use xfs_repair before the damaged >> filesystem is used, or some other options I should use? > > Just unmount the filesystem, run repair, and remount. > >> In addition, I googled some information and found that some people say >> xfs_check should be used before xfs_repair, is it right? > > There's no need; xfs_check doesn't scale very well, and xfs_repair -n wil= l do > a check-only run if that's what you want. > > xfs_check checks a little more than xfs_repair, but xfs_repair simply > rebuilds those things it doesn't check in any case. > > -Eric > Today, I encountered a problem: I use "xfs_repair -L =E2=80=9C on a damaged filesystem and a lot of message= s output which include "moving disconnected inodes to lost+found ...". Then I can remount the filesystem successfully and decided to remove those files in lost+found directory, but it printed the following message: root@1234dahua:/mnt/Pool_md1/ss1/lost+found# rm -rf * rm: cannot stat '710': Structure needs cleaning rm: cannot stat '728': Structure needs cleaning rm: cannot stat '729': Structure needs cleaning rm: cannot stat '730': Structure needs cleaning rm: cannot stat '731': Structure needs cleaning rm: cannot stat '732': Structure needs cleaning rm: cannot stat '733': Structure needs cleaning rm: cannot stat '734': Structure needs cleaning rm: cannot stat '735': Structure needs cleaning Other directories and files seems normal to access, is it not allowed to delete files in lost+found directory after repair, then what should I do? >>> -Eric >>> >> >> >> > > --=20 The simplest is not all best but the best is surely the simplest! From sandeen@sandeen.net Tue Dec 1 08:43:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1EhZIe141923 for ; Tue, 1 Dec 2009 08:43:35 -0600 X-ASG-Debug-ID: 1259678644-4adc022b0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B452E14EC26A for ; Tue, 1 Dec 2009 06:44:04 -0800 (PST) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id kjYZslGF7su2cB28 for ; Tue, 01 Dec 2009 06:44:04 -0800 (PST) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id ADBA4A9C9A4; Tue, 1 Dec 2009 08:44:03 -0600 (CST) Message-ID: <4B152BAD.1000004@sandeen.net> Date: Tue, 01 Dec 2009 08:43:57 -0600 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812) MIME-Version: 1.0 To: hank peng CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: can xfs_repair guarantee a complete clean filesystem? Subject: Re: can xfs_repair guarantee a complete clean filesystem? References: <389deec70911301805j37df7397l1c3ddbbad7e91768@mail.gmail.com> <4B14936F.7040401@sandeen.net> <389deec70911302037v19764c2cr7686b353c5e933fa@mail.gmail.com> <4B14B077.5090500@sandeen.net> <389deec70911302234v2fc792ddt54bf88f5200500be@mail.gmail.com> In-Reply-To: <389deec70911302234v2fc792ddt54bf88f5200500be@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1259678644 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16022 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean hank peng wrote: > Today, I encountered a problem: > I use "xfs_repair -L “ on a damaged filesystem and a lot of messages why did you use -L, did it fail to mount & replay the log properly? > output which include "moving disconnected inodes to lost+found ...". > Then I can remount the filesystem successfully and decided to remove > those files in lost+found directory, but it printed the following > message: > root@1234dahua:/mnt/Pool_md1/ss1/lost+found# rm -rf * > rm: cannot stat '710': Structure needs cleaning > rm: cannot stat '728': Structure needs cleaning > rm: cannot stat '729': Structure needs cleaning > rm: cannot stat '730': Structure needs cleaning > rm: cannot stat '731': Structure needs cleaning > rm: cannot stat '732': Structure needs cleaning > rm: cannot stat '733': Structure needs cleaning > rm: cannot stat '734': Structure needs cleaning > rm: cannot stat '735': Structure needs cleaning Look at dmesg to see what's gone wrong.... > Other directories and files seems normal to access, is it not allowed > to delete files in lost+found directory after repair, then what should > I do? This is indicative of a bug or IO error that caused xfs to shut down. You haven't mentioned which kernel version, architecture, or version of xfsprogs you're using yet ... that may offer some clues. I'm guessing an older kernel and userspace on arm? :) -Eric From BATV+0e5d8d28e7b513271f2e+2291+infradead.org+hch@bombadil.srs.infradead.org Tue Dec 1 09:10:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1FA7Th143652 for ; Tue, 1 Dec 2009 09:10:08 -0600 X-ASG-Debug-ID: 1259680237-5995034f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 213072C34C1 for ; Tue, 1 Dec 2009 07:10:37 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id L8ZwIciXEQPMscva for ; Tue, 01 Dec 2009 07:10:37 -0800 (PST) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1NFUNB-0005hH-AB for xfs@oss.sgi.com; Tue, 01 Dec 2009 15:10:37 +0000 Message-Id: <20091201150503.958283878@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Tue, 01 Dec 2009 10:05:03 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 0/3] repair btree validation improvements Subject: [PATCH 0/3] repair btree validation improvements X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1259680238 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This patchset contains some improvements to the allocation btree checking in xfs_repair. Patches 2 / 3 are straight ports of code used for xfs_check in xfs_db and bring the level of btree-related checks up to the standard of xfs_check, making xfs_repair -n a fully suitable replacement for xfs_check. Patch 1 is a bug fixes found while validating the other patches. With this code we could in theory start chaning xfs_check to use xfs_repair as backend instead of xfs_db, but there are two issues still preventing this for now: - xfs_check is supposed to not give any output when a filesystem is clean while xfs_repair is quite noisy - xfs_check has a -s option to only complain about serious structural issues while xfs_repair lacks the infrastructure for it. - xfs_check has -i and -b options to only examine specific blocks or inodes in details, while xfs_repair lacks the infrastructure for this. While we could add support for this in xfs_repair I wonder if we should just leave xfs_check as-is and instead tie up xfs_repair -n to fsck.xfs if used with the -f option or the /forcefsck file. Most fsck programs are a least a bit noisy to we would fit right in and there's not need to implement the additional check options. We can't really get rid of the check code in xfs_db anyway as it's also used for xfs_ncheck and useful db commands like blockuse. A second codebase also provides a useful validation for xfs_repair. From BATV+0e5d8d28e7b513271f2e+2291+infradead.org+hch@bombadil.srs.infradead.org Tue Dec 1 09:10:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_21, J_CHICKENPOX_65,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1FA7m1143650 for ; Tue, 1 Dec 2009 09:10:08 -0600 X-ASG-Debug-ID: 1259680237-61a800b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 03DA81DA0978 for ; Tue, 1 Dec 2009 07:10:37 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id SvA9OnSobVXhbTGl for ; Tue, 01 Dec 2009 07:10:37 -0800 (PST) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1NFUNB-0005iO-Kr for xfs@oss.sgi.com; Tue, 01 Dec 2009 15:10:37 +0000 Message-Id: <20091201151037.542119951@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Tue, 01 Dec 2009 10:05:05 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/3] repair: add more fresspace btree checks Subject: [PATCH 2/3] repair: add more fresspace btree checks References: <20091201150503.958283878@bombadil.infradead.org> Content-Disposition: inline; filename=repair-freespace-warn X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1259680238 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Port over additional checks for the freespace btrees from xfs_db, to get the same btree checking coverage as in xfs_check. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/repair/scan.c =================================================================== --- xfsprogs-dev.orig/repair/scan.c 2009-12-01 13:07:55.000000000 +0000 +++ xfsprogs-dev/repair/scan.c 2009-12-01 13:09:03.000000000 +0000 @@ -462,6 +462,8 @@ scanfunc_allocbt( int hdr_errors = 0; int numrecs; int state; + xfs_extlen_t lastcount = 0; + xfs_agblock_t lastblock = 0; assert(magic == XFS_ABTB_MAGIC || magic == XFS_ABTC_MAGIC); @@ -508,8 +510,14 @@ _("%s freespace btree block claimed (sta hdr_errors++; } - if (hdr_errors) + if (hdr_errors) { + do_warn( + _("bad btree nrecs (%u, min=%u, max=%u) in bt%s block %u/%u\n"), + be16_to_cpu(block->bb_numrecs), + mp->m_alloc_mnr[0], mp->m_alloc_mxr[0], + name, agno, bno); suspect++; + } rp = XFS_ALLOC_REC_ADDR(mp, block, 1); for (i = 0; i < numrecs; i++) { @@ -533,6 +541,24 @@ _("%s freespace btree block claimed (sta continue; } + if (magic == XFS_ABTB_MAGIC) { + if (b <= lastblock) { + do_warn(_( + "out-of-order bno btree record %d (%u %u) block %u/%u\n"), + i, b, len, agno, bno); + } else { + lastblock = b; + } + } else { + if (len < lastcount) { + do_warn(_( + "out-of-order cnt btree record %d (%u %u) block %u/%u\n"), + i, b, len, agno, bno); + } else { + lastcount = len; + } + } + for ( ; b < end; b += blen) { state = get_bmap_ext(agno, b, end, &blen); switch (state) { @@ -579,14 +605,17 @@ _("%s freespace btree block claimed (sta * don't pass bogus tree flag down further if this block * looked ok. bail out if two levels in a row look bad. */ - - if (suspect && !hdr_errors) - suspect = 0; - if (hdr_errors) { + do_warn( + _("bad btree nrecs (%u, min=%u, max=%u) in bt%s block %u/%u\n"), + be16_to_cpu(block->bb_numrecs), + mp->m_alloc_mnr[1], mp->m_alloc_mxr[1], + name, agno, bno); if (suspect) return; - else suspect++; + suspect++; + } else if (suspect) { + suspect = 0; } for (i = 0; i < numrecs; i++) { From BATV+0e5d8d28e7b513271f2e+2291+infradead.org+hch@bombadil.srs.infradead.org Tue Dec 1 09:10:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_21 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1FA7MZ143655 for ; Tue, 1 Dec 2009 09:10:08 -0600 X-ASG-Debug-ID: 1259680237-5997033f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 66CA02C34C1 for ; Tue, 1 Dec 2009 07:10:38 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id WEUWIaoToVWEj5Q2 for ; Tue, 01 Dec 2009 07:10:38 -0800 (PST) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1NFUNB-0005iu-Pu for xfs@oss.sgi.com; Tue, 01 Dec 2009 15:10:37 +0000 Message-Id: <20091201151037.707510379@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Tue, 01 Dec 2009 10:05:06 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 3/3] repair: compare superblock / AG headers fields against manual counts Subject: [PATCH 3/3] repair: compare superblock / AG headers fields against manual counts References: <20091201150503.958283878@bombadil.infradead.org> Content-Disposition: inline; filename=repair-freespace-warn-2 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1259680238 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Compare the free block / inode counters in the superblock and AG headers against the values we get from a manual btree traversal. Ported over from xfs_db to get the same amount of superblock / AG header checking as in xfs_check. Note: this causes additional output in the xfstests 030 and 178 which will need some adjustments in the testcases. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/repair/scan.c =================================================================== --- xfsprogs-dev.orig/repair/scan.c 2009-12-01 14:56:22.000000000 +0000 +++ xfsprogs-dev/repair/scan.c 2009-12-01 15:01:43.000000000 +0000 @@ -34,6 +34,29 @@ extern int verify_set_agheader(xfs_mount static xfs_mount_t *mp = NULL; +/* + * Global variables to validate superblock values against the manual count + * from the btree traversal. + * + * No locking for now as phase2 is not threaded. + */ +static __uint64_t fdblocks; +static __uint64_t icount; +static __uint64_t ifreecount; + +/* + * Global variables to validate AG header values against the manual count + * from the btree traversal. + * + * Note: these values must be reset when processing a new AG, and for now + * forces the AG scanning in phase2 to not be threaded. + */ +static xfs_extlen_t agffreeblks; +static xfs_extlen_t agflongest; +static __uint64_t agfbtreeblks; +static __uint32_t agicount; +static __uint32_t agifreecount; + void set_mp(xfs_mount_t *mpp) { @@ -476,6 +499,17 @@ scanfunc_allocbt( if (suspect) return; } + + /* + * All freespace btree blocks except the roots are freed for a + * fully used filesystem, thus they are counted towards the + * free data block counter. + */ + if (!isroot) { + agfbtreeblks++; + fdblocks++; + } + if (be16_to_cpu(block->bb_level) != level) { do_warn(_("expected level %d got %d in bt%s block %d/%d\n"), level, be16_to_cpu(block->bb_level), name, agno, bno); @@ -500,7 +534,6 @@ _("%s freespace btree block claimed (sta numrecs = be16_to_cpu(block->bb_numrecs); if (level == 0) { - if (numrecs > mp->m_alloc_mxr[0]) { numrecs = mp->m_alloc_mxr[0]; hdr_errors++; @@ -550,6 +583,10 @@ _("%s freespace btree block claimed (sta lastblock = b; } } else { + fdblocks += len; + agffreeblks += len; + if (len > agflongest) + agflongest = len; if (len < lastcount) { do_warn(_( "out-of-order cnt btree record %d (%u %u) block %u/%u\n"), @@ -930,8 +967,14 @@ _("inode btree block claimed (state %d), * of INODES_PER_CHUNK (64) inodes. off is the offset into * the block. skip processing of bogus records. */ - for (i = 0; i < numrecs; i++) + for (i = 0; i < numrecs; i++) { + agicount += XFS_INODES_PER_CHUNK; + icount += XFS_INODES_PER_CHUNK; + agifreecount += be32_to_cpu(rp[i].ir_freecount); + ifreecount += be32_to_cpu(rp[i].ir_freecount); + suspect = scan_single_ino_chunk(agno, &rp[i], suspect); + } if (suspect) bad_ino_btree = 1; @@ -1024,25 +1067,150 @@ scan_freelist( do_warn(_("freeblk count %d != flcount %d in ag %d\n"), count, be32_to_cpu(agf->agf_flcount), agno); } + + fdblocks += count; + libxfs_putbuf(agflbuf); } +static void +validate_agf( + struct xfs_agf *agf, + xfs_agnumber_t agno) +{ + xfs_agblock_t bno; + + bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]); + if (bno != 0 && verify_agbno(mp, agno, bno)) { + scan_sbtree(bno, be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), + agno, 0, scanfunc_bno, 1); + } else { + do_warn(_("bad agbno %u for btbno root, agno %d\n"), + bno, agno); + } + + bno = be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]); + if (bno != 0 && verify_agbno(mp, agno, bno)) { + scan_sbtree(bno, be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), + agno, 0, scanfunc_cnt, 1); + } else { + do_warn(_("bad agbno %u for btbcnt root, agno %d\n"), + bno, agno); + } + + if (be32_to_cpu(agf->agf_freeblks) != agffreeblks) { + do_warn(_("agf_freeblks %u, counted %u in ag %u\n"), + be32_to_cpu(agf->agf_freeblks), agffreeblks, agno); + } + + if (be32_to_cpu(agf->agf_longest) != agflongest) { + do_warn(_("agf_longest %u, counted %u in ag %u\n"), + be32_to_cpu(agf->agf_longest), agflongest, agno); + } + + if (xfs_sb_version_haslazysbcount(&mp->m_sb) && + be32_to_cpu(agf->agf_btreeblks) != agfbtreeblks) { + do_warn(_("agf_btreeblks %u, counted %u in ag %u\n"), + be32_to_cpu(agf->agf_btreeblks), agfbtreeblks, agno); + } +} + +static void +validate_agi( + struct xfs_agi *agi, + xfs_agnumber_t agno) +{ + xfs_agblock_t bno; + int i; + + bno = be32_to_cpu(agi->agi_root); + if (bno != 0 && verify_agbno(mp, agno, bno)) { + scan_sbtree(bno, be32_to_cpu(agi->agi_level), + agno, 0, scanfunc_ino, 1); + } else { + do_warn(_("bad agbno %u for inobt root, agno %d\n"), + be32_to_cpu(agi->agi_root), agno); + } + + if (be32_to_cpu(agi->agi_count) != agicount) { + do_warn(_("agi_count %u, counted %u in ag %u\n"), + be32_to_cpu(agi->agi_count), agicount, agno); + } + + if (be32_to_cpu(agi->agi_freecount) != agifreecount) { + do_warn(_("agi_freecount %u, counted %u in ag %u\n"), + be32_to_cpu(agi->agi_freecount), agifreecount, agno); + } + + for (i = 0; i < XFS_AGI_UNLINKED_BUCKETS; i++) { + xfs_agino_t agino = be32_to_cpu(agi->agi_unlinked[i]); + + if (agino != NULLAGINO) { + do_warn( + _("agi unlinked bucket %d is %u in ag %u (inode=%lld)\n"), + i, agino, agno, + XFS_AGINO_TO_INO(mp, agno, agino)); + } + } +} + +/* + * Validate block/inode counts in the superblock. + * + * Note: needs to be called after scan_ag() has been called for all + * allocation groups. + */ +void +validate_sb( + struct xfs_sb *sb) +{ + if (sb->sb_icount != icount) { + do_warn(_("sb_icount %lld, counted %lld\n"), + sb->sb_icount, icount); + } + + if (sb->sb_ifree != ifreecount) { + do_warn(_("sb_ifree %lld, counted %lld\n"), + sb->sb_ifree, ifreecount); + } + + if (sb->sb_fdblocks != fdblocks) { + do_warn(_("sb_fdblocks %lld, counted %lld\n"), + sb->sb_fdblocks, fdblocks); + } + + /* XXX: check sb_frextents */ +} + +/* + * Scan an AG for obvious corruption. + * + * Note: This code is not reentrant due to the use of global variables. + */ void scan_ag( xfs_agnumber_t agno) { xfs_agf_t *agf; xfs_buf_t *agfbuf; - int agf_dirty; + int agf_dirty = 0; xfs_agi_t *agi; xfs_buf_t *agibuf; - int agi_dirty; + int agi_dirty = 0; xfs_sb_t *sb; xfs_buf_t *sbbuf; - int sb_dirty; + int sb_dirty = 0; int status; - agi_dirty = agf_dirty = sb_dirty = 0; + /* + * Reset the global variables to track the AG header validity. + * + * Because we use global variable but can get called multiple times + * we have to make sure to always reset these variables. + */ + agicount = agifreecount = 0; + agffreeblks = agfbtreeblks = 0; + agflongest = 0; sbbuf = libxfs_readbuf(mp->m_dev, XFS_AG_DADDR(mp, agno, XFS_SB_DADDR), XFS_FSS_TO_BB(mp, 1), 0); @@ -1135,33 +1303,8 @@ scan_ag( scan_freelist(agf); - if (be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]) != 0 && verify_agbno(mp, - agno, be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]))) - scan_sbtree(be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), - be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]), - agno, 0, scanfunc_bno, 1); - else - do_warn(_("bad agbno %u for btbno root, agno %d\n"), - be32_to_cpu(agf->agf_roots[XFS_BTNUM_BNO]), - agno); - - if (be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]) != 0 && verify_agbno(mp, - agno, be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]))) - scan_sbtree(be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), - be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]), - agno, 0, scanfunc_cnt, 1); - else - do_warn(_("bad agbno %u for btbcnt root, agno %d\n"), - be32_to_cpu(agf->agf_roots[XFS_BTNUM_CNT]), - agno); - - if (be32_to_cpu(agi->agi_root) != 0 && verify_agbno(mp, agno, - be32_to_cpu(agi->agi_root))) - scan_sbtree(be32_to_cpu(agi->agi_root), - be32_to_cpu(agi->agi_level), agno, 0, scanfunc_ino, 1); - else - do_warn(_("bad agbno %u for inobt root, agno %d\n"), - be32_to_cpu(agi->agi_root), agno); + validate_agf(agf, agno); + validate_agi(agi, agno); ASSERT(agi_dirty == 0 || (agi_dirty && !no_modify)); Index: xfsprogs-dev/repair/phase2.c =================================================================== --- xfsprogs-dev.orig/repair/phase2.c 2009-12-01 14:54:18.000000000 +0000 +++ xfsprogs-dev/repair/phase2.c 2009-12-01 14:59:56.000000000 +0000 @@ -27,6 +27,7 @@ void set_mp(xfs_mount_t *mpp); void scan_ag(xfs_agnumber_t agno); +void validate_sb(struct xfs_sb *sb); /* workaround craziness in the xlog routines */ int xlog_recover_do_trans(xlog_t *log, xlog_recover_t *t, int p) { return 0; } @@ -144,6 +145,11 @@ phase2(xfs_mount_t *mp) #endif } + /* + * Validate that our manual counts match the superblock. + */ + validate_sb(&mp->m_sb); + print_final_rpt(); /* From BATV+0e5d8d28e7b513271f2e+2291+infradead.org+hch@bombadil.srs.infradead.org Tue Dec 1 09:10:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1FA8ks143658 for ; Tue, 1 Dec 2009 09:10:08 -0600 X-ASG-Debug-ID: 1259680237-4adc033f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D14DF14EC4BF for ; Tue, 1 Dec 2009 07:10:37 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id lu8M4Tv6rZl2Zkri for ; Tue, 01 Dec 2009 07:10:37 -0800 (PST) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1NFUNB-0005hr-Fj for xfs@oss.sgi.com; Tue, 01 Dec 2009 15:10:37 +0000 Message-Id: <20091201151037.381644480@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Tue, 01 Dec 2009 10:05:04 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/3] repair: fix freespace btree record validation Subject: [PATCH 1/3] repair: fix freespace btree record validation References: <20091201150503.958283878@bombadil.infradead.org> Content-Disposition: inline; filename=repair-extlen X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1259680238 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean MAXEXTLEN is a limit for the bmap btree extent length, not for the freespace btrees which can fill out the whole u32. Remove the check which makes repair skip too large freespace extents. Also add warnings for freespace btree records that fail the remaining validations. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/repair/scan.c =================================================================== --- xfsprogs-dev.orig/repair/scan.c 2009-12-01 13:02:49.000000000 +0000 +++ xfsprogs-dev/repair/scan.c 2009-12-01 14:45:14.000000000 +0000 @@ -520,12 +520,18 @@ _("%s freespace btree block claimed (sta len = be32_to_cpu(rp[i].ar_blockcount); end = b + len; - if (b == 0 || !verify_agbno(mp, agno, b)) - continue; - if (len == 0 || len > MAXEXTLEN) + if (b == 0 || !verify_agbno(mp, agno, b)) { + do_warn( + _("invalid start block %u in record %u of %d btree block %u/%u"), + b, i, name, agno, bno); continue; - if (!verify_agbno(mp, agno, end - 1)) + } + if (len == 0 || !verify_agbno(mp, agno, end - 1)) { + do_warn( + _("invalid length %u in record %u of %d btree block %u/%u"), + len, i, name, agno, bno); continue; + } for ( ; b < end; b += blen) { state = get_bmap_ext(agno, b, end, &blen); From pengxihan@gmail.com Tue Dec 1 09:32:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1FWDn9145173 for ; Tue, 1 Dec 2009 09:32:14 -0600 X-ASG-Debug-ID: 1259681563-20a300290000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-px0-f180.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 006DC14EC947 for ; Tue, 1 Dec 2009 07:32:43 -0800 (PST) Received: from mail-px0-f180.google.com (mail-px0-f180.google.com [209.85.216.180]) by cuda.sgi.com with ESMTP id m9R0PQHxtpXsxU2A for ; Tue, 01 Dec 2009 07:32:43 -0800 (PST) Received: by pxi10 with SMTP id 10so4018113pxi.33 for ; Tue, 01 Dec 2009 07:32:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=twXP2FJK1w/Zrcm4pvi9YDVI0p7oAaX3U9IDICa2gI0=; b=N1Fitr1JFwM2S/av5rTU/6X5PoaNC5ARrX742iditwtrDh2fzUvbO9Q3fo/sGDyNOy W25Tuop9mhee2zB7gdabP50dCGBrXIQz/X011NVuaAqbkoX6nMn56Scpl+pfuyhqDdx4 5fxbFKA1cOhkgnIfgznJ3VuVc7YN/UL1ylVkY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=YTIuAStgnIwf2sXbV4Yrqhu6JLcpblUTDAUHU70nFO7iqdokvWOJbW9nYfGv5kaBlP UjJPXb+As44IrF+6ZWPx9QcDpVGVw5D0u9EJyJcohrgTiyCLBwzwUNgA9WYzteYTCgG8 9MFMH+KY5M+j5BDM+wZaUsxEWxpSVLio41jfw= MIME-Version: 1.0 Received: by 10.143.26.41 with SMTP id d41mr614056wfj.228.1259681563344; Tue, 01 Dec 2009 07:32:43 -0800 (PST) In-Reply-To: <4B152BAD.1000004@sandeen.net> References: <389deec70911301805j37df7397l1c3ddbbad7e91768@mail.gmail.com> <4B14936F.7040401@sandeen.net> <389deec70911302037v19764c2cr7686b353c5e933fa@mail.gmail.com> <4B14B077.5090500@sandeen.net> <389deec70911302234v2fc792ddt54bf88f5200500be@mail.gmail.com> <4B152BAD.1000004@sandeen.net> Date: Tue, 1 Dec 2009 23:32:43 +0800 Message-ID: <389deec70912010732o72edd3c4q196088a1c01b801e@mail.gmail.com> X-ASG-Orig-Subj: Re: can xfs_repair guarantee a complete clean filesystem? Subject: Re: can xfs_repair guarantee a complete clean filesystem? From: hank peng To: Eric Sandeen Cc: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-px0-f180.google.com[209.85.216.180] X-Barracuda-Start-Time: 1259681564 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=DKIM_SIGNED, DKIM_VERIFIED X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16024 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- -0.00 DKIM_VERIFIED Domain Keys Identified Mail: signature passes verification 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/12/1 Eric Sandeen : > hank peng wrote: > >> Today, I encountered a problem: >> I use "xfs_repair -L =E2=80=9C on a damaged filesystem and a lot of mess= ages > > why did you use -L, did it fail to mount & replay the log properly? > umount, mount, umount and then xfs_repair failed, so I have to use -L. >> output which include "moving disconnected inodes to lost+found ...". >> Then I can remount the filesystem successfully and decided to remove >> those files in lost+found directory, but it printed the following >> message: >> root@1234dahua:/mnt/Pool_md1/ss1/lost+found# rm -rf * >> rm: cannot stat '710': Structure needs cleaning >> rm: cannot stat '728': Structure needs cleaning >> rm: cannot stat '729': Structure needs cleaning >> rm: cannot stat '730': Structure needs cleaning >> rm: cannot stat '731': Structure needs cleaning >> rm: cannot stat '732': Structure needs cleaning >> rm: cannot stat '733': Structure needs cleaning >> rm: cannot stat '734': Structure needs cleaning >> rm: cannot stat '735': Structure needs cleaning > > Look at dmesg to see what's gone wrong.... > >> Other directories and files seems normal to access, is it not allowed >> to delete files in lost+found directory after repair, then what should >> I do? > > This is indicative of a bug or IO error that caused xfs to shut down. > > You haven't mentioned which kernel version, architecture, or > version of xfsprogs you're using yet ... that may offer some clues. > > I'm guessing an older kernel and userspace on arm? :) > kernel version is 2.6.23, xfsprogs is 2.9.7, CPU is MPC8548, powerpc arch. I am at home now, Maybe I can provide some detailed information tomorrow. > -Eric > --=20 The simplest is not all best but the best is surely the simplest! From sandeen@sandeen.net Tue Dec 1 09:43:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1Fhi03145837 for ; Tue, 1 Dec 2009 09:43:44 -0600 X-ASG-Debug-ID: 1259682254-6219018d0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 921CF1DA0CC1 for ; Tue, 1 Dec 2009 07:44:14 -0800 (PST) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 945uT0QnkTz4HDpR for ; Tue, 01 Dec 2009 07:44:14 -0800 (PST) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0D5C09BED3A; Tue, 1 Dec 2009 09:44:14 -0600 (CST) Message-ID: <4B1539C6.90000@sandeen.net> Date: Tue, 01 Dec 2009 09:44:06 -0600 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812) MIME-Version: 1.0 To: hank peng CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: can xfs_repair guarantee a complete clean filesystem? Subject: Re: can xfs_repair guarantee a complete clean filesystem? References: <389deec70911301805j37df7397l1c3ddbbad7e91768@mail.gmail.com> <4B14936F.7040401@sandeen.net> <389deec70911302037v19764c2cr7686b353c5e933fa@mail.gmail.com> <4B14B077.5090500@sandeen.net> <389deec70911302234v2fc792ddt54bf88f5200500be@mail.gmail.com> <4B152BAD.1000004@sandeen.net> <389deec70912010732o72edd3c4q196088a1c01b801e@mail.gmail.com> In-Reply-To: <389deec70912010732o72edd3c4q196088a1c01b801e@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1259682254 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16025 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean hank peng wrote: > 2009/12/1 Eric Sandeen : >> hank peng wrote: >> >>> Today, I encountered a problem: >>> I use "xfs_repair -L “ on a damaged filesystem and a lot of messages >> why did you use -L, did it fail to mount & replay the log properly? >> > umount, mount, umount and then xfs_repair failed, so I have to use -L. Failed how? that's a bug. (or, -L did nothing anyway because the log wasn't dirty after the clean unmount) >>> output which include "moving disconnected inodes to lost+found ...". >>> Then I can remount the filesystem successfully and decided to remove >>> those files in lost+found directory, but it printed the following >>> message: >>> root@1234dahua:/mnt/Pool_md1/ss1/lost+found# rm -rf * >>> rm: cannot stat '710': Structure needs cleaning >>> rm: cannot stat '728': Structure needs cleaning >>> rm: cannot stat '729': Structure needs cleaning >>> rm: cannot stat '730': Structure needs cleaning >>> rm: cannot stat '731': Structure needs cleaning >>> rm: cannot stat '732': Structure needs cleaning >>> rm: cannot stat '733': Structure needs cleaning >>> rm: cannot stat '734': Structure needs cleaning >>> rm: cannot stat '735': Structure needs cleaning >> Look at dmesg to see what's gone wrong.... >> > >>> Other directories and files seems normal to access, is it not allowed >>> to delete files in lost+found directory after repair, then what should >>> I do? >> This is indicative of a bug or IO error that caused xfs to shut down. >> >> You haven't mentioned which kernel version, architecture, or >> version of xfsprogs you're using yet ... that may offer some clues. >> > >> I'm guessing an older kernel and userspace on arm? :) >> > kernel version is 2.6.23, xfsprogs is 2.9.7, CPU is MPC8548, powerpc arch. > I am at home now, Maybe I can provide some detailed information tomorrow. If there's any possibility to test newer kernel & userspace, that'd be great. Many bugs have been fixed since those versions. -Eric >> -Eric >> > > > From BATV+0e5d8d28e7b513271f2e+2291+infradead.org+hch@bombadil.srs.infradead.org Tue Dec 1 12:12:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1IBxsV155195 for ; Tue, 1 Dec 2009 12:12:01 -0600 X-ASG-Debug-ID: 1259691149-6e6e00b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bombadil.infradead.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 28D4F4C88F0 for ; Tue, 1 Dec 2009 10:12:30 -0800 (PST) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Zrx8TQGmh03U1Xxy for ; Tue, 01 Dec 2009 10:12:30 -0800 (PST) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1NFXDB-0004JJ-O3 for xfs@oss.sgi.com; Tue, 01 Dec 2009 18:12:29 +0000 Date: Tue, 1 Dec 2009 13:12:29 -0500 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH V2] xfs: check for not fully initialized inodes in xfs_ireclaim Subject: [PATCH V2] xfs: check for not fully initialized inodes in xfs_ireclaim Message-ID: <20091201181229.GA11982@infradead.org> References: <20091112190657.GA32110@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20091112190657.GA32110@infradead.org> User-Agent: Mutt/1.5.19 (2009-01-05) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1259691150 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Add an assert for inodes not added to the inode cache in xfs_ireclaim, to make sure we're not going to introduce something like the famous nfsd inode cache bug again. Signed-off-by: Christoph Hellwig Index: xfs/fs/xfs/xfs_iget.c =================================================================== --- xfs.orig/fs/xfs/xfs_iget.c 2009-11-26 19:10:47.206253628 +0100 +++ xfs/fs/xfs/xfs_iget.c 2009-12-01 19:09:43.310004091 +0100 @@ -514,17 +514,21 @@ xfs_ireclaim( { struct xfs_mount *mp = ip->i_mount; struct xfs_perag *pag; + xfs_agino_t agino = XFS_INO_TO_AGINO(mp, ip->i_ino); XFS_STATS_INC(xs_ig_reclaims); /* - * Remove the inode from the per-AG radix tree. It doesn't matter - * if it was never added to it because radix_tree_delete can deal - * with that case just fine. + * Remove the inode from the per-AG radix tree. + * + * Because radix_tree_delete won't complain even if the item was never + * added to the tree assert that it's been there before to catch + * problems with the inode life time early on. */ pag = xfs_get_perag(mp, ip->i_ino); write_lock(&pag->pag_ici_lock); - radix_tree_delete(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino)); + if (!radix_tree_delete(&pag->pag_ici_root, agino)) + ASSERT(0); write_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag); From jpiszcz@lucidpixels.com Tue Dec 1 12:38:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1IccOv156777 for ; Tue, 1 Dec 2009 12:38:38 -0600 X-ASG-Debug-ID: 1259692746-0dc903c50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AB7DA14ED7B8 for ; Tue, 1 Dec 2009 10:39:07 -0800 (PST) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id Xm1qG2ixCkkoyiQ3 for ; Tue, 01 Dec 2009 10:39:07 -0800 (PST) Received: by lucidpixels.com (Postfix, from userid 1001) id 944FF1A5D83; Tue, 1 Dec 2009 13:39:06 -0500 (EST) Date: Tue, 1 Dec 2009 13:39:06 -0500 (EST) From: Justin Piszcz To: Dave Chinner cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: 2.6.31.6: XFS DEBUG: Assertions cause kernel OOPS. Subject: Re: 2.6.31.6: XFS DEBUG: Assertions cause kernel OOPS. In-Reply-To: <20091130233818.GE30608@discord.disaster> Message-ID: References: <20091130233818.GE30608@discord.disaster> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1259692748 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, 1 Dec 2009, Dave Chinner wrote: > On Mon, Nov 30, 2009 at 08:22:03AM -0500, Justin Piszcz wrote: >> Hi, >> >> I wanted to compile my kernel with DEBUG for XFS and also kernel frame pointers >> to catch any issues. >> >> However, DEBUG for XFS does more harm than good? > > DEBUG is there for developers, not end users. Often the debug code > will assert fail or panic where the situation is not fatal but > indicative of some problem that should be looked into further. Dave, Recall that issue that I was having with asterisk installed? How should one get more information on a filesystem lockup if we cannot have debug enabled for the filesystem? Should there be a user-debug option which it will include more verbosity if/when the xfs kernel processes lockup? > >> I tried to install bonnie++: >> # apt-get install -y bonnie++ >> >> And then this happened: >> >> [ 1578.768558] Assertion failed: *nmap >= 1, file: fs/xfs/xfs_bmap.c, line: 4846 > .... >> [ 1578.769252] [] xfs_bmapi+0x66/0x1940 >> [ 1578.769252] [] ? __up_read+0x91/0xb0 >> [ 1578.769252] [] ? xfs_buf_free+0xc7/0x110 >> [ 1578.769252] [] ? xfs_buf_rele+0xf6/0x130 >> [ 1578.769252] [] ? xfs_trans_brelse+0x19a/0x2a0 >> [ 1578.769252] [] ? xfs_da_brelse+0x77/0x120 >> [ 1578.769252] [] ? filldir+0x9d/0xe0 >> [ 1578.769252] [] xfs_dir2_leaf_getdents+0x61a/0x780 >> [ 1578.769252] [] ? filldir+0x0/0xe0 >> [ 1578.769252] [] ? filldir+0x0/0xe0 >> [ 1578.769252] [] xfs_readdir+0x10c/0x110 >> [ 1578.769252] [] ? filldir+0x0/0xe0 >> [ 1578.769252] [] xfs_file_readdir+0x34/0x50 >> [ 1578.769252] [] vfs_readdir+0xa8/0xc0 >> [ 1578.769252] [] sys_getdents+0x83/0xe0 >> [ 1578.769252] [] system_call_fastpath+0x16/0x1b > > That is indicative of trying to map more blocks that we can fit > in the block map array during directory leaf readahead. That is > definitely not a problem for production systems, but definitely > indicates that the readahead loop termination has a bug in it > somewhere. > > Cheers, > > Dave. > -- > Dave Chinner > david@fromorbit.com > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Dec 1 13:17:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1JHdra159581 for ; Tue, 1 Dec 2009 13:17:39 -0600 X-ASG-Debug-ID: 1259695089-340200270000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ABC264C8DD9 for ; Tue, 1 Dec 2009 11:18:09 -0800 (PST) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id FIAHEQW8t48EBzX4 for ; Tue, 01 Dec 2009 11:18:09 -0800 (PST) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id DE2A5AAE3B8 for ; Tue, 1 Dec 2009 13:18:08 -0600 (CST) Message-ID: <4B156BE3.2080107@sandeen.net> Date: Tue, 01 Dec 2009 13:17:55 -0600 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] xfs_db: modify bad_features2 when modifying features2 Subject: [PATCH] xfs_db: modify bad_features2 when modifying features2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1259695089 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The "attr1" command in xfs_db, for example, only modifies the features2 field; when mounted, the kernel will find a mismatch between features2 and bad_features2, and attr2 gets turned back on. I think the simplest fix is to modify do_version to modify both fields, but not if there is an existing mismatch that should be investigated first. Signed-off-by: Eric Sandeen --- diff --git a/db/sb.c b/db/sb.c index 7c61b15..961a939 100644 --- a/db/sb.c +++ b/db/sb.c @@ -556,6 +556,12 @@ do_version(xfs_agnumber_t agno, __uint16_t version, __uint32_t features) if (!get_sb(agno, &tsb)) return 0; + if (xfs_sb_has_mismatched_features2(&tsb)) { + dbprintf(_("Superblock has mismatched features2 fields, " + "skipping modification\n")); + return 0; + } + if ((version & XFS_SB_VERSION_LOGV2BIT) && !xfs_sb_version_haslogv2(&tsb)) { tsb.sb_logsunit = 1; @@ -564,7 +570,8 @@ do_version(xfs_agnumber_t agno, __uint16_t version, __uint32_t features) tsb.sb_versionnum = version; tsb.sb_features2 = features; - fields |= XFS_SB_VERSIONNUM | XFS_SB_FEATURES2; + tsb.sb_bad_features2 = features; + fields |= XFS_SB_VERSIONNUM | XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2; libxfs_sb_to_disk(iocur_top->data, &tsb, fields); write_cur(); return 1; From sandeen@sandeen.net Tue Dec 1 13:30:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_31, J_CHICKENPOX_44,J_CHICKENPOX_46,J_CHICKENPOX_51,LOCAL_GNU_PATCH autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id nB1JUUVv160982 for ; Tue, 1 Dec 2009 13:30:30 -0600 X-ASG-Debug-ID: 1259695840-605301700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ECEB914EDDE5 for ; Tue, 1 Dec 2009 11:30:41 -0800 (PST) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 8ozYLmVyUwvJNeaN for ; Tue, 01 Dec 2009 11:30:41 -0800 (PST) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 30CB8A4E360 for ; Tue, 1 Dec 2009 13:30:40 -0600 (CST) Message-ID: <4B156ED2.9000209@sandeen.net> Date: Tue, 01 Dec 2009 13:30:26 -0600 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] xfstests: fix for lazy-sb Subject: [PATCH] xfstests: fix for lazy-sb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1259695845 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.16038 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Fix tests which would be affected by a change to lazy-sb by default. All tests now explicitly -specify- -l lazy-sb=1 where appropriate, so this can go in prior to a userspace change. Unfortunately many of the logprint outputs must just be taken on faith. Also, the irix flavors for e.g. 018.op.irix will need fixing up if anyone cares. This also needs the patch I just sent for xfs_db clearing attr2 in bad_features2 to complete w/o error. Signed-off-by: Eric Sandeen --- diff --git a/018.op.linux b/018.op.linux index 5c626da..5fb2cc6 100644 --- a/018.op.linux +++ b/018.op.linux @@ -6,7 +6,7 @@ Oper (OPNUM): tid: len: clientid: LOG flags: UNMOUNT Unmount filesystem Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -47,15 +47,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 15 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -96,15 +91,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 24 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -145,15 +135,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 33 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -194,15 +179,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 42 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -243,15 +223,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 51 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -292,15 +267,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 60 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -341,15 +311,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 69 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -390,15 +355,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 78 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -439,15 +399,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 87 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -488,15 +443,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 96 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -537,15 +487,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 105 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -586,15 +531,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 114 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -635,15 +575,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 123 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -684,15 +619,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 132 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -733,15 +663,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 141 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 5 +TRAN: type: CREATE tid: num_items: 4 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -782,15 +707,10 @@ flags 0x0 gen Oper (OPNUM): tid: len: clientid: TRANS flags: none LOCAL inode data SHORTFORM DIRECTORY size 150 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 9 +TRAN: type: CREATE tid: num_items: 8 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -850,15 +770,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -902,15 +817,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -954,15 +864,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1006,15 +911,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1058,15 +958,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1110,15 +1005,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1162,15 +1052,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1214,15 +1099,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1266,17 +1146,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -Left over region from split log item -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1320,15 +1193,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1372,15 +1240,10 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 2 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF DATA -Oper (OPNUM): tid: len: clientid: TRANS flags: none -BUF: #regs:R start blkno: () len: bmap size: 1 -Oper (OPNUM): tid: len: clientid: TRANS flags: none -SUPER BLOCK Buffer: -icount: ifree: fdblks: frext: Oper (OPNUM): tid: len: clientid: TRANS flags: COMMIT Oper (OPNUM): tid: len: clientid: TRANS flags: START Oper (OPNUM): tid: len: clientid: TRANS flags: none -TRAN: type: CREATE tid: num_items: 6 +TRAN: type: CREATE tid: num_items: 5 Oper (OPNUM): tid: len: clientid: TRANS flags: none BUF: #regs:R start blkno: () len: bmap size: 1 Oper (OPNUM): tid: len: clientid: TRANS flags: none @@ -1411,28 +1274,17 @@ Oper (OPNUM): tid: len: clientid: TRANS flags: none INODE: #regs:R ino: flags: 0x5 dsize: 16 blkno: len: boff: Oper (OPNUM): tid: len: clientid: TRANS flags: none -INODE CORE -magic 0x494e mode 040755 version format -nlink 2 uid 0 gid 0 -atime