From BATV+6e58e3a765969f5bf11a+2138+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 1 07:44:15 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 n61CiBFa010475 for ; Wed, 1 Jul 2009 07:44:14 -0500 X-ASG-Debug-ID: 1246452662-438102ba0000-w1Z2WR 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 C3D0E9BC356 for ; Wed, 1 Jul 2009 05:51:02 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id bWSDjlRXr16Zsf2X for ; Wed, 01 Jul 2009 05:51:02 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MLzB3-0003TC-E9; Wed, 01 Jul 2009 12:44:41 +0000 Date: Wed, 1 Jul 2009 08:44:41 -0400 From: Christoph Hellwig To: Patrick Schreurs Cc: linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode Message-ID: <20090701124441.GA12844@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4A7205.6010101@news-service.com> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246452663 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 Actually you might want to give this patch a try which fixes a race affecting the reclaim tag in iget: Index: xfs/fs/xfs/xfs_iget.c =================================================================== --- xfs.orig/fs/xfs/xfs_iget.c 2009-06-04 13:27:41.901946950 +0200 +++ xfs/fs/xfs/xfs_iget.c 2009-06-04 14:08:08.837816707 +0200 @@ -132,80 +132,89 @@ xfs_iget_cache_hit( int flags, int lock_flags) __releases(pag->pag_ici_lock) { + struct inode *inode = VFS_I(ip); struct xfs_mount *mp = ip->i_mount; - int error = EAGAIN; + int error; + + spin_lock(&ip->i_flags_lock); /* - * If INEW is set this inode is being set up - * If IRECLAIM is set this inode is being torn down - * Pause and try again. + * This inode is being torn down, pause and try again. */ - if (xfs_iflags_test(ip, (XFS_INEW|XFS_IRECLAIM))) { + if (ip->i_flags & XFS_IRECLAIM) { XFS_STATS_INC(xs_ig_frecycle); + error = EAGAIN; goto out_error; } - /* If IRECLAIMABLE is set, we've torn down the vfs inode part */ - if (xfs_iflags_test(ip, XFS_IRECLAIMABLE)) { + /* + * If we are racing with another cache hit that is currently recycling + * this inode out of the XFS_IRECLAIMABLE state, wait for the + * initialisation to complete before continuing. + */ + if (ip->i_flags & XFS_INEW) { + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); - /* - * If lookup is racing with unlink, then we should return an - * error immediately so we don't remove it from the reclaim - * list and potentially leak the inode. - */ - if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { - error = ENOENT; - goto out_error; - } + XFS_STATS_INC(xs_ig_frecycle); + wait_on_inode(inode); + return EAGAIN; + } + /* + * If lookup is racing with unlink, then we should return an + * error immediately so we don't remove it from the reclaim + * list and potentially leak the inode. + */ + if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { + error = ENOENT; + goto out_error; + } + + /* + * If IRECLAIMABLE is set, we've torn down the vfs inode part already. + * Need to carefully get it back into useable state. + */ + if (ip->i_flags & XFS_IRECLAIMABLE) { xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); /* - * We need to re-initialise the VFS inode as it has been - * 'freed' by the VFS. Do this here so we can deal with - * errors cleanly, then tag it so it can be set up correctly - * later. + * We need to set XFS_INEW atomically with clearing the + * reclaimable tag so that we do have an indicator of the + * inode still being initialized. */ - if (!inode_init_always(mp->m_super, VFS_I(ip))) { + ip->i_flags |= XFS_INEW; + __xfs_inode_clear_reclaim_tag(pag, ip); + + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); + + if (unlikely(!inode_init_always(mp->m_super, inode))) { + printk("node_init_always failed!!\n"); + + /* + * Re-initializing the inode failed, and we are in deep + * trouble. Try to re-add it to the reclaim list. + */ + read_lock(&pag->pag_ici_lock); + spin_lock(&ip->i_flags_lock); + + ip->i_flags &= ~XFS_INEW; + __xfs_inode_set_reclaim_tag(pag, ip); + error = ENOMEM; goto out_error; } - - /* - * We must set the XFS_INEW flag before clearing the - * XFS_IRECLAIMABLE flag so that if a racing lookup does - * not find the XFS_IRECLAIMABLE above but has the igrab() - * below succeed we can safely check XFS_INEW to detect - * that this inode is still being initialised. - */ - xfs_iflags_set(ip, XFS_INEW); - xfs_iflags_clear(ip, XFS_IRECLAIMABLE); - - /* clear the radix tree reclaim flag as well. */ - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - } else if (!igrab(VFS_I(ip))) { + } else { /* If the VFS inode is being torn down, pause and try again. */ - XFS_STATS_INC(xs_ig_frecycle); - goto out_error; - } else if (xfs_iflags_test(ip, XFS_INEW)) { - /* - * We are racing with another cache hit that is - * currently recycling this inode out of the XFS_IRECLAIMABLE - * state. Wait for the initialisation to complete before - * continuing. - */ - wait_on_inode(VFS_I(ip)); - } + if (!igrab(inode)) + goto out_error; - if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { - error = ENOENT; - iput(VFS_I(ip)); - goto out_error; + /* We've got a live one. */ + spin_unlock(&ip->i_flags_lock); + read_unlock(&pag->pag_ici_lock); } - /* We've got a live one. */ - read_unlock(&pag->pag_ici_lock); - if (lock_flags != 0) xfs_ilock(ip, lock_flags); @@ -215,6 +224,7 @@ xfs_iget_cache_hit( return 0; out_error: + spin_unlock(&ip->i_flags_lock); read_unlock(&pag->pag_ici_lock); return error; } Index: xfs/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:40:09.135939715 +0200 +++ xfs/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:59:17.978816696 +0200 @@ -607,6 +607,17 @@ xfs_reclaim_inode( return 0; } +void +__xfs_inode_set_reclaim_tag( + struct xfs_perag *pag, + struct xfs_inode *ip) +{ + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); + + radix_tree_tag_set(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); + __xfs_iflags_set(ip, XFS_IRECLAIMABLE); +} + /* * We set the inode flag atomically with the radix tree tag. * Once we get tag lookups on the radix tree, this inode flag @@ -621,9 +632,7 @@ xfs_inode_set_reclaim_tag( read_lock(&pag->pag_ici_lock); spin_lock(&ip->i_flags_lock); - radix_tree_tag_set(&pag->pag_ici_root, - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); - __xfs_iflags_set(ip, XFS_IRECLAIMABLE); + __xfs_inode_set_reclaim_tag(pag, ip); spin_unlock(&ip->i_flags_lock); read_unlock(&pag->pag_ici_lock); xfs_put_perag(mp, pag); @@ -631,30 +640,15 @@ xfs_inode_set_reclaim_tag( void __xfs_inode_clear_reclaim_tag( - xfs_mount_t *mp, - xfs_perag_t *pag, - xfs_inode_t *ip) -{ - radix_tree_tag_clear(&pag->pag_ici_root, - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); -} - -void -xfs_inode_clear_reclaim_tag( - xfs_inode_t *ip) + struct xfs_perag *pag, + struct xfs_inode *ip) { - xfs_mount_t *mp = ip->i_mount; - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); - read_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - spin_unlock(&ip->i_flags_lock); - read_unlock(&pag->pag_ici_lock); - xfs_put_perag(mp, pag); + ip->i_flags &= ~XFS_IRECLAIMABLE; + radix_tree_tag_clear(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); } - STATIC void xfs_reclaim_inodes_ag( xfs_mount_t *mp, Index: xfs/fs/xfs/linux-2.6/xfs_sync.h =================================================================== --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:53:32.994814723 +0200 +++ xfs/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:58:54.746942001 +0200 @@ -51,7 +51,6 @@ int xfs_reclaim_inode(struct xfs_inode * int xfs_reclaim_inodes(struct xfs_mount *mp, int noblock, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); -void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, - struct xfs_inode *ip); +void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); +void __xfs_inode_clear_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); #endif From BATV+6e58e3a765969f5bf11a+2138+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 1 09:55:51 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 n61Etn7E017399 for ; Wed, 1 Jul 2009 09:55:51 -0500 X-ASG-Debug-ID: 1246460180-488400d70000-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 602A13375D9 for ; Wed, 1 Jul 2009 07:56:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ihzfaLRHrJJm2BM9 for ; Wed, 01 Jul 2009 07:56:21 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MM1ES-0003ZQ-Ma; Wed, 01 Jul 2009 14:56:20 +0000 Date: Wed, 1 Jul 2009 10:56:20 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com, linux-kernel@vger.kernel.org X-ASG-Orig-Subj: XFS status update for June 2009 Subject: XFS status update for June 2009 Message-ID: <20090701145620.GA13061@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246460181 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 On June 9th we finally saw the release of Linux 2.6.30. For XFS this release mostly contains the improved ENOSPC handling, but also various smaller bugfixes and lots of cleanups. The code size of XFS decreased again by 500 lines of code in this release. The Linux 2.6.31 merge opened in the mid of the month and some big XFS changes have been pushed: A removal of the quotaops infrastructure which simplifies the quota implementation, the switch from XFS's own Posix ACL implementation to the generic one shared by various other filesystems which also supports in-memory caching of ACLs and another incremental refactoring of the sync code. A patch to better track dirty inodes and work around issues in the way the VFS updates the access time stamp on inodes has been reposted and discussed. Another patch to converting the existing XFS tracing infrastructure to use the ftrace even tracer has been posted. On the userspace side there have been a few updates to xfsprogs, including some repair fixes and a new fallocate command for xfs_io. There were major updates for xfstests: The existing aio-dio-regress testsuite has been merged into xfstests, and various changes went into the tree to make xfstests better suitable for use with other filesystems. The attr and acl projects which have been traditionally been hosted as part of the XFS userspace utilities have now been split into a separate project maintained by Andreas Gruenbacher, who has been doing most of the work on it, and moved to the Savannah hosting platform. From felixb@sgi.com Wed Jul 1 11:09:32 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 relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n61G9Wtp021226 for ; Wed, 1 Jul 2009 11:09:32 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 68080AC011 for ; Wed, 1 Jul 2009 09:10:00 -0700 (PDT) Received: from eagdhcp-232-157.americas.sgi.com (eagdhcp-232-157.americas.sgi.com [128.162.232.157]) by estes.americas.sgi.com (Postfix) with ESMTP id F2D3B7000103; Wed, 1 Jul 2009 11:09:59 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: <708E7D36-A57F-4ABD-935C-6AF6524E364B@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A48D218.5050208@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Wed, 1 Jul 2009 11:10:01 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > Christoph Hellwig wrote: >> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> A lot more functions could be made static, but they need >>> forward declarations; this does some easy ones, and also >>> found a few unused functions in the process. >> >> Looks good to me. >> > > Felix, do you plan to merge this one? Yep, will merge and push it to oss shortly. Felix From a.beregalov@gmail.com Wed Jul 1 11:20:50 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 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 n61GKoEA021715 for ; Wed, 1 Jul 2009 11:20:50 -0500 X-ASG-Debug-ID: 1246465281-48c702b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4A779337BAD for ; Wed, 1 Jul 2009 09:21:21 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id NSU20wdj3pVBoWo7 for ; Wed, 01 Jul 2009 09:21:21 -0700 (PDT) Received: by bwz10 with SMTP id 10so888416bwz.20 for ; Wed, 01 Jul 2009 09:21:20 -0700 (PDT) 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=38TWLhQghkcnwHj4DIpwACcmzjEtABa/+BRxdJLRDFY=; b=a+loPMJqpoqIHeE3s1CS+6DPGSiHhOqfXfVIbGYimWKL3GUnjjJMXRmuDhFdfmsRFs 53DzZYn/tmAUpS4K0opjL8oyrB0SR6eVO7nQQx9IHA3S7J9iPJt2iQuXjHRc/NuTs8cw L+bYVVDK0dDZI41KU00ixvkYbOpyr8klHIO+Y= 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=tpA5JgY1S/Ofxft9QWid5YX8sO0jZqsopjjnKxwRjOEVREJFbIb5THYEMz6myqfXUO AgR57PknffM6CDanjufA1KpzHnhW9RloSWSaWaCrL0mzxek2EqfkeXVt6reKkoL/kuNf 71V1W34Xun3Mn8TzU65DDtiMtdKjPI5RdBcjg= MIME-Version: 1.0 Received: by 10.204.120.193 with SMTP id e1mr9735909bkr.147.1246465280270; Wed, 01 Jul 2009 09:21:20 -0700 (PDT) In-Reply-To: References: <20090604092330.GT16929@discord.disaster> Date: Wed, 1 Jul 2009 20:21:20 +0400 Message-ID: X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! From: Alexander Beregalov To: Dave Chinner Cc: Kernel Testers List , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1246465282 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.2273 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 2009/6/5 Alexander Beregalov : > 2009/6/4 Dave Chinner : >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov wrote: >>> Hi >>> >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 >> ..... >>> Call Trace: >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 >>> =C2=A0[] xfs_readdir+0x12c/0x140 >>> =C2=A0[] xfs_file_readdir+0x47/0x70 >>> =C2=A0[] vfs_readdir+0xd0/0xf0 >>> =C2=A0[] sys_getdents+0x96/0x110 >>> =C2=A0[] system_call_fastpath+0x16/0x1b >> >> I'd say this indicates a corrupted directory. =C2=A0Can you run >> 'xfs_repair -n' over the filesystem and see if it finds a bad >> directory? Still cannot fix the filesystem. After repairing all corruptions from LiveCD it still fails on the same workload. Do you need metadump or anything else? From sandeen@sandeen.net Wed Jul 1 14:53:19 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_33 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 n61JrJEh031156 for ; Wed, 1 Jul 2009 14:53:19 -0500 X-ASG-Debug-ID: 1246478411-473701390000-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 297A31499232 for ; Wed, 1 Jul 2009 13:00:12 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0ysHC6c0IfLiu85n for ; Wed, 01 Jul 2009 13:00:12 -0700 (PDT) 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 A0FD5AABFCC; Wed, 1 Jul 2009 14:53:48 -0500 (CDT) Message-ID: <4A4BBECC.8000308@sandeen.net> Date: Wed, 01 Jul 2009 14:53:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> In-Reply-To: <4A4A7D44.7040009@ssec.wisc.edu> 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: 1246478413 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: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA085, BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2286 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC1_TG070 Custom Rule TG070 0.10 BSF_SC0_SA085 Custom Rule SA085 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Jesse Stroik wrote: > Eric, > > Eric Sandeen wrote: >> Jesse Stroik wrote: >>> I have a server with a ~20TB xfs file system on Linux >>> (2.6.18-92.1.22.el5) and am running xfsprogs-2.9.4-4.el5. We had a few >>> corrupted files which I believe were due to a SCSI issue after a recent >>> power outage. Due to the corruption, I ran xfs_check and would like to >>> run xfs_repair on the system. >> It'd really be great to test more recent xfsprogs first, that one is >> about 2 years old. >> >> You can probably grab any recent fedora src.rpm and rebuild it, and >> later go back to the centos version if you wish. > > > I fetched the current version from SVN using these directions: > http://xfs.org/index.php/Getting_the_latest_source_code > > I get identical results. > > -------- > ... > reset bad sb for ag 31 > reset bad agf for ag 31 > reset bad agi for ag 31 > Segmentation fault Ok, from a metadump image Jesse provided (thanks!) it's dying in here: bno = be32_to_cpu(agfl->agfl_bno[i]); printf("agfl at %p i is %d agfl_bno[i] %u bno is %u\n", agfl, i, agfl->agfl_bno[i], bno); if (verify_agbno(mp, be32_to_cpu(agf->agf_seqno), bno)) set_agbno_state(mp, be32_to_cpu(agf->agf_seqno), bno, XR_E_FREE); agfl_bno looks corrupt, and bno is coming out to be huge. set_agbno_state() does: *(ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM) = .... where ag_blockno is that bno above; this wanders us off into bad memory and boom. I'll see what we can do to fix it up. -Eric From sandeen@sandeen.net Wed Jul 1 15:32:33 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 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 n61KWWuB033108 for ; Wed, 1 Jul 2009 15:32:33 -0500 X-ASG-Debug-ID: 1246480766-04d300240000-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 E04A51499037 for ; Wed, 1 Jul 2009 13:39:26 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id SRuW2cBUhfo8Uefn for ; Wed, 01 Jul 2009 13:39:26 -0700 (PDT) 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 DE1F0AABFCC; Wed, 1 Jul 2009 15:33:03 -0500 (CDT) Message-ID: <4A4BC7FF.6050004@sandeen.net> Date: Wed, 01 Jul 2009 15:33:03 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: [PATCH] xfs_repair: fix verify_ag_bno() overflow Subject: [PATCH] xfs_repair: fix verify_ag_bno() overflow 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: 1246480766 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.2290 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 last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Also make the first test simpler; agbno > sb_agblocks is -always- bad, regardless of the agno. This may even speed it up a tiny bit. Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..f50f1ad 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -315,11 +315,14 @@ verify_ag_bno(xfs_sb_t *sbp, xfs_agnumber_t agno, xfs_agblock_t agbno) { - if (agno < (sbp->sb_agcount - 1)) - return (agbno >= sbp->sb_agblocks); - if (agno == (sbp->sb_agcount - 1)) + /* in all cases bno >= agblocks is bad */ + if (agbno >= sbp->sb_agblocks) + return 1; + /* last ag may be smaller */ + if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } From sandeen@sandeen.net Wed Jul 1 15:33:33 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 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 n61KXWLd033159 for ; Wed, 1 Jul 2009 15:33:33 -0500 X-ASG-Debug-ID: 1246480444-5db303cb0000-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 26CE1338797 for ; Wed, 1 Jul 2009 13:34:04 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 9W4JHY6BGGk4NUsY for ; Wed, 01 Jul 2009 13:34:04 -0700 (PDT) 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 7BB91AABFCC; Wed, 1 Jul 2009 15:34:03 -0500 (CDT) Message-ID: <4A4BC83A.3080401@sandeen.net> Date: Wed, 01 Jul 2009 15:34:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> In-Reply-To: <4A4BBECC.8000308@sandeen.net> 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: 1246480445 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: -1.02 X-Barracuda-Spam-Status: No, SCORE=-1.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2289 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC1_TG070 Custom Rule TG070 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Ok, from a metadump image Jesse provided (thanks!) it's dying in here: > > bno = be32_to_cpu(agfl->agfl_bno[i]); > printf("agfl at %p i is %d agfl_bno[i] %u bno is %u\n", > agfl, i, agfl->agfl_bno[i], bno); > if (verify_agbno(mp, be32_to_cpu(agf->agf_seqno), bno)) > set_agbno_state(mp, be32_to_cpu(agf->agf_seqno), > bno, XR_E_FREE); > > agfl_bno looks corrupt, and bno is coming out to be huge. > > set_agbno_state() does: > > *(ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM) = .... > > where ag_blockno is that bno above; this wanders us off into bad memory > and boom. I'll see what we can do to fix it up. Ok patch sent, but now I hit: junking entry "soh " in directory inode 128 entry ".nsr" in shortform directory 128 references invalid inode 210397 junking entry ".nsr" in directory inode 128 bogus .. inode number (128) in directory inode 128, clearing inode number xfs_repair: dir2.c:2123: process_dir2: Assertion `(ino != mp->m_sb.sb_rootino && ino != *parent) || (ino == mp->m_sb.sb_rootino && (ino == *parent || need_root_dotdot == 1))' failed. Aborted that's one crunchy filesystem you've got there; what happened to it? -Eric From jstroik@ssec.wisc.edu Wed Jul 1 15:50:46 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 n61Kojjq036962 for ; Wed, 1 Jul 2009 15:50:46 -0500 X-ASG-Debug-ID: 1246481859-04c7006d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ssec.wisc.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B234C14993E4 for ; Wed, 1 Jul 2009 13:57:39 -0700 (PDT) Received: from ssec.wisc.edu (mahogany.ssec.wisc.edu [128.104.110.2]) by cuda.sgi.com with ESMTP id JXibA1mNMTg6sR72 for ; Wed, 01 Jul 2009 13:57:39 -0700 (PDT) Received: from arthur.ssec.wisc.edu (account jstroik [128.104.111.93] verified) by ssec.wisc.edu (CommuniGate Pro SMTP 5.2.13) with ESMTPSA id 30433411; Wed, 01 Jul 2009 15:51:16 -0500 Message-ID: <4A4BCC44.7050302@ssec.wisc.edu> Date: Wed, 01 Jul 2009 15:51:16 -0500 From: Jesse Stroik User-Agent: Thunderbird 2.0.0.17 (X11/20080915) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> <4A4BC83A.3080401@sandeen.net> In-Reply-To: <4A4BC83A.3080401@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mahogany.ssec.wisc.edu[128.104.110.2] X-Barracuda-Start-Time: 1246481859 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0203 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.2290 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 Eric, Thanks for addressing the issue with xfs_repair. > that's one crunchy filesystem you've got there; what happened to it? It's not entirely clear -- the JBOD and SAS controller seem to have gotten into inconsistent states and I was observing a few SCSI errors for those particular LUNs. While the system was exhibiting the SCSI errors, the user of this file system (and a few others like it on the host) noticed file corruption when reading/writing certain files, then spontaneous corruption after making copies of the files. I'll take a look at the new xfs_check and see what happens. Best, Jesse From sandeen@sandeen.net Wed Jul 1 15:51:54 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 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 n61Kpr8c037292 for ; Wed, 1 Jul 2009 15:51:54 -0500 X-ASG-Debug-ID: 1246481545-67a4031f0000-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 31084338DC2 for ; Wed, 1 Jul 2009 13:52:25 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id nCRjoqoXLVw6mXLi for ; Wed, 01 Jul 2009 13:52:25 -0700 (PDT) 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 89370AABFCC; Wed, 1 Jul 2009 15:52:25 -0500 (CDT) Message-ID: <4A4BCC89.10202@sandeen.net> Date: Wed, 01 Jul 2009 15:52:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Jesse Stroik CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Seg fault during xfs repair (segmentation fault / segv) Subject: Re: Seg fault during xfs repair (segmentation fault / segv) References: <4A4A596D.8030800@ssec.wisc.edu> <4A4A5C4E.7030605@sandeen.net> <4A4A7D44.7040009@ssec.wisc.edu> <4A4BBECC.8000308@sandeen.net> <4A4BC83A.3080401@sandeen.net> <4A4BCC44.7050302@ssec.wisc.edu> In-Reply-To: <4A4BCC44.7050302@ssec.wisc.edu> 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: 1246481546 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.2291 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 Jesse Stroik wrote: > Eric, > > Thanks for addressing the issue with xfs_repair. > > >> that's one crunchy filesystem you've got there; what happened to it? > > > It's not entirely clear -- the JBOD and SAS controller seem to have > gotten into inconsistent states and I was observing a few SCSI errors > for those particular LUNs. While the system was exhibiting the SCSI > errors, the user of this file system (and a few others like it on the > host) noticed file corruption when reading/writing certain files, then > spontaneous corruption after making copies of the files. > > I'll take a look at the new xfs_check and see what happens. > > Best, > Jesse > Turns out that it runs to completion, but another run still finds corruption. And a debug build trips asserts, so I guess there are still issues. -Eric From sandeen@sandeen.net Wed Jul 1 17:15:03 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 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 n61MF2WW044257 for ; Wed, 1 Jul 2009 17:15:02 -0500 X-ASG-Debug-ID: 1246486533-7bcb00d70000-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 8916633921D for ; Wed, 1 Jul 2009 15:15:33 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 2jZDDaF32ZghLUeC for ; Wed, 01 Jul 2009 15:15:33 -0700 (PDT) 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 93B72AABFCC; Wed, 1 Jul 2009 17:15:33 -0500 (CDT) Message-ID: <4A4BE005.3000102@sandeen.net> Date: Wed, 01 Jul 2009 17:15:33 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: Re: [PATCH] xfs_repair: fix verify_ag_bno() overflow Subject: Re: [PATCH] xfs_repair: fix verify_ag_bno() overflow References: <4A4BC7FF.6050004@sandeen.net> In-Reply-To: <4A4BC7FF.6050004@sandeen.net> 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: 1246486534 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.2295 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 Argh self-nak on that one, stupid thinko; it always returns 1 for a non-last AG :/ Just add the cast and don't get fancy! V2 below: ------- The last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..84e1d05 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, return (agbno >= sbp->sb_agblocks); if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } From lmcilroy@redhat.com Wed Jul 1 20:52:26 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 n621qPsu054394 for ; Wed, 1 Jul 2009 20:52:26 -0500 X-ASG-Debug-ID: 1246499959-0de801a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 241089BDA0A for ; Wed, 1 Jul 2009 18:59:19 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id usLwxTjb8G11Ft8E for ; Wed, 01 Jul 2009 18:59:19 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n621qbs6013852; Wed, 1 Jul 2009 21:52:37 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n621qaqN002183; Wed, 1 Jul 2009 21:52:36 -0400 Date: Wed, 1 Jul 2009 21:52:36 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Alexander Beregalov Cc: Kernel Testers List , xfs@oss.sgi.com, Dave Chinner Message-ID: <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <824092896.830901246499419777.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1246499961 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.2310 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 Alexander, Are you running with this fix? http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-2.6.29.y.git;a=3Dc= ommitdiff;h=3Dd415867e0abc35e3b2f0d4196e98c339d6fe29a2 I've seen this assertion before and the above patch fixed it for me. Hmmm, looks like you're running a recent kernel so you should have this fix - maybe the fix wasn't quite right. Lachlan ----- "Alexander Beregalov" wrote: > 2009/6/5 Alexander Beregalov : > > 2009/6/4 Dave Chinner : > >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov > wrote: > >>> Hi > >>> > >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 > >> ..... > >>> Call Trace: > >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 > >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 > >>> =C2=A0[] xfs_readdir+0x12c/0x140 > >>> =C2=A0[] xfs_file_readdir+0x47/0x70 > >>> =C2=A0[] vfs_readdir+0xd0/0xf0 > >>> =C2=A0[] sys_getdents+0x96/0x110 > >>> =C2=A0[] system_call_fastpath+0x16/0x1b > >> > >> I'd say this indicates a corrupted directory. =C2=A0Can you run > >> 'xfs_repair -n' over the filesystem and see if it finds a bad > >> directory? >=20 > Still cannot fix the filesystem. After repairing all corruptions from > LiveCD it still fails on the same workload. >=20 > Do you need metadump or anything else? >=20 > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Wed Jul 1 23:13:29 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 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 n624DTca061473 for ; Wed, 1 Jul 2009 23:13:29 -0500 X-ASG-Debug-ID: 1246508040-038501f90000-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 961F113359CC for ; Wed, 1 Jul 2009 21:14:00 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CAgWbMoYOrnE699j for ; Wed, 01 Jul 2009 21:14:00 -0700 (PDT) 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 35F6EAABFCC; Wed, 1 Jul 2009 23:14:00 -0500 (CDT) Message-ID: <4A4C3407.60501@sandeen.net> Date: Wed, 01 Jul 2009 23:13:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss , Jesse Stroik X-ASG-Orig-Subj: [PATCH V3] xfs_repair: fix agcount*agblocks overflows Subject: [PATCH V3] xfs_repair: fix agcount*agblocks overflows References: <4A4BC7FF.6050004@sandeen.net> <4A4BE005.3000102@sandeen.net> In-Reply-To: <4A4BE005.3000102@sandeen.net> 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: 1246508041 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.2315 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 (V3: found another spot with this problem) The last test in verify_ag_bno() may overflow: return (agbno >= (sbp->sb_dblocks - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); because sb_agcount & sb_agblocks are 32-bit integers; this may then miss corrupt agbnos for the last ag, which can in turn lead to out of bounds memory accesses later, for example when the block nr is used to offset in set_agbno_state(): addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; Similar problems in mk_incore_fstree Reported-by: Jesse Stroik Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index fdf52db..84e1d05 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, return (agbno >= sbp->sb_agblocks); if (agno == (sbp->sb_agcount - 1)) return (agbno >= (sbp->sb_dblocks - - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * + sbp->sb_agblocks))); return 1; } diff --git a/repair/phase5.c b/repair/phase5.c index 2c243b6..77c7363 100644 --- a/repair/phase5.c +++ b/repair/phase5.c @@ -113,7 +113,8 @@ mk_incore_fstree(xfs_mount_t *mp, xfs_agnumber_t agno) ag_end = mp->m_sb.sb_agblocks; else ag_end = mp->m_sb.sb_dblocks - - mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1); + (xfs_drfsbno_t)mp->m_sb.sb_agblocks * + (mp->m_sb.sb_agcount - 1); /* * ok, now find the number of extents, keep track of the From felixb@sgi.com Wed Jul 1 23:50:42 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 relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n624og8m063613 for ; Wed, 1 Jul 2009 23:50:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 137D88F80AD for ; Wed, 1 Jul 2009 21:51:12 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id A8A387000103; Wed, 1 Jul 2009 23:51:11 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A48D218.5050208@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Wed, 1 Jul 2009 23:51:10 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > Christoph Hellwig wrote: >> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> A lot more functions could be made static, but they need >>> forward declarations; this does some easy ones, and also >>> found a few unused functions in the process. >> >> Looks good to me. >> > > Felix, do you plan to merge this one? Eric, this patch doesn't apply cleanly now: Applying xfs: add more statics & drop some unused functions error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply Patch failed at 0002. Can you rebase and repost it? Thanks, Felix From sandeen@sandeen.net Thu Jul 2 00:09:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_64,J_CHICKENPOX_65 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 n62594W1066895 for ; Thu, 2 Jul 2009 00:09:04 -0500 X-ASG-Debug-ID: 1246511758-5831020e0000-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 252E010951A2 for ; Wed, 1 Jul 2009 22:15:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0Zpy2W8SWtjdVF6F for ; Wed, 01 Jul 2009 22:15:58 -0700 (PDT) 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 8CBFDAABFCC; Thu, 2 Jul 2009 00:09:33 -0500 (CDT) Message-ID: <4A4C410D.5040205@sandeen.net> Date: Thu, 02 Jul 2009 00:09:33 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Felix Blyakher CC: Christoph Hellwig , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] add more statics & drop some unused functions Subject: Re: [PATCH] add more statics & drop some unused functions References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> In-Reply-To: <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> 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: 1246511760 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: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2319 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: > On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: > > >> Christoph Hellwig wrote: >> >>> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>> >>>> A lot more functions could be made static, but they need >>>> forward declarations; this does some easy ones, and also >>>> found a few unused functions in the process. >>>> >>> Looks good to me. >>> >>> >> Felix, do you plan to merge this one? >> > > Eric, this patch doesn't apply cleanly now: > > Applying xfs: add more statics & drop some unused functions > error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 > error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply > error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 > error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply > Patch failed at 0002. > > Can you rebase and repost it? > > Thanks, > Felix > > This one applies to linus' tree ok.... -Eric diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index a220d36..c709ed6 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -687,7 +687,7 @@ xfs_barrier_test( return error; } -void +STATIC void xfs_mountfs_check_barriers(xfs_mount_t *mp) { int error; diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c index b619d6b..fbf3e02 100644 --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c @@ -740,21 +740,6 @@ __xfs_inode_clear_reclaim_tag( XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); } -void -xfs_inode_clear_reclaim_tag( - xfs_inode_t *ip) -{ - xfs_mount_t *mp = ip->i_mount; - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); - - read_lock(&pag->pag_ici_lock); - spin_lock(&ip->i_flags_lock); - __xfs_inode_clear_reclaim_tag(mp, pag, ip); - spin_unlock(&ip->i_flags_lock); - read_unlock(&pag->pag_ici_lock); - xfs_put_perag(mp, pag); -} - STATIC int xfs_reclaim_inode_now( struct xfs_inode *ip, diff --git a/fs/xfs/linux-2.6/xfs_sync.h b/fs/xfs/linux-2.6/xfs_sync.h index 2a10301..23e7e7e 100644 --- a/fs/xfs/linux-2.6/xfs_sync.h +++ b/fs/xfs/linux-2.6/xfs_sync.h @@ -48,7 +48,6 @@ int xfs_reclaim_inode(struct xfs_inode *ip, int locked, int sync_mode); int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, struct xfs_inode *ip); diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h index f24b50b..af3cfeb 100644 --- a/fs/xfs/xfs_ag.h +++ b/fs/xfs/xfs_ag.h @@ -91,9 +91,6 @@ typedef struct xfs_agf { #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) #define XFS_BUF_TO_AGF(bp) ((xfs_agf_t *)XFS_BUF_PTR(bp)) -extern int xfs_read_agf(struct xfs_mount *mp, struct xfs_trans *tp, - xfs_agnumber_t agno, int flags, struct xfs_buf **bpp); - /* * Size of the unlinked inode hash table in the agi. */ diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c index 2cf944e..6316004 100644 --- a/fs/xfs/xfs_alloc.c +++ b/fs/xfs/xfs_alloc.c @@ -2248,7 +2248,7 @@ xfs_alloc_put_freelist( /* * Read in the allocation group header (free/alloc section). */ -int /* error */ +STATIC int /* error */ xfs_read_agf( struct xfs_mount *mp, /* mount point structure */ struct xfs_trans *tp, /* transaction pointer */ diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 7928b99..9759724 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c @@ -3713,7 +3713,7 @@ done: * entry (null if none). Else, *lastxp will be set to the index * of the found entry; *gotp will contain the entry. */ -xfs_bmbt_rec_host_t * /* pointer to found extent entry */ +STATIC xfs_bmbt_rec_host_t * /* pointer to found extent entry */ xfs_bmap_search_multi_extents( xfs_ifork_t *ifp, /* inode fork pointer */ xfs_fileoff_t bno, /* block number searched for */ diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h index 1b8ff92..56f62d2 100644 --- a/fs/xfs/xfs_bmap.h +++ b/fs/xfs/xfs_bmap.h @@ -392,17 +392,6 @@ xfs_bmap_count_blocks( int whichfork, int *count); -/* - * Search the extent records for the entry containing block bno. - * If bno lies in a hole, point to the next entry. If bno lies - * past eof, *eofp will be set, and *prevp will contain the last - * entry (null if none). Else, *lastxp will be set to the index - * of the found entry; *gotp will contain the entry. - */ -xfs_bmbt_rec_host_t * -xfs_bmap_search_multi_extents(struct xfs_ifork *, xfs_fileoff_t, int *, - xfs_extnum_t *, xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); - #endif /* __KERNEL__ */ #endif /* __XFS_BMAP_H__ */ diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c index 5c1ade0..eb7b702 100644 --- a/fs/xfs/xfs_bmap_btree.c +++ b/fs/xfs/xfs_bmap_btree.c @@ -202,16 +202,6 @@ xfs_bmbt_get_state( ext_flag); } -/* Endian flipping versions of the bmbt extraction functions */ -void -xfs_bmbt_disk_get_all( - xfs_bmbt_rec_t *r, - xfs_bmbt_irec_t *s) -{ - __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), - get_unaligned_be64(&r->l1), s); -} - /* * Extract the blockcount field from an on disk bmap extent record. */ @@ -816,6 +806,16 @@ xfs_bmbt_trace_key( *l1 = 0; } +/* Endian flipping versions of the bmbt extraction functions */ +STATIC void +xfs_bmbt_disk_get_all( + xfs_bmbt_rec_t *r, + xfs_bmbt_irec_t *s) +{ + __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), + get_unaligned_be64(&r->l1), s); +} + STATIC void xfs_bmbt_trace_record( struct xfs_btree_cur *cur, diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h index 0e8df00..5549d49 100644 --- a/fs/xfs/xfs_bmap_btree.h +++ b/fs/xfs/xfs_bmap_btree.h @@ -220,7 +220,6 @@ extern xfs_fsblock_t xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r); extern xfs_fileoff_t xfs_bmbt_get_startoff(xfs_bmbt_rec_host_t *r); extern xfs_exntst_t xfs_bmbt_get_state(xfs_bmbt_rec_host_t *r); -extern void xfs_bmbt_disk_get_all(xfs_bmbt_rec_t *r, xfs_bmbt_irec_t *s); extern xfs_filblks_t xfs_bmbt_disk_get_blockcount(xfs_bmbt_rec_t *r); extern xfs_fileoff_t xfs_bmbt_disk_get_startoff(xfs_bmbt_rec_t *r); diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c index e9df995..cde5a26 100644 --- a/fs/xfs/xfs_btree.c +++ b/fs/xfs/xfs_btree.c @@ -646,46 +646,6 @@ xfs_btree_read_bufl( } /* - * Get a buffer for the block, return it read in. - * Short-form addressing. - */ -int /* error */ -xfs_btree_read_bufs( - xfs_mount_t *mp, /* file system mount point */ - xfs_trans_t *tp, /* transaction pointer */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* allocation group block number */ - uint lock, /* lock flags for read_buf */ - xfs_buf_t **bpp, /* buffer for agno/agbno */ - int refval) /* ref count value for buffer */ -{ - xfs_buf_t *bp; /* return value */ - xfs_daddr_t d; /* real disk block address */ - int error; - - ASSERT(agno != NULLAGNUMBER); - ASSERT(agbno != NULLAGBLOCK); - d = XFS_AGB_TO_DADDR(mp, agno, agbno); - if ((error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, d, - mp->m_bsize, lock, &bp))) { - return error; - } - ASSERT(!bp || !XFS_BUF_GETERROR(bp)); - if (bp != NULL) { - switch (refval) { - case XFS_ALLOC_BTREE_REF: - XFS_BUF_SET_VTYPE_REF(bp, B_FS_MAP, refval); - break; - case XFS_INO_BTREE_REF: - XFS_BUF_SET_VTYPE_REF(bp, B_FS_INOMAP, refval); - break; - } - } - *bpp = bp; - return 0; -} - -/* * Read-ahead the block, don't wait for it, don't return a buffer. * Long-form addressing. */ @@ -2951,7 +2911,7 @@ error0: * inode we have to copy the single block it was pointing to into the * inode. */ -int +STATIC int xfs_btree_kill_iroot( struct xfs_btree_cur *cur) { diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h index 4f852b7..7fa0706 100644 --- a/fs/xfs/xfs_btree.h +++ b/fs/xfs/xfs_btree.h @@ -379,20 +379,6 @@ xfs_btree_read_bufl( int refval);/* ref count value for buffer */ /* - * Get a buffer for the block, return it read in. - * Short-form addressing. - */ -int /* error */ -xfs_btree_read_bufs( - struct xfs_mount *mp, /* file system mount point */ - struct xfs_trans *tp, /* transaction pointer */ - xfs_agnumber_t agno, /* allocation group number */ - xfs_agblock_t agbno, /* allocation group block number */ - uint lock, /* lock flags for read_buf */ - struct xfs_buf **bpp, /* buffer for agno/agbno */ - int refval);/* ref count value for buffer */ - -/* * Read-ahead the block, don't wait for it, don't return a buffer. * Long-form addressing. */ @@ -432,7 +418,6 @@ int xfs_btree_decrement(struct xfs_btree_cur *, int, int *); int xfs_btree_lookup(struct xfs_btree_cur *, xfs_lookup_t, int *); int xfs_btree_update(struct xfs_btree_cur *, union xfs_btree_rec *); int xfs_btree_new_iroot(struct xfs_btree_cur *, int *, int *); -int xfs_btree_kill_iroot(struct xfs_btree_cur *); int xfs_btree_insert(struct xfs_btree_cur *, int *); int xfs_btree_delete(struct xfs_btree_cur *, int *); int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec **, int *); diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 1f22d65..2dcb3d7 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -641,7 +641,7 @@ xfs_iformat_btree( return 0; } -void +STATIC void xfs_dinode_from_disk( xfs_icdinode_t *to, xfs_dinode_t *from) @@ -1237,7 +1237,7 @@ xfs_isize_check( * In that case the pages will still be in memory, but the inode size * will never have been updated. */ -xfs_fsize_t +STATIC xfs_fsize_t xfs_file_last_byte( xfs_inode_t *ip) { @@ -3827,7 +3827,7 @@ xfs_iext_inline_to_direct( /* * Resize an extent indirection array to new_size bytes. */ -void +STATIC void xfs_iext_realloc_indirect( xfs_ifork_t *ifp, /* inode fork pointer */ int new_size) /* new indirection array size */ @@ -3852,7 +3852,7 @@ xfs_iext_realloc_indirect( /* * Switch from indirection array to linear (direct) extent allocations. */ -void +STATIC void xfs_iext_indirect_to_direct( xfs_ifork_t *ifp) /* inode fork pointer */ { diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 1804f86..5104dae 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -521,7 +521,6 @@ void xfs_ipin(xfs_inode_t *); void xfs_iunpin(xfs_inode_t *); int xfs_iflush(xfs_inode_t *, uint); void xfs_ichgtime(xfs_inode_t *, int); -xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); void xfs_lock_inodes(xfs_inode_t **, int, uint); void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); @@ -589,8 +588,6 @@ int xfs_itobp(struct xfs_mount *, struct xfs_trans *, struct xfs_buf **, uint); int xfs_iread(struct xfs_mount *, struct xfs_trans *, struct xfs_inode *, xfs_daddr_t, uint); -void xfs_dinode_from_disk(struct xfs_icdinode *, - struct xfs_dinode *); void xfs_dinode_to_disk(struct xfs_dinode *, struct xfs_icdinode *); void xfs_idestroy_fork(struct xfs_inode *, int); @@ -609,8 +606,6 @@ void xfs_iext_remove_inline(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_remove_direct(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_remove_indirect(xfs_ifork_t *, xfs_extnum_t, int); void xfs_iext_realloc_direct(xfs_ifork_t *, int); -void xfs_iext_realloc_indirect(xfs_ifork_t *, int); -void xfs_iext_indirect_to_direct(xfs_ifork_t *); void xfs_iext_direct_to_inline(xfs_ifork_t *, xfs_extnum_t); void xfs_iext_inline_to_direct(xfs_ifork_t *, int); void xfs_iext_destroy(xfs_ifork_t *); diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c index aeb2d22..c471122 100644 --- a/fs/xfs/xfs_itable.c +++ b/fs/xfs/xfs_itable.c @@ -39,7 +39,7 @@ #include "xfs_error.h" #include "xfs_btree.h" -int +STATIC int xfs_internal_inum( xfs_mount_t *mp, xfs_ino_t ino) diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h index 1fb04e7..20792bf 100644 --- a/fs/xfs/xfs_itable.h +++ b/fs/xfs/xfs_itable.h @@ -99,11 +99,6 @@ xfs_bulkstat_one( void *dibuff, int *stat); -int -xfs_internal_inum( - xfs_mount_t *mp, - xfs_ino_t ino); - typedef int (*inumbers_fmt_pf)( void __user *ubuffer, /* buffer to write to */ const xfs_inogrp_t *buffer, /* buffer to read from */ diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index bcad5f4..679c7c4 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -451,8 +451,6 @@ extern int xlog_find_tail(xlog_t *log, extern int xlog_recover(xlog_t *log); extern int xlog_recover_finish(xlog_t *log); extern void xlog_pack_data(xlog_t *log, xlog_in_core_t *iclog, int); -extern void xlog_recover_process_iunlinks(xlog_t *log); - extern struct xfs_buf *xlog_get_bp(xlog_t *, int); extern void xlog_put_bp(struct xfs_buf *); diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 47da2fb..1099395 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3263,7 +3263,7 @@ xlog_recover_process_one_iunlink( * freeing of the inode and its removal from the list must be * atomic. */ -void +STATIC void xlog_recover_process_iunlinks( xlog_t *log) { diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 5c6f092..8b6c9e8 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1568,7 +1568,7 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) * * The m_sb_lock must be held when this routine is called. */ -int +STATIC int xfs_mod_incore_sb_unlocked( xfs_mount_t *mp, xfs_sb_field_t field, diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index a512238..a6c023b 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -414,13 +414,10 @@ typedef struct xfs_mod_sb { extern int xfs_log_sbcount(xfs_mount_t *, uint); extern int xfs_mountfs(xfs_mount_t *mp); -extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); extern void xfs_unmountfs(xfs_mount_t *); extern int xfs_unmountfs_writesb(xfs_mount_t *); extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, int); -extern int xfs_mod_incore_sb_unlocked(xfs_mount_t *, xfs_sb_field_t, - int64_t, int); extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *, uint, int); extern int xfs_mount_log_sb(xfs_mount_t *, __int64_t); diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c index afee7eb..4b0613d 100644 --- a/fs/xfs/xfs_mru_cache.c +++ b/fs/xfs/xfs_mru_cache.c @@ -564,35 +564,6 @@ xfs_mru_cache_lookup( } /* - * To look up an element using its key, but leave its location in the internal - * lists alone, call xfs_mru_cache_peek(). If the element isn't found, this - * function returns NULL. - * - * See the comments above the declaration of the xfs_mru_cache_lookup() function - * for important locking information pertaining to this call. - */ -void * -xfs_mru_cache_peek( - xfs_mru_cache_t *mru, - unsigned long key) -{ - xfs_mru_cache_elem_t *elem; - - ASSERT(mru && mru->lists); - if (!mru || !mru->lists) - return NULL; - - spin_lock(&mru->lock); - elem = radix_tree_lookup(&mru->store, key); - if (!elem) - spin_unlock(&mru->lock); - else - __release(mru_lock); /* help sparse not be stupid */ - - return elem ? elem->value : NULL; -} - -/* * To release the internal data structure spinlock after having performed an * xfs_mru_cache_lookup() or an xfs_mru_cache_peek(), call xfs_mru_cache_done() * with the data store pointer. diff --git a/fs/xfs/xfs_mru_cache.h b/fs/xfs/xfs_mru_cache.h index dd58ea1..5d439f3 100644 --- a/fs/xfs/xfs_mru_cache.h +++ b/fs/xfs/xfs_mru_cache.h @@ -49,7 +49,6 @@ int xfs_mru_cache_insert(struct xfs_mru_cache *mru, unsigned long key, void * xfs_mru_cache_remove(struct xfs_mru_cache *mru, unsigned long key); void xfs_mru_cache_delete(struct xfs_mru_cache *mru, unsigned long key); void *xfs_mru_cache_lookup(struct xfs_mru_cache *mru, unsigned long key); -void *xfs_mru_cache_peek(struct xfs_mru_cache *mru, unsigned long key); void xfs_mru_cache_done(struct xfs_mru_cache *mru); #endif /* __XFS_MRU_CACHE_H__ */ diff --git a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h index f76c003..ae65f0d 100644 --- a/fs/xfs/xfs_rw.h +++ b/fs/xfs/xfs_rw.h @@ -78,10 +78,4 @@ extern int xfs_read_buf(struct xfs_mount *mp, xfs_buftarg_t *btp, extern void xfs_ioerror_alert(char *func, struct xfs_mount *mp, xfs_buf_t *bp, xfs_daddr_t blkno); -/* - * Prototypes for functions in xfs_vnodeops.c. - */ -extern int xfs_free_eofblocks(struct xfs_mount *mp, struct xfs_inode *ip, - int flags); - #endif /* __XFS_RW_H__ */ diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index c4eca5e..1dd7068 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -716,7 +716,7 @@ xfs_fsync( * when the link count isn't zero and by xfs_dm_punch_hole() when * punching a hole to EOF. */ -int +STATIC int xfs_free_eofblocks( xfs_mount_t *mp, xfs_inode_t *ip, From felixb@sgi.com Thu Jul 2 00:24:03 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 relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625O3B4067890 for ; Thu, 2 Jul 2009 00:24:03 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 5A86A30407B for ; Wed, 1 Jul 2009 22:24:33 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id EC5807000103; Thu, 2 Jul 2009 00:24:32 -0500 (CDT) Cc: xfs-oss , Jesse Stroik Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A4C3407.60501@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH V3] xfs_repair: fix agcount*agblocks overflows Date: Thu, 2 Jul 2009 00:24:31 -0500 References: <4A4BC7FF.6050004@sandeen.net> <4A4BE005.3000102@sandeen.net> <4A4C3407.60501@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 1, 2009, at 11:13 PM, Eric Sandeen wrote: > (V3: found another spot with this problem) > > The last test in verify_ag_bno() may overflow: > > return (agbno >= (sbp->sb_dblocks - > ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); > > because sb_agcount & sb_agblocks are 32-bit integers; this > may then miss corrupt agbnos for the last ag, which can in > turn lead to out of bounds memory accesses later, for example > when the block nr is used to offset in set_agbno_state(): > > addr = ba_bmap[(agno)] + (ag_blockno)/XR_BB_NUM; > > Similar problems in mk_incore_fstree > > Reported-by: Jesse Stroik > Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher > > --- > > diff --git a/repair/dinode.c b/repair/dinode.c > index fdf52db..84e1d05 100644 > --- a/repair/dinode.c > +++ b/repair/dinode.c > @@ -319,7 +319,8 @@ verify_ag_bno(xfs_sb_t *sbp, > return (agbno >= sbp->sb_agblocks); > if (agno == (sbp->sb_agcount - 1)) > return (agbno >= (sbp->sb_dblocks - > - ((sbp->sb_agcount - 1) * sbp->sb_agblocks))); > + ((xfs_drfsbno_t)(sbp->sb_agcount - 1) * > + sbp->sb_agblocks))); > return 1; > } > > diff --git a/repair/phase5.c b/repair/phase5.c > index 2c243b6..77c7363 100644 > --- a/repair/phase5.c > +++ b/repair/phase5.c > @@ -113,7 +113,8 @@ mk_incore_fstree(xfs_mount_t *mp, xfs_agnumber_t > agno) > ag_end = mp->m_sb.sb_agblocks; > else > ag_end = mp->m_sb.sb_dblocks - > - mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1); > + (xfs_drfsbno_t)mp->m_sb.sb_agblocks * > + (mp->m_sb.sb_agcount - 1); > > /* > * ok, now find the number of extents, keep track of the > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@oss.sgi.com Thu Jul 2 00:27:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625Rvs7068256 for ; Thu, 2 Jul 2009 00:27:57 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n625RpbI068086; Thu, 2 Jul 2009 00:27:51 -0500 Date: Thu, 2 Jul 2009 00:27:51 -0500 Message-Id: <200907020527.n625RpbI068086@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, mainline, updated. v2.6.30-rc4-7941-g1d89b30 X-Git-Refname: refs/heads/mainline X-Git-Reftype: branch X-Git-Oldrev: 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 X-Git-Newrev: 1d89b30cc9be41af87881682ec82e2c107849dbe This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, mainline has been updated fd40261 Merge branch 'master' of git://oss.sgi.com/xfs/xfs into for-linus e83f1eb xfs: fix small mismerge in xfs_vn_mknod 493b87e xfs: fix warnings with CONFIG_XFS_QUOTA disabled 7747a0b xfs: fix freeing memory in xfs_getbmap() f950221 xfs: remove ->write_super and stop maintaining ->s_dirt 35fd035 Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs c905959 Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block ef14f0c xfs: use generic Posix ACL code 8b5403a xfs: remove SYNC_BDFLUSH b0710cc xfs: remove SYNC_IOWAIT 075fe10 xfs: split xfs_sync_inodes fe588ed xfs: use generic inode iterator in xfs_qm_dqrele_all_inodes 75f3cb1 xfs: introduce a per-ag inode iterator abc1064 xfs: remove unused parameter from xfs_reclaim_inodes 1da8eec xfs: factor out inode validation for sync 845b6d0 xfs: split inode flushing from xfs_sync_inodes_ag 5a34d5c xfs: split inode data writeback from xfs_sync_inodes_ag 7d09525 xfs: kill xfs_qmops 0c5e1ce xfs: validate quota log items during log recovery e169683 xfs: update max log size 4156e73 xfs: prevent deadlock in xfs_qm_shake() 0963248 xfs: fix overflow in xfs_growfs_data_private e1defc4 block: Do away with the notion of hardsect_size ec91d13 xfs: fix double unlock in xfs_swap_extents() 6321e3e xfs: fix getbmap vs mmap deadlock 4be4a00 xfs: a couple getbmap cleanups 2ac00af xfs: add more checks to superblock validation f25181f xfs_file_last_byte() needs to acquire ilock from 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: fs/xfs/Kconfig | 1 + fs/xfs/Makefile | 5 +- fs/xfs/linux-2.6/xfs_acl.c | 523 +++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_buf.c | 2 +- fs/xfs/linux-2.6/xfs_ioctl.c | 25 +- fs/xfs/linux-2.6/xfs_iops.c | 53 +-- fs/xfs/linux-2.6/xfs_lrw.c | 1 - fs/xfs/linux-2.6/xfs_quotaops.c | 4 +- fs/xfs/linux-2.6/xfs_super.c | 61 ++-- fs/xfs/linux-2.6/xfs_sync.c | 479 +++++++++++---------- fs/xfs/linux-2.6/xfs_sync.h | 19 +- fs/xfs/linux-2.6/xfs_xattr.c | 67 +--- fs/xfs/quota/xfs_dquot.c | 5 +- fs/xfs/quota/xfs_dquot.h | 1 - fs/xfs/quota/xfs_dquot_item.c | 1 - fs/xfs/quota/xfs_qm.c | 168 ++++---- fs/xfs/quota/xfs_qm.h | 21 - fs/xfs/quota/xfs_qm_bhv.c | 77 +---- fs/xfs/quota/xfs_qm_stats.c | 1 - fs/xfs/quota/xfs_qm_syscalls.c | 113 ++---- fs/xfs/quota/xfs_trans_dquot.c | 66 ++-- fs/xfs/xfs_acl.c | 874 --------------------------------------- fs/xfs/xfs_acl.h | 97 ++--- fs/xfs/xfs_ag.h | 2 + fs/xfs/xfs_arch.h | 32 -- fs/xfs/xfs_attr.c | 13 +- fs/xfs/xfs_bmap.c | 34 +- fs/xfs/xfs_bmap_btree.c | 4 +- fs/xfs/xfs_filestream.c | 6 +- fs/xfs/xfs_fs.h | 11 +- fs/xfs/xfs_iget.c | 8 +- fs/xfs/xfs_inode.c | 1 - fs/xfs/xfs_inode.h | 6 + fs/xfs/xfs_iomap.c | 13 +- fs/xfs/xfs_log_recover.c | 38 ++- fs/xfs/xfs_mount.c | 105 ++++- fs/xfs/xfs_mount.h | 84 +---- fs/xfs/xfs_qmops.c | 152 ------- fs/xfs/xfs_quota.h | 129 +++--- fs/xfs/xfs_rename.c | 3 +- fs/xfs/xfs_rw.c | 1 - fs/xfs/xfs_trans.c | 17 +- fs/xfs/xfs_utils.c | 2 +- fs/xfs/xfs_vnodeops.c | 114 +++--- fs/xfs/xfs_vnodeops.h | 1 + 45 files changed, 1342 insertions(+), 2098 deletions(-) create mode 100644 fs/xfs/linux-2.6/xfs_acl.c delete mode 100644 fs/xfs/xfs_acl.c delete mode 100644 fs/xfs/xfs_qmops.c hooks/post-receive -- XFS development tree From felixb@oss.sgi.com Thu Jul 2 00:27:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625RwwD068294 for ; Thu, 2 Jul 2009 00:27:58 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n625RvoR068262; Thu, 2 Jul 2009 00:27:57 -0500 Date: Thu, 2 Jul 2009 00:27:57 -0500 Message-Id: <200907020527.n625RvoR068262@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1242-g370f048 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: e83f1eb6bfc4004c19a99ee5f5aa65bd3fbecec3 X-Git-Newrev: 370f048214b4e9aa2102fa3c454ae1374da287c5 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 370f048 xfs: add more statics & drop some unused functions from e83f1eb6bfc4004c19a99ee5f5aa65bd3fbecec3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 370f048214b4e9aa2102fa3c454ae1374da287c5 Author: Eric Sandeen Date: Thu Jul 2 00:09:33 2009 -0500 xfs: add more statics & drop some unused functions A lot more functions could be made static, but they need forward declarations; this does some easy ones, and also found a few unused functions in the process. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_super.c | 2 +- fs/xfs/linux-2.6/xfs_sync.c | 15 --------------- fs/xfs/linux-2.6/xfs_sync.h | 1 - fs/xfs/xfs_ag.h | 3 --- fs/xfs/xfs_alloc.c | 2 +- fs/xfs/xfs_bmap.c | 2 +- fs/xfs/xfs_bmap.h | 11 ----------- fs/xfs/xfs_bmap_btree.c | 20 ++++++++++---------- fs/xfs/xfs_bmap_btree.h | 1 - fs/xfs/xfs_btree.c | 42 +----------------------------------------- fs/xfs/xfs_btree.h | 15 --------------- fs/xfs/xfs_inode.c | 8 ++++---- fs/xfs/xfs_inode.h | 5 ----- fs/xfs/xfs_itable.c | 2 +- fs/xfs/xfs_itable.h | 5 ----- fs/xfs/xfs_log_priv.h | 2 -- fs/xfs/xfs_log_recover.c | 2 +- fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_mount.h | 3 --- fs/xfs/xfs_mru_cache.c | 29 ----------------------------- fs/xfs/xfs_mru_cache.h | 1 - fs/xfs/xfs_rw.h | 6 ------ fs/xfs/xfs_vnodeops.c | 2 +- 23 files changed, 22 insertions(+), 159 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Thu Jul 2 00:28:38 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,J_CHICKENPOX_63, J_CHICKENPOX_64,J_CHICKENPOX_65 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n625Sck7068345 for ; Thu, 2 Jul 2009 00:28:38 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 88ADEAC016 for ; Wed, 1 Jul 2009 22:29:07 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id E1BE07000103; Thu, 2 Jul 2009 00:29:06 -0500 (CDT) Cc: Christoph Hellwig , xfs mailing list Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A4C410D.5040205@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] add more statics & drop some unused functions Date: Thu, 2 Jul 2009 00:29:06 -0500 References: <4A1C3D65.4020306@sandeen.net> <20090527102319.GA28274@infradead.org> <4A48D218.5050208@sandeen.net> <6E6C2EFA-9893-4585-AA36-CDE866C7CE45@sgi.com> <4A4C410D.5040205@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 2, 2009, at 12:09 AM, Eric Sandeen wrote: > Felix Blyakher wrote: >> On Jun 29, 2009, at 9:39 AM, Eric Sandeen wrote: >> >> >>> Christoph Hellwig wrote: >>> >>>> On Tue, May 26, 2009 at 02:05:09PM -0500, Eric Sandeen wrote: >>>> >>>>> A lot more functions could be made static, but they need >>>>> forward declarations; this does some easy ones, and also >>>>> found a few unused functions in the process. >>>>> >>>> Looks good to me. >>>> >>>> >>> Felix, do you plan to merge this one? >>> >> >> Eric, this patch doesn't apply cleanly now: >> >> Applying xfs: add more statics & drop some unused functions >> error: patch failed: fs/xfs/linux-2.6/xfs_sync.c:640 >> error: fs/xfs/linux-2.6/xfs_sync.c: patch does not apply >> error: patch failed: fs/xfs/linux-2.6/xfs_sync.h:51 >> error: fs/xfs/linux-2.6/xfs_sync.h: patch does not apply >> Patch failed at 0002. >> >> Can you rebase and repost it? >> >> Thanks, >> Felix >> >> > This one applies to linus' tree ok.... It does. Applied. Thanks. Felix > > > -Eric > > diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/ > xfs_super.c > index a220d36..c709ed6 100644 > --- a/fs/xfs/linux-2.6/xfs_super.c > +++ b/fs/xfs/linux-2.6/xfs_super.c > @@ -687,7 +687,7 @@ xfs_barrier_test( > return error; > } > > -void > +STATIC void > xfs_mountfs_check_barriers(xfs_mount_t *mp) > { > int error; > diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c > index b619d6b..fbf3e02 100644 > --- a/fs/xfs/linux-2.6/xfs_sync.c > +++ b/fs/xfs/linux-2.6/xfs_sync.c > @@ -740,21 +740,6 @@ __xfs_inode_clear_reclaim_tag( > XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > } > > -void > -xfs_inode_clear_reclaim_tag( > - xfs_inode_t *ip) > -{ > - xfs_mount_t *mp = ip->i_mount; > - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); > - > - read_lock(&pag->pag_ici_lock); > - spin_lock(&ip->i_flags_lock); > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - spin_unlock(&ip->i_flags_lock); > - read_unlock(&pag->pag_ici_lock); > - xfs_put_perag(mp, pag); > -} > - > STATIC int > xfs_reclaim_inode_now( > struct xfs_inode *ip, > diff --git a/fs/xfs/linux-2.6/xfs_sync.h b/fs/xfs/linux-2.6/xfs_sync.h > index 2a10301..23e7e7e 100644 > --- a/fs/xfs/linux-2.6/xfs_sync.h > +++ b/fs/xfs/linux-2.6/xfs_sync.h > @@ -48,7 +48,6 @@ int xfs_reclaim_inode(struct xfs_inode *ip, int > locked, int sync_mode); > int xfs_reclaim_inodes(struct xfs_mount *mp, int mode); > > void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); > -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); > void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct > xfs_perag *pag, > struct xfs_inode *ip); > > diff --git a/fs/xfs/xfs_ag.h b/fs/xfs/xfs_ag.h > index f24b50b..af3cfeb 100644 > --- a/fs/xfs/xfs_ag.h > +++ b/fs/xfs/xfs_ag.h > @@ -91,9 +91,6 @@ typedef struct xfs_agf { > #define XFS_AGF_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_AGF_DADDR(mp)) > #define XFS_BUF_TO_AGF(bp) ((xfs_agf_t *)XFS_BUF_PTR(bp)) > > -extern int xfs_read_agf(struct xfs_mount *mp, struct xfs_trans *tp, > - xfs_agnumber_t agno, int flags, struct xfs_buf **bpp); > - > /* > * Size of the unlinked inode hash table in the agi. > */ > diff --git a/fs/xfs/xfs_alloc.c b/fs/xfs/xfs_alloc.c > index 2cf944e..6316004 100644 > --- a/fs/xfs/xfs_alloc.c > +++ b/fs/xfs/xfs_alloc.c > @@ -2248,7 +2248,7 @@ xfs_alloc_put_freelist( > /* > * Read in the allocation group header (free/alloc section). > */ > -int /* error */ > +STATIC int /* error */ > xfs_read_agf( > struct xfs_mount *mp, /* mount point structure */ > struct xfs_trans *tp, /* transaction pointer */ > diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c > index 7928b99..9759724 100644 > --- a/fs/xfs/xfs_bmap.c > +++ b/fs/xfs/xfs_bmap.c > @@ -3713,7 +3713,7 @@ done: > * entry (null if none). Else, *lastxp will be set to the index > * of the found entry; *gotp will contain the entry. > */ > -xfs_bmbt_rec_host_t * /* pointer to found extent entry */ > +STATIC xfs_bmbt_rec_host_t * /* pointer to found extent entry */ > xfs_bmap_search_multi_extents( > xfs_ifork_t *ifp, /* inode fork pointer */ > xfs_fileoff_t bno, /* block number searched for */ > diff --git a/fs/xfs/xfs_bmap.h b/fs/xfs/xfs_bmap.h > index 1b8ff92..56f62d2 100644 > --- a/fs/xfs/xfs_bmap.h > +++ b/fs/xfs/xfs_bmap.h > @@ -392,17 +392,6 @@ xfs_bmap_count_blocks( > int whichfork, > int *count); > > -/* > - * Search the extent records for the entry containing block bno. > - * If bno lies in a hole, point to the next entry. If bno lies > - * past eof, *eofp will be set, and *prevp will contain the last > - * entry (null if none). Else, *lastxp will be set to the index > - * of the found entry; *gotp will contain the entry. > - */ > -xfs_bmbt_rec_host_t * > -xfs_bmap_search_multi_extents(struct xfs_ifork *, xfs_fileoff_t, > int *, > - xfs_extnum_t *, xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); > - > #endif /* __KERNEL__ */ > > #endif /* __XFS_BMAP_H__ */ > diff --git a/fs/xfs/xfs_bmap_btree.c b/fs/xfs/xfs_bmap_btree.c > index 5c1ade0..eb7b702 100644 > --- a/fs/xfs/xfs_bmap_btree.c > +++ b/fs/xfs/xfs_bmap_btree.c > @@ -202,16 +202,6 @@ xfs_bmbt_get_state( > ext_flag); > } > > -/* Endian flipping versions of the bmbt extraction functions */ > -void > -xfs_bmbt_disk_get_all( > - xfs_bmbt_rec_t *r, > - xfs_bmbt_irec_t *s) > -{ > - __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), > - get_unaligned_be64(&r->l1), s); > -} > - > /* > * Extract the blockcount field from an on disk bmap extent record. > */ > @@ -816,6 +806,16 @@ xfs_bmbt_trace_key( > *l1 = 0; > } > > +/* Endian flipping versions of the bmbt extraction functions */ > +STATIC void > +xfs_bmbt_disk_get_all( > + xfs_bmbt_rec_t *r, > + xfs_bmbt_irec_t *s) > +{ > + __xfs_bmbt_get_all(get_unaligned_be64(&r->l0), > + get_unaligned_be64(&r->l1), s); > +} > + > STATIC void > xfs_bmbt_trace_record( > struct xfs_btree_cur *cur, > diff --git a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h > index 0e8df00..5549d49 100644 > --- a/fs/xfs/xfs_bmap_btree.h > +++ b/fs/xfs/xfs_bmap_btree.h > @@ -220,7 +220,6 @@ extern xfs_fsblock_t > xfs_bmbt_get_startblock(xfs_bmbt_rec_host_t *r); > extern xfs_fileoff_t xfs_bmbt_get_startoff(xfs_bmbt_rec_host_t *r); > extern xfs_exntst_t xfs_bmbt_get_state(xfs_bmbt_rec_host_t *r); > > -extern void xfs_bmbt_disk_get_all(xfs_bmbt_rec_t *r, > xfs_bmbt_irec_t *s); > extern xfs_filblks_t xfs_bmbt_disk_get_blockcount(xfs_bmbt_rec_t *r); > extern xfs_fileoff_t xfs_bmbt_disk_get_startoff(xfs_bmbt_rec_t *r); > > diff --git a/fs/xfs/xfs_btree.c b/fs/xfs/xfs_btree.c > index e9df995..cde5a26 100644 > --- a/fs/xfs/xfs_btree.c > +++ b/fs/xfs/xfs_btree.c > @@ -646,46 +646,6 @@ xfs_btree_read_bufl( > } > > /* > - * Get a buffer for the block, return it read in. > - * Short-form addressing. > - */ > -int /* error */ > -xfs_btree_read_bufs( > - xfs_mount_t *mp, /* file system mount point */ > - xfs_trans_t *tp, /* transaction pointer */ > - xfs_agnumber_t agno, /* allocation group number */ > - xfs_agblock_t agbno, /* allocation group block number */ > - uint lock, /* lock flags for read_buf */ > - xfs_buf_t **bpp, /* buffer for agno/agbno */ > - int refval) /* ref count value for buffer */ > -{ > - xfs_buf_t *bp; /* return value */ > - xfs_daddr_t d; /* real disk block address */ > - int error; > - > - ASSERT(agno != NULLAGNUMBER); > - ASSERT(agbno != NULLAGBLOCK); > - d = XFS_AGB_TO_DADDR(mp, agno, agbno); > - if ((error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, d, > - mp->m_bsize, lock, &bp))) { > - return error; > - } > - ASSERT(!bp || !XFS_BUF_GETERROR(bp)); > - if (bp != NULL) { > - switch (refval) { > - case XFS_ALLOC_BTREE_REF: > - XFS_BUF_SET_VTYPE_REF(bp, B_FS_MAP, refval); > - break; > - case XFS_INO_BTREE_REF: > - XFS_BUF_SET_VTYPE_REF(bp, B_FS_INOMAP, refval); > - break; > - } > - } > - *bpp = bp; > - return 0; > -} > - > -/* > * Read-ahead the block, don't wait for it, don't return a buffer. > * Long-form addressing. > */ > @@ -2951,7 +2911,7 @@ error0: > * inode we have to copy the single block it was pointing to into the > * inode. > */ > -int > +STATIC int > xfs_btree_kill_iroot( > struct xfs_btree_cur *cur) > { > diff --git a/fs/xfs/xfs_btree.h b/fs/xfs/xfs_btree.h > index 4f852b7..7fa0706 100644 > --- a/fs/xfs/xfs_btree.h > +++ b/fs/xfs/xfs_btree.h > @@ -379,20 +379,6 @@ xfs_btree_read_bufl( > int refval);/* ref count value for buffer */ > > /* > - * Get a buffer for the block, return it read in. > - * Short-form addressing. > - */ > -int /* error */ > -xfs_btree_read_bufs( > - struct xfs_mount *mp, /* file system mount point */ > - struct xfs_trans *tp, /* transaction pointer */ > - xfs_agnumber_t agno, /* allocation group number */ > - xfs_agblock_t agbno, /* allocation group block number */ > - uint lock, /* lock flags for read_buf */ > - struct xfs_buf **bpp, /* buffer for agno/agbno */ > - int refval);/* ref count value for buffer */ > - > -/* > * Read-ahead the block, don't wait for it, don't return a buffer. > * Long-form addressing. > */ > @@ -432,7 +418,6 @@ int xfs_btree_decrement(struct xfs_btree_cur *, > int, int *); > int xfs_btree_lookup(struct xfs_btree_cur *, xfs_lookup_t, int *); > int xfs_btree_update(struct xfs_btree_cur *, union xfs_btree_rec *); > int xfs_btree_new_iroot(struct xfs_btree_cur *, int *, int *); > -int xfs_btree_kill_iroot(struct xfs_btree_cur *); > int xfs_btree_insert(struct xfs_btree_cur *, int *); > int xfs_btree_delete(struct xfs_btree_cur *, int *); > int xfs_btree_get_rec(struct xfs_btree_cur *, union xfs_btree_rec > **, int *); > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 1f22d65..2dcb3d7 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -641,7 +641,7 @@ xfs_iformat_btree( > return 0; > } > > -void > +STATIC void > xfs_dinode_from_disk( > xfs_icdinode_t *to, > xfs_dinode_t *from) > @@ -1237,7 +1237,7 @@ xfs_isize_check( > * In that case the pages will still be in memory, but the inode size > * will never have been updated. > */ > -xfs_fsize_t > +STATIC xfs_fsize_t > xfs_file_last_byte( > xfs_inode_t *ip) > { > @@ -3827,7 +3827,7 @@ xfs_iext_inline_to_direct( > /* > * Resize an extent indirection array to new_size bytes. > */ > -void > +STATIC void > xfs_iext_realloc_indirect( > xfs_ifork_t *ifp, /* inode fork pointer */ > int new_size) /* new indirection array size */ > @@ -3852,7 +3852,7 @@ xfs_iext_realloc_indirect( > /* > * Switch from indirection array to linear (direct) extent > allocations. > */ > -void > +STATIC void > xfs_iext_indirect_to_direct( > xfs_ifork_t *ifp) /* inode fork pointer */ > { > diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h > index 1804f86..5104dae 100644 > --- a/fs/xfs/xfs_inode.h > +++ b/fs/xfs/xfs_inode.h > @@ -521,7 +521,6 @@ void xfs_ipin(xfs_inode_t *); > void xfs_iunpin(xfs_inode_t *); > int xfs_iflush(xfs_inode_t *, uint); > void xfs_ichgtime(xfs_inode_t *, int); > -xfs_fsize_t xfs_file_last_byte(xfs_inode_t *); > void xfs_lock_inodes(xfs_inode_t **, int, uint); > void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); > > @@ -589,8 +588,6 @@ int xfs_itobp(struct xfs_mount *, struct > xfs_trans *, > struct xfs_buf **, uint); > int xfs_iread(struct xfs_mount *, struct xfs_trans *, > struct xfs_inode *, xfs_daddr_t, uint); > -void xfs_dinode_from_disk(struct xfs_icdinode *, > - struct xfs_dinode *); > void xfs_dinode_to_disk(struct xfs_dinode *, > struct xfs_icdinode *); > void xfs_idestroy_fork(struct xfs_inode *, int); > @@ -609,8 +606,6 @@ void xfs_iext_remove_inline(xfs_ifork_t *, > xfs_extnum_t, int); > void xfs_iext_remove_direct(xfs_ifork_t *, xfs_extnum_t, int); > void xfs_iext_remove_indirect(xfs_ifork_t *, xfs_extnum_t, int); > void xfs_iext_realloc_direct(xfs_ifork_t *, int); > -void xfs_iext_realloc_indirect(xfs_ifork_t *, int); > -void xfs_iext_indirect_to_direct(xfs_ifork_t *); > void xfs_iext_direct_to_inline(xfs_ifork_t *, xfs_extnum_t); > void xfs_iext_inline_to_direct(xfs_ifork_t *, int); > void xfs_iext_destroy(xfs_ifork_t *); > diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c > index aeb2d22..c471122 100644 > --- a/fs/xfs/xfs_itable.c > +++ b/fs/xfs/xfs_itable.c > @@ -39,7 +39,7 @@ > #include "xfs_error.h" > #include "xfs_btree.h" > > -int > +STATIC int > xfs_internal_inum( > xfs_mount_t *mp, > xfs_ino_t ino) > diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h > index 1fb04e7..20792bf 100644 > --- a/fs/xfs/xfs_itable.h > +++ b/fs/xfs/xfs_itable.h > @@ -99,11 +99,6 @@ xfs_bulkstat_one( > void *dibuff, > int *stat); > > -int > -xfs_internal_inum( > - xfs_mount_t *mp, > - xfs_ino_t ino); > - > typedef int (*inumbers_fmt_pf)( > void __user *ubuffer, /* buffer to write to */ > const xfs_inogrp_t *buffer, /* buffer to read from */ > diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h > index bcad5f4..679c7c4 100644 > --- a/fs/xfs/xfs_log_priv.h > +++ b/fs/xfs/xfs_log_priv.h > @@ -451,8 +451,6 @@ extern int xlog_find_tail(xlog_t *log, > extern int xlog_recover(xlog_t *log); > extern int xlog_recover_finish(xlog_t *log); > extern void xlog_pack_data(xlog_t *log, xlog_in_core_t *iclog, int); > -extern void xlog_recover_process_iunlinks(xlog_t *log); > - > extern struct xfs_buf *xlog_get_bp(xlog_t *, int); > extern void xlog_put_bp(struct xfs_buf *); > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 47da2fb..1099395 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -3263,7 +3263,7 @@ xlog_recover_process_one_iunlink( > * freeing of the inode and its removal from the list must be > * atomic. > */ > -void > +STATIC void > xlog_recover_process_iunlinks( > xlog_t *log) > { > diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c > index 5c6f092..8b6c9e8 100644 > --- a/fs/xfs/xfs_mount.c > +++ b/fs/xfs/xfs_mount.c > @@ -1568,7 +1568,7 @@ xfs_mod_sb(xfs_trans_t *tp, __int64_t fields) > * > * The m_sb_lock must be held when this routine is called. > */ > -int > +STATIC int > xfs_mod_incore_sb_unlocked( > xfs_mount_t *mp, > xfs_sb_field_t field, > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index a512238..a6c023b 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -414,13 +414,10 @@ typedef struct xfs_mod_sb { > > extern int xfs_log_sbcount(xfs_mount_t *, uint); > extern int xfs_mountfs(xfs_mount_t *mp); > -extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); > > extern void xfs_unmountfs(xfs_mount_t *); > extern int xfs_unmountfs_writesb(xfs_mount_t *); > extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, > int); > -extern int xfs_mod_incore_sb_unlocked(xfs_mount_t *, xfs_sb_field_t, > - int64_t, int); > extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *, > uint, int); > extern int xfs_mount_log_sb(xfs_mount_t *, __int64_t); > diff --git a/fs/xfs/xfs_mru_cache.c b/fs/xfs/xfs_mru_cache.c > index afee7eb..4b0613d 100644 > --- a/fs/xfs/xfs_mru_cache.c > +++ b/fs/xfs/xfs_mru_cache.c > @@ -564,35 +564,6 @@ xfs_mru_cache_lookup( > } > > /* > - * To look up an element using its key, but leave its location in > the internal > - * lists alone, call xfs_mru_cache_peek(). If the element isn't > found, this > - * function returns NULL. > - * > - * See the comments above the declaration of the > xfs_mru_cache_lookup() function > - * for important locking information pertaining to this call. > - */ > -void * > -xfs_mru_cache_peek( > - xfs_mru_cache_t *mru, > - unsigned long key) > -{ > - xfs_mru_cache_elem_t *elem; > - > - ASSERT(mru && mru->lists); > - if (!mru || !mru->lists) > - return NULL; > - > - spin_lock(&mru->lock); > - elem = radix_tree_lookup(&mru->store, key); > - if (!elem) > - spin_unlock(&mru->lock); > - else > - __release(mru_lock); /* help sparse not be stupid */ > - > - return elem ? elem->value : NULL; > -} > - > -/* > * To release the internal data structure spinlock after having > performed an > * xfs_mru_cache_lookup() or an xfs_mru_cache_peek(), call > xfs_mru_cache_done() > * with the data store pointer. > diff --git a/fs/xfs/xfs_mru_cache.h b/fs/xfs/xfs_mru_cache.h > index dd58ea1..5d439f3 100644 > --- a/fs/xfs/xfs_mru_cache.h > +++ b/fs/xfs/xfs_mru_cache.h > @@ -49,7 +49,6 @@ int xfs_mru_cache_insert(struct xfs_mru_cache > *mru, unsigned long key, > void * xfs_mru_cache_remove(struct xfs_mru_cache *mru, unsigned long > key); > void xfs_mru_cache_delete(struct xfs_mru_cache *mru, unsigned long > key); > void *xfs_mru_cache_lookup(struct xfs_mru_cache *mru, unsigned long > key); > -void *xfs_mru_cache_peek(struct xfs_mru_cache *mru, unsigned long > key); > void xfs_mru_cache_done(struct xfs_mru_cache *mru); > > #endif /* __XFS_MRU_CACHE_H__ */ > diff --git a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h > index f76c003..ae65f0d 100644 > --- a/fs/xfs/xfs_rw.h > +++ b/fs/xfs/xfs_rw.h > @@ -78,10 +78,4 @@ extern int xfs_read_buf(struct xfs_mount *mp, > xfs_buftarg_t *btp, > extern void xfs_ioerror_alert(char *func, struct xfs_mount *mp, > xfs_buf_t *bp, xfs_daddr_t blkno); > > -/* > - * Prototypes for functions in xfs_vnodeops.c. > - */ > -extern int xfs_free_eofblocks(struct xfs_mount *mp, struct > xfs_inode *ip, > - int flags); > - > #endif /* __XFS_RW_H__ */ > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c > index c4eca5e..1dd7068 100644 > --- a/fs/xfs/xfs_vnodeops.c > +++ b/fs/xfs/xfs_vnodeops.c > @@ -716,7 +716,7 @@ xfs_fsync( > * when the link count isn't zero and by xfs_dm_punch_hole() when > * punching a hole to EOF. > */ > -int > +STATIC int > xfs_free_eofblocks( > xfs_mount_t *mp, > xfs_inode_t *ip, > > From chiparus@gmail.com Thu Jul 2 02:08:48 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=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 n6278m9N072588 for ; Thu, 2 Jul 2009 02:08:48 -0500 X-ASG-Debug-ID: 1246518560-79d200e30000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f209.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C4C5933A611 for ; Thu, 2 Jul 2009 00:09:20 -0700 (PDT) Received: from mail-fx0-f209.google.com (mail-fx0-f209.google.com [209.85.220.209]) by cuda.sgi.com with ESMTP id SstTVStLS0iLpYPV for ; Thu, 02 Jul 2009 00:09:20 -0700 (PDT) Received: by fxm5 with SMTP id 5so1222425fxm.20 for ; Thu, 02 Jul 2009 00:09:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type:content-transfer-encoding; bh=NjWHplbuDMQLniZm6/omEAII5eAER8ez5Sk8MWmOsGg=; b=T6Qfjnor5ZHXVKLNcL2bkC+DUWJNyT2LR1uC9LBGtsN7s1SlIC9v7+sXCVonKewVK6 mlBPBBbvlvhPWlrxJcp7hxujEwK1IqyzS7dVLZkb6DZ4K5PZJ9w6CC4iFs41ldgdTDGJ 4+VPngwLC7t02k13YC5vJwuAjxZrALRrCd8tI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=AQYw1HCAOjqSVax4g2y2Q1/73+AG4y+Dvv8R9bKwwxnPEEIDUR8EpXdmw2ILO6yQNs C+NWmoY6OMoi7Np3/SUDSe/WCbOUgy4+DHy6/MUy55GLEhSiH/vqrgRUFU4Q1Nh1xYNE wbwVsprRqy+KmzhLX73XQXoYAw3eAcWKJizeY= MIME-Version: 1.0 Sender: chiparus@gmail.com Received: by 10.204.117.141 with SMTP id r13mr3021130bkq.181.1246518559102; Thu, 02 Jul 2009 00:09:19 -0700 (PDT) In-Reply-To: <20090701124441.GA12844@infradead.org> References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> Date: Thu, 2 Jul 2009 09:09:19 +0200 X-Google-Sender-Auth: 0bd9f6ad3869360a Message-ID: <89c4f90c0907020009n3b321c71s49a54501b146e0cb@mail.gmail.com> X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode From: Tommy van Leeuwen To: Christoph Hellwig Cc: Patrick Schreurs , linux-xfs@oss.sgi.com, Lachlan McIlroy , Eric Sandeen Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-fx0-f209.google.com[209.85.220.209] X-Barracuda-Start-Time: 1246518560 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0977 1.0000 -1.4065 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.41 X-Barracuda-Spam-Status: No, SCORE=-1.41 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.2324 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 Wed, Jul 1, 2009 at 2:44 PM, Christoph Hellwig wrote: > Actually you might want to give this patch a try which fixes a race > affecting the reclaim tag in iget: Thanks Christoph, we'll try this out in the next couple of days and let you know. Tommy From a.beregalov@gmail.com Thu Jul 2 05:38:07 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 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 n62Ac65X081583 for ; Thu, 2 Jul 2009 05:38:07 -0500 X-ASG-Debug-ID: 1246531117-1bc002e70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 94C6033A941 for ; Thu, 2 Jul 2009 03:38:37 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id Oo3ZNDpq8OpckOyb for ; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) Received: by bwz10 with SMTP id 10so1317372bwz.20 for ; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) 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=jy/C2emQ0Qgea5exsm+EmC/dfAAWjyrnO9jSkz/MoQA=; b=Tjp3E/c0Jk/bSfPZlr7Ja6G4/UmpqbOOE9uR0JaIpSH+2zMdVgrphDkzgi+6buyiZu aO0VVNpzxuNQtGScF+g2DfLqe16GBBXMMItXURP4XSTy9xswikIdzy9Xxe57yepYt35Q 1+afWJpm7lVvHJjzlAjen4Sr57hjJ992rIVgw= 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=L/8mWpAY/BGawr+kJDsRRlCLJtOl6S3XFbsqbXWlId0idUdXFZbg6HLlqcOXf5Xise DqrzHu7FEKnl//nhhtp4e4D4lln/IDJ/IzEi8y+0BNcRpKyZDXd2UWkybTcICJnE/20g kip+EFRBHJsSq7+bUwU/O0/8WhK4ONPtI+uMU= MIME-Version: 1.0 Received: by 10.204.71.15 with SMTP id f15mr10642365bkj.42.1246531117024; Thu, 02 Jul 2009 03:38:37 -0700 (PDT) In-Reply-To: <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <824092896.830901246499419777.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <584076313.830951246499556455.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Date: Thu, 2 Jul 2009 14:38:36 +0400 Message-ID: X-ASG-Orig-Subj: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! Subject: Re: 2.6.30-rc6: BUG at fs/xfs/support/debug.c:109! From: Alexander Beregalov To: Lachlan McIlroy Cc: Kernel Testers List , xfs@oss.sgi.com, Dave Chinner Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1246531118 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.2334 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 2009/7/2 Lachlan McIlroy : > Alexander, > > Are you running with this fix? > > http://git.kernel.org/?p=3Dlinux/kernel/git/stable/linux-2.6.29.y.git;a= =3Dcommitdiff;h=3Dd415867e0abc35e3b2f0d4196e98c339d6fe29a2 Yes, I use 2.6.31-rc1-git and it contains this fix. > > I've seen this assertion before and the above patch fixed it > for me. =C2=A0Hmmm, looks like you're running a recent kernel so > you should have this fix - maybe the fix wasn't quite right. > > Lachlan > > > ----- "Alexander Beregalov" wrote: > >> 2009/6/5 Alexander Beregalov : >> > 2009/6/4 Dave Chinner : >> >> On Mon, Jun 01, 2009 at 07:22:56PM +0400, Alexander Beregalov >> wrote: >> >>> Hi >> >>> >> >>> Assertion failed: *nmap >=3D 1, file: fs/xfs/xfs_bmap.c, line: 4846 >> >> ..... >> >>> Call Trace: >> >>> =C2=A0[] xfs_bmapi+0xad/0x1ad0 >> >>> =C2=A0[] xfs_dir2_leaf_getdents+0x640/0x7b0 >> >>> =C2=A0[] xfs_readdir+0x12c/0x140 >> >>> =C2=A0[] xfs_file_readdir+0x47/0x70 >> >>> =C2=A0[] vfs_readdir+0xd0/0xf0 >> >>> =C2=A0[] sys_getdents+0x96/0x110 >> >>> =C2=A0[] system_call_fastpath+0x16/0x1b >> >> >> >> I'd say this indicates a corrupted directory. =C2=A0Can you run >> >> 'xfs_repair -n' over the filesystem and see if it finds a bad >> >> directory? >> >> Still cannot fix the filesystem. After repairing all corruptions from >> LiveCD it still fails on the same workload. >> >> Do you need metadump or anything else? >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Thu Jul 2 12:02:53 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n62H2r1b101436 for ; Thu, 2 Jul 2009 12:02:53 -0500 X-ASG-Debug-ID: 1246554205-3c8501390000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A2A01AEB026 for ; Thu, 2 Jul 2009 10:03:25 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id 29i9vHKBECB75wOS for ; Thu, 02 Jul 2009 10:03:25 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62H3Plp018097 for ; Thu, 2 Jul 2009 13:03:25 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62H3OMm005661 for ; Thu, 2 Jul 2009 13:03:24 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62H3NGc015500 for ; Thu, 2 Jul 2009 13:03:23 -0400 Message-ID: <4A4CE85B.1030102@sandeen.net> Date: Thu, 02 Jul 2009 12:03:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: [PATCH] xfs_metadump: agcount*agblocks overflow Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246554206 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 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.2356 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 Found another potential overflow in xfs_metadump, similar to those just fixed in repair. Signed-off-by: Eric Sandeen -- diff --git a/db/metadump.c b/db/metadump.c index 19aed4f..ef6e571 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -222,7 +222,8 @@ valid_bno( return 1; if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && agbno <= (mp->m_sb.sb_dblocks - - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * + mp->m_sb.sb_agblocks)) return 1; return 0; From patrick@news-service.com Thu Jul 2 12:31:18 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 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 n62HVBBE102888 for ; Thu, 2 Jul 2009 12:31:17 -0500 X-ASG-Debug-ID: 1246555901-6a4801910000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pu01.news-service.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BB2D633C154 for ; Thu, 2 Jul 2009 10:31:41 -0700 (PDT) Received: from pu01.news-service.com (ns1.news-service.com [195.114.240.3]) by cuda.sgi.com with ESMTP id 3GM6bYMwtLRnpmRR for ; Thu, 02 Jul 2009 10:31:41 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by pu01.news-service.com (Postfix) with ESMTP id A8BF8971FA; Thu, 2 Jul 2009 19:31:40 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at pu01.news-service.com Received: from pu01.news-service.com ([127.0.0.1]) by localhost (pu01.nse [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5AowfNcTe+Al; Thu, 2 Jul 2009 19:31:32 +0200 (CEST) Received: from [172.25.4.6] (unknown [172.25.8.1]) by pu01.news-service.com (Postfix) with ESMTP id 82DE5971EF; Thu, 2 Jul 2009 19:31:32 +0200 (CEST) Message-ID: <4A4CEEF2.7040101@news-service.com> Date: Thu, 02 Jul 2009 19:31:30 +0200 From: Patrick Schreurs Organization: News-Service.com User-Agent: Thunderbird 2.0.0.22 (Windows/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: linux-xfs@oss.sgi.com, Tommy van Leeuwen , Lachlan McIlroy , Eric Sandeen X-ASG-Orig-Subj: Re: 2.6.30 panic - xfs_fs_destroy_inode Subject: Re: 2.6.30 panic - xfs_fs_destroy_inode References: <4A408316.2070903@news-service.com> <1587994907.388291245745033392.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <20090623171305.GB23971@infradead.org> <4A4A7205.6010101@news-service.com> <20090701124441.GA12844@infradead.org> In-Reply-To: <20090701124441.GA12844@infradead.org> Content-Type: multipart/mixed; boundary="------------000709030702090209080603" X-Barracuda-Connect: ns1.news-service.com[195.114.240.3] X-Barracuda-Start-Time: 1246555902 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: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2357 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Status: Clean This is a multi-part message in MIME format. --------------000709030702090209080603 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Christoph, With this patch we see the following: kernel BUG at fs/inode.c:1288! invalid opcode: 0000 [#2] SMP last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map CPU 1 Modules linked in: acpi_cpufreq cpufreq_ondemand ipmi_si ipmi_devintf ipmi_msghandler bonding mptspi 8250_pnp rng_core scsi_transport_spi thermal serio_raw processor 8250 serial_core bnx2 thermal_sys Pid: 8048, comm: diablo Tainted: G D 2.6.30xfspatch #1 PowerEdge 1950 RIP: 0010:[] [] iput+0x13/0x60 RSP: 0018:ffff88007ec6db58 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffff88022cbef5c0 RCX: ffff88017d1edd30 RDX: ffff88022cbef5f0 RSI: ffff88017d1edcc8 RDI: ffff88022cbef5c0 RBP: ffff8801383ae788 R08: ffff88007ec6db98 R09: 0000000000000246 R10: ffff88008c2156a0 R11: ffffffff8028b7a8 R12: ffff88022e831c00 R13: ffff88007ec6db98 R14: ffff88022e831d18 R15: ffff88007ec6dc0c FS: 0000000001495860(0063) GS:ffff88002804d000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00007fa14f9fa000 CR3: 000000007ee5c000 CR4: 00000000000006a0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process diablo (pid: 8048, threadinfo ffff88007ec6c000, task ffff8800855926f0) Stack: ffff88017d1edcc0 ffffffff802884f7 ffff88008c2156a0 ffff88017d1edcc0 ffff88022e831c00 ffffffff80288783 00000000000000c0 0000000000000008 ffff8800b9ad5a00 ffff880138304ac0 ffff88007ec6dba8 ffff88007ec6dba8 Call Trace: [] ? d_kill+0x34/0x55 [] ? __shrink_dcache_sb+0x26b/0x301 [] ? shrink_dcache_memory+0xdf/0x16e [] ? shrink_slab+0xe0/0x153 [] ? try_to_free_pages+0x22e/0x31b [] ? isolate_pages_global+0x0/0x231 [] ? __alloc_pages_internal+0x25f/0x3ff [] ? __do_page_cache_readahead+0xab/0x1b1 [] ? force_page_cache_readahead+0x57/0x7e [] ? sys_madvise+0x394/0x4e0 [] ? system_call_fastpath+0x16/0x1b Code: 4b 70 be 01 00 00 00 48 89 df e8 f8 86 00 00 eb db 48 83 c4 28 5b 5d c3 53 48 85 ff 48 89 fb 74 55 48 83 bf f8 01 00 00 40 75 04 <0f> 0b eb fe 48 8d 7f 48 48 c7 c6 f0 aa 5b 80 e8 51 4b 0a 00 85 RIP [] iput+0x13/0x60 RSP ---[ end trace 06a9d5e318d14bf7 ]--- This server also crahed twice. Unfortunately i don't have a complete logging of this event. See attachment for a partial log. Thanks for looking into this. Patrick Schreurs Christoph Hellwig wrote: > Actually you might want to give this patch a try which fixes a race > affecting the reclaim tag in iget: > > > Index: xfs/fs/xfs/xfs_iget.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_iget.c 2009-06-04 13:27:41.901946950 +0200 > +++ xfs/fs/xfs/xfs_iget.c 2009-06-04 14:08:08.837816707 +0200 > @@ -132,80 +132,89 @@ xfs_iget_cache_hit( > int flags, > int lock_flags) __releases(pag->pag_ici_lock) > { > + struct inode *inode = VFS_I(ip); > struct xfs_mount *mp = ip->i_mount; > - int error = EAGAIN; > + int error; > + > + spin_lock(&ip->i_flags_lock); > > /* > - * If INEW is set this inode is being set up > - * If IRECLAIM is set this inode is being torn down > - * Pause and try again. > + * This inode is being torn down, pause and try again. > */ > - if (xfs_iflags_test(ip, (XFS_INEW|XFS_IRECLAIM))) { > + if (ip->i_flags & XFS_IRECLAIM) { > XFS_STATS_INC(xs_ig_frecycle); > + error = EAGAIN; > goto out_error; > } > > - /* If IRECLAIMABLE is set, we've torn down the vfs inode part */ > - if (xfs_iflags_test(ip, XFS_IRECLAIMABLE)) { > + /* > + * If we are racing with another cache hit that is currently recycling > + * this inode out of the XFS_IRECLAIMABLE state, wait for the > + * initialisation to complete before continuing. > + */ > + if (ip->i_flags & XFS_INEW) { > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > > - /* > - * If lookup is racing with unlink, then we should return an > - * error immediately so we don't remove it from the reclaim > - * list and potentially leak the inode. > - */ > - if ((ip->i_d.di_mode == 0) && !(flags & XFS_IGET_CREATE)) { > - error = ENOENT; > - goto out_error; > - } > + XFS_STATS_INC(xs_ig_frecycle); > + wait_on_inode(inode); > + return EAGAIN; > + } > > + /* > + * If lookup is racing with unlink, then we should return an > + * error immediately so we don't remove it from the reclaim > + * list and potentially leak the inode. > + */ > + if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { > + error = ENOENT; > + goto out_error; > + } > + > + /* > + * If IRECLAIMABLE is set, we've torn down the vfs inode part already. > + * Need to carefully get it back into useable state. > + */ > + if (ip->i_flags & XFS_IRECLAIMABLE) { > xfs_itrace_exit_tag(ip, "xfs_iget.alloc"); > > /* > - * We need to re-initialise the VFS inode as it has been > - * 'freed' by the VFS. Do this here so we can deal with > - * errors cleanly, then tag it so it can be set up correctly > - * later. > + * We need to set XFS_INEW atomically with clearing the > + * reclaimable tag so that we do have an indicator of the > + * inode still being initialized. > */ > - if (!inode_init_always(mp->m_super, VFS_I(ip))) { > + ip->i_flags |= XFS_INEW; > + __xfs_inode_clear_reclaim_tag(pag, ip); > + > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > + > + if (unlikely(!inode_init_always(mp->m_super, inode))) { > + printk("node_init_always failed!!\n"); > + > + /* > + * Re-initializing the inode failed, and we are in deep > + * trouble. Try to re-add it to the reclaim list. > + */ > + read_lock(&pag->pag_ici_lock); > + spin_lock(&ip->i_flags_lock); > + > + ip->i_flags &= ~XFS_INEW; > + __xfs_inode_set_reclaim_tag(pag, ip); > + > error = ENOMEM; > goto out_error; > } > - > - /* > - * We must set the XFS_INEW flag before clearing the > - * XFS_IRECLAIMABLE flag so that if a racing lookup does > - * not find the XFS_IRECLAIMABLE above but has the igrab() > - * below succeed we can safely check XFS_INEW to detect > - * that this inode is still being initialised. > - */ > - xfs_iflags_set(ip, XFS_INEW); > - xfs_iflags_clear(ip, XFS_IRECLAIMABLE); > - > - /* clear the radix tree reclaim flag as well. */ > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - } else if (!igrab(VFS_I(ip))) { > + } else { > /* If the VFS inode is being torn down, pause and try again. */ > - XFS_STATS_INC(xs_ig_frecycle); > - goto out_error; > - } else if (xfs_iflags_test(ip, XFS_INEW)) { > - /* > - * We are racing with another cache hit that is > - * currently recycling this inode out of the XFS_IRECLAIMABLE > - * state. Wait for the initialisation to complete before > - * continuing. > - */ > - wait_on_inode(VFS_I(ip)); > - } > + if (!igrab(inode)) > + goto out_error; > > - if (ip->i_d.di_mode == 0 && !(flags & XFS_IGET_CREATE)) { > - error = ENOENT; > - iput(VFS_I(ip)); > - goto out_error; > + /* We've got a live one. */ > + spin_unlock(&ip->i_flags_lock); > + read_unlock(&pag->pag_ici_lock); > } > > - /* We've got a live one. */ > - read_unlock(&pag->pag_ici_lock); > - > if (lock_flags != 0) > xfs_ilock(ip, lock_flags); > > @@ -215,6 +224,7 @@ xfs_iget_cache_hit( > return 0; > > out_error: > + spin_unlock(&ip->i_flags_lock); > read_unlock(&pag->pag_ici_lock); > return error; > } > Index: xfs/fs/xfs/linux-2.6/xfs_sync.c > =================================================================== > --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:40:09.135939715 +0200 > +++ xfs/fs/xfs/linux-2.6/xfs_sync.c 2009-06-04 13:59:17.978816696 +0200 > @@ -607,6 +607,17 @@ xfs_reclaim_inode( > return 0; > } > > +void > +__xfs_inode_set_reclaim_tag( > + struct xfs_perag *pag, > + struct xfs_inode *ip) > +{ > + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); > + > + radix_tree_tag_set(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); > + __xfs_iflags_set(ip, XFS_IRECLAIMABLE); > +} > + > /* > * We set the inode flag atomically with the radix tree tag. > * Once we get tag lookups on the radix tree, this inode flag > @@ -621,9 +632,7 @@ xfs_inode_set_reclaim_tag( > > read_lock(&pag->pag_ici_lock); > spin_lock(&ip->i_flags_lock); > - radix_tree_tag_set(&pag->pag_ici_root, > - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > - __xfs_iflags_set(ip, XFS_IRECLAIMABLE); > + __xfs_inode_set_reclaim_tag(pag, ip); > spin_unlock(&ip->i_flags_lock); > read_unlock(&pag->pag_ici_lock); > xfs_put_perag(mp, pag); > @@ -631,30 +640,15 @@ xfs_inode_set_reclaim_tag( > > void > __xfs_inode_clear_reclaim_tag( > - xfs_mount_t *mp, > - xfs_perag_t *pag, > - xfs_inode_t *ip) > -{ > - radix_tree_tag_clear(&pag->pag_ici_root, > - XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); > -} > - > -void > -xfs_inode_clear_reclaim_tag( > - xfs_inode_t *ip) > + struct xfs_perag *pag, > + struct xfs_inode *ip) > { > - xfs_mount_t *mp = ip->i_mount; > - xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); > + xfs_agino_t agino = XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino); > > - read_lock(&pag->pag_ici_lock); > - spin_lock(&ip->i_flags_lock); > - __xfs_inode_clear_reclaim_tag(mp, pag, ip); > - spin_unlock(&ip->i_flags_lock); > - read_unlock(&pag->pag_ici_lock); > - xfs_put_perag(mp, pag); > + ip->i_flags &= ~XFS_IRECLAIMABLE; > + radix_tree_tag_clear(&pag->pag_ici_root, agino, XFS_ICI_RECLAIM_TAG); > } > > - > STATIC void > xfs_reclaim_inodes_ag( > xfs_mount_t *mp, > Index: xfs/fs/xfs/linux-2.6/xfs_sync.h > =================================================================== > --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:53:32.994814723 +0200 > +++ xfs/fs/xfs/linux-2.6/xfs_sync.h 2009-06-04 13:58:54.746942001 +0200 > @@ -51,7 +51,6 @@ int xfs_reclaim_inode(struct xfs_inode * > int xfs_reclaim_inodes(struct xfs_mount *mp, int noblock, int mode); > > void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); > -void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip); > -void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag, > - struct xfs_inode *ip); > +void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); > +void __xfs_inode_clear_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip); > #endif > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs --------------000709030702090209080603 Content-Type: image/jpeg; name="sb02-20090702.jpg" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="sb02-20090702.jpg" /9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR CAGQAtADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5/ro4LOxi8Ayam9lHNePqJtRJI7jYhi3Z AVgMg+oP41zlbMGtQL4Vk0SezkfN0bqOaOcJtfZsAKlTkd+oz7UAM0jSI7qKTUNQla20q3YC WVRl5G6iKMHq5/JRyffU8P6Xp8+j63rNxZrcxWTR+TbTXYT5S/zbipU7tvCnABJOATwMbSNX k0uWRWiW5srhQl1ayHCTL/Rh1DDkH8QbVnrdpZ6Jq+mLYzsuoMuHNyMxhDuQY2fMc9TxkdMU AXfDWjWGralq8ix+baWdrNPbxXM6xlyPueZgg4xySCADjJAPJ4e0vS/EPjaG2hgkh018ytBJ MNwwmSgPVhu44+bbzxyRQ8P61Bo39oedZyXH2y1a1OycR7Ub7x5VsngY9OevZnhrWY/D+txa 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 ZEtYZ1mjtftGSCOQN5XpkemccZzzQBcufDks/izU9LtY2gWCWRo0aGWQiMN8vCKzYwQQSMY7 8jOXq2l3OjapPp92FE8LYbY2QQRkEH0IIPrzWufE0Dza4klhIbPV3WWSNbgCSN1ffw+wjGS3 G3pjnjkuvFf2jxBLrg0+MXzwKql23pFMAq+aq47AcK2cE5ycYoAtaH4UibxLpGnatJ+9ud8k 9mpIeJAm5A57FsHK9QMdCeJdZ8Ow2/hW01C4tbbTb170QSRxySMscbJuHmqxdlYYzgc4YZGe mDo2uT6R4gg1gr9pmR2dxKxzJuBDZPXJBPPPPrVq81+C40pNMS0ufs7Xpvbh57oSSyOV2nDb ABxnkhuT+BAGXXhXULKK7numghtYFBS5ZyY7ktyoiIB3lhzxwB1xXTah4c0qGTWLdLKNLe00 4T286zsboybUIMkW4lQSxzmNQB6da5698TR6hZS2E+mQLYxr/oEcR2taH1D4JcN/EG+8eflN WrrxjHcXWpX66cyahqNn9kmc3GYgCqqxVNoIOF4yxxnvQBLP4ai1Dwrot5psMEeoTRXDSQCR y9yI3C5QHILAZYgEE5OAcYHIV1WmeMY9NstJUac0l1pa3HkSG4wjGXOSybckDPQMK5WgAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAorqP+EL/wCpm8Of+B//ANjXOXMH2a6mg82O XynZPMibcj4OMqe4PY0ARUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k= --------------000709030702090209080603-- From BATV+c12987dc4489b9b8aed6+2139+infradead.org+hch@bombadil.srs.infradead.org Thu Jul 2 14:28:33 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 n62JSVcr108066 for ; Thu, 2 Jul 2009 14:28:33 -0500 X-ASG-Debug-ID: 1246562944-6a3303bd0000-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 A234233CB8D for ; Thu, 2 Jul 2009 12:29:04 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id hZKw8xCZO4TDAqK3 for ; Thu, 02 Jul 2009 12:29:04 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MMRxw-0002JI-2l; Thu, 02 Jul 2009 19:29:04 +0000 Date: Thu, 2 Jul 2009 15:29:04 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Message-ID: <20090702192903.GA13919@infradead.org> References: <4A4CE85B.1030102@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4CE85B.1030102@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246562944 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 On Thu, Jul 02, 2009 at 12:03:23PM -0500, Eric Sandeen wrote: > Found another potential overflow in xfs_metadump, > similar to those just fixed in repair. > > Signed-off-by: Eric Sandeen > -- > > diff --git a/db/metadump.c b/db/metadump.c > index 19aed4f..ef6e571 100644 > --- a/db/metadump.c > +++ b/db/metadump.c > @@ -222,7 +222,8 @@ valid_bno( > return 1; > if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && > agbno <= (mp->m_sb.sb_dblocks - > - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) > + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * > + mp->m_sb.sb_agblocks)) > return 1; > > return 0; I have a really hard time reading the function (both before and after your patch). It's a real mess and no wonder we have these overflow problems here. What about the following instead: static int valid_bno( xfs_agnumber_t agno, xfs_agblock_t agbno) { xfs_agnumber_t last_agno = mp->m_sb.sb_agcount - 1; xfs_drfsbno_t nblocks; /* * The first block in every AG contains a backups superblock, * and is copied separately, and we can skip it early as an * optimization. */ if (agbno == 0) return 0; /* * An invalid AG number is never okay. */ if (agno > last_agno) return 0; if (agno == last_agno) { nblocks = mp->m_sb.sb_dblocks - ((xfs_drfsbno_t)mp->m_sb.sb_agblocks * (mp->m_sb.sb_agcount - 1)); } else { nblocks = mp->m_sb.sb_agblocks); } if (agbno > nblocks) return 0; return 1; } and with that form I wonder if we don't still have an off-by-one in the last if clause - shouldn't the agblocks be the count of blocks while agbno is an indes and thus 0-based? Btw, do you have a testcase for this? From sandeen@sandeen.net Thu Jul 2 14:56:13 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 n62JuCwC109019 for ; Thu, 2 Jul 2009 14:56:12 -0500 X-ASG-Debug-ID: 1246564988-59ce02610000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 099D89CB404 for ; Thu, 2 Jul 2009 13:03:08 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id ZgW98gxKm9WN49cs for ; Thu, 02 Jul 2009 13:03:08 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62JuVrV002212; Thu, 2 Jul 2009 15:56:31 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62JuUFh022652; Thu, 2 Jul 2009 15:56:30 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62JuUNK014131; Thu, 2 Jul 2009 15:56:30 -0400 Message-ID: <4A4D10ED.70506@sandeen.net> Date: Thu, 02 Jul 2009 14:56:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfs_metadump: agcount*agblocks overflow Subject: Re: [PATCH] xfs_metadump: agcount*agblocks overflow References: <4A4CE85B.1030102@sandeen.net> <20090702192903.GA13919@infradead.org> In-Reply-To: <20090702192903.GA13919@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246564992 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.2361 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 Christoph Hellwig wrote: > On Thu, Jul 02, 2009 at 12:03:23PM -0500, Eric Sandeen wrote: >> Found another potential overflow in xfs_metadump, >> similar to those just fixed in repair. >> >> Signed-off-by: Eric Sandeen >> -- >> >> diff --git a/db/metadump.c b/db/metadump.c >> index 19aed4f..ef6e571 100644 >> --- a/db/metadump.c >> +++ b/db/metadump.c >> @@ -222,7 +222,8 @@ valid_bno( >> return 1; >> if (agno == (mp->m_sb.sb_agcount - 1) && agbno > 0 && >> agbno <= (mp->m_sb.sb_dblocks - >> - (mp->m_sb.sb_agcount - 1) * mp->m_sb.sb_agblocks)) >> + (xfs_drfsbno_t)(mp->m_sb.sb_agcount - 1) * >> + mp->m_sb.sb_agblocks)) >> return 1; >> >> return 0; > > I have a really hard time reading the function (both before and after > your patch). It's a real mess and no wonder we have these overflow > problems here. What about the following instead: well, I think the original goal was to make it efficient for the common case. How muchthis matters, not really sure. (at least that's the comment in the xfs_repair counterpart) > static int > valid_bno( > xfs_agnumber_t agno, > xfs_agblock_t agbno) > { > xfs_agnumber_t last_agno = mp->m_sb.sb_agcount - 1; > xfs_drfsbno_t nblocks; > > /* > * The first block in every AG contains a backups superblock, > * and is copied separately, and we can skip it early as an > * optimization. > */ > if (agbno == 0) > return 0; > > /* > * An invalid AG number is never okay. > */ > if (agno > last_agno) > return 0; > > if (agno == last_agno) { > nblocks = mp->m_sb.sb_dblocks - > ((xfs_drfsbno_t)mp->m_sb.sb_agblocks * > (mp->m_sb.sb_agcount - 1)); > } else { > nblocks = mp->m_sb.sb_agblocks); > } > > if (agbno > nblocks) > return 0; > return 1; > } > > and with that form I wonder if we don't still have an off-by-one > in the last if clause - shouldn't the agblocks be the count of blocks > while agbno is an indes and thus 0-based? > > Btw, do you have a testcase for this? no testcase here, though could craft one. I discovered it on Jesse's corruptd fs (very big metadump image) -Eric From sandeen@redhat.com Thu Jul 2 16:29:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00 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 n62LTOoV118133 for ; Thu, 2 Jul 2009 16:29:25 -0500 X-ASG-Debug-ID: 1246570196-2d7b03b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2B2161D489A6 for ; Thu, 2 Jul 2009 14:29:56 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id KkBjruQIpOEoyC5k for ; Thu, 02 Jul 2009 14:29:56 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n62LTgNH024695; Thu, 2 Jul 2009 17:29:43 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n62LTg84011666; Thu, 2 Jul 2009 17:29:42 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n62LTfIf027452; Thu, 2 Jul 2009 17:29:41 -0400 Message-ID: <4A4D26C5.9070606@redhat.com> Date: Thu, 02 Jul 2009 16:29:41 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list CC: linux-mm@kvack.org, Christoph Hellwig , "MASON,CHRISTOPHER" X-ASG-Orig-Subj: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: [PATCH] bump up nr_to_write in xfs_vm_writepage Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246570197 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.2366 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 Talking w/ someone who had a raid6 of 15 drives on an areca controller, he wondered why he could only get 300MB/s or so out of a streaming buffered write to xfs like so: dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s when the same write directly to the device was going closer to 700MB/s... With the following change things get moving again for xfs: dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 10737418240 bytes (11 GB) copied, 16.2938 s, 659 MB/s Chris had sent out something similar at Christoph's suggestion, and Christoph reminded me of it, and I tested it a variant of it, and it seems to help shockingly well. Feels like a bandaid though; thoughts? Other tests to do? Thanks, -Eric Signed-off-by: Christoph Hellwig Signed-off-by: Eric Sandeen Cc: Chris Mason --- Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c @@ -1268,6 +1268,13 @@ xfs_vm_writepage( if (!page_has_buffers(page)) create_empty_buffers(page, 1 << inode->i_blkbits, 0); + + /* + * VM calculation for nr_to_write seems off. Bump it way + * up, this gets simple streaming writes zippy again. + */ + wbc->nr_to_write *= 4; + /* * Convert delayed allocate, unwritten or unmapped space * to real space and flush out to disk. From michael.monnerie@is.it-management.at Fri Jul 3 06:20:21 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_33 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 n63BKKxj161591 for ; Fri, 3 Jul 2009 06:20:20 -0500 X-ASG-Debug-ID: 1246620049-0f0100b60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 801B133ECEC for ; Fri, 3 Jul 2009 04:20:50 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id n3cd6hTmUgFYpg1a for ; Fri, 03 Jul 2009 04:20:50 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id C4DB65380 for ; Fri, 3 Jul 2009 13:22:26 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id BAD3D400155 for ; Fri, 3 Jul 2009 13:20:48 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs mailing list X-ASG-Orig-Subj: bad fs - xfs_repair 3.01 crashes on it Subject: bad fs - xfs_repair 3.01 crashes on it Date: Fri, 3 Jul 2009 13:20:43 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart3171997.tSlmBtre28"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907031320.48358@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1246620051 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.2420 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 --nextPart3171997.tSlmBtre28 Content-Type: multipart/mixed; boundary="Boundary-01=_MmeTKaJHscv+BOH" Content-Transfer-Encoding: 7bit Content-Disposition: inline --Boundary-01=_MmeTKaJHscv+BOH Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Tonight our server rebooted, and I found in /var/log/warn that he was cryin= g=20 a lot about xfs since June 7 already: Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jun 7 03:06:31 orion.i.zmi.at kernel: Pid: 23230, comm: xfs_fsr Tainted: G= 2.6.27.21-0.1-xen #1 Jun 7 03:06:31 orion.i.zmi.at kernel: Jun 7 03:06:31 orion.i.zmi.at kernel: Call Trace: Jun 7 03:06:31 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jun 7 03:06:31 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c5 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f6 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ed [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_vget_fsop_= handlereq+0xc2/0x11b [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_open_by_ha= ndle+0x60/0x1cb [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_ioctl+0x3c= a/0x680 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] xfs_file_ioctl= +0x25/0x69 [xfs] Jun 7 03:06:31 orion.i.zmi.at kernel: [] vfs_ioctl+0x21= /0x6c Jun 7 03:06:31 orion.i.zmi.at kernel: [] do_vfs_ioctl+0= x222/0x231 Jun 7 03:06:31 orion.i.zmi.at kernel: [] sys_ioctl+0x51= /0x73 Jun 7 03:06:31 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jun 7 03:06:31 orion.i.zmi.at kernel: [<00007f7231d6cb77>] 0x7f7231d6cb77 But XFS didn't go offline, so nobody found this messages. There are a lot o= f them. They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we r= un since then. It would have been nice if xfs_fsr could have displayed a message, so we would have received the cron mail. (But it got killed by the kernel, that's a good excuse) Anyway, so I went to xfs_repair (3.01) and got this: Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... [snip] - agno =3D 14 local inode 3857051697 attr too small (size =3D 3, min size =3D 4) bad attribute fork in inode 3857051697, clearing attr fork clearing inode 3857051697 attributes cleared inode 3857051697 [snip] Phase 4 - check for duplicate blocks... [snip] - agno =3D 15 data fork in regular inode 3857051697 claims used block 537147998 xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err =3D=3D 0= ' failed. And then xfs_repair crashes out, without having repaired. I attached the fu= ll=20 xfs_repair log here, and http://zmi.at/x/xfs.metadump.data1.bz2 the metadump. I'll not be here for a week now, I hope the problem is not very serious. mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --Boundary-01=_MmeTKaJHscv+BOH Content-Type: text/plain; charset="UTF-8"; name="xfsrepair.data1" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfsrepair.data1" Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... - found root inode chunk Phase 3 - for each AG... - scan and clear agi unlinked lists... - process known inodes and perform inode discovery... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 local inode 3857051697 attr too small (size = 3, min size = 4) bad attribute fork in inode 3857051697, clearing attr fork clearing inode 3857051697 attributes cleared inode 3857051697 - agno = 15 - agno = 16 - agno = 17 - agno = 18 - agno = 19 - agno = 20 - agno = 21 - agno = 22 - agno = 23 - agno = 24 - agno = 25 - agno = 26 - agno = 27 - agno = 28 - agno = 29 - agno = 30 - agno = 31 - agno = 32 - agno = 33 - agno = 34 - agno = 35 - agno = 36 - agno = 37 - agno = 38 - agno = 39 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 - agno = 8 - agno = 9 - agno = 10 - agno = 11 - agno = 12 - agno = 13 - agno = 14 - agno = 15 data fork in regular inode 3857051697 claims used block 537147998 xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. --Boundary-01=_MmeTKaJHscv+BOH-- --nextPart3171997.tSlmBtre28 Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpN6ZAACgkQzhSR9xwSCbSOdACg7aZ5elczWsWNvZjXok3e7cL6 aSsAn0rUX84zVftmgrdr/sg7QEYNOqnH =Z88E -----END PGP SIGNATURE----- --nextPart3171997.tSlmBtre28-- From sentstory@gmail.com Fri Jul 3 07:56:33 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=BAYES_00 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 n63CuWh8167569 for ; Fri, 3 Jul 2009 07:56:33 -0500 X-ASG-Debug-ID: 1246625825-1bd500b00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0AEBD1D48B89 for ; Fri, 3 Jul 2009 05:57:05 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id GEszB6By3o3AvsHg for ; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) Received: by yxe41 with SMTP id 41so3121348yxe.20 for ; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; bh=YxMBPROjQZMBfhZK5dTCCWPOpbi+bzGxGW1UGI5ibJU=; b=r55O0pDsOdxRcFF4p0zQzN5IJoNjORRt444VnbvESCTVHibC9/ZWYyXOtbc1RSuqo8 GjNqZHWAg/6DX9EPC2DSk1iMzwujKfQFutxKTKRIOSCP5jO6kB/eU3DR1GcXu9vH6U3C ZeuD/dGMKiIXKN1trmtk1uNjCntrtQ8ry5dAQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:date:x-google-sender-auth:message-id :subject:from:to:content-type:content-transfer-encoding; b=fIzBm539SQ155tsRHjNZlUGHuDNreVD7sm8uJq28IR8bnVM4tc2joM2Ggd6BEUiqqE UxRbXls9o3QcdnTMQ4B1KJUFDlDXYHYJ6oJogS2mJ3hUdlxKEEYT0aB4wDK7CCC2Cb0d dMEk2zABYjHZD4+BvZxfkA2IY98IauJKIy5rk= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.43.10 with SMTP id q10mr2078617anq.125.1246625825077; Fri, 03 Jul 2009 05:57:05 -0700 (PDT) Date: Fri, 3 Jul 2009 18:27:05 +0530 X-Google-Sender-Auth: d1f6e77f9926d99d Message-ID: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> X-ASG-Orig-Subj: Clustered version of XFS Subject: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246625826 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3428 1.0000 -0.1788 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.18 X-Barracuda-Spam-Status: No, SCORE=-0.18 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.2426 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 we are using XFS high speed transaction processing system. we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. i have two questions regarding XFS ... 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) 2. I am currently using my root partition as XFS. but i need to modify XFS source code and reload module without rebooting machine. Is there anyway to play with XFS source/module while using XFS module for mounted file system ....? cheers __ tharindu From felixb@oss.sgi.com Fri Jul 3 09:15:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n63EFsqL171052 for ; Fri, 3 Jul 2009 09:15:54 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n63EFsJP171024; Fri, 3 Jul 2009 09:15:54 -0500 Date: Fri, 3 Jul 2009 09:15:54 -0500 Message-Id: <200907031415.n63EFsJP171024@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1243-gab8b9ba X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 370f048214b4e9aa2102fa3c454ae1374da287c5 X-Git-Newrev: ab8b9baac3f48fb3fc3d47790950c0eec134e678 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated ab8b9ba un-static xfs_read_agf from 370f048214b4e9aa2102fa3c454ae1374da287c5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ab8b9baac3f48fb3fc3d47790950c0eec134e678 Author: Eric Sandeen Date: Thu Jul 2 21:35:43 2009 -0500 un-static xfs_read_agf CONFIG_XFS_DEBUG builds still need xfs_read_agf to be non-static, oops. Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_ag.h | 3 +++ fs/xfs/xfs_alloc.c | 2 +- 2 files changed, 4 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From sandeen@sandeen.net Fri Jul 3 09:37: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.3 required=5.0 tests=AWL,BAYES_00 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 n63EbQoM172078 for ; Fri, 3 Jul 2009 09:37:27 -0500 X-ASG-Debug-ID: 1246631878-1bd303170000-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 5CCC91AECFBD for ; Fri, 3 Jul 2009 07:37:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id D3pkZ5lR0qCfm26T for ; Fri, 03 Jul 2009 07:37:58 -0700 (PDT) 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 37CA9A9ABC2; Fri, 3 Jul 2009 09:37:58 -0500 (CDT) Message-ID: <4A4E17C5.8020105@sandeen.net> Date: Fri, 03 Jul 2009 09:37:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: tharindu@sentstory.com CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> In-Reply-To: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> 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: 1246631879 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.2431 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 Tharindu Rukshan Bamunuarachchi wrote: > we are using XFS high speed transaction processing system. > > we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. > > i have two questions regarding XFS ... > > 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) SGI sells a product called CXFS (http://lmgtfy.com/?q=clustered+xfs) ;) > 2. I am currently using my root partition as XFS. but i need to modify > XFS source code and reload module without rebooting machine. > Is there anyway to play with XFS source/module while using XFS > module for mounted file system ....? In general no, but you might look into KSplice. -Eric > > cheers > __ > tharindu From vitaly.v.ch@gmail.com Fri Jul 3 09:40:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB 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 n63EeTKm172234 for ; Fri, 3 Jul 2009 09:40:30 -0500 X-ASG-Debug-ID: 1246632452-17ca00ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f209.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1F09B9D6A5C for ; Fri, 3 Jul 2009 07:47:33 -0700 (PDT) Received: from mail-fx0-f209.google.com (mail-fx0-f209.google.com [209.85.220.209]) by cuda.sgi.com with ESMTP id SRF1OzJFv5mFEtQZ for ; Fri, 03 Jul 2009 07:47:33 -0700 (PDT) Received: by fxm5 with SMTP id 5so2068546fxm.20 for ; Fri, 03 Jul 2009 07:41:00 -0700 (PDT) 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=0v55HZ8l3vfZCdHrJzM3dtlqVmYLCZ43rT9tAlHIVqQ=; b=dkA0RrNSaqFYy1A75n2/LAyEMuYdK4h5haRovrp8+HXag3LfO1MGEXiR3GA08qrkOm jJCXaZWu4ACshEmEBig0uYtl7quxJ7HgG4i9+8TTB582i8M7R9S9b5saNd69hlTGTd8G UDVRL4pFH57x2Lk/o88ow6t9lCPz+MPzLF6hk= 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=uR4k96RWc4UbKc8RZ4QC1CXxBWk1WVL68rbF+BhoxoR8HjutukS025PUopP+KCMeci 2TSLzjopr7vWMAzK7Q+TFkgYEB0HMK5vXgb2Y2iv8kQsElxhnhVQOWWnhDGXT+CFHshG rs4s3KLvCvjQHW2avprS6yKzmi2RcPrAkVc5w= MIME-Version: 1.0 Received: by 10.204.53.143 with SMTP id m15mr1322030bkg.112.1246632060504; Fri, 03 Jul 2009 07:41:00 -0700 (PDT) In-Reply-To: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> Date: Fri, 3 Jul 2009 17:41:00 +0300 Message-ID: <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: "Vitaly V. Ch" To: tharindu@sentstory.com Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-fx0-f209.google.com[209.85.220.209] X-Barracuda-Start-Time: 1246632454 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1465 1.0000 -1.1212 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.12 X-Barracuda-Spam-Status: No, SCORE=-1.12 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.2432 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 Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan Bamunuarachchi wrote: > we are using XFS high speed transaction processing system. > > we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. > > i have two questions regarding XFS ... > > 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) Yes. Your need cxfs. > 2. I am currently using my root partition as XFS. but i need to modify > XFS source code and reload module without rebooting machine. > =A0 =A0Is there anyway to play with XFS source/module while using XFS > module for mounted file system ....? Yes. duplicate Your code and use non-reloadable copy for root fs and reloadable under other name ("my_xfs" for example) for other partitions. > > > cheers > __ > tharindu > \\wbr Vitaly Chernookiy > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sentstory@gmail.com Fri Jul 3 10:23:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB 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 n63FNswN175173 for ; Fri, 3 Jul 2009 10:23:54 -0500 X-ASG-Debug-ID: 1246635057-06f003150000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5717B9DA7F7 for ; Fri, 3 Jul 2009 08:30:57 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id L8ia3ItgCYqvIDFO for ; Fri, 03 Jul 2009 08:30:57 -0700 (PDT) Received: by yxe41 with SMTP id 41so3235337yxe.20 for ; Fri, 03 Jul 2009 08:24:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=EBREtgB9AWHugKVYWn+qtSkacg0xj2ByPzBBhug0O0A=; b=CXLqHtzB+5W3ZtS7kAnpzowS3c7Z/dpxuI/kxiJq1LUFj8c0ojE05CpQKM0U2SXjaq MI6bqaxaFEuoBlk8oiDE2LmAo7Kktx9uQfdxdV4GwT8QUpreEJX0CMikei5Xhdn42c5l A9U/yxjPt6WD2THYJ/FE/s6j2F/ZkWTZ8E92I= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=Dln+CgDY0nneYQbz8Cf6Yv7ulRsaqOwYtd/6Aoj6/F93jej3L4BgEyK3t74PfMSQvV pg045GM7j4zb2AfPaG96IweCt2Wz23y/iF+a8MojKTng5nfUhlLR4AqRwpMZfevK25+n mRyULFMdRPaRG/HH65/AV3wEv6+71z3QtT9qU= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.41.9 with SMTP id o9mr2241436ano.155.1246634665288; Fri, 03 Jul 2009 08:24:25 -0700 (PDT) In-Reply-To: <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> Date: Fri, 3 Jul 2009 20:54:24 +0530 X-Google-Sender-Auth: c6eaa6def742e8b8 Message-ID: <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: "Vitaly V. Ch" , sandeen@sandeen.net Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246635059 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0281 1.0000 -1.8388 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.84 X-Barracuda-Spam-Status: No, SCORE=-1.84 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.2434 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 Thankx lot for your responses. I recently send inqury over SGI website. Still no-reply. If there is someone related to SGI's CXFS in this list, please be kind enough to provide contact details. one of the world largest stock market likes to try out CXFS .... __ tharindu On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch wrote: > On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan > Bamunuarachchi wrote: >> we are using XFS high speed transaction processing system. >> >> we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. >> >> i have two questions regarding XFS ... >> >> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) > > Yes. Your need cxfs. > >> 2. I am currently using my root partition as XFS. but i need to modify >> XFS source code and reload module without rebooting machine. >> =A0 =A0Is there anyway to play with XFS source/module while using XFS >> module for mounted file system ....? > > Yes. duplicate Your code and use non-reloadable copy for root fs and > reloadable under other name ("my_xfs" for example) for other > partitions. > >> >> >> cheers >> __ >> tharindu >> > > \\wbr Vitaly Chernookiy > >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs >> > From sandeen@sandeen.net Fri Jul 3 13:34:19 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 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 n63IYJek183436 for ; Fri, 3 Jul 2009 13:34:19 -0500 X-ASG-Debug-ID: 1246646090-5e2a02b30000-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 D4CD71AEF77D for ; Fri, 3 Jul 2009 11:34:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Kj8BjQmAAxGZfBaH for ; Fri, 03 Jul 2009 11:34:50 -0700 (PDT) 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 1FC0BA9ABC2; Fri, 3 Jul 2009 13:34:49 -0500 (CDT) Message-ID: <4A4E4F48.4030507@sandeen.net> Date: Fri, 03 Jul 2009 13:34:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> 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: 1246646091 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.2446 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 Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: > > Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 3857051697 ((a)extents = 5). Unmount and run xfs_repair. ... > But XFS didn't go offline, so nobody found this messages. There are a lot of them. > They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we run > since then. It would have been nice if xfs_fsr could have displayed > a message, so we would have received the cron mail. (But it got killed > by the kernel, that's a good excuse) I'll have to think about why this didn't shut down the fs. There are just a few that don't. > Anyway, so I went to xfs_repair (3.01) and got this: > > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > [snip] > - agno = 14 > local inode 3857051697 attr too small (size = 3, min size = 4) > bad attribute fork in inode 3857051697, clearing attr fork > clearing inode 3857051697 attributes > cleared inode 3857051697 > [snip] > Phase 4 - check for duplicate blocks... > [snip] > - agno = 15 > data fork in regular inode 3857051697 claims used block 537147998 > xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. > > And then xfs_repair crashes out, without having repaired. I attached the full > xfs_repair log here, and http://zmi.at/x/xfs.metadump.data1.bz2 > the metadump. Thanks for the metadump image, I'll try to take a look. -Eric From michael.monnerie@is.it-management.at Fri Jul 3 18:50:55 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_33 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 n63NosSj199493 for ; Fri, 3 Jul 2009 18:50:55 -0500 X-ASG-Debug-ID: 1246665085-6982007b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E8F121AEFDE5 for ; Fri, 3 Jul 2009 16:51:26 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id ibyb3BdZYqJDZ2xP for ; Fri, 03 Jul 2009 16:51:26 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 29C78445E for ; Sat, 4 Jul 2009 01:52:29 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 72907400155 for ; Sat, 4 Jul 2009 01:51:24 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Date: Sat, 4 Jul 2009 01:51:19 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <4A4D26C5.9070606@redhat.com> In-Reply-To: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907040151.21013@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1246665086 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.2467 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 Donnerstag 02 Juli 2009 Eric Sandeen wrote: > With the following change things get moving again for xfs: Amazeing, more than double speed with a one-liner. Do you have more such lines? ;-) > + /* > + * VM calculation for nr_to_write seems off. Bump it way > + * up, this gets simple streaming writes zippy again. > + */ > + wbc->nr_to_write *= 4; Could this be helpful here also: I've just transfered a copy of a directory from our server to a Linux desktop. Nothing else running, just an rsync from server to client, where the client has a Seagate 1TB ES.2 SATA disk, whhic can do about 80MB/s on large writes. But it did this, measured on large files (>20MB each, no small files): Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq- sz avgqu-sz await svctm %util sdb 0,00 584,00 0,00 368,00 0,00 7448,00 40,48 148,64 401,40 2,72 100,00 All the time around 300+ IOps, which is OK, but only 7-10MB/s? That can't be true. Then I killed the rsync process on the server, and the writes on the client jumped up: sdb 0,00 4543,40 0,00 333,40 0,00 44965,60 269,74 144,66 384,98 3,00 100,00 45MB/s is OK. I investigated a bit further: Seems the /proc/sys/vm values are strange, clients kernel is # uname -a Linux saturn 2.6.30-ZMI #1 SMP PREEMPT Wed Jun 10 20:07:31 CEST 2009 x86_64 x86_64 x86_64 GNU/Linux This makes rsync slow: cat /proc/sys/vm/dirty_* 0 5 0 8000 50 100 This fast: cat /proc/sys/vm/dirty_* cat dirty_* 16123456 0 524123456 8000 0 100 Seems more like a kernel related stuff, but do others see the same thing? So, I'm really out for a 1 week vacation now, have fun! mfg zmi -- // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From sandeen@sandeen.net Sat Jul 4 00:42:31 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_63 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 n645gUMT216914 for ; Sat, 4 Jul 2009 00:42:31 -0500 X-ASG-Debug-ID: 1246686183-7e0d03140000-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 44D271AF0658 for ; Fri, 3 Jul 2009 22:43:03 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id rXGg1OE59DahFwQs for ; Fri, 03 Jul 2009 22:43:03 -0700 (PDT) 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 672C8A9BF33; Sat, 4 Jul 2009 00:43:02 -0500 (CDT) Message-ID: <4A4EEBE6.6060909@sandeen.net> Date: Sat, 04 Jul 2009 00:43:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> 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: 1246686184 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.2479 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 Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: ... > But XFS didn't go offline, so nobody found this messages. There are a lot of them. > They obviously are generated by the nightly "xfs_fsr -v -t 7200" which we run > since then. It would have been nice if xfs_fsr could have displayed > a message, so we would have received the cron mail. (But it got killed > by the kernel, that's a good excuse) ok yeah we should see why fsr didn't print anything ... > Anyway, so I went to xfs_repair (3.01) and got this: > > Phase 3 - for each AG... > - scan and clear agi unlinked lists... > - process known inodes and perform inode discovery... > [snip] > - agno = 14 > local inode 3857051697 attr too small (size = 3, min size = 4) > bad attribute fork in inode 3857051697, clearing attr fork > clearing inode 3857051697 attributes > cleared inode 3857051697 > [snip] > Phase 4 - check for duplicate blocks... > [snip] > - agno = 15 > data fork in regular inode 3857051697 claims used block 537147998 > xfs_repair: dinode.c:2108: process_inode_data_fork: Assertion `err == 0' failed. Ok, so this is essentially some code which first does a scan; if it finds an error it bails out and clears the inode, but if not, it calls essentially the same function again, comments say "set bitmaps this time" - but on the 2nd call it finds an error, which isn't handled well. The ASSERT(err == 0) bit is presumably because if the first scan didn't find anything, the 2nd call shouldn't either, but ... not the case here :( There are more checks that can go wrong -after- the scan-only portion. So either the caller needs to cope w/ the error at this point, or the scan only business needs do all the checks, I think. Where's Barry when you need him .... Also I need to look at when the ASSERTs are active and when they should be; the Fedora packaged xfsprogs doesn't have the ASSERT active, and so this doesn't trip. After 2 calls to xfs_repair on Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). Not great. Not sure how much was cleared out in the process either... -Eric From BATV+602ac5bf566934fa39d3+2141+infradead.org+hch@bombadil.srs.infradead.org Sat Jul 4 13:27:12 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 n64IR9c6243601 for ; Sat, 4 Jul 2009 13:27:12 -0500 X-ASG-Debug-ID: 1246732062-45b6009c0000-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 012153418DF for ; Sat, 4 Jul 2009 11:27:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 5W4jaVGXp43gTSBk for ; Sat, 04 Jul 2009 11:27:42 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MN9xe-00031C-7h for xfs@oss.sgi.com; Sat, 04 Jul 2009 18:27:42 +0000 Date: Sat, 4 Jul 2009 14:27:42 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090704182742.GA11083@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246732063 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 Check that we correctly update the timestamps when writing to a file through an mmap mapping. Currently fails for XFS due a VFS bug but succeeds for many other filesystems. Signed-off-by: Christoph Hellwig Index: xfstests-dev/215 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/215 2009-07-04 18:25:43.000000000 +0000 @@ -0,0 +1,87 @@ +#! /bin/sh +# FS QA Test No. 215 +# +# Test out c/mtime updates after mapped writes. +# +# Based on the testcase in http://bugzilla.kernel.org/show_bug.cgi?id=2645 +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Christoph Hellwig. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=hch@lst.de + +seq=`basename $0` +echo "QA output created by $seq" + +_cleanup() +{ + cd / + rm -f $testfile +} + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +testfile=$TEST_DIR/tst.mmap + +echo +echo "creating test file" +dd if=/dev/zero of=$testfile count=4096 + +mtime1=`stat --printf="%Y" $testfile` +ctime1=`stat --printf="%Z" $testfile` + +sleep 1 + +echo +echo "writing via mmap" +$XFS_IO_PROG -F -f \ + -c 'mmap 0 4096' \ + -c 'mwrite 0 4096' \ + $testfile | _filter_xfs_io_unique + +mtime2=`stat --printf="%Y" $testfile` +ctime2=`stat --printf="%Z" $testfile` + +let mtime_diff=$mtime2-$mtime1 +let ctime_diff=$ctime2-$ctime1 + +if [ "$mtime_diff" -eq "0" ]; then + echo "FAIL: mtime not update after mapped write" + status=1 +fi + +if [ "$ctime_diff" -eq "0" ]; then + echo "FAIL: ctime not update after mapped write" + status=1 +fi + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 Index: xfstests-dev/group =================================================================== --- xfstests-dev.orig/group 2009-07-04 18:07:40.000000000 +0000 +++ xfstests-dev/group 2009-07-04 18:07:55.000000000 +0000 @@ -323,3 +323,4 @@ 212 auto aio quick 213 rw auto prealloc quick 214 rw auto prealloc quick +215 auto metadata quick From felixb@sgi.com Sat Jul 4 23:00:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6540Oew006590 for ; Sat, 4 Jul 2009 23:00:24 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0482B3040C8 for ; Sat, 4 Jul 2009 21:00:56 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id BB333700016A; Sat, 4 Jul 2009 23:00:55 -0500 (CDT) Cc: "Vitaly V. Ch" , sandeen@sandeen.net, xfs@oss.sgi.com Message-Id: <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> From: Felix Blyakher To: tharindu@sentstory.com In-Reply-To: <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: Clustered version of XFS Date: Sat, 4 Jul 2009 23:00:54 -0500 References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 3, 2009, at 10:24 AM, Tharindu Rukshan Bamunuarachchi wrote: > Thankx lot for your responses. > > > I recently send inqury over SGI website. Still no-reply. Today is a national holiday in US, and SGI was closed yesterday. I'm sure somebody will get back to you on Monday. > If there is someone related to SGI's CXFS in this list, please be kind > enough to provide contact details. I forwarded you inquiry to right channels. You should hear from SGI soon. > one of the world largest stock market likes to try out CXFS .... Hope you will like CXFS. Felix > __ > tharindu > > > > On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch > wrote: >> On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan >> Bamunuarachchi wrote: >>> we are using XFS high speed transaction processing system. >>> >>> we are very happy with XFS performance compared to ZFS, EXT3, JFS >>> etc. >>> >>> i have two questions regarding XFS ... >>> >>> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) >> >> Yes. Your need cxfs. >> >>> 2. I am currently using my root partition as XFS. but i need to >>> modify >>> XFS source code and reload module without rebooting machine. >>> Is there anyway to play with XFS source/module while using XFS >>> module for mounted file system ....? >> >> Yes. duplicate Your code and use non-reloadable copy for root fs and >> reloadable under other name ("my_xfs" for example) for other >> partitions. >> >>> >>> >>> cheers >>> __ >>> tharindu >>> >> >> \\wbr Vitaly Chernookiy >> >>> _______________________________________________ >>> xfs mailing list >>> xfs@oss.sgi.com >>> http://oss.sgi.com/mailman/listinfo/xfs >>> >> > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sentstory@gmail.com Sun Jul 5 04:52:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,URIBL_RHS_DOB 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 n659qMfs019509 for ; Sun, 5 Jul 2009 04:52:23 -0500 X-ASG-Debug-ID: 1246787976-08d9026a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-yx0-f203.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BC2959E0371 for ; Sun, 5 Jul 2009 02:59:36 -0700 (PDT) Received: from mail-yx0-f203.google.com (mail-yx0-f203.google.com [209.85.210.203]) by cuda.sgi.com with ESMTP id eLG3XHW5skVx85mt for ; Sun, 05 Jul 2009 02:59:36 -0700 (PDT) Received: by yxe41 with SMTP id 41so4408848yxe.20 for ; Sun, 05 Jul 2009 02:52:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:reply-to:received :in-reply-to:references:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; bh=RjknxGa9GaF8deEIP2u3fV8/vHEca4gwCY4ImpFwWnA=; b=r0CbbbxL8zZjSqnK/btmDZ81NgyfHlh71+/jVzm09dofSGfNwerjN+1zJDuDGivuB1 SgN+Y1CJ5OSbFGj9F+fUQ/NOphWXLeuuAInCkvmR0tqZ5cmjOHgLvs0hEbgdP6qGyR9N mL55oGPuKDqJ7SZ65lWaoNV1xM+oL6bimRa3w= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:reply-to:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=M8F/jry66fQbdecsmEhnmQlQmrL3gg4OpnOxtgAQb1T5qNE5n7yElPkm0oRVkcKs6a buTGQsFuzOu3a9tOBCgEVbXK25NPTGHIq+HQDZjXPnP/El/UQqO+gUMPxFBHAfCwS96o XrU/M/59cCvpvUVODD+3oLySC7b6zDxYwYyrw= MIME-Version: 1.0 Sender: sentstory@gmail.com Reply-To: tharindu@sentstory.com Received: by 10.100.132.4 with SMTP id f4mr6034283and.109.1246787574625; Sun, 05 Jul 2009 02:52:54 -0700 (PDT) In-Reply-To: <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> References: <7778c60e0907030557j357f88e5g4ab3ce0d3377bb41@mail.gmail.com> <6efe08af0907030741q3befbfc5m8c208249dd5cad15@mail.gmail.com> <7778c60e0907030824k723c4ddetdead0a1d43835476@mail.gmail.com> <8B9C6BFA-0092-4AEA-9552-59A9291B68D9@sgi.com> Date: Sun, 5 Jul 2009 15:22:54 +0530 X-Google-Sender-Auth: 6448430bf964428a Message-ID: <7778c60e0907050252x4ca88f51vca131ce05be47f01@mail.gmail.com> X-ASG-Orig-Subj: Re: Clustered version of XFS Subject: Re: Clustered version of XFS From: Tharindu Rukshan Bamunuarachchi To: Felix Blyakher Cc: "Vitaly V. Ch" , sandeen@sandeen.net, xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-yx0-f203.google.com[209.85.210.203] X-Barracuda-Start-Time: 1246787977 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0207 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.2585 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 thankx, i want to believe that CXFS will perform same or better than XFS. __ tharindu On Sun, Jul 5, 2009 at 9:30 AM, Felix Blyakher wrote: > > On Jul 3, 2009, at 10:24 AM, Tharindu Rukshan Bamunuarachchi wrote: > >> Thankx lot for your responses. >> >> >> I recently send inqury over SGI website. Still no-reply. > > Today is a national holiday in US, and SGI was closed yesterday. > I'm sure somebody will get back to you on Monday. > >> If there is someone related to SGI's CXFS in this list, please be kind >> enough to provide contact details. > > I forwarded you inquiry to right channels. You should hear from > SGI soon. > >> one of the world largest stock market likes to try out CXFS .... > > Hope you will like CXFS. > > Felix > >> __ >> tharindu >> >> >> >> On Fri, Jul 3, 2009 at 8:11 PM, Vitaly V. Ch wrot= e: >>> >>> On Fri, Jul 3, 2009 at 3:57 PM, Tharindu Rukshan >>> Bamunuarachchi wrote: >>>> >>>> we are using XFS high speed transaction processing system. >>>> >>>> we are very happy with XFS performance compared to ZFS, EXT3, JFS etc. >>>> >>>> i have two questions regarding XFS ... >>>> >>>> 1. Is there any cluster version of XFS. (e.g. like GFS, Luste, GPFS) >>> >>> Yes. Your need cxfs. >>> >>>> 2. I am currently using my root partition as XFS. but i need to modify >>>> XFS source code and reload module without rebooting machine. >>>> =A0 Is there anyway to play with XFS source/module while using XFS >>>> module for mounted file system ....? >>> >>> Yes. duplicate Your code and use non-reloadable copy for root fs and >>> reloadable under other name ("my_xfs" for example) for other >>> partitions. >>> >>>> >>>> >>>> cheers >>>> __ >>>> tharindu >>>> >>> >>> \\wbr Vitaly Chernookiy >>> >>>> _______________________________________________ >>>> xfs mailing list >>>> xfs@oss.sgi.com >>>> http://oss.sgi.com/mailman/listinfo/xfs >>>> >>> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > From sandeen@sandeen.net Sun Jul 5 12:23:07 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 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 n65HN5P3038539 for ; Sun, 5 Jul 2009 12:23:06 -0500 X-ASG-Debug-ID: 1246815020-115e01fa0000-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 7162B1309523 for ; Sun, 5 Jul 2009 10:30:20 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id w2NtNZHNJY7CdvQY for ; Sun, 05 Jul 2009 10:30:20 -0700 (PDT) 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 D6EF38D78C5 for ; Sun, 5 Jul 2009 12:23:35 -0500 (CDT) Message-ID: <4A50E197.3070209@sandeen.net> Date: Sun, 05 Jul 2009 12:23:35 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH (trivial)] remove XFS_INO64_OFFSET Subject: [PATCH (trivial)] remove XFS_INO64_OFFSET 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: 1246815022 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.2615 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 Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the ino64 option but left the XFS_INO64_OFFSET define it used in place - just remove it. Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/xfs_inum.h b/fs/xfs/xfs_inum.h index 7a28191..b8e4ee4 100644 --- a/fs/xfs/xfs_inum.h +++ b/fs/xfs/xfs_inum.h @@ -72,7 +72,6 @@ struct xfs_mount; #if XFS_BIG_INUMS #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) -#define XFS_INO64_OFFSET ((xfs_ino_t)(1ULL << 32)) #else #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 32) - 1ULL)) #endif From egcdcgis@nb.aibn.com Sun Jul 5 13:23:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.9 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, SUBJ_ALL_CAPS,URIBL_SBL 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 n65IN05x041434 for ; Sun, 5 Jul 2009 13:23:00 -0500 X-ASG-Debug-ID: 1246818213-2c6f00860000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tomts35-srv.bellnexxia.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 48F15342C59 for ; Sun, 5 Jul 2009 11:23:33 -0700 (PDT) Received: from tomts35-srv.bellnexxia.net (tomts35-srv.bellnexxia.net [209.226.175.109]) by cuda.sgi.com with ESMTP id Yu9j5kYaKproxZ0t for ; Sun, 05 Jul 2009 11:23:33 -0700 (PDT) Received: from toip35-bus.srvr.bell.ca ([67.69.240.36]) by tomts35-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20090705182333.OWYF8518.tomts35-srv.bellnexxia.net@toip35-bus.srvr.bell.ca>; Sun, 5 Jul 2009 14:23:33 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AkUJAJ+MUErR4q/5/2dsb2JhbACBMIo6gxSJFoFeozaMOII2GgeBJgU Received: from tofep1.bellnexxia.net (HELO smtp.bellnexxia.net) ([209.226.175.249]) by toip35-bus.srvr.bell.ca with SMTP; 05 Jul 2009 14:23:32 -0400 X-Mailer: Openwave WebEngine, version 2.8.11 (webedge20-101-194-20030622) X-Originating-IP: [65.120.57.68] From: Reply-To: cgnlcenter@9.cn To: X-ASG-Orig-Subj: =?ISO-8859-1?B?KioqSkFDS1BPVEpPWaMxLDIzMCw=?= =?ISO-8859-1?B?MzEw?= GBP*** Subject: =?ISO-8859-1?B?KioqSkFDS1BPVEpPWaMxLDIzMCw=?= =?ISO-8859-1?B?MzEw?= GBP*** Date: Sun, 5 Jul 2009 14:23:32 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Message-Id: <20090705182333.OWYF8518.tomts35-srv.bellnexxia.net@toip35-bus.srvr.bell.ca> X-Barracuda-Connect: tomts35-srv.bellnexxia.net[209.226.175.109] X-Barracuda-Start-Time: 1246818214 X-Barracuda-Bayes: INNOCENT GLOBAL 0.7575 1.0000 1.8374 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.84 X-Barracuda-Spam-Status: No, SCORE=1.84 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2620 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean You have won congratulation,Please Verify this mail by sending your name, address, age, phone number Occuption etc to cgnlcenter@9.cn From BATV+2656bd01c2aa4c7de599+2142+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 5 14:38:21 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 n65JcFvs045012 for ; Sun, 5 Jul 2009 14:38:21 -0500 X-ASG-Debug-ID: 1246822728-2f5501980000-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 8BE29342DDF for ; Sun, 5 Jul 2009 12:38:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id NwSl991HZV5W3ySu for ; Sun, 05 Jul 2009 12:38:48 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNXY0-0000oM-AF; Sun, 05 Jul 2009 19:38:48 +0000 Date: Sun, 5 Jul 2009 15:38:48 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Subject: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Message-ID: <20090705193848.GA1330@infradead.org> References: <4A50E197.3070209@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A50E197.3070209@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246822729 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 On Sun, Jul 05, 2009 at 12:23:35PM -0500, Eric Sandeen wrote: > Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the > ino64 option but left the XFS_INO64_OFFSET define it used > in place - just remove it. Looks good to me. From BATV+2656bd01c2aa4c7de599+2142+infradead.org+hch@bombadil.srs.infradead.org Sun Jul 5 14:40:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.1 required=5.0 tests=AWL,BAYES_00,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 n65JecHZ045184 for ; Sun, 5 Jul 2009 14:40:38 -0500 X-ASG-Debug-ID: 1246822871-1d4301a80000-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 7FF371AF22F1 for ; Sun, 5 Jul 2009 12:41:11 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id xFd1umf4Aa7GRZFh for ; Sun, 05 Jul 2009 12:41:11 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNXaJ-0007JZ-6T for xfs@oss.sgi.com; Sun, 05 Jul 2009 19:41:11 +0000 Date: Sun, 5 Jul 2009 15:41:11 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: add tests to check log size scaling Subject: [PATCH] xfstests: add tests to check log size scaling Message-ID: <20090705194111.GA3834@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246822872 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 XFS-QA test to check that log size scaling works correctly for old and new maximum log sizes. [hch: split into two testcases for old "small" log scaling and the large logs that require recent xfsprogs, and reduce the maximum size by 1GB to make it possible to run the test on 32 bit platforms] Signed-off-by: Dave Chinner Signed-off-by: Christoph Hellwig Index: xfstests-dev/216 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/216 2009-07-05 09:11:49.000000000 +0000 @@ -0,0 +1,79 @@ +#! /bin/sh +# FS QA Test No. 216 +# +# log size mkfs test - ensure the log size scaling works for small filesystems +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=dgc@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_setup_testdir +_require_scratch +_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mount + +_require_loop +LOOP_DEV=$SCRATCH_MNT/test_fs +LOOP_MNT=$SCRATCH_MNT/test_fs_dir + +_do_mkfs() +{ + for i in $*; do + echo -n "fssize=${i}g " + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ + -d name=$LOOP_DEV,size=${i}g |grep log + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT + echo "test write" > $LOOP_MNT/test + umount $LOOP_MNT + done +} +# make large holey file +$XFS_IO_PROG -f -c "truncate 256g" $LOOP_DEV + +#make loopback mount dir +mkdir $LOOP_MNT + +# walk over standard sizes (up to 256GB) +_do_mkfs 1 2 4 8 16 32 64 128 256 + +status=0 +exit Index: xfstests-dev/216.out =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/216.out 2009-07-05 09:07:36.000000000 +0000 @@ -0,0 +1,10 @@ +QA output created by 216 +fssize=1g log =internal log bsize=4096 blocks=2560, version=2 +fssize=2g log =internal log bsize=4096 blocks=2560, version=2 +fssize=4g log =internal log bsize=4096 blocks=2560, version=2 +fssize=8g log =internal log bsize=4096 blocks=2560, version=2 +fssize=16g log =internal log bsize=4096 blocks=2560, version=2 +fssize=32g log =internal log bsize=4096 blocks=4096, version=2 +fssize=64g log =internal log bsize=4096 blocks=8192, version=2 +fssize=128g log =internal log bsize=4096 blocks=16384, version=2 +fssize=256g log =internal log bsize=4096 blocks=32768, version=2 Index: xfstests-dev/group =================================================================== --- xfstests-dev.orig/group 2009-07-04 18:07:55.000000000 +0000 +++ xfstests-dev/group 2009-07-05 09:16:04.000000000 +0000 @@ -324,3 +324,5 @@ 213 rw auto prealloc quick 214 rw auto prealloc quick 215 auto metadata quick +216 log metadata auto quick +217 log metadata auto Index: xfstests-dev/217 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/217 2009-07-05 09:26:57.000000000 +0000 @@ -0,0 +1,89 @@ +#! /bin/sh +# FS QA Test No. 217 +# +# large log size mkfs test - ensure the log size scaling works +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +#----------------------------------------------------------------------- +# +# creator +owner=dgc@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* + _cleanup_testdir +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs xfs +_supported_os Linux + +_setup_testdir +_require_scratch +_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mount + +_require_loop +LOOP_DEV=$SCRATCH_MNT/test_fs +LOOP_MNT=$SCRATCH_MNT/test_fs_dir + +_do_mkfs() +{ + for i in $*; do + echo -n "fssize=${i}g " + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ + -d name=$LOOP_DEV,size=${i}g |grep log + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT + echo "test write" > $LOOP_MNT/test + umount $LOOP_MNT + done +} +# make large holey file +$XFS_IO_PROG -f -c "truncate 16383g" $LOOP_DEV + +#make loopback mount dir +mkdir $LOOP_MNT + +# test if large logs are supported +$MKFS_XFS_PROG -f -l size=256m -d name=$LOOP_DEV,size=10g > /dev/null 2>&1 +if [ $? -ne 0 ]; then + _notrun "large log sizes not supported by mkfs" +fi + +# +# walk over "new" sizes supported by recent xfsprogs. +# Note that the last test is for 16TB-1GB as 32bit platforms only support +# device slightly smaller than 16TB. +# +_do_mkfs 512 1024 2048 4096 8192 16383 + +status=0 +exit Index: xfstests-dev/217.out =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfstests-dev/217.out 2009-07-05 09:20:17.000000000 +0000 @@ -0,0 +1,7 @@ +QA output created by 217 +fssize=512g log =internal log bsize=4096 blocks=65536, version=2 +fssize=1024g log =internal log bsize=4096 blocks=131072, version=2 +fssize=2048g log =internal log bsize=4096 blocks=262144, version=2 +fssize=4096g log =internal log bsize=4096 blocks=521728, version=2 +fssize=8192g log =internal log bsize=4096 blocks=521728, version=2 +fssize=16383g log =internal log bsize=4096 blocks=521728, version=2 From felixb@sgi.com Sun Jul 5 15:20:42 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 relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n65KKg0K047328 for ; Sun, 5 Jul 2009 15:20:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id A983A8F8035 for ; Sun, 5 Jul 2009 13:21:13 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 3CEBE7000103; Sun, 5 Jul 2009 15:21:13 -0500 (CDT) Cc: xfs-oss Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <4A50E197.3070209@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH (trivial)] remove XFS_INO64_OFFSET Date: Sun, 5 Jul 2009 15:21:11 -0500 References: <4A50E197.3070209@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Jul 5, 2009, at 12:23 PM, Eric Sandeen wrote: > Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the > ino64 option but left the XFS_INO64_OFFSET define it used > in place - just remove it. > > Signed-off-by: Eric Sandeen Reviewed-by: Felix Blyakher > > --- > > diff --git a/fs/xfs/xfs_inum.h b/fs/xfs/xfs_inum.h > index 7a28191..b8e4ee4 100644 > --- a/fs/xfs/xfs_inum.h > +++ b/fs/xfs/xfs_inum.h > @@ -72,7 +72,6 @@ struct xfs_mount; > > #if XFS_BIG_INUMS > #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 56) - 1ULL)) > -#define XFS_INO64_OFFSET ((xfs_ino_t)(1ULL << 32)) > #else > #define XFS_MAXINUMBER ((xfs_ino_t)((1ULL << 32) - 1ULL)) > #endif > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@oss.sgi.com Sun Jul 5 20:16:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n661G6eV058815 for ; Sun, 5 Jul 2009 20:16:06 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n661G5ij058786; Sun, 5 Jul 2009 20:16:05 -0500 Date: Sun, 5 Jul 2009 20:16:05 -0500 Message-Id: <200907060116.n661G5ij058786@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-1244-gb560634 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: ab8b9baac3f48fb3fc3d47790950c0eec134e678 X-Git-Newrev: b56063453881a6d94cf5718c6769de6e35e67753 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated b560634 xfs: remove XFS_INO64_OFFSET from ab8b9baac3f48fb3fc3d47790950c0eec134e678 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b56063453881a6d94cf5718c6769de6e35e67753 Author: Eric Sandeen Date: Sun Jul 5 12:23:35 2009 -0500 xfs: remove XFS_INO64_OFFSET Commit a19d9f887d81106d52cacbc9930207b487e07e0e removed the ino64 option but left the XFS_INO64_OFFSET define it used in place - just remove it. Signed-off-by: Eric Sandeen Reviewed-by: Christoph Hellwig Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_inum.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Mon Jul 6 00:32:18 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 relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n665WHvt071522 for ; Mon, 6 Jul 2009 00:32:17 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 944388F8096 for ; Sun, 5 Jul 2009 22:32:49 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 32B947000103 for ; Mon, 6 Jul 2009 00:32:49 -0500 (CDT) Message-Id: From: Felix Blyakher To: xfs-oss list Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: maintainer on vacation, backup from sgi Date: Mon, 6 Jul 2009 00:32:47 -0500 X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, I'm going to be on vacation and not reachable till July 20. The whole xfs SGI team will be backing me up for the maintainership tasks. The point man for this, though, will be Olaf Weber . See you all in two weeks. Felix From sandeen@sandeen.net Mon Jul 6 13:25:03 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 n66IP3dR102914 for ; Mon, 6 Jul 2009 13:25:03 -0500 X-ASG-Debug-ID: 1246905145-7ebb01360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3692A9E798C for ; Mon, 6 Jul 2009 11:32:25 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id LuyRK26nHQnObAnG for ; Mon, 06 Jul 2009 11:32:25 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n66IPaZX018178 for ; Mon, 6 Jul 2009 14:25:36 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n66IPZOZ005312 for ; Mon, 6 Jul 2009 14:25:35 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n66IPYDQ013176 for ; Mon, 6 Jul 2009 14:25:34 -0400 Message-ID: <4A52419E.5020301@sandeen.net> Date: Mon, 06 Jul 2009 13:25:34 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH, RFC] default to inode64 on 64-bit systems Subject: [PATCH, RFC] default to inode64 on 64-bit systems Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1246905146 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.2705 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 I'm tiring of telling people to use the inode64 mount option when they are experiencing bad performance on large xfs filesystems... 32-bit userspace is still largely broken when it comes to still using 32-bit stat calls, but on 64-bit systems this should be safe. The only problem here is moving the disk onto a 32-bit system, or using 32-bit apps. But I think it's a small risk. What do we think about the following? Thanks, -Eric Signed-off-by: Eric Sandeen --- diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index a220d36..5d134fd 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c @@ -195,7 +195,9 @@ xfs_parseargs( */ mp->m_flags |= XFS_MOUNT_BARRIER; mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; +#if BITS_PER_LONG == 32 mp->m_flags |= XFS_MOUNT_SMALL_INUMS; +#endif /* * These can be overridden by the mount option parsing. From BATV+5a26e7b33d6d7fac9e67+2143+infradead.org+hch@bombadil.srs.infradead.org Mon Jul 6 13:47:25 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 n66IlNGB103947 for ; Mon, 6 Jul 2009 13:47:25 -0500 X-ASG-Debug-ID: 1246906486-7e4c01630000-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 38282603586 for ; Mon, 6 Jul 2009 11:54:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id F749aTZiNLQ6fATs for ; Mon, 06 Jul 2009 11:54:47 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MNt9V-0004n6-MJ; Mon, 06 Jul 2009 18:42:57 +0000 Date: Mon, 6 Jul 2009 14:42:57 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090706184257.GA18107@infradead.org> References: <4A52419E.5020301@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52419E.5020301@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246906487 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 On Mon, Jul 06, 2009 at 01:25:34PM -0500, Eric Sandeen wrote: > I'm tiring of telling people to use the inode64 mount option > when they are experiencing bad performance on large xfs > filesystems... > > 32-bit userspace is still largely broken when it comes to still > using 32-bit stat calls, but on 64-bit systems this should be > safe. > > The only problem here is moving the disk onto a 32-bit system, or using > 32-bit apps. But I think it's a small risk. > > What do we think about the following? Looks good to me, but it could use a comment in the code explaining why we do this. From sandeen@sandeen.net Mon Jul 6 23:00: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 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 n6740jTV124053 for ; Mon, 6 Jul 2009 23:00:45 -0500 X-ASG-Debug-ID: 1246939277-184e03280000-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 3263C1AFCDC6 for ; Mon, 6 Jul 2009 21:01:18 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id WTTbgsbyjGiyp35T for ; Mon, 06 Jul 2009 21:01:18 -0700 (PDT) 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 7A98DA9BE20; Mon, 6 Jul 2009 23:01:16 -0500 (CDT) Message-ID: <4A52C88C.2040600@sandeen.net> Date: Mon, 06 Jul 2009 23:01:16 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes References: <20090704182742.GA11083@infradead.org> In-Reply-To: <20090704182742.GA11083@infradead.org> 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: 1246939279 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.2740 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 Christoph Hellwig wrote: > Check that we correctly update the timestamps when writing to a file > through an mmap mapping. Currently fails for XFS due a VFS bug but > succeeds for many other filesystems. > > > Signed-off-by: Christoph Hellwig Test seems mostly ok, but aren't you missing 215.out in the patch? couple comments below > Index: xfstests-dev/215 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/215 2009-07-04 18:25:43.000000000 +0000 > @@ -0,0 +1,87 @@ > +#! /bin/sh > +# FS QA Test No. 215 > +# > +# Test out c/mtime updates after mapped writes. > +# > +# Based on the testcase in http://bugzilla.kernel.org/show_bug.cgi?id=2645 > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2009 Christoph Hellwig. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=hch@lst.de > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +_cleanup() > +{ > + cd / > + rm -f $testfile > +} > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs generic > +_supported_os Linux > + > +testfile=$TEST_DIR/tst.mmap > + > +echo > +echo "creating test file" > +dd if=/dev/zero of=$testfile count=4096 > + > +mtime1=`stat --printf="%Y" $testfile` > +ctime1=`stat --printf="%Z" $testfile` > + > +sleep 1 Is there any slight chance a sleep 1 won't catch it? Would sleep 2 do better to be sure? > +echo > +echo "writing via mmap" > +$XFS_IO_PROG -F -f \ > + -c 'mmap 0 4096' \ > + -c 'mwrite 0 4096' \ > + $testfile | _filter_xfs_io_unique > + > +mtime2=`stat --printf="%Y" $testfile` > +ctime2=`stat --printf="%Z" $testfile` > + > +let mtime_diff=$mtime2-$mtime1 > +let ctime_diff=$ctime2-$ctime1 > + > +if [ "$mtime_diff" -eq "0" ]; then > + echo "FAIL: mtime not update after mapped write" > + status=1 > +fi > + > +if [ "$ctime_diff" -eq "0" ]; then > + echo "FAIL: ctime not update after mapped write" > + status=1 > +fi Should these just be _fail calls? Otherwise... > +# success, all done > +echo "*** done" > +rm -f $seq.full > +status=0 don't you always exit w/ status 0 and remove the full output? I guess i'm not sure when to use _fail and when to let the golden output difference kill the test, I suppose it doesn't much matter, it should pass & fail correctly either way. -Eric > Index: xfstests-dev/group > =================================================================== > --- xfstests-dev.orig/group 2009-07-04 18:07:40.000000000 +0000 > +++ xfstests-dev/group 2009-07-04 18:07:55.000000000 +0000 > @@ -323,3 +323,4 @@ > 212 auto aio quick > 213 rw auto prealloc quick > 214 rw auto prealloc quick > +215 auto metadata quick > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Mon Jul 6 23:10:29 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 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 n674ATtI124290 for ; Mon, 6 Jul 2009 23:10:29 -0500 X-ASG-Debug-ID: 1246939863-4ac1016b0000-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 E255D347997 for ; Mon, 6 Jul 2009 21:11:03 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id RNHy0V5CwW65hsHE for ; Mon, 06 Jul 2009 21:11:03 -0700 (PDT) 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 C9646A9B0A7; Mon, 6 Jul 2009 23:11:02 -0500 (CDT) Message-ID: <4A52CAD6.1070807@sandeen.net> Date: Mon, 06 Jul 2009 23:11:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling References: <20090705194111.GA3834@infradead.org> In-Reply-To: <20090705194111.GA3834@infradead.org> 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: 1246939863 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.2740 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 Christoph Hellwig wrote: > XFS-QA test to check that log size scaling works correctly > for old and new maximum log sizes. > > [hch: split into two testcases for old "small" log scaling and the > large logs that require recent xfsprogs, and reduce the maximum > size by 1GB to make it possible to run the test on 32 bit platforms] > > Signed-off-by: Dave Chinner > Signed-off-by: Christoph Hellwig minor question below > > Index: xfstests-dev/216 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/216 2009-07-05 09:11:49.000000000 +0000 > @@ -0,0 +1,79 @@ > +#! /bin/sh > +# FS QA Test No. 216 > +# > +# log size mkfs test - ensure the log size scaling works for small filesystems > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=dgc@sgi.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > + _cleanup_testdir > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > + > +_setup_testdir > +_require_scratch > +_scratch_mkfs_xfs >/dev/null 2>&1 > +_scratch_mount Any reason to do this on the scratch dir vs. the test dir? (Since scratch dir became optional, I figure stuff that can go on the test dev instead, probably should?) not a big deal, it looks fine otherwise. -Eric > +_require_loop > +LOOP_DEV=$SCRATCH_MNT/test_fs > +LOOP_MNT=$SCRATCH_MNT/test_fs_dir > + > +_do_mkfs() > +{ > + for i in $*; do > + echo -n "fssize=${i}g " > + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ > + -d name=$LOOP_DEV,size=${i}g |grep log > + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT > + echo "test write" > $LOOP_MNT/test > + umount $LOOP_MNT > + done > +} > +# make large holey file > +$XFS_IO_PROG -f -c "truncate 256g" $LOOP_DEV > + > +#make loopback mount dir > +mkdir $LOOP_MNT > + > +# walk over standard sizes (up to 256GB) > +_do_mkfs 1 2 4 8 16 32 64 128 256 > + > +status=0 > +exit > Index: xfstests-dev/216.out > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/216.out 2009-07-05 09:07:36.000000000 +0000 > @@ -0,0 +1,10 @@ > +QA output created by 216 > +fssize=1g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=2g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=4g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=8g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=16g log =internal log bsize=4096 blocks=2560, version=2 > +fssize=32g log =internal log bsize=4096 blocks=4096, version=2 > +fssize=64g log =internal log bsize=4096 blocks=8192, version=2 > +fssize=128g log =internal log bsize=4096 blocks=16384, version=2 > +fssize=256g log =internal log bsize=4096 blocks=32768, version=2 > Index: xfstests-dev/group > =================================================================== > --- xfstests-dev.orig/group 2009-07-04 18:07:55.000000000 +0000 > +++ xfstests-dev/group 2009-07-05 09:16:04.000000000 +0000 > @@ -324,3 +324,5 @@ > 213 rw auto prealloc quick > 214 rw auto prealloc quick > 215 auto metadata quick > +216 log metadata auto quick > +217 log metadata auto > Index: xfstests-dev/217 > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/217 2009-07-05 09:26:57.000000000 +0000 > @@ -0,0 +1,89 @@ > +#! /bin/sh > +# FS QA Test No. 217 > +# > +# large log size mkfs test - ensure the log size scaling works > +# > +#----------------------------------------------------------------------- > +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. > +# > +# This program is free software; you can redistribute it and/or > +# modify it under the terms of the GNU General Public License as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it would be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program; if not, write the Free Software Foundation, > +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > +#----------------------------------------------------------------------- > +# > +# creator > +owner=dgc@sgi.com > + > +seq=`basename $0` > +echo "QA output created by $seq" > + > +here=`pwd` > +tmp=/tmp/$$ > +status=1 # failure is the default! > +trap "_cleanup; exit \$status" 0 1 2 3 15 > + > +_cleanup() > +{ > + cd / > + rm -f $tmp.* > + _cleanup_testdir > +} > + > +# get standard environment, filters and checks > +. ./common.rc > +. ./common.filter > + > +# real QA test starts here > +_supported_fs xfs > +_supported_os Linux > + > +_setup_testdir > +_require_scratch > +_scratch_mkfs_xfs >/dev/null 2>&1 > +_scratch_mount > + > +_require_loop > +LOOP_DEV=$SCRATCH_MNT/test_fs > +LOOP_MNT=$SCRATCH_MNT/test_fs_dir > + > +_do_mkfs() > +{ > + for i in $*; do > + echo -n "fssize=${i}g " > + $MKFS_XFS_PROG -f -b size=4096 -l version=2 \ > + -d name=$LOOP_DEV,size=${i}g |grep log > + mount -o loop -t xfs $LOOP_DEV $LOOP_MNT > + echo "test write" > $LOOP_MNT/test > + umount $LOOP_MNT > + done > +} > +# make large holey file > +$XFS_IO_PROG -f -c "truncate 16383g" $LOOP_DEV > + > +#make loopback mount dir > +mkdir $LOOP_MNT > + > +# test if large logs are supported > +$MKFS_XFS_PROG -f -l size=256m -d name=$LOOP_DEV,size=10g > /dev/null 2>&1 > +if [ $? -ne 0 ]; then > + _notrun "large log sizes not supported by mkfs" > +fi > + > +# > +# walk over "new" sizes supported by recent xfsprogs. > +# Note that the last test is for 16TB-1GB as 32bit platforms only support > +# device slightly smaller than 16TB. > +# > +_do_mkfs 512 1024 2048 4096 8192 16383 > + > +status=0 > +exit > Index: xfstests-dev/217.out > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfstests-dev/217.out 2009-07-05 09:20:17.000000000 +0000 > @@ -0,0 +1,7 @@ > +QA output created by 217 > +fssize=512g log =internal log bsize=4096 blocks=65536, version=2 > +fssize=1024g log =internal log bsize=4096 blocks=131072, version=2 > +fssize=2048g log =internal log bsize=4096 blocks=262144, version=2 > +fssize=4096g log =internal log bsize=4096 blocks=521728, version=2 > +fssize=8192g log =internal log bsize=4096 blocks=521728, version=2 > +fssize=16383g log =internal log bsize=4096 blocks=521728, version=2 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From SEMA-CR-1-58SIH9@ptcmarketing.com Tue Jul 7 01:13:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.5 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE 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 n676DK20130010 for ; Tue, 7 Jul 2009 01:13:20 -0500 X-ASG-Debug-ID: 1246947233-4ab203670000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay2.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2196B347B4A for ; Mon, 6 Jul 2009 23:13:53 -0700 (PDT) Received: from relay2.ptc.com (relay2.ptc.com [12.11.148.122]) by cuda.sgi.com with ESMTP id oYnKAFeNQ4AePMMG for ; Mon, 06 Jul 2009 23:13:53 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.42,361,1243828800"; d="scan'208,217";a="305349706" Received: from hqcrmprdint18.ptcnet.ptc.com ([132.253.201.206]) by crmmaxx.ptc.com with ESMTP; 07 Jul 2009 02:12:44 -0400 To: MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Info" X-ASG-Orig-Subj: Upgrade to ProductView Professional - Now Available at the PTC Web Store Subject: Upgrade to ProductView Professional - Now Available at the PTC Web Store Sender: "PTC Info" Message-ID: Content-Type: multipart/alternative; boundary=BF_1246946970080_2118487217 X-Barracuda-Connect: relay2.ptc.com[12.11.148.122] X-Barracuda-Start-Time: 1246947234 Date: Mon, 6 Jul 2009 23:13:53 -0700 (PDT) X-Barracuda-Bayes: INNOCENT GLOBAL 0.3864 1.0000 -0.0363 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.78 X-Barracuda-Spam-Status: No, SCORE=0.78 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC5_SA210e, HTML_MESSAGE, MIME_QP_LONG_LINE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2747 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.82 MIME_QP_LONG_LINE RAW: Quoted-printable line longer than 76 chars 0.00 BSF_SC5_SA210e Custom Rule SA210e X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1246946970080_2118487217 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Now Available at the PTC Web Store =E2=80=93 ProductView Lite to MCAD Profes= sional Upgrade (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4AOWXZ= &o=3D= 1-50D7OL= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fviewupgrade) ProductView MCAD Professional =E2=80=93 Ultra Scalable Visual Collaboration ProductView MCAD Professional is a universal viewer that brings 3D MCAD prod= uct models, assemblies, drawings, images and documents to everyone=E2=80=99s= desktop for comprehensive interrogation and visual collaboration=E2=80=93al= l without the need for native authoring applications. Key Benefits: =E2=80=A2 Accelerate the Design Process =E2=80=93 By offering comprehensive = view, markup and annotation tools, and market-leading performance, ProductVi= ew MCAD Professional can accelerate the important design reviews that occur = throughout the product development process. Now people around the world can = simultaneously be involved in the design process. And, with its ultrascalabi= lity, ProductView MCAD Professional supports a full range of visualization, = spanning from simple desktop viewing of single CAD models to the interaction with your most massi= ve digital models of over one million parts. =E2=80=A2 Reduce IT Infrastructure to Overhead =E2=80=93 Having a single too= l toview many types of detailed product data lowers the amount of overhead r= equiredfrom the IT department. A common, consistent interface that can acces= s digitalproduct definition data across the enterprise lowers expenses assoc= iated withsoftware maintenance, product upgrades and internal training. Elim= inating datainteroperability issues translates into lower overhead and highe= r productivity. =E2=80=A2 Improve Efficiency =E2=80=93 Productivity improves by allowing eng= ineersto easily share visual information across the enterprise, while still = permitting users to accurately measure dimensions. Not only can ProductView = MCAD Professional accelerate time-to-market, but its visual collaboration an= d markup capabilities can also help reduce costs. =E2=80=A2 Increase Control and Security =E2=80=93 ProductView MCAD Professio= nal allows critical business documents (both drawings and 2D documents) to b= e securely managed when collaborating on projects both within and beyond the= enterprise.Now, you can view more information and easily and instantly purc= hase ProductView products from the PTC Web Store. To upgrade to ProductView MCAD Professional or to visit the PTC Web Store, g= o to: http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-4AOWXZ= &o=3D= 1-50D7OL= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fgo%2Fviewupgrade =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-50D7OL= &campd=3D= 1-4AOWXZ= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change email preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-50D7OL= &campd=3D= 1-4AOWXZ= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1246946970080_2118487217 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Upgrade System Notice Email Q309 NA SMB DR - ProductView
3D"PTC.com"

Now Available = at the PTC Web Store – ProductView Lite to MCAD Professional Upgrade=20

ProductView MCAD Professional – Ultra Scalable Visual Colla= boration

ProductView MCAD Professional is a universal viewer that brings 3D MCAD p= roduct models, assemblies, drawings, images and documents to everyone’= s desktop for comprehensive interrogation and visual collaboration–all= without the need for native authoring applications.

Key Benefits:

•       Accelerate the Design= Process – By offering comprehensive view, markup and annotat= ion tools, and market-leading performance, ProductView MCAD Professional can= accelerate the important design reviews that occur throughout the product d= evelopment process. Now people around the world can simultaneously be involv= ed in the design process. And, with its ultrascalability, ProductView MCAD P= rofessional supports a full range of visualization, spanning from simple des= ktop viewing of single CAD models to the interaction with your most massive = digital models of over one million parts.

•       Reduce IT Infrastruct= ure to Overhead – Having a single tool to view many types of = detailed product data lowers the amount of overhead required from the IT dep= artment. A common, consistent interface that can access digital product defi= nition data across the enterprise lowers expenses associated with software m= aintenance, product upgrades and internal training. Eliminating data interop= erability issues translates into lower overhead and higher productivity.

•       Improve Efficiency &#= 8211; Productivity improves by allowing engineers to easily share v= isual information across the enterprise, while still permitting users to acc= urately measure dimensions. Not only can ProductView MCAD Professional accel= erate time-to-market, but its visual collaboration and markup capabilities c= an also help reduce costs.

•       Increase Control and = Security – ProductView MCAD Professional allows critical busi= ness documents (both drawings and 2D documents) to be securely managed when = collaborating on projects both within and beyond the enterprise.Now, you can= view more information and easily and instantly purchase ProductView product= s from the PTC Web Store.

To upgrade to ProductView MCAD Professional or to visit the PTC W= eb Store, go to: www.ptc.com/go= /viewupgrade

3D""

contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1246946970080_2118487217-- From info@uio.no Tue Jul 7 03:42: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=BAYES_20,SUBJ_ATTENTION 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 n678gjxA133918 for ; Tue, 7 Jul 2009 03:42:45 -0500 X-ASG-Debug-ID: 1246956199-666a004b0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from olc-14.verat.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3B50A34820B for ; Tue, 7 Jul 2009 01:43:19 -0700 (PDT) Received: from olc-14.verat.net (olc-14.verat.net [62.108.127.40]) by cuda.sgi.com with ESMTP id vyaIp9g5x7ai009t for ; Tue, 07 Jul 2009 01:43:19 -0700 (PDT) Received: from webmail.verat.net (webmail.verat.net [85.222.160.153]) by olc-14.verat.net (Postfix) with ESMTP id 56409C0827; Tue, 7 Jul 2009 10:38:21 +0200 (CEST) Received: from 41.220.75.3 (SquirrelMail authenticated user chuch) by webmail.verat.net with HTTP; Tue, 7 Jul 2009 10:43:16 +0200 (CEST) Message-ID: <47552.41.220.75.3.1246956196.squirrel@webmail.verat.net> Date: Tue, 7 Jul 2009 10:43:16 +0200 (CEST) X-ASG-Orig-Subj: ATTENTION: Subject: ATTENTION: From: "Universitetet i Oslo (UiO)" Reply-To: account.unitq12@gmail.com User-Agent: SquirrelMail/1.4.13 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-Barracuda-Connect: olc-14.verat.net[62.108.127.40] X-Barracuda-Start-Time: 1246956200 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3970 1.0000 -0.0077 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.01 X-Barracuda-Spam-Status: No, SCORE=-0.01 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.2756 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 ATTENTION: Denne posten er å informere alle våre [Uio.no] brukere at webmail konto har blitt kompromittert av spammere ved å få tilgang til din webmail konto og har brukt den til ulovlige internett-aktiviteter. Du er bedt om å gi din nåværende påloggings-IDen for at vi nullstiller din webpostkontoen passord umiddelbart å aviod misbruk av kontoen. * E-postadresse: * Gjeldende passord: * Future Passord: Du skal bli kontaktet med et nytt passord ved ferdigstillelse, og du er anbefales å gi informasjonen ovenfor eller kontoen din vil bli avbrutt av misbruk team. Takk for at du bruker Uio.no Webmail! Uio.no Vedlikehold Team. From olaf@sgi.com Tue Jul 7 03:59: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=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n678x6wU134291 for ; Tue, 7 Jul 2009 03:59:07 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n678xdK6275740; Tue, 7 Jul 2009 10:59:39 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n678xdwx275743; Tue, 7 Jul 2009 10:59:39 +0200 (MEST) To: Christoph Hellwig Cc: Eric Sandeen , xfs mailing list Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090706184257.GA18107@infradead.org> From: Olaf Weber Date: Tue, 07 Jul 2009 10:59:37 +0200 In-Reply-To: <20090706184257.GA18107@infradead.org> (Christoph Hellwig's message of "Mon, 6 Jul 2009 14:42:57 -0400") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig writes: > On Mon, Jul 06, 2009 at 01:25:34PM -0500, Eric Sandeen wrote: >> I'm tiring of telling people to use the inode64 mount option >> when they are experiencing bad performance on large xfs >> filesystems... >> >> 32-bit userspace is still largely broken when it comes to still >> using 32-bit stat calls, but on 64-bit systems this should be >> safe. >> >> The only problem here is moving the disk onto a 32-bit system, or using >> 32-bit apps. But I think it's a small risk. >> >> What do we think about the following? > Looks good to me, but it could use a comment in the code explaining why > we do this. Making inode64 the default on 64 bit systems seems like a good idea to me. But would it not be advisable to have a mount option that forces the old behaviour, just in case? Something like "broken32bituserspace" (or maybe "inode32"). -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From olaf@sgi.com Tue Jul 7 04:07:00 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=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6796xXZ134507 for ; Tue, 7 Jul 2009 04:07:00 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n6797VDe275899; Tue, 7 Jul 2009 11:07:32 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n6797Uk1275913; Tue, 7 Jul 2009 11:07:30 +0200 (MEST) To: Eric Sandeen Cc: xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, "MASON, CHRISTOPHER" Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage References: <4A4D26C5.9070606@redhat.com> From: Olaf Weber Date: Tue, 07 Jul 2009 11:07:30 +0200 In-Reply-To: <4A4D26C5.9070606@redhat.com> (Eric Sandeen's message of "Thu, 02 Jul 2009 16:29:41 -0500") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen writes: > Talking w/ someone who had a raid6 of 15 drives on an areca > controller, he wondered why he could only get 300MB/s or so > out of a streaming buffered write to xfs like so: > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s > when the same write directly to the device was going closer > to 700MB/s... > With the following change things get moving again for xfs: > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 16.2938 s, 659 MB/s > Chris had sent out something similar at Christoph's suggestion, > and Christoph reminded me of it, and I tested it a variant of > it, and it seems to help shockingly well. > Feels like a bandaid though; thoughts? Other tests to do? If the nr_to_write calculation really yields a value that is too small, shouldn't it be fixed elsewhere? Otherwise it might make sense to make the fudge factor tunable. > + > + /* > + * VM calculation for nr_to_write seems off. Bump it way > + * up, this gets simple streaming writes zippy again. > + */ > + wbc->nr_to_write *= 4; > + -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From ms@citd.de Tue Jul 7 04:37:54 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 (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n679br9i135713 for ; Tue, 7 Jul 2009 04:37:53 -0500 X-ASG-Debug-ID: 1246959911-3f1a01510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 43E719F20AE for ; Tue, 7 Jul 2009 02:45:11 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id 5lnjPOsbiLbYIFxQ for ; Tue, 07 Jul 2009 02:45:11 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id BF0842BCAC; Tue, 7 Jul 2009 11:38:18 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id 4GDdm3NdT1Qy; Tue, 7 Jul 2009 11:38:06 +0200 (CEST) Received: from citd.de (p4FC4D1F7.dip.t-dialin.net [79.196.209.247]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 246A62BC77; Tue, 7 Jul 2009 11:38:05 +0200 (CEST) Date: Tue, 7 Jul 2009 11:38:02 +0200 From: Matthias Schniedermeyer To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090707093802.GA32125@citd.de> References: <4A52419E.5020301@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52419E.5020301@sandeen.net> User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1246959913 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 06.07.2009 13:25, Eric Sandeen wrote: > I'm tiring of telling people to use the inode64 mount option > when they are experiencing bad performance on large xfs > filesystems... > > 32-bit userspace is still largely broken when it comes to still > using 32-bit stat calls, but on 64-bit systems this should be > safe. > > The only problem here is moving the disk onto a 32-bit system, or using > 32-bit apps. But I think it's a small risk. > > What do we think about the following? What is with people running 64bit kernel but 32bit Userspace? Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From mw@dermichi.com Tue Jul 7 05:12:30 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 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 n67ACTdT138193 for ; Tue, 7 Jul 2009 05:12:30 -0500 X-ASG-Debug-ID: 1246961995-71f503400000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from firestarter.dermichi.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D6825129A68C; Tue, 7 Jul 2009 03:19:56 -0700 (PDT) Received: from firestarter.dermichi.com (firestarter.dermichi.com [83.64.48.195]) by cuda.sgi.com with ESMTP id fm6PNvrZ9VZhtZdb; Tue, 07 Jul 2009 03:19:56 -0700 (PDT) Received: from cerberus.net4you.net ([194.177.153.130] helo=[192.168.200.110]) by firestarter.dermichi.com with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69) (envelope-from ) id 1MO7fa-0004g2-9y; Tue, 07 Jul 2009 12:13:02 +0200 Message-ID: <4A531FAB.3050406@dermichi.com> Date: Tue, 07 Jul 2009 12:12:59 +0200 From: Michael Weissenbacher User-Agent: Thunderbird 2.0.0.22 (X11/20090608) MIME-Version: 1.0 To: Olaf Weber CC: Christoph Hellwig , Eric Sandeen , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090706184257.GA18107@infradead.org> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: firestarter.dermichi.com[83.64.48.195] X-Barracuda-Start-Time: 1246961996 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1341 1.0000 -1.1918 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.59 X-Barracuda-Spam-Status: No, SCORE=-0.59 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2763 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi! > Making inode64 the default on 64 bit systems seems like a good idea to > me. But would it not be advisable to have a mount option that forces > the old behaviour, just in case? Something like "broken32bituserspace" > (or maybe "inode32"). > I think such a mount option would be a must. There is lots of 32-bit Software that cannot cope with 64-bit inodes. Unfortunately there are closed-source 32-bit apps (which can be run on 64 bit systems) where nothing can be done for 64-bit inode compatiblity in the short term. Had this problem very recently with the Zmanda Enterprise Backup Software, which forced me to remove the inode64 option. regards, Michael From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:17:04 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 n67AH2pd138418 for ; Tue, 7 Jul 2009 05:17:04 -0500 X-ASG-Debug-ID: 1246961857-666d03770000-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 2606D34864C for ; Tue, 7 Jul 2009 03:17:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nehaQs40YZiDGbhb for ; Tue, 07 Jul 2009 03:17:37 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7k1-0002Jh-BO; Tue, 07 Jul 2009 10:17:37 +0000 Date: Tue, 7 Jul 2009 06:17:37 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090707101737.GA1934@infradead.org> References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52C88C.2040600@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246961858 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 On Mon, Jul 06, 2009 at 11:01:16PM -0500, Eric Sandeen wrote: > Christoph Hellwig wrote: > > Check that we correctly update the timestamps when writing to a file > > through an mmap mapping. Currently fails for XFS due a VFS bug but > > succeeds for many other filesystems. > > > > > > Signed-off-by: Christoph Hellwig > > Test seems mostly ok, but aren't you missing 215.out in the patch? Yeah, looks like it. It's in my local tree, though :) > > +sleep 1 > > Is there any slight chance a sleep 1 won't catch it? Would sleep 2 do > better to be sure? A one second sleep should always increase the wall time by one second, shouldn't it? We can do the sleep 2 to be double safe in case of rounging issues, though. > > + echo "FAIL: mtime not update after mapped write" > > + status=1 > > +fi > > + > > +if [ "$ctime_diff" -eq "0" ]; then > > + echo "FAIL: ctime not update after mapped write" > > + status=1 > > +fi > > Should these just be _fail calls? Otherwise... > > > +# success, all done > > +echo "*** done" > > +rm -f $seq.full > > +status=0 > > don't you always exit w/ status 0 and remove the full output? > > I guess i'm not sure when to use _fail and when to let the golden output > difference kill the test, I suppose it doesn't much matter, it should > pass & fail correctly either way. You're right, the status=1 is overrident currently and it only fails due to the golden output difference. I'll respin it to just kill the superflous status assignment. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:19:37 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 n67AJaBR138519 for ; Tue, 7 Jul 2009 05:19:37 -0500 X-ASG-Debug-ID: 1246962007-6669037f0000-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 B0AD9348256; Tue, 7 Jul 2009 03:20:07 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id farTyuekZL14028d; Tue, 07 Jul 2009 03:20:07 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7m6-0007pV-4l; Tue, 07 Jul 2009 10:19:46 +0000 Date: Tue, 7 Jul 2009 06:19:46 -0400 From: Christoph Hellwig To: Olaf Weber Cc: Eric Sandeen , xfs mailing list , Christoph Hellwig , linux-mm@kvack.org, "MASON, CHRISTOPHER" X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707101946.GB1934@infradead.org> References: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246962007 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 On Tue, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: > If the nr_to_write calculation really yields a value that is too > small, shouldn't it be fixed elsewhere? In theory it should. But given the amazing feedback of the VM people on this I'd rather make sure we do get the full HW bandwith on large arrays instead of sucking badly and not just wait forever. From kosaki.motohiro@jp.fujitsu.com Tue Jul 7 05:32:37 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=BAYES_00 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 n67AWaxr138929 for ; Tue, 7 Jul 2009 05:32:37 -0500 X-ASG-Debug-ID: 1246962790-4d4203020000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail7.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C536F1AFE2C0 for ; Tue, 7 Jul 2009 03:33:10 -0700 (PDT) Received: from fgwmail7.fujitsu.co.jp (fgwmail7.fujitsu.co.jp [192.51.44.37]) by cuda.sgi.com with ESMTP id oQ88IXO5Q4pzcWgM for ; Tue, 07 Jul 2009 03:33:10 -0700 (PDT) Received: from m4.gw.fujitsu.co.jp ([10.0.50.74]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n67AX9UK001663 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Tue, 7 Jul 2009 19:33:09 +0900 Received: from smail (m4 [127.0.0.1]) by outgoing.m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 3D2E145DE6E for ; Tue, 7 Jul 2009 19:33:09 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 12FEB45DE60 for ; Tue, 7 Jul 2009 19:33:09 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id E6AB81DB8037 for ; Tue, 7 Jul 2009 19:33:08 +0900 (JST) Received: from m108.s.css.fujitsu.com (m108.s.css.fujitsu.com [10.249.87.108]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 97C941DB803F for ; Tue, 7 Jul 2009 19:33:05 +0900 (JST) Received: from m108.css.fujitsu.com (m108 [127.0.0.1]) by m108.s.css.fujitsu.com (Postfix) with ESMTP id 6D0FA428058; Tue, 7 Jul 2009 19:33:05 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by m108.s.css.fujitsu.com (Postfix) with ESMTP id BF4FB428052; Tue, 7 Jul 2009 19:33:04 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Tue, 07 Jul 2009 19:33:03 +0900 (JST) From: KOSAKI Motohiro To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Olaf Weber , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, "MASON, CHRISTOPHER" In-Reply-To: <20090707101946.GB1934@infradead.org> References: <20090707101946.GB1934@infradead.org> Message-Id: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Tue, 7 Jul 2009 19:33:04 +0900 (JST) X-Barracuda-Connect: fgwmail7.fujitsu.co.jp[192.51.44.37] X-Barracuda-Start-Time: 1246962791 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3017 1.0000 -0.3410 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.34 X-Barracuda-Spam-Status: No, SCORE=-0.34 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.2764 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, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: > > If the nr_to_write calculation really yields a value that is too > > small, shouldn't it be fixed elsewhere? > > In theory it should. But given the amazing feedback of the VM people > on this I'd rather make sure we do get the full HW bandwith on large > arrays instead of sucking badly and not just wait forever. At least, I agree with Olaf. if you got someone's NAK in past thread, Could you please tell me its url? From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:32:43 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AWgmW138938 for ; Tue, 7 Jul 2009 05:32:42 -0500 X-ASG-Debug-ID: 1246962797-4d4402fe0000-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 11D451AFE2CA for ; Tue, 7 Jul 2009 03:33:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id eo0SDpdN6vjzEVVQ for ; Tue, 07 Jul 2009 03:33:17 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zB-0005Xb-CL; Tue, 07 Jul 2009 10:33:17 +0000 Date: Tue, 7 Jul 2009 06:33:17 -0400 From: Christoph Hellwig To: Jan Engelhardt Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: A rescue tool: xfs_irecover Subject: Re: A rescue tool: xfs_irecover Message-ID: <20090707103317.GA20410@infradead.org> References: <20090204082816.GA9111@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246962798 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 On Mon, Jun 29, 2009 at 03:25:22PM +0200, Jan Engelhardt wrote: > Just wanted to check back????? did you finalize this idea of using > libxfs and/or importing it into xfsprogs? I started converting it to libxfs, but I got a bit distracted. It's still on my TODO list to finish it. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:32:58 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_54 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 n67AWv0j138961 for ; Tue, 7 Jul 2009 05:32:58 -0500 X-ASG-Debug-ID: 1246962813-048900870000-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 37A961AFE2D7 for ; Tue, 7 Jul 2009 03:33:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IHYX4DHX8W5Y8dkQ for ; Tue, 07 Jul 2009 03:33:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zQ-0005aB-UQ for xfs@oss.sgi.com; Tue, 07 Jul 2009 10:33:32 +0000 Date: Tue, 7 Jul 2009 06:33:32 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Subject: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Message-ID: <20090707103332.GB20410@infradead.org> References: <20090620173554.GA26470@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090620173554.GA26470@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246962813 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 ping? On Sat, Jun 20, 2009 at 01:35:54PM -0400, Christoph Hellwig wrote: > Also clean up the way the test configuration is printed. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/check > =================================================================== > --- xfstests-dev.orig/check 2009-06-20 17:31:00.000000000 +0000 > +++ xfstests-dev/check 2009-06-20 17:33:46.000000000 +0000 > @@ -161,18 +161,15 @@ > > [ -f check.time ] || touch check.time > > -FULL_FSTYP_DETAILS=`_full_fstyp_details` > -FULL_HOST_DETAILS=`_full_platform_details` > -FULL_MKFS_OPTIONS=`_scratch_mkfs_options` > -FULL_MOUNT_OPTIONS=`_scratch_mount_options` > - > -cat < -FSTYP -- $FULL_FSTYP_DETAILS > -PLATFORM -- $FULL_HOST_DETAILS > -MKFS_OPTIONS -- $FULL_MKFS_OPTIONS > -MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS > +# print out our test configuration > +echo "FSTYP -- `_full_fstyp_details`" > +echo "PLATFORM -- `_full_platform_details`" > +if [ ! -z "$SCRATCH_DEV" ]; then > + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > +fi > +echo > > -EOF > > if [ ! -z "$SCRATCH_DEV" ]; then > umount $SCRATCH_DEV 2>/dev/null > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:33:04 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_66 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 n67AX3BY138982 for ; Tue, 7 Jul 2009 05:33:04 -0500 X-ASG-Debug-ID: 1246962819-423a00430000-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 465FD3483EC for ; Tue, 7 Jul 2009 03:33:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9bgBC1toEFJtHpLV for ; Tue, 07 Jul 2009 03:33:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO7zX-0005aq-02 for xfs@oss.sgi.com; Tue, 07 Jul 2009 10:33:39 +0000 Date: Tue, 7 Jul 2009 06:33:38 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: small common.config cleanup Subject: Re: [PATCH] xfstests: small common.config cleanup Message-ID: <20090707103338.GC20410@infradead.org> References: <20090620173818.GA26809@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090620173818.GA26809@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246962819 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 ping? On Sat, Jun 20, 2009 at 01:38:18PM -0400, Christoph Hellwig wrote: > Don't list various non-mandatory options near the check for the > mandatory ones, and make the test for the mandatory ones a proper if > statements. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/common.config > =================================================================== > --- xfstests-dev.orig/common.config 2009-06-20 19:15:14.576805079 +0200 > +++ xfstests-dev/common.config 2009-06-20 19:16:48.956930262 +0200 > @@ -191,27 +191,18 @@ known_hosts() > [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST > [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config > > + # Mandatory Config values. > MC="" > -# Non-Mandatory Config values. > -# [ -z "$MODULAR" ] && MC="$MC MODULAR" > -# [ -z "$TEST_LOGDEV" ] && MC="$MC TEST_LOGDEV" > -# [ -z "$SCRATCH_LOGDEV" ] && MC="$MC SCRATCH_LOGDEV" > -# [ -z "$SCRATCH_RTDEV" ] && MC="$MC SCRATCH_RTDEV" > -# [ -z "$SCRATCH_MNT" ] && MC="$MC SCRATCH_MNT" > -# [ -z "$SCRATCH_DEV" ] && MC="$MC SCRATCH_DEV" > - > [ -z "$EMAIL" ] && MC="$MC EMAIL" > [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > > - [ "$MC" ] && (echo "Warning: need to define parameters for host $HOST";\ > - echo " or set variables:"; \ > - echo " $MC") > -# if [ -e configs/$HOST.config ] > -# then echo "Not carring, we have a configfile ($HOST_CONFIG_DIR/$HOST)" > -# else > - [ "$MC" ] && exit 1 > -# fi > + if [ -n "$MC" ]; then > + echo "Warning: need to define parameters for host $HOST" > + echo " or set variables:" > + echo " $MC" > + exit 1 > + fi > } > > if [ -f "$HOST_OPTIONS" ]; then > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:43:28 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67AhSoO139652 for ; Tue, 7 Jul 2009 05:43:28 -0500 X-ASG-Debug-ID: 1246963443-044d00bc0000-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 D8DC11AFE537 for ; Tue, 7 Jul 2009 03:44:03 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9FHzLxG4rYMybQb3 for ; Tue, 07 Jul 2009 03:44:03 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO89b-0000go-7I; Tue, 07 Jul 2009 10:44:03 +0000 Date: Tue, 7 Jul 2009 06:44:03 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling Message-ID: <20090707104403.GA21747@infradead.org> References: <20090705194111.GA3834@infradead.org> <4A52CAD6.1070807@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A52CAD6.1070807@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246963443 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 On Mon, Jul 06, 2009 at 11:11:02PM -0500, Eric Sandeen wrote: > Any reason to do this on the scratch dir vs. the test dir? (Since > scratch dir became optional, I figure stuff that can go on the test dev > instead, probably should?) > > not a big deal, it looks fine otherwise. The test should work just fine using the test dir, and given that these bits all cam from Dave I can't speak for his reason to use the scratch dir. But given that even creating an empty 16TB filesystem uses up a lot of space I'd rather have as much as possible free space available instead of sharing it with an aged filesystem. From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 05:44: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 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 n67Ai8fL139676 for ; Tue, 7 Jul 2009 05:44:08 -0500 X-ASG-Debug-ID: 1246963483-2248022b0000-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 BCB8834877A; Tue, 7 Jul 2009 03:44:43 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id CRQFwdKWzUphqF2R; Tue, 07 Jul 2009 03:44:43 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MO8AC-00081I-HS; Tue, 07 Jul 2009 10:44:40 +0000 Date: Tue, 7 Jul 2009 06:44:40 -0400 From: Christoph Hellwig To: KOSAKI Motohiro Cc: Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber , "MASON, CHRISTOPHER" X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707104440.GB21747@infradead.org> References: <20090707101946.GB1934@infradead.org> <20090707193015.7DCD.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246963483 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 On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > At least, I agree with Olaf. if you got someone's NAK in past thread, > Could you please tell me its url? The previous thread was simply dead-ended and nothing happened. From olaf@sgi.com Tue Jul 7 06:36: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.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67BaXNW142072 for ; Tue, 7 Jul 2009 06:36:34 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n67Bb6b2277062; Tue, 7 Jul 2009 13:37:07 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n67Bb5NY276867; Tue, 7 Jul 2009 13:37:05 +0200 (MEST) To: Christoph Hellwig Cc: Eric Sandeen , linux-mm@kvack.org, "MASON, CHRISTOPHER" , xfs mailing list Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage References: <4A4D26C5.9070606@redhat.com> <20090707101946.GB1934@infradead.org> From: Olaf Weber Date: Tue, 07 Jul 2009 13:37:05 +0200 In-Reply-To: <20090707101946.GB1934@infradead.org> (Christoph Hellwig's message of "Tue, 7 Jul 2009 06:19:46 -0400") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig writes: > On Tue, Jul 07, 2009 at 11:07:30AM +0200, Olaf Weber wrote: >> If the nr_to_write calculation really yields a value that is too >> small, shouldn't it be fixed elsewhere? > In theory it should. But given the amazing feedback of the VM people > on this I'd rather make sure we do get the full HW bandwith on large > arrays instead of sucking badly and not just wait forever. So how do you feel about making the fudge factor tunable? I don't have a good sense myself of what the value should be, whether the hard-coded 4 is good enough in general. -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Tue Jul 7 08:54:59 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 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 n67Dswmm147654 for ; Tue, 7 Jul 2009 08:54:58 -0500 X-ASG-Debug-ID: 1246975344-5b8102c50000-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 7A98E9F5D26 for ; Tue, 7 Jul 2009 07:02:25 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id zYeFYhfUADuCdz84 for ; Tue, 07 Jul 2009 07:02:25 -0700 (PDT) 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 90702A9BE23; Tue, 7 Jul 2009 08:55:30 -0500 (CDT) Message-ID: <4A5353D2.7010508@sandeen.net> Date: Tue, 07 Jul 2009 08:55:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add tests to check log size scaling Subject: Re: [PATCH] xfstests: add tests to check log size scaling References: <20090705194111.GA3834@infradead.org> <4A52CAD6.1070807@sandeen.net> <20090707104403.GA21747@infradead.org> In-Reply-To: <20090707104403.GA21747@infradead.org> 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: 1246975346 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.2777 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 Christoph Hellwig wrote: > On Mon, Jul 06, 2009 at 11:11:02PM -0500, Eric Sandeen wrote: >> Any reason to do this on the scratch dir vs. the test dir? (Since >> scratch dir became optional, I figure stuff that can go on the test dev >> instead, probably should?) >> >> not a big deal, it looks fine otherwise. > > The test should work just fine using the test dir, and given that these > bits all cam from Dave I can't speak for his reason to use the scratch > dir. But given that even creating an empty 16TB filesystem uses up a > lot of space I'd rather have as much as possible free space available > instead of sharing it with an aged filesystem. Ok, it's fine by me as posted then, consider it reviewed. -Eric From sandeen@sandeen.net Tue Jul 7 08:57:58 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_54 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 n67Dvv2L147740 for ; Tue, 7 Jul 2009 08:57:57 -0500 X-ASG-Debug-ID: 1246975110-329e02fa0000-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 7CCD13490EC for ; Tue, 7 Jul 2009 06:58:31 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CrQC7KEuvJnF5xis for ; Tue, 07 Jul 2009 06:58:31 -0700 (PDT) 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 AC476A9BE23; Tue, 7 Jul 2009 08:58:29 -0500 (CDT) Message-ID: <4A535485.8050901@sandeen.net> Date: Tue, 07 Jul 2009 08:58:29 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device Subject: Re: [PATCH] xfstests: don't print scratch mkfs and mount options without scratch device References: <20090620173554.GA26470@infradead.org> In-Reply-To: <20090620173554.GA26470@infradead.org> 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: 1246975112 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.2778 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 Christoph Hellwig wrote: > Also clean up the way the test configuration is printed. > > > Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen > Index: xfstests-dev/check > =================================================================== > --- xfstests-dev.orig/check 2009-06-20 17:31:00.000000000 +0000 > +++ xfstests-dev/check 2009-06-20 17:33:46.000000000 +0000 > @@ -161,18 +161,15 @@ > > [ -f check.time ] || touch check.time > > -FULL_FSTYP_DETAILS=`_full_fstyp_details` > -FULL_HOST_DETAILS=`_full_platform_details` > -FULL_MKFS_OPTIONS=`_scratch_mkfs_options` > -FULL_MOUNT_OPTIONS=`_scratch_mount_options` > - > -cat < -FSTYP -- $FULL_FSTYP_DETAILS > -PLATFORM -- $FULL_HOST_DETAILS > -MKFS_OPTIONS -- $FULL_MKFS_OPTIONS > -MOUNT_OPTIONS -- $FULL_MOUNT_OPTIONS > +# print out our test configuration > +echo "FSTYP -- `_full_fstyp_details`" > +echo "PLATFORM -- `_full_platform_details`" > +if [ ! -z "$SCRATCH_DEV" ]; then > + echo "MKFS_OPTIONS -- `_scratch_mkfs_options`" > + echo "MOUNT_OPTIONS -- `_scratch_mount_options`" > +fi > +echo > > -EOF > > if [ ! -z "$SCRATCH_DEV" ]; then > umount $SCRATCH_DEV 2>/dev/null > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 7 09:04: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.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 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 n67E4RP2147956 for ; Tue, 7 Jul 2009 09:04:27 -0500 X-ASG-Debug-ID: 1246975502-398303200000-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 C63B1348DA7 for ; Tue, 7 Jul 2009 07:05:02 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id kJb2A680AZ1Iul63 for ; Tue, 07 Jul 2009 07:05:02 -0700 (PDT) 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 07A33A9BF30; Tue, 7 Jul 2009 09:05:02 -0500 (CDT) Message-ID: <4A53560D.5080409@sandeen.net> Date: Tue, 07 Jul 2009 09:05:01 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: small common.config cleanup Subject: Re: [PATCH] xfstests: small common.config cleanup References: <20090620173818.GA26809@infradead.org> In-Reply-To: <20090620173818.GA26809@infradead.org> 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: 1246975502 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.2778 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 Christoph Hellwig wrote: > Don't list various non-mandatory options near the check for the > mandatory ones, and make the test for the mandatory ones a proper if > statements. > > > Signed-off-by: Christoph Hellwig Looks ok to me: Reviewed-by: Eric Sandeen > Index: xfstests-dev/common.config > =================================================================== > --- xfstests-dev.orig/common.config 2009-06-20 19:15:14.576805079 +0200 > +++ xfstests-dev/common.config 2009-06-20 19:16:48.956930262 +0200 > @@ -191,27 +191,18 @@ known_hosts() > [ -f $HOST_CONFIG_DIR/$HOST ] && . $HOST_CONFIG_DIR/$HOST > [ -f $HOST_CONFIG_DIR/$HOST.config ] && . $HOST_CONFIG_DIR/$HOST.config > > + # Mandatory Config values. > MC="" > -# Non-Mandatory Config values. > -# [ -z "$MODULAR" ] && MC="$MC MODULAR" > -# [ -z "$TEST_LOGDEV" ] && MC="$MC TEST_LOGDEV" > -# [ -z "$SCRATCH_LOGDEV" ] && MC="$MC SCRATCH_LOGDEV" > -# [ -z "$SCRATCH_RTDEV" ] && MC="$MC SCRATCH_RTDEV" > -# [ -z "$SCRATCH_MNT" ] && MC="$MC SCRATCH_MNT" > -# [ -z "$SCRATCH_DEV" ] && MC="$MC SCRATCH_DEV" > - > [ -z "$EMAIL" ] && MC="$MC EMAIL" > [ -z "$TEST_DIR" ] && MC="$MC TEST_DIR" > [ -z "$TEST_DEV" ] && MC="$MC TEST_DEV" > > - [ "$MC" ] && (echo "Warning: need to define parameters for host $HOST";\ > - echo " or set variables:"; \ > - echo " $MC") > -# if [ -e configs/$HOST.config ] > -# then echo "Not carring, we have a configfile ($HOST_CONFIG_DIR/$HOST)" > -# else > - [ "$MC" ] && exit 1 > -# fi > + if [ -n "$MC" ]; then > + echo "Warning: need to define parameters for host $HOST" > + echo " or set variables:" > + echo " $MC" > + exit 1 > + fi > } > > if [ -f "$HOST_OPTIONS" ]; then > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Tue Jul 7 09:05:34 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 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 n67E5YPh147997 for ; Tue, 7 Jul 2009 09:05:34 -0500 X-ASG-Debug-ID: 1246975569-3298034b0000-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 7B660349147 for ; Tue, 7 Jul 2009 07:06:09 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id VKCHSocrRgRbDxdL for ; Tue, 07 Jul 2009 07:06:09 -0700 (PDT) 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 0644CA9C9A9; Tue, 7 Jul 2009 09:06:09 -0500 (CDT) Message-ID: <4A535650.7020309@sandeen.net> Date: Tue, 07 Jul 2009 09:06:08 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Matthias Schniedermeyer CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> In-Reply-To: <20090707093802.GA32125@citd.de> 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: 1246975569 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: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2778 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Matthias Schniedermeyer wrote: > On 06.07.2009 13:25, Eric Sandeen wrote: >> I'm tiring of telling people to use the inode64 mount option >> when they are experiencing bad performance on large xfs >> filesystems... >> >> 32-bit userspace is still largely broken when it comes to still >> using 32-bit stat calls, but on 64-bit systems this should be >> safe. >> >> The only problem here is moving the disk onto a 32-bit system, or using >> 32-bit apps. But I think it's a small risk. >> >> What do we think about the following? > > What is with people running 64bit kernel but 32bit Userspace? > Good point. I wonder how many do that... hrm. -Eric From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 09:45:28 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67EjSBv149558 for ; Tue, 7 Jul 2009 09:45:28 -0500 X-ASG-Debug-ID: 1246977962-170c01440000-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 765E31AFF99E; Tue, 7 Jul 2009 07:46:02 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id KFIE6lghN8R78ttI; Tue, 07 Jul 2009 07:46:02 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOBvl-0000x3-IG; Tue, 07 Jul 2009 14:46:01 +0000 Date: Tue, 7 Jul 2009 10:46:01 -0400 From: Christoph Hellwig To: Olaf Weber Cc: Christoph Hellwig , Eric Sandeen , linux-mm@kvack.org, "MASON, CHRISTOPHER" , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707144601.GA705@infradead.org> References: <4A4D26C5.9070606@redhat.com> <20090707101946.GB1934@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246977963 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 On Tue, Jul 07, 2009 at 01:37:05PM +0200, Olaf Weber wrote: > > In theory it should. But given the amazing feedback of the VM people > > on this I'd rather make sure we do get the full HW bandwith on large > > arrays instead of sucking badly and not just wait forever. > > So how do you feel about making the fudge factor tunable? I don't > have a good sense myself of what the value should be, whether the > hard-coded 4 is good enough in general. A tunable means exposing an ABI, which I'd rather not do for a hack like this. If you don't like the number feel free to experiment around with it, SGI should have enough large systems that can be used to test this out. From chris.mason@oracle.com Tue Jul 7 10:17: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, UNPARSEABLE_RELAY 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 n67FH0WR151716 for ; Tue, 7 Jul 2009 10:17:00 -0500 X-ASG-Debug-ID: 1246979855-218e02170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from acsinet12.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BD3531AFFC77 for ; Tue, 7 Jul 2009 08:17:35 -0700 (PDT) Received: from acsinet12.oracle.com (acsinet12.oracle.com [141.146.126.234]) by cuda.sgi.com with ESMTP id KDlGwF6fR6GAEzDU for ; Tue, 07 Jul 2009 08:17:35 -0700 (PDT) Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by acsinet12.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n67FHE8D007003 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 7 Jul 2009 15:17:15 GMT Received: from abhmt008.oracle.com (abhmt008.oracle.com [141.146.116.17]) by acsinet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n67FJ9JJ010745; Tue, 7 Jul 2009 15:19:10 GMT Received: from localhost (/72.225.47.21) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 07 Jul 2009 08:17:22 -0700 Date: Tue, 7 Jul 2009 11:17:20 -0400 From: Chris Mason To: Eric Sandeen Cc: xfs mailing list , linux-mm@kvack.org, Christoph Hellwig , jens.axboe@oracle.com X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090707151720.GA4159@think> References: <4A4D26C5.9070606@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A4D26C5.9070606@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Source-IP: abhmt008.oracle.com [141.146.116.17] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A090207.4A536703.0064:SCFSTAT5015188,ss=1,fgs=0 X-Barracuda-Connect: acsinet12.oracle.com[141.146.126.234] X-Barracuda-Start-Time: 1246979855 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2782 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 02, 2009 at 04:29:41PM -0500, Eric Sandeen wrote: > Talking w/ someone who had a raid6 of 15 drives on an areca > controller, he wondered why he could only get 300MB/s or so > out of a streaming buffered write to xfs like so: > > dd if=/dev/zero of=/mnt/storage/10gbfile bs=128k count=81920 > 10737418240 bytes (11 GB) copied, 34.294 s, 313 MB/s I did some quick tests and found some unhappy things ;) On my 5 drive sata array (configured via LVM in a stripeset), dd with O_DIRECT to the block device can stream writes at a healthy 550MB/s. On 2.6.30, XFS does O_DIRECT at the exact same 550MB/s, and buffered writes at 370MB/s. Btrfs does a little better on buffered and a little worse on O_DIRECT. Ext4 splits the middle and does 400MB/s on both buffered and O_DIRECT. 2.6.31-rc2 gave similar results. One thing I noticed was that pdflush and friends aren't using the right flag in congestion_wait after it was updated to do congestion based on sync/async instead of read/write. I'm always happy when I get to blame bugs on Jens, but fixing the congestion flag usage actually made the runs slower (he still promises to send a patch for the congestion). A little while ago, Jan Kara sent seekwatcher changes that let it graph per-process info about IO submission, so I cooked up a graph of the IO done by pdflush, dd, and others during an XFS buffered streaming write. http://oss.oracle.com/~mason/seekwatcher/xfs-dd-2.6.30.png The dark blue dots are dd doing writes and the light green dots are pdflush. The graph shows that pdflush spends almost the entire run sitting around doing nothing, and sysrq-w shows all the pdflush threads waiting around in congestion_wait. Just to make sure the graphing wasn't hiding work done by pdflush, I filtered out all the dd IO: http://oss.oracle.com/~mason/seekwatcher/xfs-dd-2.6.30-filtered.png With all of this in mind, I think the reason why the nr_to_write change is helping is because dd is doing all the IO during balance_dirty_pages, and the higher nr_to_write number is making sure that more IO goes out at a time. Once dd starts doing IO in balance_dirty_pages, our queues get congested. From that moment on, the bdi_congested checks in the writeback path make pdflush sit down. I doubt the queue every really leaves congestion because we get over the dirty high water mark and dd is jumping in and sending IO down the pipe without waiting for congestion to clear. sysrq-w supports this. dd is always in get_request_wait and pdflush is always in congestion_wait. This bad interaction between pdflush and congestion was one of the motivations for Jens' new writeback work, so I was really hoping to git pull and post a fantastic new benchmark result. With Jens' code the graph ends up completely inverted, with roughly the same performance. Instead of dd doing all the work, the flusher thread is doing all the work (horray!) and dd is almost always in congestion_wait (boo). I think the cause is a little different, it seems that with Jens' code, dd finds the flusher thread has the inode locked, and so balance_dirty_pages doesn't find any work to do. It waits on congestion_wait(). If I replace the balance_dirty_pages() congestion_wait() with schedule_timeout(1) in Jens' writeback branch, xfs buffered writes go from 370MB/s to 520MB/s. There are still some big peaks and valleys, but it at least shows where we need to think harder about congestion flags, IO waiting and other issues. All of this is a long way of saying that until Jens' new code goes in, (with additional tuning) the nr_to_write change makes sense to me. I don't see a 2.6.31 suitable way to tune things without his work. -chris From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 11:40:05 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67Ge4Mh155908 for ; Tue, 7 Jul 2009 11:40:04 -0500 X-ASG-Debug-ID: 1246984839-194301520000-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 CEAAB1B00567 for ; Tue, 7 Jul 2009 09:40:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id j90KOTNS6FkRfsHj for ; Tue, 07 Jul 2009 09:40:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MODig-0003Hx-Ue for xfs@oss.sgi.com; Tue, 07 Jul 2009 16:40:39 +0000 Date: Tue, 7 Jul 2009 12:40:38 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfstests: fix trivial typo in test 204 description Subject: [PATCH] xfstests: fix trivial typo in test 204 description Message-ID: <20090707164038.GA9609@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246984839 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 Signed-off-by: Christoph Hellwig Index: xfstests-dev/204 =================================================================== --- xfstests-dev.orig/204 2009-07-04 18:07:47.000000000 +0000 +++ xfstests-dev/204 2009-07-04 18:07:51.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh # FS QA Test No. 204 # -# Test out ENOSPC flushiung on small filesystems. +# Test out ENOSPC flushing on small filesystems. # #----------------------------------------------------------------------- # Copyright (c) 2009 Christoph Hellwig. From sandeen@sandeen.net Tue Jul 7 12:09:10 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 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 n67H9965156892 for ; Tue, 7 Jul 2009 12:09:10 -0500 X-ASG-Debug-ID: 1246986583-3c87013f0000-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 043C81B00475 for ; Tue, 7 Jul 2009 10:09:43 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id adcWsAUuoZ4vFRvU for ; Tue, 07 Jul 2009 10:09:43 -0700 (PDT) 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 2DE03A9DADB; Tue, 7 Jul 2009 12:09:43 -0500 (CDT) Message-ID: <4A538157.8000704@sandeen.net> Date: Tue, 07 Jul 2009 12:09:43 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix trivial typo in test 204 description Subject: Re: [PATCH] xfstests: fix trivial typo in test 204 description References: <20090707164038.GA9609@infradead.org> In-Reply-To: <20090707164038.GA9609@infradead.org> 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: 1246986585 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.2789 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 Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > > Index: xfstests-dev/204 > =================================================================== > --- xfstests-dev.orig/204 2009-07-04 18:07:47.000000000 +0000 > +++ xfstests-dev/204 2009-07-04 18:07:51.000000000 +0000 > @@ -1,7 +1,7 @@ > #! /bin/sh > # FS QA Test No. 204 > # > -# Test out ENOSPC flushiung on small filesystems. > +# Test out ENOSPC flushing on small filesystems. > # > #----------------------------------------------------------------------- > # Copyright (c) 2009 Christoph Hellwig. > Reviewed! ;) (that always bugged me!) -Eric From ms@citd.de Tue Jul 7 13:13:32 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 (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n67IDVEL159584 for ; Tue, 7 Jul 2009 13:13:31 -0500 X-ASG-Debug-ID: 1246990859-77cb020e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from enyo.dsw2k3.info (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B1D819F8EDE for ; Tue, 7 Jul 2009 11:21:00 -0700 (PDT) Received: from enyo.dsw2k3.info (enyo.dsw2k3.info [195.71.86.239]) by cuda.sgi.com with ESMTP id ANgMiRJqsVjM8XgQ for ; Tue, 07 Jul 2009 11:21:00 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by enyo.dsw2k3.info (Postfix) with ESMTP id 6B5F12BCAC; Tue, 7 Jul 2009 20:14:05 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at enyo.dsw2k3.info Received: from enyo.dsw2k3.info ([127.0.0.1]) by localhost (enyo.dsw2k3.info [127.0.0.1]) (amavisd-new, port 10024) with LMTP id fkpvhg+REVhq; Tue, 7 Jul 2009 20:13:56 +0200 (CEST) Received: from citd.de (p4FC4D1F7.dip.t-dialin.net [79.196.209.247]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (Client did not present a certificate) by enyo.dsw2k3.info (Postfix) with ESMTP id 70B192BC77; Tue, 7 Jul 2009 20:13:55 +0200 (CEST) Date: Tue, 7 Jul 2009 20:13:52 +0200 From: Matthias Schniedermeyer To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems Message-ID: <20090707181352.GA3357@citd.de> References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> <4A535650.7020309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A535650.7020309@sandeen.net> User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: enyo.dsw2k3.info[195.71.86.239] X-Barracuda-Start-Time: 1246990860 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: HEADER (^X-Barracuda-Connect: [^ ]+\.dsw2k3\.info\[) X-Virus-Status: Clean On 07.07.2009 09:06, Eric Sandeen wrote: > Matthias Schniedermeyer wrote: > > On 06.07.2009 13:25, Eric Sandeen wrote: > >> I'm tiring of telling people to use the inode64 mount option > >> when they are experiencing bad performance on large xfs > >> filesystems... > >> > >> 32-bit userspace is still largely broken when it comes to still > >> using 32-bit stat calls, but on 64-bit systems this should be > >> safe. > >> > >> The only problem here is moving the disk onto a 32-bit system, or using > >> 32-bit apps. But I think it's a small risk. > >> > >> What do we think about the following? > > > > What is with people running 64bit kernel but 32bit Userspace? > > Good point. I wonder how many do that... hrm. I'd guess pretty much anybody who what's to utilize the amount of RAM you can have nowadays, but doesn't have any single program that needs that amount of memory. Or, like in my case, just needs it for tmpfs/buffer cache. Throw in some "i don't want to reinstall" or "my Distribution isn't biarch" and you have someone who justs recompils their kernel and be done with it. It took me only a few minutes (rotating my hardware around that day took way longer) Bis denn -- Real Programmers consider "what you see is what you get" to be just as bad a concept in Text Editors as it is in women. No, the Real Programmer wants a "you asked for it, you got it" text editor -- complicated, cryptic, powerful, unforgiving, dangerous. From sandeen@sandeen.net Tue Jul 7 13:16:48 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 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 n67IGmmO159806 for ; Tue, 7 Jul 2009 13:16:48 -0500 X-ASG-Debug-ID: 1246990642-55f501960000-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 406C31B00C36 for ; Tue, 7 Jul 2009 11:17:22 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id AXZk44lE63mQjGQH for ; Tue, 07 Jul 2009 11:17:22 -0700 (PDT) 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 63E07A9DADB; Tue, 7 Jul 2009 13:17:22 -0500 (CDT) Message-ID: <4A539132.40907@sandeen.net> Date: Tue, 07 Jul 2009 13:17:22 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Matthias Schniedermeyer CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH, RFC] default to inode64 on 64-bit systems Subject: Re: [PATCH, RFC] default to inode64 on 64-bit systems References: <4A52419E.5020301@sandeen.net> <20090707093802.GA32125@citd.de> <4A535650.7020309@sandeen.net> <20090707181352.GA3357@citd.de> In-Reply-To: <20090707181352.GA3357@citd.de> 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: 1246990643 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: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Matthias Schniedermeyer wrote: > On 07.07.2009 09:06, Eric Sandeen wrote: >> Matthias Schniedermeyer wrote: >>> On 06.07.2009 13:25, Eric Sandeen wrote: >>>> I'm tiring of telling people to use the inode64 mount option >>>> when they are experiencing bad performance on large xfs >>>> filesystems... >>>> >>>> 32-bit userspace is still largely broken when it comes to still >>>> using 32-bit stat calls, but on 64-bit systems this should be >>>> safe. >>>> >>>> The only problem here is moving the disk onto a 32-bit system, or using >>>> 32-bit apps. But I think it's a small risk. >>>> >>>> What do we think about the following? >>> What is with people running 64bit kernel but 32bit Userspace? >> Good point. I wonder how many do that... hrm. > > I'd guess pretty much anybody who what's to utilize the amount of RAM > you can have nowadays, but doesn't have any single program that needs > that amount of memory. Or, like in my case, just needs it for > tmpfs/buffer cache. > > Throw in some "i don't want to reinstall" or "my Distribution isn't > biarch" and you have someone who justs recompils their kernel and be > done with it. It took me only a few minutes (rotating my hardware around > that day took way longer) > *nod* I waved hands about the mount path checking whether the "mount" command that started it was a 32-bit binary, and making a decision based on that... and Christoph pointed out that it'd be easy ... and then he gave me a dirty look for even thinking about it ;) -Eric From paul@mad-scientist.net Tue Jul 7 13:42:59 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=BAYES_00,J_CHICKENPOX_23 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 n67Igx5c161359 for ; Tue, 7 Jul 2009 13:42:59 -0500 X-ASG-Debug-ID: 1246992626-4789015c0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from netezza.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3FF8A129B2C5 for ; Tue, 7 Jul 2009 11:50:26 -0700 (PDT) Received: from netezza.com (mta.netezza.com [12.148.248.132]) by cuda.sgi.com with ESMTP id Ta3eQYM7pqDMCJ7W for ; Tue, 07 Jul 2009 11:50:26 -0700 (PDT) Received: from ([172.29.50.72]) by mta.netezza.com with SMTP id 4441227.13730409; Tue, 07 Jul 2009 14:42:16 -0400 Received: from [172.29.82.111] ([172.29.82.111]) by mail1.netezza.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 7 Jul 2009 14:42:16 -0400 X-ASG-Orig-Subj: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: [2.6.27.25] assfail in xfs_attr_quiesce() during umount From: Paul Smith Reply-To: paul@mad-scientist.net To: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org References: 20080307104918.GA20000@infradead.org In-Reply-To: 20080307104918.GA20000@infradead.org mp->m_active_trans)%20: = 0, file: Message-ID: X-OriginalArrivalTime: 07 Jul 2009 18:42:16.0380 (UTC) FILETIME=[A682AFC0:01C9FF32] Date: 7 Jul 2009 14:42:16 -0400 X-Barracuda-Connect: mta.netezza.com[12.148.248.132] X-Barracuda-Start-Time: 1246992628 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-ASG-Whitelist: BODY (http://marc\.info/\?) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > fs/xfs/xfs_vfsops.c, line: 708 > kernel BUG at fs/xfs/support/debug.c: 82! > infalid opcode: 0000 [#1] > Modules lined in: nvidia(P) xt_multiport iptable_filter ip_tables x_tables > Pid: 25313, comm: mount Tainted: P (2.6.24.3-686-initrd-crk1 #1) > EIP: 0060:[>f8a67a3f>] EFLAGS: 00010292 CPU: 0 > EAX: 00000061 EBX: f7faa400 ECX: ffffffff EDX: c034bda0 > ESI: dfc97000 EDI: f7faa400 EBP: db175e14 ESP: db175dcc > DS: 007b ES: 007b FS: 0000 GS: 033 SS: 0068 > Process mount (pid: 25313, ti=db174000 task=f7c32560 task.ti=db174000) > Stack: f8a6cc60 f8a6c6b0 f8a6a135 000002c4 f8a57e38 f7faa400 f8a57ee7 00000000 > Call Trace: > Code: d7 6b c7 83 c3 08 81 fb c8 02 a8 f8 75 ee 5b c3 83 ec 10 89 4c 24 0c 89 > EIP: [] assfail+0x1b/0x1f [xfs] SS:ESP 0068:db175dcc > WARNING: at kernel/exit.c:917 do_exit() > Pid: 25313, comm: mount Tainted: P D 2.6.24.3-686-initrd-crk1 #1 > /etc/rc6.d/S60umountroot: line17: 25313 Segmentation fault mount Content-Type: text/plain Organization: GNU's Not Unix! Date: Tue, 07 Jul 2009 14:42:15 -0400 Message-Id: <1246992135.9022.7291.camel@psmith-ubeta.netezza.com> Mime-Version: 1.0 X-Mailer: Evolution 2.24.3 Content-Transfer-Encoding: 7bit Hi all. I've seen this failure (only once so far, but even one kernel panic is not good!) in my 2.6.27.25 kernel. Output below. This was seen before, in earlier kernels; see (2.6.23): http://marc.info/?l=linux-kernel&m=120106649923499&w=2 And also (2.6.24): http://archives.free.net.ph/message/20080307.104918.4ea41ede.en.html According to the thread for the former, it was intended to be resolved by "proper per-vfsmount write count in 2.6.25 as part of the per-mount r/o patches" (C.Hellwig) Did those fixes indeed go into 2.6.25 (or 2.6.27 or below)? Was there something else that needed to be done for XFS to be able take advantage of that enhancement? And, is the patch posted by DavidC here: http://marc.info/?l=linux-kernel&m=120106649923499&w=2 still appropriate to work around this issue for 2.5.27.25? Thanks! =================================== umount: cannot remount /dev/md110 read-only Assertion failed: atomic_read(&mp->m_active_trans) == 0, file: /home/psmith/build/linux/fs/xfs/xfs_vfsops.c, line: 105 ------------[ cut here ]------------ Kernel BUG at ffffffffa02340ca [verbose debug info unavailable] invalid opcode: 0000 [1] PREEMPT SMP CPU 7 Modules linked in: rng_core dock scsi_mod libata ata_piix zlib_inflate bnx2 libphy tg3 ipmi_msghandler ipmi_si ipmi_devintf bonding sd_mod sg scsi_transport_sas mptbase mptscsih mptsas mptctl md_mod raid1 raid10 raid0 linear dm_mod dm_multipath dm_round_robin jbd ext3 dm_ioband xfs disklog xxds(P) Pid: 8546, comm: umount Tainted: P 2.6.27.25 #1 RIP: 0010:[] [] assfail+0x1a/0x20 [xfs] RSP: 0000:ffff8801a357fd38 EFLAGS: 00010292 RAX: 00000000000000a5 RBX: ffff880462188000 RCX: ffff88046bcebef0 RDX: ffffffff8054dfc8 RSI: 0000000000000096 RDI: 0000000000000001 RBP: ffff8801a357fd60 R08: ffff88046f84db38 R09: 001c90dd7a1c63bb R10: 0000000000000000 R11: 0000000000000001 R12: ffff8801a357fd68 R13: ffff8801a357fdcc R14: 0000000000000000 R15: 0000000000000040 FS: 0000000000000000(0000) GS:ffff88046f819280(0063) knlGS:00000000f7f9c6c0 CS: 0010 DS: 002b ES: 002b CR0: 000000008005003b CR2: 000000004d8800e1 CR3: 0000000322097000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process umount (pid: 8546, threadinfo ffff8801a357e000, task ffff880390a7f1c0) Stack: ffff8801a357fd60 ffffffffa022178e ffff880462188000 ffffffffa023332c ffff88046cbb7000 0000000000000000 0000000000000000 0000000000000001 0000000000000000 7fffffffffffffff 0000000000000000 0000000000000000 Call Trace: [] ? xfs_attr_quiesce+0x4e/0x90 [xfs] [] ? xfs_fs_remount+0x10c/0x130 [xfs] [] ? do_remount_sb+0x131/0x1d0 [] ? do_remount+0x195/0x1b0 [] ? do_mount+0x1ba/0x230 [] ? __get_free_pages+0x1e/0x50 [] ? compat_sys_mount+0x11f/0x260 [] ? ia32_syscall_done+0x0/0x21 Code: c7 96 69 23 a0 e8 57 66 13 e0 48 83 c4 18 c3 66 90 89 d1 48 83 ec 08 48 89 f2 31 c0 48 89 fe 48 c7 c7 a0 9e 23 a0 e8 a5 6e 25 e0 <0f> 0b eb fe 66 90 41 55 41 54 49 89 f4 55 89 fd 53 48 c7 c7 a0 RIP [] assfail+0x1a/0x20 [xfs] RSP Kernel panic - not syncing: Fatal exception From BATV+db511ab59ecd249fa4d1+2144+infradead.org+hch@bombadil.srs.infradead.org Tue Jul 7 14:06:12 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 n67J69ea162999 for ; Tue, 7 Jul 2009 14:06:11 -0500 X-ASG-Debug-ID: 1246994018-296b022a0000-w1Z2WR 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 B96529F9735 for ; Tue, 7 Jul 2009 12:13:38 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Suh1dJIsFapL8cbM for ; Tue, 07 Jul 2009 12:13:38 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOG03-00065z-Eb; Tue, 07 Jul 2009 19:06:43 +0000 Date: Tue, 7 Jul 2009 15:06:43 -0400 From: Christoph Hellwig To: Paul Smith Cc: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Message-ID: <20090707190643.GA32467@infradead.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1246994018 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 On Tue, Jul 07, 2009 at 02:42:16PM -0400, Paul Smith wrote: > According to the thread for the former, it was intended to be resolved > by "proper per-vfsmount write count in 2.6.25 as part of the per-mount > r/o patches" (C.Hellwig) > > Did those fixes indeed go into 2.6.25 (or 2.6.27 or below)? Was there > something else that needed to be done for XFS to be able take advantage > of that enhancement? We haven't fixed the VFS issues yet. In some later kernel we just changed the assert to a warn on for now until the issue is sorted out. > And, is the patch posted by DavidC here: > http://marc.info/?l=linux-kernel&m=120106649923499&w=2 It looks somehwat dangerous for me. For now I would just comment out the assert or change it to a WARN_ON as in the newer kernels. I've recently started looking at that area in the VFS again and I'll hopefully make progress on a solution that sets MS_RDONLY at the correct time. From paul@mad-scientist.net Tue Jul 7 15:19:57 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 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 n67KJuec171954 for ; Tue, 7 Jul 2009 15:19:56 -0500 X-ASG-Debug-ID: 1246998030-390501b60000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from netezza.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 11B2934AF29 for ; Tue, 7 Jul 2009 13:20:30 -0700 (PDT) Received: from netezza.com (mta.netezza.com [12.148.248.132]) by cuda.sgi.com with ESMTP id qWdMH5VVSE2QeaW9 for ; Tue, 07 Jul 2009 13:20:30 -0700 (PDT) Received: from ([172.29.50.72]) by mta.netezza.com with SMTP id 4441227.13733111; Tue, 07 Jul 2009 16:18:51 -0400 Received: from [172.29.82.111] ([172.29.82.111]) by mail1.netezza.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 7 Jul 2009 16:18:51 -0400 X-ASG-Orig-Subj: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount Subject: Re: [2.6.27.25] assfail in xfs_attr_quiesce() during umount From: Paul Smith Reply-To: paul@mad-scientist.net To: Christoph Hellwig Cc: Linux XFS , christoph hellwig , david chinner , linux-kernel@vger.kernel.org In-Reply-To: <20090707190643.GA32467@infradead.org> References: <20090707190643.GA32467@infradead.org> Content-Type: text/plain Organization: GNU's Not Unix! Date: Tue, 07 Jul 2009 16:18:43 -0400 Message-Id: <1246997925.2984.1.camel@psmith-ubeta.netezza.com> Mime-Version: 1.0 X-Mailer: Evolution 2.24.3 Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 07 Jul 2009 20:18:51.0728 (UTC) FILETIME=[24CE9D00:01C9FF40] X-Barracuda-Connect: mta.netezza.com[12.148.248.132] X-Barracuda-Start-Time: 1246998031 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1182 1.0000 -1.2845 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.28 X-Barracuda-Spam-Status: No, SCORE=-1.28 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.2800 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, 2009-07-07 at 15:06 -0400, Christoph Hellwig wrote: > It looks somehwat dangerous for me. For now I would just comment > out the assert or change it to a WARN_ON as in the newer kernels. Hah! :-). OK, that works for me. Thanks Christoph. From news@studiokappa.it Tue Jul 7 22:02:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.7 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE 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 n6832d21198048 for ; Tue, 7 Jul 2009 22:02:39 -0500 X-ASG-Debug-ID: 1247022192-60c501a90000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtpsmart3.aruba.it (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 13FD934BD36 for ; Tue, 7 Jul 2009 20:03:12 -0700 (PDT) Received: from smtpsmart3.aruba.it (smtpweb101.aruba.it [62.149.158.101]) by cuda.sgi.com with SMTP id 03Bfj0RZe6laOIAC for ; Tue, 07 Jul 2009 20:03:12 -0700 (PDT) Received: (qmail 8732 invoked by uid 89); 8 Jul 2009 03:03:08 -0000 Received: by simscan 1.2.0 ppid: 8619, pid: 8621, t: 2.2601s scanners: clamav: 0.88.4/m:40/d:1945 spam: 3.1.4 Received: from unknown (HELO webxc08s08.ad.aruba.it) (62.149.141.100) by smtpsmart3.fe.aruba.it with SMTP; 8 Jul 2009 03:03:05 -0000 Received: (qmail 23688 invoked by uid 18002703); 8 Jul 2009 03:03:08 -0000 To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Promozione della salute ed empowerment della comunita' Subject: Promozione della salute ed empowerment della comunita' Date: Wed, 8 Jul 2009 05:03:08 +0200 From: news@studiokappa.it Message-ID: <1744c47eb79505c180988a12c8d0b27b@www.studiokappa.it> X-Priority: 3 X-Mailer: PHPMailer [version 1.73] X-Mailer: phplist v2.10.4 X-MessageID: 102 X-ListMember: linux-xfs@oss.sgi.com Precedence: bulk Errors-To: news@studiokappa.it MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="b1_1744c47eb79505c180988a12c8d0b27b" X-Barracuda-Connect: smtpweb101.aruba.it[62.149.158.101] X-Barracuda-Start-Time: 1247022194 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5151 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.95 X-Barracuda-Spam-Status: No, SCORE=0.95 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA038b, HTML_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2824 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 HTML_MESSAGE BODY: HTML included in message 0.20 BSF_SC0_SA038b RAW: Custom Rule SA038b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --b1_1744c47eb79505c180988a12c8d0b27b Content-Type: text/plain; charset = "UTF-8" Content-Transfer-Encoding: 8bit Sperando di far cosa gradita, segnaliamo le iniziative del nostro partner MartiniAssociati: Promozione della salute ed empowerment della comunita'. Fiducia partecipazione e responsabilità. 23-27 Agosto 2009 Certosa di Pontignano (SI) Cordialmente. -- Per cancellarti da questa lista clicca su http://www.studiokappa.it/lists/?p=unsubscribe&uid=f95d79661173a656ad12f819a35cc5d5 Per aggiornare le tue preferenze clicca su http://www.studiokappa.it/lists/?p=preferences&uid=f95d79661173a656ad12f819a35cc5d5 -- Powered by PHPlist, www.phplist.com -- --b1_1744c47eb79505c180988a12c8d0b27b Content-Type: text/html; charset = "UTF-8" Content-Transfer-Encoding: 8bit prova template kappa



Sperando di far cosa gradita, segnaliamo le iniziative del nostro partner MartiniAssociati:



Clicca per scaricare la locandina
Cordialmente.

 

Studio Kappa

Segreteria

cell. +39 347.867.24.67

info@studiokappa.it

www.studiokappa.it

 

© Studio Kappa - Via Duca d'Aosta, 14 - 14100 Asti - Tel. 347.8672467
info@studiokappa.it - Part. IVA 01411460056 - Cod. Fiscale 92049850057



--
Per cancellarti da questa lista clicca su questo link
Per aggiornare le tue preferenze clicca su questo link
--b1_1744c47eb79505c180988a12c8d0b27b-- From jaswinder@kernel.org Wed Jul 8 11:04:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,RCVD_IN_BRBL 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 n68G4bxa235609 for ; Wed, 8 Jul 2009 11:04:37 -0500 X-ASG-Debug-ID: 1247069111-4dca039f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from hera.kernel.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F20C134E7DA; Wed, 8 Jul 2009 09:05:11 -0700 (PDT) Received: from hera.kernel.org (hera.kernel.org [140.211.167.34]) by cuda.sgi.com with ESMTP id bvr0w6B9yLI6FLNA; Wed, 08 Jul 2009 09:05:11 -0700 (PDT) Received: from [192.168.1.220] (triband-del-59.180.9.101.bol.net.in [59.180.9.101] (may be forged)) (authenticated bits=0) by hera.kernel.org (8.14.2/8.13.8) with ESMTP id n68G550w026877 (version=TLSv1/SSLv3 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Wed, 8 Jul 2009 16:05:09 GMT X-ASG-Orig-Subj: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c Subject: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c From: Jaswinder Singh Rajput To: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, Sam Ravnborg , LKML In-Reply-To: <1247063308.4382.12.camel@ht.satnam> References: <1247063308.4382.12.camel@ht.satnam> Content-Type: text/plain Date: Wed, 08 Jul 2009 21:16:11 +0530 Message-Id: <1247067971.4382.94.camel@ht.satnam> Mime-Version: 1.0 X-Mailer: Evolution 2.24.5 (2.24.5-2.fc10) Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV 0.93.3/9546/Wed Jul 8 11:39:15 2009 on hera.kernel.org X-Virus-Status: Clean X-Barracuda-Connect: hera.kernel.org[140.211.167.34] X-Barracuda-Start-Time: 1247069112 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.2872 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- fix the following 'make includecheck' warning: fs/xfs/linux-2.6/xfs_iops.c: xfs_acl.h is included more than once. Signed-off-by: Jaswinder Singh Rajput --- fs/xfs/linux-2.6/xfs_iops.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb..793a146 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -43,7 +43,6 @@ #include "xfs_error.h" #include "xfs_itable.h" #include "xfs_rw.h" -#include "xfs_acl.h" #include "xfs_attr.h" #include "xfs_buf_item.h" #include "xfs_utils.h" -- 1.6.0.6 From sandeen@sandeen.net Wed Jul 8 11:38:24 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 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 n68GcOJB237053 for ; Wed, 8 Jul 2009 11:38:24 -0500 X-ASG-Debug-ID: 1247071555-31c202af0000-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 85A5472B67E for ; Wed, 8 Jul 2009 09:45:55 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id V7mDLaUFwSwGD5y7 for ; Wed, 08 Jul 2009 09:45:55 -0700 (PDT) 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 C4E18A9BF32; Wed, 8 Jul 2009 11:38:53 -0500 (CDT) Message-ID: <4A54CB9D.9030005@sandeen.net> Date: Wed, 08 Jul 2009 11:38:53 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> <20090707101737.GA1934@infradead.org> In-Reply-To: <20090707101737.GA1934@infradead.org> 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: 1247071558 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.2875 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 Christoph Hellwig wrote: > On Mon, Jul 06, 2009 at 11:01:16PM -0500, Eric Sandeen wrote: >> Christoph Hellwig wrote: >>> Check that we correctly update the timestamps when writing to a file >>> through an mmap mapping. Currently fails for XFS due a VFS bug but >>> succeeds for many other filesystems. >>> >>> >>> Signed-off-by: Christoph Hellwig >> Test seems mostly ok, but aren't you missing 215.out in the patch? > > Yeah, looks like it. It's in my local tree, though :) ah, but it didn't get committed, yet ;) -Eric From BATV+89ee0b3c752fae473647+2145+infradead.org+hch@bombadil.srs.infradead.org Wed Jul 8 12:14:55 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 n68HEpv1238643 for ; Wed, 8 Jul 2009 12:14:55 -0500 X-ASG-Debug-ID: 1247073326-3f6e02420000-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 1A34834ECBB for ; Wed, 8 Jul 2009 10:15:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FjTEkStx86qf2EsH for ; Wed, 08 Jul 2009 10:15:26 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MOaju-0006Xm-In; Wed, 08 Jul 2009 17:15:26 +0000 Date: Wed, 8 Jul 2009 13:15:26 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Subject: Re: [PATCH] xfstests: add test 215: c/mtime updates through mapped writes Message-ID: <20090708171526.GA15011@infradead.org> References: <20090704182742.GA11083@infradead.org> <4A52C88C.2040600@sandeen.net> <20090707101737.GA1934@infradead.org> <4A54CB9D.9030005@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4A54CB9D.9030005@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1247073327 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 On Wed, Jul 08, 2009 at 11:38:53AM -0500, Eric Sandeen wrote: > ah, but it didn't get committed, yet ;) Sorry, it's in now. From kosaki.motohiro@jp.fujitsu.com Wed Jul 8 21:04:02 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=BAYES_00 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 n69242bR000346 for ; Wed, 8 Jul 2009 21:04:02 -0500 X-ASG-Debug-ID: 1247105075-440200090000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail7.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EDD2F1B4C16D for ; Wed, 8 Jul 2009 19:04:36 -0700 (PDT) Received: from fgwmail7.fujitsu.co.jp (fgwmail7.fujitsu.co.jp [192.51.44.37]) by cuda.sgi.com with ESMTP id xqXE2Fpllrjb4AqV for ; Wed, 08 Jul 2009 19:04:36 -0700 (PDT) Received: from m4.gw.fujitsu.co.jp ([10.0.50.74]) by fgwmail7.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n6924ZRr014807 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Thu, 9 Jul 2009 11:04:35 +0900 Received: from smail (m4 [127.0.0.1]) by outgoing.m4.gw.fujitsu.co.jp (Postfix) with ESMTP id B068845DE7D for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (s4.gw.fujitsu.co.jp [10.0.50.94]) by m4.gw.fujitsu.co.jp (Postfix) with ESMTP id 8124B45DE60 for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from s4.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id 3C613E08001 for ; Thu, 9 Jul 2009 11:04:34 +0900 (JST) Received: from ml14.s.css.fujitsu.com (ml14.s.css.fujitsu.com [10.249.87.104]) by s4.gw.fujitsu.co.jp (Postfix) with ESMTP id D5917E08003 for ; Thu, 9 Jul 2009 11:04:33 +0900 (JST) Received: from ml14.css.fujitsu.com (ml14 [127.0.0.1]) by ml14.s.css.fujitsu.com (Postfix) with ESMTP id 667769F61EF; Thu, 9 Jul 2009 11:04:33 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by ml14.s.css.fujitsu.com (Postfix) with ESMTP id A96C39F61EE; Thu, 9 Jul 2009 11:04:32 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Thu, 09 Jul 2009 11:04:31 +0900 (JST) From: KOSAKI Motohiro To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber , "MASON, CHRISTOPHER" In-Reply-To: <20090707104440.GB21747@infradead.org> References: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> <20090707104440.GB21747@infradead.org> Message-Id: <20090709110342.2386.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Thu, 9 Jul 2009 11:04:32 +0900 (JST) X-Barracuda-Connect: fgwmail7.fujitsu.co.jp[192.51.44.37] X-Barracuda-Start-Time: 1247105077 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0484 1.0000 -1.7101 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.71 X-Barracuda-Spam-Status: No, SCORE=-1.71 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.2910 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, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > Could you please tell me its url? > > The previous thread was simply dead-ended and nothing happened. > Can you remember this thread subject? sorry, I haven't remember it. From chris.mason@oracle.com Thu Jul 9 08:01:19 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, UNPARSEABLE_RELAY 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 n69D1IsO028956 for ; Thu, 9 Jul 2009 08:01:19 -0500 X-ASG-Debug-ID: 1247144936-50b103160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from acsinet12.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DD4E2149B832 for ; Thu, 9 Jul 2009 06:08:56 -0700 (PDT) Received: from acsinet12.oracle.com (acsinet12.oracle.com [141.146.126.234]) by cuda.sgi.com with ESMTP id HEbXQtV5VAosvxIk for ; Thu, 09 Jul 2009 06:08:56 -0700 (PDT) Received: from rgminet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by acsinet12.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n69D1RQA008310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 9 Jul 2009 13:01:29 GMT Received: from abhmt003.oracle.com (abhmt003.oracle.com [141.146.116.12]) by rgminet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n69D1i31015254; Thu, 9 Jul 2009 13:01:45 GMT Received: from localhost (/72.225.47.21) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 09 Jul 2009 06:01:35 -0700 Date: Thu, 9 Jul 2009 09:01:34 -0400 From: Chris Mason To: KOSAKI Motohiro Cc: Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Message-ID: <20090709130134.GH18008@think> References: <20090707193015.7DCD.A69D9226@jp.fujitsu.com> <20090707104440.GB21747@infradead.org> <20090709110342.2386.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090709110342.2386.A69D9226@jp.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Source-IP: abhmt003.oracle.com [141.146.116.12] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A010206.4A55EA31.00B5:SCFSTAT5015188,ss=1,fgs=0 X-Barracuda-Connect: acsinet12.oracle.com[141.146.126.234] X-Barracuda-Start-Time: 1247144937 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0200 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=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2954 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: > > On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > > Could you please tell me its url? > > > > The previous thread was simply dead-ended and nothing happened. > > > > Can you remember this thread subject? sorry, I haven't remember it. This is the original thread, it did lead to a few different patches going in, but the nr_to_write change wasn't one of them. http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread -chris From bloodyscarion@gmail.com Thu Jul 9 09:12:48 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=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 n69ECls5032219 for ; Thu, 9 Jul 2009 09:12:47 -0500 X-ASG-Debug-ID: 1247148803-586202010000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0E57A352592 for ; Thu, 9 Jul 2009 07:13:23 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id qXHML4VkG5isvI6O for ; Thu, 09 Jul 2009 07:13:23 -0700 (PDT) Received: by bwz10 with SMTP id 10so174823bwz.20 for ; Thu, 09 Jul 2009 07:13:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:content-type :content-transfer-encoding; bh=IxJWGWpqeJ0YDedFt1Q8WkZOWzmB204oojOGQ+LFokE=; b=Vui2J7a8SOBzmo84ZP+6DiiBHWubA+c7DR1SnfNRim1u3N8ZHgba9UChNJFSoK7IDO eah5zRVrrNHQIQJozJi7xW3bnk/iYzmY0+DlmvRKMBAkZF1ECDxR4nfuXJ+T+UQ8sD5P wp9D9sBGeZoNnX9YbAhSWO4eOnE/2mHdTDA5k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; b=YFGEOXxmPo8NFMlSQgcrOSsjR3zpGxD+bXWNBy/m91cmWW7J0czXn2/32FlxzbSIjx NNzhhWKjORSOF1HwAPWi5BFsCK+x+w6rh0nzpbhUwjzVYqudzV2i1RzxYWTmOcLa4PMO E1U1b6lwlUrn9qle+JRLyib1lLJJ/cqnezRIg= Received: by 10.204.67.141 with SMTP id r13mr751628bki.166.1247148802190; Thu, 09 Jul 2009 07:13:22 -0700 (PDT) Received: from ?10.3.1.176? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id g28sm18230185fkg.15.2009.07.09.07.13.21 (version=SSLv3 cipher=RC4-MD5); Thu, 09 Jul 2009 07:13:21 -0700 (PDT) Message-ID: <4A55FAF7.5040908@gmail.com> Date: Thu, 09 Jul 2009 16:13:11 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_repair stops on "traversing filesystem..." Subject: xfs_repair stops on "traversing filesystem..." Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247148804 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.2956 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 Hello! I have a little problem with XFS filesystem that I have on one of my machines. I try to make xfs_repair that was not making any problems before, but xfs_repair stops on: Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... CPU usage grows up to 100%. I left it in the night hoping it will finish job till morning, but the situation hasn't changed... System is Debian Lenny with current updates and custom 2.6.30.1 kernel xfsprogs-2.9.8. Filesysystem is placed on LVM2 Logical Volume. I upgraded xfsprogs to 3.0.2 version and the problem still persists. Then I reverted to 2.9.8 package from Debian Lenny. Switching back to debian default 2.6.26 kernel doesn't help too. I can mount this filesystem and operate on it. Data on this system is not so crucial, because it's backup/testing machine, but it would be great to keep this data, because synchronizing 14TB of data will take some time. Output from xfs_info: # xfs_info /mnt/storage/ meta-data=/dev/mapper/p02bvg-p02blv isize=256 agcount=32, agsize=268435455 blks = sectsz=512 attr=2 data = bsize=4096 blocks=8410889216, imaxpct=5 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=2 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=4096 blocks=0, rtextents=0 Any ideas how to make xfs_repair working again? Best regards, Tomasz Kruszona From olaf@sgi.com Thu Jul 9 09:52:18 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=unavailable version=3.3.0-rupdated Received: from fransum.emea.sgi.com (fransum.emea.sgi.com [144.253.208.10]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n69EqHCI035045; Thu, 9 Jul 2009 09:52:18 -0500 Received: from fransum.emea.sgi.com (localhost [127.0.0.1]) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11) with ESMTP id n69EqnBQ300103; Thu, 9 Jul 2009 16:52:49 +0200 (MEST) Received: (from olaf@localhost) by fransum.emea.sgi.com (SGI-8.12.11.20060308/8.12.11/Submit) id n69EqnWF299759; Thu, 9 Jul 2009 16:52:49 +0200 (MEST) To: Jaswinder Singh Rajput Cc: felixb@sgi.com, xfs-masters@oss.sgi.com, xfs@oss.sgi.com, Sam Ravnborg , LKML Subject: Re: [PATCH 34/44] includecheck fix: fs/xfs, xfs_iops.c References: <1247063308.4382.12.camel@ht.satnam> <1247067971.4382.94.camel@ht.satnam> From: Olaf Weber Date: Thu, 09 Jul 2009 16:52:48 +0200 In-Reply-To: <1247067971.4382.94.camel@ht.satnam> (Jaswinder Singh Rajput's message of "Wed, 08 Jul 2009 21:16:11 +0530") Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) XEmacs/21.4.3 (irix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Jaswinder Singh Rajput writes: > fix the following 'make includecheck' warning: > fs/xfs/linux-2.6/xfs_iops.c: xfs_acl.h is included more than once. > Signed-off-by: Jaswinder Singh Rajput Acked-By: Olaf Weber > --- > fs/xfs/linux-2.6/xfs_iops.c | 1 - > 1 files changed, 0 insertions(+), 1 deletions(-) > diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c > index 58973bb..793a146 100644 > --- a/fs/xfs/linux-2.6/xfs_iops.c > +++ b/fs/xfs/linux-2.6/xfs_iops.c > @@ -43,7 +43,6 @@ > #include "xfs_error.h" > #include "xfs_itable.h" > #include "xfs_rw.h" > -#include "xfs_acl.h" > #include "xfs_attr.h" > #include "xfs_buf_item.h" > #include "xfs_utils.h" > -- > 1.6.0.6 -- Olaf Weber SGI Phone: +31(0)30-6696752 Veldzigt 2b Fax: +31(0)30-6696799 Technical Lead 3454 PW de Meern Vnet: 955-7151 Storage Software The Netherlands Email: olaf@sgi.com From sandeen@sandeen.net Thu Jul 9 09:53:43 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 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 n69ErgCH035115 for ; Thu, 9 Jul 2009 09:53:43 -0500 X-ASG-Debug-ID: 1247151681-344900d90000-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 DE906A14B33 for ; Thu, 9 Jul 2009 08:01:21 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 3pravGHEnPOENKEa for ; Thu, 09 Jul 2009 08:01:21 -0700 (PDT) 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 3C5CDA9C9A9; Thu, 9 Jul 2009 09:54:16 -0500 (CDT) Message-ID: <4A560497.7@sandeen.net> Date: Thu, 09 Jul 2009 09:54:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> In-Reply-To: <4A55FAF7.5040908@gmail.com> 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: 1247151681 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 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.2959 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 Tomek Kruszona wrote: > Hello! > > I have a little problem with XFS filesystem that I have on one of my > machines. I try to make xfs_repair that was not making any problems > before, but xfs_repair stops on: > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > > CPU usage grows up to 100%. I left it in the night hoping it will finish > job till morning, but the situation hasn't changed... ... > Any ideas how to make xfs_repair working again? You might try running with -P, though I doubt that's the issue. If that doesn't help, you could provide an xfs_metadump image (in public or to me in private) and I'll take a look to see what's going on. -Eric From bloodyscarion@gmail.com Thu Jul 9 10:02:37 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=BAYES_00 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 n69F2a3n035469 for ; Thu, 9 Jul 2009 10:02:36 -0500 X-ASG-Debug-ID: 1247151791-3509013f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C32B3133A73D for ; Thu, 9 Jul 2009 08:03:12 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.154]) by cuda.sgi.com with ESMTP id GU3weSDmjcBST87g for ; Thu, 09 Jul 2009 08:03:12 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id l27so1320168fgb.8 for ; Thu, 09 Jul 2009 08:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=VJvp4Q4pCzi3tdY3WNi+Y66JUQLkaempfsshTjkcLzw=; b=A2dcUECAsVWB9oTgTCcOwlEbnInb5rfRyaOrao9bXwBJEAc6JXVhpLkxSbTwGZT32B /C6TRK1XkgNy9N8uw3aqlu8omRIvve1mXrw3Tp6lLpPD1LP69D2RK30/Fag2Nonnwxqn RSLzp9vPkTiUyrz5n4LY1YIBwkIAW7EDTRlyE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=qP0Kh17iZfofWY46gkhK4pBACk6ppdGiFL+OSSfuM4kjZ1S6VDNwudqhys7QPdliI1 BakFjostf3KRPQD/bBD3f3phoA/Z3/3hjdyMO47SlyYmdyN5vpU9wm4y8tShS2QDRzIk 9XEKuHFvrrE22KRSt9JL6wrxey+kllKbYIv30= Received: by 10.86.76.4 with SMTP id y4mr254199fga.22.1247151791507; Thu, 09 Jul 2009 08:03:11 -0700 (PDT) Received: from ?10.3.1.176? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id 3sm80093fge.3.2009.07.09.08.03.10 (version=SSLv3 cipher=RC4-MD5); Thu, 09 Jul 2009 08:03:10 -0700 (PDT) Message-ID: <4A5606A7.7070109@gmail.com> Date: Thu, 09 Jul 2009 17:03:03 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A560497.7@sandeen.net> In-Reply-To: <4A560497.7@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.154] X-Barracuda-Start-Time: 1247151792 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4025 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 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.2960 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 Eric Sandeen wrote: > You might try running with -P, though I doubt that's the issue. > > If that doesn't help, you could provide an xfs_metadump image (in public > or to me in private) and I'll take a look to see what's going on. Thank you! I will just left xfs_repair -P to do the job and let you know if it helps. Otherwise, I'll send you metadump image in private. Best regards, Tomasz Kruszona From Frederic.Patrault@exane.com Thu Jul 9 10:32: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=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 n69FW7ZW036827 for ; Thu, 9 Jul 2009 10:32:08 -0500 X-ASG-Debug-ID: 1247153983-42e801340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail6.exane.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5B1D2A1571D for ; Thu, 9 Jul 2009 08:39:44 -0700 (PDT) Received: from mail6.exane.com (mail6.exane.com [195.13.36.55]) by cuda.sgi.com with ESMTP id N0PCuKnrA6HReAmM for ; Thu, 09 Jul 2009 08:39:44 -0700 (PDT) Received: from mail6.exane.com (mail6.exane.com [127.0.0.1]) by localhost (MailServerExane-9) with SMTP id 6ECECF8188 for ; Thu, 9 Jul 2009 17:32:38 +0200 (CEST) Received: from spl-nothu-002.insitu.ad.exane.com (spl-nothu-002 [10.176.12.1]) by mail6.exane.com (MailServerExane-9) with ESMTP id 60414F8184 for ; Thu, 9 Jul 2009 17:32:38 +0200 (CEST) X-ASG-Orig-Subj: Growfs 10Tb extension corrupted FS Subject: Growfs 10Tb extension corrupted FS X-KeepSent: D6EDBDC1:E3DD344B-C12575EE:0054FDE0; type=4; name=$KeepSent To: xfs@oss.sgi.com X-Mailer: Lotus Notes Release 8.5 December 05, 2008 Message-ID: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> From: Frederic Patrault Date: Thu, 9 Jul 2009 17:32:27 +0200 X-MIMETrack: Serialize by Router on spl-nothu-002/Exane(Release 8.5|December 05, 2008) at 07/09/2009 05:32:38 PM MIME-Version: 1.0 Content-type: text/plain; charset=US-ASCII X-Barracuda-Connect: mail6.exane.com[195.13.36.55] X-Barracuda-Start-Time: 1247153985 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0206 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.2963 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 Hello, i ran into the bug http://oss.sgi.com/archives/xfs/2007-01/msg00053.html on Centos 5.2 x64 TAKE 959978 - growing an XFS filesystem by more than 2TB is broken XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1588 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_alloc.c. Caller 0xffffffff8859056b Call Trace: [] :xfs:xfs_free_ag_extent+0x19f/0x67f [] :xfs:xfs_free_extent+0xa9/0xc9 [] :xfs:xfs_growfs_data+0x7b3/0x999 [] :xfs:xfs_ioctl+0x11ec/0x137c [] n_tty_receive_buf+0xd45/0xdc5 [] n_tty_receive_buf+0xd45/0xdc5 [] pty_write+0x32/0x3a [] __wake_up+0x38/0x4f [] default_wake_function+0x0/0xe [] :xfs:xfs_file_ioctl+0x2f/0x57 [] do_ioctl+0x21/0x6b [] vfs_ioctl+0x248/0x261 [] sys_ioctl+0x59/0x78 [] tracesys+0xd5/0xe0 Filesystem "dm-10": XFS internal error xfs_trans_cancel at line 1138 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Caller 0xffffffff885b30a4 Call Trace: [] :xfs:xfs_trans_cancel+0x5b/0xfe [] :xfs:xfs_growfs_data+0x949/0x999 [] :xfs:xfs_ioctl+0x11ec/0x137c [] n_tty_receive_buf+0xd45/0xdc5 [] n_tty_receive_buf+0xd45/0xdc5 [] pty_write+0x32/0x3a [] __wake_up+0x38/0x4f [] default_wake_function+0x0/0xe [] :xfs:xfs_file_ioctl+0x2f/0x57 [] do_ioctl+0x21/0x6b [] vfs_ioctl+0x248/0x261 [] sys_ioctl+0x59/0x78 [] tracesys+0xd5/0xe0 xfs_force_shutdown(dm-10,0x8) called from line 1139 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Return address = 0xffffffff885ca941 Filesystem "dm-10": Corruption of in-memory data detected. Shutting down filesystem: dm-10 Please umount the filesystem, and rectify the problem(s) xfs_force_shutdown(dm-10,0x1) called from line 424 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. Return address = 0xffffffff885d47f1 xfs_force_shutdown(dm-10,0x1) called from line 424 of file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. Return address = 0xffffffff885d47f1 Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed Filesystem "dm-10": Disabling barriers, not supported by the underlying device attempt to access beyond end of device dm-10: rw=0, want=71676493824, limit=49392123904 I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff ("xfs_read_buf") error 5 buf count 512 XFS: size check 2 failed i'm trying to sort out to get the situation back before the extension but i did not manage please advise on how i could : Original FS was ~13Tb i added ~10Tb then XFS failed to growfs because of the bug Now i xfs_repair it is a success but when i mount the FS i have a ~35Tb FS umount the trying to mount it give an error same problem, 1st magic number can't be found i don't know how to fix it ;-( xfs_db -r /dev/VG_SAN_DATA01/VDL_DATA01 xfs_db> sb 0 xfs_db> p magicnum = 0x58465342 blocksize = 4096 dblocks = 8959561728 rblocks = 0 rextents = 0 uuid = cc4a679f-5153-4b6b-8620-8a12546845ef logstart = 2147483652 rootino = 128 rbmino = 129 rsumino = 130 rextsize = 1 agblocks = 75112352 agcount = 120 rbmblocks = 0 logblocks = 32768 versionnum = 0x3084 sectsize = 512 inodesize = 256 inopblock = 16 fname = "\000\000\000\000\000\000\000\000\000\000\000\000" blocklog = 12 sectlog = 9 inodelog = 8 inopblog = 4 agblklog = 27 rextslog = 0 inprogress = 0 imax_pct = 25 icount = 768 ifree = 49 fdblocks = 5599584628 frextents = 0 uquotino = 0 gquotino = 0 qflags = 0 flags = 0 shared_vn = 0 inoalignmt = 2 unit = 0 width = 0 dirblklog = 0 logsectlog = 0 logsectsize = 0 logsunit = 0 features2 = 0 #cat /proc/partitions 253 10 24696061952 dm-10 kind regards Frederic Patrault ___________________________________ The integrity of this message cannot be guaranteed on the internet .Therefore EXANE cannot be considered responsible for the contents. If you are not the intended recipient of this message ,please delete it and notify the sender. This message is provided for information purposes only and should not be construed as a solicitation or offer to buy or sell any securities or related financial instruments Although it may contain some elements from publications produced by Exane's research department ,this message is not research. Please consult our web site for important disclaimers and disclosures concerning Exane's research (http://www.exane.com) ___________________________________ From cattelan@thebarn.com Thu Jul 9 17:15:25 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 n69MFOfx056124 for ; Thu, 9 Jul 2009 17:15:25 -0500 X-ASG-Debug-ID: 1247177759-14ca01890000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from slurp.thebarn.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2A403354743 for ; Thu, 9 Jul 2009 15:16:00 -0700 (PDT) Received: from slurp.thebarn.com (mail.thebarn.com [208.42.117.202]) by cuda.sgi.com with ESMTP id Wz00Gv1eh5UEWX47 for ; Thu, 09 Jul 2009 15:16:00 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.x.thebarn.com [10.0.0.11]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n69MFa85099917; Thu, 9 Jul 2009 17:15:52 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <4A566C08.6070302@xfs.org> Date: Thu, 09 Jul 2009 17:15:36 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Frederic Patrault CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Growfs 10Tb extension corrupted FS Subject: Re: Growfs 10Tb extension corrupted FS References: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> In-Reply-To: <17646_1247153558_4A560D96_17646_249626_1_OFD6EDBDC1.E3DD344B-ONC12575EE.0054FDE0-C12575EE.00556215@exane.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.thebarn.com[208.42.117.202] X-Barracuda-Start-Time: 1247177761 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1812 1.0000 -0.9282 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.93 X-Barracuda-Spam-Status: No, SCORE=-0.93 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.2982 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 Frederic Patrault wrote: > Hello, > > > > i ran into the bug http://oss.sgi.com/archives/xfs/2007-01/msg00053.html on > Centos 5.2 x64 > TAKE 959978 - growing an XFS filesystem by more than 2TB is broken > > Heh ya our old friend. I do have experience with trying to back out from this issue, but the amount of data depends on how much the fs was mucked with. Basically what you will need to do is with xfs_db reset the the FS size and ag count back to what is was before the grow cmd messed it up. The last ag will still potentially be wrong since the grow cmd try to convert it from a partial ag a full ag and those numbers are probably wrong as well. If repair was run that is a different story and may or may not have made big mess of things. > > XFS internal error XFS_WANT_CORRUPTED_GOTO at line 1588 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_alloc.c. > Caller 0xffffffff8859056b > > Call Trace: > [] :xfs:xfs_free_ag_extent+0x19f/0x67f > [] :xfs:xfs_free_extent+0xa9/0xc9 > [] :xfs:xfs_growfs_data+0x7b3/0x999 > [] :xfs:xfs_ioctl+0x11ec/0x137c > [] n_tty_receive_buf+0xd45/0xdc5 > [] n_tty_receive_buf+0xd45/0xdc5 > [] pty_write+0x32/0x3a > [] __wake_up+0x38/0x4f > [] default_wake_function+0x0/0xe > [] :xfs:xfs_file_ioctl+0x2f/0x57 > [] do_ioctl+0x21/0x6b > [] vfs_ioctl+0x248/0x261 > [] sys_ioctl+0x59/0x78 > [] tracesys+0xd5/0xe0 > > Filesystem "dm-10": XFS internal error xfs_trans_cancel at line 1138 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. > Caller 0xffffffff885b30a4 > > Call Trace: > [] :xfs:xfs_trans_cancel+0x5b/0xfe > [] :xfs:xfs_growfs_data+0x949/0x999 > [] :xfs:xfs_ioctl+0x11ec/0x137c > [] n_tty_receive_buf+0xd45/0xdc5 > [] n_tty_receive_buf+0xd45/0xdc5 > [] pty_write+0x32/0x3a > [] __wake_up+0x38/0x4f > [] default_wake_function+0x0/0xe > [] :xfs:xfs_file_ioctl+0x2f/0x57 > [] do_ioctl+0x21/0x6b > [] vfs_ioctl+0x248/0x261 > [] sys_ioctl+0x59/0x78 > [] tracesys+0xd5/0xe0 > > xfs_force_shutdown(dm-10,0x8) called from line 1139 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. > Return address = 0xffffffff885ca941 > Filesystem "dm-10": Corruption of in-memory data detected. Shutting down > filesystem: dm-10 > Please umount the filesystem, and rectify the problem(s) > xfs_force_shutdown(dm-10,0x1) called from line 424 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. > Return address = 0xffffffff885d47f1 > xfs_force_shutdown(dm-10,0x1) called from line 424 of > file /home/buildsvn/rpmbuild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_rw.c. > Return address = 0xffffffff885d47f1 > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > Filesystem "dm-10": Disabling barriers, not supported by the underlying > device > attempt to access beyond end of device > dm-10: rw=0, want=71676493824, limit=49392123904 > I/O error in filesystem ("dm-10") meta-data dev dm-10 block 0x10b0407fff > ("xfs_read_buf") error 5 buf count 512 > XFS: size check 2 failed > > > > > i'm trying to sort out to get the situation back before the extension but i > did not manage > please advise on how i could : > > Original FS was ~13Tb i added ~10Tb then XFS failed to growfs because of > the bug > Now i xfs_repair it is a success but when i mount the FS i have a ~35Tb FS > > umount the trying to mount it give an error same problem, 1st magic number > can't be found > > > i don't know how to fix it ;-( > > xfs_db -r /dev/VG_SAN_DATA01/VDL_DATA01 > xfs_db> sb 0 > xfs_db> p > magicnum = 0x58465342 > blocksize = 4096 > dblocks = 8959561728 > rblocks = 0 > rextents = 0 > uuid = cc4a679f-5153-4b6b-8620-8a12546845ef > logstart = 2147483652 > rootino = 128 > rbmino = 129 > rsumino = 130 > rextsize = 1 > agblocks = 75112352 > agcount = 120 > rbmblocks = 0 > logblocks = 32768 > versionnum = 0x3084 > sectsize = 512 > inodesize = 256 > inopblock = 16 > fname = "\000\000\000\000\000\000\000\000\000\000\000\000" > blocklog = 12 > sectlog = 9 > inodelog = 8 > inopblog = 4 > agblklog = 27 > rextslog = 0 > inprogress = 0 > imax_pct = 25 > icount = 768 > ifree = 49 > fdblocks = 5599584628 > frextents = 0 > uquotino = 0 > gquotino = 0 > qflags = 0 > flags = 0 > shared_vn = 0 > inoalignmt = 2 > unit = 0 > width = 0 > dirblklog = 0 > logsectlog = 0 > logsectsize = 0 > logsunit = 0 > features2 = 0 > > #cat /proc/partitions > 253 10 24696061952 dm-10 > > kind regards > Frederic Patrault > > > > ___________________________________ > > The integrity of this message cannot be guaranteed on the internet .Therefore EXANE cannot be considered responsible for the contents. > If you are not the intended recipient of this message ,please delete it and notify the sender. > > This message is provided for information purposes only and should not be construed as a solicitation or offer to buy or sell any securities or related financial instruments > Although it may contain some elements from publications produced by Exane's research department ,this message is not research. > Please consult our web site for important disclaimers and disclosures concerning Exane's research (http://www.exane.com) > ___________________________________ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > > From christopher.walker@gmail.com Thu Jul 9 18:23:44 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=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 n69NNhQ4059397 for ; Thu, 9 Jul 2009 18:23:44 -0500 X-ASG-Debug-ID: 1247182284-084201230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from an-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D338A24B57 for ; Thu, 9 Jul 2009 16:31:25 -0700 (PDT) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.241]) by cuda.sgi.com with ESMTP id k2NMzE3lXituxodH for ; Thu, 09 Jul 2009 16:31:25 -0700 (PDT) Received: by an-out-0708.google.com with SMTP id b2so301276ana.32 for ; Thu, 09 Jul 2009 16:24:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=D2xplzGJSh4nkkdIcqJCCxyfyCCtL2bq1VEbEzva4KE=; b=SoBEvY6Gpu4ci+m25y3JBcSUiMp7BkLiIEsiJPCwkaVSsd2zO0TL+bubPZlhp5p3Zz g81FXv09T9fIzrmNEo6Lwzw5gDy8pm78LjRzA5ao+RIjZYRJ37dQj98EW4CDj/7kAIjI 5C2c8XGMZOSbVKp0beOHKD27xswy9Kr1EfhKg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=Ht6xfyAqHtn/3u4FD9qg2VTVuj2chOKJoWhc1UKOFDQHgWgsNpYdcmyPQA+WFkacPq bF0txJblR2mrasZ9jNT/6lKITFZKYmAs2hJHCxSdOwytjSdAdMlNwPmLVWYsDz9IjuFi IDe8g3jPrl5ql1QML7cdkFot9Hf59o0jkupkA= MIME-Version: 1.0 Received: by 10.100.242.11 with SMTP id p11mr1856702anh.113.1247181858850; Thu, 09 Jul 2009 16:24:18 -0700 (PDT) Date: Thu, 9 Jul 2009 19:24:18 -0400 Message-ID: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> X-ASG-Orig-Subj: kernel BUG with xfs_quota Subject: kernel BUG with xfs_quota From: Chris Walker To: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: an-out-0708.google.com[209.85.132.241] X-Barracuda-Start-Time: 1247182285 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: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.2987 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello, I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel BUG: Assertion failed: dst->d_btimer != 0, file: fs/xfs/quota/xfs_qm_syscalls.c, line: 927 ------------[ cut here ]------------ kernel BUG at fs/xfs/support/debug.c:108! invalid opcode: 0000 [#1] SMP last sysfs file: /sys/devices/system/cpu/cpu3/cache/index2/shared_cpu_map CPU 3 Modules linked in: hidp rfcomm l2cap bluetooth bonding ipv6 xfs nfsd lockd nfs_acl auth_rpcgss exportfs sunrpc dm_mirror dm_region_hash dm_log dm_multipath dm_mod sbs sbshc battery acpi_memhotplug ac parport_pc lp parport sr_mod cdrom sg joydev usb_storage e1000 button serio_raw rtc_cmos rtc_core rtc_lib amd_rng i2c_amd756 k8temp pata_acpi i2c_amd8111 hwmon shpchp i2c_core pcspkr raid456 async_xor async_memcpy async_tx xor sata_mv libata sd_mod scsi_mod raid1 ext3 jbd ehci_hcd ohci_hcd uhci_hcd Pid: 7826, comm: xfs_quota Not tainted 2.6.29.4 #1 Sun Fire X4500 RIP: 0010:[] [] assfail+0x1a/0x1e [xfs] RSP: 0018:ffff8803ed811e48 EFLAGS: 00010292 RAX: 0000000000000059 RBX: ffff8803ed811ec8 RCX: 000000000001b4e7 RDX: ffff8802869c8000 RSI: 0000000000000046 RDI: ffffffff80893f74 RBP: ffff8803f4cbcbd8 R08: 0000000000000000 R09: ffff880028083080 R10: ffff880028083080 R11: 0000010000000296 R12: ffff8803fdc96000 R13: 0000000000000000 R14: ffff8803fdc93c00 R15: 0000000000004e39 FS: 00007fb60e5596f0(0000) GS:ffff8803fe8220c0(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 00000000008c58d0 CR3: 00000001f98a8000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process xfs_quota (pid: 7826, threadinfo ffff8803ed810000, task ffff8803fd23a7c0) Stack: ffff8803ed811ec8 ffffffffa02c2fde 0000000000000000 ffff8803fdc96000 ffff8803ed811ec8 ffffffffa02c30bf 0000000000005803 ffff8803f4cbcb60 0000000000000000 ffff8803ed811ec8 0000000000005803 ffffffffa0329d25 Call Trace: [] ? xfs_qm_export_dquot+0x1af/0x1e4 [xfs] [] ? xfs_qm_scall_getquota+0xac/0xc0 [xfs] [] ? xfs_fs_getxquota+0x37/0x3b [xfs] [] ? sys_quotactl+0x574/0x604 [] ? system_call_fastpath+0x16/0x1b Code: 44 24 08 01 00 00 00 e8 4e c7 00 e0 48 83 c4 18 c3 89 d1 48 83 ec 08 48 89 f2 31 c0 48 89 fe 48 c7 c7 2b 03 34 a0 e8 2c bd f0 df <0f> 0b eb fe 41 56 83 e7 07 83 ff 07 41 55 49 89 d5 41 54 49 89 RIP [] assfail+0x1a/0x1e [xfs] RSP ---[ end trace 1c72dd68c3f985d1 ]--- This rendered the filesystem increasingly unstable until a hard reboot was necessary. Now any xfs_quota command, even just reporting, throws the same assertion. Any idea how I can repair this? Thanks, Chris Thanks, Chris From sandeen@sandeen.net Thu Jul 9 22:59:57 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 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 n6A3xvg0071735 for ; Thu, 9 Jul 2009 22:59:57 -0500 X-ASG-Debug-ID: 1247198432-3ec700470000-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 B04403551A6 for ; Thu, 9 Jul 2009 21:00:32 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id ZoG0zLlx2jB2szQ1 for ; Thu, 09 Jul 2009 21:00:32 -0700 (PDT) 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 40E9FA54764; Thu, 9 Jul 2009 23:00:30 -0500 (CDT) Message-ID: <4A56BCDE.2010609@sandeen.net> Date: Thu, 09 Jul 2009 23:00:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Chris Walker CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> In-Reply-To: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> 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: 1247198433 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.3006 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 Chris Walker wrote: > Hello, > > I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g > bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel > BUG: > > Assertion failed: dst->d_btimer != 0, file: > fs/xfs/quota/xfs_qm_syscalls.c, line: 927 Well, you hit this: #ifdef DEBUG if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == XFS_USER_QUOTA) || (XFS_IS_OQUOTA_ENFORCED(mp) && (dst->d_flags & (XFS_PROJ_QUOTA | XFS_GROUP_QUOTA)))) && dst->d_id != 0) { if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && (dst->d_blk_softlimit > 0)) { ASSERT(dst->d_btimer != 0); } ... which first raises the question, why are you running with CONFIG_XFS_DEBUG? :) I'm no quota guru, but this is something like... If quota is enabled and the block count is over a non-0 soft limit, then assert that the timer is non-0 (the timer being how much time is left before service is refused. It also got all those values off the disk just prior to the ASSERT. ... and I'm not sure what the problem may be. But you hit an internal debugging assert which is only on with CONFIG_XFS_DEBUG, you may get away with just running without that for now :) -Eric From marcelin@zebra.uem.mz Fri Jul 10 00:19:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=BAYES_50,URIBL_SBL 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 n6A5J4K9078233 for ; Fri, 10 Jul 2009 00:19:05 -0500 X-ASG-Debug-ID: 1247203606-673800a30000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from zebra.uem.mz (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 502BFA27889 for ; Thu, 9 Jul 2009 22:26:47 -0700 (PDT) Received: from zebra.uem.mz (zebra.uem.mz [196.3.96.67]) by cuda.sgi.com with ESMTP id gxHwmdRCtdws0fO6 for ; Thu, 09 Jul 2009 22:26:47 -0700 (PDT) Received: from zebra.uem.mz (localhost.uem.mz [127.0.0.1]) by zebra.uem.mz (Postfix) with ESMTP id B138097E832; Fri, 10 Jul 2009 04:47:17 +0200 (CAT) Received: from zebra.uem.mz (localhost.uem.mz [127.0.0.1]) by zebra.uem.mz (Postfix) with ESMTP id 5F32197E764; Fri, 10 Jul 2009 04:47:17 +0200 (CAT) From: "Marcelino MCT" Reply-To: mrterrysteven22@w.cn X-ASG-Orig-Subj: Claims Subject: Claims Date: Fri, 10 Jul 2009 05:47:17 +0300 Message-Id: <20090710024717.M32498@zebra.uem.mz> X-Mailer: OpenWebMail 2.53 X-OriginatingIP: 78.138.3.238 (marcelin) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 To: undisclosed-recipients:; X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: zebra.uem.mz[196.3.96.67] X-Barracuda-Start-Time: 1247203608 X-Barracuda-Bayes: INNOCENT GLOBAL 0.7158 1.0000 1.4908 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.49 X-Barracuda-Spam-Status: No, SCORE=1.49 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MAILTO_TO_SPAM_ADDR X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3011 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email X-Virus-Status: Clean We congratulate you on the selection of the Nokia'N'Series Program held on 05/07/09. You have been approved claim the sum of £ 1,000,000.00 GBP. For claims contact Mr. Terry Steven E-mail: mrterrysteven22@w.cn with the following details 1. full Name: 2. Address: 3. Nationality: 4. Date of Birth: 5. Occupation: 6. Phone: 7. Mobile: 8. Fax: 9. State of Origin: 10.Country: 11.Sex: 12.E-mail Address: From sandeen@sandeen.net Fri Jul 10 00:27:57 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 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 n6A5Ruex078696 for ; Fri, 10 Jul 2009 00:27:57 -0500 X-ASG-Debug-ID: 1247204130-7869000a0000-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 AF0B8A25B63 for ; Thu, 9 Jul 2009 22:35:30 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JOMIOgkV8QhEaCPW for ; Thu, 09 Jul 2009 22:35:30 -0700 (PDT) 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 9D6CBA9DADB; Fri, 10 Jul 2009 00:28:22 -0500 (CDT) Message-ID: <4A56D176.9010702@sandeen.net> Date: Fri, 10 Jul 2009 00:28:22 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> In-Reply-To: <4A55FAF7.5040908@gmail.com> 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: 1247204130 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.3013 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 Tomek Kruszona wrote: > Hello! > > I have a little problem with XFS filesystem that I have on one of my > machines. I try to make xfs_repair that was not making any problems > before, but xfs_repair stops on: > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > > CPU usage grows up to 100%. I left it in the night hoping it will finish > job till morning, but the situation hasn't changed... > > System is Debian Lenny with current updates and custom 2.6.30.1 kernel > xfsprogs-2.9.8. Filesysystem is placed on LVM2 Logical Volume. > > I upgraded xfsprogs to 3.0.2 version and the problem still persists. > Then I reverted to 2.9.8 package from Debian Lenny. > Switching back to debian default 2.6.26 kernel doesn't help too. > > I can mount this filesystem and operate on it. > > Data on this system is not so crucial, because it's backup/testing > machine, but it would be great to keep this data, because synchronizing > 14TB of data will take some time. > > Output from xfs_info: > # xfs_info /mnt/storage/ > meta-data=/dev/mapper/p02bvg-p02blv isize=256 agcount=32, > agsize=268435455 blks > = sectsz=512 attr=2 > data = bsize=4096 blocks=8410889216, imaxpct=5 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 > log =internal bsize=4096 blocks=32768, version=2 > = sectsz=512 sunit=0 blks, lazy-count=0 > realtime =none extsz=4096 blocks=0, rtextents=0 > > Any ideas how to make xfs_repair working again? No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, and it looks like cache_node_allocate() fails to get a new node and we keep spinning. I need to look some more at what's going on.... -Eric From kosaki.motohiro@jp.fujitsu.com Fri Jul 10 02:11: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.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 n6A7BiTa083200 for ; Fri, 10 Jul 2009 02:11:45 -0500 X-ASG-Debug-ID: 1247209938-08e003dc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fgwmail5.fujitsu.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 94B78355BF4 for ; Fri, 10 Jul 2009 00:12:19 -0700 (PDT) Received: from fgwmail5.fujitsu.co.jp (fgwmail5.fujitsu.co.jp [192.51.44.35]) by cuda.sgi.com with ESMTP id Il6eomRkAY0MUCkP for ; Fri, 10 Jul 2009 00:12:19 -0700 (PDT) Received: from m3.gw.fujitsu.co.jp ([10.0.50.73]) by fgwmail5.fujitsu.co.jp (Fujitsu Gateway) with ESMTP id n6A7CHWa006342 for (envelope-from kosaki.motohiro@jp.fujitsu.com); Fri, 10 Jul 2009 16:12:17 +0900 Received: from smail (m3 [127.0.0.1]) by outgoing.m3.gw.fujitsu.co.jp (Postfix) with ESMTP id 22FB045DE55 for ; Fri, 10 Jul 2009 16:12:17 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (s3.gw.fujitsu.co.jp [10.0.50.93]) by m3.gw.fujitsu.co.jp (Postfix) with ESMTP id CABCC45DE57 for ; Fri, 10 Jul 2009 16:12:16 +0900 (JST) Received: from s3.gw.fujitsu.co.jp (localhost.localdomain [127.0.0.1]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id 307171DB8042 for ; Fri, 10 Jul 2009 16:12:16 +0900 (JST) Received: from m107.s.css.fujitsu.com (m107.s.css.fujitsu.com [10.249.87.107]) by s3.gw.fujitsu.co.jp (Postfix) with ESMTP id C68D11DB803B for ; Fri, 10 Jul 2009 16:12:15 +0900 (JST) Received: from m107.css.fujitsu.com (m107 [127.0.0.1]) by m107.s.css.fujitsu.com (Postfix) with ESMTP id 9B30B670026; Fri, 10 Jul 2009 16:12:15 +0900 (JST) Received: from [127.0.0.1] (unknown [10.124.100.179]) by m107.s.css.fujitsu.com (Postfix) with ESMTP id 1A2BE670029; Fri, 10 Jul 2009 16:12:15 +0900 (JST) X-SecurityPolicyCheck-FJ: OK by FujitsuOutboundMailChecker v1.3.1 Received: from KOSANOTE2[10.124.100.179] by KOSANOTE2 (FujitsuOutboundMailChecker v1.3.1/9992[10.124.100.179]); Fri, 10 Jul 2009 16:12:13 +0900 (JST) From: KOSAKI Motohiro To: Chris Mason X-ASG-Orig-Subj: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Subject: Re: [PATCH] bump up nr_to_write in xfs_vm_writepage Cc: kosaki.motohiro@jp.fujitsu.com, Christoph Hellwig , Eric Sandeen , xfs mailing list , linux-mm@kvack.org, Olaf Weber In-Reply-To: <20090709130134.GH18008@think> References: <20090709110342.2386.A69D9226@jp.fujitsu.com> <20090709130134.GH18008@think> Message-Id: <20090710153349.17EC.A69D9226@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.50.07 [ja] Date: Fri, 10 Jul 2009 16:12:15 +0900 (JST) X-Barracuda-Connect: fgwmail5.fujitsu.co.jp[192.51.44.35] X-Barracuda-Start-Time: 1247209940 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 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.3018 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 Thu, Jul 09, 2009 at 11:04:32AM +0900, KOSAKI Motohiro wrote: > > > On Tue, Jul 07, 2009 at 07:33:04PM +0900, KOSAKI Motohiro wrote: > > > > At least, I agree with Olaf. if you got someone's NAK in past thread, > > > > Could you please tell me its url? > > > > > > The previous thread was simply dead-ended and nothing happened. > > > > > > > Can you remember this thread subject? sorry, I haven't remember it. > > This is the original thread, it did lead to a few different patches > going in, but the nr_to_write change wasn't one of them. > > http://kerneltrap.org/mailarchive/linux-kernel/2008/10/1/3472704/thread Thanks good pointer. This thread have multiple interesting discussion. 1. making ext4_write_cache_pages() or modifying write_cache_pages() I think this is Christoph's homework. he said > I agree. But I'm still not quite sure if that requirement is unique to > ext4 anyway. Give me some time to dive into the writeback code again, > haven't been there for quite a while. if he says modifying write_cache_pages() is necessary, I'd like to review it. 2. Current mapping->writeback_index updating is not proper? I'm not sure which solution is better. but I think your first proposal is enough acceptable. 3. Current wbc->nr_to_write value is not proper? Current writeback_set_ratelimit() doesn't permit that ratelimit_pages exceed 4M byte. but it is too low restriction for nowadays. (that's my understand. right?) ======================================================= void writeback_set_ratelimit(void) { ratelimit_pages = vm_total_pages / (num_online_cpus() * 32); if (ratelimit_pages < 16) ratelimit_pages = 16; if (ratelimit_pages * PAGE_CACHE_SIZE > 4096 * 1024) ratelimit_pages = (4096 * 1024) / PAGE_CACHE_SIZE; } ======================================================= Yes, 4M bytes are pretty magical constant. We have three choice A. Remove magical 4M constant simple (a bit danger) B. Decide high border from IO capability C. Introduce new /proc knob (as Olaf proposed) In my personal prefer, B & C are better. From bloodyscarion@gmail.com Fri Jul 10 02:27:00 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=BAYES_00 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 n6A7R0ei083704 for ; Fri, 10 Jul 2009 02:27:00 -0500 X-ASG-Debug-ID: 1247210855-124f01880000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fg-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AB7D81B4F1AA for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) Received: from fg-out-1718.google.com (fg-out-1718.google.com [72.14.220.152]) by cuda.sgi.com with ESMTP id NMAIx02ui830N7nE for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) Received: by fg-out-1718.google.com with SMTP id l27so1514384fgb.8 for ; Fri, 10 Jul 2009 00:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=aKu1UiusR+oa/Im6If5EHNK5BYrGHMXC7BSyM3rEvNc=; b=uOHQNyU6lUIuoMozKXbxSh+ImUbUOPumJWHtx0QQm7qCIMPjCidczsfrU+mq7Hk84Z g+wxoKJ5r3nIVgtGIYgD6MOMdUiXMxilGfbewipjb3bN2oStkNGYgnn9jWb4g2kypIJE W7ViTrTH/ZwyhWyhjo2xjtvKRuqGBEpo9uxfc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=EghI3Og/q70+cTg9vxp+VyhTpIanYEPQ04oYvNo7DMac997QqDZs0WneIELoizKeX+ QiWo4x6YWzPAt6IFHF2TdlVu5QJLIxVjsLLYsbbHMFzo6UAy5XKQQ18DnGJacU74CNt/ +FhhTt4EuMXiXWympvLABL5TXsfe6sQJQiqKQ= Received: by 10.86.76.10 with SMTP id y10mr762247fga.63.1247210854964; Fri, 10 Jul 2009 00:27:34 -0700 (PDT) Received: from ?10.3.1.74? (proxy.platige.com [193.192.62.134]) by mx.google.com with ESMTPS id d6sm958015fga.20.2009.07.10.00.27.34 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 00:27:34 -0700 (PDT) Message-ID: <4A56ED5F.10400@gmail.com> Date: Fri, 10 Jul 2009 09:27:27 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> In-Reply-To: <4A56D176.9010702@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: fg-out-1718.google.com[72.14.220.152] X-Barracuda-Start-Time: 1247210856 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0480 1.0000 -1.7124 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.71 X-Barracuda-Spam-Status: No, SCORE=-1.71 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.3019 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 Eric Sandeen wrote: > No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, > and it looks like cache_node_allocate() fails to get a new node and we > keep spinning. I need to look some more at what's going on.... Hello! Is this specific behavior for this particular broken filesystem or is it a bug in functions you mentioned? I'm just curious :) Best regards, Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 09:34:32 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 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 n6AEYW8D103779 for ; Fri, 10 Jul 2009 09:34:32 -0500 X-ASG-Debug-ID: 1247236508-44c4039e0000-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 16CA8356FDA for ; Fri, 10 Jul 2009 07:35:08 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id bGYRxp1c8KWivoFG for ; Fri, 10 Jul 2009 07:35:08 -0700 (PDT) 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 298E4A9B0A7; Fri, 10 Jul 2009 09:35:06 -0500 (CDT) Message-ID: <4A575199.1050903@sandeen.net> Date: Fri, 10 Jul 2009 09:35:05 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> In-Reply-To: <4A56ED5F.10400@gmail.com> 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: 1247236509 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.3035 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 Tomek Kruszona wrote: > Eric Sandeen wrote: >> No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, >> and it looks like cache_node_allocate() fails to get a new node and we >> keep spinning. I need to look some more at what's going on.... > > Hello! > > Is this specific behavior for this particular broken filesystem or is it > a bug in functions you mentioned? I'm just curious :) I don't know yet :) -Eric From christopher.walker@gmail.com Fri Jul 10 09:56: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.6 required=5.0 tests=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 n6AEucaO105533 for ; Fri, 10 Jul 2009 09:56:38 -0500 X-ASG-Debug-ID: 1247237834-523700ea0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from an-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7785035758B for ; Fri, 10 Jul 2009 07:57:15 -0700 (PDT) Received: from an-out-0708.google.com (an-out-0708.google.com [209.85.132.240]) by cuda.sgi.com with ESMTP id t1X4o98fGPIdiBPG for ; Fri, 10 Jul 2009 07:57:15 -0700 (PDT) Received: by an-out-0708.google.com with SMTP id b2so562800ana.32 for ; Fri, 10 Jul 2009 07:57:14 -0700 (PDT) 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=MWkfhr4mipIG+LMO9Z6A/1EnFNi2+GXMsnP3n99McHU=; b=dMPLKv57ovcIlq/wdK30GqvMvgWWzg/3vqqLVHg9lZMCKfZKyMBTA/5L38sfjtpaKi I03/faE/Um0OLSYJUt4oX18G6Lv1YO32K3WJ/qfoYCk5yLWUZANp0T1x4kcephR2iqPG owKvYXznouiCpxD3QErebJaAxBhEeAcZzomdo= 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=ePQFaoaPI0y17D08P7ustinfiSu01qRTZbT38QrGKQAEKdIpETVdPBR4VdNRo3RRbE iv/ISb3CJ5sRPe94rT7MtZ5wDoelSAmN53eV/OmImM5KG155zcLFYLQ222QN/ukmeoWZ H4YL3i3ukpS/EBM74gG4VmYEXLdFWmWzQXOMg= MIME-Version: 1.0 Received: by 10.100.41.4 with SMTP id o4mr2776623ano.53.1247237834730; Fri, 10 Jul 2009 07:57:14 -0700 (PDT) In-Reply-To: <4A56BCDE.2010609@sandeen.net> References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> <4A56BCDE.2010609@sandeen.net> Date: Fri, 10 Jul 2009 10:57:14 -0400 Message-ID: <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota From: Chris Walker To: Eric Sandeen Cc: xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: an-out-0708.google.com[209.85.132.240] X-Barracuda-Start-Time: 1247237835 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.3037 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 Thanks a lot for your response Eric, I didn't realize that debugging could lead to problems (perhaps the EXPERIMENTAL should have warned me!) I will recompile without debugging. I'm a bit surprised that debugging could lead to general filesystem instability -- I assumed it was a 'read-only' process. Thanks! Chris On Fri, Jul 10, 2009 at 12:00 AM, Eric Sandeen wrote: > Chris Walker wrote: >> Hello, >> >> I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g >> bsoft=3D2048g bhard=3D2148g hepl' /seltzer_lab), which triggered a kerne= l >> BUG: >> >> Assertion failed: dst->d_btimer !=3D 0, file: >> fs/xfs/quota/xfs_qm_syscalls.c, line: 927 > > Well, you hit this: > > #ifdef DEBUG > =A0 =A0 =A0 =A0if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags =3D=3D > XFS_USER_QUOTA) || > =A0 =A0 =A0 =A0 =A0 =A0 (XFS_IS_OQUOTA_ENFORCED(mp) && > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(dst->d_flags & (XFS_PROJ_= QUOTA | > XFS_GROUP_QUOTA)))) && > =A0 =A0 =A0 =A0 =A0 =A0dst->d_id !=3D 0) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (((int) dst->d_bcount >=3D (int) dst->d= _blk_softlimit) && > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0(dst->d_blk_softlimit > 0)) { > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ASSERT(dst->d_btimer !=3D = 0); > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0} > ... > > which first raises the question, why are you running with > CONFIG_XFS_DEBUG? :) > > I'm no quota guru, but this is something like... > > If quota is enabled and the block count is over a non-0 soft limit, then > assert that the timer is non-0 (the timer being how much time is left > before service is refused. > > It also got all those values off the disk just prior to the ASSERT. > > ... and I'm not sure what the problem may be. =A0But you hit an internal > debugging assert which is only on with CONFIG_XFS_DEBUG, you may get > away with just running without that for now :) > > -Eric > From sandeen@sandeen.net Fri Jul 10 09:58:48 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 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 n6AEwlKa105623 for ; Fri, 10 Jul 2009 09:58:48 -0500 X-ASG-Debug-ID: 1247237964-4f5701280000-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 C22703575A6 for ; Fri, 10 Jul 2009 07:59:24 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Bn4Nx3KSULldxmGA for ; Fri, 10 Jul 2009 07:59:24 -0700 (PDT) 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 0D39EA9BF30; Fri, 10 Jul 2009 09:59:24 -0500 (CDT) Message-ID: <4A57574B.2070006@sandeen.net> Date: Fri, 10 Jul 2009 09:59:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Chris Walker CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: kernel BUG with xfs_quota Subject: Re: kernel BUG with xfs_quota References: <554e24be0907091624s2dd439b2vfd7062f6b866c7f@mail.gmail.com> <4A56BCDE.2010609@sandeen.net> <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> In-Reply-To: <554e24be0907100757g7f891fa1t7517cb0258853779@mail.gmail.com> 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: 1247237964 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.3037 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 Chris Walker wrote: > Thanks a lot for your response Eric, I didn't realize that debugging > could lead to problems (perhaps the EXPERIMENTAL should have warned > me!) I will recompile without debugging. I'm a bit surprised that > debugging could lead to general filesystem instability -- I assumed it > was a 'read-only' process. > Thanks! > Chris Well, in general the asserts should all be valid, but they are unforgiving, hence the stern warnings in the config help. Rather than printing out detailed info (though there is some of that), CONFIG_XFS_DEBUG will also trigger an intentional BUG(); in any of the assert conditions... so it's dangerous. If you are hitting some other problem, running with CONFIG_XFS_DEBUG may catch the problem sooner, but I would not recommend running with it in general production. -Eric > On Fri, Jul 10, 2009 at 12:00 AM, Eric Sandeen wrote: >> Chris Walker wrote: >>> Hello, >>> >>> I ran an xfs_quota command earlier (xfs_quota -x -c 'limit -g >>> bsoft=2048g bhard=2148g hepl' /seltzer_lab), which triggered a kernel >>> BUG: >>> >>> Assertion failed: dst->d_btimer != 0, file: >>> fs/xfs/quota/xfs_qm_syscalls.c, line: 927 >> Well, you hit this: >> >> #ifdef DEBUG >> if (((XFS_IS_UQUOTA_ENFORCED(mp) && dst->d_flags == >> XFS_USER_QUOTA) || >> (XFS_IS_OQUOTA_ENFORCED(mp) && >> (dst->d_flags & (XFS_PROJ_QUOTA | >> XFS_GROUP_QUOTA)))) && >> dst->d_id != 0) { >> if (((int) dst->d_bcount >= (int) dst->d_blk_softlimit) && >> (dst->d_blk_softlimit > 0)) { >> ASSERT(dst->d_btimer != 0); >> } >> ... >> >> which first raises the question, why are you running with >> CONFIG_XFS_DEBUG? :) >> >> I'm no quota guru, but this is something like... >> >> If quota is enabled and the block count is over a non-0 soft limit, then >> assert that the timer is non-0 (the timer being how much time is left >> before service is refused. >> >> It also got all those values off the disk just prior to the ASSERT. >> >> ... and I'm not sure what the problem may be. But you hit an internal >> debugging assert which is only on with CONFIG_XFS_DEBUG, you may get >> away with just running without that for now :) >> >> -Eric >> > From BATV+e1505189499ded28211b+2147+infradead.org+hch@bombadil.srs.infradead.org Fri Jul 10 11:01:53 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 (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AG1oIk107714 for ; Fri, 10 Jul 2009 11:01:53 -0500 X-ASG-Debug-ID: 1247241747-05ea03700000-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 B690E1B51C2A for ; Fri, 10 Jul 2009 09:02:27 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 05LquwRG3tDQExdS for ; Fri, 10 Jul 2009 09:02:27 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1MPIYL-0003w2-NP; Fri, 10 Jul 2009 16:02:25 +0000 Date: Fri, 10 Jul 2009 12:02:25 -0400 From: Christoph Hellwig To: Sage Weil Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: inconsistent lock state on 2.6.30? Subject: Re: inconsistent lock state on 2.6.30? Message-ID: <20090710160225.GA14288@infradead.org> References: <20090623170844.GA23971@infradead.org> <20090626173558.GA402@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090626173558.GA402@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 1247241747 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 FYI all these warnings are due to the new in reclaim state tracking that was added to lockdep recently. I now have a tree fixing all these warnings including those two you see. It's all still a bit hacky, but I'll soon post a patch series to fix them all in one way or another. From sandeen@sandeen.net Fri Jul 10 15:16:33 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 (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n6AKGX7D119702 for ; Fri, 10 Jul 2009 15:16:33 -0500 X-ASG-Debug-ID: 1247257029-57e2011c0000-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 1F5CE3588B0 for ; Fri, 10 Jul 2009 13:17:09 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id DTUFDvbjmLcwNiE0 for ; Fri, 10 Jul 2009 13:17:09 -0700 (PDT) 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 C2AA3A7CE6A; Fri, 10 Jul 2009 15:17:08 -0500 (CDT) Message-ID: <4A57A1C4.40004@sandeen.net> Date: Fri, 10 Jul 2009 15:17:08 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> In-Reply-To: <4A56ED5F.10400@gmail.com> 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: 1247257030 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.3046 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 Tomek Kruszona wrote: > Eric Sandeen wrote: >> No fix for you yet, but it's in cache_node_get(), in the for(;;) loop, >> and it looks like cache_node_allocate() fails to get a new node and we >> keep spinning. I need to look some more at what's going on.... > > Hello! > > Is this specific behavior for this particular broken filesystem or is it > a bug in functions you mentioned? I'm just curious :) This looks like some of the caching that xfs_repair does is mis-sized, and it gets stuck when it's unable to find a slot for a new node to cache. IMHO that's still a bug that I'd like to work out. If it gets stuck this way, it'd probably be better to exit, and suggest a larger hash size. But anyway, I forced a bigger hash size: xfs_repair -P -o bhash=1024 and it did complete. 1024 is probably over the top, but it worked for me on a 4G machine w/ some swap. I'd strongly suggest doing a non-obfuscated xfs_metadump, do xfs_mdrestore of that to some temp.img, run xfs_repair on that temp.img, mount it, and see what you're left with; that way you'll know what you're getting into w/ repair. I ended up w/ about 5000 files in lost+found just FWIW... Out of curiosity, do you know how the fs was damaged? -Eric From bloodyscarion@gmail.com Fri Jul 10 16:02:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, RCVD_IN_SORBS_WEB 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 n6AL27vR122213 for ; Fri, 10 Jul 2009 16:02:08 -0500 X-ASG-Debug-ID: 1247259763-145800160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A55A41BD34C1 for ; Fri, 10 Jul 2009 14:02:43 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id QMMvZT0VMGpSLANh for ; Fri, 10 Jul 2009 14:02:43 -0700 (PDT) Received: by bwz10 with SMTP id 10so952692bwz.20 for ; Fri, 10 Jul 2009 14:02:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=RZMKG9LWrcaxvtgAiJ75RIOj0SseEEh6qh+lcxjP22E=; b=jx0lG7SVmGLTB8RNqHC381GNTIC2ozDEQO9/pgrrTBc6hdc9KjYeZViVtEwBId0N2q navWF8XDgSpcX41+Z5HyoXh38Y5xAri6fzchqRhswqgc/R61l57i1vS72Q3Qvh61PV4v Vt/u0vNaWHYhf1AfG+Xfn42b983O/CiHmOz6Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=H3UZTp6mVW1nrm82oUqkAv5vkNxoyukeNEG+XcEzz27vpJ41G+aMXQBskKWNBcq1lw yquddq9nxjWeAcq7whcj2WJSbdHoUkP6WzGjQZRRIX/0bNh6PE+4nl0w5GxdQiGmHTjv UgMSJyW7bBQ05CS3tFReVu+Ui06ki1TCUgoDs= Received: by 10.103.231.16 with SMTP id i16mr1322003mur.7.1247259761110; Fri, 10 Jul 2009 14:02:41 -0700 (PDT) Received: from ?192.168.1.118? (chello089077150083.chello.pl [89.77.150.83]) by mx.google.com with ESMTPS id s10sm8013349muh.57.2009.07.10.14.02.40 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 14:02:40 -0700 (PDT) Message-ID: <4A57AC69.7070502@gmail.com> Date: Fri, 10 Jul 2009 23:02:33 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> In-Reply-To: <4A57A1C4.40004@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247259764 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0208 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.3050 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 Eric Sandeen wrote: > This looks like some of the caching that xfs_repair does is mis-sized, > and it gets stuck when it's unable to find a slot for a new node to > cache. IMHO that's still a bug that I'd like to work out. If it gets > stuck this way, it'd probably be better to exit, and suggest a larger > hash size. > > But anyway, I forced a bigger hash size: > > xfs_repair -P -o bhash=1024 > > and it did complete. 1024 is probably over the top, but it worked for > me on a 4G machine w/ some swap. :D Is it safe to use xfs_repair without this options after the FS was repaired? Or maybe I should use them every time I have similar problem? > I'd strongly suggest doing a non-obfuscated xfs_metadump, do > xfs_mdrestore of that to some temp.img, run xfs_repair on that > temp.img, mount it, and see what you're left with; that way you'll know > what you're getting into w/ repair. > I ended up w/ about 5000 files in lost+found just FWIW... It doesn't matter. On this filesystem is a lot of small files. Those are image sequences used for video composition. It's backup machine so if they're gone from filesystem they will be copied back from original machine. No stress :) I'm doing xfs_repair on the image now - it's Phase 4 and for now list of files looks very similar to list that I saw during xfs_repair without options you suggested. > Out of curiosity, do you know how the fs was damaged? I'm not sure. I see some possibilities. I played with write cache options on the RAID controller when the FS was mounted and running. Maybe then something went wrong... Second possible reason is that we had power loss last time and this machine went down then :/ Last one is that I have some problems with XFS filesytems on LVM2. in kernels <2.6.30 barriers are automatically disabled when underlying device is some dm-device. As I'm using RAID controllers I should have write cache disabled. So after upgrade to 2.6.30 message about disabled barriers disappeared and it was safe to enable write cache again. Somewhere in the meantime I wanted to check filesystem that everything is ok with it and then the problem started - I couldn't finish xfs_repair. This power loss was IIRC after my troubles with xfs_repair, so the filesystem wasn't totally clean when power failed. Maybe this is the reason of this mess ;) Best regards Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 16:14:34 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 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 n6ALEXZu123105 for ; Fri, 10 Jul 2009 16:14:34 -0500 X-ASG-Debug-ID: 1247260940-2fb200d20000-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 440B8A32B29 for ; Fri, 10 Jul 2009 14:22:20 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id tJUs2kjY6ljXHPCy for ; Fri, 10 Jul 2009 14:22:20 -0700 (PDT) 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 A3E9EA9BE28; Fri, 10 Jul 2009 16:15:09 -0500 (CDT) Message-ID: <4A57AF5D.6080603@sandeen.net> Date: Fri, 10 Jul 2009 16:15:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> In-Reply-To: <4A57AC69.7070502@gmail.com> 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: 1247260941 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.3051 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 Tomek Kruszona wrote: > Eric Sandeen wrote: >> This looks like some of the caching that xfs_repair does is mis-sized, >> and it gets stuck when it's unable to find a slot for a new node to >> cache. IMHO that's still a bug that I'd like to work out. If it gets >> stuck this way, it'd probably be better to exit, and suggest a larger >> hash size. >> >> But anyway, I forced a bigger hash size: >> >> xfs_repair -P -o bhash=1024 >> >> and it did complete. 1024 is probably over the top, but it worked for >> me on a 4G machine w/ some swap. > :D > > Is it safe to use xfs_repair without this options after the FS was > repaired? Or maybe I should use them every time I have similar problem? These are all good questions ;) TBH I'm kind of digging through repair in earnest for the first time. I'm not certain why it got into this state, whether there is some underlying bug, perhaps leaving things wrongly referenced, or just a plain ol' mis-sizing of the caches. I have a patch now that ends like this; if all else fails at least it'd not spin forever, and give a hint of what to try. -Eric ... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - traversing filesystem ... unknown magic number 0 for block 8388608 in directory inode 40541 rebuilding directory inode 40541 unknown magic number 0 for block 8388608 in directory inode 48934 rebuilding directory inode 48934 unknown magic number 0 for block 8388608 in directory inode 56139 rebuilding directory inode 56139 unknown magic number 0 for block 8388608 in directory inode 63785 rebuilding directory inode 63785 Unable to free any items in cache for new node; exiting. Try increasing the bhash and/or ihash size beyond 64 cache: 0x190ed4d0 Max supported entries = 512 Max utilized entries = 512 Active entries = 512 Hash table size = 64 Hits = 130779 Misses = 271155 Hit ratio = 32.54 MRU 0 entries = 0 ( 0%) MRU 1 entries = 0 ( 0%) MRU 2 entries = 0 ( 0%) MRU 3 entries = 0 ( 0%) MRU 4 entries = 0 ( 0%) MRU 5 entries = 0 ( 0%) MRU 6 entries = 0 ( 0%) MRU 7 entries = 0 ( 0%) MRU 8 entries = 0 ( 0%) MRU 9 entries = 0 ( 0%) MRU 10 entries = 0 ( 0%) MRU 11 entries = 0 ( 0%) MRU 12 entries = 0 ( 0%) MRU 13 entries = 0 ( 0%) MRU 14 entries = 0 ( 0%) MRU 15 entries = 0 ( 0%) Hash buckets with 2 entries 2 ( 0%) Hash buckets with 3 entries 2 ( 1%) Hash buckets with 4 entries 4 ( 3%) Hash buckets with 5 entries 1 ( 0%) Hash buckets with 6 entries 8 ( 9%) Hash buckets with 7 entries 9 ( 12%) Hash buckets with 8 entries 9 ( 14%) Hash buckets with 9 entries 10 ( 17%) Hash buckets with 10 entries 9 ( 17%) Hash buckets with 11 entries 6 ( 12%) Hash buckets with 12 entries 1 ( 2%) Hash buckets with 13 entries 2 ( 5%) Hash buckets with 14 entries 1 ( 2%) From bloodyscarion@gmail.com Fri Jul 10 18:43:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,J_CHICKENPOX_45, RCVD_IN_SORBS_WEB 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 n6ANhoca129709 for ; Fri, 10 Jul 2009 18:43:50 -0500 X-ASG-Debug-ID: 1247269466-4edb02b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-bw0-f214.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 50ED3358FE4 for ; Fri, 10 Jul 2009 16:44:26 -0700 (PDT) Received: from mail-bw0-f214.google.com (mail-bw0-f214.google.com [209.85.218.214]) by cuda.sgi.com with ESMTP id VEBRbDWklSqBMRGQ for ; Fri, 10 Jul 2009 16:44:26 -0700 (PDT) Received: by bwz10 with SMTP id 10so997206bwz.20 for ; Fri, 10 Jul 2009 16:44:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=ByU/dnyeL0SBKBcSPon2+LFX0kqiETprVdMpFESm6Ag=; b=EfM6MXPulV32Xb58llej8qxxCPxoMT2g7c9Bs7qGjoI1XA9Nqof83I1pogXhSLcoNU ub2R2wB5RmqBOz34ZbZeHGwrgR2xCyWd4w5x7uEJDaHi/P8xN2EuCIF26HKNOMM04OFj TGokl8c75m7m5iT/6C1f/oCXj2lTyyo9G35wg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=tk+Zgxm+MOZbKVoRomJxEA2j2hUDj9yGiAmpPuV8+fhkee5vv79d0ytLdj62acvcTy NyJ2FKDrJp7bj1DoiYpUiGbQrRT9vt8rgPl1fpk1Gy4/kn8tICsLCQ24hf29+zIJCN9b oq37/tF7F7BwFfYp+nn01AXe6m57kDdFfuSiE= Received: by 10.103.174.18 with SMTP id b18mr1342095mup.129.1247269465446; Fri, 10 Jul 2009 16:44:25 -0700 (PDT) Received: from ?192.168.1.118? (chello089077150083.chello.pl [89.77.150.83]) by mx.google.com with ESMTPS id i7sm8359573mue.18.2009.07.10.16.44.24 (version=SSLv3 cipher=RC4-MD5); Fri, 10 Jul 2009 16:44:25 -0700 (PDT) Message-ID: <4A57D252.4020804@gmail.com> Date: Sat, 11 Jul 2009 01:44:18 +0200 From: Tomek Kruszona User-Agent: Mozilla-Thunderbird 2.0.0.19 (X11/20090103) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> <4A57AF5D.6080603@sandeen.net> In-Reply-To: <4A57AF5D.6080603@sandeen.net> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-bw0-f214.google.com[209.85.218.214] X-Barracuda-Start-Time: 1247269467 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0192 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.3051 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 Eric Sandeen wrote: > These are all good questions ;) TBH I'm kind of digging through repair > in earnest for the first time. I'm not certain why it got into this > state, whether there is some underlying bug, perhaps leaving things > wrongly referenced, or just a plain ol' mis-sizing of the caches. > > I have a patch now that ends like this; if all else fails at least it'd > not spin forever, and give a hint of what to try. > > -Eric > > ... > > Phase 6 - check inode connectivity... > - resetting contents of realtime bitmap and summary inodes > - traversing filesystem ... > unknown magic number 0 for block 8388608 in directory inode 40541 > rebuilding directory inode 40541 > unknown magic number 0 for block 8388608 in directory inode 48934 > rebuilding directory inode 48934 > unknown magic number 0 for block 8388608 in directory inode 56139 > rebuilding directory inode 56139 > unknown magic number 0 for block 8388608 in directory inode 63785 > rebuilding directory inode 63785 > Unable to free any items in cache for new node; exiting. > Try increasing the bhash and/or ihash size beyond 64 > cache: 0x190ed4d0 > Max supported entries = 512 > Max utilized entries = 512 > Active entries = 512 > Hash table size = 64 > Hits = 130779 > Misses = 271155 > Hit ratio = 32.54 [snip] I made some tests and it seems, that filesystem to finish xfs_repair needs to be repaired with bhash=1024... With default options it still hangs on "traversing filesystem..." Is it possible to change this behavior to normal in other way than reformat? Moreover I spotted some strange thing. 16GB of data has been moved to lost+found. I tried to clean L+F by # rm -rf lost+found but suddenly I got this: # ls -l /mnt/storage/ ls: cannot access /mnt/storage/lost+found: No such file or directory total 0 drwxr-xr-x 4 root root 33 Mar 4 17:21 l_mirror ?????????? ? ? ? ? ? lost+found I had to run xfs_repair (bhash=1024) once again and then l+f disappeared... So I started to think: does it have some influence on data that are stored on this filesystem? I'm afraid that files on this FS may become inconsistent :/ Best regards, Tomasz Kruszona From sandeen@sandeen.net Fri Jul 10 19:35:40 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 n6B0ZeHV131070 for ; Fri, 10 Jul 2009 19:35:40 -0500 X-ASG-Debug-ID: 1247272575-144103570000-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 5354B1BD3ECA for ; Fri, 10 Jul 2009 17:36:15 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id IypZbwfgL1lFwh4Z for ; Fri, 10 Jul 2009 17:36:15 -0700 (PDT) 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 1BEBBA9BF30; Fri, 10 Jul 2009 19:36:15 -0500 (CDT) Message-ID: <4A57DE7E.8080901@sandeen.net> Date: Fri, 10 Jul 2009 19:36:14 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Tomek Kruszona CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair stops on "traversing filesystem..." Subject: Re: xfs_repair stops on "traversing filesystem..." References: <4A55FAF7.5040908@gmail.com> <4A56D176.9010702@sandeen.net> <4A56ED5F.10400@gmail.com> <4A57A1C4.40004@sandeen.net> <4A57AC69.7070502@gmail.com> <4A57AF5D.6080603@sandeen.net> <4A57D252.4020804@gmail.com> In-Reply-To: <4A57D252.4020804@gmail.com> 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: 1247272577 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.3055 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 Tomek Kruszona wrote: ... > I made some tests and it seems, that filesystem to finish xfs_repair > needs to be repaired with bhash=1024... With default options it still > hangs on "traversing filesystem..." Is it possible to change this > behavior to normal in other way than reformat? It has nothing to do w/ the format, it's just internal to xfs_repair while it's running, the way it caches blocks that it has recently used. > Moreover I spotted some > strange thing. 16GB of data has been moved to lost+found. I tried to Yeah ... > clean L+F by > # rm -rf lost+found > > but suddenly I got this: > > # ls -l /mnt/storage/ > ls: cannot access /mnt/storage/lost+found: No such file or directory > total 0 > drwxr-xr-x 4 root root 33 Mar 4 17:21 l_mirror > ?????????? ? ? ? ? ? lost+found huh. let me try on the repaired metadata image... [root@bear-05 bad-repair]# mount -o loop badfs.img mnt/ [root@bear-05 bad-repair]# du -hc mnt/lost+found/ 26M mnt/lost+found/1602304 5.0M mnt/lost+found/2558868 18G mnt/lost+found/ 18G total [root@bear-05 bad-repair]# rm -rf mnt/lost+found/* [root@bear-05 bad-repair]# ls -l mnt/ total 0 drwxr-xr-x 4 root root 33 Mar 4 10:21 ??5?t??4 drwxr-xr-x 0 root root 6 Jul 10 19:48 lost+found drwxr-xr-x 2 1000 root 6 Jun 30 08:45 tests Did you do something else to the fs in between? > I had to run xfs_repair (bhash=1024) once again and then l+f disappeared... > > So I started to think: does it have some influence on data that are > stored on this filesystem? I'm afraid that files on this FS may become > inconsistent :/ Well, I don't know what has gone wrong with your filesytem (or, with the storage beneath it, or whatever) - but it is certainly possible that with corrupted metadata, that there is corrupted data as well - all depends on the root cause ... -Eric > Best regards, > Tomasz Kruszona From sandeen@sandeen.net Sat Jul 11 00:17: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.3 required=5.0 tests=AWL,BAYES_00 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 n6B5H0Is147697 for ; Sat, 11 Jul 2009 00:17:01 -0500 X-ASG-Debug-ID: 1247289457-28db00ad0000-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 F1C2F1BD4133 for ; Fri, 10 Jul 2009 22:17:37 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id jIWxSQ2OImBjnyut for ; Fri, 10 Jul 2009 22:17:37 -0700 (PDT) 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 B6479A7CE6A for ; Sat, 11 Jul 2009 00:17:36 -0500 (CDT) Message-ID: <4A582070.9040907@sandeen.net> Date: Sat, 11 Jul 2009 00:17:36 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format Subject: [PATCH, RFC] xfs_repair - clear inodes in incorrect btree format 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: 1247289457 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.3073 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 See also RH bug #510823: https://bugzilla.redhat.com/show_bug.cgi?id=510823 This check in xfs_iformat_btree() tripped: /* * blow out if -- fork has less extents than can fit in * fork (fork shouldn't be a btree format), root btree * block has more records than can fit into the fork, * or the number of extents is greater than the number of * blocks. */ leading to: Jul 10 23:22:45 hermes kernel: Filesystem "dm-11": corrupt inode 2339503222 (btree). Unmount and run xfs_repair. Jul 10 23:22:45 hermes kernel: Filesystem "dm-11": XFS internal error xfs_iformat_btree at line 625 of file fs/xfs/xfs_inode.c. but repair finds nothing at all. xfs_check, however, does flag the inodes as problematic: extent count for ino 2339503222 data fork too low (6) for file format So I copied the xfs_check test into xfs_repair, and voila, it clears these inodes. But questions remain... 1) How'd it get into this state? ... but maybe more importantly... 2) Should these really get cleared? It's possibly a sane extent list, it's just that it -could- be in extents rather than btree format... 3) By the same token, should the kernel really be choking on it? Signed-off-by: Eric Sandeen --- diff --git a/repair/dinode.c b/repair/dinode.c index 84e1d05..3fc6cac 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -1280,6 +1280,14 @@ process_btinode( last_key = cursor.level[level-1].first_key; } } + if (*nex <= XFS_DFORK_SIZE(dip, mp, whichfork) / sizeof(xfs_bmbt_rec_t)) { + do_warn(_("extent count for ino %lld %s fork too low " + "(%d) for file format\n"), + lino, + whichfork == XFS_DATA_FORK ? _("data") : _("attr"), + *nex); + return(1); + } /* * Check that the last child block's forward sibling pointer * is NULL. From michael.monnerie@is.it-management.at Sun Jul 12 12:01:59 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_33 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 n6CH1wwK253734 for ; Sun, 12 Jul 2009 12:01:59 -0500 X-ASG-Debug-ID: 1247418594-3f0d01da0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7DD6F130A5C1 for ; Sun, 12 Jul 2009 10:09:55 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id gKNerVbtqgtq3B0y for ; Sun, 12 Jul 2009 10:09:55 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 315F651A9 for ; Sun, 12 Jul 2009 19:03:23 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 11C21400163 for ; Sun, 12 Jul 2009 19:02:33 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it Date: Sun, 12 Jul 2009 19:02:28 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907031320.48358@zmi.at> <4A4EEBE6.6060909@sandeen.net> In-Reply-To: <4A4EEBE6.6060909@sandeen.net> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart1339834.XHtPjja0fY"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200907121902.32599@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247418595 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.3216 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 --nextPart1339834.XHtPjja0fY Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Samstag 04 Juli 2009 Eric Sandeen wrote: > Where's Barry when you need him .... Who's that? > Also I need to look at when the ASSERTs are active and when they > should be; the Fedora packaged xfsprogs doesn't have the ASSERT > active, and so this doesn't trip. =A0After 2 calls to xfs_repair on > Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). =A0Not > great. =A0Not sure how much was cleared out in the process either... Any ideas/news on this? I'd like to xfs_repair that stuff. It seems to=20 only hit one file, but I don't dare delete it, maybe it makes things=20 worse? mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart1339834.XHtPjja0fY Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkpaFygACgkQzhSR9xwSCbQRvACfaRRccmXKKdFnHPzspRRxwWXP WKkAoNH+CrfMgMT9e/0N27B5UJhuA+IA =uwsS -----END PGP SIGNATURE----- --nextPart1339834.XHtPjja0fY-- From sandeen@sandeen.net Sun Jul 12 13:09:13 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 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 n6CI9DgQ255988 for ; Sun, 12 Jul 2009 13:09:13 -0500 X-ASG-Debug-ID: 1247422190-185e00560000-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 49C5535B4BA for ; Sun, 12 Jul 2009 11:09:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0r2t3PKN1YqdnHOK for ; Sun, 12 Jul 2009 11:09:50 -0700 (PDT) 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 2CC3EA9DAD9; Sun, 12 Jul 2009 13:09:49 -0500 (CDT) Message-ID: <4A5A26EC.8090503@sandeen.net> Date: Sun, 12 Jul 2009 13:09:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> <4A4EEBE6.6060909@sandeen.net> <200907121902.32599@zmi.at> In-Reply-To: <200907121902.32599@zmi.at> 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: 1247422191 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0209 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.3219 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 Michael Monnerie wrote: > On Samstag 04 Juli 2009 Eric Sandeen wrote: >> Where's Barry when you need him .... > > Who's that? The ex-sgi xfs_repair maintainer :) >> Also I need to look at when the ASSERTs are active and when they >> should be; the Fedora packaged xfsprogs doesn't have the ASSERT >> active, and so this doesn't trip. After 2 calls to xfs_repair on >> Fedora, w/o the ASSERTs active, it checks clean on the 3rd (!). Not >> great. Not sure how much was cleared out in the process either... > > Any ideas/news on this? I'd like to xfs_repair that stuff. It seems to > only hit one file, but I don't dare delete it, maybe it makes things > worse? > > mfg zmi Sorry, I will get back to this soon - today I hope. I seem to be getting more and more familiar w/ xfs_repair these days. :) If you do want to try deleting that one file or other such tricks, you can do it on a sparse metadata image of the fs as a dry run: # xfs_metadump -o /dev/whatever metadump.img # xfs_mdrestore metadump.img filesystem.img # mount -o loop filesystem.img mnt/ # # umount mnt/ # xfs_repair filesystem.img # mount -o loop filesystem.img mnt/ and see what happens... -Eric From sandeen@sandeen.net Sun Jul 12 13:51:44 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 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 n6CIpiE6258705 for ; Sun, 12 Jul 2009 13:51:44 -0500 X-ASG-Debug-ID: 1247425182-509b036f0000-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 BEE15A32088 for ; Sun, 12 Jul 2009 11:59:42 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id sjaLx42VNqk9VQtZ for ; Sun, 12 Jul 2009 11:59:42 -0700 (PDT) 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 0038BA9BF2F; Sun, 12 Jul 2009 13:52:20 -0500 (CDT) Message-ID: <4A5A30E4.6090309@sandeen.net> Date: Sun, 12 Jul 2009 13:52:20 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.22 (Macintosh/20090605) MIME-Version: 1.0 To: Michael Monnerie CC: xfs mailing list X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it References: <200907031320.48358@zmi.at> In-Reply-To: <200907031320.48358@zmi.at> 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: 1247425182 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.3222 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 Michael Monnerie wrote: > Tonight our server rebooted, and I found in /var/log/warn that he was crying > a lot about xfs since June 7 already: > > Jun 7 03:06:31 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 3857051697 ((a)extents = 5). Unmount and run xfs_repair. > Jun 7 03:06:31 orion.i.zmi.at kernel: Pid: 23230, comm: xfs_fsr Tainted: G 2.6.27.21-0.1-xen #1 > Jun 7 03:06:31 orion.i.zmi.at kernel: Hm, the other sort of interesting thing here is that a recently-reported RH bug: [Bug 510823] "Structure needs cleaning" when reading files from an XFS partition (extent count for ino XYZ data fork too low (6) for file format) also seems to -possibly- be related to an xfs_fsr run, and also is related to extents in the wrong format. In that case it was the opposite; an inode was found in btree format which had few enough extents that it should have been in the extents format in the inode; in your case, it looks like there were too many extents to fit in the format it had... Just out of curiosity, it looks like you have rather a lot of extended attributes on at least the inode above, is that accurate? Or maybe that's part of the corruption? I'll focus on getting xfs_repair to cope first, but I wonder what happened here... Thanks, -Eric From michael.monnerie@is.it-management.at Sun Jul 12 17:07:47 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_33 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 n6CM7k09005896 for ; Sun, 12 Jul 2009 17:07:47 -0500 X-ASG-Debug-ID: 1247436502-136500c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E913535B7B2 for ; Sun, 12 Jul 2009 15:08:22 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id 1SEkRSVt3rHYdNhE for ; Sun, 12 Jul 2009 15:08:22 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217106033.dyn.cm.kabsi.at [81.217.106.33]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 639E14E10 for ; Mon, 13 Jul 2009 00:09:11 +0200 (CEST) Received: from saturn.localnet (unknown [10.72.27.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 94767400154 for ; Mon, 13 Jul 2009 00:08:21 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: bad fs - xfs_repair 3.01 crashes on it Subject: Re: bad fs - xfs_repair 3.01 crashes on it Date: Mon, 13 Jul 2009 00:08:20 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.30-ZMI; KDE/4.1.3; x86_64; ; ) References: <200907031320.48358@zmi.at> <4A5A30E4.6090309@sandeen.net> In-Reply-To: <4A5A30E4.6090309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200907130008.21006@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1247436503 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.3234 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 Sonntag 12 Juli 2009 Eric Sandeen wrote: > Just out of curiosity, it looks like you have rather a lot of > extended attributes on at least the inode above, is that accurate? > =A0Or maybe that's part of the corruption? # find . -inum 3857051697 find: "./samba/tmp/BettyPC.tib": Die Struktur muss bereinigt werden (means: structure needs cleaning) I'm not sure if that message means that file has the corresponding inode number? If it is, it's a backup of a PC made with Acronis. Normally I only use xattr's to set one or two extra rights > I'll focus on getting xfs_repair to cope first, but I wonder what > happened here... No idea. Didn't have a crash on that server IIRC. I tried some "ls"=20 and "getfacl" and got these crashes: Jul 13 00:01:10 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 13 00:01:10 orion.i.zmi.at kernel: Pid: 17213, comm: find Tainted: G = 2.6.27.23-0.1-xen #1 Jul 13 00:01:10 orion.i.zmi.at kernel: Jul 13 00:01:10 orion.i.zmi.at kernel: Call Trace: Jul 13 00:01:10 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 13 00:01:10 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 13 00:01:10 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 13 00:01:10 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 13 00:01:10 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 13 00:01:10 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 13 00:01:10 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 13 00:01:10 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 13 00:01:10 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 13 00:01:10 orion.i.zmi.at kernel: [] sys_newfstatat= +0x22/0x43 Jul 13 00:01:10 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 13 00:01:10 orion.i.zmi.at kernel: [<00007f802a89f4ce>] 0x7f802a89f4ce Jul 13 00:01:10 orion.i.zmi.at kernel: Jul 13 00:02:35 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 13 00:02:35 orion.i.zmi.at kernel: Pid: 17232, comm: getfacl Tainted: G= 2.6.27.23-0.1-xen #1 Jul 13 00:02:35 orion.i.zmi.at kernel: Jul 13 00:02:35 orion.i.zmi.at kernel: Call Trace: Jul 13 00:02:35 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 13 00:02:35 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 13 00:02:35 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 13 00:02:35 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 13 00:02:35 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 13 00:02:35 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 13 00:02:35 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 13 00:02:35 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 13 00:02:35 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 13 00:02:35 orion.i.zmi.at kernel: [] sys_newlstat+0= x19/0x31 Jul 13 00:02:35 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 13 00:02:35 orion.i.zmi.at kernel: [<00007f9a8d911225>] 0x7f9a8d911225 Jul 11 03:02:53 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 11 03:02:53 orion.i.zmi.at kernel: Pid: 2881, comm: xfs_fsr Tainted: G = 2.6.27.23-0.1-xen #1 Jul 11 03:02:53 orion.i.zmi.at kernel: Jul 11 03:02:53 orion.i.zmi.at kernel: Call Trace: Jul 11 03:02:53 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 11 03:02:53 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_vget_fsop_= handlereq+0xc2/0x11b [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_open_by_ha= ndle+0x60/0x1cb [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_ioctl+0x3c= a/0x680 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] xfs_file_ioctl= +0x25/0x69 [xfs] Jul 11 03:02:53 orion.i.zmi.at kernel: [] vfs_ioctl+0x21= /0x6c Jul 11 03:02:53 orion.i.zmi.at kernel: [] do_vfs_ioctl+0= x222/0x231 Jul 11 03:02:53 orion.i.zmi.at kernel: [] sys_ioctl+0x51= /0x73 Jul 11 03:02:53 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 11 03:02:53 orion.i.zmi.at kernel: [<00007fc76ba0bb77>] 0x7fc76ba0bb77 I also found this one: Jul 12 00:01:29 orion.i.zmi.at kernel: Filesystem "dm-0": corrupt inode 385= 7051697 ((a)extents =3D 5). Unmount and run xfs_repair. Jul 12 00:01:29 orion.i.zmi.at kernel: 00000000: 49 4e 81 ff 02 02 00 00 00= 00 03 e8 00 00 00 64 IN.............d Jul 12 00:01:29 orion.i.zmi.at kernel: Filesystem "dm-0": XFS internal erro= r xfs_iformat_extents(1) at line 565 of file fs/xfs/xfs_inode.c. Caller 0x= ffffffffa033b153 Jul 12 00:01:29 orion.i.zmi.at kernel: Pid: 9592, comm: find Tainted: G = 2.6.27.23-0.1-xen #1 Jul 12 00:01:29 orion.i.zmi.at kernel: Jul 12 00:01:29 orion.i.zmi.at kernel: Call Trace: Jul 12 00:01:29 orion.i.zmi.at kernel: [] show_trace_log= _lvl+0x41/0x58 Jul 12 00:01:29 orion.i.zmi.at kernel: [] dump_stack+0x6= 9/0x6f Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iformat_ex= tents+0xc9/0x1c4 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iformat+0x= 2b0/0x3f7 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iread+0xe7= /0x1ee [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iget_core+= 0x3a5/0x63a [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_iget+0xe2/= 0x187 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_lookup+0x7= 9/0xa5 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] xfs_vn_lookup+= 0x3c/0x78 [xfs] Jul 12 00:01:29 orion.i.zmi.at kernel: [] real_lookup+0x= 7e/0x10f Jul 12 00:01:29 orion.i.zmi.at kernel: [] do_lookup+0x63= /0xb6 Jul 12 00:01:29 orion.i.zmi.at kernel: [] __link_path_wa= lk+0x9f4/0xe58 Jul 12 00:01:29 orion.i.zmi.at kernel: [] path_walk+0x5e= /0xb9 Jul 12 00:01:29 orion.i.zmi.at kernel: [] do_path_lookup= +0x162/0x1b9 Jul 12 00:01:29 orion.i.zmi.at kernel: [] user_path_at+0= x48/0x79 Jul 12 00:01:29 orion.i.zmi.at kernel: [] vfs_lstat_fd+0= x15/0x41 Jul 12 00:01:29 orion.i.zmi.at kernel: [] sys_newfstatat= +0x22/0x43 Jul 12 00:01:29 orion.i.zmi.at kernel: [] system_call_fa= stpath+0x16/0x1b Jul 12 00:01:29 orion.i.zmi.at kernel: [<00007fdc209084ce>] 0x7fdc209084ce mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From al-john@hotmail.com Mon Jul 13 00:54:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE 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 n6D5sSxA027696 for ; Mon, 13 Jul 2009 00:54:28 -0500 X-ASG-Debug-ID: 1247464505-023503a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from snt0-omc4-s11.snt0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7BD6735C2C6 for ; Sun, 12 Jul 2009 22:55:05 -0700 (PDT) Received: from snt0-omc4-s11.snt0.hotmail.com (snt0-omc4-s11.snt0.hotmail.com [65.55.90.214]) by cuda.sgi.com with ESMTP id Bs37go3k3KHiB7cA for ; Sun, 12 Jul 2009 22:55:05 -0700 (PDT) Received: from SNT109-W23 ([65.55.90.200]) by snt0-omc4-s11.snt0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Sun, 12 Jul 2009 22:55:05 -0700 Message-ID: Content-Type: multipart/alternative; boundary="_8110f1a9-3c11-4a17-be20-10aa037480ac_" X-Originating-IP: [72.163.255.118] From: crow al To: X-ASG-Orig-Subj: How to simulate journal corruption Subject: How to simulate journal corruption Date: Mon, 13 Jul 2009 13:55:05 +0800 Importance: Normal MIME-Version: 1.0 X-OriginalArrivalTime: 13 Jul 2009 05:55:05.0277 (UTC) FILETIME=[785046D0:01CA037E] X-Barracuda-Connect: snt0-omc4-s11.snt0.hotmail.com[65.55.90.214] X-Barracuda-Start-Time: 1247464506 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2063 1.0000 -0.7946 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.79 X-Barracuda-Spam-Status: No, SCORE=-0.79 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3265 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --_8110f1a9-3c11-4a17-be20-10aa037480ac_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi=2C there I'm a QA engineer from Cisco. I'm working on a test case concerning XFS jou= rnal playback failure=2C which needs to manually inject error to XFS. I did some google work but get no luck. Then I think maybe XFA-QA could giv= e me some advice. That why I come to here. Is there anyone could tell me how to inject error into XFS or is there any = tool could be used? Wish for your response. Thanks & Regards. Lv Wentao. _________________________________________________________________ Drag n=92 drop=97Get easy photo sharing with Windows Live=99 Photos. http://www.microsoft.com/windows/windowslive/products/photos.aspx= --_8110f1a9-3c11-4a17-be20-10aa037480ac_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi=2C there

I'm a QA engineer from Cisco. I'm working on a test case= concerning XFS journal playback failure=2C which needs to manually inject = error to XFS.

I did some google work but get no luck. Then I think m= aybe XFA-QA could give me some advice. That why I come to here.

Is t= here anyone could tell me how to inject error into XFS or is there any tool= could be used?

Wish for your response.

Thanks &=3B Regard= s.
Lv Wentao.


What can you do with the new Windows Live? = Find out = --_8110f1a9-3c11-4a17-be20-10aa037480ac_-- From lreed@brightcove.com Mon Jul 13 01:11: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.5 required=5.0 tests=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 n6D6Bijg029333 for ; Mon, 13 Jul 2009 01:11:45 -0500 X-ASG-Debug-ID: 1247465984-6ee701360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ey-out-2122.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CD362A45F78 for ; Sun, 12 Jul 2009 23:19:44 -0700 (PDT) Received: from ey-out-2122.google.com (ey-out-2122.google.com [74.125.78.25]) by cuda.sgi.com with ESMTP id VoAv8Dn9OJ8pv8wV for ; Sun, 12 Jul 2009 23:19:44 -0700 (PDT) Received: by ey-out-2122.google.com with SMTP id 22so431072eye.57 for ; Sun, 12 Jul 2009 23:12:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.19.212 with SMTP id n62mr1309303wen.66.1247465540135; Sun, 12 Jul 2009 23:12:20 -0700 (PDT) From: Lance Reed Date: Mon, 13 Jul 2009 02:12:00 -0400 Message-ID: <5770aa2a0907122312n18db5784x8b5c8f6743c75136@mail.gmail.com> X-ASG-Orig-Subj: XFS internal error XFS_WANT_CORRUPTED_GOTO error Subject: XFS internal error XFS_WANT_CORRUPTED_GOTO error To: xfs@oss.sgi.com, syseng Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ey-out-2122.google.com[74.125.78.25] X-Barracuda-Start-Time: 1247465985 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: -0.12 X-Barracuda-Spam-Status: No, SCORE=-0.12 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE_7582B, BSF_SC0_SA085b, BSF_SC1_TG070 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.2.3266 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE_7582B Custom Rule 7582B 1.00 BSF_SC1_TG070 Custom Rule TG070 0.40 BSF_SC0_SA085b Custom Rule SA085b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello, We currently have a problem with a running XFS file system. Specifically the XFS internal error XFS_WANT_CORRUPTED_GOTO errors showed up. The Filesystem is 4.6 TB (LVM) and was originally created and mounted on a 32 bit Linux system. Do to problems with earlier versions of XFS, the HEAD node was upgraded to a 64 bit system with the following attributes: CentOS release 5.3 (Final) 2.6.18-128.1.10.el5 x86_64 XFS: xfsdump-2.2.46-1.el5.centos xfsprogs-2.9.4-1.el5.centos kmod-xfs-0.4-2 lvm2-2.02.40-6.el5 Running NFS server with LINUX HA heartbeat-2.1.3-3.el5.centos heartbeat-pils-2.1.3-3.el5.centos heartbeat-stonith-2.1.3-3.el5.centos I am posting to see if there is any updated info on the process to recover form the XFS_WANT_CORRUPTED_GOT. Similar posts seem to indicate that there is a possibility that every file can wind up in lost+found if not careful when running a xfs_repair. I would like to confirm if there are any XFS prog updates or changes that might work better with the kernel version etc we are running. This system is in use but is also a testing ground for a production system so any updates on version issues etc. would be greatly appreciated. We have the following error in logs. Jul 11 04:01:36 qanfs2 kernel: svc: unknown version (0 for prog 100003 nfsd) Jul 11 04:04:12 qanfs2 kernel: XFS internal error XFS_WANT_CORRUPTED_GOTO at line 872 of file /home/buildsvn/rpmbuild/BUILD/xf s-kmod-0.4/_kmod_build_/xfs_ialloc.c. Caller 0xffffffff88503944 Jul 11 04:04:12 qanfs2 kernel: Jul 11 04:04:12 qanfs2 kernel: Call Trace: Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_dialloc+0xfe9/0x11ba Jul 11 04:04:12 qanfs2 kernel: [] __block_prepare_write+0x1b6/0x4a6 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_get_blocks+0x0/0xe Jul 11 04:04:12 qanfs2 kernel: [] __set_page_dirty_nobuffers+0xc6/0xd1 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_ialloc+0x51/0x47a Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_dir_ialloc+0x86/0x2c6 Jul 11 04:04:12 qanfs2 kernel: [] __down_write_nested+0x12/0x92 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_mkdir+0x2d9/0x5d7 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_attr_get+0xbf/0xd2 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_vn_mknod+0x1e1/0x3bb Jul 11 04:04:12 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_iunlock+0x57/0x79 Jul 11 04:04:12 qanfs2 kernel: [] iput+0x4b/0x84 Jul 11 04:04:12 qanfs2 kernel: [] d_alloc_anon+0x1c/0xf8 Jul 11 04:04:12 qanfs2 kernel: [] :xfs:xfs_fs_get_dentry+0x38/0x59 Jul 11 04:04:12 qanfs2 kernel: [] :exportfs:find_exported_dentry+0x85/0x47b Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_acceptable+0x0/0xd8 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:exp_get_by_name+0x5b/0x71 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:exp_find_key+0x89/0x9c Jul 11 04:04:12 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:12 qanfs2 kernel: [] vfs_mkdir+0xe1/0x150 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_create+0x2c6/0x3ac Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd3_proc_mkdir+0xd9/0xea Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd_dispatch+0xd8/0x1d6 Jul 11 04:04:12 qanfs2 kernel: [] :sunrpc:svc_process+0x454/0x71b Jul 11 04:04:12 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x1a5/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] child_rip+0xa/0x11 Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:12 qanfs2 kernel: [] child_rip+0x0/0x11 Jul 11 04:04:12 qanfs2 kernel: Jul 11 04:04:12 qanfs2 kernel: nfsd: non-standard errno: -117 Jul 11 04:04:14 qanfs2 kernel: Filesystem "dm-5": XFS internal error xfs_trans_cancel at line 1138 of file /home/buildsvn/rpmb uild/BUILD/xfs-kmod-0.4/_kmod_build_/xfs_trans.c. Caller 0xffffffff8851ab40 Jul 11 04:04:14 qanfs2 kernel: Jul 11 04:04:14 qanfs2 kernel: Call Trace: Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_trans_cancel+0x5b/0xfe Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_create+0x55c/0x5a5 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_vn_mknod+0x1b6/0x3bb Jul 11 04:04:14 qanfs2 kernel: [] ifind_fast+0x47/0x83 Jul 11 04:04:14 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:14 qanfs2 kernel: [] iget_locked+0x59/0x149 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_iget+0x682/0x6d2 Jul 11 04:04:14 qanfs2 kernel: [] enqueue_task+0x41/0x56 Jul 11 04:04:14 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_iunlock+0x57/0x79 Jul 11 04:04:14 qanfs2 kernel: [] iput+0x4b/0x84 Jul 11 04:04:14 qanfs2 kernel: [] d_alloc_anon+0x1c/0xf8 Jul 11 04:04:14 qanfs2 kernel: [] :xfs:xfs_fs_get_dentry+0x38/0x59 Jul 11 04:04:14 qanfs2 kernel: [] :exportfs:find_exported_dentry+0x85/0x47b Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_acceptable+0x0/0xd8 Jul 11 04:04:14 qanfs2 kernel: [] __up_read+0x19/0x7f Jul 11 04:04:14 qanfs2 kernel: [] vfs_create+0xe6/0x158 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_create_v3+0x2c9/0x412 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd3_proc_create+0x12f/0x140 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd_dispatch+0xd8/0x1d6 Jul 11 04:04:14 qanfs2 kernel: [] :sunrpc:svc_process+0x454/0x71b Jul 11 04:04:14 qanfs2 kernel: [] __down_read+0x12/0x92 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x1a5/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] child_rip+0xa/0x11 Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] :nfsd:nfsd+0x0/0x2cb Jul 11 04:04:14 qanfs2 kernel: [] child_rip+0x0/0x11 Jul 11 04:04:15 qanfs2 kernel: Jul 11 04:04:15 qanfs2 kernel: xfs_force_shutdown(dm-5,0x8) called from line 1139 of file /home/buildsvn/rpmbuild/BUILD/xfs-km od-0.4/_kmod_build_/xfs_trans.c. Return address = 0xffffffff88512941 Jul 11 04:04:15 qanfs2 kernel: Filesystem "dm-5": Corruption of in-memory data detected. Shutting down filesystem: dm-5 Jul 11 04:04:15 qanfs2 kernel: Please umount the filesystem, and rectify the problem(s) Jul 11 04:04:15 qanfs2 kernel: nfsd: non-standard errno: -117 Jul 11 04:05:09 qanfs2 mountd[869]: couldn't open /var/lib/nfs/etab Jul 11 04:06:36 qanfs2 kernel: svc: unknown version (0 for prog 100003 nfsd) The closest post I could find on the problem was: http://www.opensubscriber.com/message/xfs@oss.sgi.com/8729803.html I don't think I am hitting the directory corruption in Linux 2.6.17 since the kernel version is 2.6.18-128.1.10.el5, but maybe there is something else? The course of action I plan to take with confirmation is from the above post: > > > To be on the safe side, either make an entire copy of your drive to > > > another device, or run "xfs_metadump -o /dev/sda1" to capture > > > a metadata (no file data) of your filesystem. > > > > > > Then run xfs_repair (mount/unmount maybe required if the log is dirty). I can't make a copy of the data since it is 4+TB. Can someone give me an idea on the size of the file output from the xfs_metadump command? Also, If everything does wind up in lost+found after running xfs_repair, is there an efficient way to put the files back in there correct locations if the Filesystem can repaired? We did have a split brain problem earlier in the week with heartbeat, however, mounting of the disk after restart did not show any problems at the time. Thanks very much in advance for any assistance to correct this problem. Thanks, Lance From martin.geng@mlinkingbiz.com Mon Jul 13 03:45:10 2009 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 n6D8j9r5036498 for ; Mon, 13 Jul 2009 03:45:10 -0500 X-ASG-Debug-ID: 1247474746-1a7b036f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mlinkingbiz.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 04CFF35C7BE for ; Mon, 13 Jul 2009 01:45:46 -0700 (PDT) Received: from mlinkingbiz.com ([98.142.211.36]) by cuda.sgi.com with ESMTP id zik3WSM5GM5F2Cpd for ; Mon, 13 Jul 2009 01:45:46 -0700 (PDT) Received: (qmail 30412 invoked by uid 0); 13 Jul 2009 08:45:09 -0000 Received: from unknown (HELO MartinThinkpad) (martin.geng@mlinkingbiz.com@218.104.206.238) by 98.142.211.36 with ESMTPA; 13 Jul 2009 08:44:35 -0000 Reply-To: From: "Martin Geng" To: "Martin Geng" X-ASG-Orig-Subj: Continuous Application of Behavior-Based Safety 2009 -- **Last Reminder to Register- 5 Seats Left** Subject: Continuous Application of Behavior-Based Safety 2009 -- **Last Reminder to Register- 5 Seats Left** Date: Mon, 13 Jul 2009 16:22:43 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_004A_01CA03D9.306B10B0" X-Priority: 1 (Highest) X-MSMail-Priority: High X-Mailer: Microsoft Office Outlook 11 Importance: High Thread-Index: AcmYniM5ITtl3wkmSleWT6BYeiSLkQByKvHAACTI3/AAD6HGwAA1HpZgAFI3YEAAOY6egACdkifAAEzCW4AAS7rn8ACPljRQAI7CVRAAFm8iEAAAGffAACDE6IAAmacpkAAAubzQAAluFbAANR2ZkAAAOf5QACgslbAAABp98AAADYfAAC9yufAAABAaEAA/HZFAAAApKcAAhuoCQAAAMWVQADboBtAAADHbcAAADMDQADAo7JAAAHVrcAAAPPBAADp0Z3AAABYGcAAAHE+wAAA1Z2AAAnDMkAAAVc7QABCCuugBBEdngABkhU9ABxl4hjAAAcql0AIrbJfwACWzY2ABLT3kgAA9zh0wAC4I1FAALlkf0AGnTrygAABKbGAAVyX9IAAqSvrAAABsoRAALvWTEAA0UYLAAD2hIVAAjJfa0ADHvGoAAKTyGtAAKQxEMAA2gnfgAABzzpAAAEgowAAuAtvgAABKjlAAAHfqAAA6R5/QARt8bgAAykwuUAAMxMpQ X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 Disposition-Notification-To: "Martin Geng" X-Barracuda-Connect: UNKNOWN[98.142.211.36] X-Barracuda-Start-Time: 1247474747 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_004A_01CA03D9.306B10B0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_004B_01CA03D9.306B10B0" ------=_NextPart_001_004B_01CA03D9.306B10B0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This is your last chance to register for Continuous Application of Behavior-Based Safety 2009 . We have only 5 seats left; therefore, do not miss this opportunity to register! Continuous Application of Behavior-Based Safety 2009 Preventing irritating injuries and improving productivity in safe working environments in a world with changes and challenges 30th & 31st July 2009 Shanghai China Hello, How are you? MARTIN LINKING is convening the Continuous Application of Behavior-Based Safety 2009 conference in Shanghai on 30th & 31st July 2009. This event will offer effective tools and strategies to optimize the safety management in organization. It will also provide you better solutions on improving the safety observation, risk assessment, and building safety culture. It will coach the leadership role in safety management, as well as implementing Lean method into BBS to achieve injury-free production. Attend this informative event and gain practical insights into: !$ Ensuring safety program by coaching vertical leadership management !$ Implementing communication strategies to achieve a total safety culture !$ Conducting effective risk analysis and safe audit with BBS management !$ Customizing efficient observation checklist for risk assessment !$ Involving employees' ownership in the planning for safety management !$ Optimizing effective System to guarantee the steady foundation of EHS Management !$ Utilizing new technologies to support BBS management in hazardous environment !$ Reinforcing safety performance with an effective reward !$ Applying lean thinking to BBS management with which to fit your business !$ Managing safety through Managing Subcontractors !$ Exploring critical role of safety intervention in leadership Some of the eminent speakers we are inviting include: !$ Andy Zou Business Director DuPont Safety Resources of Greater China !$ Patrick Cao GM Beckwell Management Consulting Shanghai !$ Yuegang Xue HSE Manager Sinochem Corporation !$ Biqin Liu EHS Manager Dow Chemical (Zhangjiagang) Co., Ltd. !$ Helen Song EHS Manager Cytec Surface Specialties (Shanghai) Co., Ltd. !$ Alan Xue EHS Manager China A.O. SMITH Electrical Products Company !$ Camel Guo EHS Supervisor Alcoa Electrical and Electronic Solution(Shanghai)Co., Ltd !$ Rubin Luo EHS Manager Michelin SWT !$ Changyuan Li HSSE GM Shell !$ Robert Zhao HPU China EHS Manager Huntsman Polyurethanes (China) Ltd. Two days conference fee is USD 995. Please find an agenda in both English and Chinese attached with this email and feel free to contact me for more information. To register the very limited 10% off seats, simply fill out the registration form, attention it to Martin Geng and fax it to + 86 28 6552 1233. If you don't want to receive any further email from us, please reply this email to unsubscribe with correct email address. Best Regards, Martin Geng __________________________________________ Martin Linking Business Consulting Company Limited Room 808A, Times Plaza, No.2 Zongfu Road, Chengdu, Sichuan 610016, China T: +86 28 65521255 F: +86 28 65521233 E: martin.geng@martinlinking.net www.martinlinking.com We are dedicated to offer our clients cutting edge information they can use immediately. Upcoming Martin Linking events: Title : Best Practice in Integrated Talent Management 2009 Date : 29&30 October, 2009 Location : Shanghai, China Link : http://www.martinlinking.com/documents/ws/tm_ws.pdf Title : Successful Project Management Date : 27&28 August 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/pm_ws.pdf Title : Best Practices for Sustainable Corporate Social Responsibility 2009 Date : 20th & 21st August 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/csr_ws.pdf Title : Total Productive Maintenance (TPM) Best Practice 2009 Date : 30th & 31st July 2009 Location: Shanghai, China Link : http://www.martinlinking.com/documents/ws/tpm_ws.pdf This message and any attachment is intended only for the use of the Addressee and may contain information that is PRIVILEGED. If you are not the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please erase all copies of the message and its attachments and notify us immediately. Thank You. Security Warning: Please note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and observe this lack of security when e-mailing us. Viruses: Although we have taken steps to ensure that this e-mail and attachments are free from any virus, we advise that in keeping with good computing practice the recipient should ensure they are actually virus free. ------=_NextPart_001_004B_01CA03D9.306B10B0 Content-Type: text/html; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable
 
This = is your=20 last chance to register for Continuous Application of = Behavior-Based=20 Safety 2009=20 . We=20 have only 5 seats = left;=20 therefore, do not miss this opportunity to = register! 
 

 Continuous Application of Behavior-Based = Safety=20 2009

Preventing irritating injuries and improving = productivity in safe=20 working environments in a world with changes and = challenges 

30th & 31st July=20 2009

Shanghai China 

 <= /SPAN>

Hello,

How are = you?=20

 

MARTIN=20 LINKING is = convening the=20 Continuous Application of Behavior-Based Safety = 2009=20 conference = in=20 Shanghai on 30th & 31st July 2009. This event will offer effective = tools and=20 strategies to optimize the safety management in organization. It will = also=20 provide you better solutions on improving the safety observation, risk=20 assessment, and building safety culture. It will coach the leadership = role in=20 safety management, as well as implementing Lean method into BBS to = achieve=20 injury-free production.

 

Attend this = informative=20 event and gain practical insights into:  

·        =20 Ensuring = safety program=20 by coaching vertical leadership management

·        =20 Implementing=20 communication strategies to achieve a total safety culture

·        =20 Conducting = effective=20 risk analysis and safe audit with BBS management

·        =20 Customizing = efficient=20 observation checklist for risk assessment

·        =20 Involving = employees’=20 ownership in the planning for safety management

·        =20 Optimizing = effective=20 System to guarantee the steady foundation of EHS Management

·        =20 Utilizing new = technologies to support BBS management in hazardous = environment

·        =20 Reinforcing = safety=20 performance with an effective reward

·        =20 Applying lean = thinking=20 to BBS management with which to fit your business

·        =20 Managing = safety through=20 Managing Subcontractors

·        =20 Exploring = critical role=20 of safety intervention in = leadership

Some of the eminent speakers we are inviting=20 include: 

·        =20 Andy Zou   Business Director  DuPont Safety = Resources of=20 Greater China

·        =20 Patrick = Cao  GM =20 Beckwell Management Consulting = Shanghai

·        =20 Yuegang = Xue  HSE Manager  Sinochem=20 Corporation

·        =20 Biqin = Liu  EHS Manager  Dow Chemical = (Zhangjiagang) Co.,=20 Ltd.

·        =20 Helen = Song  EHS Manager  Cytec Surface = Specialties=20 (Shanghai) Co., Ltd.

·        =20 Alan Xue  EHS Manager China  A.O. SMITH Electrical = Products=20 Company

·        =20 Camel = Guo  EHS Supervisor  Alcoa Electrical and = Electronic=20 Solution(Shanghai)Co., Ltd

·        =20 Rubin = Luo  EHS Manager  Michelin = SWT

·        =20 Changyuan = Li  HSSE GM  = Shell

·        =20 Robert = Zhao  HPU China EHS Manager  Huntsman Polyurethanes = (China)=20 Ltd.  

Two days = conference=20 fee is USD 995.

 

Please find = an agenda=20 in both English and Chinese attached with this email and feel free to = contact me=20 for more information.

 

To register = the very=20 limited 10% = off seats, simply fill out the registration = form, attention it to Martin Geng and fax it to + = 86 28 6552=20 1233. 

 

If you don't = want to=20 receive any further email from us, please reply this email=20 to unsubscribe with correct email = address.  

 

Best=20 Regards, 

Martin=20 Geng

__________________________________________

Martin=20 Linking = Business Consulting=20 Company=20 Limited

Room 808A, = Times=20 Plaza, = No.2 Zongfu Road, = Chengdu,

Sichuan 610016, = China

 

T: +86 28=20 65521255

F: +86 28=20 65521233

E:=20 martin.geng@martinlinking.net

www.martinlinking.com

We are = dedicated to=20 offer our clients cutting edge information they can use=20 immediately.

 

Upcoming=20 Martin Linking events:    

Title        Best Practice = in Integrated=20 Talent Management 2009
Date      :  29&30 October,=20 2009

Location : Shanghai, = China
Link      =20 :  http://www.m= artinlinking.com/documents/ws/tm_ws.pdf 

  

Title    =  =20 : Successful Project=20 Management
Date     :  27&28 = August=20 2009
Location: Shanghai, China

Link     :
  http://www.m= artinlinking.com/documents/ws/pm_ws.pdf

 

Title     =20 : Best Practices for Sustainable = Corporate=20 Social Responsibility 2009

Date     : =20 20th & 21st August 2009

Location: Shanghai, = China

Link      :=20 http://www.= martinlinking.com/documents/ws/csr_ws.pdf

 

Title     =20 : Total Productive Maintenance = (TPM) Best=20 Practice 2009

Date     : =20 30th & 31st July 2009

Location: Shanghai, = China

Link      :=20 http://www.= martinlinking.com/documents/ws/tpm_ws.pdf 

 

This = message and=20 any attachment is intended only for the use of the Addressee and may = contain=20 information that is PRIVILEGED. If you are not the intended recipient, = you are=20 hereby notified that any dissemination of this communication is = strictly=20 prohibited. If you have received this communication in error, please = erase all=20 copies of the message and its attachments and notify us immediately. = Thank You.=20 Security Warning: Please note that this e-mail has been created in the = knowledge=20 that Internet e-mail is not a 100% secure communications medium. We = advise that=20 you understand and observe this lack of security when e-mailing us. = Viruses:=20 Although we have taken steps to ensure that this e-mail and attachments = are free=20 from any virus, we advise that in keeping with good computing practice = the=20 recipient should ensure they are actually virus free. =

------=_NextPart_001_004B_01CA03D9.306B10B0-- ------=_NextPart_000_004A_01CA03D9.306B10B0 Content-Type: application/pdf; name="Continuous Application of Behavior-Based Safety 2009.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Continuous Application of Behavior-Based Safety 2009.pdf" JVBERi0xLjYNJeLjz9MNCjIwNDcgMCBvYmoNPDwvTGluZWFyaXplZCAxL0wgNjU2MTgzL08gMjA0 OS9FIDUzMjQ3L04gNy9UIDYxNTE5NC9IIFsgMTA1NiA2NDddPj4NZW5kb2JqDSAgICAgICAgICAg DQp4cmVmDQoyMDQ3IDM4DQowMDAwMDAwMDE2IDAwMDAwIG4NCjAwMDAwMDE3MDMgMDAwMDAgbg0K MDAwMDAwMTgzOCAwMDAwMCBuDQowMDAwMDAyMzExIDAwMDAwIG4NCjAwMDAwMDI3OTkgMDAwMDAg bg0KMDAwMDAwMzI0MCAwMDAwMCBuDQowMDAwMDAzMzc2IDAwMDAwIG4NCjAwMDAwMDM0MTUgMDAw MDAgbg0KMDAwMDAwMzQ2NiAwMDAwMCBuDQowMDAwMDAzNTE3IDAwMDAwIG4NCjAwMDAwMDM3NDcg MDAwMDAgbg0KMDAwMDAwMzgyNiAwMDAwMCBuDQowMDAwMDA0MDUwIDAwMDAwIG4NCjAwMDAwMDQ5 MTcgMDAwMDAgbg0KMDAwMDAwNTA1NCAwMDAwMCBuDQowMDAwMDA1OTEyIDAwMDAwIG4NCjAwMDAw MDY1OTAgMDAwMDAgbg0KMDAwMDAwNzM0NiAwMDAwMCBuDQowMDAwMDA4Mjc5IDAwMDAwIG4NCjAw MDAwMDkxNTcgMDAwMDAgbg0KMDAwMDAxMDAwMSAwMDAwMCBuDQowMDAwMDE5NzA1IDAwMDAwIG4N CjAwMDAwMjQ4NzcgMDAwMDAgbg0KMDAwMDAyNzg3MyAwMDAwMCBuDQowMDAwMDMyMzgyIDAwMDAw IG4NCjAwMDAwMzQzNDUgMDAwMDAgbg0KMDAwMDAzNTA0NSAwMDAwMCBuDQowMDAwMDM3NzQwIDAw MDAwIG4NCjAwMDAwMzg1OTUgMDAwMDAgbg0KMDAwMDAzOTM5NSAwMDAwMCBuDQowMDAwMDQ3OTU1 IDAwMDAwIG4NCjAwMDAwNDgyMDYgMDAwMDAgbg0KMDAwMDA0ODQxMyAwMDAwMCBuDQowMDAwMDUy MjI3IDAwMDAwIG4NCjAwMDAwNTI0NjEgMDAwMDAgbg0KMDAwMDA1MjY3MSAwMDAwMCBuDQowMDAw MDUyOTU4IDAwMDAwIG4NCjAwMDAwMDEwNTYgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSAyMDg1 L1ByZXYgNjE1MTgxL1Jvb3QgMjA0OCAwIFIvSW5mbyAyMDQ2IDAgUi9JRFs8N0I2QTVCMjQ1NTYw MUE0RUFFMDZCRjdDM0VBMjlERUE+PDM1MDNBRENCOTA3Q0RFNDA5Q0IxMUNENUU2QTU1NDgyPl0+ Pg0Kc3RhcnR4cmVmDQowDQolJUVPRg0KICAgIA0KMjA4NCAwIG9iag08PC9MZW5ndGggNTUxL0Mg NjE5L0ZpbHRlci9GbGF0ZURlY29kZS9JIDY0My9PIDYwMy9TIDM0MT4+c3RyZWFtDQp42mJgYGBn YGBZzsDKwKDPyiDAgAACDGxAORYGjodnlqowzDzD6MggLLCEmY2B4fSkxG+yy4wcGLABDhmnsvWi azKWBm9J6bHMe+h09WSwStLe5nSfmS18Ki4a/PdtmzwOT3snohsz1chN+wYLl4RHodDSk+1yjkau XNMMUi5ubveXd5RSCWtk7phpVsv1JSdoc6bMI+8bqj4TL6ulSYPNvLjIdW3YYqlE5k7BZj7v7Wvv 7O+UMwrkMYw7tDWqL3pHwNaikJPKrhwqFj07N78wALmLsby8ogMIwGyz9A4oaADxxZHYTO7l5RAu xD8ioRUdCABWwqichhAD8RtQQwcoFMrAdEINSCsDcSbYHHUGQYabDAUORg5soFA2YJBg2M8gwqDn kN7ApiA5g/MP6yzmOsbFDSdddig6XIjJcL3Bz8E0ldWA4QxDvJLIBLYFTAtk6xgOM4Q22DHIO/Ac YI2++YNxGeMzzgAGUQbuBtYFzALMFoxuDCcZIpjtG6QYuBrYOtgNrsxiuMwQ3FrhqviAfQHTB8Ye hm0McQzPGUQdrBNYD7B5sFxm9WOIZzBoEG+QTpAw4HrBPIXhC1CFboOoA98Cpg2sAcwRKlcYYhgM G8QdeBRYDzCtYMxhOMaQyLC+weqAUALIULYA5nWMmUBTMMBsBrbgKUBakIGBVRtIr2Fgi9gPTHEB DEw/loHCmoF9qQ+Q/4+BM/4wKCCB+DBAgAEAA8azKA0KZW5kc3RyZWFtDWVuZG9iag0yMDQ4IDAg b2JqDTw8L01hcmtJbmZvPDwvTWFya2VkIGZhbHNlPj4vT3V0bGluZXMgMTU1IDAgUi9NZXRhZGF0 YSAyMDQ1IDAgUi9QYWdlcyAyMDQ0IDAgUi9TdHJ1Y3RUcmVlUm9vdCAxNzIgMCBSL1R5cGUvQ2F0 YWxvZz4+DWVuZG9iag0yMDQ5IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJdL1BhcmVu dCAyMDQ0IDAgUi9TdHJ1Y3RQYXJlbnRzIDAvQ29udGVudHNbMjA1OSAwIFIgMjA2MSAwIFIgMjA2 MiAwIFIgMjA2MyAwIFIgMjA2NCAwIFIgMjA2NSAwIFIgMjA2NiAwIFIgMjA3MiAwIFJdL1JvdGF0 ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQyXS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIw NjggMCBSL0ltMSAyMDY3IDAgUi9JbTIgMjA2OSAwIFIvSW0zIDIwNzAgMCBSL0ltNCAyMDcxIDAg Uj4+L0NvbG9yU3BhY2U8PC9DUzAgMjA1MyAwIFIvQ1MxIDIwNTQgMCBSL0NTMiAyMDU1IDAgUj4+ L0ZvbnQ8PC9UVDAgMjA1MCAwIFIvVFQxIDIwNTEgMCBSL0MyXzAgMjA1MiAwIFIvQzJfMSAyMDYw IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQy9JbWFnZUldL0V4dEdTdGF0ZTw8L0dTMCAy MDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTIwNTAgMCBvYmoNPDwvU3VidHlwZS9UcnVl VHlwZS9Gb250RGVzY3JpcHRvciAyMDU4IDAgUi9MYXN0Q2hhciAxNDgvV2lkdGhzWzI3OCAwIDAg MCAwIDAgMCAxOTEgMCAwIDAgMCAyNzggMCAyNzggMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCA2NjcgNjY3IDcyMiA3MjIgNjY3IDAgNzc4IDcyMiAyNzggMCAwIDU1NiA4MzMg NzIyIDAgNjY3IDAgNzIyIDY2NyA2MTEgNzIyIDAgOTQ0IDAgNjY3IDAgMCAwIDAgMCAwIDAgNTU2 IDU1NiA1MDAgNTU2IDU1NiAyNzggNTU2IDU1NiAyMjIgMjIyIDUwMCAyMjIgODMzIDU1NiA1NTYg NTU2IDU1NiAzMzMgNTAwIDI3OCA1NTYgNTAwIDcyMiA1MDAgNTAwIDUwMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjIyIDMzMyAzMzNdL0Jhc2VGb250L0Fy aWFsTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1l bmRvYmoNMjA1MSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDIwNTYg MCBSL0xhc3RDaGFyIDEyMi9XaWR0aHNbMjc4IDAgMCAwIDAgMCA3MjIgMCAwIDAgMCA1ODQgMjc4 IDMzMyAyNzggMCA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDAgNTU2IDU1NiAzMzMgMCAwIDAg MCAwIDAgNzIyIDcyMiA3MjIgMCA2NjcgMCAwIDAgMjc4IDU1NiAwIDAgODMzIDAgNzc4IDY2NyAw IDcyMiA2NjcgMCA3MjIgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYg MzMzIDYxMSA2MTEgMjc4IDI3OCA1NTYgMjc4IDg4OSA2MTEgNjExIDYxMSAwIDM4OSA1NTYgMzMz IDYxMSA1NTYgNzc4IDU1NiA1NTYgNTAwXS9CYXNlRm9udC9BcmlhbC1Cb2xkTVQvRmlyc3RDaGFy IDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMjA1MiAwIG9i ag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1syMDc4IDAgUl0vQmFzZUZvbnQvS05E RUlLK0NhbGlicmkvVG9Vbmljb2RlIDIwODIgMCBSL0VuY29kaW5nL0lkZW50aXR5LUgvVHlwZS9G b250Pj4NZW5kb2JqDTIwNTMgMCBvYmoNWy9JQ0NCYXNlZCAyMDczIDAgUl0NZW5kb2JqDTIwNTQg MCBvYmoNWy9JbmRleGVkIDIwNTMgMCBSIDI1NSAyMDc0IDAgUl0NZW5kb2JqDTIwNTUgMCBvYmoN Wy9JbmRleGVkIDIwNTMgMCBSIDI1NSAyMDc1IDAgUl0NZW5kb2JqDTIwNTYgMCBvYmoNPDwvU3Rl bVYgMTM4L0ZvbnROYW1lL0FyaWFsLUJvbGRNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdo dCA3MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02MjggLTM3NiAyMDAwIDEwMTBd L0FzY2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0IDcxOC9YSGVpZ2h0IDUxNS9U eXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMjA1NyAwIG9iag08PC9P UE0gMS9PUCBmYWxzZS9vcCBmYWxzZS9UeXBlL0V4dEdTdGF0ZS9TQSBmYWxzZS9TTSAwLjAyPj4N ZW5kb2JqDTIwNTggMCBvYmoNPDwvU3RlbVYgODgvRm9udE5hbWUvQXJpYWxNVC9Gb250U3RyZXRj aC9Ob3JtYWwvRm9udFdlaWdodCA0MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02 NjUgLTMyNSAyMDAwIDEwMDZdL0FzY2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0 IDcxOC9YSGVpZ2h0IDUxNS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRv YmoNMjA1OSAwIG9iag08PC9MZW5ndGggNzk1L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpI iYxU32vjMAx+z1+hx2QQ13Ycx4ExuLbj2MFgxwL3cIwjpGnrXZt0SX+w//4kJ2nX6wYlL4r9SZY+ fdI480ZPcHs7epw8TIHD3d14OgFv9P2Zw6L1RhP5h4OAbO4JzmIE4F9nmIgzzXkE2dq75WjcZa/e /SM5nwKKISCHUDBlNGTTr9FyQGc3X4Oia0DqGlB8DUhfA0quAZkvQfeZ94YMGSUhTmPGJYRGCYZs NaX36waq/lqw1DhED8A/AuD9aIL9KlrAlkQpdYnJJAZoiwodEy5YYobQQuEl+c29n/iNzwSgjuWO suzUeHTrO4+WZkKCkQlTsuu+D8FnLTiSImDxUUiUmzaQFXAuqS6uwLr7uL8dS44pfTJfsh+Xbx25 pUSz2YlfLEMMz+JZQs+GaAqFhweQkkikFDoLqxIGDBIW6764SV1tbbWrdy1822xWtsi3tq6gnsO4 XOZ7WzfhOG/LGTzn83L77rjgFNtJPooNSd6XnKef05ReMh66XB1FnEVGulSFPrbBWV2qiTJMDKk+ NeW+pGwXYJvGbvPOrF53jS1byKsZ2PWmoTS6J+LhCYxETyQsiToC/XpPvpumnu2Krd1brMxW0GKN cKibv3TpKu1ZPWCxzhtrFrGLUFZ729TVGjNqyTcnx9UMDvaUgOuHYwv7niSif3y7hGKZV4s+abRX q9L9fkZheloyZ0KTiilu5KXSOOgUVciFPi6v/+dxGCjhPjdIEaoiMqBjTtMkTcqkBhXjVuumSUW4 4TRoegLHLMZpU6Akdcndjx6qla3K52W+KU/r5bhy3zCAYRoDqJQJN6aonTBSw5hfswfePIEZobrT NFWdrlMWRfinI1AYErWClSaYpWGGky2gWGNuaw7TGveBI+ByMcT8jOTjVHVtVJ2OhKQFf4BkGCpn RNxQJdpgvqafbJ9mJwiF9veBUL4NQuPXuyZfwTgne5gnsreIi/x3wpEeg/Cj04x+UReFO19vnHcV CN86XxSM8Q9BKDnBBQkrh0DE/ZlDvwdS4goLE7+eUxDkEjVvK8Qrf+FOgheAfwIMANOwo2QNCmVu ZHN0cmVhbQ1lbmRvYmoNMjA2MCAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250 c1syMDgxIDAgUl0vQmFzZUZvbnQvS05ERU9LK1N5bWJvbE1UL1RvVW5pY29kZSAyMDgzIDAgUi9F bmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag0yMDYxIDAgb2JqDTw8L0xlbmd0 aCA3ODYvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCkiJlFTfb5swEH7nr7inCabh2gYMTFWl Ne1DK3WaFN6maXKBBKoAFTit+t/vzg5JmqYPExI+/7q777vvDADFvccZ5zyD4hU4hIKJBIob77e/ GSYTBqHyTSD9tiOrhrZ/CsLM3wbCH9uazCkIhQ+6r6ClaY87ZVvZ07TTGzInRnsQ/MFwtw8L8C5+ weXlxcPi7gYSAVdX1ze4yFmUi/Qokcxl8qB7dBX7bwH+gDw91o3GJeW/0JINPGwp0Kg38Kgnm1kF k6ZxZWeYh4h2Lhya543d6BBe3Vug2ibbUt5DP8HoAG43dhmx29jVqDvtPEoXujyAC2cySyBLyAOa NHJoxrralseBLEHOe+qbxhHdWzjdYz3a5WEFmyDM/QHpncgwoWlp7GrQNCL/dK5rrbvBchGEEWX9 tMVSUQXy4wrcFt7FYsmhnEDYD6ay9yLJkHUVZUwpkDJmAhLF8hi58FbedfGucOm+cLD2LoqCvBQr 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 Z3RoIDk1NDcvRmlsdGVyL0RDVERlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSAy MDUzIDAgUi9XaWR0aCA0NzgvSGVpZ2h0IDk3L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5B ZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4c GxckJCcnJCQ1MzMzNTs7Ozs7Ozs7OzsBDQsLDQ4NEA4OEBQODw4UFBARERAUHRQUFRQUHSUaFxcX FxolICMeHh4jICgoJSUoKDIyMDIyOzs7Ozs7Ozs7O//AABEIAGEB3gMBIgACEQEDEQH/xAE/AAAB BQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAA AQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh 8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW 5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPB UtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk 9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/APVVnZ31g6RgOLMjIaLB zW2Xu+YbMfNF6u/Ir6ZkvxZN7a3FkczHbzXlJJcSSZJ1JPMqfl8AyWSapjyZOHYPe2fXzpDfoV3W a9mtA/FyC3/GBgz7sW0DxBaT+ULh0lbHKYvH7WL3pPo+B9cOj5tradz6LHwGi0AAk9twJC3F44ND I5XpP1V6v+0umNFjpyMeK7Z5P7rvmFW5jlxjAlHbqyY8nFoXaSSSVZlUoW2101ustcGMbq5zjAA+ JU1wX10607Ky/wBnUu/QY5/SR+dZ3/zVJixnJLhH1Wzlwi3dyPrv0Wlxaw2Xx+cxuh+bi1Vf/HA6 fuj7Nds8fbP3T/FcMkro5PH1ssHvSfQcf689FtcG2erRP5z2yB/mFxW7j5NGTU27HsbbW7h7TIXk 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 WigbQ1mgLf3T5LRSSOSRN3qoQjVU5GR9XMXIzxlWOPpta1ooAhvtEAT4eSWf0BuTl1ZVFzsV1bQw +mIMDjbBEeC10kvcl32FK4I9nF6h9XWZFONTjWeg2hxJJEk7ol0/vaKwehYpwLMQuc59oBfe73PL hqCSfDwWkklxyoC9lcEddN3Jwfq9i41VjbXOyLLGGsvd2aRBDRrClkdBx39NHT6XmlgcHF8SSR+9 xK1EkuOV3firgjVU51fQ8FmA/CgltgHqWH6ZI4M+XZZIxcS25/SOnFzi6Dm5jvcdrT9AH4rd6lXl W4VlWIQLngNDiYgEw4/ch9J6XV03G9Jh3WO1ss8T/cnCdAknW9B+1aYWQANO7YxcSjEqFVLYHcnU k+JKMkkoybZBopJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJfKqSSn6qSXyqkkp+qkl8qpJKfqp JfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qTL5WSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlV JJT9VJL5VSSU/VSS+VUklP8A/9kKDQplbmRzdHJlYW0NZW5kb2JqDTIwNjggMCBvYmoNPDwvU3Vi dHlwZS9JbWFnZS9MZW5ndGggNTAxNS9GaWx0ZXIvRENURGVjb2RlL0JpdHNQZXJDb21wb25lbnQg OC9Db2xvclNwYWNlIDIwNTMgMCBSL1dpZHRoIDMwMi9IZWlnaHQgNjIvVHlwZS9YT2JqZWN0Pj5z dHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMT GBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwENCwsNDg0QDg4QFA4PDhQUEBER EBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7Ozs7Ozs7/8AAEQgAPgEuAwEi AAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAA 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 4gR7v6vYBbySXHPtrfZHDHv+Lz/7I6kXdQlzD9oZsbc7Wx8DjT2tBKWRjdWswsRnoNArsrnGadIZ 3efiF0CSXHLS4/grhj3/ABcazD6r+068sNpsc6rYXunbVrLtg76Ktb0TPFf+DyLLMhz3biQ0McZl 0Aang+XC6JJISnpQ6dlGMep/FwMyjMxMi651lf601tbXN/nnECPSqbwBPfwWl0jCfg4TKHxuGpa3 UAnU6nUoT68MdYa/JtLshzf1SpzSGtAHu2n6JcfvWklInhA8r0+xMQLJUkkko16kkkklKSSSSUpJ JJJT/9kKDQplbmRzdHJlYW0NZW5kb2JqDTIwNjkgMCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5n dGggMjgzNy9GaWx0ZXIvRmxhdGVEZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2Ug MjA1NCAwIFIvV2lkdGggMTYwL0hlaWdodCA1MC9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0KaN7sV3dY W9cVP9dPNi51beq6M02ctmndZnQ5u03ajCZpY6cZTeO0GU7q7KRxE6eJE9dGQiCQkBAGxBIYiW2m 2ENm2ZhhZowBMwwYzB5iWAs9qee9J1kSwvma/pPva/l9fLz77jt679xzz+93ziVkDWtYwxrWsIY1 rGEN/784cviqOPLFe/fJgzfu+PFVsOPnr7lYqlsaTgidt5JIhTsig7kH0S35CryEVNakOa2jA1f5 tlAa7Aap2NfD5qH11NWx/m4XyzMAfS637WChXWCxQAn3oAugEi+ZALWEyPzYuVJoIH4NHZ86cLZT zc6a3GDt8fRvJ2/d1cH7jYtlP4DWZe3TsBJcuLIBzh9vCiaVAMeEJ/WZ9jkokZpcjVNx+uzKN7R4 bu/1FOeKI2Ru/lFPOS39dQApztvwZRhSJajsSEidhuVwZl5lhrpSgGLSA6YG/MlSFE4qZgDGM6ww fK6zlwZTd2d3h4yQAB3M5+dqco5nazS5GWkY91IP/97ZYvfIy/srW7Z+d7uPl6t73vvQJDQ/T6PR 5JRbgK7KwZGmIAFnUwFOJVZV2HEidhbm/XE6Yg6TINwMI5IFJiDG5iQR85mQ2UlpPtAxhCQCNNm/ rbBAGyF8bREmrrpK0ui2fjte2ECto+598bnn97325nsHj5BDu32cIaS2HUCTEo+NPM3NloxemVku 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 BplG0q3QkQ7lfH1XAla1LKgIgU48fOOIUZwiGAzJbY9KBZ1GB+lB9AyK2cUCmg4TlRZl60AdOni+ ch6S42EuupHrACqhS17RGpYIfbIOqIoAU/4wdOFRXexJD+ozzuZee7m8WhwaHZgZviwmQ2MDU6O6 AWMwXzc+PjmqG5oU8v1IF9sOkhPQ5DsHEclYGjogW2a9LIw5PzNI0woiFKDUpVeAfmraeJr4CbA0 x3FNTTZpgPIU6PcdhLhYmPJb6d9Tn+Ue9c33WaNmPJVqmf4RXwZZ9eyohRulRc4M+XdDXezAsLgF 8sW00a8aU2ECZCkwINfbEjJBF9C4VBhtWAqshvYwbalQoz/jexFK1OP9eGI5lbBoCdfCaZHJIsrj elY3vLSJd3VQD3JGJTCKTfg41sYCmMRj2rAfMxom5XCR5MEFkmwGpkUfhogEuOR7DnKF5lmsXWdE szA3jM+xc7UZkknkZTDhWakVGkk2NobLeSRiHk8damwp8iJhmtRCzSr698gfHr0KHnne3sxKVGEk SMU0cmJVOJGouZGcSHEUkhiG9M3IjCD82Hi+RKXwjVIF+R2LJqGJciLPUoniUQzDs44zdTY0Iwv7 E4Uax1FZGcxMSGY6EjpSFRSoiiJhaukXXQ3+d/BvAQYAcWaLywoNCmVuZHN0cmVhbQ1lbmRvYmoN MjA3MCAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA0MzUyL0ZpbHRlci9EQ1REZWNvZGUv Qml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMjA1MyAwIFIvV2lkdGggMjQwL0hlaWdodCA1 MC9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0K/9j/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkM EQsKCxEVDwwMDxUYExMVExMYFxIUFBQUEhcXGxweHBsXJCQnJyQkNTMzMzU7Ozs7Ozs7Ozs7AQ0L Cw0ODRAODhAUDg8OFBQQEREQFB0UFBUUFB0lGhcXFxcaJSAjHh4eIyAoKCUlKCgyMjAyMjs7Ozs7 Ozs7Ozv/wAARCAAyAPADASIAAhEBAxEB/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoL AQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVB 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 AlbOP0XMopx6B1O91WNAaC2uXNaIa17g2XQPHnuq3Tfqvb07GOLT1G41OyHZLwWVSXPcbHidsgEl JVnu0cbqeX1Ho1/W+m1UnGrNhoqtL99ldRIJLmvAaXxppp3Wt0rI6d1LpFHVq91ePfULiHuI2iJd uPkh4/1YrxMTJwMPKtx8LJc93oNDTs9STYGOI3CZ+XZGd0Gn7M3AqtfT01uK/EdhMDdpa8bd26Nw LR4FJVnu129V6C5jnes4AbNkyPU9U7a/T/e3HhRd1n6vMqFrryB6/wBlc33bmXRPpvb2MJO+qbLO l43Trsy2wYTq7MW3awOY6oy06Nh3hqk/6o47ve3JsZe/NZ1C+0NZNljG7A0jbAEeCSrPdZnXPq69 wa3IMm/7MfpDbbyGu8J7LdrrbW3a3hYNn1RY9l7ftto+0Z46kTtr0sADdglv0SGhdCkhSS+VUklP 1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/V SS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU//2QoNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3MSAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCAxODA0L0ZpbHRlci9GbGF0 ZURlY29kZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSAyMDU1IDAgUi9XaWR0aCAxNTAv SGVpZ2h0IDU0L1R5cGUvWE9iamVjdD4+c3RyZWFtDQpo3uyY5V8bSxSGzySb3biRhAQpDsWhFGkp FCpoKXXq7u7u7u7urrfuct3d3d3+gzszK9nwS0LgA9wPvB+yMjszz55558xsAJrVrGb9zzWoZO1X PQ4M6TS/XbuJfwaZ5p1OjWpiop4Db3Sb3FeB5OpdnnPySBMy6Ten9UXe1PtwUVMN3IolNcinWl8d 1ARMa0ZOHID8auXMxmZK+iBMgerSnFaNylSyuS8KRMZGZErvsx8FpnZZjQa160JbFKj61Gc+M1jm BkLNC0OBa0o9GjYpsKwNYnrzQIt6QKHu9WjahqFsDYIa0wnVS78E3rSVhMrUEKjSF9HGbtOzhq3f w3faInl8Zeo3MxaqcTLf8nEa9Zs6J5cf4zY9OqLHgbetIVQNmbSpEJFdQs96LSL9FuxOgagUvBLf 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 faL7JONky3da31W3UdoK26H27PaZjviOkc7wzoFTK051d9l2tX1v9P2R02qnq87Inik5Szibf3bh XM652fOp56cvxF0Y647qfnBx1cXbPQE9/Ze8L1257H75Yq9T77krdldOX7W5euoa41rHdcvr7X0W fW0/WPzQ1m/Z337D6kbnTeubXQPLB84OOgxeuOV66/Jtr9vX76y8MzAUMnR3OHJ45C777uS9pHsv 72fcn3+w6SH6YeEjqUflj5Ue1/2o92PriOXImVHX0b4nQU8ejLHGnv+U/tOH8fyn5KflE6oTjZNm k6en3KduPlv9bPx56vP56YKfpX+ufqH74rtfHH/pm1k1M/6S/3Lh1+JX8q+OvF72unvWf/bxm+Q3 83OFb+XfHn3HeNf7Puz9xHzmB+yHio96H7s+eX96uJC8sPCbAAMA94Tz+woNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3NCAwIG9iag08PC9MZW5ndGggNzgzL0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFt DQpo3gAAA//8AAAA////zAAAywAAyQAAxwAAzAEBzAICywMDywQEzQUFzgcHzQcHzQgIzgkJzgsL zwwMzQwMzw4O0BERzxERzBERzhMTzhQU0BUV0BcXzxgY0RkZ0h0d0R0d0h8f0yUl1Ccn0ygo1Coq 0iws1S0t1jAw1TAw1jMz1zU11zc31zk52Ds72UFB2kVF2UVF20dH20hI2kpK3E9P209P3FFR3VNT 3VVV3VZW3lhY3ltb4Wlp4mxs43Bw43Jy43V15Hd35Hh45X195YCA5oOD54WF6IqK54qK6I2N6Y+P 546O6ZGR6ZKS6peX65mZ65qa652d7J+f7KCg7aOj7aSk7qen7aen762t766u8LGx77Gx8LOz8LS0 8bm58bu78r+/8sHB88PD9MXF88TE9MfH9MjI9MvL9c3N9tHR9tXV99jY+Nra+d7e+N3d+eHh+uPj +ePj+uXl+eTk+ufn++np++rq/O7u++7u/PHx/fPz/fT0/vf3/ff3/vn5/fn5/vv7//39/v7+/f39 +vr6+fn59vb29PT08/Pz8PDw7u7u7e3t6+vr6enp5ubm5eXl4+Pj4eHh39/f3Nzc29vb2dnZ19fX 1dXV09PT0dHRzs7Ozc3NysrKycnJx8fHxMTEw8PDwcHBv7+/vb29u7u7ubm5t7e3tbW1s7OzsbGx r6+vrKysqqqqqampp6enpKSko6OjoaGhnp6enJycm5ubmZmZl5eXlZWVkpKSkZGRj4+PjY2Ni4uL iYmJh4eHhYWFg4ODgICAf39/fX19enp6eXl5d3d3dHR0cnJycHBwb29vbW1ta2traGhoZ2dnZGRk Y2NjYWFhX19fXFxcWlpaWVlZVlZWVVVVU1NTUFBQT09PTU1NSkpKSUlJR0dHRUVFQ0NDQEBAPj4+ PT09Ozs7OTk5NjY2NDQ0MzMzMDAwLi4uLCwsKioqKSkpJycnJCQkIiIiICAgHx8fHBwcGxsbGRkZ FxcXFRUVEhISERERDw8PDAwMCgoKCAgIBwcHBQUFAwMDAQEBAgwAJBOn5woNCmVuZHN0cmVhbQ1l bmRvYmoNMjA3NSAwIG9iag08PC9MZW5ndGggNzI4L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFt DQpo3ozB+S8QUBwA8H5ySzmiQ0y5ontLpRRqIrdhLGmZkFp3WudEMaZjrahFOctNchdCtdLhinXT ug9JvPP73utf6PNRSiENDaSpqWNAeXq6hxdr7xDE0xObmYm7d9n27djOTjx9mpwC/OpVduSIfPcO ysrkyAgNDycrVgwNSztH1tMr8wuFmTk9kAB4+nQ8Z46TM0NaWqK1Fc+cqYS4cAmQtjbS12fHj4uO jtFRhYyNo2O5HB4my5apsTH54wcNDlaMqb9/iZOTolR+/YpNTGhkJDt0iB08iHR0qL8/0tVFBgZ4 3jxkZMQzM8maNVBbK7q65O/fbNcusmqVklJ+/CjfvMEzZpDly+HaNfH8eUgYF/fusWPHFOfsxAni 4sJPnVIYi/5+pKcHhYV47lxsbY0tLGhQEJo6Vb58qf78UQDU11d++SLfvoXcXNHSwtPSiIcHlJeL nh40ZYp8/ZpnZMjv38nSpfzyZernR6OjiZcXNDWJx4/F/fvy50/R3a3Gx2lUFFRUwPXreOFCbGXF EhKwvb389Ytu2sTi4qC6Gs+eDcXFNDQUTZ6Mzc3lp0/i0SPR3Myzs6GyEtva8qQkfu4c3bxZfvhA Q0Kojw8/e1a0t4veXp6cTBYtwrNm0a1bibMzi42Vo6N040YaEKAmJsTDh7duC/HgAZ4/X7S1YUtL 8eyZHBwUd+4gQ0OFEA0LY/v2YVNTfv48O3mSHT0KeXk0Jgby86GmBhobaUQE27OHuLqSdevg5k2o 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 PvlQodmAGNxID4lmPGumZ8ARJ8eplvkL1touwdkayl8anJzkJFjv+IrMuxJ5RBt8tg059wSsw639 RTyJPuvQ7gvaaHmR75SiXksjzD3QroC/0cP8U+QvRSjbiO+1NEpEAL5AxHBD6Yj/Yhb2RfrWRdzr 5x1Qhk+UI88bIeNE3xiO8YuRE1SIAHwvgJwqgJimY+BWGdf4GfQF4m4abjEaZq6jWjEHcWysE6sm gXG34pnKMWScySK3jHXO3ZzJ/0B5Ig4ddzd8sVV8TcXQEvMdajXjqM8jt1kF7Q3wBHz7EOb2S5Tf oqkiYHfL2IzzzuSbsDYH+OoLEnbMcLNj9JqEv0L7wArFn+HbdXQNdPJ62oVYUAs/Hid9Grwq/dvc T89AOyj1hMUZHQAFCetoBewMbQOvJ6zIQs6Xhe/BsXwEGewviAk/NqK8xziNehrq49kjiCGA9yCf BK5iOtIXaN28h871fnMbaR/YxbZhTduohu2lJWA78+Ne9UOfRzGw5v+1w1jPgZ2gAewQMXpYzEQ+ 0EPrwUzjf6SXaViUVR/Gz5lhADdgcIZ9cRcVBTdEREEBZRMFZFGUVcR93xdErazMVrOyjDKzTVyO llpmmy1mlmVlZWVmm6a576jvf7i9P73vh67r/fC/fr+zzjMzZ57nnr1qhbWnWmGTZ5JNnk0eV6Tk ueERD7rXqc2ukv+fNbb1KsG2UQ2W96tkbYLbNjlHXvJ51MvvwashOxWK75JKl3aucJJ8Fp3Ee1gv yLO6Vn6/e+T/Y63Mq5Wc1lKleXaXe0W93N+Pyxm3q1C3VarEsl/uy6dUuVS2nI9W1sPCGFVtNZLZ YuR+ECNn20ulSm2Smi5VJdVCqlJqglSFVE5DJclns1IFWpfIfXCG3A83qnbWsXIdO+QzSFNRcjYy rLtVjlzPUKmVUpVS5VJxUlUN11wr56dWzqvM+a/ri/jX1xf9v65Pfh+p+qpkiC0qw1Kn+luOqLaW DXJGjqoieS53sxyT/qOSU06qbGG25aAq0LtVqVTh/7PWslbF6kuqqyVHxVvS5FymK4dloKzJVtGW WNXKUiB7DZa9/+28rbczrM1Vsq1ESp6lNv877CKVK7VPZTVUlRpk2yG1TuqAam9bpFLEU+TZ7spz qZ5ZKlX6Rnrsk++rXp7r9SpTqlSqk1TxHR8uJb8h+a4wnieV7zrPthMq0s2merofUuPkuy+znJb8 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 jP54GEXoh77og97ohUL0xEPogQLkIw/d8SA0cpGDbshGFjKRgXQ8AD/ux33oii7woTM6oSM6oD28 aId7cQ/uRlvchTvhwR24HW1wG27FLWiNVrgZN6ElboQbN6AFrkdzNENTXIcmuBbXIA0KjdEIqXCh IVKQjCQkIgENUB/1UBdOOBAPO+JgQyyuRh1chdqohZj21eytsEBgGEXCmvyDv/EX/sQf+B2/4Vf8 gp9xAT/hR/yA8ziHsziD0ziFkziB4ziGoziCwziEgziAKuzH9/gO32If9mIPvsHX2I1d+ApfYie+ wOeoxA5sx2f4FJ9gGz7GR9iKLdiMTdiID7EB6/EB3sc6vId38Q7W4m2swWqswkqsQAUiWI638Cbe gInX8RqWYSlexRK8gsVYhIUoxwK8jJfwIl7A85iPeXgOz+IZPI25mIPZmIWZmIHpmIan8CSewFQ8 jscwxShqXybkX8i/kH8h/0L+hfwL+RfyL+RfyL+QfyH/Qv6F/Av5F/Iv5F/IvwRABwgdIHSA0AFC BwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgdIHSA0AFCBwgd IHSA0AFC/oX8C/kXsi9kX8i+kH0h+0L2hewL2ReyL2T/cvfwFb7lX+4XuMK35F6Fxr8DAOaOvXYN CmVuZHN0cmVhbQ1lbmRvYmoNMjA3NyAwIG9iag08PC9TdGVtViA4MC9Gb250TmFtZS9LTkRFSUsr Q2FsaWJyaS9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDIwNzYgMCBSL0ZvbnRXZWlnaHQg NDAwL0ZsYWdzIDQvRGVzY2VudCAtMjUwL0ZvbnRCQm94Wy00NzYgLTE5NCAxMjE0IDk1Ml0vQXNj ZW50IDc1MC9Gb250RmFtaWx5KENhbGlicmkpL0NhcEhlaWdodCA2MjUvWEhlaWdodCAtNTMxL1R5 cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag0yMDc4IDAgb2JqDTw8L1N1 YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDIwNzcgMCBSL0Jhc2VGb250L0tOREVJ SytDYWxpYnJpL1dbM1syMjZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag0yMDc5IDAgb2JqDTw8L0xlbmd0aCAzNzI4L0ZpbHRlci9GbGF0 ZURlY29kZS9MZW5ndGgxIDU5MjQ+PnN0cmVhbQ0KSInkVmtwE9cVPufeXUl+27xsyw6sstjU+BEb CGBbsWUsmYDxA9uABYFoLcuywQ/VdgxOSEphaIh4xE0ZTKEFQoHUoQ0rAqmZpuCQ50yhYZLG0wkk TQglDC2BSRkoBWl7JGtS4Ac/2j+d6Z65u98599x7nvdKgAAQBWuAQ25V7SNT7L+6WgUgmkm60NnT LU1+5/Z64rfSEJo87ralBZc4QOR24ne7W3ubVkrbj5DumzQON7uUxj++ankBIH4m8dObSRC3h/+Q eA/xE5vbuletrJ5TRDztx+60djiVJHMS2UKax7VtyioPS9bNABjdR/pSu9Lm2rQ08kPSvU7D5ul0 eRYO7C+meRWAdwEDN4DgFokBPRRaxuv0TobkqZNDpE50cs6MEXrBiZBsyJiZlFkZf91c4TdXxt8w V8T7zVBs9puDIy93aoIpIc2UYHILcEfiQ3csItwGSRgit8iTj9lZ/hplyXQMOB6xxEbowRijS46O uWoKbptZeSH+IhRXXMnLxTE6+eH0R6dNnzplHDs73L99eHh7/zArGfkOQ/CZ8n9G9v8xCj6R8Fyo ssHnCYAw5hBH3AgWCK8IYx3hp2kWhAjiBuGFMEYYjyVhzCAWnwxjTvK2MBYIbwxjHeGBul6Pq0lx uqQBqa7ZJVV0tHd0k0gq7ej0dHQq3S0d7ZKn1ZkjWZVu5UFKJa2tUk2Lu7m7S6pxdbk6e1yN5ZVW W1V5Zm1vW0NHa0Xdg1mog17wgAuaQAEnfSUYoFEHzSFcAR3QTqM7rCVBKXGdhINvheQtIQ2JJK20 PoeQNSRX/uOdSminVvrWkMRNq7uhK8S56Osi3R56N0I5VJIlG1QRyoRa2rUNGmiHVrJUF9J2w1PE KbTiwbr/zWywa4TT2AciGMQd4lRi00a+fA80sVHRXBSRoV7HRD3c99RVlEpguSZdC4ibAmU41RCF J9d8NysuhTxxHkygkcq3QgqA9mV4XAjYtSviCpADy7Vzk+JI+Uh4jDwKpMEyyIC5cBKuwXGcDNUw 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 3ompwVEgZpw4tLfcmIy73UnfxfxBqDoWH97L5dCocVEd7TJ8apc76Z94DD3Bab/alaSJYDiSnPCN dqX8Pn9QHeqKZqifxZN1M0ume3dxugzVsfi/R0yzOB+yjs/YP/OYGWc43c9nnOEzzvAZ+3395ozB Mb6BA5GkQoEofmRNOScUF2EvYs7KaMBh299hbkxbZflR5yWR2DkqxpmjBOfXJwBO1fvr/ZxCwnBq OT/a5qnyo22VzkvsXJ6ywbxSDZB2UPtHOcALlQfHujgQSSY7L0ym7K5GLarR3wIMALWpj4gNCmVu ZHN0cmVhbQ1lbmRvYmoNMjA4MCAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tOREVPSytTeW1i b2xNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDIwNzkgMCBSL0ZvbnRXZWlnaHQgNDAw L0ZsYWdzIDQvRGVzY2VudCAtMjE5L0ZvbnRCQm94WzAgLTIyMCAxMTEzIDEwMDVdL0FzY2VudCAx MDA1L0ZvbnRGYW1pbHkoU3ltYm9sKS9DYXBIZWlnaHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0 YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMjA4MSAwIG9iag08PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9G b250RGVzY3JpcHRvciAyMDgwIDAgUi9CYXNlRm9udC9LTkRFT0srU3ltYm9sTVQvV1sxMjBbNDYw XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRl cmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRv YmoNMjA4MiAwIG9iag08PC9MZW5ndGggMjE1L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo 3lRQMW7DMAzc9QqOLTpIdjMaBop08ZC2qN3uikS7AmJKoOXBv48kOAk6kASPPNyR8ti9d+QiyC/2 pscIoyPLuPiVDcIZJ0dQ1WCdiXtXspl1AJnI/bZEnDsaPTSNkN9puETe4GkYqhf1DPKTLbKjKSGH +uc3If0awgVnpAgK2hYsjkIeTzp86BlBFuIDHLaAUJe+2rW9xSVog6xpQmiUUq/trSDZ//Mb6zya P83isf2mWpG2dzzz8k13H2ZlThbL4cVItuAI778JPmS1HOIqwADUTWpvCg0KZW5kc3RyZWFtDWVu ZG9iag0yMDgzIDAgb2JqDTw8L0xlbmd0aCAyMTcvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0N CmjeVFA9T8QwDN3zKzyCGJKLToKh6nIsHfgQLey5xC2RqBO56dB/TxK1hxhsy89+es+Wl+65I59A vnOwPSYYPTnGJaxsEa44eYKTBudt2rua7WwiyEzutyXh3NEYoGmE/MjDJfEGd8NwflD3IN/YIXua MnLWn18Z6dcYf3BGSqCgbcHhKOTlxcRXMyPISvwDhy0i6Nqfdu3gcInGIhuaEBqlHp/aoyC5//OD dR3tt2FxbGuldSvy9o4XXrnp5sOuzNliPbwaKRY84e03McSiVkL8CjAA5XtqjgoNCmVuZHN0cmVh bQ1lbmRvYmoNMSAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgMjA0NCAw IFIvU3RydWN0UGFyZW50cyAxL0NvbnRlbnRzIDIgMCBSL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1 OTUuMjIgODQyXS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIwNjcgMCBSPj4vQ29sb3JTcGFj ZTw8L0NTMCAyMDUzIDAgUj4+L0ZvbnQ8PC9UVDAgODkgMCBSL1RUMSAxMDMgMCBSL1RUMiAxMDkg MCBSL0MyXzAgMTEwIDAgUi9DMl8xIDkzIDAgUi9DMl8yIDk0IDAgUi9DMl8zIDkxIDAgUi9DMl80 IDkyIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MwIDIwNTcg MCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMiAwIG9iag1bMyAwIFIgNCAwIFIgNSAwIFIgNiAw IFIgNyAwIFIgOCAwIFIgOSAwIFIgMTAgMCBSXQ1lbmRvYmoNMyAwIG9iag08PC9MZW5ndGggMTE2 OC9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSImsV1tv2zYUfvevOI9SAdG8iRcgyEMuKDog 2NoK2EMwDFmqZBliZ7UzpPv3+w4pyZYtx8u6BKZo8eN37of0WTOb/0QnJ/Or8w8XJOn09OzinGbz 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 b2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1 Co4NMkhxMxoGinTx0LSone6KRLsCakqg5cG/jyQ4CTqQBI883JHy1L635CLIL/amwwiDI8s4+4UN whVHR3CowDoTt65kM+kAMpG7dY44tTR4qGshv9NwjrzCS99Xe7UD+ckW2dGYkGN1+UlIt4TwhxNS BAVNAxYHIU8fOpz1hCAL8Qn2a0CoSn/YtL3FOWiDrGlEqJVSr829INn/8zvrOphfzeK5/aYakbY3 PPPyTQ8fZmFOFsvhxUi24Agfvwk+ZLUc4ibAANXqanEKDQplbmRzdHJlYW0NZW5kb2JqDTEzIDAg b2JqDTw8L0xlbmd0aCAyMTQvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1 Co4JMkhxMxpeksVDm6J2uisS7QqoKYGWB/++kuAk6EASPPJwR8pze2nJRZCf7E2HEQZHlnH2CxuE O46O4FiBdSZuXclm0gFkInfrHHFqafBQ10J+peEceYVd358Oag/yyhbZ0ZiQU3X7Tki3hPCLE1IE BU0DFgchz+86fOgJQRbiC+zXgFCV/rhpe4tz0AZZ04hQK6XemkdBsv/nD9Z9MD+axWu7Uo1I2xue efmmpw+zMCeL5fBiJFtwhM/fBB+yWg7xJ8AA1LBqZgoNCmVuZHN0cmVhbQ1lbmRvYmoNMTQgMCBv YmoNPDwvTGVuZ3RoIDIxOS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UULFOxDAM3fMV HkEMaatDCKnqUoTUgTtEC3sucUsk6kRuOvTvSaL2EINt+dlP79my7V46sgHkOzvdY4DRkmFc3Moa 4YqTJSgrMFaHvctZz8qDjOR+WwLOHY0O6lrIjzhcAm9wNwxPD8U9yAsbZEtTRE7V51dE+tX7H5yR AhTQNGBwFLJ9U/6sZgSZiX/gsHmEKvflru0MLl5pZEUTQl2Uz6fmKEjm//xgXUf9rVgc29Vj+9qI uL3jiZduuvnQK3O0mA/PRpIFS3j7jXc+qaUQvwIMAPV8arsKDQplbmRzdHJlYW0NZW5kb2JqDTE1 IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJdL1BhcmVudCAyMDQ0IDAgUi9TdHJ1Y3RQ YXJlbnRzIDIvQ29udGVudHMgMTYgMCBSL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQy XS9SZXNvdXJjZXM8PC9YT2JqZWN0PDwvSW0wIDIwNjcgMCBSPj4vQ29sb3JTcGFjZTw8L0NTMCAy MDUzIDAgUj4+L0ZvbnQ8PC9UVDAgMTE2IDAgUi9UVDEgMTE0IDAgUi9DMl8wIDExMyAwIFIvQzJf MSAxMTIgMCBSL0MyXzIgMTExIDAgUi9DMl8zIDExNSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9J bWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTE2 IDAgb2JqDVsxNyAwIFIgMTggMCBSIDE5IDAgUiAyMCAwIFIgMjEgMCBSIDIyIDAgUiAyMyAwIFIg MjQgMCBSXQ1lbmRvYmoNMTcgMCBvYmoNPDwvTGVuZ3RoIDExMzIvRmlsdGVyL0ZsYXRlRGVjb2Rl Pj5zdHJlYW0NCkiJrFdLb+M2EL77V8xRWkA03w8gyCHJYrEFArSNih6CRRE4iuMillPb26D76ztD irJly+umrQNTtDjzzXuGuaon0x/h4mJ6e/35BjhcXl7dXMNk+umOw3wzmV7L3zgIqJ8myuIxB3wE Dk5pZjlXUC8nFxw3l/Xvk4+3xLlDEz0aooiEwpkMNkA9A8GZiYhxQ5hCMN9h3kfQCFzZJOBL/cOR BJklcELkUAmmvYX65kCpj2jl3fPDa9Nzqsz5B/J6LcEEw7iEymvUwsK6mfz6AdruWLDgI0VHgL+I AM+n1+io2QY4C0rh6qWOqwPYzFpk5kz04Fp4PCJWdASooJnS/Zl2zOp0lswcKqyzwuRIkdGdEUz2 +IEzZ/cgfsK/q0GAhbYjQRmGwtjAkMxZw5QcCzF583P7smiboYpCu51XhTHMYDi58ClvHKFx7hS6 QaEA3FsXpYiAH0yK2RJxlxxuVqj3YajNIGBSM8QVBsMNQjKvczzI3FOGVZh8Gnkd40epW2ePDf11 3luakmEcM/tqB+f+uxG4SPs+I/yYETJByk7+KCDRy1y3pEP9uDvkmLwe5t3zE1W2gDekvgXaS0Ml KaFeH1Q6ChqT19f7SCMJOwNytfEAJBCtYMqaVA7TuuZ9l8FP6gmoQIjSA4jAHCYA9hnXiS4AoCRj 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 10J+peEceYVd358Oag/yyhbZ0ZiQU3X7Tki3hPCLE1IEBU0DFgchz+86fOgJQRbiC+zXgFCV/rhp e4tz0AZZ04hQK6XemkdBsv/nD9Z9MD+axWu7Uo1I2xueefmmpw+zMCeL5fBiJFtwhM/fBB+yWg7x J8AA1LBqZgoNCmVuZHN0cmVhbQ1lbmRvYmoNMjggMCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIy IDg0Ml0vUGFyZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgMy9Db250ZW50cyAyOSAwIFIvUm90 YXRlIDAvTWVkaWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlczw8L1hPYmplY3Q8PC9JbTAg MjA2OCAwIFIvSW0xIDIwNjcgMCBSL0ltMiAyMDY5IDAgUi9JbTMgMjA3MCAwIFIvSW00IDIwNzEg MCBSPj4vQ29sb3JTcGFjZTw8L0NTMCAyMDUzIDAgUi9DUzEgMjA1NCAwIFIvQ1MyIDIwNTUgMCBS Pj4vRm9udDw8L1RUMCAxMjQgMCBSL1RUMSAxMjUgMCBSL0MyXzAgMTIzIDAgUi9DMl8xIDExNyAw IFIvQzJfMiAxMjEgMCBSL0MyXzMgMTIyIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQy9J bWFnZUldL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2JqDTI5 IDAgb2JqDVszMCAwIFIgMzEgMCBSIDMyIDAgUiAzMyAwIFIgMzQgMCBSIDM1IDAgUiAzNiAwIFIg MzcgMCBSXQ1lbmRvYmoNMzAgMCBvYmoNPDwvTGVuZ3RoIDU0NS9GaWx0ZXIvRmxhdGVEZWNvZGU+ PnN0cmVhbQ0KSImMVE2L20AMvftX6NguZCJppPmAJZCxk6WFQJcO9FBKD9vuQqEL3Rz696tx7KTZ NhCMQfY86T19Tand8gPc3i53/bsBEFarMvTQLe8+Ijztu2XPXxEI6mNH6NQA9nUwkkcXED3Un90t mrGqP7rNrjmfAtIcEGFBTlKAOlxG84yuN5dB/hqQXAPSa0DhGlC8BpQugja1+2UVSsKgWR0yLJKQ s2q9fO8+3cDzdEwupxExAeyrAex82Vu/HvZgLfG5dclxVID9w7M5RiQX0xyaxA6b32N3b085GwA5 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 eCicMW5YUOKcIrSv0NjPNGcGNDtfi6iJsGKoyOlCRXaqnknV09lGz/FCT8f9KI3cj5wLPUPS1fYM cX5nLtPIXAI32jRdnUhtV7WZCk1XSApOXcHfKrIPvy/ILpI6eSB1DtpEI8RBkQcOCpdNFyyb6QxZ 2sysNoputhRdt8Q+kewdE2mkR86kh9vZRLmwiXy/YXe6WogLei5Tt+klWJZgB2VRhna1jWrbvagv s7eUjHyhZBy0i2bI4WEc8KBNlLWJvK99EfJ07ovgg2Kfif2gIMJmYPHyzOL5sGNlHrESSeo8k9QH FVERrSI8RNdjL3pk+MixXwaOfR+rg854TxSCMlAIfOLSUQYuHT6RHsWQHn7lyloCV1a/hgZZ5rlF /EUePH4r9IyRniqJRSXRVzZDSWwGXylYJVGwfKNIlEyR8I3tXTLb+6AoitCOlTx2K3qzPZVzv8T9 3wXB/JKOesL1x1a3eHyC3lxZr6wuzvHRM2K4P72qftTLZtBrKapnVE9dvhrXjOOjG5luG0dmHHR8 ONqvs47apatp8qpTNekU4I55fIqODYpQqb2nLZxkxyVvVpLymjC1KVfvK8TzI3GrPBZqvAugiPsz tj+xf30Wbz9ut+PFzDucd3F/Eb+8tl+f6u9v7/3x2/8e/ifAAOidlWQKDQplbmRzdHJlYW0NZW5k b2JqDTQwIDAgb2JqDTw8L0xlbmd0aCAyMTcvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmje VFA9T8UwDNzzKzyCGJIXgWCoujyWDnyIFva8xC2RqBO56dB/TxK1DzHYls8+3dny3D135BPIdw62 xwSjJ8e4hJUtwgUnT3DS4LxNe1eznU0Emcn9tiScOxoDNI2QH3m4JN7gZhge7tQtyDd2yJ6mjNzr z6+M9GuMPzgjJVDQtuBwFPL8YuKrmRFkJf6BwxYRdO1Pu3ZwuERjkQ1NCI1Sj0/tUZDc//nBuoz2 27A4trXSuhV5e8cLr9x09WFX5myxHl6NFAue8PqbGGJRKyF+BRgA5xhqkAoNCmVuZHN0cmVhbQ1l bmRvYmoNNDEgMCBvYmoNPDwvTGVuZ3RoIDc1MDUvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEg MjAyMjA+PnN0cmVhbQ0KaN7sm3lc1NX6x5/vMjPsiwGKw/LFEdJAcMU1HdkEEZVlasBSRkAhRbgD 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 1Q7nPK1GlHTJzjnz8LSqBRqa0WwLqupRv7DeUV9RpzkWlKeggRq9g7KahgX1zqqKumSaQtnQFJpO WZTYLd4FelQbYBHx+VeegygNczgf8/s/6dWzwv8XV7j4R87i/zCnbdhPtkIyhaBuKVFAlDQR+5D+ b8rEP9d/KORA06zgcccp0kff0p785rJXBfemHfE7Gdxe5/u1aQOyYk/T97z/EGAASnZT4AoNCmVu ZHN0cmVhbQ1lbmRvYmoNNDIgMCBvYmoNPDwvU3RlbVYgMTI0L0ZvbnROYW1lL0xITExQRitDYWxp YnJpLUJvbGQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA0MSAwIFIvRm9udFdlaWdodCA3 MDAvRmxhZ3MgNC9EZXNjZW50IC0yNTAvRm9udEJCb3hbLTQ5MyAtMTk0IDEyMzkgOTUyXS9Bc2Nl bnQgNzUwL0ZvbnRGYW1pbHkoQ2FsaWJyaSkvQ2FwSGVpZ2h0IDYyNS9YSGVpZ2h0IC01MzEvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTQzIDAgb2JqDTw8L1N1YnR5 cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDQyIDAgUi9CYXNlRm9udC9MSExMUEYrQ2Fs aWJyaS1Cb2xkL1dbM1syMjZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag00NCAwIG9iag08PC9MZW5ndGggMjE3L0ZpbHRlci9GbGF0ZURl Y29kZT4+c3RyZWFtDQpo3lRQu27DMAzc9RUcW3SQ4nbIYBgo0sVDH6id7IpEOwJqSqDlwX9fSXAS ZCAJHnm4I+Wh/WjJRZA/7E2HEQZHlnH2CxuEM46OYFeBdSZuXclm0gFkInfrHHFqafBQ10L+puEc eYWnvt+/qGeQ32yRHY0JeauOp4R0Swh/OCFFUNA0YHEQ8vCpw5eeEGQh3sF+DQhV6Xebtrc4B22Q NY0ItVLqtbkWJPs4v7LOg7loFvftd9WItL3hmZdvuvkwC3OyWA4vRrIFR3j7TfAhq+UQ/wIMAN+Y an0KDQplbmRzdHJlYW0NZW5kb2JqDTQ1IDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJd L0Fubm90cyA0NiAwIFIvUGFyZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgNC9Db250ZW50cyA0 NyAwIFIvUm90YXRlIDAvTWVkaWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlczw8L1hPYmpl Y3Q8PC9JbTAgMjA2NyAwIFI+Pi9Db2xvclNwYWNlPDwvQ1MwIDIwNTMgMCBSPj4vRm9udDw8L1RU MCAxMjYgMCBSL1RUMSAxMjcgMCBSL1RUMiAxMjggMCBSL0MyXzAgMTI5IDAgUi9DMl8xIDEzMCAw IFIvQzJfMiAxMzcgMCBSL0MyXzMgMTMxIDAgUi9DMl80IDEzOCAwIFIvQzJfNSAxMzkgMCBSL0My XzYgMTQwIDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MwIDIw NTcgMCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNNDYgMCBvYmoNWzEzMiAwIFJdDWVuZG9iag00 NyAwIG9iag1bNDggMCBSIDQ5IDAgUiA1MCAwIFIgNTEgMCBSIDUyIDAgUiA1MyAwIFIgNTQgMCBS IDU1IDAgUl0NZW5kb2JqDTQ4IDAgb2JqDTw8L0xlbmd0aCA5NjIvRmlsdGVyL0ZsYXRlRGVjb2Rl Pj5zdHJlYW0NCkiJrFZbixs3FH6fX3EeN4WRz5GObmAMnltJYEuKB/oQQimbbdLS3bbZh/79Hmku 9nhnwRuHwRp5JH3nrvNVfbF5D9vt5rZ+2wDCblc1NRSbHw8In5+KTa1/RSDofy+Mk2UEeUUEb1g5 RAP9Q7FFmez6P4v2Np08otGMJig0oKDS0UXo74BQ2YyYJwmTSIUR80MGzcClGwR87N89k6AnCZgQ EUpSHBz0zZlSrVh5+PLbP/fzSTOd/FfOBtZgo1WooQwsWjj4el/88gM8jsukYsg7xg3yL22Q9U0t jrp7AlTRGBmD5jx6gKe7RzmMimZwpiBL6ag4AkxkZXheY68cD2tZ55/lOUEXp8mo7ThmdKND0pWc CgE0ycwGFUeQfLY+JG0syWgD5xHgUP8kcfAW/oMAtxKXd1BY5gzlbcIqE1hJNiaoScqw9FB8KQ5F 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 +JUNwhknR1DVYJ2Je1eymXUAmcj9tkScOxo9NI2Q32m4RN7gaRiqF/UM8pMtsqMpIYf65zch/RrC BWekCAraFiyOQh5POnzoGUEW4gMctoBQl77atb3FJWiDrGlCaJRSr+2tINn/8xvrPJo/zeKx/aZa kbZ3PPPyTXcfZmVOFsvhxUi24Ajvvwk+ZLUc4irAANRNam8KDQplbmRzdHJlYW0NZW5kb2JqDTU3 IDAgb2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMw DNz1Co4NMkhxMxoGinTx0LSone6KRLsCakqg5cG/jyQ4CTqQBI883JHy1L635CLIL/amwwiDI8s4 +4UNwhVHR3CowDoTt65kM+kAMpG7dY44tTR4qGshv9NwjrzCS99Xe7UD+ckW2dGYkGN1+UlIt4Tw hxNSBAVNAxYHIU8fOpz1hCAL8Qn2a0CoSn/YtL3FOWiDrGlEqJVSr829INn/8zvrOphfzeK5/aYa kbY3PPPyTQ8fZmFOFsvhxUi24Agfvwk+ZLUc4ibAANXqanEKDQplbmRzdHJlYW0NZW5kb2JqDTU4 IDAgb2JqDTw8L0xlbmd0aCAyMjk0L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3nyYSY8c uRFG7/oVdbThQ3NfAEFA5QbMwQusse+5MGUBVqvR6jnMvzfzfaUZCAbm0F14STIiGAwGg3waf5p+ ev78dnv6x+vX/WN7u52fn4/X9u3rL697u23t0+fnm3W34/P+9iD+71/Wl9tTH/zx129v7ctPz+fX 2/v3757+2Ru/vb3+evvTzz/nv5g/357+/nq018/Pn/qX4P717/7l4y8vL/9tX9rz283cPny4He18 9zT+dX352/ql3Z4Y+PvHn399aTcH24fur0f79rLu7XV9/tRu740x/sPtfbSmfLi15+PH9nfWGI3b zv0/6+u77/2NceYDVEQRskY0iXbIV8ipZ1BPt4kK5CUzSqZPIi86RHcoZCgFKEpmlswofRl9dg+d fNd0kduvnstiRuhIkL2LNtFyUfDXHMJsjMiLsCUEkX3QKkJKiCL3oEOEJ0LeoDBAW4JKEjXRDGF1 mGsQaVzVuENtd7UdWZShJu2DtJ+aw6g5nFEURdI3oi8a2TJhS7TqOUfRLsJn0duLFmMhzf3hwRjR tygmYgwi7IxJbV5tGe1LkPaCPxetdCxRJO1lF0n7ekKZNYobflkKfony0iIvJYPnlwnPp3LZGR/R k2qEEhpyLUR+IgbzaqFsRdoVGcvyxjhbNK6pbaCtODTYBQ2F2I3O4M8SDshiS4kVclW0ibC64KXo 5KWSJMVLSj2hxNzLrnGabTmYg7szh+qx0xvsrAEp3iKlJuz0HjtrZpzX/qv5FKGhFknROlT5xcsv dXNQYVfVhi1+wJZ6qm1U2yl9o/SdhwhPrEYyJyuSLRO2rFa2zNiyOslcnEg9F/X0V5zFYIKoiB5t u4joWYvaotoqMkOSzE09i3rKn0H+XE/sDKPs1ByC5rBZ5tc3IJTxdRcKbVgWC5btirOkODsMPksT PjvImDHNRuREWHY4pKSlS+mZ+ZGB/z8jH+5QP+w6yIkxO2lTXGXF1aEYyIqBI2cokEEOrWzWyraN GC+FGD8tNpcZm0/5vcrvp88ipJxR5B5URUT8mfBm9VYkKf6SYm3BzoEToFMRFaji2yElaEPmUKpo F43QzvyGehc10QwdaB/uFtIeHtjDnaRhkIZTNELOEI/DtEBO2pcqkvYF7U57fzQaF9A3WvS5gi1j xJZAno0TedYGxfhEjNugOJ6JYxsiMmeXRIdogpJ6evXUrp2jZJIv40y+tDpVok6VTrsIq8MhDXdp aKzfPFzrZ6Ny20xus5GTMS6cjJ1OERr63oIs2nUeRJ0HNirqFi8p5PyonG+j9uLCXrRRuWYh19i4 Mb+lML+4Y9lSsSwpIhci0iYn7QvaEzGYjFPPtEGenhmrk5XVJVx2JmeNKInwRMlqC2qryHQJmZWT MTlORlvrtbbJJ9a2Hg66O1EWMW49rvVL4c76KZ8k5RO7pSuyUqRa6nSKsHPLEaJ26lRE+GVbsTNm IwoiVnrb0B4L2rcmDYM0tEOE9t1KgyJyt+o503N3+KUvEuSZbTLMdg/Ymaid7B5FDlL+SuSvTkRP yoqeQ+Oyxh1Ubim7UaS2hxSiJyln2aOoZ1TPop5RPTndU+Z0t8dmoUIsHbu0V2k/NW5kXNPcs+be yGepkM96YsATRavS5Plyef4PMrJtDW1lQNtJZk2VzOp6WXXR3V12OatYHYhVZ7MoiGTlgJWuD4Sm CCmOR6O2gKdHGyByfhrJ+c6trPOYJ4gsmEayoHOKiJGIcF4aRmnwlrmOc4G0iyZ2kbuKgYsCUvyK 1VPGak9+ThP52QUqkn68ITNoZWdW1qnCS6rwXMKWbGRLZr9ly35zZaXNUdm7lTybA3nWbURSjkSS 2zj9cuT0cxsnTo6cOJ2iCFu2KiJa3I6XcpKXds7vnDi/3UG1khPVSndgg+YZcuq5qCf1SSe0H/7y We5TgqqH0pX3XHOi5UGniDk0Mk8uZB53cnLkysnRrzPYUrHFG2qlXKmVvJG+O/q8OUUjZNlheWCH eZvx5xAqVJA5RCtKogStaB8y2nWGZp2h3jXaxoE2z42ubyn0eU6APHEC+NDwyzwU0SnC6nDiwXkM oizKokM0iTSO/dAV4MF58qIqqiL1nNSTDJJ1/vjIfSsv3Ld84n5XDPe7TrsIL2XqqmKoq3yh3iuW eq/XvwFi3X1Zrx1eXHaiJkJD2dTG7vdV+rz0Ver84qnzfaXO7zcIrN5ZlZK0Ki1jWQlY1qgoS6Gi 9I37ayl3PN+oWUuhZvUnWbDUIqJCL5UKvVMSXdrDdVG+aHKQxc46X3YGrXvRuncKoiA6RBNETJSB mAhWtgyjxp0aN2qctKvK6iQprHRw1MFloA7uFEVRpJ6zelKhlOGqUH7PyCH/mJCD4/JaRi6vnbyI yXkSSJlIID1f0TY5tcUoiqJDhGqlvaK0F3zTOArKEJzGUZCEoAWaWaAQKWfLQjnbaReNEBfNsnDR 7NkSDQubISRCvCyEeEj+clHV80ZIXMer4ToeEiVdNZR0IZPIqyGRBwV1VVCHjIZqpSGzCJ0ebacI vxQST7UknrBxya6BS3bYXIMWFn2Xvih9O+myk9oSVl/GX5SRkgJSdq4ANXEFCHutUGK2+8qM+tkO nSKFjgqLqsIiHKTLmkmX4aC8rJnyMjSOkVo4RkIjyddCku+URMhsPBfVvm8gnkxq4ckknCSXWkgu PXuhvVJChpOStVZK1mi4nNQ7lxO9sHWafigeXPgeqnpwu57U9DRm9Jqle5xhRxhty/5x0ceoj3ov w6mdqj6u+pj03Ba+P9Px6mb1Xmb1sibRlK/GcVXoP1HvZUWvYMgMXs9RpurjoY96TzJ66SLX9h/1 1EUzUDb1n6pXMMnkDaf/6JFJTznh1PBTw/V2kNki/efQc82oBxomndmE0Wa9lOzX0piiq56reKlx Zes/uvvq5hbI2P1HFyMSty1cmmzZVPnr7rQdfNxU0sW7Sk0uaf2nqqblvK/0dJWevV5dlB6vnv2n KksWbVdesxKHZN+1yyMiFALXK+z1Qvzbq+7+y+tre37jGZln3etB9/Nz++2l+eXry/V2e/29+58A AwAjTQ7oCg0KZW5kc3RyZWFtDWVuZG9iag01OSAwIG9iag08PC9MZW5ndGggMjQ4L0ZpbHRlci9G bGF0ZURlY29kZT4+c3RyZWFtDQpo3lRQu07EMBDs/RVbgijsM0HcSZYLAkUKHiKB3o9NsEQcy0mK /D22Lxyi8Eoz65mdXVo3j413C9C3OJkWF+idtxHnaY0GQePgPBw4WGeWHZVqRhWAJnG7zQuOje8n EILQ99Scl7jBVddVN+wa6Gu0GJ0fElPxj8/EtGsI3ziiX4CBlGCxJ7R+VuFFjQi0CP/IbgsIvODD PnuyOAdlMCo/IAjG2K0EUVmtJaC3//ukOqt0b75UJL+/GeNMEsHZsc/aJ1aQ1seE7k78lNDZUNw/ 8FqS5Ls75Al5+0tis8aYliknKpFzWOfxcsUwhZwrP/IjwADhJHSGCg0KZW5kc3RyZWFtDWVuZG9i ag02MCAwIG9iag08PC9MZW5ndGggMjE5L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtDQpo3lRQ sU7EMAzd8xUeQQxpq0MCqepShNSBO0QLey5xSyTqRG469O9JovYQg2352U/v2bLtXjqyAeQ7O91j gNGSYVzcyhrhipMlKCswVoe9y1nPyoOM5H5bAs4djQ7qWsiPOFwCb3A3DE8PxT3ICxtkS1NETtXn V0T61fsfnJECFNA0YHAUsn1T/qxmBJmJf+CweYQq9+Wu7QwuXmlkRRNCXZTPp+YoSOb//GBdR/2t WBzb1WP72oi4veOJl266+dArc7SYD89GkgVLePuNdz6ppRC/AgwA9xlqvQoNCmVuZHN0cmVhbQ1l bmRvYmoNNjEgMCBvYmoNPDwvTGVuZ3RoIDIxNy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0K aN5UUDFuwzAM3PUKjg0ySHYzGgaKdPHQtKjd7IpEuwJqSqDlwb+P5DoJMpAEjzzckfLYvDfkIsgv 9qbFCL0jyzj5mQ3CBQdHUJRgnYlbt2Yz6gAykdtlijg21HuoKiG/03CKvMBL1xWHvdqB/GSL7GhI 0KH8OSeknUP4wxEpgoK6Bou9kMcPHU56RJD/zAfaLQGhXPtiU/cWp6ANsqYBoVJKvda3gmSf5zfW pTe/msVj+03VIm1veOblq+5GzMycPK6nr0ayBUd4/07wIavlEFcBBgB4jWrXCg0KZW5kc3RyZWFt DWVuZG9iag02MiAwIG9iag08PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgMjA0NCAw IFIvU3RydWN0UGFyZW50cyA1L0NvbnRlbnRzIDYzIDAgUi9Sb3RhdGUgMC9NZWRpYUJveFswIDAg NTk1LjIyIDg0Ml0vUmVzb3VyY2VzPDwvWE9iamVjdDw8L0ltMCAyMDY3IDAgUj4+L0NvbG9yU3Bh Y2U8PC9DUzAgMjA1MyAwIFI+Pi9Gb250PDwvVFQwIDE0NiAwIFIvVFQxIDE0NyAwIFIvVFQyIDE0 OCAwIFIvVFQzIDE0OSAwIFIvQzJfMCAxNTAgMCBSL0MyXzEgMTQzIDAgUi9DMl8yIDE0NCAwIFIv QzJfMyAxNDEgMCBSL0MyXzQgMTQyIDAgUi9DMl81IDE0NSAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4 dC9JbWFnZUNdL0V4dEdTdGF0ZTw8L0dTMCAyMDU3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2Jq DTYzIDAgb2JqDVs2NCAwIFIgNjUgMCBSIDY2IDAgUiA2NyAwIFIgNjggMCBSIDY5IDAgUiA3MCAw IFIgNzEgMCBSXQ1lbmRvYmoNNjQgMCBvYmoNPDwvTGVuZ3RoIDgwNS9GaWx0ZXIvRmxhdGVEZWNv ZGU+PnN0cmVhbQ0KSImkVltLG0EUft9fcR6jsJNz5j4QAm4iYkGouNAHKaWk1rbUtOqDf79nZvaa bEzFhOzFOfN95zu3saqL+UdYLOZXq8s1ICyX1XoFxfziBuH+uZiv5BcEgvp7oSwvI/AtIDilhUVU UD8UC+SHZf2rOL+KO3s06tAYhTIKChlsgHoDhMIkxPQQMYmEbzBvE2gCLm0m+Fx/2GOQLQNGRISS hPYW6vWOU+es8ubH17933U7V7nzkvV5LMMEIlFB6zV5YeLorPp3CtlkmEXyyaAz4LRrw+nzFgdo8 A4qgFF+91OnqAJ43W96MgjpwTZ6X4lYOBKighdLdmnbC6ryWZY4d1q3DMZDUojtDQnb4AYWzQ4jL 7e+f27sxEOnQQl3z97Egw7pcCMH7nGF2JL6yBs0pCZxntA6cNYIU/z1o2Dww9gPC+g8jJKpqVEdk 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 vlC9267iBsWX2qFKFpb8m5xVqkSX70L7uqXGbOc/wWSYa27wrwADAEcn9UoNCmVuZHN0cmVhbQ1l bmRvYmoNNzIgMCBvYmoNPDwvU3RlbVYgOTIvRm9udE5hbWUvVmVyZGFuYS9Gb250U3RyZXRjaC9O b3JtYWwvRm9udFdlaWdodCA0MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjA5L0ZvbnRCQm94Wy00OTUg LTMwMyAxNDQ3IDEwMDBdL0FzY2VudCAxMDA1L0ZvbnRGYW1pbHkoVmVyZGFuYSkvQ2FwSGVpZ2h0 IDczNC9YSGVpZ2h0IDU0Ni9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRv YmoNNzMgMCBvYmoNPDwvTGVuZ3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U UDFuwzAM3PUKji06SHYzGgaKdPGQtqjd7opEuwJiSqDlwb+PJDgJOpAEjzzckfLYvXfkIsgv9qbH CKMjy7j4lQ3CGSdHUNVgnYl7V7KZdQCZyP22RJw7Gj00jZDfabhE3uBpGKoX9Qzyky2yoykhh/rn NyH9GsIFZ6QICtoWLI5CHk86fOgZQRbiAxy2gFCXvtq1vcUlaIOsaUJolFKv7a0g2f/zG+s8mj/N 4rH9plqRtnc88/JNdx9mZU4Wy+HFSLbgCO+/CT5ktRziKsAA1E1qbwoNCmVuZHN0cmVhbQ1lbmRv YmoNNzQgMCBvYmoNPDwvTGVuZ3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U UDFuwzAM3PUKjg0ySHEzGgaKdPHQtKid7opEuwJqSqDlwb+PJDgJOpAEjzzckfLUvrfkIsgv9qbD CIMjyzj7hQ3CFUdHcKjAOhO3rmQz6QAykbt1jji1NHioayG/03COvMJL31d7tQP5yRbZ0ZiQY3X5 SUi3hPCHE1IEBU0DFgchTx86nPWEIAvxCfZrQKhKf9i0vcU5aIOsaUSolVKvzb0g2f/zO+s6mF/N 4rn9phqRtjc88/JNDx9mYU4Wy+HFSLbgCB+/CT5ktRziJsAA1epqcQoNCmVuZHN0cmVhbQ1lbmRv YmoNNzUgMCBvYmoNPDwvTGVuZ3RoIDI0OS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5U 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 Pj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4NOkh2080wUKSLh6ZB7HZXJNoVUFMCLQ/+fSTXSdCBJHjk 4Y6Uh+a9IRdBntibFiP0jizj5Gc2CBccHEFRgnUmbt2azagDyERulyni2FDvoaqEPKfhFHmBp64r Xp/VDuQnW2RHQ4L25dd3Qto5hF8ckSIoqGuw2At5+NDhqEcE+cd8oN0SEMq1LzZ1b3EK2iBrGhAq pdRLfStI9v/8xrr05kezeGy/qVqk7Q3PvHzV3YiZmZPH9fTVSLbgCO/fCT5ktRziKsAAeitq2QoN CmVuZHN0cmVhbQ1lbmRvYmoNNzggMCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIyIDg0Ml0vUGFy ZW50IDIwNDQgMCBSL1N0cnVjdFBhcmVudHMgNy9Db250ZW50cyA4MCAwIFIvUm90YXRlIDAvTWVk aWFCb3hbMCAwIDU5NS4yMiA4NDJdL1Jlc291cmNlcyA3OSAwIFIvVHlwZS9QYWdlPj4NZW5kb2Jq DTc5IDAgb2JqDTw8L1hPYmplY3Q8PC9JbTEgODIgMCBSPj4vQ29sb3JTcGFjZTw8L0NzNiAyMDUz IDAgUj4+L0ZvbnQ8PC9UVDIgMTUxIDAgUi9UVDQgMTUyIDAgUi9UVDYgMTUzIDAgUi9UVDggMTU0 IDAgUj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MxIDIwNTcgMCBS Pj4+Pg1lbmRvYmoNODAgMCBvYmoNPDwvTGVuZ3RoIDUzNzE0L0ZpbHRlci9GbGF0ZURlY29kZT4+ c3RyZWFtDQpIibRX23LbyBF9Z1X+YR62UmBiQsDg7traiiXZG6diW4m4tQ92HiBqKCICARoAJStf n9PdgwshZbd2q6IHzWA409PTl9Onz67yplPff3/24eL9pfLUDz+cX178YXF20cZq0yo3DjKtse7q JIx81W6qxdmP1766axfad8NUYdkNYxVFkZuGKkndWDVmsV2crxdn67VWvlpvF37seiTFUzLT2s20 Sj3tBqEXqPV+AYmLlet5+HG9WXhq/bhwlFLL9b8XfionU3ssSX030nLMo939OT5yUVddUR3rY6ve HA5lscm7oq5UvVXnZpc/FHWzOs9bc6uu863pnpT2vIxugbKhVdYblPVGZZM4dvVwqyirw0HZz7h6 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 uLqpZDIF8IV3Sf+RmeQLbzuI7/IQ0HX4E5KFz3EMIXbplBQkcTAWZOQ2/EFMoZol+7fiURCYJG5f kdGO3Q4iJwon73rD470NdS3rGHy1uYnDvTWkO7LT5r0lECqhNw4QFjwTmofNWTHVusfHY8bus+GL trwG/LP8BLiIbUl8Cs1bIPyDIrWbYuEuLifwz/Qlrkqyqi6NrzkovKfMdbQyE5JCgeoJ0T5YVruD 7y2EEM///L3NmAmLy4JKPEAMUAmy3aRHUy81qEMkwEK8bd+tx7cVql1ctcp7OlWD+mb1ZrtqYHn+ obhudCUMgWFbnht7IRhxQ8kEUrhBQUgE6BfGUMjrVQc/n8jz3fJvIQWQfrRqO3IIeromRugXvcf5 tPVgp1oNeyqPZycrdsoNF/QGOmMtZC17Dz7s2DmF8NYXPDla30LbGHuiOu9cF3Ls3a7gTbeQyltu oX+FW3B/+GvdQh6Pka5faRb6+evMQhtS/tos7MTvHa+Q0/AK6S2r8O/RIKh4PmMQUJtvGoTmOPy6 QYjr9nMfdwj9FYfQh0Po0yFMoX3tEPrHHULfO4Sp8jG46xDa3iK0nS3I5TWPcOUL2vVguoT2NTYh rgXl+3F50tv/QJ6gyYuHU6CAbT+iUNJHFEpurlAQSaHk5golt9+iUOLaYDC+XKJ0lyh9SpT+pkTJ DyqU/DmB4kroSqGcv53+/OuPb6f/BBgAjGAZgg0KZW5kc3RyZWFtDWVuZG9iag04MSAwIG9iag1b L0lDQ0Jhc2VkIDIwNzMgMCBSXQ1lbmRvYmoNODIgMCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5n dGggOTM2Mi9GaWx0ZXIvRENURGVjb2RlL0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlIDgx IDAgUi9XaWR0aCA0NzkvSGVpZ2h0IDk4L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5BZG9i ZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4cGxck JCcnJCQ1MzMzNTs7Ozs7Ozs7OzsBDQsLDQ4NEA4OEBQODw4UFBARERAUHRQUFRQUHSUaFxcXFxol ICMeHh4jICgoJSUoKDIyMDIyOzs7Ozs7Ozs7O//AABEIAGIB3wMBIgACEQEDEQH/xAE/AAABBQEB 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 3K6HiX4H2OuagHB4s+k4uHd08yh0fV3DZiWY9pda+4AWXH6UAggN5gaLWSQ45VV+KuCN3Tl5/QaM vHx8et5oqxzoGiZH9/mmzOgYt+AzEpPo+m7eyzk7uCXeMrVSSE5aa7aq4I66buZg9GNL225d78u2 v+b3/RafFrZOqr2/VfGOX9opusx2uMuYzQ687XdltpIjJMEkHdXtxqqc/I6Lg3YP2PbsYDua4fSD v3pPJ+KB0/6vY+IQbLX5G0yxjtGA+OyYla6SHHKqs0VcEbulLL+slNlvSLhXqWlryB3AOv8AetRM QCIPCETwkHsmQsEd3mvq91vAxsAY2S/0nVkkEgkEOM9pWi3ql2e/0umMOyYflvEMb/VafpFHd0Tp LrPUOMzdzxp/m8K4xjK2hjGhrRoGgQAnzlAkkA2e+yyMZAUSKHZo3dHx7cUUbnNsDvUF4P6T1B+e SlhdHx8Ymy0nKyHQTdb7nacbZmFoJJvFKqtdwi7ppVdKxab8jIrBFuTO908Tzt8FX6V9X8Xp5Ly4 32nh7hAA/kt1Wqklxy1FnVXBHs4X/NXGblG6m+ymsn+bZoYPLQ7wVzL6HgZWPXjlprZUZYWaHXnm eVopJHJM1qdNlCEddN3IzPq5iZNmPD3VU47dgqb3Ezz2T9R6BTlNxxjv+ynH0YWDtz4jVaySPuT0 12VwR103cfM+r7Lun/ZqbItNgssus9znuAI9x+aNi9Ex6cZ9VrnX2WsLH2v1dtIja2ZgBaSSHuSq r62rgjd05HTfq7j4dgtssdkOb/NhwhrfMN11RR0PErwL8PHJrF/0rOXeXhoFpJJGcibtQhHs5uD0 PDxMZ9JHqutaWWWO5LT+aPALKsxcPEyP2d0/ddnXjY6553elWefhouiyfW+z2egAbtp9MHjdGio9 G6OOnsdZa71Mq3W2z8YCdGehJP08VsobAD6tjp/TsfApFdQl0AOsP0jCtpJJhJJsrwANApJJJBKk kkklKSSSSUpJJJJSkkkklKSSSSUpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKq SSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJ Kf/ZCg0KZW5kc3RyZWFtDWVuZG9iag04MyAwIG9iag08PC9TdGVtViAyMDAvRm9udE5hbWUvQXJp YWwtQmxhY2svRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRXZWlnaHQgOTAwL0ZsYWdzIDMyL0Rlc2Nl bnQgLTMwOS9Gb250QkJveFstMTk0IC0zMDcgMTY4OCAxMDgzXS9Bc2NlbnQgMTEwMC9Gb250RmFt aWx5KEFyaWFsKS9YSGVpZ2h0IDUxNS9DYXBIZWlnaHQgNzE4L1R5cGUvRm9udERlc2NyaXB0b3Iv SXRhbGljQW5nbGUgMD4+DWVuZG9iag04NCAwIG9iag08PC9TdGVtViAxMzYvRm9udE5hbWUvVGlt ZXNOZXdSb21hblBTLUJvbGRNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdodCA3MDAvRmxh Z3MgMzQvRGVzY2VudCAtMjE2L0ZvbnRCQm94Wy01NTggLTMwNyAyMDAwIDEwMjZdL0FzY2VudCA4 OTEvRm9udEZhbWlseShUaW1lcyBOZXcgUm9tYW4pL1hIZWlnaHQgLTU0Ni9DYXBIZWlnaHQgNjU2 L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag04NSAwIG9iag08PC9T dGVtViAxNzMuMDU2L0ZvbnROYW1lL1ZlcmRhbmEtQm9sZEl0YWxpYy9Gb250U3RyZXRjaC9Ob3Jt YWwvRm9udFdlaWdodCA3MDAvRmxhZ3MgOTYvRGVzY2VudCAtMjA5L0ZvbnRCQm94Wy01MzcgLTMw MyAxNzA1IDEwMTRdL0FzY2VudCAxMDA1L0ZvbnRGYW1pbHkoVmVyZGFuYSkvQ2FwSGVpZ2h0IDcz NC9YSGVpZ2h0IDU0Ni9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIC0xNT4+DWVuZG9i ag04NiAwIG9iag08PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciA4OCAwIFIv QmFzZUZvbnQvS0VITURJK0FyaWFsVW5pY29kZU1TL1dbM1syNzhdXS9DSURUb0dJRE1hcC9JZGVu dGl0eS9DSURTeXN0ZW1JbmZvPDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdp c3RyeShBZG9iZSk+Pi9EVyAxMDAwL1R5cGUvRm9udD4+DWVuZG9iag04NyAwIG9iag08PC9MZW5n dGggNjMwNTQvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgNDIwMjQ0Pj5zdHJlYW0NCkiJ7NNt bJ1VHQDw89zn9l66tfRllNaOzdu90G5zu13v6HqHm2Ubg82ABpBoQjSl69bOdW26DjcSAqJsIaLy uhEharAfjBrCtgB1TGKi8omiCSFCYvzgW+DDzEiIkZfeeu7owhdj1E8m/m7u75z/+T/nnOfcc84N SQhhYbgnpKH7MzcXe8b//LPfhnRJTIZbB++YLGy+qX1HbH8+hLrDe8b3jv54w4GpkK76TQj5fXv3 H9nz1pZ3jsa+Z0PI9g4PDex+6dKPF0K6/pMx1zscE83feuXV2J6M7RXDo5OH504//8vYfjyki1bs HxscyHxqRRyffSe2u0YHDo+/9mDt10Nue5wvFA4MjA6dv+7w6yFtuyL2+cP4xND4W3/8zpfi89/F 6Z4Nmeri8yEX4urzYXH/wnySTUJNWpsNlzT+fiZ+Q7E0U5xZ393R1NG0MhZJ7PzePTXh/WodYhCS 8PfMG/k16dfiHI3PJNNp36lMSIovh+K59d1Jx1Ud+TXvzuRKmTd+FEImzIRX87fUbL3wvmXP1FR7 53LVQc/FQSHJ1hRfLpeLxTi4dHH8oig38943ag4de/dI7lj2u1PvPzRVfe9dc4/nH8mVw8fCA6fT tpYF0+lVJxeG6bnzz4UkyS1szJ+ZOx/y6YbTudyihum0t7++cUFtmi5I8vFnN7fFjv31bWlrQ2tz Q745l8+3nEmLoW7u/Om6uuZFP03XhUuL53pKxb64lFKxqdRUKsayL1alpuZyOdZxlT09xXN9TbHR ONMX19zTs757ZT6kmVDTuaK68N5q0dKRyceiOf/IxOzRwxsrWyov35d5+M7Z45n7Ls/PFnJfnF2V q8s8M/uLfa13J0szo5W3Ko33HpvLrHjs3mTbE09UfjD82OxfQ6gJd899NX8o95PQGDrC1rAj7Eoe 7G8vlzdsvKylpW1BbW1bms1uyS9dsqShe936rRvjhpzedc2OnbF+dtPi9vZrN8fo1Jb40+NOFTZU t2dD2nu6VOpcWe26enV353S6sb+xsGXTrmxDV2NXV0N9XV2Sjw/7Fzd0NW3uWltsyNfX7tq4s6/Q tnTzpvbShg2LQ3Y6XXMqTZPq9uXmzp/M1cVEf219b+OOrVdf11ucTtee6m6qrb6uNl19ekFLY8t0 uvrkZc1n0u7QOnf+VGvrkjji5NK40NWnNm3qO5OuDeU4UXntdLru+WXL6i9b2h76p9NP9NeWF3Tn sou3bWt/Ic7Wnq4Oi+P+l4rNreVzPU3lcjkeRzywcixj0RfLeCp9sVkqxbPpu/Cw2mX+EKvH+JHi hXvXU30UT/3ClHFkjKuTxFGxVaqe8YVzvjhFLC6KjeqNvbw1f2Xn8ly+s3djay7fUfNRYsWiaiLJ 5JYv6+y8vNTTe1VH0/KmTLwqGzvyndWbEhMdLUm8MWn83+QPVV78QuPxFYN3dT1w/9vrH25fmOn4 4GzlLzuuvH/rrUeuP3Esqd/5UE1PUsm813bgzn2PNj9925WbZv/21JnZp29MXn+hMtP8/ZHMttnR modmp5KfV/qfqvSvrNkzsXzH2P6dT9709pulobYnP3vdjd++9cg3b3w7WdS59vYPrqi89sqq7119 dnElm8lUfnXoyf5XdtRnLjlxvLJ5Ktl04kTlpampcPGzHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAACA/9o4/AfOAgAAAAAAAAAAAMC/ljwNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/9+yvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAD/G0JdOB6S8OHnTPRhnIaW2Powzsb41/NxLsZ/mo/zYTC8G3uGbG3MrE5u m48z4dLk6Hycxvyj83E2xi/Ox7kYvxnjJMYhmcw0z8f58FJ6dPvI3pHJkTuHdhd2D0wOFAbHxo9M jOwdnix0bVtVWF8ul9b2dHd3F67Zu2egcMPYgbHJI+NDhW1jE+NjEwOTI2MH1hWu2b+/cGHIwcLE 0MGhiTuGdsfkxMjA/h8WRg4WBgqTEwO7h0YHJr5cGNtTuGV46J/OU/jK8MjgcGF04Ejh9qE40d6R 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 7f3SKYIODMkoEQheuidA2T0RdEaz0IhhGBhM4xvSF5fAIYM/Do7azGazKaMmCjklGMUETVGhc6Ln HrqHOOBm9N0Bjg0+ojlQVhY6BWNLMRLoctgbbgWknhpMq+8ELI6teu6/7kcc6k8CAknp/lUB4f4T dBihqAawM7OI6DpL7TLZaFZ2ZIvHAHGctiSn7dpbNwSjSQ+vIgJi1UbKBusDz81EUwANFVRfTqAr SrQQfLqhL0AVBXEq+8jTWIMWkWwSy+vNvRbU2D2qs3o+gMZv0NiCxnFs3NnTnwVUkEEeZ+O8lU2w VnYM6BRreTxjbLaWXWf3M3b9y9J9F7HSfR/pKaGPQbepoMWuXWuI2lX+oHmlMX5cj4N0ImgljLH/ BBgAtasOgg0KZW5kc3RyZWFtDWVuZG9iag04OCAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tF SE1ESStBcmlhbFVuaWNvZGVNUy9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDg3IDAgUi9G b250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTI3MC9Gb250QkJveFstMTAxMSAtMzMwIDIy NjAgMTA3OF0vQXNjZW50IDEwNjgvRm9udEZhbWlseShBcmlhbCBVbmljb2RlIE1TKS9DYXBIZWln aHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNODkgMCBvYmoN PDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciAyMDU2IDAgUi9MYXN0Q2hhciAxNTAv V2lkdGhzWzI3OCAwIDAgMCAwIDAgMCAwIDMzMyAzMzMgMCAwIDI3OCAzMzMgMjc4IDAgNTU2IDU1 NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDAgMCAwIDAgMCAwIDAgNzIyIDcyMiA3 MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggNTU2IDAgNjExIDgzMyA3MjIgNzc4IDY2NyAwIDcy MiA2NjcgNjExIDAgNjY3IDk0NCA2NjcgNjY3IDYxMSAwIDAgMCAwIDAgMCA1NTYgNjExIDU1NiA2 MTEgNTU2IDMzMyA2MTEgNjExIDI3OCAyNzggNTU2IDI3OCA4ODkgNjExIDYxMSA2MTEgNjExIDM4 OSA1NTYgMzMzIDYxMSA1NTYgNzc4IDU1NiA1NTYgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyNzggMCAwIDAgNTU2XS9CYXNlRm9udC9BcmlhbC1Cb2xk TVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRv YmoNOTAgMCBvYmoNPDwvTGVuZ3RoIDQ3MjIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTA5 MzY+PnN0cmVhbQ0KSInsV29sW1cVP++P/yROUrdpOxeL9rq3Nulix2naZGnIEje2E6dp1yROxXtd yt6L/VJ7S+LIcauuWqUIbWrlbgM0aRqagIlJbGUCXY9RpRKgISHEnwUNiY98qAQaXyh8GJNg3RrO ve85SkqLBNI+IOXdd98953f+3nvuu34GCQB8sAwKdJ7KxrvmAk++DND8CaJG7kKFtM2GewFapgGk /bOL5+alV1p+C7BtGaDhoXNzT8+e+u5v/o66P8b++4Jl5m9lVBkg8AryPQUEmlobbiD/PvIHCvOV iwO1Pz6GPNpsm5sr5cz39r/3PPr+GoBnZd68uOj6uHEQoM1AfbJgzlsP/7OtDWNlANTaYtla/N0H b+1DOcaXe0FFLVDecfVh9h6cxSE4mtjr6WqiuwM+r6RGSGw8thhTYiQgBbwNbsUjN8Lgapy3s/Gz q1Lcplf9q4c6pe2h7byHuw/vat3ZIntalF27aCTSfWRAfqSnp/tIhO53e7p7eg537ZWVdz45oXzp U7fUcumD1n1tuwOdkYAmSXtjvXtIVB/tmj5AZw49aqYOuPo+/oWr705IffbOM89dviy/Rnti4e2t X4gdDfs8flfXSPfDO/f0RY8OBvxTrQ99vvs4TujJrbbVttpW22pbbav9nzT8SIIf8M8R/k0CefHk tAf+gZwE9tUlTTu0As3Siw6tIv2qQ7uRftOhPfCM9CPuRW1A5HPyIYeWoUUec2gFcd2hVaSXHNqN 9AtIS0hjPvIbDo35KD64DgS6oBNbN1InoQg5KEMJlrDPQgWxJFJlWBRPE5EiUgvQgZJjMIeNwCRi 56CAsiXBWThaqH0Bn3nUtD3MIMe1i0LLwrGCNlyPoF+Co4VeuLQiUG5LkOZR88jN41iGpxArrdvc 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 iqdPPEvEc7N45otnnni6xTOTPzP3SUanNBj6Rfqtzhkz3dM6czrlzL3SnleT9d1tSfrC1rRWWY5q 1VvlluYn9abGJ3Vvs5TeHDHd3dUYbOxv/E2j0pBfqtfnleq7Ckr1nZ5SfUddsh5VK6XVrq6V62v3 18pR26XKqoaqrir28opEvdJn6L6MuXq5x9BLQQmGb8bwApQ9eJ+fZ+h5eJ+dZehZqLuNTE8m6iuW f13PANWvLNBrWIr+lekpupqieKY/gOWSIz3Tkh/wOJI1j5RMnoWRaZH1kfsjlaAmRWlSFwUJvirN IymKpIhkp4clyx42JHFDqyRJoYG1+S5XzqCT1uT0O3M39Evt/Y/k82d6XlG/1t5PnqINhQOS1Ll+ QJJXrO2PzckrMuut+/ZRXEZOf1x+4Vm2aVNcxvqc/gZeJjSvd7n85s8V/kku+LYLj/9+Vvn9Vdtc ZsXvwhC/lz/8eDEgyyvyCgcUBgUIChSmz2o3Gox6Y5dRafiMEmOzkW/kGbCV4bL91tsrs7z/GQBG j/WaDQplbmRzdHJlYW0NZW5kb2JqDTkxIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFu dEZvbnRzWzk4IDAgUl0vQmFzZUZvbnQvS0VITUhMK1dpbmdkaW5ncy1SZWd1bGFyL0VuY29kaW5n L0lkZW50aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTkyIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAv RGVzY2VuZGFudEZvbnRzWzEwMSAwIFJdL0Jhc2VGb250L0tFSE1HSytBcmlhbE1UL1RvVW5pY29k ZSAxNCAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNOTMgMCBvYmoN PDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbOTYgMCBSXS9CYXNlRm9udC9LRUhMTEor Q29yYmVsL1RvVW5pY29kZSAxMiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1l bmRvYmoNOTQgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbODYgMCBSXS9C YXNlRm9udC9LRUhNREkrQXJpYWxVbmljb2RlTVMvVG9Vbmljb2RlIDEzIDAgUi9FbmNvZGluZy9J ZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag05NSAwIG9iag08PC9TdGVtViA3Ni9Gb250TmFt ZS9LRUhMTEorQ29yYmVsL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgOTAgMCBSL0ZvbnRX ZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMjU2L0ZvbnRCQm94Wy01NTMgLTIzOSAxMTEwIDk0 OV0vQXNjZW50IDc0My9Gb250RmFtaWx5KENvcmJlbCkvQ2FwSGVpZ2h0IDY1Ni9YSGVpZ2h0IC01 MzEvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTk2IDAgb2JqDTw8 L1N1YnR5cGUvQ0lERm9udFR5cGUyL0ZvbnREZXNjcmlwdG9yIDk1IDAgUi9CYXNlRm9udC9LRUhM TEorQ29yYmVsL1dbM1syMDBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwv U3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAw L1R5cGUvRm9udD4+DWVuZG9iag05NyAwIG9iag08PC9TdGVtViAwL0ZvbnROYW1lL0tFSE1ITCtX aW5nZGluZ3MtUmVndWxhci9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDk5IDAgUi9Gb250 V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTIxMC9Gb250QkJveFswIC0yMTEgMTM1OSA4OTld L0FzY2VudCA4OTgvRm9udEZhbWlseShXaW5nZGluZ3MpL0NhcEhlaWdodCAwL1R5cGUvRm9udERl c2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag05OCAwIG9iag08PC9TdWJ0eXBlL0NJREZv bnRUeXBlMi9Gb250RGVzY3JpcHRvciA5NyAwIFIvQmFzZUZvbnQvS0VITUhMK1dpbmdkaW5ncy1S ZWd1bGFyL1dbMTIxWzQ1OF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9T dXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAv 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 q3AdTXl7aapwrrLf81wHuGbv84jX5a/jMb4WXxRt4boF2pOXYfRPvAzewH4r/CL3VY7h+O3wHlrw N9JRD8ZOUTgXxrNvFW0lHESdg6vG4n8Gc8es+xz32TnPaqaZf6vnUfV+vLuOFsjnbqBcdc+2HbT0 qtiRf67735DpVWBNIPn5bV4LvxfPp5fvuXPfS9v9pli+mSe/732iFJlhivk/SinGX6ElhbrHTrkD vgv3LRpy19GQ7MEMWb2Zd7QKrAUnqRIz6QBKm/EK/+wZUPP2aAV1d6NK9ToZjYdyrifn4y3QYUfa LOt91jnWDOss613WKdY0q5cVZ/WwYqwoq521jbWZ5WV5WG6WFn0a/h7cAt+Bm+BTcAl8CC6ALJgF M+AsmAYnwDtgAhwGQ2DAafMCN51lnWedYZ1mvcc6wXqK1cHazmpjCVYZy8WiaBT+FnwNroMvwOdg CXwELoIF8AE4Cd4EB8DueEutr9a3ycppL0V7hXVKWMeFNSmsfcJ6QVh7hDUsrF3C2iksU1hJ8bDc IEPyIfmAvF8GZb2sldUyICtlhfRLKb3SI10Sz7Bd4zZcRn9MM+zFITLSIfu3/khO8+/YaZdFYppd bZDxTCxotzXarqPOjCanrcxp2rExXU1mLpOmrYxN6nmbJtU3/n0LluwZiQNXab22iQT+ty6I9Z8J Fe1H1HKilopaTjSozSeoxRgcTz1I92j4r01bM1tSs2uv6m4iOScpZnbuYi+4yv3oT0oPm7H6wP52 p3Nbw8FD+hUPaTNUjm96BSaJ9wGVaupo6lApfNFUqlLNH/Op4KGtYf2KNpNPBRBeh6H8U4ABAJhg diINCmVuZHN0cmVhbQ1lbmRvYmoNMTAwIDAgb2JqDTw8L1N0ZW1WIDg4L0ZvbnROYW1lL0tFSE1H SytBcmlhbE1UL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgMTA4IDAgUi9Gb250V2VpZ2h0 IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTIxMS9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XS9B c2NlbnQgOTA1L0ZvbnRGYW1pbHkoQXJpYWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1MTUvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTEwMSAwIG9iag08PC9TdWJ0 eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciAxMDAgMCBSL0Jhc2VGb250L0tFSE1HSytB cmlhbE1UL1dbNDA0WzYwNF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9T dXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAv VHlwZS9Gb250Pj4NZW5kb2JqDTEwMiAwIG9iag08PC9TdGVtViA4OC9Gb250TmFtZS9LRUhNSEsr QXJpYWxNVC9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDEwNCAwIFIvRm9udFdlaWdodCA0 MDAvRmxhZ3MgMzIvRGVzY2VudCAtMjExL0ZvbnRCQm94Wy02NjUgLTMyNSAyMDAwIDEwMDZdL0Fz Y2VudCA5MDUvRm9udEZhbWlseShBcmlhbCkvQ2FwSGVpZ2h0IDcxOC9YSGVpZ2h0IDUxNS9UeXBl L0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMTAzIDAgb2JqDTw8L1N1YnR5 cGUvVHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgMTAyIDAgUi9MYXN0Q2hhciAxNDYvV2lkdGhzWzI3 OCAwIDAgMCAwIDg4OSAwIDAgMCAwIDAgMCAyNzggMzMzIDI3OCAyNzggMCAwIDU1NiA1NTYgMCAw IDU1NiA1NTYgMCA1NTYgMjc4IDAgMCAwIDAgNTU2IDAgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEg Nzc4IDcyMiAyNzggMCAwIDAgODMzIDAgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDcyMiA2NjcgOTQ0 IDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDIy MiA1MDAgMjIyIDgzMyA1NTYgNTU2IDU1NiAwIDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1 MDAgNTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMjJd L0Jhc2VGb250L0tFSE1ISytBcmlhbE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5j b2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTEwNCAwIG9iag08PC9MZW5ndGggMjcxNjUvRmlsdGVy L0ZsYXRlRGVjb2RlL0xlbmd0aDEgNTgwNDA+PnN0cmVhbQ0KSIl0VntQVOcVP9937z7Y3cveXfZx d1l3L6ws4EXeApsw4Vp1phk