From owner-xfs@oss.sgi.com Thu May 1 00:21:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 00:21:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m417Ku1G010798 for ; Thu, 1 May 2008 00:21:00 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA13671; Thu, 1 May 2008 17:21:37 +1000 Message-ID: <48196FB6.9040503@sgi.com> Date: Thu, 01 May 2008 17:22:30 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] Fix non-debug build for xfsidbg.c References: <20080430065937.GC108924158@sgi.com> <48181D04.4030902@sgi.com> <20080501004925.GU108924158@sgi.com> <48191FE8.9080607@sgi.com> <20080501030149.GC108924158@sgi.com> In-Reply-To: <20080501030149.GC108924158@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15727 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Agree. David Chinner wrote: > On Thu, May 01, 2008 at 11:42:00AM +1000, Lachlan McIlroy wrote: >> Sorry I should have been clearer. What I actually meant was something >> like this: > > Whatever. It's not worth arguing about. I just want to get it fixed. > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Thu May 1 05:25:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 05:25:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m41CPVqr029657 for ; Thu, 1 May 2008 05:25:34 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id WAA18426; Thu, 1 May 2008 22:26:12 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m41CQBsT152437993; Thu, 1 May 2008 22:26:12 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m41CQB2072884160; Thu, 1 May 2008 22:26:11 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 1 May 2008 22:26:11 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Message-ID: <20080501122611.GK108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15728 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-01 20:04:55.151880341 +1000 @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( ASSERT(pag->pag_ici_init); ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); + ilist = kmem_alloc(ilist_size, KM_NOFS); if (!ilist) return 0; From owner-xfs@oss.sgi.com Thu May 1 06:14:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 06:14:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41DEcxp032091 for ; Thu, 1 May 2008 06:14:39 -0700 X-ASG-Debug-ID: 1209647721-3b9801e50000-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 453901B2C9E2; Thu, 1 May 2008 06:15:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id PUruXy0pjnumestf; Thu, 01 May 2008 06:15:21 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JrYd7-0005Sp-7h; Thu, 01 May 2008 13:15:21 +0000 Date: Thu, 1 May 2008 09:15:21 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Subject: Re: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Message-ID: <20080501131521.GA7435@infradead.org> References: <20080501122611.GK108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501122611.GK108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209647722 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.1, rules version 3.1.49360 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15729 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 01, 2008 at 10:26:11PM +1000, David Chinner wrote: > Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-01 20:04:55.151880341 +1000 > @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( > ASSERT(pag->pag_ici_init); > > ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); > - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); > + ilist = kmem_alloc(ilist_size, KM_NOFS); > if (!ilist) > return 0; This should be KM_MAYFAIL | KM_NOFS, because KM_NOFS doesn't imply that the allocation may fail. From owner-xfs@oss.sgi.com Thu May 1 06:16:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 06:16:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41DGgur032203 for ; Thu, 1 May 2008 06:16:46 -0700 X-ASG-Debug-ID: 1209647845-256e02cf0000-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 C9EAB12A85E0; Thu, 1 May 2008 06:17:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id phuUvKxThILUli2k; Thu, 01 May 2008 06:17:26 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JrYf7-0000ds-P3; Thu, 01 May 2008 13:17:25 +0000 Date: Thu, 1 May 2008 09:17:25 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: REVIEW: ASCII CI support in xfsprogs Subject: Re: REVIEW: ASCII CI support in xfsprogs Message-ID: <20080501131725.GB7435@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.17 (2007-11-01) 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: 1209647846 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.1, rules version 3.1.49361 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15730 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 01, 2008 at 02:37:11PM +1000, Barry Naujok wrote: > I've reworked xfsprogs userspace tools from scratch with ASCII CI support > only. Much simpler than previous patches with Unicode CI. > > One issue that sort of bugs me a bit is I've maintained the same output as > the original IRIX mkfs.xfs with CI mode: > naming =version 2 bsize=4096 mixed-case=Y|N > > where "N" = CI enabled and "Y" = normal case-senstive filesystem. > > Should this be changed to something clearer? I'd prefer something cleaner. Like case-insensitive=Y|N. Otherwise the patch looks fine, but I wonder if you shouldn't better backport the xfs_dir* files from the kernel completely instead of applying the changes selectively, otherwise we'll get totoally out of sync codebases. From owner-xfs@oss.sgi.com Thu May 1 08:24:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 08:25:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,MISSING_HEADERS autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41FOk1p009340 for ; Thu, 1 May 2008 08:24:52 -0700 X-ASG-Debug-ID: 1209655530-6dd902520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from py-out-1112.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F253E1B8E55B for ; Thu, 1 May 2008 08:25:30 -0700 (PDT) Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.181]) by cuda.sgi.com with ESMTP id UU1Qvs2DVaNIWn75 for ; Thu, 01 May 2008 08:25:30 -0700 (PDT) Received: by py-out-1112.google.com with SMTP id j37so1039332pyc.4 for ; Thu, 01 May 2008 08:25:30 -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:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=sOEWQ6rzADVWjt4DPjskmMRZfaygH1o5jjU0Urvwo7I=; b=SX2S2GcPJFm/ORM58APyHWl71crEpbmxW7rs5eOBK2Cb24BdC35sP5iyoPs4ImQ5Eu9R0+OM+uQsGWxkuGdo2lEN1EtaKGhkOc1MTj7NJbGLI7RVQn6/0iIsPy3seHFyZ9/PsyZIhSE7ljKTtYi/Ptomgzucmow+UDyVpgSaZQE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=NgFWJ2rtz4GhosqqKZMN8ccFbSOrXUTYVuwcUMY2HZ46ujqCZY3eKYLSyuglqtrIYGPR/T0ch7ZDM8wpWvkyzmS3cUB1HzHkVOzR/eWliQhAEpu9dQCGvlTqZYNzgOXrcNi3cfSyrVcT/vlsrukEXmrFGBHxCMQRwdpFQpj0m/w= Received: by 10.141.74.17 with SMTP id b17mr876306rvl.234.1209655529864; Thu, 01 May 2008 08:25:29 -0700 (PDT) Received: by 10.140.208.15 with HTTP; Thu, 1 May 2008 08:25:29 -0700 (PDT) Message-ID: <1d3e8bf0805010825o7a6a0765ofeb63b730fef3c4e@mail.gmail.com> Date: Thu, 1 May 2008 16:25:29 +0100 From: "Dovydas Sankauskas" X-ASG-Orig-Subj: Re: disk I/O error Subject: Re: disk I/O error Cc: xfs@oss.sgi.com In-Reply-To: <480E17C7.7070606@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <1d3e8bf0804220842r26411f51vc714da371255aa90@mail.gmail.com> <480E17C7.7070606@sandeen.net> X-Barracuda-Connect: py-out-1112.google.com[64.233.166.181] X-Barracuda-Start-Time: 1209655530 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.83 X-Barracuda-Spam-Status: No, SCORE=-1.83 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49370 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.19 MISSING_HEADERS Missing To: header X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15731 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: laisve@gmail.com Precedence: bulk X-list: xfs 2008/4/22 Eric Sandeen : > > In any case to recover as best you can from the dying disk, try > dd_rescue to image every readable sector, then run xfs_repair on that > image and mount it loopback to get to what's left. I did exactly as you said. It took a while, but I managed to recover all data I have lost. ddrescue is a great tool! Thank you for your help. -- Dovydas Sankauskas From owner-xfs@oss.sgi.com Thu May 1 13:49:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 13:50:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41KndaK029718 for ; Thu, 1 May 2008 13:49:53 -0700 X-ASG-Debug-ID: 1209675018-32d000510000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DAB27113384 for ; Thu, 1 May 2008 13:50:18 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8XDYp89x324pJ0Zj for ; Thu, 01 May 2008 13:50:18 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41Ko7F3031639 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 1 May 2008 22:50:07 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41Ko4S3031637 for xfs@oss.sgi.com; Thu, 1 May 2008 22:50:04 +0200 Date: Thu, 1 May 2008 22:50:04 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfsqa 166 failure Subject: xfsqa 166 failure Message-ID: <20080501205004.GA30384@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209675023 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.1, rules version 3.1.49392 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15732 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Looks like the awk on my system (mawk-1.3.3-11 from Debian unstable) doesn't like the regex used in there. I guess it's some kind of GNU awk extension: 166 [ 2583.856446] XFS mounting filesystem hdd [ 2583.871549] Ending clean XFS mount for filesystem: hdd - output mismatch (see 166.out.bad) 2,6c2,3 < 0: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD < 1: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD < 2: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD < 3: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD < 4: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD --- > awk: line 9: regular expression compile failed (missing operand) * is the extent unwritten? * From owner-xfs@oss.sgi.com Thu May 1 14:19:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 14:20:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41LJgcQ031745 for ; Thu, 1 May 2008 14:19:46 -0700 X-ASG-Debug-ID: 1209676824-4d8600c50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 585F41B909B1 for ; Thu, 1 May 2008 14:20:25 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id daGWTbSASZdDklYW for ; Thu, 01 May 2008 14:20:24 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41LKIF3000405 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 1 May 2008 23:20:18 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41LKID2000403 for xfs@oss.sgi.com; Thu, 1 May 2008 23:20:18 +0200 Date: Thu, 1 May 2008 23:20:18 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfsqa 173 failure Subject: xfsqa 173 failure Message-ID: <20080501212018.GA32213@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209676826 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.1, rules version 3.1.49394 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15733 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs With current cvs on a 32bit kvm virtual machine: 173 [ 101.464812] XFS mounting filesystem hdd [ 101.481588] Ending clean XFS mount for filesystem: hdd [ 187.511174] XFS mounting filesystem hdd [ 188.022185] Ending clean XFS mount for filesystem: hdd [ 294.381897] XFS mounting filesystem hdd [ 294.449374] Ending clean XFS mount for filesystem: hdd [ 377.352911] Assertion failed: vn_count(vp) == 0, file: fs/xfs/xfs_inode.c, line: 3552 [ 377.354531] ------------[ cut here ]------------ [ 377.355178] kernel BUG at fs/xfs/support/debug.c:81! [ 377.355178] invalid opcode: 0000 [#1] SMP [ 377.355178] Modules linked in: xfs binfmt_misc nfsd auth_rpcgss exportfs af_packet nfs lockd nfs_acl sunrpc loop psmouse pcspkr serio_raw evdev [ 377.355178] [ 377.355178] Pid: 15732, comm: umount Not tainted (2.6.25-rc3 #29) [ 377.355178] EIP: 0060:[] EFLAGS: 00010282 CPU: 0 [ 377.355178] EIP is at assfail+0x1e/0x30 [xfs] [ 377.355178] EAX: 0000005c EBX: eca66348 ECX: c011b400 EDX: edf1a000 [ 377.355178] ESI: ec62ca08 EDI: ec62cb7c EBP: dc417e54 ESP: dc417e44 [ 377.355178] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 [ 377.355178] Process umount (pid: 15732, ti=dc416000 task=edf1a000 task.ti=dc416000) [ 377.355178] Stack: f0a17740 f0a08601 f0a0851a 00000de0 dc417e68 f09cc64a ec62ca08 00000000 [ 377.355178] ef709040 dc417e88 f09e54d3 00000003 ef751928 ec62ca08 dc417e88 00000000 [ 377.355178] ec62ca08 dc417ed8 f09ef15a f0a0253f f09ee077 00000002 00000046 c0411820 [ 377.355178] Call Trace: [ 377.355178] [] ? xfs_iflush_all+0x4a/0x80 [xfs] [ 377.355178] [] ? xfs_unmountfs+0x23/0x150 [xfs] [ 377.355178] [] ? xfs_unmount+0x14a/0x200 [xfs] [ 377.355179] [] ? xfs_fs_put_super+0x2f/0x50 [xfs] [ 377.355179] [] ? xfs_syncsub+0xe7/0x2b0 [xfs] [ 377.355179] [] ? xfs_fs_put_super+0x2f/0x50 [xfs] [ 377.355179] [] ? lock_kernel+0x2b/0x50 [ 377.355179] [] ? generic_shutdown_super+0x54/0xd0 [ 377.355179] [] ? kill_block_super+0xf/0x20 [ 377.355179] [] ? deactivate_super+0x72/0x90 [ 377.355179] [] ? mntput_no_expire+0x44/0x70 [ 377.355179] [] ? sys_umount+0x44/0x230 [ 377.355179] [] ? sys_stat64+0x14/0x30 [ 377.355179] [] ? do_munmap+0x18c/0x1f0 [ 377.355179] [] ? sys_oldumount+0x19/0x20 [ 377.355179] [] ? syscall_call+0x7/0xb [ 377.355179] ======================= [ 377.355179] Code: 00 e8 57 b0 80 cf c9 c3 90 8d 74 26 00 55 89 e5 83 ec 10 89 4c 24 0c 89 54 24 08 89 44 24 04 c7 04 24 40 77 a1 f0 e8 12 e0 71 cf <0f> 0b eb fe 8d b4 26 00 00 00 00 8d bc 27 00 00 00 00 55 89 e5 From owner-xfs@oss.sgi.com Thu May 1 15:00:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0n0C001306 for ; Thu, 1 May 2008 15:00:55 -0700 X-ASG-Debug-ID: 1209679290-453801950000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6EA7A1B2BCAC for ; Thu, 1 May 2008 15:01:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id swAtAmJsO3kY8pMO for ; Thu, 01 May 2008 15:01:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1OF3002470 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:24 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1OwX002468 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:24 +0200 Date: Fri, 2 May 2008 00:01:24 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 8/10] kill calls to xfs_binval in the mount error path Subject: [PATCH 8/10] kill calls to xfs_binval in the mount error path Message-ID: <20080501220124.GH2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679291 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15736 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_binval aka xfs_flush_buftarg is the first thing done in xfs_free_buftarg, so there is no need to have duplicated calls just before xfs_free_buftarg in the mount failure path. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:33:11.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:33:35.000000000 +0200 @@ -1790,10 +1790,10 @@ xfs_fs_fill_super( */ error = xfs_start_flags(args, mp); if (error) - goto error1; + goto out_destroy_counters; error = xfs_readsb(mp, flags); if (error) - goto error1; + goto out_destroy_counters; error = xfs_finish_flags(args, mp); if (error) goto error2; @@ -1854,12 +1854,6 @@ xfs_fs_fill_super( error2: if (mp->m_sb_bp) xfs_freesb(mp); - error1: - xfs_binval(mp->m_ddev_targp); - if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) - xfs_binval(mp->m_logdev_targp); - if (mp->m_rtdev_targp) - xfs_binval(mp->m_rtdev_targp); out_destroy_counters: xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); From owner-xfs@oss.sgi.com Thu May 1 15:01:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0uRM001323 for ; Thu, 1 May 2008 15:01:04 -0700 X-ASG-Debug-ID: 1209679299-4d7001600000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BCEA91B2BBD9 for ; Thu, 1 May 2008 15:01:40 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id Yu8WrgKKzto30mn3 for ; Thu, 01 May 2008 15:01:40 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1XF3002489 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:33 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1XoI002486 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:33 +0200 Date: Fri, 2 May 2008 00:01:33 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 9/10] rename error2 goto label in xfs_fs_fill_super Subject: [PATCH 9/10] rename error2 goto label in xfs_fs_fill_super Message-ID: <20080501220133.GI2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679300 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15743 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:34:56.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:35:30.000000000 +0200 @@ -1796,22 +1796,22 @@ xfs_fs_fill_super( goto out_destroy_counters; error = xfs_finish_flags(args, mp); if (error) - goto error2; + goto out_free_sb; error = xfs_setup_devices(mp); if (error) - goto error2; + goto out_free_sb; if (mp->m_flags & XFS_MOUNT_BARRIER) xfs_mountfs_check_barriers(mp); error = xfs_filestream_mount(mp); if (error) - goto error2; + goto out_free_sb; error = xfs_mountfs(mp, flags); if (error) - goto error2; + goto out_free_sb; XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); @@ -1851,9 +1851,8 @@ xfs_fs_fill_super( kfree(args); return 0; - error2: - if (mp->m_sb_bp) - xfs_freesb(mp); + out_free_sb: + xfs_freesb(mp); out_destroy_counters: xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); From owner-xfs@oss.sgi.com Thu May 1 15:00:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0NFt001250 for ; Thu, 1 May 2008 15:00:29 -0700 X-ASG-Debug-ID: 1209679266-2af201ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1E3911176E1 for ; Thu, 1 May 2008 15:01:07 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id A0F6EhAbzgY42E3j for ; Thu, 01 May 2008 15:01:07 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M10F3002379 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:00 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1069002377 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:00 +0200 Date: Fri, 2 May 2008 00:01:00 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 3/10] don't call xfs_freesb from xfs_mountfs failure case Subject: [PATCH 3/10] don't call xfs_freesb from xfs_mountfs failure case Message-ID: <20080501220100.GC2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679268 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15741 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Freeing of the superblock is already handled in the caller, and that is more symmetric with the mount path, too. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-01 21:20:47.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-01 21:21:04.000000000 +0200 @@ -1272,7 +1272,6 @@ xfs_mountfs( error1: if (uuid_mounted) uuid_table_remove(&mp->m_sb.sb_uuid); - xfs_freesb(mp); return error; } From owner-xfs@oss.sgi.com Thu May 1 15:01:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M11QQ001340 for ; Thu, 1 May 2008 15:01:07 -0700 X-ASG-Debug-ID: 1209679305-2b8f01570000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6BDCC1176F0 for ; Thu, 1 May 2008 15:01:45 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id WcSgMN0bsUuXGywF for ; Thu, 01 May 2008 15:01:45 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1cF3002509 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:39 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1c8q002507 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:38 +0200 Date: Fri, 2 May 2008 00:01:38 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 10/10] add missing call to xfs_filestream_unmount on xfs_mountfs failure Subject: [PATCH 10/10] add missing call to xfs_filestream_unmount on xfs_mountfs failure Message-ID: <20080501220138.GJ2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679306 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15742 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:35:30.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:36:38.000000000 +0200 @@ -1811,7 +1811,7 @@ xfs_fs_fill_super( error = xfs_mountfs(mp, flags); if (error) - goto out_free_sb; + goto out_filestream_unmount; XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); @@ -1851,6 +1851,8 @@ xfs_fs_fill_super( kfree(args); return 0; + out_filestream_unmount: + xfs_filestream_unmount(mp); out_free_sb: xfs_freesb(mp); out_destroy_counters: From owner-xfs@oss.sgi.com Thu May 1 15:00:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:00:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0Khe001241 for ; Thu, 1 May 2008 15:00:25 -0700 X-ASG-Debug-ID: 1209679261-08e601ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2743F12ACED5 for ; Thu, 1 May 2008 15:01:01 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id iKrLYgxTkmDx3Ru4 for ; Thu, 01 May 2008 15:01:01 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M0sF3002363 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:00:54 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M0sXZ002361 for xfs@oss.sgi.com; Fri, 2 May 2008 00:00:54 +0200 Date: Fri, 2 May 2008 00:00:54 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/10] merge xfs_mount into xfs_fs_fill_super Subject: [PATCH 2/10] merge xfs_mount into xfs_fs_fill_super Message-ID: <20080501220054.GB2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679263 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.1, rules version 3.1.49395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15735 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_mount is already pretty linux-specific so merge it into xfs_fs_fill_super to allow for a more structured mount code in the next patches. xfs_start_flags and xfs_finish_flags also move to xfs_super.c. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-05-01 19:06:18.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-05-01 19:08:41.000000000 +0200 @@ -8,8 +8,6 @@ struct kstatfs; struct xfs_mount; struct xfs_mount_args; -int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, - struct cred *credp); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 19:08:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 19:28:51.000000000 +0200 @@ -1367,6 +1367,235 @@ xfs_fs_setxquota( Q_XSETPQLIM), id, (caddr_t)fdq); } +/* + * This function fills in xfs_mount_t fields based on mount args. + * Note: the superblock has _not_ yet been read in. + */ +STATIC int +xfs_start_flags( + struct xfs_mount_args *ap, + struct xfs_mount *mp) +{ + /* Values are in BBs */ + if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { + /* + * At this point the superblock has not been read + * in, therefore we do not know the block size. + * Before the mount call ends we will convert + * these to FSBs. + */ + mp->m_dalign = ap->sunit; + mp->m_swidth = ap->swidth; + } + + if (ap->logbufs != -1 && + ap->logbufs != 0 && + (ap->logbufs < XLOG_MIN_ICLOGS || + ap->logbufs > XLOG_MAX_ICLOGS)) { + cmn_err(CE_WARN, + "XFS: invalid logbufs value: %d [not %d-%d]", + ap->logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); + return XFS_ERROR(EINVAL); + } + mp->m_logbufs = ap->logbufs; + if (ap->logbufsize != -1 && + ap->logbufsize != 0 && + (ap->logbufsize < XLOG_MIN_RECORD_BSIZE || + ap->logbufsize > XLOG_MAX_RECORD_BSIZE || + !is_power_of_2(ap->logbufsize))) { + cmn_err(CE_WARN, + "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", + ap->logbufsize); + return XFS_ERROR(EINVAL); + } + mp->m_logbsize = ap->logbufsize; + mp->m_fsname_len = strlen(ap->fsname) + 1; + mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); + strcpy(mp->m_fsname, ap->fsname); + if (ap->rtname[0]) { + mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); + strcpy(mp->m_rtname, ap->rtname); + } + if (ap->logname[0]) { + mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); + strcpy(mp->m_logname, ap->logname); + } + + if (ap->flags & XFSMNT_WSYNC) + mp->m_flags |= XFS_MOUNT_WSYNC; +#if XFS_BIG_INUMS + if (ap->flags & XFSMNT_INO64) { + mp->m_flags |= XFS_MOUNT_INO64; + mp->m_inoadd = XFS_INO64_OFFSET; + } +#endif + if (ap->flags & XFSMNT_RETERR) + mp->m_flags |= XFS_MOUNT_RETERR; + if (ap->flags & XFSMNT_NOALIGN) + mp->m_flags |= XFS_MOUNT_NOALIGN; + if (ap->flags & XFSMNT_SWALLOC) + mp->m_flags |= XFS_MOUNT_SWALLOC; + if (ap->flags & XFSMNT_OSYNCISOSYNC) + mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; + if (ap->flags & XFSMNT_32BITINODES) + mp->m_flags |= XFS_MOUNT_32BITINODES; + + if (ap->flags & XFSMNT_IOSIZE) { + if (ap->iosizelog > XFS_MAX_IO_LOG || + ap->iosizelog < XFS_MIN_IO_LOG) { + cmn_err(CE_WARN, + "XFS: invalid log iosize: %d [not %d-%d]", + ap->iosizelog, XFS_MIN_IO_LOG, + XFS_MAX_IO_LOG); + return XFS_ERROR(EINVAL); + } + + mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; + mp->m_readio_log = mp->m_writeio_log = ap->iosizelog; + } + + if (ap->flags & XFSMNT_IKEEP) + mp->m_flags |= XFS_MOUNT_IKEEP; + if (ap->flags & XFSMNT_DIRSYNC) + mp->m_flags |= XFS_MOUNT_DIRSYNC; + if (ap->flags & XFSMNT_ATTR2) + mp->m_flags |= XFS_MOUNT_ATTR2; + if (ap->flags & XFSMNT_NOATTR2) + mp->m_flags |= XFS_MOUNT_NOATTR2; + + if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) + mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; + + /* + * no recovery flag requires a read-only mount + */ + if (ap->flags & XFSMNT_NORECOVERY) { + if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { + cmn_err(CE_WARN, + "XFS: tried to mount a FS read-write without recovery!"); + return XFS_ERROR(EINVAL); + } + mp->m_flags |= XFS_MOUNT_NORECOVERY; + } + + if (ap->flags & XFSMNT_NOUUID) + mp->m_flags |= XFS_MOUNT_NOUUID; + if (ap->flags & XFSMNT_BARRIER) + mp->m_flags |= XFS_MOUNT_BARRIER; + else + mp->m_flags &= ~XFS_MOUNT_BARRIER; + + if (ap->flags2 & XFSMNT2_FILESTREAMS) + mp->m_flags |= XFS_MOUNT_FILESTREAMS; + + if (ap->flags & XFSMNT_DMAPI) + mp->m_flags |= XFS_MOUNT_DMAPI; + return 0; +} + +/* + * This function fills in xfs_mount_t fields based on mount args. + * Note: the superblock _has_ now been read in. + */ +STATIC int +xfs_finish_flags( + struct xfs_mount_args *ap, + struct xfs_mount *mp) +{ + int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); + + /* Fail a mount where the logbuf is smaller then the log stripe */ + if (xfs_sb_version_haslogv2(&mp->m_sb)) { + if ((ap->logbufsize <= 0) && + (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { + mp->m_logbsize = mp->m_sb.sb_logsunit; + } else if (ap->logbufsize > 0 && + ap->logbufsize < mp->m_sb.sb_logsunit) { + cmn_err(CE_WARN, + "XFS: logbuf size must be greater than or equal to log stripe size"); + return XFS_ERROR(EINVAL); + } + } else { + /* Fail a mount if the logbuf is larger than 32K */ + if (ap->logbufsize > XLOG_BIG_RECORD_BSIZE) { + cmn_err(CE_WARN, + "XFS: logbuf size for version 1 logs must be 16K or 32K"); + return XFS_ERROR(EINVAL); + } + } + + /* + * mkfs'ed attr2 will turn on attr2 mount unless explicitly + * told by noattr2 to turn it off + */ + if (xfs_sb_version_hasattr2(&mp->m_sb) && + !(ap->flags & XFSMNT_NOATTR2)) + mp->m_flags |= XFS_MOUNT_ATTR2; + + /* + * prohibit r/w mounts of read-only filesystems + */ + if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) { + cmn_err(CE_WARN, + "XFS: cannot mount a read-only filesystem as read-write"); + return XFS_ERROR(EROFS); + } + + /* + * check for shared mount. + */ + if (ap->flags & XFSMNT_SHARED) { + if (!xfs_sb_version_hasshared(&mp->m_sb)) + return XFS_ERROR(EINVAL); + + /* + * For IRIX 6.5, shared mounts must have the shared + * version bit set, have the persistent readonly + * field set, must be version 0 and can only be mounted + * read-only. + */ + if (!ronly || !(mp->m_sb.sb_flags & XFS_SBF_READONLY) || + (mp->m_sb.sb_shared_vn != 0)) + return XFS_ERROR(EINVAL); + + mp->m_flags |= XFS_MOUNT_SHARED; + + /* + * Shared XFS V0 can't deal with DMI. Return EINVAL. + */ + if (mp->m_sb.sb_shared_vn == 0 && (ap->flags & XFSMNT_DMAPI)) + return XFS_ERROR(EINVAL); + } + + if (ap->flags & XFSMNT_UQUOTA) { + mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); + if (ap->flags & XFSMNT_UQUOTAENF) + mp->m_qflags |= XFS_UQUOTA_ENFD; + } + + if (ap->flags & XFSMNT_GQUOTA) { + mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); + if (ap->flags & XFSMNT_GQUOTAENF) + mp->m_qflags |= XFS_OQUOTA_ENFD; + } else if (ap->flags & XFSMNT_PQUOTA) { + mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); + if (ap->flags & XFSMNT_PQUOTAENF) + mp->m_qflags |= XFS_OQUOTA_ENFD; + } + + return 0; +} + +/* + * The file system configurations are: + * (1) device (partition) with data and internal log + * (2) logical volume with data and log subvolumes. + * (3) logical volume with data, log, and realtime subvolumes. + * + * We only have to handle opening the log and realtime volumes here if + * they are present. The data subvolume has already been opened by + * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. + */ STATIC int xfs_fs_fill_super( struct super_block *sb, @@ -1376,7 +1605,9 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args = xfs_args_allocate(sb, silent); - int error; + struct block_device *ddev = sb->s_bdev; + struct block_device *logdev = NULL, *rtdev = NULL; + int flags = 0, error; mp = xfs_mount_init(); @@ -1400,10 +1631,114 @@ xfs_fs_fill_super( sb->s_qcop = &xfs_quotactl_operations; sb->s_op = &xfs_super_operations; - error = xfs_mount(mp, args, NULL); + error = xfs_dmops_get(mp, args); + if (error) + goto fail_vfsop; + error = xfs_qmops_get(mp, args); if (error) goto fail_vfsop; + if (args->flags & XFSMNT_QUIET) + flags |= XFS_MFSI_QUIET; + + /* + * Open real time and log devices - order is important. + */ + if (args->logname[0]) { + error = xfs_blkdev_get(mp, args->logname, &logdev); + if (error) + goto fail_vfsop; + } + if (args->rtname[0]) { + error = xfs_blkdev_get(mp, args->rtname, &rtdev); + if (error) { + xfs_blkdev_put(logdev); + goto fail_vfsop; + } + + if (rtdev == ddev || rtdev == logdev) { + cmn_err(CE_WARN, + "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + error = EINVAL; + goto fail_vfsop; + } + } + + /* + * Setup xfs_mount buffer target pointers + */ + error = ENOMEM; + mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); + if (!mp->m_ddev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto fail_vfsop; + } + if (rtdev) { + mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); + if (!mp->m_rtdev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto error0; + } + } + mp->m_logdev_targp = (logdev && logdev != ddev) ? + xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; + if (!mp->m_logdev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto error0; + } + + /* + * Setup flags based on mount(2) options and then the superblock + */ + error = xfs_start_flags(args, mp); + if (error) + goto error1; + error = xfs_readsb(mp, flags); + if (error) + goto error1; + error = xfs_finish_flags(args, mp); + if (error) + goto error2; + + /* + * Setup xfs_mount buffer target pointers based on superblock + */ + error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (!error && logdev && logdev != ddev) { + unsigned int log_sector_size = BBSIZE; + + if (xfs_sb_version_hassector(&mp->m_sb)) + log_sector_size = mp->m_sb.sb_logsectsize; + error = xfs_setsize_buftarg(mp->m_logdev_targp, + mp->m_sb.sb_blocksize, + log_sector_size); + } + if (!error && rtdev) + error = xfs_setsize_buftarg(mp->m_rtdev_targp, + mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (error) + goto error2; + + if (mp->m_flags & XFS_MOUNT_BARRIER) + xfs_mountfs_check_barriers(mp); + + error = xfs_filestream_mount(mp); + if (error) + goto error2; + + error = xfs_mountfs(mp, flags); + if (error) + goto error2; + + XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); + sb->s_dirt = 1; sb->s_magic = XFS_SB_MAGIC; sb->s_blocksize = mp->m_sb.sb_blocksize; @@ -1440,7 +1775,22 @@ xfs_fs_fill_super( kmem_free(args, sizeof(*args)); return 0; -fail_vnrele: + error2: + if (mp->m_sb_bp) + xfs_freesb(mp); + error1: + xfs_binval(mp->m_ddev_targp); + if (logdev && logdev != ddev) + xfs_binval(mp->m_logdev_targp); + if (rtdev) + xfs_binval(mp->m_rtdev_targp); + error0: + xfs_unmountfs_close(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + goto fail_vfsop; + + fail_vnrele: if (sb->s_root) { dput(sb->s_root); sb->s_root = NULL; @@ -1448,7 +1798,7 @@ fail_vnrele: iput(root); } -fail_unmount: + fail_unmount: /* * Blow away any referenced inode in the filestreams cache. * This can and will cause log traffic as inodes go inactive @@ -1467,7 +1817,7 @@ fail_unmount: xfs_dmops_put(mp); kmem_free(mp, sizeof(xfs_mount_t)); -fail_vfsop: + fail_vfsop: kmem_free(args, sizeof(*args)); return -error; } Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-01 19:08:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-01 19:20:09.000000000 +0200 @@ -189,375 +189,6 @@ xfs_cleanup(void) kmem_zone_destroy(xfs_log_ticket_zone); } -/* - * xfs_start_flags - * - * This function fills in xfs_mount_t fields based on mount args. - * Note: the superblock has _not_ yet been read in. - */ -STATIC int -xfs_start_flags( - struct xfs_mount_args *ap, - struct xfs_mount *mp) -{ - /* Values are in BBs */ - if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { - /* - * At this point the superblock has not been read - * in, therefore we do not know the block size. - * Before the mount call ends we will convert - * these to FSBs. - */ - mp->m_dalign = ap->sunit; - mp->m_swidth = ap->swidth; - } - - if (ap->logbufs != -1 && - ap->logbufs != 0 && - (ap->logbufs < XLOG_MIN_ICLOGS || - ap->logbufs > XLOG_MAX_ICLOGS)) { - cmn_err(CE_WARN, - "XFS: invalid logbufs value: %d [not %d-%d]", - ap->logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); - return XFS_ERROR(EINVAL); - } - mp->m_logbufs = ap->logbufs; - if (ap->logbufsize != -1 && - ap->logbufsize != 0 && - (ap->logbufsize < XLOG_MIN_RECORD_BSIZE || - ap->logbufsize > XLOG_MAX_RECORD_BSIZE || - !is_power_of_2(ap->logbufsize))) { - cmn_err(CE_WARN, - "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", - ap->logbufsize); - return XFS_ERROR(EINVAL); - } - mp->m_logbsize = ap->logbufsize; - mp->m_fsname_len = strlen(ap->fsname) + 1; - mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); - strcpy(mp->m_fsname, ap->fsname); - if (ap->rtname[0]) { - mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); - strcpy(mp->m_rtname, ap->rtname); - } - if (ap->logname[0]) { - mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); - strcpy(mp->m_logname, ap->logname); - } - - if (ap->flags & XFSMNT_WSYNC) - mp->m_flags |= XFS_MOUNT_WSYNC; -#if XFS_BIG_INUMS - if (ap->flags & XFSMNT_INO64) { - mp->m_flags |= XFS_MOUNT_INO64; - mp->m_inoadd = XFS_INO64_OFFSET; - } -#endif - if (ap->flags & XFSMNT_RETERR) - mp->m_flags |= XFS_MOUNT_RETERR; - if (ap->flags & XFSMNT_NOALIGN) - mp->m_flags |= XFS_MOUNT_NOALIGN; - if (ap->flags & XFSMNT_SWALLOC) - mp->m_flags |= XFS_MOUNT_SWALLOC; - if (ap->flags & XFSMNT_OSYNCISOSYNC) - mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; - if (ap->flags & XFSMNT_32BITINODES) - mp->m_flags |= XFS_MOUNT_32BITINODES; - - if (ap->flags & XFSMNT_IOSIZE) { - if (ap->iosizelog > XFS_MAX_IO_LOG || - ap->iosizelog < XFS_MIN_IO_LOG) { - cmn_err(CE_WARN, - "XFS: invalid log iosize: %d [not %d-%d]", - ap->iosizelog, XFS_MIN_IO_LOG, - XFS_MAX_IO_LOG); - return XFS_ERROR(EINVAL); - } - - mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; - mp->m_readio_log = mp->m_writeio_log = ap->iosizelog; - } - - if (ap->flags & XFSMNT_IKEEP) - mp->m_flags |= XFS_MOUNT_IKEEP; - if (ap->flags & XFSMNT_DIRSYNC) - mp->m_flags |= XFS_MOUNT_DIRSYNC; - if (ap->flags & XFSMNT_ATTR2) - mp->m_flags |= XFS_MOUNT_ATTR2; - if (ap->flags & XFSMNT_NOATTR2) - mp->m_flags |= XFS_MOUNT_NOATTR2; - - if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) - mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; - - /* - * no recovery flag requires a read-only mount - */ - if (ap->flags & XFSMNT_NORECOVERY) { - if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { - cmn_err(CE_WARN, - "XFS: tried to mount a FS read-write without recovery!"); - return XFS_ERROR(EINVAL); - } - mp->m_flags |= XFS_MOUNT_NORECOVERY; - } - - if (ap->flags & XFSMNT_NOUUID) - mp->m_flags |= XFS_MOUNT_NOUUID; - if (ap->flags & XFSMNT_BARRIER) - mp->m_flags |= XFS_MOUNT_BARRIER; - else - mp->m_flags &= ~XFS_MOUNT_BARRIER; - - if (ap->flags2 & XFSMNT2_FILESTREAMS) - mp->m_flags |= XFS_MOUNT_FILESTREAMS; - - if (ap->flags & XFSMNT_DMAPI) - mp->m_flags |= XFS_MOUNT_DMAPI; - return 0; -} - -/* - * This function fills in xfs_mount_t fields based on mount args. - * Note: the superblock _has_ now been read in. - */ -STATIC int -xfs_finish_flags( - struct xfs_mount_args *ap, - struct xfs_mount *mp) -{ - int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); - - /* Fail a mount where the logbuf is smaller then the log stripe */ - if (xfs_sb_version_haslogv2(&mp->m_sb)) { - if ((ap->logbufsize <= 0) && - (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { - mp->m_logbsize = mp->m_sb.sb_logsunit; - } else if (ap->logbufsize > 0 && - ap->logbufsize < mp->m_sb.sb_logsunit) { - cmn_err(CE_WARN, - "XFS: logbuf size must be greater than or equal to log stripe size"); - return XFS_ERROR(EINVAL); - } - } else { - /* Fail a mount if the logbuf is larger than 32K */ - if (ap->logbufsize > XLOG_BIG_RECORD_BSIZE) { - cmn_err(CE_WARN, - "XFS: logbuf size for version 1 logs must be 16K or 32K"); - return XFS_ERROR(EINVAL); - } - } - - /* - * mkfs'ed attr2 will turn on attr2 mount unless explicitly - * told by noattr2 to turn it off - */ - if (xfs_sb_version_hasattr2(&mp->m_sb) && - !(ap->flags & XFSMNT_NOATTR2)) - mp->m_flags |= XFS_MOUNT_ATTR2; - - /* - * prohibit r/w mounts of read-only filesystems - */ - if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) { - cmn_err(CE_WARN, - "XFS: cannot mount a read-only filesystem as read-write"); - return XFS_ERROR(EROFS); - } - - /* - * check for shared mount. - */ - if (ap->flags & XFSMNT_SHARED) { - if (!xfs_sb_version_hasshared(&mp->m_sb)) - return XFS_ERROR(EINVAL); - - /* - * For IRIX 6.5, shared mounts must have the shared - * version bit set, have the persistent readonly - * field set, must be version 0 and can only be mounted - * read-only. - */ - if (!ronly || !(mp->m_sb.sb_flags & XFS_SBF_READONLY) || - (mp->m_sb.sb_shared_vn != 0)) - return XFS_ERROR(EINVAL); - - mp->m_flags |= XFS_MOUNT_SHARED; - - /* - * Shared XFS V0 can't deal with DMI. Return EINVAL. - */ - if (mp->m_sb.sb_shared_vn == 0 && (ap->flags & XFSMNT_DMAPI)) - return XFS_ERROR(EINVAL); - } - - if (ap->flags & XFSMNT_UQUOTA) { - mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); - if (ap->flags & XFSMNT_UQUOTAENF) - mp->m_qflags |= XFS_UQUOTA_ENFD; - } - - if (ap->flags & XFSMNT_GQUOTA) { - mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - if (ap->flags & XFSMNT_GQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } else if (ap->flags & XFSMNT_PQUOTA) { - mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - if (ap->flags & XFSMNT_PQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } - - return 0; -} - -/* - * xfs_mount - * - * The file system configurations are: - * (1) device (partition) with data and internal log - * (2) logical volume with data and log subvolumes. - * (3) logical volume with data, log, and realtime subvolumes. - * - * We only have to handle opening the log and realtime volumes here if - * they are present. The data subvolume has already been opened by - * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. - */ -int -xfs_mount( - struct xfs_mount *mp, - struct xfs_mount_args *args, - cred_t *credp) -{ - struct block_device *ddev, *logdev, *rtdev; - int flags = 0, error; - - ddev = mp->m_super->s_bdev; - logdev = rtdev = NULL; - - error = xfs_dmops_get(mp, args); - if (error) - return error; - error = xfs_qmops_get(mp, args); - if (error) - return error; - - if (args->flags & XFSMNT_QUIET) - flags |= XFS_MFSI_QUIET; - - /* - * Open real time and log devices - order is important. - */ - if (args->logname[0]) { - error = xfs_blkdev_get(mp, args->logname, &logdev); - if (error) - return error; - } - if (args->rtname[0]) { - error = xfs_blkdev_get(mp, args->rtname, &rtdev); - if (error) { - xfs_blkdev_put(logdev); - return error; - } - - if (rtdev == ddev || rtdev == logdev) { - cmn_err(CE_WARN, - "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - return EINVAL; - } - } - - /* - * Setup xfs_mount buffer target pointers - */ - error = ENOMEM; - mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); - if (!mp->m_ddev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - return error; - } - if (rtdev) { - mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); - if (!mp->m_rtdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - } - mp->m_logdev_targp = (logdev && logdev != ddev) ? - xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; - if (!mp->m_logdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - - /* - * Setup flags based on mount(2) options and then the superblock - */ - error = xfs_start_flags(args, mp); - if (error) - goto error1; - error = xfs_readsb(mp, flags); - if (error) - goto error1; - error = xfs_finish_flags(args, mp); - if (error) - goto error2; - - /* - * Setup xfs_mount buffer target pointers based on superblock - */ - error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); - if (!error && logdev && logdev != ddev) { - unsigned int log_sector_size = BBSIZE; - - if (xfs_sb_version_hassector(&mp->m_sb)) - log_sector_size = mp->m_sb.sb_logsectsize; - error = xfs_setsize_buftarg(mp->m_logdev_targp, - mp->m_sb.sb_blocksize, - log_sector_size); - } - if (!error && rtdev) - error = xfs_setsize_buftarg(mp->m_rtdev_targp, - mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); - if (error) - goto error2; - - if (mp->m_flags & XFS_MOUNT_BARRIER) - xfs_mountfs_check_barriers(mp); - - if ((error = xfs_filestream_mount(mp))) - goto error2; - - error = xfs_mountfs(mp, flags); - if (error) - goto error2; - - XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); - - return 0; - -error2: - if (mp->m_sb_bp) - xfs_freesb(mp); -error1: - xfs_binval(mp->m_ddev_targp); - if (logdev && logdev != ddev) - xfs_binval(mp->m_logdev_targp); - if (rtdev) - xfs_binval(mp->m_rtdev_targp); -error0: - xfs_unmountfs_close(mp, credp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - return error; -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) From owner-xfs@oss.sgi.com Thu May 1 15:00:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0hmc001287 for ; Thu, 1 May 2008 15:00:46 -0700 X-ASG-Debug-ID: 1209679286-6d1b02b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B08E812ACEE3 for ; Thu, 1 May 2008 15:01:26 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id jOPpCDJCEtqdUoPJ for ; Thu, 01 May 2008 15:01:26 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1JF3002449 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:20 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1J7x002447 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:19 +0200 Date: Fri, 2 May 2008 00:01:19 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 7/10] kill xfs_mount_init Subject: [PATCH 7/10] kill xfs_mount_init Message-ID: <20080501220119.GG2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679287 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.1, rules version 3.1.49395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15739 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_mount_init is inlined into xfs_fs_fill_super and allocation switched to kzalloc. Plug a leak of the mount structure for most early mount failures. Move xfs_icsb_init_counters to as late as possible in the mount path and make sure to undo it so that no stale hotplug cpu notifiers are left around on mount failures. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:15:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:28:36.000000000 +0200 @@ -1273,10 +1273,11 @@ xfs_fs_put_super( } xfs_unmountfs(mp); + xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); - kmem_free(mp, sizeof(xfs_mount_t)); + kfree(mp); } STATIC void @@ -1733,14 +1734,20 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args; - int flags = 0, error; + int flags = 0, error = ENOMEM; args = xfs_args_allocate(sb, silent); if (!args) return -ENOMEM; - mp = xfs_mount_init(); + mp = kzalloc(sizeof(xfs_mount_t), GFP_KERNEL); + if (!mp) + goto out_free_args; + spin_lock_init(&mp->m_sb_lock); + mutex_init(&mp->m_ilock); + mutex_init(&mp->m_growlock); + atomic_set(&mp->m_active_trans, 0); INIT_LIST_HEAD(&mp->m_sync_list); spin_lock_init(&mp->m_sync_lock); init_waitqueue_head(&mp->m_wait_single_sync_task); @@ -1753,7 +1760,7 @@ xfs_fs_fill_super( error = xfs_parseargs(mp, (char *)data, args, 0); if (error) - goto fail_vfsop; + goto out_free_mp; sb_min_blocksize(sb, BBSIZE); sb->s_xattr = xfs_xattr_handlers; @@ -1763,7 +1770,7 @@ xfs_fs_fill_super( error = xfs_dmops_get(mp, args); if (error) - goto fail_vfsop; + goto out_free_mp; error = xfs_qmops_get(mp, args); if (error) goto out_put_dmops; @@ -1775,6 +1782,9 @@ xfs_fs_fill_super( if (error) goto out_put_qmops; + if (xfs_icsb_init_counters(mp)) + mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; + /* * Setup flags based on mount(2) options and then the superblock */ @@ -1850,12 +1860,18 @@ xfs_fs_fill_super( xfs_binval(mp->m_logdev_targp); if (mp->m_rtdev_targp) xfs_binval(mp->m_rtdev_targp); + out_destroy_counters: + xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); out_put_qmops: xfs_qmops_put(mp); out_put_dmops: xfs_dmops_put(mp); - goto fail_vfsop; + out_free_mp: + kfree(mp); + out_free_args: + kfree(args); + return -error; fail_vnrele: if (sb->s_root) { @@ -1880,14 +1896,7 @@ xfs_fs_fill_super( IRELE(mp->m_rootip); xfs_unmountfs(mp); - xfs_close_devices(mp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - kmem_free(mp, sizeof(xfs_mount_t)); - - fail_vfsop: - kfree(args); - return -error; + goto out_destroy_counters; } STATIC int Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-01 20:14:45.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-01 20:23:30.000000000 +0200 @@ -125,33 +125,11 @@ static const struct { }; /* - * Return a pointer to an initialized xfs_mount structure. - */ -xfs_mount_t * -xfs_mount_init(void) -{ - xfs_mount_t *mp; - - mp = kmem_zalloc(sizeof(xfs_mount_t), KM_SLEEP); - - if (xfs_icsb_init_counters(mp)) { - mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; - } - - spin_lock_init(&mp->m_sb_lock); - mutex_init(&mp->m_ilock); - mutex_init(&mp->m_growlock); - atomic_set(&mp->m_active_trans, 0); - - return mp; -} - -/* * Free up the resources associated with a mount structure. Assume that * the structure was initially zeroed, so we can tell which fields got * initialized. */ -void +STATIC void xfs_mount_free( xfs_mount_t *mp) { @@ -180,8 +158,6 @@ xfs_mount_free( kmem_free(mp->m_rtname, strlen(mp->m_rtname) + 1); if (mp->m_logname != NULL) kmem_free(mp->m_logname, strlen(mp->m_logname) + 1); - - xfs_icsb_destroy_counters(mp); } /* @@ -2097,7 +2073,7 @@ xfs_icsb_reinit_counters( xfs_icsb_unlock(mp); } -STATIC void +void xfs_icsb_destroy_counters( xfs_mount_t *mp) { Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-01 20:14:45.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-01 20:23:01.000000000 +0200 @@ -210,6 +210,7 @@ typedef struct xfs_icsb_cnts { extern int xfs_icsb_init_counters(struct xfs_mount *); extern void xfs_icsb_reinit_counters(struct xfs_mount *); +extern void xfs_icsb_destroy_counters(struct xfs_mount *); extern void xfs_icsb_sync_counters(struct xfs_mount *, int); extern void xfs_icsb_sync_counters_locked(struct xfs_mount *, int); @@ -511,10 +512,8 @@ typedef struct xfs_mod_sb { #define XFS_MOUNT_ILOCK(mp) mutex_lock(&((mp)->m_ilock)) #define XFS_MOUNT_IUNLOCK(mp) mutex_unlock(&((mp)->m_ilock)) -extern xfs_mount_t *xfs_mount_init(void); extern void xfs_mod_sb(xfs_trans_t *, __int64_t); extern int xfs_log_sbcount(xfs_mount_t *, uint); -extern void xfs_mount_free(xfs_mount_t *mp); extern int xfs_mountfs(xfs_mount_t *mp, int); extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-01 20:17:16.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-01 20:22:51.000000000 +0200 @@ -256,8 +256,6 @@ EXPORT_SYMBOL(xfs_log_force_umount); EXPORT_SYMBOL(xfs_log_unmount_dealloc); EXPORT_SYMBOL(xfs_log_unmount_write); EXPORT_SYMBOL(xfs_mod_sb); -EXPORT_SYMBOL(xfs_mount_free); -EXPORT_SYMBOL(xfs_mount_init); EXPORT_SYMBOL(xfs_mount_reset_sbqflags); EXPORT_SYMBOL(xfs_mountfs); EXPORT_SYMBOL(xfs_qm_dqcheck); From owner-xfs@oss.sgi.com Thu May 1 15:00:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0TgG001260 for ; Thu, 1 May 2008 15:00:36 -0700 X-ASG-Debug-ID: 1209679272-4888017e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 557601B2BB71 for ; Thu, 1 May 2008 15:01:12 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id PxLeWXUK8xUXqJDD for ; Thu, 01 May 2008 15:01:12 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M15F3002402 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:06 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M15HY002398 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:05 +0200 Date: Fri, 2 May 2008 00:01:05 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 4/10] sort out opening and closing of the block devices Subject: [PATCH 4/10] sort out opening and closing of the block devices Message-ID: <20080501220105.GD2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679273 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15738 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Currently closing the rt/log block device is done in the wrong spot, and far too early. So revampt it: - xfs_blkdev_put moved out of xfs_free_buftarg into the caller so that it is done after tearing down the buftarg completely. - call to xfs_unmountfs_close moved from xfs_mountfs into caller so that it's done after tearing down the filesystem completely. - xfs_unmountfs_close is renamed to xfs_close_devices and made static in xfs_super.c - opening of the block devices is split into a helper xfs_open_devices that is symetric in use to xfs_close_devices - xfs_unountfs can now lose struct cred - error handling around device opening sanitized in xfs_fs_fill_super Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 19:54:48.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 19:54:49.000000000 +0200 @@ -766,6 +766,102 @@ xfs_blkdev_issue_flush( blkdev_issue_flush(buftarg->bt_bdev, NULL); } +STATIC void +xfs_close_devices( + struct xfs_mount *mp) +{ + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { + xfs_free_buftarg(mp->m_logdev_targp); + xfs_blkdev_put(mp->m_logdev_targp->bt_bdev); + } + if (mp->m_rtdev_targp) { + xfs_free_buftarg(mp->m_rtdev_targp); + xfs_blkdev_put(mp->m_rtdev_targp->bt_bdev); + } + xfs_free_buftarg(mp->m_ddev_targp); +} + +/* + * The file system configurations are: + * (1) device (partition) with data and internal log + * (2) logical volume with data and log subvolumes. + * (3) logical volume with data, log, and realtime subvolumes. + * + * We only have to handle opening the log and realtime volumes here if + * they are present. The data subvolume has already been opened by + * get_sb_bdev() and is stored in sb->s_bdev. + */ +STATIC int +xfs_open_devices( + struct xfs_mount *mp, + struct xfs_mount_args *args) +{ + struct block_device *ddev = mp->m_super->s_bdev; + struct block_device *logdev = NULL, *rtdev = NULL; + int error; + + /* + * Open real time and log devices - order is important. + */ + if (args->logname[0]) { + error = xfs_blkdev_get(mp, args->logname, &logdev); + if (error) + goto out; + } + + if (args->rtname[0]) { + error = xfs_blkdev_get(mp, args->rtname, &rtdev); + if (error) + goto out_close_logdev; + + if (rtdev == ddev || rtdev == logdev) { + cmn_err(CE_WARN, + "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); + goto out_close_rtdev; + } + } + + /* + * Setup xfs_mount buffer target pointers + */ + error = ENOMEM; + mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); + if (!mp->m_ddev_targp) + goto out_close_rtdev; + + if (rtdev) { + mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); + if (!mp->m_rtdev_targp) + goto out_free_ddev_targ; + } + + if (logdev && logdev != ddev) { + mp->m_logdev_targp = xfs_alloc_buftarg(logdev, 1); + if (!mp->m_logdev_targp) + goto out_free_rtdev_targ; + } else { + mp->m_logdev_targp = mp->m_ddev_targp; + } + + return 0; + + out_free_rtdev_targ: + if (mp->m_rtdev_targp) + xfs_free_buftarg(mp->m_rtdev_targp); + out_free_ddev_targ: + xfs_free_buftarg(mp->m_ddev_targp); + out_close_rtdev: + if (mp->m_rtdev_targp) + xfs_blkdev_put(mp->m_rtdev_targp->bt_bdev); + out_close_logdev: + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) + xfs_blkdev_put(mp->m_logdev_targp->bt_bdev); + out: + return error; +} + + + /* * XFS AIL push thread support */ @@ -1139,7 +1235,8 @@ xfs_fs_put_super( unmount_event_flags); } - xfs_unmountfs(mp, NULL); + xfs_unmountfs(mp); + xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); kmem_free(mp, sizeof(xfs_mount_t)); @@ -1586,16 +1683,6 @@ xfs_finish_flags( return 0; } -/* - * The file system configurations are: - * (1) device (partition) with data and internal log - * (2) logical volume with data and log subvolumes. - * (3) logical volume with data, log, and realtime subvolumes. - * - * We only have to handle opening the log and realtime volumes here if - * they are present. The data subvolume has already been opened by - * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. - */ STATIC int xfs_fs_fill_super( struct super_block *sb, @@ -1605,8 +1692,6 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args = xfs_args_allocate(sb, silent); - struct block_device *ddev = sb->s_bdev; - struct block_device *logdev = NULL, *rtdev = NULL; int flags = 0, error; mp = xfs_mount_init(); @@ -1636,61 +1721,14 @@ xfs_fs_fill_super( goto fail_vfsop; error = xfs_qmops_get(mp, args); if (error) - goto fail_vfsop; + goto out_put_dmops; if (args->flags & XFSMNT_QUIET) flags |= XFS_MFSI_QUIET; - /* - * Open real time and log devices - order is important. - */ - if (args->logname[0]) { - error = xfs_blkdev_get(mp, args->logname, &logdev); - if (error) - goto fail_vfsop; - } - if (args->rtname[0]) { - error = xfs_blkdev_get(mp, args->rtname, &rtdev); - if (error) { - xfs_blkdev_put(logdev); - goto fail_vfsop; - } - - if (rtdev == ddev || rtdev == logdev) { - cmn_err(CE_WARN, - "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - error = EINVAL; - goto fail_vfsop; - } - } - - /* - * Setup xfs_mount buffer target pointers - */ - error = ENOMEM; - mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); - if (!mp->m_ddev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto fail_vfsop; - } - if (rtdev) { - mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); - if (!mp->m_rtdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - } - mp->m_logdev_targp = (logdev && logdev != ddev) ? - xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; - if (!mp->m_logdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } + error = xfs_open_devices(mp, args); + if (error) + goto out_put_qmops; /* * Setup flags based on mount(2) options and then the superblock @@ -1710,7 +1748,9 @@ xfs_fs_fill_super( */ error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, mp->m_sb.sb_sectsize); - if (!error && logdev && logdev != ddev) { + if (error) + goto error2; + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { unsigned int log_sector_size = BBSIZE; if (xfs_sb_version_hassector(&mp->m_sb)) @@ -1718,13 +1758,16 @@ xfs_fs_fill_super( error = xfs_setsize_buftarg(mp->m_logdev_targp, mp->m_sb.sb_blocksize, log_sector_size); + if (error) + goto error2; } - if (!error && rtdev) + if (mp->m_rtdev_targp) { error = xfs_setsize_buftarg(mp->m_rtdev_targp, mp->m_sb.sb_blocksize, mp->m_sb.sb_sectsize); - if (error) - goto error2; + if (error) + goto error2; + } if (mp->m_flags & XFS_MOUNT_BARRIER) xfs_mountfs_check_barriers(mp); @@ -1780,13 +1823,14 @@ xfs_fs_fill_super( xfs_freesb(mp); error1: xfs_binval(mp->m_ddev_targp); - if (logdev && logdev != ddev) + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) xfs_binval(mp->m_logdev_targp); - if (rtdev) + if (mp->m_rtdev_targp) xfs_binval(mp->m_rtdev_targp); - error0: - xfs_unmountfs_close(mp, NULL); + xfs_close_devices(mp); + out_put_qmops: xfs_qmops_put(mp); + out_put_dmops: xfs_dmops_put(mp); goto fail_vfsop; @@ -1812,7 +1856,8 @@ xfs_fs_fill_super( IRELE(mp->m_rootip); - xfs_unmountfs(mp, NULL); + xfs_unmountfs(mp); + xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); kmem_free(mp, sizeof(xfs_mount_t)); Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-01 19:54:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-01 19:54:49.000000000 +0200 @@ -1283,7 +1283,7 @@ xfs_mountfs( * log and makes sure that incore structures are freed. */ int -xfs_unmountfs(xfs_mount_t *mp, struct cred *cr) +xfs_unmountfs(xfs_mount_t *mp) { __uint64_t resblks; int error = 0; @@ -1350,7 +1350,6 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr */ ASSERT(mp->m_inodes == NULL); - xfs_unmountfs_close(mp, cr); if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0) uuid_table_remove(&mp->m_sb.sb_uuid); @@ -1361,16 +1360,6 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr return 0; } -void -xfs_unmountfs_close(xfs_mount_t *mp, struct cred *cr) -{ - if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) - xfs_free_buftarg(mp->m_logdev_targp, 1); - if (mp->m_rtdev_targp) - xfs_free_buftarg(mp->m_rtdev_targp, 1); - xfs_free_buftarg(mp->m_ddev_targp, 0); -} - STATIC void xfs_unmountfs_wait(xfs_mount_t *mp) { Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-01 19:54:37.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-01 19:54:49.000000000 +0200 @@ -518,8 +518,7 @@ extern void xfs_mount_free(xfs_mount_t * extern int xfs_mountfs(xfs_mount_t *mp, int); extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); -extern int xfs_unmountfs(xfs_mount_t *, struct cred *); -extern void xfs_unmountfs_close(xfs_mount_t *, struct cred *); +extern int xfs_unmountfs(xfs_mount_t *); extern int xfs_unmountfs_writesb(xfs_mount_t *); extern int xfs_unmount_flush(xfs_mount_t *, int); extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, int); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-01 19:54:47.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-01 19:54:49.000000000 +0200 @@ -78,9 +78,6 @@ extern void xfs_initialize_vnode(struct extern void xfs_flush_inode(struct xfs_inode *); extern void xfs_flush_device(struct xfs_inode *); -extern int xfs_blkdev_get(struct xfs_mount *, const char *, - struct block_device **); -extern void xfs_blkdev_put(struct block_device *); extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); extern const struct export_operations xfs_export_operations; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-05-01 19:54:51.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-05-01 19:54:55.000000000 +0200 @@ -1413,13 +1413,10 @@ xfs_unregister_buftarg( void xfs_free_buftarg( - xfs_buftarg_t *btp, - int external) + xfs_buftarg_t *btp) { xfs_flush_buftarg(btp, 1); xfs_blkdev_issue_flush(btp); - if (external) - xfs_blkdev_put(btp->bt_bdev); xfs_free_bufhash(btp); iput(btp->bt_mapping->host); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-05-01 19:54:51.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h 2008-05-01 19:54:55.000000000 +0200 @@ -410,7 +410,7 @@ static inline void xfs_bdwrite(void *mp, * Handling of buftargs. */ extern xfs_buftarg_t *xfs_alloc_buftarg(struct block_device *, int); -extern void xfs_free_buftarg(xfs_buftarg_t *, int); +extern void xfs_free_buftarg(xfs_buftarg_t *); extern void xfs_wait_buftarg(xfs_buftarg_t *); extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int); extern int xfs_flush_buftarg(xfs_buftarg_t *, int); From owner-xfs@oss.sgi.com Thu May 1 15:01:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0tt0001313 for ; Thu, 1 May 2008 15:01:01 -0700 X-ASG-Debug-ID: 1209679281-4d7e01410000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 78A921B2BBD9 for ; Thu, 1 May 2008 15:01:21 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id eH2DIOjQCqFH8a6t for ; Thu, 01 May 2008 15:01:21 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1FF3002435 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:15 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1FHK002433 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:15 +0200 Date: Fri, 2 May 2008 00:01:15 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 6/10] allow xfs_args_allocate to fail Subject: [PATCH 6/10] allow xfs_args_allocate to fail Message-ID: <20080501220115.GF2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679282 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15737 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Switch xfs_args_allocate to kzalloc and handle failures. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:06:01.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:15:00.000000000 +0200 @@ -75,7 +75,10 @@ xfs_args_allocate( { struct xfs_mount_args *args; - args = kmem_zalloc(sizeof(struct xfs_mount_args), KM_SLEEP); + args = kzalloc(sizeof(struct xfs_mount_args), GFP_KERNEL); + if (!args) + return NULL; + args->logbufs = args->logbufsize = -1; strncpy(args->fsname, sb->s_id, MAXNAMELEN); @@ -1396,9 +1399,13 @@ xfs_fs_remount( char *options) { struct xfs_mount *mp = XFS_M(sb); - struct xfs_mount_args *args = xfs_args_allocate(sb, 0); + struct xfs_mount_args *args; int error; + args = xfs_args_allocate(sb, 0); + if (!args) + return -ENOMEM; + error = xfs_parseargs(mp, options, args, 1); if (error) goto out_free_args; @@ -1420,7 +1427,7 @@ xfs_fs_remount( } out_free_args: - kmem_free(args, sizeof(*args)); + kfree(args); return -error; } @@ -1725,9 +1732,13 @@ xfs_fs_fill_super( { struct inode *root; struct xfs_mount *mp = NULL; - struct xfs_mount_args *args = xfs_args_allocate(sb, silent); + struct xfs_mount_args *args; int flags = 0, error; + args = xfs_args_allocate(sb, silent); + if (!args) + return -ENOMEM; + mp = xfs_mount_init(); INIT_LIST_HEAD(&mp->m_sync_list); @@ -1827,7 +1838,7 @@ xfs_fs_fill_super( xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); - kmem_free(args, sizeof(*args)); + kfree(args); return 0; error2: @@ -1875,7 +1886,7 @@ xfs_fs_fill_super( kmem_free(mp, sizeof(xfs_mount_t)); fail_vfsop: - kmem_free(args, sizeof(*args)); + kfree(args); return -error; } From owner-xfs@oss.sgi.com Thu May 1 15:00:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:00:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0DFp001235 for ; Thu, 1 May 2008 15:00:21 -0700 X-ASG-Debug-ID: 1209679255-6d1802a00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7051012ACED5 for ; Thu, 1 May 2008 15:00:55 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 71ht3YnBFUUz08CE for ; Thu, 01 May 2008 15:00:55 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M0mF3002349 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:00:49 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M0mV3002347 for xfs@oss.sgi.com; Fri, 2 May 2008 00:00:48 +0200 Date: Fri, 2 May 2008 00:00:48 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Subject: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-ID: <20080501220048.GA2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679257 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49395 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15734 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_unmount is small and already pretty Linux specific, so merge it into the callers. The real unmount path is simplified a little by doing a WARN_ON on the xfs_unmount_flush retval directly instead of propagating the error back to the caller, and the mout failure case in simplified significantly by removing the forced shudown case and all the dmapi events that shouldn't be sent because the dmapi mount event hasn't been sent by that time either. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:48:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:50:16.000000000 +0200 @@ -1087,14 +1087,61 @@ xfs_fs_put_super( struct super_block *sb) { struct xfs_mount *mp = XFS_M(sb); + struct xfs_inode *rip = mp->m_rootip; + int unmount_event_flags = 0; int error; kthread_stop(mp->m_sync_task); xfs_sync(mp, SYNC_ATTR | SYNC_DELWRI); - error = xfs_unmount(mp, 0, NULL); - if (error) - printk("XFS: unmount got error=%d\n", error); + +#ifdef HAVE_DMAPI + if (mp->m_flags & XFS_MOUNT_DMAPI) { + unmount_event_flags = + (mp->m_dmevmask & (1 << DM_EVENT_UNMOUNT)) ? + 0 : DM_FLAGS_UNWANTED; + /* + * Ignore error from dmapi here, first unmount is not allowed + * to fail anyway, and second we wouldn't want to fail a + * unmount because of dmapi. + */ + XFS_SEND_PREUNMOUNT(mp, rip, DM_RIGHT_NULL, rip, DM_RIGHT_NULL, + NULL, NULL, 0, 0, unmount_event_flags); + } +#endif + + /* + * Blow away any referenced inode in the filestreams cache. + * This can and will cause log traffic as inodes go inactive + * here. + */ + xfs_filestream_unmount(mp); + + XFS_bflush(mp->m_ddev_targp); + error = xfs_unmount_flush(mp, 0); + WARN_ON(error); + + IRELE(rip); + + /* + * If we're forcing a shutdown, typically because of a media error, + * we want to make sure we invalidate dirty pages that belong to + * referenced vnodes as well. + */ + if (XFS_FORCED_SHUTDOWN(mp)) { + error = xfs_sync(mp, SYNC_WAIT | SYNC_CLOSE); + ASSERT(error != EFSCORRUPTED); + } + + if (mp->m_flags & XFS_MOUNT_DMAPI) { + XFS_SEND_UNMOUNT(mp, rip, DM_RIGHT_NULL, 0, 0, + unmount_event_flags); + } + + xfs_unmountfs(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + kmem_free(mp, sizeof(xfs_mount_t)); } STATIC void @@ -1400,7 +1447,23 @@ fail_vnrele: } fail_unmount: - xfs_unmount(mp, 0, NULL); + /* + * Blow away any referenced inode in the filestreams cache. + * This can and will cause log traffic as inodes go inactive + * here. + */ + xfs_filestream_unmount(mp); + + XFS_bflush(mp->m_ddev_targp); + error = xfs_unmount_flush(mp, 0); + WARN_ON(error); + + IRELE(mp->m_rootip); + + xfs_unmountfs(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + kmem_free(mp, sizeof(xfs_mount_t)); fail_vfsop: kmem_free(args, sizeof(*args)); Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-04-25 20:48:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-04-25 20:48:32.000000000 +0200 @@ -550,93 +550,6 @@ error0: return error; } -int -xfs_unmount( - xfs_mount_t *mp, - int flags, - cred_t *credp) -{ - xfs_inode_t *rip; - bhv_vnode_t *rvp; - int unmount_event_wanted = 0; - int unmount_event_flags = 0; - int xfs_unmountfs_needed = 0; - int error; - - rip = mp->m_rootip; - rvp = XFS_ITOV(rip); - -#ifdef HAVE_DMAPI - if (mp->m_flags & XFS_MOUNT_DMAPI) { - error = XFS_SEND_PREUNMOUNT(mp, - rip, DM_RIGHT_NULL, rip, DM_RIGHT_NULL, - NULL, NULL, 0, 0, - (mp->m_dmevmask & (1<m_dmevmask & (1<m_ddev_targp); - error = xfs_unmount_flush(mp, 0); - if (error) - goto out; - - ASSERT(vn_count(rvp) == 1); - - /* - * Drop the reference count - */ - IRELE(rip); - - /* - * If we're forcing a shutdown, typically because of a media error, - * we want to make sure we invalidate dirty pages that belong to - * referenced vnodes as well. - */ - if (XFS_FORCED_SHUTDOWN(mp)) { - error = xfs_sync(mp, SYNC_WAIT | SYNC_CLOSE); - ASSERT(error != EFSCORRUPTED); - } - xfs_unmountfs_needed = 1; - -out: - /* Send DMAPI event, if required. - * Then do xfs_unmountfs() if needed. - * Then return error (or zero). - */ - if (unmount_event_wanted) { - /* Note: mp structure must still exist for - * XFS_SEND_UNMOUNT() call. - */ - XFS_SEND_UNMOUNT(mp, error == 0 ? rip : NULL, - DM_RIGHT_NULL, 0, error, unmount_event_flags); - } - if (xfs_unmountfs_needed) { - /* - * Call common unmount function to flush to disk - * and free the super block buffer & mount structures. - */ - xfs_unmountfs(mp, credp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - kmem_free(mp, sizeof(xfs_mount_t)); - } - - return XFS_ERROR(error); -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-04-25 20:48:31.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-04-25 20:48:32.000000000 +0200 @@ -10,7 +10,6 @@ struct xfs_mount_args; int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, struct cred *credp); -int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); From owner-xfs@oss.sgi.com Thu May 1 15:01:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:01:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M0uE0001322 for ; Thu, 1 May 2008 15:01:02 -0700 X-ASG-Debug-ID: 1209679276-32d401520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 20C311176EE for ; Thu, 1 May 2008 15:01:17 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id BVYeS24BrLnAwJ7f for ; Thu, 01 May 2008 15:01:17 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m41M1AF3002420 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 00:01:10 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m41M1Aht002418 for xfs@oss.sgi.com; Fri, 2 May 2008 00:01:10 +0200 Date: Fri, 2 May 2008 00:01:10 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 5/10] add xfs_setup_devices helper Subject: [PATCH 5/10] add xfs_setup_devices helper Message-ID: <20080501220110.GE2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209679278 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.1, rules version 3.1.49396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15740 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Split setting the block and sector size out of xfs_fs_fill_super into a small helper to make xfs_fs_fill_super more readable. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 19:58:12.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-01 20:05:49.000000000 +0200 @@ -860,7 +860,41 @@ xfs_open_devices( return error; } +/* + * Setup xfs_mount buffer target pointers based on superblock + */ +STATIC int +xfs_setup_devices( + struct xfs_mount *mp) +{ + int error; + error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (error) + return error; + + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { + unsigned int log_sector_size = BBSIZE; + + if (xfs_sb_version_hassector(&mp->m_sb)) + log_sector_size = mp->m_sb.sb_logsectsize; + error = xfs_setsize_buftarg(mp->m_logdev_targp, + mp->m_sb.sb_blocksize, + log_sector_size); + if (error) + return error; + } + if (mp->m_rtdev_targp) { + error = xfs_setsize_buftarg(mp->m_rtdev_targp, + mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (error) + return error; + } + + return 0; +} /* * XFS AIL push thread support @@ -1743,31 +1777,9 @@ xfs_fs_fill_super( if (error) goto error2; - /* - * Setup xfs_mount buffer target pointers based on superblock - */ - error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); + error = xfs_setup_devices(mp); if (error) goto error2; - if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { - unsigned int log_sector_size = BBSIZE; - - if (xfs_sb_version_hassector(&mp->m_sb)) - log_sector_size = mp->m_sb.sb_logsectsize; - error = xfs_setsize_buftarg(mp->m_logdev_targp, - mp->m_sb.sb_blocksize, - log_sector_size); - if (error) - goto error2; - } - if (mp->m_rtdev_targp) { - error = xfs_setsize_buftarg(mp->m_rtdev_targp, - mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); - if (error) - goto error2; - } if (mp->m_flags & XFS_MOUNT_BARRIER) xfs_mountfs_check_barriers(mp); From owner-xfs@oss.sgi.com Thu May 1 15:07:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:08:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m41M7oMr002380 for ; Thu, 1 May 2008 15:07:53 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA02144; Fri, 2 May 2008 08:08:31 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m41M8SsT151105874; Fri, 2 May 2008 08:08:28 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m41M8PtB152307624; Fri, 2 May 2008 08:08:25 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 2 May 2008 08:08:25 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Message-ID: <20080501220825.GN108924158@sgi.com> References: <20080501122611.GK108924158@sgi.com> <20080501131521.GA7435@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501131521.GA7435@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15744 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 01, 2008 at 09:15:21AM -0400, Christoph Hellwig wrote: > On Thu, May 01, 2008 at 10:26:11PM +1000, David Chinner wrote: > > Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c > > =================================================================== > > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 > > +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-01 20:04:55.151880341 +1000 > > @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( > > ASSERT(pag->pag_ici_init); > > > > ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); > > - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); > > + ilist = kmem_alloc(ilist_size, KM_NOFS); > > if (!ilist) > > return 0; > > This should be KM_MAYFAIL | KM_NOFS, because KM_NOFS doesn't imply that > the allocation may fail. Yes, right you are - I only looked at the effect of __GFP_FS, not what kmem_alloc does. i.e. kmem_flags_convert() doesn't do anything with KM_MAYFAIL, forgetting that it's kmem_alloc() that uses it... New patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-02 08:03:30.071824780 +1000 @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( ASSERT(pag->pag_ici_init); ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); + ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); if (!ilist) return 0; From owner-xfs@oss.sgi.com Thu May 1 15:09:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:09:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m41M9lAY002716 for ; Thu, 1 May 2008 15:09:51 -0700 X-ASG-Debug-ID: 1209679831-08ef02060000-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 E30FB12ACD2E; Thu, 1 May 2008 15:10:31 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Iy9334tvS1Uiptn8; Thu, 01 May 2008 15:10:31 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jrgz0-0002Sc-UJ; Thu, 01 May 2008 22:10:30 +0000 Date: Thu, 1 May 2008 18:10:30 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Subject: Re: [PATCH] Don't allow memory reclaim to wait on the filesystem in inode writeback Message-ID: <20080501221030.GA4857@infradead.org> References: <20080501122611.GK108924158@sgi.com> <20080501131521.GA7435@infradead.org> <20080501220825.GN108924158@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220825.GN108924158@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209679831 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.1, rules version 3.1.49397 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15745 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 08:08:25AM +1000, David Chinner wrote: > Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-02 08:03:30.071824780 +1000 > @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( > ASSERT(pag->pag_ici_init); > > ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); > - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); > + ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); > if (!ilist) > return 0; Looks good. From owner-xfs@oss.sgi.com Thu May 1 15:42:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 15:42:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m41Mg4Y9007090 for ; Thu, 1 May 2008 15:42:06 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA02888; Fri, 2 May 2008 08:42:41 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m41MgdsT151735294; Fri, 2 May 2008 08:42:40 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m41MgbZj153156483; Fri, 2 May 2008 08:42:37 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 2 May 2008 08:42:37 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: xfsqa 166 failure Message-ID: <20080501224237.GO108924158@sgi.com> References: <20080501205004.GA30384@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501205004.GA30384@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15746 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 01, 2008 at 10:50:04PM +0200, Christoph Hellwig wrote: > Looks like the awk on my system (mawk-1.3.3-11 from Debian unstable) doesn't > like the regex used in there. I guess it's some kind of GNU awk > extension: > > 166 [ 2583.856446] XFS mounting filesystem hdd > [ 2583.871549] Ending clean XFS mount for filesystem: hdd > - output mismatch (see 166.out.bad) > 2,6c2,3 > < 0: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD > < 1: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD > < 2: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD > < 3: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD > < 4: [AA..BB] XX..YY AG (AA..BB) RIGHT GOOD > --- > > awk: line 9: regular expression compile failed (missing operand) > * is the extent unwritten? * gawk supports C comment syntax inside procedure blocks and doesn't interpret them as regexes. I think the standard comment syntax is supposed to be like bash - use "#". Of course, the gawk man page doesn't define comment syntax at all, but mawk does. Does the patch below fix it? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- xfstests/166 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: xfs-cmds/xfstests/166 =================================================================== --- xfs-cmds.orig/xfstests/166 2008-04-28 13:54:14.000000000 +1000 +++ xfs-cmds/xfstests/166 2008-05-02 08:39:46.746511614 +1000 @@ -40,7 +40,7 @@ _filter_blocks() unwritten2 = ((1048576/512) / 2) - 2 * written_size } - /* is the extent unwritten? */ + # is the extent unwritten? unwritten_ext = 0; if ($7 >= 10000) unwritten_ext = 1; From owner-xfs@oss.sgi.com Thu May 1 17:09:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 17:09:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m42099F6014328 for ; Thu, 1 May 2008 17:09:12 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA04820; Fri, 2 May 2008 10:09:46 +1000 Date: Fri, 02 May 2008 10:13:38 +1000 To: "Christoph Hellwig" Subject: Re: REVIEW: ASCII CI support in xfsprogs From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" , xfs-dev Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080501131725.GB7435@infradead.org> Message-ID: In-Reply-To: <20080501131725.GB7435@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4209DF6014339 X-archive-position: 15747 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 01 May 2008 23:17:25 +1000, Christoph Hellwig wrote: > On Thu, May 01, 2008 at 02:37:11PM +1000, Barry Naujok wrote: >> I've reworked xfsprogs userspace tools from scratch with ASCII CI >> support >> only. Much simpler than previous patches with Unicode CI. >> >> One issue that sort of bugs me a bit is I've maintained the same output >> as >> the original IRIX mkfs.xfs with CI mode: >> naming =version 2 bsize=4096 mixed-case=Y|N >> >> where "N" = CI enabled and "Y" = normal case-senstive filesystem. >> >> Should this be changed to something clearer? > > I'd prefer something cleaner. Like case-insensitive=Y|N. Yes, I was going to do "ascii-ci=Y|N", got to keep it clear in only does CI for A-Z. > Otherwise > the patch looks fine, but I wonder if you shouldn't better backport the > xfs_dir* files from the kernel completely instead of applying the > changes selectively, otherwise we'll get totoally out of sync codebases. I was thinking of that, but libxfs is pretty out of date anyway from all the cleanup changes that have occured and would like to sync them back at some stage in the near future. The sync would bring those other changes in at that time (Nathan can correct me if I misunderstand the sync process!) Barry. From owner-xfs@oss.sgi.com Thu May 1 19:08:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 19:08:39 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4228JgW020381 for ; Thu, 1 May 2008 19:08:19 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id 39995908A7; Thu, 1 May 2008 19:09:02 -0700 (PDT) Received: from blub.melbourne.sgi.com (mail@blub.melbourne.sgi.com [134.14.54.217]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with SMTP id m4228vjm875203; Fri, 2 May 2008 12:08:57 +1000 (AEST) Received: (nullmailer pid 4892 invoked by uid 1000); Fri, 02 May 2008 01:55:39 -0000 From: xaiki@sgi.com To: xfs-dev@sgi.com Cc: xfs@oss.sgi.com, Niv Sardi , Niv Sardi Subject: [PATCH] Use xfs_d_alloc_anon for DM rdwr using handle code. Date: Fri, 2 May 2008 11:55:39 +1000 Message-Id: <1209693339-4861-3-git-send-email-xaiki@sgi.com> X-Mailer: git-send-email 1.5.5.1 In-Reply-To: <1209693339-4861-2-git-send-email-xaiki@sgi.com> References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <1209693339-4861-2-git-send-email-xaiki@sgi.com> X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15749 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs From: Niv Sardi When doing invisible IO through the DMAPI we only require a handle, but that doesn't give us a file descriptor that we require, before we used to call d_alloc_annon() that created an annonymous disconnected but hashed dentry, from which we extracted the file descriptor, if no one else uses the dentry, the dput on fclose should unhash the dentry and (if not used) tear appart the dentry, and call into xfs_inactive where we will send the DESTROY EVENT. The issue was, that in some cases (as the dentry was hashed) another thread could use the same dentry inibiting the unhash on the first dput, and hence leaving that dentry on the unused list for ever (or untill caches are dropped). This uses the cuted down d_alloc_annon xfs implementation so that the dentry is never hashed. Signed-off-by: Niv Sardi --- fs/xfs/dmapi/xfs_dm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/fs/xfs/dmapi/xfs_dm.c b/fs/xfs/dmapi/xfs_dm.c index c4f57a9..5aa00a9 100644 --- a/fs/xfs/dmapi/xfs_dm.c +++ b/fs/xfs/dmapi/xfs_dm.c @@ -1126,7 +1126,7 @@ xfs_dm_rdwr( igrab(inode); - dentry = d_alloc_anon(inode); + dentry = xfs_d_alloc_anon(inode); if (dentry == NULL) { iput(inode); return ENOMEM; -- 1.5.5.1 From owner-xfs@oss.sgi.com Thu May 1 19:08:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 19:08:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4228I6c020380 for ; Thu, 1 May 2008 19:08:19 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id DBC0F908A6; Thu, 1 May 2008 19:08:59 -0700 (PDT) Received: from blub.melbourne.sgi.com (mail@blub.melbourne.sgi.com [134.14.54.217]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with SMTP id m4228tjm857889; Fri, 2 May 2008 12:08:55 +1000 (AEST) Received: (nullmailer pid 4887 invoked by uid 1000); Fri, 02 May 2008 01:55:39 -0000 From: xaiki@sgi.com To: xfs-dev@sgi.com Cc: xfs@oss.sgi.com Subject: Don't use d_alloc_anon for open_by_handle Date: Fri, 2 May 2008 11:55:37 +1000 Message-Id: <1209693339-4861-1-git-send-email-xaiki@sgi.com> X-Mailer: git-send-email 1.5.5.1 In-Reply-To: <20080501070244.GH108924158@sgi.com> References: <20080501070244.GH108924158@sgi.com> X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15748 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs One of our DMAPI user found that in some cases inodes weren't getting through xfs_inactive() in any reasonable amount of time. Investigation tracked it down to the use of d_alloc_anon() combined with another thread accessing the same inode via an open(). So we introduce a stripped down version of d_alloc_anon, that won't try to find an existing dentry, nor will hash it. From owner-xfs@oss.sgi.com Thu May 1 19:08:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 19:08:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4228LpH020401 for ; Thu, 1 May 2008 19:08:21 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id 33B56908A6; Thu, 1 May 2008 19:09:04 -0700 (PDT) Received: from blub.melbourne.sgi.com (mail@blub.melbourne.sgi.com [134.14.54.217]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with SMTP id m42290jm880403; Fri, 2 May 2008 12:09:01 +1000 (AEST) Received: (nullmailer pid 4890 invoked by uid 1000); Fri, 02 May 2008 01:55:39 -0000 From: xaiki@sgi.com To: xfs-dev@sgi.com Cc: xfs@oss.sgi.com, Niv Sardi , Niv Sardi Subject: [PATCH] Don't use hashed dentries when doing open_by_handle Date: Fri, 2 May 2008 11:55:38 +1000 Message-Id: <1209693339-4861-2-git-send-email-xaiki@sgi.com> X-Mailer: git-send-email 1.5.5.1 In-Reply-To: <1209693339-4861-1-git-send-email-xaiki@sgi.com> References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15750 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs From: Niv Sardi Open by handle only require a handle, but that doesn't give us a file descriptor that we require for any IO, before we used to call d_alloc_annon() that created an annonymous disconnected but hashed dentry, from which we extracted the file descriptor, if no one else uses the dentry, the dput on fclose should unhash the dentry and (if not used) tear it appart, A repported issue is the DMAPI code was, that in some cases (as the dentry was hashed) another thread could use the same dentry inibiting the unhash on the first dput, and hence leaving that dentry on the unused list for ever (or untill caches are dropped). This cuts down d_alloc_annon to a subset that will only give us an anon dentry, and NOT hash it. Signed-off-by: Niv Sardi --- fs/xfs/linux-2.6/xfs_ioctl.c | 2 +- fs/xfs/linux-2.6/xfs_iops.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 4c82a05..66ed268 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c @@ -311,7 +311,7 @@ xfs_open_by_handle( return new_fd; } - dentry = d_alloc_anon(inode); + dentry = xfs_d_alloc_anon(inode); if (dentry == NULL) { iput(inode); put_unused_fd(new_fd); diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index cc4abd3..cf5e83f 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -190,6 +190,23 @@ xfs_ichgtime_fast( mark_inode_dirty_sync(inode); } +struct dentry * +xfs_d_alloc_anon(struct inode *inode) +{ + static const struct qstr anonstring = { .name = ""}; + struct dentry *res; + + res = d_alloc(NULL, &anonstring); + if (!res) + return NULL; + + /* attach a disconnected dentry */ + res->d_sb = inode->i_sb; + res->d_parent = res; + res->d_inode = inode; + + return res; +} /* * Pull the link count and size up from the xfs inode to the linux inode -- 1.5.5.1 From owner-xfs@oss.sgi.com Thu May 1 19:28:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 19:29:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m422Sic5022606 for ; Thu, 1 May 2008 19:28:48 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA07588; Fri, 2 May 2008 12:29:24 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 0CA8C58C4C15; Fri, 2 May 2008 12:29:23 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981091 - Don't allow memory reclaim to wait on the filesystem in inode writeback Message-Id: <20080502022924.0CA8C58C4C15@chook.melbourne.sgi.com> Date: Fri, 2 May 2008 12:29:23 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15751 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. Date: Fri May 2 12:29:03 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31015a fs/xfs/xfs_inode.c - 1.501 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.501&r2=text&tr2=1.500&f=h - Allocate the inode cluster list with KM_NOFS to prevent reclaim from recursing into the filesystem. From owner-xfs@oss.sgi.com Thu May 1 23:06:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 23:06:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4266Cnw007535 for ; Thu, 1 May 2008 23:06:16 -0700 X-ASG-Debug-ID: 1209708415-5e1d010e0000-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 4ABAE11900A; Thu, 1 May 2008 23:06:55 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id gUqr0BdDcDJoTnt4; Thu, 01 May 2008 23:06:55 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JroQ2-0003Ng-JM; Fri, 02 May 2008 06:06:54 +0000 Date: Fri, 2 May 2008 02:06:54 -0400 From: Christoph Hellwig To: xaiki@sgi.com Cc: xfs-dev@sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Don't use d_alloc_anon for open_by_handle Subject: Re: Don't use d_alloc_anon for open_by_handle Message-ID: <20080502060654.GA23912@infradead.org> References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1209693339-4861-1-git-send-email-xaiki@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209708417 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.1, rules version 3.1.49428 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15753 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 11:55:37AM +1000, xaiki@sgi.com wrote: > One of our DMAPI user found that in some cases inodes weren't getting through > xfs_inactive() in any reasonable amount of time. Investigation tracked it down > to the use of d_alloc_anon() combined with another thread accessing the same > inode via an open(). > > So we introduce a stripped down version of d_alloc_anon, that won't try to find > an existing dentry, nor will hash it. No, this is even more buggy than using d_alloc_anon. What really needs to be done in the handle code is to do the full reconnect logic nfsd would be doing. Aka you should be using exportfs_decode_fh and update xfs's fh_to_dentry method to accept the file handle type used by the handle interface. From owner-xfs@oss.sgi.com Thu May 1 23:04:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 01 May 2008 23:04:39 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4264EqO007351 for ; Thu, 1 May 2008 23:04:21 -0700 X-ASG-Debug-ID: 1209708296-44d800430000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1E07712ADFD8; Thu, 1 May 2008 23:04:57 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id EK07mUhccVyHHqAB; Thu, 01 May 2008 23:04:57 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4264oF3022171 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 2 May 2008 08:04:50 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4264ov2022168; Fri, 2 May 2008 08:04:50 +0200 Date: Fri, 2 May 2008 08:04:50 +0200 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfsqa 166 failure Subject: Re: xfsqa 166 failure Message-ID: <20080502060450.GA21443@lst.de> References: <20080501205004.GA30384@lst.de> <20080501224237.GO108924158@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501224237.GO108924158@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209708299 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.1, rules version 3.1.49427 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15752 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 08:42:37AM +1000, David Chinner wrote: > gawk supports C comment syntax inside procedure blocks and doesn't > interpret them as regexes. I think the standard comment syntax > is supposed to be like bash - use "#". Of course, the gawk man > page doesn't define comment syntax at all, but mawk does. > > Does the patch below fix it? Yes, this fixes it. From owner-xfs@oss.sgi.com Fri May 2 03:11:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:11:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42ABNfg028723 for ; Fri, 2 May 2008 03:11:28 -0700 X-ASG-Debug-ID: 1209723126-5c9f03b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from outbound4-dub-R.bigfish.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1255BADE1CF for ; Fri, 2 May 2008 03:12:07 -0700 (PDT) Received: from outbound4-dub-R.bigfish.com (outbound-dub.frontbridge.com [213.199.154.16]) by cuda.sgi.com with ESMTP id kI7PUUc9eLqd6eK0 for ; Fri, 02 May 2008 03:12:07 -0700 (PDT) Received: from outbound4-dub.bigfish.com (localhost.localdomain [127.0.0.1]) by outbound4-dub-R.bigfish.com (Postfix) with ESMTP id 5DE3417C047D for ; Fri, 2 May 2008 10:08:25 +0000 (UTC) Received: from mail72-dub-R.bigfish.com (unknown [10.5.252.3]) by outbound4-dub.bigfish.com (Postfix) with ESMTP id 36940136805C for ; Fri, 2 May 2008 10:08:25 +0000 (UTC) Received: from mail72-dub (localhost.localdomain [127.0.0.1]) by mail72-dub-R.bigfish.com (Postfix) with ESMTP id 2702410082E2 for ; Fri, 2 May 2008 10:08:24 +0000 (UTC) X-BigFish: V X-MS-Exchange-Organization-Antispam-Report: OrigIP: 72.20.130.72;Service: EHS Received: by mail72-dub (MessageSwitch) id 120972290332857_6392; Fri, 2 May 2008 10:08:23 +0000 (UCT) Received: from mailus1.cgg.com (72-20-130-72.cgg.com [72.20.130.72]) by mail72-dub.bigfish.com (Postfix) with ESMTP id 7CACCA78073 for ; Fri, 2 May 2008 10:08:22 +0000 (UTC) Received: from in02ex01.int.cgg.com (in02ex01.int.cgg.com [192.168.53.201]) by mailus1.cgg.com (MailerCGG) with ESMTP id 5862A1D4001 for ; Fri, 2 May 2008 05:08:17 -0500 (CDT) MIME-Version: 1.0 X-ASG-Orig-Subj: query Subject: query X-MimeOLE: Produced By Microsoft Exchange V6.0.6603.0 Date: Fri, 2 May 2008 15:38:13 +0530 Message-ID: <87604E51C77C4F4988CF1C7F088D562D9BE614@in02ex01.int.cgg.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: query Thread-Index: AcisPG6oYAb3wn1+Sta+tXbvpEJUPA== From: "Nandedkar, Rishiraj" To: X-Barracuda-Connect: outbound-dub.frontbridge.com[213.199.154.16] X-Barracuda-Start-Time: 1209723128 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4596 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 361 X-archive-position: 15754 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Rishiraj.Nandedkar@cggveritas.com Precedence: bulk X-list: xfs Hi, I would like to know which Linux version support XFS file system. I am working on linux3.5 and 4.3 and 7.3 but all these versions not support XFS. Please let me know which Linux version supports xfs and where can I get this versions Thanks in advance Thx & Regards Rishi Nandedkar It support CGGVERITAS [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Fri May 2 03:34:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:35:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42AYtmb030501 for ; Fri, 2 May 2008 03:34:57 -0700 X-ASG-Debug-ID: 1209724538-0a2901b90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A8C04ADE326 for ; Fri, 2 May 2008 03:35:39 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id l6jE6Y6Cp8wBRDIY for ; Fri, 02 May 2008 03:35:39 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 8B7A417F538; Fri, 2 May 2008 12:35:38 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 5509217F535; Fri, 2 May 2008 12:35:38 +0200 (CEST) Date: Fri, 2 May 2008 12:35:41 +0200 From: Emmanuel Florac To: "Nandedkar, Rishiraj" Cc: X-ASG-Orig-Subj: Re: query Subject: Re: query Message-ID: <20080502123541.2216848e@harpe.intellique.com> In-Reply-To: <87604E51C77C4F4988CF1C7F088D562D9BE614@in02ex01.int.cgg.com> References: <87604E51C77C4F4988CF1C7F088D562D9BE614@in02ex01.int.cgg.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1209724539 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4737 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.1, rules version 3.1.49447 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m42AYvmb030503 X-archive-position: 15755 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Fri, 2 May 2008 15:38:13 +0530 "Nandedkar, Rishiraj" écrivait: > I would like to know which Linux version support XFS file system. I am > working on linux3.5 and 4.3 and 7.3 but all these versions not support > XFS. You are misleaded. There is no such thing as "linux 3.5" or "linux 7.3". Current Linux kernel version is 2.6.25. However there exists hundreds of GNU/Linux distributions, with many different numbering schemes, that may come with or without XFS support. Some current common distributions : Debian GNU/Linux 4.0, SuSE Linux Enterprise Server 10.0, RedHat Enterprise Linux 5.0... See http://distrowatch.com/ to find about most of them. Most distributions (except RedHat Enterprise and SuSE Enterprise) may be downloaded (and used) for free. Don't stick with an outdated one! As far as I know, all distributions less than 5 years old should support XFS natively. So either you use some very old distribution (like RedHat Linux 7.3, which is antique), or you didn't looked for the right thing at the right place. -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Fri May 2 03:42:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:42:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42AgNLD031283 for ; Fri, 2 May 2008 03:42:24 -0700 X-ASG-Debug-ID: 1209724987-0e2301b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from outbound9-dub-R.bigfish.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4DBCEADE4D1 for ; Fri, 2 May 2008 03:43:07 -0700 (PDT) Received: from outbound9-dub-R.bigfish.com (outbound-dub.frontbridge.com [213.199.154.16]) by cuda.sgi.com with ESMTP id U3Ehdi135iisQ6Wf for ; Fri, 02 May 2008 03:43:07 -0700 (PDT) Received: from outbound9-dub.bigfish.com (localhost.localdomain [127.0.0.1]) by outbound9-dub-R.bigfish.com (Postfix) with ESMTP id 1E7F1E1A5D0; Fri, 2 May 2008 10:43:07 +0000 (UTC) Received: from mail102-dub-R.bigfish.com (unknown [10.5.252.3]) by outbound9-dub.bigfish.com (Postfix) with ESMTP id 0F5B51390043; Fri, 2 May 2008 10:43:07 +0000 (UTC) Received: from mail102-dub (localhost.localdomain [127.0.0.1]) by mail102-dub-R.bigfish.com (Postfix) with ESMTP id 0B73E19381B1; Fri, 2 May 2008 10:43:05 +0000 (UTC) X-BigFish: V X-MS-Exchange-Organization-Antispam-Report: OrigIP: 72.20.130.72;Service: EHS Received: by mail102-dub (MessageSwitch) id 1209724983619862_23921; Fri, 2 May 2008 10:43:03 +0000 (UCT) Received: from mailus1.cgg.com (72-20-130-72.cgg.com [72.20.130.72]) by mail102-dub.bigfish.com (Postfix) with ESMTP id B6C8FB20083; Fri, 2 May 2008 10:43:02 +0000 (UTC) Received: from in02ex01.int.cgg.com (in02ex01.int.cgg.com [192.168.53.201]) by mailus1.cgg.com (MailerCGG) with ESMTP id 02AB31D4001; Fri, 2 May 2008 05:42:56 -0500 (CDT) MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-ASG-Orig-Subj: RE: query Subject: RE: query content-class: urn:content-classes:message X-MimeOLE: Produced By Microsoft Exchange V6.0.6603.0 Date: Fri, 2 May 2008 16:12:58 +0530 Message-ID: <87604E51C77C4F4988CF1C7F088D562D38BE0A@in02ex01.int.cgg.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: query Thread-Index: AcisQEf/rhC83n/yRdSSvp0kNcDTUgAAErtQ From: "Nandedkar, Rishiraj" To: "Emmanuel Florac" Cc: X-Barracuda-Connect: outbound-dub.frontbridge.com[213.199.154.16] X-Barracuda-Start-Time: 1209724988 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4842 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.1, rules version 3.1.49447 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m42AgPLD031285 X-archive-position: 15756 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Rishiraj.Nandedkar@cggveritas.com Precedence: bulk X-list: xfs Hi, Thank you for update but Linux 7.3 means red hat 7 update 3 red hat 3 update 5.In our system we are unable to detect disk which is having file system in XFS format. Our system is not able to support it. 2.4.21-32.EL is kenal version on our systems. Please let me know which version should I use in redhat.I am trying this with fedora core 3 Thx rishi -----Original Message----- From: Emmanuel Florac [mailto:eflorac@intellique.com] Sent: Friday, May 02, 2008 4:06 PM To: Nandedkar, Rishiraj Cc: xfs@oss.sgi.com Subject: Re: query Le Fri, 2 May 2008 15:38:13 +0530 "Nandedkar, Rishiraj" écrivait: > I would like to know which Linux version support XFS file system. I am > working on linux3.5 and 4.3 and 7.3 but all these versions not support > XFS. You are misleaded. There is no such thing as "linux 3.5" or "linux 7.3". Current Linux kernel version is 2.6.25. However there exists hundreds of GNU/Linux distributions, with many different numbering schemes, that may come with or without XFS support. Some current common distributions : Debian GNU/Linux 4.0, SuSE Linux Enterprise Server 10.0, RedHat Enterprise Linux 5.0... See http://distrowatch.com/ to find about most of them. Most distributions (except RedHat Enterprise and SuSE Enterprise) may be downloaded (and used) for free. Don't stick with an outdated one! As far as I know, all distributions less than 5 years old should support XFS natively. So either you use some very old distribution (like RedHat Linux 7.3, which is antique), or you didn't looked for the right thing at the right place. -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Fri May 2 03:51:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:52:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_62 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42ApfDc032085 for ; Fri, 2 May 2008 03:51:43 -0700 X-ASG-Debug-ID: 1209725541-377601530000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 35BC5119C4B for ; Fri, 2 May 2008 03:52:22 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id xgD4Fcm3aK0F3gHN for ; Fri, 02 May 2008 03:52:22 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m42AqFF3018072 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 12:52:15 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m42AqFFO018070 for xfs@oss.sgi.com; Fri, 2 May 2008 12:52:15 +0200 Date: Fri, 2 May 2008 12:52:15 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] sanitize xfs_initialize_vnode Subject: [PATCH] sanitize xfs_initialize_vnode Message-ID: <20080502105215.GA17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209725545 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.1, rules version 3.1.49448 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15757 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Sanitize setting up the Linux indode. Setting up the xfs_inode <-> inode link is opencoded in xfs_iget_core now because that's the only place it needs to be done, xfs_initialize_vnode is renamed to xfs_setup_inode and loses all superflous paramaters. The check for I_NEW is removed because it always is true and the di_mode check moves into xfs_iget_core because it's only needed there. xfs_set_inodeops and xfs_revalidate_inode are merged into xfs_setup_inode and the whole things is moved into xfs_iops.c where it belongs. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:51:46.000000000 +0200 @@ -777,7 +777,7 @@ out_error: return error; } -const struct inode_operations xfs_inode_operations = { +static const struct inode_operations xfs_inode_operations = { .permission = xfs_vn_permission, .truncate = xfs_vn_truncate, .getattr = xfs_vn_getattr, @@ -789,7 +789,7 @@ const struct inode_operations xfs_inode_ .fallocate = xfs_vn_fallocate, }; -const struct inode_operations xfs_dir_inode_operations = { +static const struct inode_operations xfs_dir_inode_operations = { .create = xfs_vn_create, .lookup = xfs_vn_lookup, .link = xfs_vn_link, @@ -808,7 +808,7 @@ const struct inode_operations xfs_dir_in .listxattr = xfs_vn_listxattr, }; -const struct inode_operations xfs_symlink_inode_operations = { +static const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, .put_link = xfs_vn_put_link, @@ -820,3 +820,95 @@ const struct inode_operations xfs_symlin .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, }; + +STATIC void +xfs_diflags_to_iflags( + struct inode *inode, + struct xfs_inode *ip) +{ + if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) + inode->i_flags |= S_IMMUTABLE; + else + inode->i_flags &= ~S_IMMUTABLE; + if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) + inode->i_flags |= S_APPEND; + else + inode->i_flags &= ~S_APPEND; + if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) + inode->i_flags |= S_SYNC; + else + inode->i_flags &= ~S_SYNC; + if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) + inode->i_flags |= S_NOATIME; + else + inode->i_flags &= ~S_NOATIME; +} + +/* + * Initialize the Linux inode, set up the operation vectors and + * unlock the inode. + * + * When reading existing inodes from disk this is called directly + * from xfs_iget, when creating a new inode it is called from + * xfs_ialloc after setting up the inode. + */ +void +xfs_setup_inode( + struct xfs_inode *ip) +{ + struct inode *inode = ip->i_vnode; + + inode->i_mode = ip->i_d.di_mode; + inode->i_nlink = ip->i_d.di_nlink; + inode->i_uid = ip->i_d.di_uid; + inode->i_gid = ip->i_d.di_gid; + + switch (inode->i_mode & S_IFMT) { + case S_IFBLK: + case S_IFCHR: + inode->i_rdev = + MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, + sysv_minor(ip->i_df.if_u2.if_rdev)); + break; + default: + inode->i_rdev = 0; + break; + } + + inode->i_generation = ip->i_d.di_gen; + i_size_write(inode, ip->i_d.di_size); + inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; + inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; + inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; + inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; + inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; + inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; + xfs_diflags_to_iflags(inode, ip); + xfs_iflags_clear(ip, XFS_IMODIFIED); + + switch (inode->i_mode & S_IFMT) { + case S_IFREG: + inode->i_op = &xfs_inode_operations; + inode->i_fop = &xfs_file_operations; + inode->i_mapping->a_ops = &xfs_address_space_operations; + break; + case S_IFDIR: + inode->i_op = &xfs_dir_inode_operations; + inode->i_fop = &xfs_dir_file_operations; + break; + case S_IFLNK: + inode->i_op = &xfs_symlink_inode_operations; + if (!(ip->i_df.if_flags & XFS_IFINLINE)) + inode->i_mapping->a_ops = &xfs_address_space_operations; + break; + default: + inode->i_op = &xfs_inode_operations; + init_special_inode(inode, inode->i_mode, inode->i_rdev); + break; + } + + xfs_iflags_clear(ip, XFS_INEW); + barrier(); + + unlock_new_inode(inode); +} Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 08:41:35.000000000 +0200 @@ -18,9 +18,7 @@ #ifndef __XFS_IOPS_H__ #define __XFS_IOPS_H__ -extern const struct inode_operations xfs_inode_operations; -extern const struct inode_operations xfs_dir_inode_operations; -extern const struct inode_operations xfs_symlink_inode_operations; +struct xfs_inode; extern const struct file_operations xfs_file_operations; extern const struct file_operations xfs_dir_file_operations; @@ -28,10 +26,11 @@ extern const struct file_operations xfs_ extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); -struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int); +extern void xfs_setup_inode(struct xfs_inode *); + #define xfs_vtoi(vp) \ ((struct xfs_inode *)vn_to_inode(vp)->i_private) Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 08:41:35.000000000 +0200 @@ -155,12 +155,9 @@ EXPORT_SYMBOL(kmem_zone_free); EXPORT_SYMBOL(kmem_zone_init); EXPORT_SYMBOL(kmem_zone_zalloc); EXPORT_SYMBOL(xfs_address_space_operations); -EXPORT_SYMBOL(xfs_dir_inode_operations); EXPORT_SYMBOL(xfs_dir_file_operations); -EXPORT_SYMBOL(xfs_inode_operations); EXPORT_SYMBOL(xfs_file_operations); EXPORT_SYMBOL(xfs_invis_file_operations); -EXPORT_SYMBOL(xfs_symlink_inode_operations); EXPORT_SYMBOL(xfs_buf_delwri_dequeue); EXPORT_SYMBOL(_xfs_buf_find); EXPORT_SYMBOL(xfs_buf_iostart); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-02 08:41:34.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-02 08:51:43.000000000 +0200 @@ -558,115 +558,6 @@ xfs_max_file_offset( return (((__uint64_t)pagefactor) << bitshift) - 1; } -STATIC_INLINE void -xfs_set_inodeops( - struct inode *inode) -{ - switch (inode->i_mode & S_IFMT) { - case S_IFREG: - inode->i_op = &xfs_inode_operations; - inode->i_fop = &xfs_file_operations; - inode->i_mapping->a_ops = &xfs_address_space_operations; - break; - case S_IFDIR: - inode->i_op = &xfs_dir_inode_operations; - inode->i_fop = &xfs_dir_file_operations; - break; - case S_IFLNK: - inode->i_op = &xfs_symlink_inode_operations; - if (!(XFS_I(inode)->i_df.if_flags & XFS_IFINLINE)) - inode->i_mapping->a_ops = &xfs_address_space_operations; - break; - default: - inode->i_op = &xfs_inode_operations; - init_special_inode(inode, inode->i_mode, inode->i_rdev); - break; - } -} - -STATIC_INLINE void -xfs_revalidate_inode( - xfs_mount_t *mp, - bhv_vnode_t *vp, - xfs_inode_t *ip) -{ - struct inode *inode = vn_to_inode(vp); - - inode->i_mode = ip->i_d.di_mode; - inode->i_nlink = ip->i_d.di_nlink; - inode->i_uid = ip->i_d.di_uid; - inode->i_gid = ip->i_d.di_gid; - - switch (inode->i_mode & S_IFMT) { - case S_IFBLK: - case S_IFCHR: - inode->i_rdev = - MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, - sysv_minor(ip->i_df.if_u2.if_rdev)); - break; - default: - inode->i_rdev = 0; - break; - } - - inode->i_generation = ip->i_d.di_gen; - i_size_write(inode, ip->i_d.di_size); - inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; - inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; - inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; - inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; - inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; - inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; - if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) - inode->i_flags |= S_IMMUTABLE; - else - inode->i_flags &= ~S_IMMUTABLE; - if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) - inode->i_flags |= S_APPEND; - else - inode->i_flags &= ~S_APPEND; - if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) - inode->i_flags |= S_SYNC; - else - inode->i_flags &= ~S_SYNC; - if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) - inode->i_flags |= S_NOATIME; - else - inode->i_flags &= ~S_NOATIME; - xfs_iflags_clear(ip, XFS_IMODIFIED); -} - -void -xfs_initialize_vnode( - struct xfs_mount *mp, - bhv_vnode_t *vp, - struct xfs_inode *ip) -{ - struct inode *inode = vn_to_inode(vp); - - if (!ip->i_vnode) { - ip->i_vnode = vp; - inode->i_private = ip; - } - - /* - * We need to set the ops vectors, and unlock the inode, but if - * we have been called during the new inode create process, it is - * too early to fill in the Linux inode. We will get called a - * second time once the inode is properly set up, and then we can - * finish our work. - */ - if (ip->i_d.di_mode != 0 && (inode->i_state & I_NEW)) { - xfs_revalidate_inode(mp, vp, ip); - xfs_set_inodeops(inode); - - xfs_iflags_clear(ip, XFS_INEW); - barrier(); - - unlock_new_inode(inode); - } -} - int xfs_blkdev_get( xfs_mount_t *mp, Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-02 08:41:35.000000000 +0200 @@ -72,9 +72,6 @@ struct block_device; extern __uint64_t xfs_max_file_offset(unsigned int); -extern void xfs_initialize_vnode(struct xfs_mount *mp, bhv_vnode_t *vp, - struct xfs_inode *ip); - extern void xfs_flush_inode(struct xfs_inode *); extern void xfs_flush_device(struct xfs_inode *); Index: linux-2.6-xfs/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_iget.c 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_iget.c 2008-05-02 08:53:18.000000000 +0200 @@ -288,10 +288,17 @@ finish_inode: *ipp = ip; /* + * Set up the Linux with the Linux inode. + */ + ip->i_vnode = inode; + inode->i_private = ip; + + /* * If we have a real type for an on-disk inode, we can set ops(&unlock) * now. If it's a new inode being created, xfs_ialloc will handle it. */ - xfs_initialize_vnode(mp, inode, ip); + if (ip->i_d.di_mode != 0) + xfs_setup_inode(ip); return 0; } Index: linux-2.6-xfs/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-05-02 08:41:27.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-05-02 08:41:35.000000000 +0200 @@ -1046,7 +1046,6 @@ xfs_ialloc( { xfs_ino_t ino; xfs_inode_t *ip; - bhv_vnode_t *vp; uint flags; int error; @@ -1077,7 +1076,6 @@ xfs_ialloc( } ASSERT(ip != NULL); - vp = XFS_ITOV(ip); ip->i_d.di_mode = (__uint16_t)mode; ip->i_d.di_onlink = 0; ip->i_d.di_nlink = nlink; @@ -1220,7 +1218,7 @@ xfs_ialloc( xfs_trans_log_inode(tp, ip, flags); /* now that we have an i_mode we can setup inode ops and unlock */ - xfs_initialize_vnode(tp->t_mountp, vp, ip); + xfs_setup_inode(ip); *ipp = ip; return 0; From owner-xfs@oss.sgi.com Fri May 2 03:57:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:57:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42AvNJ5032723 for ; Fri, 2 May 2008 03:57:23 -0700 X-ASG-Debug-ID: 1209725883-097201380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 122FF161FEE2 for ; Fri, 2 May 2008 03:58:04 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id dGknxi49RdhJcn36 for ; Fri, 02 May 2008 03:58:04 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m42AvvF3018340 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 12:57:57 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m42AvvHY018338 for xfs@oss.sgi.com; Fri, 2 May 2008 12:57:57 +0200 Date: Fri, 2 May 2008 12:57:57 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/2] merge xfs_rmdir into xfs_remove Subject: [PATCH 1/2] merge xfs_rmdir into xfs_remove Message-ID: <20080502105757.GB17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209725887 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.1, rules version 3.1.49448 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15758 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_remove and xfs_rmdir are almost the same with a little more work performed in xfs_rmdir due to the . and .. entries. This patch merges xfs_rmdir into xfs_remove and performs these actions conditionally. Also clean up the error handling which was a nightmare in both versions before. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-05-01 22:56:57.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:24.000000000 +0200 @@ -2135,13 +2135,6 @@ again: #endif } -#ifdef DEBUG -#define REMOVE_DEBUG_TRACE(x) {remove_which_error_return = (x);} -int remove_which_error_return = 0; -#else /* ! DEBUG */ -#define REMOVE_DEBUG_TRACE(x) -#endif /* ! DEBUG */ - int xfs_remove( xfs_inode_t *dp, @@ -2150,6 +2143,7 @@ xfs_remove( { xfs_mount_t *mp = dp->i_mount; xfs_trans_t *tp = NULL; + int is_dir = S_ISDIR(ip->i_d.di_mode); int error = 0; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; @@ -2157,8 +2151,11 @@ xfs_remove( int committed; int link_zero; uint resblks; + uint trans; + uint log_count; xfs_itrace_entry(dp); + xfs_itrace_entry(ip); if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); @@ -2171,19 +2168,25 @@ xfs_remove( return error; } - xfs_itrace_entry(ip); - xfs_itrace_ref(ip); - error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error) - error = XFS_QM_DQATTACH(mp, ip, 0); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); + if (error) + goto std_return; + + error = XFS_QM_DQATTACH(mp, ip, 0); + if (error) goto std_return; + + if (is_dir) { + trans = XFS_TRANS_RMDIR; + log_count = XFS_DEFAULT_LOG_COUNT; + } else { + trans = XFS_TRANS_REMOVE; + log_count = XFS_REMOVE_LOG_COUNT; } - tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE); + tp = xfs_trans_alloc(mp, trans); cancel_flags = XFS_TRANS_RELEASE_LOG_RES; + /* * We try to get the real space reservation first, * allowing for directory btree deletion(s) implying @@ -2195,25 +2198,21 @@ xfs_remove( */ resblks = XFS_REMOVE_SPACE_RES(mp); error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + XFS_TRANS_PERM_LOG_RES, log_count); if (error == ENOSPC) { resblks = 0; error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + XFS_TRANS_PERM_LOG_RES, log_count); } if (error) { ASSERT(error != ENOSPC); - REMOVE_DEBUG_TRACE(__LINE__); - xfs_trans_cancel(tp, 0); - return error; + cancel_flags = 0; + goto out_trans_cancel; } error = xfs_lock_dir_and_entry(dp, ip); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - xfs_trans_cancel(tp, cancel_flags); - goto std_return; - } + if (error) + goto out_trans_cancel; /* * At this point, we've gotten both the directory and the entry @@ -2226,6 +2225,21 @@ xfs_remove( xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); /* + * If we're removing a directory perform some additional validation. + */ + if (is_dir) { + ASSERT(ip->i_d.di_nlink >= 2); + if (ip->i_d.di_nlink != 2) { + error = XFS_ERROR(ENOTEMPTY); + goto out_trans_cancel; + } + if (!xfs_dir_isempty(ip)) { + error = XFS_ERROR(ENOTEMPTY); + goto out_trans_cancel; + } + } + + /* * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); @@ -2233,39 +2247,64 @@ xfs_remove( &first_block, &free_list, resblks); if (error) { ASSERT(error != ENOENT); - REMOVE_DEBUG_TRACE(__LINE__); - goto error1; + goto out_bmap_cancel; } xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); + /* + * Bump the in memory generation count on the parent + * directory so that other can know that it has changed. + */ dp->i_gen++; xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); - error = xfs_droplink(tp, ip); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto error1; + if (is_dir) { + /* + * Drop the link from ip's "..". + */ + error = xfs_droplink(tp, dp); + if (error) + goto out_bmap_cancel; + + /* + * Drop the link from dp to ip. + */ + error = xfs_droplink(tp, ip); + if (error) + goto out_bmap_cancel; + } else { + /* + * When removing a non-directory we need to log the parent + * inode here for the i_gen update. For a directory this is + * done implicitly by the xfs_droplink call for the ".." entry. + */ + xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); } - /* Determine if this is the last link while + /* + * Drop the "." link from ip to self. + */ + error = xfs_droplink(tp, ip); + if (error) + goto out_bmap_cancel; + + /* + * Determine if this is the last link while * we are in the transaction. */ - link_zero = (ip)->i_d.di_nlink==0; + link_zero = (ip->i_d.di_nlink == 0); /* * If this is a synchronous mount, make sure that the * remove transaction goes to disk before returning to * the user. */ - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { + if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) xfs_trans_set_sync(tp); - } error = xfs_bmap_finish(&tp, &free_list, &committed); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto error_rele; - } + if (error) + goto out_bmap_cancel; error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); if (error) @@ -2277,39 +2316,27 @@ xfs_remove( * will get killed on last close in xfs_close() so we don't * have to worry about that. */ - if (link_zero && xfs_inode_is_filestream(ip)) + if (!is_dir && link_zero && xfs_inode_is_filestream(ip)) xfs_filestream_deassociate(ip); xfs_itrace_exit(ip); + xfs_itrace_exit(dp); -/* Fall through to std_return with error = 0 */ std_return: if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name->name, NULL, ip->i_d.di_mode, error, 0); + XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, error, 0); } + return error; - error1: + out_bmap_cancel: xfs_bmap_cancel(&free_list); cancel_flags |= XFS_TRANS_ABORT; + out_trans_cancel: xfs_trans_cancel(tp, cancel_flags); goto std_return; - - error_rele: - /* - * In this case make sure to not release the inode until after - * the current transaction is aborted. Releasing it beforehand - * can cause us to go to xfs_inactive and start a recursive - * transaction which can easily deadlock with the current one. - */ - xfs_bmap_cancel(&free_list); - cancel_flags |= XFS_TRANS_ABORT; - xfs_trans_cancel(tp, cancel_flags); - - goto std_return; } int @@ -2675,186 +2702,6 @@ std_return: } int -xfs_rmdir( - xfs_inode_t *dp, - struct xfs_name *name, - xfs_inode_t *cdp) -{ - xfs_mount_t *mp = dp->i_mount; - xfs_trans_t *tp; - int error; - xfs_bmap_free_t free_list; - xfs_fsblock_t first_block; - int cancel_flags; - int committed; - int last_cdp_link; - uint resblks; - - xfs_itrace_entry(dp); - - if (XFS_FORCED_SHUTDOWN(mp)) - return XFS_ERROR(EIO); - - if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, name->name, - NULL, cdp->i_d.di_mode, 0, 0); - if (error) - return XFS_ERROR(error); - } - - /* - * Get the dquots for the inodes. - */ - error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error) - error = XFS_QM_DQATTACH(mp, cdp, 0); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto std_return; - } - - tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR); - cancel_flags = XFS_TRANS_RELEASE_LOG_RES; - /* - * We try to get the real space reservation first, - * allowing for directory btree deletion(s) implying - * possible bmap insert(s). If we can't get the space - * reservation then we use 0 instead, and avoid the bmap - * btree insert(s) in the directory code by, if the bmap - * insert tries to happen, instead trimming the LAST - * block from the directory. - */ - resblks = XFS_REMOVE_SPACE_RES(mp); - error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); - if (error == ENOSPC) { - resblks = 0; - error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); - } - if (error) { - ASSERT(error != ENOSPC); - cancel_flags = 0; - goto error_return; - } - XFS_BMAP_INIT(&free_list, &first_block); - - /* - * Now lock the child directory inode and the parent directory - * inode in the proper order. This will take care of validating - * that the directory entry for the child directory inode has - * not changed while we were obtaining a log reservation. - */ - error = xfs_lock_dir_and_entry(dp, cdp); - if (error) { - xfs_trans_cancel(tp, cancel_flags); - goto std_return; - } - - IHOLD(dp); - xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - - IHOLD(cdp); - xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL); - - ASSERT(cdp->i_d.di_nlink >= 2); - if (cdp->i_d.di_nlink != 2) { - error = XFS_ERROR(ENOTEMPTY); - goto error_return; - } - if (!xfs_dir_isempty(cdp)) { - error = XFS_ERROR(ENOTEMPTY); - goto error_return; - } - - error = xfs_dir_removename(tp, dp, name, cdp->i_ino, - &first_block, &free_list, resblks); - if (error) - goto error1; - - xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); - - /* - * Bump the in memory generation count on the parent - * directory so that other can know that it has changed. - */ - dp->i_gen++; - - /* - * Drop the link from cdp's "..". - */ - error = xfs_droplink(tp, dp); - if (error) { - goto error1; - } - - /* - * Drop the link from dp to cdp. - */ - error = xfs_droplink(tp, cdp); - if (error) { - goto error1; - } - - /* - * Drop the "." link from cdp to self. - */ - error = xfs_droplink(tp, cdp); - if (error) { - goto error1; - } - - /* Determine these before committing transaction */ - last_cdp_link = (cdp)->i_d.di_nlink==0; - - /* - * If this is a synchronous mount, make sure that the - * rmdir transaction goes to disk before returning to - * the user. - */ - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { - xfs_trans_set_sync(tp); - } - - error = xfs_bmap_finish (&tp, &free_list, &committed); - if (error) { - xfs_bmap_cancel(&free_list); - xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES | - XFS_TRANS_ABORT)); - goto std_return; - } - - error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); - if (error) { - goto std_return; - } - - - /* Fall through to std_return with error = 0 or the errno - * from xfs_trans_commit. */ - std_return: - if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name->name, NULL, cdp->i_d.di_mode, - error, 0); - } - return error; - - error1: - xfs_bmap_cancel(&free_list); - cancel_flags |= XFS_TRANS_ABORT; - /* FALLTHROUGH */ - - error_return: - xfs_trans_cancel(tp, cancel_flags); - goto std_return; -} - -int xfs_symlink( xfs_inode_t *dp, struct xfs_name *link_name, Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 00:09:32.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:30:24.000000000 +0200 @@ -252,8 +252,7 @@ STATIC void xfs_cleanup_inode( struct inode *dir, struct inode *inode, - struct dentry *dentry, - int mode) + struct dentry *dentry) { struct xfs_name teardown; @@ -264,10 +263,7 @@ xfs_cleanup_inode( */ xfs_dentry_to_name(&teardown, dentry); - if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); - else - xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } @@ -349,7 +345,7 @@ xfs_vn_mknod( return -error; out_cleanup_inode: - xfs_cleanup_inode(dir, inode, dentry, mode); + xfs_cleanup_inode(dir, inode, dentry); out_free_acl: if (default_acl) _ACL_FREE(default_acl); @@ -478,31 +474,12 @@ xfs_vn_symlink( return 0; out_cleanup_inode: - xfs_cleanup_inode(dir, inode, dentry, 0); + xfs_cleanup_inode(dir, inode, dentry); out: return -error; } STATIC int -xfs_vn_rmdir( - struct inode *dir, - struct dentry *dentry) -{ - struct inode *inode = dentry->d_inode; - struct xfs_name name; - int error; - - xfs_dentry_to_name(&name, dentry); - - error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); - if (likely(!error)) { - xfs_validate_fields(inode); - xfs_validate_fields(dir); - } - return -error; -} - -STATIC int xfs_vn_rename( struct inode *odir, struct dentry *odentry, @@ -796,7 +773,13 @@ static const struct inode_operations xfs .unlink = xfs_vn_unlink, .symlink = xfs_vn_symlink, .mkdir = xfs_vn_mkdir, - .rmdir = xfs_vn_rmdir, + /* + * Yes, XFS uses the same method for rmdir and unlink. + * + * There are some subtile differences deeper in the code, + * but we use S_ISDIR to check for those. + */ + .rmdir = xfs_vn_unlink, .mknod = xfs_vn_mknod, .rename = xfs_vn_rename, .permission = xfs_vn_permission, Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.h 2008-04-26 20:05:39.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.h 2008-05-02 08:30:24.000000000 +0200 @@ -32,8 +32,6 @@ int xfs_link(struct xfs_inode *tdp, stru struct xfs_name *target_name); int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, - struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, From owner-xfs@oss.sgi.com Fri May 2 03:57:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 03:57:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42AvQe1032735 for ; Fri, 2 May 2008 03:57:28 -0700 X-ASG-Debug-ID: 1209725890-0949014e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2C85C161FEF1 for ; Fri, 2 May 2008 03:58:10 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id a7ZjbjVZeklCLCjG for ; Fri, 02 May 2008 03:58:10 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m42Aw3F3018359 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 2 May 2008 12:58:03 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m42Aw3BW018357 for xfs@oss.sgi.com; Fri, 2 May 2008 12:58:03 +0200 Date: Fri, 2 May 2008 12:58:03 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/2] kill xfs_lock_dir_and_entry Subject: [PATCH 2/2] kill xfs_lock_dir_and_entry Message-ID: <20080502105803.GC17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1209725891 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.1, rules version 3.1.49448 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15759 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs When multiple inodes are locked in XFS it happens in order of the inode number, with the everything but the first inode trylocked if any of the previous inodes is in the AIL. Except for the sorting of the inodes this logic is implemented in xfs_lock_inodes, but also partially duplicated in xfs_lock_dir_and_entry in a particularly stupid way adds a lock roundtrip if the inode ordering is not optimal. This patch adds a new helper xfs_lock_two_inodes that takes two inodes and locks them in the most optimal way according to the above locking protocol and uses it for all places that want to lock two inodes. The only caller of xfs_lock_inodes is xfs_rename which might lock up to four inodes. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:24.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:30.000000000 +0200 @@ -1897,111 +1897,6 @@ std_return: } #ifdef DEBUG -/* - * Some counters to see if (and how often) we are hitting some deadlock - * prevention code paths. - */ - -int xfs_rm_locks; -int xfs_rm_lock_delays; -int xfs_rm_attempts; -#endif - -/* - * The following routine will lock the inodes associated with the - * directory and the named entry in the directory. The locks are - * acquired in increasing inode number. - * - * If the entry is "..", then only the directory is locked. The - * vnode ref count will still include that from the .. entry in - * this case. - * - * There is a deadlock we need to worry about. If the locked directory is - * in the AIL, it might be blocking up the log. The next inode we lock - * could be already locked by another thread waiting for log space (e.g - * a permanent log reservation with a long running transaction (see - * xfs_itruncate_finish)). To solve this, we must check if the directory - * is in the ail and use lock_nowait. If we can't lock, we need to - * drop the inode lock on the directory and try again. xfs_iunlock will - * potentially push the tail if we were holding up the log. - */ -STATIC int -xfs_lock_dir_and_entry( - xfs_inode_t *dp, - xfs_inode_t *ip) /* inode of entry 'name' */ -{ - int attempts; - xfs_ino_t e_inum; - xfs_inode_t *ips[2]; - xfs_log_item_t *lp; - -#ifdef DEBUG - xfs_rm_locks++; -#endif - attempts = 0; - -again: - xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT); - - e_inum = ip->i_ino; - - xfs_itrace_ref(ip); - - /* - * We want to lock in increasing inum. Since we've already - * acquired the lock on the directory, we may need to release - * if if the inum of the entry turns out to be less. - */ - if (e_inum > dp->i_ino) { - /* - * We are already in the right order, so just - * lock on the inode of the entry. - * We need to use nowait if dp is in the AIL. - */ - - lp = (xfs_log_item_t *)dp->i_itemp; - if (lp && (lp->li_flags & XFS_LI_IN_AIL)) { - if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { - attempts++; -#ifdef DEBUG - xfs_rm_attempts++; -#endif - - /* - * Unlock dp and try again. - * xfs_iunlock will try to push the tail - * if the inode is in the AIL. - */ - - xfs_iunlock(dp, XFS_ILOCK_EXCL); - - if ((attempts % 5) == 0) { - delay(1); /* Don't just spin the CPU */ -#ifdef DEBUG - xfs_rm_lock_delays++; -#endif - } - goto again; - } - } else { - xfs_ilock(ip, XFS_ILOCK_EXCL); - } - } else if (e_inum < dp->i_ino) { - xfs_iunlock(dp, XFS_ILOCK_EXCL); - - ips[0] = ip; - ips[1] = dp; - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); - } - /* else e_inum == dp->i_ino */ - /* This can happen if we're asked to lock /x/.. - * the entry is "..", which is also the parent directory. - */ - - return 0; -} - -#ifdef DEBUG int xfs_locked_n; int xfs_small_retries; int xfs_middle_retries; @@ -2135,6 +2030,45 @@ again: #endif } +void +xfs_lock_two_inodes( + xfs_inode_t *ip0, + xfs_inode_t *ip1, + uint lock_mode) +{ + xfs_inode_t *temp; + int attempts = 0; + xfs_log_item_t *lp; + + ASSERT(ip0->i_ino != ip1->i_ino); + + if (ip0->i_ino > ip1->i_ino) { + temp = ip0; + ip0 = ip1; + ip1 = temp; + } + + again: + xfs_ilock(ip0, xfs_lock_inumorder(lock_mode, 0)); + + /* + * If the first lock we have locked is in the AIL, we must TRY to get + * the second lock. If we can't get it, we must release the first one + * and try again. + */ + lp = (xfs_log_item_t *)ip0->i_itemp; + if (lp && (lp->li_flags & XFS_LI_IN_AIL)) { + if (!xfs_ilock_nowait(ip1, xfs_lock_inumorder(lock_mode, 1))) { + xfs_iunlock(ip0, lock_mode); + if ((++attempts % 5) == 0) + delay(1); /* Don't just spin the CPU */ + goto again; + } + } else { + xfs_ilock(ip1, xfs_lock_inumorder(lock_mode, 1)); + } +} + int xfs_remove( xfs_inode_t *dp, @@ -2210,9 +2144,7 @@ xfs_remove( goto out_trans_cancel; } - error = xfs_lock_dir_and_entry(dp, ip); - if (error) - goto out_trans_cancel; + xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); /* * At this point, we've gotten both the directory and the entry @@ -2239,9 +2171,6 @@ xfs_remove( } } - /* - * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. - */ XFS_BMAP_INIT(&free_list, &first_block); error = xfs_dir_removename(tp, dp, name, ip->i_ino, &first_block, &free_list, resblks); @@ -2347,7 +2276,6 @@ xfs_link( { xfs_mount_t *mp = tdp->i_mount; xfs_trans_t *tp; - xfs_inode_t *ips[2]; int error; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; @@ -2395,15 +2323,7 @@ xfs_link( goto error_return; } - if (sip->i_ino < tdp->i_ino) { - ips[0] = sip; - ips[1] = tdp; - } else { - ips[0] = tdp; - ips[1] = sip; - } - - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); + xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL); /* * Increment vnode ref counts since xfs_trans_commit & Index: linux-2.6-xfs/fs/xfs/xfs_dfrag.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_dfrag.c 2008-04-26 17:43:14.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_dfrag.c 2008-05-02 08:30:30.000000000 +0200 @@ -128,7 +128,6 @@ xfs_swap_extents( xfs_swapext_t *sxp) { xfs_mount_t *mp; - xfs_inode_t *ips[2]; xfs_trans_t *tp; xfs_bstat_t *sbp = &sxp->sx_stat; bhv_vnode_t *vp, *tvp; @@ -153,16 +152,7 @@ xfs_swap_extents( vp = XFS_ITOV(ip); tvp = XFS_ITOV(tip); - /* Lock in i_ino order */ - if (ip->i_ino < tip->i_ino) { - ips[0] = ip; - ips[1] = tip; - } else { - ips[0] = tip; - ips[1] = ip; - } - - xfs_lock_inodes(ips, 2, lock_flags); + xfs_lock_two_inodes(ip, tip, lock_flags); locked = 1; /* Verify that both files have the same format */ @@ -265,7 +255,7 @@ xfs_swap_extents( locked = 0; goto error0; } - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); + xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL); /* * Count the number of extended attribute blocks Index: linux-2.6-xfs/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-05-01 22:56:57.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-05-02 08:30:30.000000000 +0200 @@ -522,6 +522,7 @@ void xfs_iflush_all(struct xfs_mount *) 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); void xfs_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); From owner-xfs@oss.sgi.com Fri May 2 04:14:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 04:15:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42BEgG5002210 for ; Fri, 2 May 2008 04:14:46 -0700 X-ASG-Debug-ID: 1209726926-038b01ed0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out04.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 04FE61621A98 for ; Fri, 2 May 2008 04:15:26 -0700 (PDT) Received: from smtp-out04.alice-dsl.net (smtp-out04.alice-dsl.net [88.44.63.6]) by cuda.sgi.com with ESMTP id P273j1LDZLbEZJkt for ; Fri, 02 May 2008 04:15:26 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.60]) by smtp-out04.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Fri, 2 May 2008 13:08:30 +0200 Received: from basil.firstfloor.org ([78.53.156.253]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Fri, 2 May 2008 13:07:08 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id E18BA1B415B; Fri, 2 May 2008 13:14:02 +0200 (CEST) To: Emmanuel Florac Cc: "Nandedkar, Rishiraj" , X-ASG-Orig-Subj: Re: query Subject: Re: query From: Andi Kleen References: <87604E51C77C4F4988CF1C7F088D562D9BE614@in02ex01.int.cgg.com> <20080502123541.2216848e@harpe.intellique.com> Date: Fri, 02 May 2008 13:14:02 +0200 In-Reply-To: <20080502123541.2216848e@harpe.intellique.com> (Emmanuel Florac's message of "Fri, 2 May 2008 12:35:41 +0200") Message-ID: <87fxt1ez5x.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-OriginalArrivalTime: 02 May 2008 11:07:08.0657 (UTC) FILETIME=[A9CC9610:01C8AC44] X-Barracuda-Connect: smtp-out04.alice-dsl.net[88.44.63.6] X-Barracuda-Start-Time: 1209726927 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2408 1.0000 -0.6200 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.62 X-Barracuda-Spam-Status: No, SCORE=-0.62 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.1, rules version 3.1.49448 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15760 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Emmanuel Florac writes: > > Most distributions (except RedHat Enterprise and SuSE Enterprise) may OT, but actually that's not correct. You can download SLES for free. -Andi From owner-xfs@oss.sgi.com Fri May 2 05:04:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 05:04:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42C4Rxn009837 for ; Fri, 2 May 2008 05:04:30 -0700 X-ASG-Debug-ID: 1209729911-095202780000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C93D71622700 for ; Fri, 2 May 2008 05:05:11 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id vQXS9zAK1HJWPqBG for ; Fri, 02 May 2008 05:05:11 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id C3D8A17F507; Fri, 2 May 2008 14:05:10 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 9B34917F53A; Fri, 2 May 2008 14:05:10 +0200 (CEST) Date: Fri, 2 May 2008 14:05:09 +0200 From: Emmanuel Florac To: "Nandedkar, Rishiraj" Cc: X-ASG-Orig-Subj: Re: query Subject: Re: query Message-ID: <20080502140509.62dadf26@harpe.intellique.com> In-Reply-To: <87604E51C77C4F4988CF1C7F088D562D38BE0A@in02ex01.int.cgg.com> References: <87604E51C77C4F4988CF1C7F088D562D38BE0A@in02ex01.int.cgg.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1209729911 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1203 1.0000 -1.2725 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.27 X-Barracuda-Spam-Status: No, SCORE=-1.27 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.1, rules version 3.1.49452 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m42C4Uxn009842 X-archive-position: 15761 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Fri, 2 May 2008 16:12:58 +0530 "Nandedkar, Rishiraj" écrivait: > Thank you for update but Linux 7.3 means red hat 7 update 3 red hat 3 > update 5.In our system we are unable to detect disk which is having > file system in XFS format. Our system is not able to support it. > 2.4.21-32.EL is kenal version on our systems. Please let me know > which version should I use in redhat.I am trying this with fedora > core 3 RedHat 7.3 ( or even 8.0 and 9.0 for that matter) are really very old and outdated. You'd be much better for pretty much everything with something more up-to-date. Back then RedHat 7.x needed a special additional CD provided by SGI for XFS support IIRC. I'm pretty surprised that RHEL 3 doesn't support XFS though. Anyway, RHEL 4 and 5 do without any doubt (I use XFS on them). -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Fri May 2 05:24:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 05:24:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42CODNB011222 for ; Fri, 2 May 2008 05:24:14 -0700 X-ASG-Debug-ID: 1209731096-096d02b20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 908CE162202F for ; Fri, 2 May 2008 05:24:56 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id dAK8EQh9ApFalQ62 for ; Fri, 02 May 2008 05:24:56 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 8433417F570; Fri, 2 May 2008 14:24:56 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 479C017F55F; Fri, 2 May 2008 14:24:56 +0200 (CEST) Date: Fri, 2 May 2008 14:25:00 +0200 From: Emmanuel Florac To: "Nandedkar, Rishiraj" Cc: X-ASG-Orig-Subj: Re: query Subject: Re: query Message-ID: <20080502142500.049e14b0@harpe.intellique.com> In-Reply-To: <87604E51C77C4F4988CF1C7F088D562D38BE0A@in02ex01.int.cgg.com> References: <87604E51C77C4F4988CF1C7F088D562D38BE0A@in02ex01.int.cgg.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1209731097 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4539 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.1, rules version 3.1.49454 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m42COENB011232 X-archive-position: 15762 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Fri, 2 May 2008 16:12:58 +0530 "Nandedkar, Rishiraj" écrivait: > In our system we are unable to detect disk which is having file > system in XFS format. Our system is not able to support it. Just to get sure, how did you try to mount the XFS disks? Is there a software RAID, LVM or other additional layer that may prevent an older system to mount a volume made on a newer one? -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Fri May 2 05:37:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 05:37:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42CbXLD012210 for ; Fri, 2 May 2008 05:37:35 -0700 X-ASG-Debug-ID: 1209731896-1259039f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from outbound4-sin-R.bigfish.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2E78EADE85B for ; Fri, 2 May 2008 05:38:17 -0700 (PDT) Received: from outbound4-sin-R.bigfish.com (outbound-sin.frontbridge.com [207.46.51.80]) by cuda.sgi.com with ESMTP id fkAT4FM3OtlYo01z for ; Fri, 02 May 2008 05:38:17 -0700 (PDT) Received: from outbound4-sin.bigfish.com (localhost.localdomain [127.0.0.1]) by outbound4-sin-R.bigfish.com (Postfix) with ESMTP id A5158157886D; Fri, 2 May 2008 12:28:03 +0000 (UTC) Received: from mail13-sin-R.bigfish.com (unknown [10.3.40.3]) by outbound4-sin.bigfish.com (Postfix) with ESMTP id 7CBFD460053; Fri, 2 May 2008 12:28:03 +0000 (UTC) Received: from mail13-sin (localhost.localdomain [127.0.0.1]) by mail13-sin-R.bigfish.com (Postfix) with ESMTP id 3021818B82E1; Fri, 2 May 2008 12:28:03 +0000 (UTC) X-BigFish: V X-MS-Exchange-Organization-Antispam-Report: OrigIP: 72.20.130.72;Service: EHS Received: by mail13-sin (MessageSwitch) id 1209731283185351_9923; Fri, 2 May 2008 12:28:03 +0000 (UCT) Received: from mailus1.cgg.com (72-20-130-72.cgg.com [72.20.130.72]) by mail13-sin.bigfish.com (Postfix) with ESMTP id 9E6521B30053; Fri, 2 May 2008 12:28:02 +0000 (UTC) Received: from in02ex01.int.cgg.com (in02ex01.int.cgg.com [192.168.53.201]) by mailus1.cgg.com (MailerCGG) with ESMTP id BA4AE1D4001; Fri, 2 May 2008 07:27:55 -0500 (CDT) MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" X-ASG-Orig-Subj: RE: query Subject: RE: query content-class: urn:content-classes:message X-MimeOLE: Produced By Microsoft Exchange V6.0.6603.0 Date: Fri, 2 May 2008 17:57:58 +0530 Message-ID: <87604E51C77C4F4988CF1C7F088D562D9BE618@in02ex01.int.cgg.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: query Thread-Index: AcisTWczgDKUogmnTeC7IXg9CbZBXgAAoRtw From: "Nandedkar, Rishiraj" To: "Emmanuel Florac" Cc: X-Barracuda-Connect: outbound-sin.frontbridge.com[207.46.51.80] X-Barracuda-Start-Time: 1209731898 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0017 1.0000 -2.0097 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.49455 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m42CbZLD012214 X-archive-position: 15763 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Rishiraj.Nandedkar@cggveritas.com Precedence: bulk X-list: xfs Thank you very much -----Original Message----- From: Emmanuel Florac [mailto:eflorac@intellique.com] Sent: Friday, May 02, 2008 5:35 PM To: Nandedkar, Rishiraj Cc: xfs@oss.sgi.com Subject: Re: query Le Fri, 2 May 2008 16:12:58 +0530 "Nandedkar, Rishiraj" écrivait: > Thank you for update but Linux 7.3 means red hat 7 update 3 red hat 3 > update 5.In our system we are unable to detect disk which is having > file system in XFS format. Our system is not able to support it. > 2.4.21-32.EL is kenal version on our systems. Please let me know > which version should I use in redhat.I am trying this with fedora > core 3 RedHat 7.3 ( or even 8.0 and 9.0 for that matter) are really very old and outdated. You'd be much better for pretty much everything with something more up-to-date. Back then RedHat 7.x needed a special additional CD provided by SGI for XFS support IIRC. I'm pretty surprised that RHEL 3 doesn't support XFS though. Anyway, RHEL 4 and 5 do without any doubt (I use XFS on them). -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Fri May 2 05:51:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 05:51:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42Cp51v013295 for ; Fri, 2 May 2008 05:51:06 -0700 X-ASG-Debug-ID: 1209732707-3780039f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy2.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 714E4119CF0 for ; Fri, 2 May 2008 05:51:48 -0700 (PDT) Received: from proxy2.bredband.net (proxy2.bredband.net [195.54.101.72]) by cuda.sgi.com with ESMTP id jbHx7kdeep6mXwed for ; Fri, 02 May 2008 05:51:48 -0700 (PDT) Received: from ironport2.bredband.com (195.54.101.122) by proxy2.bredband.net (7.3.127) id 4811833300270805 for xfs@oss.sgi.com; Fri, 2 May 2008 14:51:47 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ar86ABKrGkjVctjQPGdsb2JhbACBU5AGAQEBAS0BmX4 Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport2.bredband.com with ESMTP; 02 May 2008 14:51:47 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m42Cpas6023704; Fri, 2 May 2008 14:51:46 +0200 Message-ID: <481B0E57.5030100@stesmi.com> Date: Fri, 02 May 2008 14:51:35 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.12 (Windows/20080213) MIME-Version: 1.0 To: "Nandedkar, Rishiraj" CC: Emmanuel Florac , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: query Subject: Re: query References: <87604E51C77C4F4988CF1C7F088D562D9BE618@in02ex01.int.cgg.com> In-Reply-To: <87604E51C77C4F4988CF1C7F088D562D9BE618@in02ex01.int.cgg.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy2.bredband.net[195.54.101.72] X-Barracuda-Start-Time: 1209732708 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2759 1.0000 -0.4542 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.45 X-Barracuda-Spam-Status: No, SCORE=-0.45 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.1, rules version 3.1.49456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15764 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Nandedkar, Rishiraj wrote: > Thank you very much > > > > -----Original Message----- > From: Emmanuel Florac [mailto:eflorac@intellique.com] > Sent: Friday, May 02, 2008 5:35 PM > To: Nandedkar, Rishiraj > Cc: xfs@oss.sgi.com > Subject: Re: query > > Le Fri, 2 May 2008 16:12:58 +0530 > "Nandedkar, Rishiraj" écrivait: > >> Thank you for update but Linux 7.3 means red hat 7 update 3 red hat 3 >> update 5.In our system we are unable to detect disk which is having >> file system in XFS format. Our system is not able to support it. >> 2.4.21-32.EL is kenal version on our systems. Please let me know >> which version should I use in redhat.I am trying this with fedora >> core 3 > > RedHat 7.3 ( or even 8.0 and 9.0 for that matter) are really very old > and outdated. You'd be much better for pretty much everything with > something more up-to-date. Back then RedHat 7.x needed a special > additional CD provided by SGI for XFS support IIRC. > I'm pretty surprised that RHEL 3 doesn't support XFS though. Anyway, > RHEL 4 and 5 do without any doubt (I use XFS on them). > Another point could be that if you're used to and like RedHat Linux 7.3 and/or RedHat Enterprise Linux then I think looking at either the newer RedHat Enterprise Linue (RHEL) 4 or 5 or Fedora is the way to go. To use XFS in Fedora (http://www.fedoraproject.org) you need to add the word "xfs" to the installer commandline and also make sure you use a seperate, small (100MB is enough) partition that's called /boot that's using ext3 (others work but I recommend using ext3 simply for that partition). // Stefan From owner-xfs@oss.sgi.com Fri May 2 06:02:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 06:02:56 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42D2Y9Z014456 for ; Fri, 2 May 2008 06:02:37 -0700 X-ASG-Debug-ID: 1209733397-147800160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6B63C11A8C3 for ; Fri, 2 May 2008 06:03:17 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id KRw9nQZVPIGipaHn for ; Fri, 02 May 2008 06:03:17 -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 sandeen.net (Postfix) with ESMTP id 6752A18004491; Fri, 2 May 2008 08:03:15 -0500 (CDT) Message-ID: <481B1113.7040509@sandeen.net> Date: Fri, 02 May 2008 08:03:15 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Stefan Smietanowski CC: "Nandedkar, Rishiraj" , Emmanuel Florac , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: query Subject: Re: query References: <87604E51C77C4F4988CF1C7F088D562D9BE618@in02ex01.int.cgg.com> <481B0E57.5030100@stesmi.com> In-Reply-To: <481B0E57.5030100@stesmi.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: 1209733399 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0013 1.0000 -2.0123 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.49456 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15765 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Stefan Smietanowski wrote: > To use XFS in Fedora (http://www.fedoraproject.org) you need to add the > word "xfs" to the installer commandline Only for F7 and earlier. F8 and beyond give you an xfs option on the partitioning screen by default. -Eric > > From owner-xfs@oss.sgi.com Fri May 2 13:55:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 13:55:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42Kt2pH021009 for ; Fri, 2 May 2008 13:55:03 -0700 X-ASG-Debug-ID: 1209761747-146800470000-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 00FB411C703 for ; Fri, 2 May 2008 13:55:47 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id AWKHM2OElKxPeOsQ for ; Fri, 02 May 2008 13:55:47 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation 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 m42KtkLd003927 for ; Fri, 2 May 2008 16:55:46 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m42Ktkse028851 for ; Fri, 2 May 2008 16:55:46 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m42KtjSp022225 for ; Fri, 2 May 2008 16:55:45 -0400 Message-ID: <481B7FD1.3030107@sandeen.net> Date: Fri, 02 May 2008 15:55:45 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> <480E89B5.8070006@sandeen.net> In-Reply-To: <480E89B5.8070006@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: 1209761748 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15766 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> This should fix the longstanding issues with xfs and old ABI >> arm boxes, which lead to various asserts and xfs shutdowns, >> and for which an (incorrect) patch has been floating around >> for years. (Said patch made ARM internally consistent, but >> altered the normal xfs on-disk format such that it looked >> corrupted on other architectures): >> http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html > > ping again... ping #3... > There is still the cache flushing issue, I guess, but I think the > on-disk alignment is still worth fixing. > > Oh, I'm sorry Jeff - I meant "fixing." :) > > Thanks, > -Eric > >> Old ABI ARM has interesting packing & padding; for example >> on ARM old abi: >> >> struct xfs_dir2_sf_entry { >> __uint8_t namelen; /* 0 1 */ >> >> /* XXX 3 bytes hole, try to pack */ >> >> xfs_dir2_sf_off_t offset; /* 4 4 */ >> __uint8_t name[1]; /* 8 1 */ >> >> /* XXX 3 bytes hole, try to pack */ >> >> xfs_dir2_inou_t inumber; /* 12 8 */ >> >> /* size: 20, cachelines: 1 */ >> /* sum members: 14, holes: 2, sum holes: 6 */ >> /* last cacheline: 20 bytes */ >> }; >> >> but on x86: >> >> struct xfs_dir2_sf_entry { >> __uint8_t namelen; /* 0 1 */ >> xfs_dir2_sf_off_t offset; /* 1 2 */ >> __uint8_t name[1]; /* 3 1 */ >> xfs_dir2_inou_t inumber; /* 4 8 */ >> >> /* size: 12, cachelines: 1 */ >> /* last cacheline: 12 bytes */ >> }; >> >> ... this sort of discrepancy leads to problems. >> >> I've verified this patch by comparing the on-disk structure >> layouts using pahole from the dwarves package, as well as >> running through a bit of xfsqa under qemu-arm, modified so >> that the check/repair phase after each test actually executes >> check/repair from the x86 host, on the filesystem populated >> by the arm emulator. Thus far it all looks good. >> >> There are 2 other structures with extra padding at the end, >> but they don't seem to cause trouble. I suppose they could >> be packed as well: xfs_dir2_data_unused_t and xfs_dir2_sf_t. >> >> Note that userspace needs a similar treatment, and any >> filesystems which were running with the previous rogue >> "fix" will now see corruption (either in the kernel, or >> during xfs_repair) with this fix properly in place; it >> may be worth teaching xfs_repair to identify and fix that >> specific issue. >> >> Signed-off-by: Eric Sandeen >> >> --- >> >> Index: linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h >> =================================================================== >> --- linux-2.6.24.orig/fs/xfs/linux-2.6/xfs_linux.h >> +++ linux-2.6.24/fs/xfs/linux-2.6/xfs_linux.h >> @@ -300,4 +300,11 @@ static inline __uint64_t howmany_64(__ui >> return x; >> } >> >> +/* ARM old ABI has some weird alignment/padding */ >> +#if defined(__arm__) && !defined(__ARM_EABI__) >> +#define __arch_pack __attribute__((packed)) >> +#else >> +#define __arch_pack >> +#endif >> + >> #endif /* __XFS_LINUX__ */ >> Index: linux-2.6.24/fs/xfs/xfs_dir2_sf.h >> =================================================================== >> --- linux-2.6.24.orig/fs/xfs/xfs_dir2_sf.h >> +++ linux-2.6.24/fs/xfs/xfs_dir2_sf.h >> @@ -62,7 +62,7 @@ typedef union { >> * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. >> * Only need 16 bits, this is the byte offset into the single block form. >> */ >> -typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; >> +typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; >> >> /* >> * The parent directory has a dedicated field, and the self-pointer must >> @@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { >> __uint8_t count; /* count of entries */ >> __uint8_t i8count; /* count of 8-byte inode #s */ >> xfs_dir2_inou_t parent; /* parent dir inode number */ >> -} xfs_dir2_sf_hdr_t; >> +} __arch_pack xfs_dir2_sf_hdr_t; >> >> typedef struct xfs_dir2_sf_entry { >> __uint8_t namelen; /* actual name length */ >> xfs_dir2_sf_off_t offset; /* saved offset */ >> __uint8_t name[1]; /* name, variable size */ >> xfs_dir2_inou_t inumber; /* inode number, var. offset */ >> -} xfs_dir2_sf_entry_t; >> +} __arch_pack xfs_dir2_sf_entry_t; >> >> typedef struct xfs_dir2_sf { >> xfs_dir2_sf_hdr_t hdr; /* shortform header */ >> >> >> > > From owner-xfs@oss.sgi.com Fri May 2 14:01:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 02 May 2008 14:01:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.9 required=5.0 tests=AWL,BAYES_20,HTML_MESSAGE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m42L14NI021673 for ; Fri, 2 May 2008 14:01:07 -0700 X-ASG-Debug-ID: 1209762108-2b7200e10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C8F29AEA96E for ; Fri, 2 May 2008 14:01:48 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id 9bgRNDMkLEOhzSG6 for ; Fri, 02 May 2008 14:01:48 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m42L1PO8023171 for ; Fri, 2 May 2008 14:01:25 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m42L1P1u016883 for ; Fri, 2 May 2008 14:01:25 -0700 X-MimeOLE: Produced By Microsoft Exchange V6.5 MIME-Version: 1.0 X-ASG-Orig-Subj: question about xfs_alloc_fix_freelist() Subject: question about xfs_alloc_fix_freelist() Date: Fri, 2 May 2008 14:01:47 -0700 Message-ID: <038C959C13632143B902BE360CA5B58E3C552E@mx1.ddns.agami.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: question about xfs_alloc_fix_freelist() Thread-Index: Acisl7xQx+kT//56QqOpiR9uhl4Lcg== From: "Michael Nishimoto" To: X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1209762108 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.92 X-Barracuda-Spam-Status: No, SCORE=-1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, RDNS_GENERIC_NO_PTR X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49487 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_GENERIC_NO_PTR Delivered to trusted network by host with generic-looking RDNS - indicates no PTR record 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 496 X-archive-position: 15767 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs The following code can be found near the end of xfs_alloc_fix_freelist: if (targs.agbno == NULLAGBLOCK) { if (flags & XFS_ALLOC_FLAG_FREEING) break; xfs_trans_brelse(tp, agflbp); args->agbp = NULL; return 0; } Don't we need to release agbp too by calling xfs_trans_brelse(tp, agbp)? Michael [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Sat May 3 17:38:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 03 May 2008 17:39:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.3 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, RCVD_IN_PSBL autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m440csjM014000 for ; Sat, 3 May 2008 17:38:57 -0700 X-ASG-Debug-ID: 1209861552-3e1302060000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.sohu.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3F70E162C607 for ; Sat, 3 May 2008 17:39:16 -0700 (PDT) Received: from smtp.sohu.com (smtp.sohu.com [220.181.26.195]) by cuda.sgi.com with ESMTP id k54jdnD0mK4M4nJq for ; Sat, 03 May 2008 17:39:16 -0700 (PDT) Received: from iTFGUY&t*???_ (unknown [116.25.130.9]) by smtp.sohu.com (Postfix) with ESMTP id 1604911E35F; Sun, 4 May 2008 08:37:53 +0800 (CST) From: =?GB2312?B?zfJzb2h1LmNvbQ==?= X-ASG-Orig-Subj: =?GB2312?B?enJoc2l0ZnJAc29odS5jb22zz9H7us/X96Oh?= Subject: =?GB2312?B?enJoc2l0ZnJAc29odS5jb22zz9H7us/X96Oh?= To: linux-raid@vger.kernel.org Content-Type: multipart/mixed; charset="GB2312"; boundary="vKf8w1WMqEhEEVwZ0qpGuqyKvZ28v=_IW1" MIME-Version: 1.0 Date: Sun, 4 May 2008 08:38:02 +0800 Message-Id: <20080504003753.1604911E35F@smtp.sohu.com> X-SOHU-Antispam-Bayes: 999 X-SOHU-Antispam-Language: 0 X-CMAE-Analysis: cmae content reject X-Barracuda-Connect: smtp.sohu.com[220.181.26.195] X-Barracuda-Start-Time: 1209861579 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5002 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=PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49593 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15768 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: zrhsitfr@sohu.com Precedence: bulk X-list: xfs This is a multi-part message in MIME format --vKf8w1WMqEhEEVwZ0qpGuqyKvZ28v=_IW1 Content-Type: text/plain Content-Transfer-Encoding: 8bit 703½ß³ÏΪÄú·þÎñ! ÏêΟ½¼þ --vKf8w1WMqEhEEVwZ0qpGuqyKvZ28v=_IW1 Content-Type: application/octet-stream; name="%#^).jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="%#^).jpg" /9j/4AAQSkZJRgABAQEAYABgAAD/4QAWRXhpZgAASUkqAAgAAAAAAAAAAAD/ 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIs IxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjL/wAARCAK8AdEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAEC AwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo 6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL /8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKR obHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RV VldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 +Pn6/9oADAMBAAIRAxEAPwD2CdZZdXeETeWoUfwg9vpTjZzjj7WR9UH+FNm5 1uXjB8sHP4U6e7uPOWOCRugXA65olJoxjCMhv2WYf8vR/wC+B/hSfZpv+fpv ++B/hUb3l6jENNKuDg5UU1r3UB1lkHttFT7Uv2USfybn/n7P/fA/wpDFc/8A P43/AH7H+FQ/adW55m/74FBuNXIGBcfggp89xeyiS+Vcj/l8P4xj/Cgx3H/P 7/5DH+FQmfWOmLn/AL9ikM2s/wDT1/37H+FF2g9lEdO1zDCzi7B9iq/4VTXU LlgD56/go/wpt5f61HII1a4zjn5B/hUP27WQcGS4B7ZRf8KwnUaD2cC4Lq6O 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 V9dPwKHja0iWO31NHmOpxq9tYwxlfnklG3oRzgHP4VQgttP0650XSbu1lTVN MjLWWHCw3TMPnw3+9yQcH655686ZBJqaahOBLPEpWAsOIgeu33Pc0zVNFstY a1a7jLNazCaJlOCGH9Pb2pypNtyX9f1+go1Ukov+v6/UqaToj2H2u/vZxc6p djM0wGFVR0RB2Ufmep9sz4af8iPaf9dJP/QzWzrehrrFs6x3l3ZXO0rHPbzO u36qCAw+v4EU/QdGg0DR4dNt3eRIsne+MsSST0+tNQaqKy0Sf42E5pwd3q2i LUNIbVNXsprlx9ism81IMZ8yXGAzeygnA9TWF8O40fTNV3orbdWmYZGcHanN dpXM6f4QFlY3FmdTufIuLp7mVYP3Rfdj5dwyQuAOhBPPOOKJQfOpJdwjNcji 32MUQQav4sv7uzhRNN0i1lhRo0Co1w4O8jHB4Jz74PfNa/haWz0/wdpd7Mka O8McJl2jc2Wwq56nk9Peugt9PtLSwFjb26RWoUqIkGBg9fzya5g/DrTmgW1f VNYaxVtws2uv3WM5xt29P196n2c4PmirvUr2kZKzdkdcY0MgkKKXAwGxyB9a 4rxEtw3xI8OC1liimMM+15Yy6j5GzlQyk8e4rtgMAAZ49Tmsm70JLvxNp+st OytZRyIsQXhiwxkn6E8VpVi5JJd1+ZnTkott9mP+z69/0EtN/wDBfJ/8erD8 ABxFrwlZWkGrzbmVdoJ+XJAycD2ya6PVNOGqWTW/2q6tW6rLbTNGyn14PP0P FUfC/h4eG9OltmvJLuaaZp5ZnGCzHA6ZPoOpPOaTg/aJrZeZSkuRp7k/ib/k VNY/68Zv/QDXGWXh7Wde8GaRYRanDHpU0StcK8f71cHICkDBGcdcHjqeld7q dn/aOlXlj5nl/aYHh34zt3KRnHfrUejaaNI0a008S+b9njCeZt27vfHalOlz z12sEKnLDTe5xdnDZJq3ja1u7pLW2KW8XnSOF2fu2AOT3zipPCz2N/fCLxE5 m8RWrGNEvAANoOVaFMAHhQd2N3fpiuig8J6XD4juNdKPLeTEEeYQVjOMZUY6 8d8+2Kn1rw3pXiCNF1G0WVo/uOCVZfbI5x7dKhUZrXTS+nzuW6sXp6fkatY2 v6nPawrY6cqyardZWBCeEHeRvRV/U4HetKzs4LCzitLZNkEShEXJOAOByaxN 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 qPaMxyCP8/hUiQFcZxU9FK7HzMijiKF2JG49KY1uxHykA+tWKKmUU9xPUoPY s4IO3nryagfSN7o2I8pnacnOO3ataio9lEVkY7aTOxY74jkYxk4/lWRN4bvI 0aUvAVQFiFZsnHpxXX1Fc/8AHrN/uH+VT7GK1DlRycTn7N8nOeOewqJtWkgD RQAMd3LHpnviqX2hTa+TztcEO2eQPao4oC4iRIxtUYQA889zWc56aCbshmo6 hc3l4jM2zaFBx9a3bq4z4qmtDnON59OlY91aMsxBXoFz+YrQuj/xXNwfSP8A oK0o6u4n8JrbfeilzRXYYWG6rGZNQnx2Vf5Vl25H2uIjs4rcuBu1e5X1VR+g rIaNoNSjULlTIMVz1o63NoGqxyuPeuV+IVr44uLDW5tGutlkthGtrb2UpF00 6zI7yAhAR+7Ei7Q5zgYGWwOpOTtIHOTmtuppbsqJ5Bqdjc2+mR6L4Nm8VpBe 6us9zbpZPZi0tjveVbeSWKNYgTtwpfGcD+Js9TewapF8Oxp/iuw/4SXVLndb yW9lH8lw7OTHlgqiJVG3MhC7duck4z21Fa3KPOPDHhzxL4GlS5Z38SNqCL/a bB0FzHMqnY0ckrL5kQXCbXYEfeXG5lrS+E1jdab8M9ItL61ntbiPzt8M8ZR1 zNIRlTyOCD+NdrRQ3cDF8Q2GsalYxw6Jrf8AY1yswdrj7IlxuTBBTaxwOSDn 2962qKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA Corn/j1m/wBw/wAqlqK5/wCPWbv8jd/aplswOPs9OjEXmyEsc/cFWYbSOF3k 24ZvmI7gVpCAR5IGGPWmeUxQnjPQkjnFcKRmYGoLGl+wzIoZQRz7irdyq/8A CXXPrjP6CqHiCVW1FIlBOAuSPrVu8ct44lUdkP8AIV00Bv4Ta+0Giq+w0V2G JbnH/E6nPsv8qz7pH/tK3dckeYAQK0Zv+QxcfRf5Cs66DHUbfaRxIMjNZVdj aBfB5JIOd2Oa2awyQ7hkAADYPNblYUt2UgooorcYUUUUAFFFYHifxH/wjf8A Yv8Aon2n+09Vg07/AFmzy/M3fP0OcbenGfWmBv0VWlvrS3u7e0mu4I7m53eR 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 H9bv/Evh3WtDOnNPpKXg8u9kdFZpowin5FYkA5JHGcYyM5Gfe/Dea8k/tF9a jOuPq0GqT3ZsyYn8hWWKJYhINqKrAZ3FjzknIwJ6Abvhvw9bW/gPSNC1PTLU pHZwpdWkkSPGZQAz5HKsd+Wzzk8+9eQ3Fm1r8Qri90yR7DwtYONBOpSXd262 jqqttfbOkioJCEzkRDIPXk+p2vhbX4fDc2lSeK7gyTXLObxIW86G2Y5aGN3k Zg3ULI5cqD0yARQHgm81XTotA1CGx0vwxbxIo0rTJzMblhIHzJK8asq/KOFw zFmJekmBQ+GdnLrUs/iO/SC6ghllg0a9NzdSu8W4pJKEnlk8rdtUDGG4YHgj MPji0h1HXp7yxj1sXMthLpF4Es7mONoC5JCt9imDZJPzKRwBgnNdTo3hzV/D 9x9msNfSTQ0dBb2F7ZmaS2iByY0mEikjnClw20BRzg5TWvBi+JdTa41e5S6s 4EDafp8kLfZ4ph1lmUODOc8BSVUKWGMsTRfUDyiKyn1SOaPTdQ1FGisv7Bmn W2uLsQWqsN8LRrpyZcKT1dWyRlq9k0E2kfheGz09b4W1jbraIb21kgkIRAAS ropPGOQMZz6Vzuh/DsjSLs+IJkGs3OpXOopd6VLJC1nJMoRhFJkNjAzg8HgE NtyezitvsWipa+fPceRbiLzrh98km1cbnbuxxknuamb0YFZuCGHTHNRMAHY9 B3zUh6Fe3r6UxssASOe3oa4rXIMTWVjaQ5BLtswccdaW6B/4TW4/3P6Cob+W dtQyX5G1duOMZ9KuXY/4q6dh124/SuqnDZjfwmhRTsUV0WMRmotKNTnWGMux 2jj6Cq8TbtRijRQGEgLEt3qxqO3+1JWIcFdo3KcdhWfbQhb+ACKZn80HJPym uerKzN6R0jxSEFTNuPPCrnFW6zSweVoobVuT8zlvkB+taVRR6lMKKKK3EFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA VFc/8es3+4f5VLUVz/x6zf7h/lUy2YGaWAbOc57Go9+47c//AFqSaUKPlXcR 19qqtckN95QCOlc0YskzbyI/2y4PIDr1q3OM+KLn6GoGIuNUDE9WFTyHd4jv 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 bnaoJAzlueScDBcDjPE2ix2Pxa8I3GjiC11O/l1Cae5uke53sIFADAurbQuQ qhgq54HUHzSS9DfEO6ubHw/4euNJtbUxy3A0XNqbVZwkl4kKyN5m1tw3Kxyq ngYOPoLX/CujeJnt31a1kma2SVImS4kiKrIoWQfIwyGUYIPbI7mlg8LadbeJ 4tdtw8M8WnDTI7ePasKQh94woGQQeOuMdqLgUIdJux4Ii023ntdehurcQu08 qWULW7R7SIvs8RATH3RgkBvvcCvI5PDsDS+GvEYvdK1LSdaurXThaizufs8E 8SeVCwjeZWlVfLdCZCOGY7W3YHultoml2GnzWGn2UFhbTbi6WS/Z8kjBYFME NgD5hzwOeKw0+GvheG0tbRLS9W2tJRPbQrqd0EhkBJDovmYVsknI55NCYGb4 d02zufGswur66uPEvh9AmoX8VtFax6itwm6MSKmS4RVUAHGCoPNaPiT4gaT4 Y1k6dqMF8dlql5PcRIjRwwvMIQzZYMcORkKrHB6HmtjSPDelaJd3t3YRTi5v vL+0zT3Us7y7AQmWkZjwCR/+qprnQ9KvdQh1C60qyuL2Db5NzLbo8ke07l2s RkYJJGOhpgaNFFFSAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB UVz/AMes3+4f5VLUVz/x6zf7h/lUy2YD1Gfm9aeB0qONv4W61MBxVR3GVcf6 X/wOqL/cuf8AcNXx/wAff/AzVCTiO4J7qauO5EtitRS5FFamRYbnVJh/tr/6 CKnTm++rcVAf+QvL/vr/AOgirBGy+Q+prKe5pS+E0CeTj1plPkcRDJ7mmVDL CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqtLfWlvd29pNdwR3Nzu8 iF5AHl2jLbVPLYHJx0oAs0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRXP8Ax6zf7h/l UtRXP/HrN/uH+VTLZgOdQU3LwRT0O5FYd6RuUYd8cVAkpKKide9VHcYoP+l/ 8DrPlOYLg9gpq+oIvMH+8az3H+jXJ/2D/OrjuRLYi2+9FPyPWitTIkYgavJ/ vr/6CKvPGJJRj7wNZsxK6u2D/Gv/AKCKvmVlkz1APasZy1saUl7o+aVlTa45 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 RKV9C1uoqb7HF/tfnRVkWP/Z --vKf8w1WMqEhEEVwZ0qpGuqyKvZ28v=_IW1-- From owner-xfs@oss.sgi.com Sun May 4 16:50:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 16:50:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m44NoDM9026273 for ; Sun, 4 May 2008 16:50:15 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA12588; Mon, 5 May 2008 09:50:53 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m44NopsT131460200; Mon, 5 May 2008 09:50:52 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m44NomK5156555114; Mon, 5 May 2008 09:50:48 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 5 May 2008 09:50:48 +1000 From: David Chinner To: Michael Nishimoto Cc: xfs@oss.sgi.com Subject: Re: question about xfs_alloc_fix_freelist() Message-ID: <20080504235048.GC155679365@sgi.com> References: <038C959C13632143B902BE360CA5B58E3C552E@mx1.ddns.agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <038C959C13632143B902BE360CA5B58E3C552E@mx1.ddns.agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15769 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 02:01:47PM -0700, Michael Nishimoto wrote: > > The following code can be found near the end of xfs_alloc_fix_freelist: > > if (targs.agbno == NULLAGBLOCK) { > if (flags & XFS_ALLOC_FLAG_FREEING) > break; > xfs_trans_brelse(tp, agflbp); > args->agbp = NULL; > return 0; > } > > Don't we need to release agbp too by calling xfs_trans_brelse(tp, agbp)? I don't think so. AFAICT, The agbp (agf block) is linked into the transaction and by this point we may have modified the AGF (think multiple iterations of the loop to fill the free list). Given that it may be modified, we shouldn't release it here but instead allow the transaction commit/abort to do that for us at the appropriate time. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 4 17:53:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 17:54:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_26, J_CHICKENPOX_46 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m450rgA4030701 for ; Sun, 4 May 2008 17:53:45 -0700 X-ASG-Debug-ID: 1209948863-32a200970000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ozlabs.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 375AB12364C for ; Sun, 4 May 2008 17:54:24 -0700 (PDT) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by cuda.sgi.com with ESMTP id Ai5CG3PQRVd5JEZZ for ; Sun, 04 May 2008 17:54:24 -0700 (PDT) Received: from vivaldi.local (unknown [203.213.241.221]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPSA id A5F70DDE19; Mon, 5 May 2008 10:54:19 +1000 (EST) To: linux-kernel@vger.kernel.org From: Rusty Russell Date: Mon, 5 May 2008 00:54:15 +0000 X-ASG-Orig-Subj: [PATCH] Replace down_trylock() with down_try(), reverse return values. Subject: [PATCH] Replace down_trylock() with down_try(), reverse return values. Cc: gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: "Brian S. Julin" Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805051054.16575.rusty@rustcorp.com.au> X-Barracuda-Connect: ozlabs.org[203.10.76.45] X-Barracuda-Start-Time: 1209948866 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.1, rules version 3.1.49691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15770 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: rusty@rustcorp.com.au Precedence: bulk X-list: xfs down_trylock() returns 1 on failure, 0 on success. This differs from spin_trylock(), mutex_trylock() and common sense. Or as ocfs2 put it "kernel 1, world 0". Rename it to down_try() (which makes more sense anyway), and reverse it. Fortunately there aren't a huge number of callers left. I took the liberty of reversing the sense of usb_trylock_device() without renaming it: it's only used in one place anyway. Signed-off-by: Rusty Russell Cc: gregkh@suse.de Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: Brian S. Julin Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox diff -r c4dfb28595bc Documentation/DocBook/kernel-locking.tmpl --- a/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:27:58 2008 +1000 +++ b/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:32:35 2008 +1000 @@ -1906,7 +1906,7 @@ machines due to caching. down() - There is a down_trylock() which can be + There is a down_try() which can be used inside interrupt context, as it will not sleep. up() will also never sleep. diff -r c4dfb28595bc arch/ia64/kernel/salinfo.c --- a/arch/ia64/kernel/salinfo.c Mon May 05 10:27:58 2008 +1000 +++ b/arch/ia64/kernel/salinfo.c Mon May 05 10:32:35 2008 +1000 @@ -192,7 +192,7 @@ static void static void salinfo_work_to_do(struct salinfo_data *data) { - down_trylock(&data->mutex); + down_try(&data->mutex); up(&data->mutex); } @@ -309,7 +309,7 @@ salinfo_event_read(struct file *file, ch int i, n, cpu = -1; retry: - if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) { + if (cpus_empty(data->cpu_event) && !down_try(&data->mutex)) { if (file->f_flags & O_NONBLOCK) return -EAGAIN; if (down_interruptible(&data->mutex)) diff -r c4dfb28595bc drivers/char/snsc.c --- a/drivers/char/snsc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/snsc.c Mon May 05 10:32:35 2008 +1000 @@ -161,7 +161,7 @@ scdrv_read(struct file *file, char __use struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the read buffer */ - if (down_trylock(&sd->sd_rbs)) { + if (!down_try(&sd->sd_rbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ @@ -253,7 +253,7 @@ scdrv_write(struct file *file, const cha struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the write buffer */ - if (down_trylock(&sd->sd_wbs)) { + if (!down_try(&sd->sd_wbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ diff -r c4dfb28595bc drivers/char/viotape.c --- a/drivers/char/viotape.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/viotape.c Mon May 05 10:32:35 2008 +1000 @@ -361,7 +361,7 @@ static ssize_t viotap_write(struct file * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } @@ -451,7 +451,7 @@ static ssize_t viotap_read(struct file * * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } diff -r c4dfb28595bc drivers/infiniband/core/user_mad.c --- a/drivers/infiniband/core/user_mad.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/infiniband/core/user_mad.c Mon May 05 10:32:35 2008 +1000 @@ -890,7 +890,7 @@ static int ib_umad_sm_open(struct inode return -ENXIO; if (filp->f_flags & O_NONBLOCK) { - if (down_trylock(&port->sm_sem)) { + if (!down_try(&port->sm_sem)) { ret = -EAGAIN; goto fail; } diff -r c4dfb28595bc drivers/input/serio/hil_mlc.c --- a/drivers/input/serio/hil_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hil_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -607,7 +607,7 @@ static inline void hilse_setup_input(hil do_gettimeofday(&(mlc->instart)); mlc->icount = 15; memset(mlc->ipacket, 0, 16 * sizeof(hil_packet)); - BUG_ON(down_trylock(&mlc->isem)); + BUG_ON(!down_try(&mlc->isem)); } #ifdef HIL_MLC_DEBUG @@ -694,7 +694,7 @@ static int hilse_donode(hil_mlc *mlc) out2: write_unlock_irqrestore(&mlc->lock, flags); - if (down_trylock(&mlc->osem)) { + if (!down_try(&mlc->osem)) { nextidx = HILSEN_DOZE; break; } diff -r c4dfb28595bc drivers/input/serio/hp_sdc_mlc.c --- a/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -148,7 +148,7 @@ static int hp_sdc_mlc_in(hil_mlc *mlc, s priv = mlc->priv; /* Try to down the semaphore */ - if (down_trylock(&mlc->isem)) { + if (!down_try(&mlc->isem)) { struct timeval tv; if (priv->emtestmode) { mlc->ipacket[0] = @@ -186,13 +186,13 @@ static int hp_sdc_mlc_cts(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphores -- they should be up. */ - BUG_ON(down_trylock(&mlc->isem)); - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->isem)); + BUG_ON(!down_try(&mlc->osem)); up(&mlc->isem); up(&mlc->osem); - if (down_trylock(&mlc->csem)) { + if (!down_try(&mlc->csem)) { if (priv->trans.act.semaphore != &mlc->csem) goto poll; else @@ -229,7 +229,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphore -- it should be up. */ - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->osem)); if (mlc->opacket & HIL_DO_ALTER_CTRL) goto do_control; @@ -240,7 +240,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) return; } /* Shouldn't be sending commands when loop may be busy */ - BUG_ON(down_trylock(&mlc->csem)); + BUG_ON(!down_try(&mlc->csem)); up(&mlc->csem); priv->trans.actidx = 0; @@ -296,7 +296,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv->tseq[3] = 0; if (mlc->opacket & HIL_CTRL_APE) { priv->tseq[3] |= HP_SDC_LPC_APE_IPF; - down_trylock(&mlc->csem); + down_try(&mlc->csem); } enqueue: hp_sdc_enqueue_transaction(&priv->trans); diff -r c4dfb28595bc drivers/md/dm-raid1.c --- a/drivers/md/dm-raid1.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/md/dm-raid1.c Mon May 05 10:32:35 2008 +1000 @@ -587,7 +587,7 @@ static void rh_recovery_prepare(struct r /* Extra reference to avoid race with rh_stop_recovery */ atomic_inc(&rh->recovery_in_flight); - while (!down_trylock(&rh->recovery_count)) { + while (down_try(&rh->recovery_count)) { atomic_inc(&rh->recovery_in_flight); if (__rh_recovery_prepare(rh) <= 0) { atomic_dec(&rh->recovery_in_flight); diff -r c4dfb28595bc drivers/net/3c527.c --- a/drivers/net/3c527.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/3c527.c Mon May 05 10:32:35 2008 +1000 @@ -577,7 +577,7 @@ static int mc32_command_nowait(struct ne int ioaddr = dev->base_addr; int ret = -1; - if (down_trylock(&lp->cmd_mutex) == 0) + if (down_try(&lp->cmd_mutex)) { lp->cmd_nonblocking=1; lp->exec_box->mbox=0; diff -r c4dfb28595bc drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/irda/sir_dev.c Mon May 05 10:32:35 2008 +1000 @@ -286,7 +286,7 @@ int sirdev_schedule_request(struct sir_d IRDA_DEBUG(2, "%s - state=0x%04x / param=%u\n", __FUNCTION__, initial_state, param); - if (down_trylock(&fsm->sem)) { + if (!down_try(&fsm->sem)) { if (in_interrupt() || in_atomic() || irqs_disabled()) { IRDA_DEBUG(1, "%s(), state machine busy!\n", __FUNCTION__); return -EWOULDBLOCK; diff -r c4dfb28595bc drivers/net/ps3_gelic_wireless.c --- a/drivers/net/ps3_gelic_wireless.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/ps3_gelic_wireless.c Mon May 05 10:32:35 2008 +1000 @@ -2151,7 +2151,7 @@ static void gelic_wl_disconnect_event(st * As it waits with timeout, just leave assoc_done * uncompleted, then it terminates with timeout */ - if (down_trylock(&wl->assoc_stat_lock)) { + if (!down_try(&wl->assoc_stat_lock)) { pr_debug("%s: already locked\n", __func__); lock = 0; } else { diff -r c4dfb28595bc drivers/net/wireless/airo.c --- a/drivers/net/wireless/airo.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/wireless/airo.c Mon May 05 10:32:35 2008 +1000 @@ -2138,7 +2138,7 @@ static int airo_start_xmit(struct sk_buf fids[i] |= (len << 16); priv->xmit.skb = skb; priv->xmit.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT, &priv->jobs); @@ -2209,7 +2209,7 @@ static int airo_start_xmit11(struct sk_b fids[i] |= (len << 16); priv->xmit11.skb = skb; priv->xmit11.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT11, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT11, &priv->jobs); @@ -2257,7 +2257,7 @@ static struct net_device_stats *airo_get if (!test_bit(JOB_STATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_STATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else @@ -2284,7 +2284,7 @@ static void airo_set_multicast_list(stru if ((dev->flags ^ ai->flags) & IFF_PROMISC) { change_bit(FLAG_PROMISC, &ai->flags); - if (down_trylock(&ai->sem) != 0) { + if (!down_try(&ai->sem)) { set_bit(JOB_PROMISC, &ai->jobs); wake_up_interruptible(&ai->thr_wait); } else @@ -3211,7 +3211,7 @@ static irqreturn_t airo_interrupt(int ir set_bit(FLAG_UPDATE_UNI, &apriv->flags); set_bit(FLAG_UPDATE_MULTI, &apriv->flags); - if (down_trylock(&apriv->sem) != 0) { + if (!down_try(&apriv->sem)) { set_bit(JOB_EVENT, &apriv->jobs); wake_up_interruptible(&apriv->thr_wait); } else @@ -7658,7 +7658,7 @@ static struct iw_statistics *airo_get_wi if (!test_bit(JOB_WSTATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_WSTATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else diff -r c4dfb28595bc drivers/scsi/aacraid/commsup.c --- a/drivers/scsi/aacraid/commsup.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/scsi/aacraid/commsup.c Mon May 05 10:32:35 2008 +1000 @@ -490,7 +490,7 @@ int aac_fib_send(u16 command, struct fib * hardware failure has occurred. */ unsigned long count = 36000000L; /* 3 minutes */ - while (down_trylock(&fibptr->event_wait)) { + while (!down_try(&fibptr->event_wait)) { int blink; if (--count == 0) { struct aac_queue * q = &dev->queues->queue[AdapNormCmdQueue]; diff -r c4dfb28595bc drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/core/usb.c Mon May 05 10:32:35 2008 +1000 @@ -477,7 +477,7 @@ int usb_lock_device_for_reset(struct usb } } - while (usb_trylock_device(udev) != 0) { + while (!usb_trylock_device(udev)) { /* If we can't acquire the lock after waiting one second, * we're probably deadlocked */ diff -r c4dfb28595bc drivers/usb/gadget/inode.c --- a/drivers/usb/gadget/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/gadget/inode.c Mon May 05 10:32:35 2008 +1000 @@ -298,7 +298,7 @@ get_ready_ep (unsigned f_flags, struct e int val; if (f_flags & O_NONBLOCK) { - if (down_trylock (&epdata->lock) != 0) + if (!down_try (&epdata->lock)) goto nonblock; if (epdata->state != STATE_EP_ENABLED) { up (&epdata->lock); diff -r c4dfb28595bc drivers/watchdog/ar7_wdt.c --- a/drivers/watchdog/ar7_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/ar7_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -179,7 +179,7 @@ static int ar7_wdt_open(struct inode *in static int ar7_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; ar7_wdt_enable_wdt(); expect_close = 0; diff -r c4dfb28595bc drivers/watchdog/it8712f_wdt.c --- a/drivers/watchdog/it8712f_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/it8712f_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -306,7 +306,7 @@ it8712f_wdt_open(struct inode *inode, st it8712f_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&it8712f_wdt_sem)) + if (!down_try(&it8712f_wdt_sem)) return -EBUSY; it8712f_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/s3c2410_wdt.c --- a/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -211,7 +211,7 @@ static int s3c2410wdt_set_heartbeat(int static int s3c2410wdt_open(struct inode *inode, struct file *file) { - if(down_trylock(&open_lock)) + if(!down_try(&open_lock)) return -EBUSY; if (nowayout) diff -r c4dfb28595bc drivers/watchdog/sc1200wdt.c --- a/drivers/watchdog/sc1200wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/sc1200wdt.c Mon May 05 10:32:35 2008 +1000 @@ -151,7 +151,7 @@ static int sc1200wdt_open(struct inode * static int sc1200wdt_open(struct inode *inode, struct file *file) { /* allow one at a time */ - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (timeout > MAX_TIMEOUT) diff -r c4dfb28595bc drivers/watchdog/scx200_wdt.c --- a/drivers/watchdog/scx200_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/scx200_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -92,7 +92,7 @@ static int scx200_wdt_open(struct inode static int scx200_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; scx200_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/wdt_pci.c --- a/drivers/watchdog/wdt_pci.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/wdt_pci.c Mon May 05 10:32:35 2008 +1000 @@ -426,7 +426,7 @@ static int wdtpci_ioctl(struct inode *in static int wdtpci_open(struct inode *inode, struct file *file) { - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (nowayout) { diff -r c4dfb28595bc fs/ocfs2/inode.c --- a/fs/ocfs2/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/ocfs2/inode.c Mon May 05 10:32:35 2008 +1000 @@ -1062,10 +1062,6 @@ void ocfs2_clear_inode(struct inode *ino (unsigned long long)oi->ip_blkno); mutex_unlock(&oi->ip_io_mutex); - /* - * down_trylock() returns 0, down_write_trylock() returns 1 - * kernel 1, world 0 - */ mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem), "Clear inode of %llu, alloc_sem is locked\n", (unsigned long long)oi->ip_blkno); diff -r c4dfb28595bc fs/reiserfs/journal.c --- a/fs/reiserfs/journal.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/reiserfs/journal.c Mon May 05 10:32:35 2008 +1000 @@ -1412,7 +1412,7 @@ static int flush_journal_list(struct sup /* if flushall == 0, the lock is already held */ if (flushall) { down(&journal->j_flush_sem); - } else if (!down_trylock(&journal->j_flush_sem)) { + } else if (down_try(&journal->j_flush_sem)) { BUG(); } diff -r c4dfb28595bc fs/xfs/linux-2.6/sema.h --- a/fs/xfs/linux-2.6/sema.h Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/sema.h Mon May 05 10:32:36 2008 +1000 @@ -36,17 +36,15 @@ typedef struct semaphore sema_t; static inline int issemalocked(sema_t *sp) { - return down_trylock(sp) || (up(sp), 0); + return !down_try(sp) || (up(sp), 0); } /* - * Map cpsema (try to get the sema) to down_trylock. We need to switch - * the return values since cpsema returns 1 (acquired) 0 (failed) and - * down_trylock returns the reverse 0 (acquired) 1 (failed). + * Map cpsema (try to get the sema) to down_try. */ static inline int cpsema(sema_t *sp) { - return down_trylock(sp) ? 0 : 1; + return down_try(sp); } #endif /* __XFS_SUPPORT_SEMA_H__ */ diff -r c4dfb28595bc fs/xfs/linux-2.6/xfs_buf.c --- a/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:32:36 2008 +1000 @@ -530,7 +530,7 @@ found: * if this does not work then we need to drop the * spinlock and do a hard attempt on the semaphore. */ - if (down_trylock(&bp->b_sema)) { + if (!down_try(&bp->b_sema)) { if (!(flags & XBF_TRYLOCK)) { /* wait for buffer ownership */ XB_TRACE(bp, "get_lock", 0); @@ -873,7 +873,7 @@ xfs_buf_cond_lock( { int locked; - locked = down_trylock(&bp->b_sema) == 0; + locked = down_try(&bp->b_sema); if (locked) { XB_SET_OWNER(bp); } diff -r c4dfb28595bc include/linux/mutex.h --- a/include/linux/mutex.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/mutex.h Mon May 05 10:32:36 2008 +1000 @@ -141,10 +141,6 @@ extern int __must_check mutex_lock_killa # define mutex_lock_killable_nested(lock, subclass) mutex_lock_killable(lock) #endif -/* - * NOTE: mutex_trylock() follows the spin_trylock() convention, - * not the down_trylock() convention! - */ extern int mutex_trylock(struct mutex *lock); extern void mutex_unlock(struct mutex *lock); diff -r c4dfb28595bc include/linux/semaphore.h --- a/include/linux/semaphore.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/semaphore.h Mon May 05 10:32:36 2008 +1000 @@ -44,7 +44,7 @@ extern void down(struct semaphore *sem); extern void down(struct semaphore *sem); extern int __must_check down_interruptible(struct semaphore *sem); extern int __must_check down_killable(struct semaphore *sem); -extern int __must_check down_trylock(struct semaphore *sem); +extern int __must_check down_try(struct semaphore *sem); extern int __must_check down_timeout(struct semaphore *sem, long jiffies); extern void up(struct semaphore *sem); diff -r c4dfb28595bc include/linux/usb.h --- a/include/linux/usb.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/usb.h Mon May 05 10:32:36 2008 +1000 @@ -491,7 +491,7 @@ extern void usb_put_dev(struct usb_devic /* USB device locking */ #define usb_lock_device(udev) down(&(udev)->dev.sem) #define usb_unlock_device(udev) up(&(udev)->dev.sem) -#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) +#define usb_trylock_device(udev) down_try(&(udev)->dev.sem) extern int usb_lock_device_for_reset(struct usb_device *udev, const struct usb_interface *iface); diff -r c4dfb28595bc kernel/mutex.c --- a/kernel/mutex.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/mutex.c Mon May 05 10:32:36 2008 +1000 @@ -373,8 +373,8 @@ static inline int __mutex_trylock_slowpa * Try to acquire the mutex atomically. Returns 1 if the mutex * has been acquired successfully, and 0 on contention. * - * NOTE: this function follows the spin_trylock() convention, so - * it is negated to the down_trylock() return values! Be careful + * NOTE: this function follows the spin_trylock()/down_try() convention, + * so it is negated to the old down_trylock() return values! Be careful * about this when converting semaphore users to mutexes. * * This function must not be used in interrupt context. The diff -r c4dfb28595bc kernel/printk.c --- a/kernel/printk.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/printk.c Mon May 05 10:32:36 2008 +1000 @@ -986,7 +986,7 @@ EXPORT_SYMBOL(acquire_console_sem); int try_acquire_console_sem(void) { - if (down_trylock(&console_sem)) + if (!down_try(&console_sem)) return -1; console_locked = 1; console_may_schedule = 0; @@ -1083,7 +1083,7 @@ void console_unblank(void) * oops_in_progress is set to 1.. */ if (oops_in_progress) { - if (down_trylock(&console_sem) != 0) + if (!down_try(&console_sem)) return; } else acquire_console_sem(); diff -r c4dfb28595bc kernel/semaphore.c --- a/kernel/semaphore.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/semaphore.c Mon May 05 10:32:36 2008 +1000 @@ -14,7 +14,7 @@ * Some notes on the implementation: * * The spinlock controls access to the other members of the semaphore. - * down_trylock() and up() can be called from interrupt context, so we + * down_try() and up() can be called from interrupt context, so we * have to disable interrupts when taking the lock. It turns out various * parts of the kernel expect to be able to use down() on a semaphore in * interrupt context when they know it will succeed, so we have to use @@ -114,19 +114,18 @@ EXPORT_SYMBOL(down_killable); EXPORT_SYMBOL(down_killable); /** - * down_trylock - try to acquire the semaphore, without waiting + * down_try - try to acquire the semaphore, without waiting * @sem: the semaphore to be acquired * - * Try to acquire the semaphore atomically. Returns 0 if the mutex has - * been acquired successfully or 1 if it it cannot be acquired. + * Try to acquire the semaphore atomically. Returns true if the mutex has + * been acquired successfully or 0 if it it cannot be acquired. * - * NOTE: This return value is inverted from both spin_trylock and - * mutex_trylock! Be careful about this when converting code. + * NOTE: This replaces down_trylock() which returned the reverse. * * Unlike mutex_trylock, this function can be used from interrupt context, * and the semaphore can be released by any task or interrupt. */ -int down_trylock(struct semaphore *sem) +int down_try(struct semaphore *sem) { unsigned long flags; int count; @@ -137,9 +136,9 @@ int down_trylock(struct semaphore *sem) sem->count = count; spin_unlock_irqrestore(&sem->lock, flags); - return (count < 0); + return (count >= 0); } -EXPORT_SYMBOL(down_trylock); +EXPORT_SYMBOL(down_try); /** * down_timeout - acquire the semaphore within a specified time From owner-xfs@oss.sgi.com Sun May 4 18:46:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 18:47:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_26, J_CHICKENPOX_46 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m451kRpV001679 for ; Sun, 4 May 2008 18:46:28 -0700 X-ASG-Debug-ID: 1209952007-5ba300f50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ozlabs.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 980F5123B9E for ; Sun, 4 May 2008 18:46:47 -0700 (PDT) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by cuda.sgi.com with ESMTP id ccs2LUvdFgROePy4 for ; Sun, 04 May 2008 18:46:47 -0700 (PDT) Received: from vivaldi.local (unknown [203.213.241.221]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPSA id 84359DDE07; Mon, 5 May 2008 11:46:43 +1000 (EST) To: linux-kernel@vger.kernel.org From: Rusty Russell Date: Mon, 5 May 2008 01:46:36 +0000 X-ASG-Orig-Subj: [PATCH] Replace down_trylock() with down_try(), reverse return values. Subject: [PATCH] Replace down_trylock() with down_try(), reverse return values. Cc: gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox , kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: "Brian S. Julin" Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200805051146.38563.rusty@rustcorp.com.au> Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ozlabs.org[203.10.76.45] X-Barracuda-Start-Time: 1209952008 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.1, rules version 3.1.49695 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15771 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: rusty@rustcorp.com.au Precedence: bulk X-list: xfs down_trylock() returns 1 on failure, 0 on success. This differs from spin_trylock(), mutex_trylock() and common sense. Or as ocfs2 put it "kernel 1, world 0". Rename it to down_try() (which makes more sense anyway), and reverse it. Fortunately there aren't a huge number of callers left. I took the liberty of reversing the sense of usb_trylock_device() without renaming it: it's only used in one place anyway. Signed-off-by: Rusty Russell Cc: gregkh@suse.de Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: "Brian S. Julin" Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox diff -r c4dfb28595bc Documentation/DocBook/kernel-locking.tmpl --- a/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:27:58 2008 +1000 +++ b/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:32:35 2008 +1000 @@ -1906,7 +1906,7 @@ machines due to caching. down() - There is a down_trylock() which can be + There is a down_try() which can be used inside interrupt context, as it will not sleep. up() will also never sleep. diff -r c4dfb28595bc arch/ia64/kernel/salinfo.c --- a/arch/ia64/kernel/salinfo.c Mon May 05 10:27:58 2008 +1000 +++ b/arch/ia64/kernel/salinfo.c Mon May 05 10:32:35 2008 +1000 @@ -192,7 +192,7 @@ static void static void salinfo_work_to_do(struct salinfo_data *data) { - down_trylock(&data->mutex); + down_try(&data->mutex); up(&data->mutex); } @@ -309,7 +309,7 @@ salinfo_event_read(struct file *file, ch int i, n, cpu = -1; retry: - if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) { + if (cpus_empty(data->cpu_event) && !down_try(&data->mutex)) { if (file->f_flags & O_NONBLOCK) return -EAGAIN; if (down_interruptible(&data->mutex)) diff -r c4dfb28595bc drivers/char/snsc.c --- a/drivers/char/snsc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/snsc.c Mon May 05 10:32:35 2008 +1000 @@ -161,7 +161,7 @@ scdrv_read(struct file *file, char __use struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the read buffer */ - if (down_trylock(&sd->sd_rbs)) { + if (!down_try(&sd->sd_rbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ @@ -253,7 +253,7 @@ scdrv_write(struct file *file, const cha struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the write buffer */ - if (down_trylock(&sd->sd_wbs)) { + if (!down_try(&sd->sd_wbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ diff -r c4dfb28595bc drivers/char/viotape.c --- a/drivers/char/viotape.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/viotape.c Mon May 05 10:32:35 2008 +1000 @@ -361,7 +361,7 @@ static ssize_t viotap_write(struct file * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } @@ -451,7 +451,7 @@ static ssize_t viotap_read(struct file * * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } diff -r c4dfb28595bc drivers/infiniband/core/user_mad.c --- a/drivers/infiniband/core/user_mad.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/infiniband/core/user_mad.c Mon May 05 10:32:35 2008 +1000 @@ -890,7 +890,7 @@ static int ib_umad_sm_open(struct inode return -ENXIO; if (filp->f_flags & O_NONBLOCK) { - if (down_trylock(&port->sm_sem)) { + if (!down_try(&port->sm_sem)) { ret = -EAGAIN; goto fail; } diff -r c4dfb28595bc drivers/input/serio/hil_mlc.c --- a/drivers/input/serio/hil_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hil_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -607,7 +607,7 @@ static inline void hilse_setup_input(hil do_gettimeofday(&(mlc->instart)); mlc->icount = 15; memset(mlc->ipacket, 0, 16 * sizeof(hil_packet)); - BUG_ON(down_trylock(&mlc->isem)); + BUG_ON(!down_try(&mlc->isem)); } #ifdef HIL_MLC_DEBUG @@ -694,7 +694,7 @@ static int hilse_donode(hil_mlc *mlc) out2: write_unlock_irqrestore(&mlc->lock, flags); - if (down_trylock(&mlc->osem)) { + if (!down_try(&mlc->osem)) { nextidx = HILSEN_DOZE; break; } diff -r c4dfb28595bc drivers/input/serio/hp_sdc_mlc.c --- a/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -148,7 +148,7 @@ static int hp_sdc_mlc_in(hil_mlc *mlc, s priv = mlc->priv; /* Try to down the semaphore */ - if (down_trylock(&mlc->isem)) { + if (!down_try(&mlc->isem)) { struct timeval tv; if (priv->emtestmode) { mlc->ipacket[0] = @@ -186,13 +186,13 @@ static int hp_sdc_mlc_cts(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphores -- they should be up. */ - BUG_ON(down_trylock(&mlc->isem)); - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->isem)); + BUG_ON(!down_try(&mlc->osem)); up(&mlc->isem); up(&mlc->osem); - if (down_trylock(&mlc->csem)) { + if (!down_try(&mlc->csem)) { if (priv->trans.act.semaphore != &mlc->csem) goto poll; else @@ -229,7 +229,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphore -- it should be up. */ - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->osem)); if (mlc->opacket & HIL_DO_ALTER_CTRL) goto do_control; @@ -240,7 +240,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) return; } /* Shouldn't be sending commands when loop may be busy */ - BUG_ON(down_trylock(&mlc->csem)); + BUG_ON(!down_try(&mlc->csem)); up(&mlc->csem); priv->trans.actidx = 0; @@ -296,7 +296,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv->tseq[3] = 0; if (mlc->opacket & HIL_CTRL_APE) { priv->tseq[3] |= HP_SDC_LPC_APE_IPF; - down_trylock(&mlc->csem); + down_try(&mlc->csem); } enqueue: hp_sdc_enqueue_transaction(&priv->trans); diff -r c4dfb28595bc drivers/md/dm-raid1.c --- a/drivers/md/dm-raid1.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/md/dm-raid1.c Mon May 05 10:32:35 2008 +1000 @@ -587,7 +587,7 @@ static void rh_recovery_prepare(struct r /* Extra reference to avoid race with rh_stop_recovery */ atomic_inc(&rh->recovery_in_flight); - while (!down_trylock(&rh->recovery_count)) { + while (down_try(&rh->recovery_count)) { atomic_inc(&rh->recovery_in_flight); if (__rh_recovery_prepare(rh) <= 0) { atomic_dec(&rh->recovery_in_flight); diff -r c4dfb28595bc drivers/net/3c527.c --- a/drivers/net/3c527.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/3c527.c Mon May 05 10:32:35 2008 +1000 @@ -577,7 +577,7 @@ static int mc32_command_nowait(struct ne int ioaddr = dev->base_addr; int ret = -1; - if (down_trylock(&lp->cmd_mutex) == 0) + if (down_try(&lp->cmd_mutex)) { lp->cmd_nonblocking=1; lp->exec_box->mbox=0; diff -r c4dfb28595bc drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/irda/sir_dev.c Mon May 05 10:32:35 2008 +1000 @@ -286,7 +286,7 @@ int sirdev_schedule_request(struct sir_d IRDA_DEBUG(2, "%s - state=0x%04x / param=%u\n", __FUNCTION__, initial_state, param); - if (down_trylock(&fsm->sem)) { + if (!down_try(&fsm->sem)) { if (in_interrupt() || in_atomic() || irqs_disabled()) { IRDA_DEBUG(1, "%s(), state machine busy!\n", __FUNCTION__); return -EWOULDBLOCK; diff -r c4dfb28595bc drivers/net/ps3_gelic_wireless.c --- a/drivers/net/ps3_gelic_wireless.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/ps3_gelic_wireless.c Mon May 05 10:32:35 2008 +1000 @@ -2151,7 +2151,7 @@ static void gelic_wl_disconnect_event(st * As it waits with timeout, just leave assoc_done * uncompleted, then it terminates with timeout */ - if (down_trylock(&wl->assoc_stat_lock)) { + if (!down_try(&wl->assoc_stat_lock)) { pr_debug("%s: already locked\n", __func__); lock = 0; } else { diff -r c4dfb28595bc drivers/net/wireless/airo.c --- a/drivers/net/wireless/airo.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/wireless/airo.c Mon May 05 10:32:35 2008 +1000 @@ -2138,7 +2138,7 @@ static int airo_start_xmit(struct sk_buf fids[i] |= (len << 16); priv->xmit.skb = skb; priv->xmit.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT, &priv->jobs); @@ -2209,7 +2209,7 @@ static int airo_start_xmit11(struct sk_b fids[i] |= (len << 16); priv->xmit11.skb = skb; priv->xmit11.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT11, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT11, &priv->jobs); @@ -2257,7 +2257,7 @@ static struct net_device_stats *airo_get if (!test_bit(JOB_STATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_STATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else @@ -2284,7 +2284,7 @@ static void airo_set_multicast_list(stru if ((dev->flags ^ ai->flags) & IFF_PROMISC) { change_bit(FLAG_PROMISC, &ai->flags); - if (down_trylock(&ai->sem) != 0) { + if (!down_try(&ai->sem)) { set_bit(JOB_PROMISC, &ai->jobs); wake_up_interruptible(&ai->thr_wait); } else @@ -3211,7 +3211,7 @@ static irqreturn_t airo_interrupt(int ir set_bit(FLAG_UPDATE_UNI, &apriv->flags); set_bit(FLAG_UPDATE_MULTI, &apriv->flags); - if (down_trylock(&apriv->sem) != 0) { + if (!down_try(&apriv->sem)) { set_bit(JOB_EVENT, &apriv->jobs); wake_up_interruptible(&apriv->thr_wait); } else @@ -7658,7 +7658,7 @@ static struct iw_statistics *airo_get_wi if (!test_bit(JOB_WSTATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_WSTATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else diff -r c4dfb28595bc drivers/scsi/aacraid/commsup.c --- a/drivers/scsi/aacraid/commsup.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/scsi/aacraid/commsup.c Mon May 05 10:32:35 2008 +1000 @@ -490,7 +490,7 @@ int aac_fib_send(u16 command, struct fib * hardware failure has occurred. */ unsigned long count = 36000000L; /* 3 minutes */ - while (down_trylock(&fibptr->event_wait)) { + while (!down_try(&fibptr->event_wait)) { int blink; if (--count == 0) { struct aac_queue * q = &dev->queues->queue[AdapNormCmdQueue]; diff -r c4dfb28595bc drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/core/usb.c Mon May 05 10:32:35 2008 +1000 @@ -477,7 +477,7 @@ int usb_lock_device_for_reset(struct usb } } - while (usb_trylock_device(udev) != 0) { + while (!usb_trylock_device(udev)) { /* If we can't acquire the lock after waiting one second, * we're probably deadlocked */ diff -r c4dfb28595bc drivers/usb/gadget/inode.c --- a/drivers/usb/gadget/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/gadget/inode.c Mon May 05 10:32:35 2008 +1000 @@ -298,7 +298,7 @@ get_ready_ep (unsigned f_flags, struct e int val; if (f_flags & O_NONBLOCK) { - if (down_trylock (&epdata->lock) != 0) + if (!down_try (&epdata->lock)) goto nonblock; if (epdata->state != STATE_EP_ENABLED) { up (&epdata->lock); diff -r c4dfb28595bc drivers/watchdog/ar7_wdt.c --- a/drivers/watchdog/ar7_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/ar7_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -179,7 +179,7 @@ static int ar7_wdt_open(struct inode *in static int ar7_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; ar7_wdt_enable_wdt(); expect_close = 0; diff -r c4dfb28595bc drivers/watchdog/it8712f_wdt.c --- a/drivers/watchdog/it8712f_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/it8712f_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -306,7 +306,7 @@ it8712f_wdt_open(struct inode *inode, st it8712f_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&it8712f_wdt_sem)) + if (!down_try(&it8712f_wdt_sem)) return -EBUSY; it8712f_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/s3c2410_wdt.c --- a/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -211,7 +211,7 @@ static int s3c2410wdt_set_heartbeat(int static int s3c2410wdt_open(struct inode *inode, struct file *file) { - if(down_trylock(&open_lock)) + if(!down_try(&open_lock)) return -EBUSY; if (nowayout) diff -r c4dfb28595bc drivers/watchdog/sc1200wdt.c --- a/drivers/watchdog/sc1200wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/sc1200wdt.c Mon May 05 10:32:35 2008 +1000 @@ -151,7 +151,7 @@ static int sc1200wdt_open(struct inode * static int sc1200wdt_open(struct inode *inode, struct file *file) { /* allow one at a time */ - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (timeout > MAX_TIMEOUT) diff -r c4dfb28595bc drivers/watchdog/scx200_wdt.c --- a/drivers/watchdog/scx200_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/scx200_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -92,7 +92,7 @@ static int scx200_wdt_open(struct inode static int scx200_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; scx200_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/wdt_pci.c --- a/drivers/watchdog/wdt_pci.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/wdt_pci.c Mon May 05 10:32:35 2008 +1000 @@ -426,7 +426,7 @@ static int wdtpci_ioctl(struct inode *in static int wdtpci_open(struct inode *inode, struct file *file) { - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (nowayout) { diff -r c4dfb28595bc fs/ocfs2/inode.c --- a/fs/ocfs2/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/ocfs2/inode.c Mon May 05 10:32:35 2008 +1000 @@ -1062,10 +1062,6 @@ void ocfs2_clear_inode(struct inode *ino (unsigned long long)oi->ip_blkno); mutex_unlock(&oi->ip_io_mutex); - /* - * down_trylock() returns 0, down_write_trylock() returns 1 - * kernel 1, world 0 - */ mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem), "Clear inode of %llu, alloc_sem is locked\n", (unsigned long long)oi->ip_blkno); diff -r c4dfb28595bc fs/reiserfs/journal.c --- a/fs/reiserfs/journal.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/reiserfs/journal.c Mon May 05 10:32:35 2008 +1000 @@ -1412,7 +1412,7 @@ static int flush_journal_list(struct sup /* if flushall == 0, the lock is already held */ if (flushall) { down(&journal->j_flush_sem); - } else if (!down_trylock(&journal->j_flush_sem)) { + } else if (down_try(&journal->j_flush_sem)) { BUG(); } diff -r c4dfb28595bc fs/xfs/linux-2.6/sema.h --- a/fs/xfs/linux-2.6/sema.h Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/sema.h Mon May 05 10:32:36 2008 +1000 @@ -36,17 +36,15 @@ typedef struct semaphore sema_t; static inline int issemalocked(sema_t *sp) { - return down_trylock(sp) || (up(sp), 0); + return !down_try(sp) || (up(sp), 0); } /* - * Map cpsema (try to get the sema) to down_trylock. We need to switch - * the return values since cpsema returns 1 (acquired) 0 (failed) and - * down_trylock returns the reverse 0 (acquired) 1 (failed). + * Map cpsema (try to get the sema) to down_try. */ static inline int cpsema(sema_t *sp) { - return down_trylock(sp) ? 0 : 1; + return down_try(sp); } #endif /* __XFS_SUPPORT_SEMA_H__ */ diff -r c4dfb28595bc fs/xfs/linux-2.6/xfs_buf.c --- a/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:32:36 2008 +1000 @@ -530,7 +530,7 @@ found: * if this does not work then we need to drop the * spinlock and do a hard attempt on the semaphore. */ - if (down_trylock(&bp->b_sema)) { + if (!down_try(&bp->b_sema)) { if (!(flags & XBF_TRYLOCK)) { /* wait for buffer ownership */ XB_TRACE(bp, "get_lock", 0); @@ -873,7 +873,7 @@ xfs_buf_cond_lock( { int locked; - locked = down_trylock(&bp->b_sema) == 0; + locked = down_try(&bp->b_sema); if (locked) { XB_SET_OWNER(bp); } diff -r c4dfb28595bc include/linux/mutex.h --- a/include/linux/mutex.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/mutex.h Mon May 05 10:32:36 2008 +1000 @@ -141,10 +141,6 @@ extern int __must_check mutex_lock_killa # define mutex_lock_killable_nested(lock, subclass) mutex_lock_killable(lock) #endif -/* - * NOTE: mutex_trylock() follows the spin_trylock() convention, - * not the down_trylock() convention! - */ extern int mutex_trylock(struct mutex *lock); extern void mutex_unlock(struct mutex *lock); diff -r c4dfb28595bc include/linux/semaphore.h --- a/include/linux/semaphore.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/semaphore.h Mon May 05 10:32:36 2008 +1000 @@ -44,7 +44,7 @@ extern void down(struct semaphore *sem); extern void down(struct semaphore *sem); extern int __must_check down_interruptible(struct semaphore *sem); extern int __must_check down_killable(struct semaphore *sem); -extern int __must_check down_trylock(struct semaphore *sem); +extern int __must_check down_try(struct semaphore *sem); extern int __must_check down_timeout(struct semaphore *sem, long jiffies); extern void up(struct semaphore *sem); diff -r c4dfb28595bc include/linux/usb.h --- a/include/linux/usb.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/usb.h Mon May 05 10:32:36 2008 +1000 @@ -491,7 +491,7 @@ extern void usb_put_dev(struct usb_devic /* USB device locking */ #define usb_lock_device(udev) down(&(udev)->dev.sem) #define usb_unlock_device(udev) up(&(udev)->dev.sem) -#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) +#define usb_trylock_device(udev) down_try(&(udev)->dev.sem) extern int usb_lock_device_for_reset(struct usb_device *udev, const struct usb_interface *iface); diff -r c4dfb28595bc kernel/mutex.c --- a/kernel/mutex.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/mutex.c Mon May 05 10:32:36 2008 +1000 @@ -373,8 +373,8 @@ static inline int __mutex_trylock_slowpa * Try to acquire the mutex atomically. Returns 1 if the mutex * has been acquired successfully, and 0 on contention. * - * NOTE: this function follows the spin_trylock() convention, so - * it is negated to the down_trylock() return values! Be careful + * NOTE: this function follows the spin_trylock()/down_try() convention, + * so it is negated to the old down_trylock() return values! Be careful * about this when converting semaphore users to mutexes. * * This function must not be used in interrupt context. The diff -r c4dfb28595bc kernel/printk.c --- a/kernel/printk.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/printk.c Mon May 05 10:32:36 2008 +1000 @@ -986,7 +986,7 @@ EXPORT_SYMBOL(acquire_console_sem); int try_acquire_console_sem(void) { - if (down_trylock(&console_sem)) + if (!down_try(&console_sem)) return -1; console_locked = 1; console_may_schedule = 0; @@ -1083,7 +1083,7 @@ void console_unblank(void) * oops_in_progress is set to 1.. */ if (oops_in_progress) { - if (down_trylock(&console_sem) != 0) + if (!down_try(&console_sem)) return; } else acquire_console_sem(); diff -r c4dfb28595bc kernel/semaphore.c --- a/kernel/semaphore.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/semaphore.c Mon May 05 10:32:36 2008 +1000 @@ -14,7 +14,7 @@ * Some notes on the implementation: * * The spinlock controls access to the other members of the semaphore. - * down_trylock() and up() can be called from interrupt context, so we + * down_try() and up() can be called from interrupt context, so we * have to disable interrupts when taking the lock. It turns out various * parts of the kernel expect to be able to use down() on a semaphore in * interrupt context when they know it will succeed, so we have to use @@ -114,19 +114,18 @@ EXPORT_SYMBOL(down_killable); EXPORT_SYMBOL(down_killable); /** - * down_trylock - try to acquire the semaphore, without waiting + * down_try - try to acquire the semaphore, without waiting * @sem: the semaphore to be acquired * - * Try to acquire the semaphore atomically. Returns 0 if the mutex has - * been acquired successfully or 1 if it it cannot be acquired. + * Try to acquire the semaphore atomically. Returns true if the mutex has + * been acquired successfully or 0 if it it cannot be acquired. * - * NOTE: This return value is inverted from both spin_trylock and - * mutex_trylock! Be careful about this when converting code. + * NOTE: This replaces down_trylock() which returned the reverse. * * Unlike mutex_trylock, this function can be used from interrupt context, * and the semaphore can be released by any task or interrupt. */ -int down_trylock(struct semaphore *sem) +int down_try(struct semaphore *sem) { unsigned long flags; int count; @@ -137,9 +136,9 @@ int down_trylock(struct semaphore *sem) sem->count = count; spin_unlock_irqrestore(&sem->lock, flags); - return (count < 0); + return (count >= 0); } -EXPORT_SYMBOL(down_trylock); +EXPORT_SYMBOL(down_try); /** * down_timeout - acquire the semaphore within a specified time From owner-xfs@oss.sgi.com Sun May 4 18:56:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 18:56:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_26, J_CHICKENPOX_46 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m451u6Vs002501 for ; Sun, 4 May 2008 18:56:07 -0700 X-ASG-Debug-ID: 1209952606-41d403200000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ozlabs.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0E309163068B for ; Sun, 4 May 2008 18:56:47 -0700 (PDT) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by cuda.sgi.com with ESMTP id NkdzIdrVj00wVNkn for ; Sun, 04 May 2008 18:56:47 -0700 (PDT) Received: from vivaldi.local (unknown [203.213.241.221]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPSA id E3607DDE02; Mon, 5 May 2008 11:56:42 +1000 (EST) To: linux-kernel@vger.kernel.org From: Rusty Russell Date: Mon, 5 May 2008 01:56:35 +0000 X-ASG-Orig-Subj: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Subject: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Cc: gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: "Brian S. Julin" Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805051156.36437.rusty@rustcorp.com.au> X-Barracuda-Connect: ozlabs.org[203.10.76.45] X-Barracuda-Start-Time: 1209952610 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.1, rules version 3.1.49693 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15772 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: rusty@rustcorp.com.au Precedence: bulk X-list: xfs down_trylock() returns 1 on failure, 0 on success. This differs from spin_trylock(), mutex_trylock() and common sense. Or as ocfs2 put it "kernel 1, world 0". Rename it to down_try() (which makes more sense anyway), and reverse it. Fortunately there aren't a huge number of callers left. I took the liberty of reversing the sense of usb_trylock_device() without renaming it: it's only used in one place anyway. Signed-off-by: Rusty Russell Cc: gregkh@suse.de Cc: kaos@sgi.com Cc: Stephen Rothwell Cc: rolandd@cisco.com Cc: "Brian S. Julin" Cc: Martin Diehl Cc: mokuno@sm.sony.co.jp Cc: aacraid@adaptec.com Cc: mfasheh@suse.com Cc: wim@iguana.be Cc: xfs@oss.sgi.com Cc: reiserfs-devel@vger.kernel.org Cc: Matthew Wilcox diff -r c4dfb28595bc Documentation/DocBook/kernel-locking.tmpl --- a/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:27:58 2008 +1000 +++ b/Documentation/DocBook/kernel-locking.tmpl Mon May 05 10:32:35 2008 +1000 @@ -1906,7 +1906,7 @@ machines due to caching. down() - There is a down_trylock() which can be + There is a down_try() which can be used inside interrupt context, as it will not sleep. up() will also never sleep. diff -r c4dfb28595bc arch/ia64/kernel/salinfo.c --- a/arch/ia64/kernel/salinfo.c Mon May 05 10:27:58 2008 +1000 +++ b/arch/ia64/kernel/salinfo.c Mon May 05 10:32:35 2008 +1000 @@ -192,7 +192,7 @@ static void static void salinfo_work_to_do(struct salinfo_data *data) { - down_trylock(&data->mutex); + down_try(&data->mutex); up(&data->mutex); } @@ -309,7 +309,7 @@ salinfo_event_read(struct file *file, ch int i, n, cpu = -1; retry: - if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) { + if (cpus_empty(data->cpu_event) && !down_try(&data->mutex)) { if (file->f_flags & O_NONBLOCK) return -EAGAIN; if (down_interruptible(&data->mutex)) diff -r c4dfb28595bc drivers/char/snsc.c --- a/drivers/char/snsc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/snsc.c Mon May 05 10:32:35 2008 +1000 @@ -161,7 +161,7 @@ scdrv_read(struct file *file, char __use struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the read buffer */ - if (down_trylock(&sd->sd_rbs)) { + if (!down_try(&sd->sd_rbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ @@ -253,7 +253,7 @@ scdrv_write(struct file *file, const cha struct subch_data_s *sd = (struct subch_data_s *) file->private_data; /* try to get control of the write buffer */ - if (down_trylock(&sd->sd_wbs)) { + if (!down_try(&sd->sd_wbs)) { /* somebody else has it now; * if we're non-blocking, then exit... */ diff -r c4dfb28595bc drivers/char/viotape.c --- a/drivers/char/viotape.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/char/viotape.c Mon May 05 10:32:35 2008 +1000 @@ -361,7 +361,7 @@ static ssize_t viotap_write(struct file * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } @@ -451,7 +451,7 @@ static ssize_t viotap_read(struct file * * semaphore */ if (noblock) { - if (down_trylock(&reqSem)) { + if (!down_try(&reqSem)) { ret = -EWOULDBLOCK; goto free_op; } diff -r c4dfb28595bc drivers/infiniband/core/user_mad.c --- a/drivers/infiniband/core/user_mad.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/infiniband/core/user_mad.c Mon May 05 10:32:35 2008 +1000 @@ -890,7 +890,7 @@ static int ib_umad_sm_open(struct inode return -ENXIO; if (filp->f_flags & O_NONBLOCK) { - if (down_trylock(&port->sm_sem)) { + if (!down_try(&port->sm_sem)) { ret = -EAGAIN; goto fail; } diff -r c4dfb28595bc drivers/input/serio/hil_mlc.c --- a/drivers/input/serio/hil_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hil_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -607,7 +607,7 @@ static inline void hilse_setup_input(hil do_gettimeofday(&(mlc->instart)); mlc->icount = 15; memset(mlc->ipacket, 0, 16 * sizeof(hil_packet)); - BUG_ON(down_trylock(&mlc->isem)); + BUG_ON(!down_try(&mlc->isem)); } #ifdef HIL_MLC_DEBUG @@ -694,7 +694,7 @@ static int hilse_donode(hil_mlc *mlc) out2: write_unlock_irqrestore(&mlc->lock, flags); - if (down_trylock(&mlc->osem)) { + if (!down_try(&mlc->osem)) { nextidx = HILSEN_DOZE; break; } diff -r c4dfb28595bc drivers/input/serio/hp_sdc_mlc.c --- a/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/input/serio/hp_sdc_mlc.c Mon May 05 10:32:35 2008 +1000 @@ -148,7 +148,7 @@ static int hp_sdc_mlc_in(hil_mlc *mlc, s priv = mlc->priv; /* Try to down the semaphore */ - if (down_trylock(&mlc->isem)) { + if (!down_try(&mlc->isem)) { struct timeval tv; if (priv->emtestmode) { mlc->ipacket[0] = @@ -186,13 +186,13 @@ static int hp_sdc_mlc_cts(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphores -- they should be up. */ - BUG_ON(down_trylock(&mlc->isem)); - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->isem)); + BUG_ON(!down_try(&mlc->osem)); up(&mlc->isem); up(&mlc->osem); - if (down_trylock(&mlc->csem)) { + if (!down_try(&mlc->csem)) { if (priv->trans.act.semaphore != &mlc->csem) goto poll; else @@ -229,7 +229,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv = mlc->priv; /* Try to down the semaphore -- it should be up. */ - BUG_ON(down_trylock(&mlc->osem)); + BUG_ON(!down_try(&mlc->osem)); if (mlc->opacket & HIL_DO_ALTER_CTRL) goto do_control; @@ -240,7 +240,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) return; } /* Shouldn't be sending commands when loop may be busy */ - BUG_ON(down_trylock(&mlc->csem)); + BUG_ON(!down_try(&mlc->csem)); up(&mlc->csem); priv->trans.actidx = 0; @@ -296,7 +296,7 @@ static void hp_sdc_mlc_out(hil_mlc *mlc) priv->tseq[3] = 0; if (mlc->opacket & HIL_CTRL_APE) { priv->tseq[3] |= HP_SDC_LPC_APE_IPF; - down_trylock(&mlc->csem); + down_try(&mlc->csem); } enqueue: hp_sdc_enqueue_transaction(&priv->trans); diff -r c4dfb28595bc drivers/md/dm-raid1.c --- a/drivers/md/dm-raid1.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/md/dm-raid1.c Mon May 05 10:32:35 2008 +1000 @@ -587,7 +587,7 @@ static void rh_recovery_prepare(struct r /* Extra reference to avoid race with rh_stop_recovery */ atomic_inc(&rh->recovery_in_flight); - while (!down_trylock(&rh->recovery_count)) { + while (down_try(&rh->recovery_count)) { atomic_inc(&rh->recovery_in_flight); if (__rh_recovery_prepare(rh) <= 0) { atomic_dec(&rh->recovery_in_flight); diff -r c4dfb28595bc drivers/net/3c527.c --- a/drivers/net/3c527.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/3c527.c Mon May 05 10:32:35 2008 +1000 @@ -577,7 +577,7 @@ static int mc32_command_nowait(struct ne int ioaddr = dev->base_addr; int ret = -1; - if (down_trylock(&lp->cmd_mutex) == 0) + if (down_try(&lp->cmd_mutex)) { lp->cmd_nonblocking=1; lp->exec_box->mbox=0; diff -r c4dfb28595bc drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/irda/sir_dev.c Mon May 05 10:32:35 2008 +1000 @@ -286,7 +286,7 @@ int sirdev_schedule_request(struct sir_d IRDA_DEBUG(2, "%s - state=0x%04x / param=%u\n", __FUNCTION__, initial_state, param); - if (down_trylock(&fsm->sem)) { + if (!down_try(&fsm->sem)) { if (in_interrupt() || in_atomic() || irqs_disabled()) { IRDA_DEBUG(1, "%s(), state machine busy!\n", __FUNCTION__); return -EWOULDBLOCK; diff -r c4dfb28595bc drivers/net/ps3_gelic_wireless.c --- a/drivers/net/ps3_gelic_wireless.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/ps3_gelic_wireless.c Mon May 05 10:32:35 2008 +1000 @@ -2151,7 +2151,7 @@ static void gelic_wl_disconnect_event(st * As it waits with timeout, just leave assoc_done * uncompleted, then it terminates with timeout */ - if (down_trylock(&wl->assoc_stat_lock)) { + if (!down_try(&wl->assoc_stat_lock)) { pr_debug("%s: already locked\n", __func__); lock = 0; } else { diff -r c4dfb28595bc drivers/net/wireless/airo.c --- a/drivers/net/wireless/airo.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/net/wireless/airo.c Mon May 05 10:32:35 2008 +1000 @@ -2138,7 +2138,7 @@ static int airo_start_xmit(struct sk_buf fids[i] |= (len << 16); priv->xmit.skb = skb; priv->xmit.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT, &priv->jobs); @@ -2209,7 +2209,7 @@ static int airo_start_xmit11(struct sk_b fids[i] |= (len << 16); priv->xmit11.skb = skb; priv->xmit11.fid = i; - if (down_trylock(&priv->sem) != 0) { + if (!down_try(&priv->sem)) { set_bit(FLAG_PENDING_XMIT11, &priv->flags); netif_stop_queue(dev); set_bit(JOB_XMIT11, &priv->jobs); @@ -2257,7 +2257,7 @@ static struct net_device_stats *airo_get if (!test_bit(JOB_STATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_STATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else @@ -2284,7 +2284,7 @@ static void airo_set_multicast_list(stru if ((dev->flags ^ ai->flags) & IFF_PROMISC) { change_bit(FLAG_PROMISC, &ai->flags); - if (down_trylock(&ai->sem) != 0) { + if (!down_try(&ai->sem)) { set_bit(JOB_PROMISC, &ai->jobs); wake_up_interruptible(&ai->thr_wait); } else @@ -3211,7 +3211,7 @@ static irqreturn_t airo_interrupt(int ir set_bit(FLAG_UPDATE_UNI, &apriv->flags); set_bit(FLAG_UPDATE_MULTI, &apriv->flags); - if (down_trylock(&apriv->sem) != 0) { + if (!down_try(&apriv->sem)) { set_bit(JOB_EVENT, &apriv->jobs); wake_up_interruptible(&apriv->thr_wait); } else @@ -7658,7 +7658,7 @@ static struct iw_statistics *airo_get_wi if (!test_bit(JOB_WSTATS, &local->jobs)) { /* Get stats out of the card if available */ - if (down_trylock(&local->sem) != 0) { + if (!down_try(&local->sem)) { set_bit(JOB_WSTATS, &local->jobs); wake_up_interruptible(&local->thr_wait); } else diff -r c4dfb28595bc drivers/scsi/aacraid/commsup.c --- a/drivers/scsi/aacraid/commsup.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/scsi/aacraid/commsup.c Mon May 05 10:32:35 2008 +1000 @@ -490,7 +490,7 @@ int aac_fib_send(u16 command, struct fib * hardware failure has occurred. */ unsigned long count = 36000000L; /* 3 minutes */ - while (down_trylock(&fibptr->event_wait)) { + while (!down_try(&fibptr->event_wait)) { int blink; if (--count == 0) { struct aac_queue * q = &dev->queues->queue[AdapNormCmdQueue]; diff -r c4dfb28595bc drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/core/usb.c Mon May 05 10:32:35 2008 +1000 @@ -477,7 +477,7 @@ int usb_lock_device_for_reset(struct usb } } - while (usb_trylock_device(udev) != 0) { + while (!usb_trylock_device(udev)) { /* If we can't acquire the lock after waiting one second, * we're probably deadlocked */ diff -r c4dfb28595bc drivers/usb/gadget/inode.c --- a/drivers/usb/gadget/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/usb/gadget/inode.c Mon May 05 10:32:35 2008 +1000 @@ -298,7 +298,7 @@ get_ready_ep (unsigned f_flags, struct e int val; if (f_flags & O_NONBLOCK) { - if (down_trylock (&epdata->lock) != 0) + if (!down_try (&epdata->lock)) goto nonblock; if (epdata->state != STATE_EP_ENABLED) { up (&epdata->lock); diff -r c4dfb28595bc drivers/watchdog/ar7_wdt.c --- a/drivers/watchdog/ar7_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/ar7_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -179,7 +179,7 @@ static int ar7_wdt_open(struct inode *in static int ar7_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; ar7_wdt_enable_wdt(); expect_close = 0; diff -r c4dfb28595bc drivers/watchdog/it8712f_wdt.c --- a/drivers/watchdog/it8712f_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/it8712f_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -306,7 +306,7 @@ it8712f_wdt_open(struct inode *inode, st it8712f_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&it8712f_wdt_sem)) + if (!down_try(&it8712f_wdt_sem)) return -EBUSY; it8712f_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/s3c2410_wdt.c --- a/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/s3c2410_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -211,7 +211,7 @@ static int s3c2410wdt_set_heartbeat(int static int s3c2410wdt_open(struct inode *inode, struct file *file) { - if(down_trylock(&open_lock)) + if(!down_try(&open_lock)) return -EBUSY; if (nowayout) diff -r c4dfb28595bc drivers/watchdog/sc1200wdt.c --- a/drivers/watchdog/sc1200wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/sc1200wdt.c Mon May 05 10:32:35 2008 +1000 @@ -151,7 +151,7 @@ static int sc1200wdt_open(struct inode * static int sc1200wdt_open(struct inode *inode, struct file *file) { /* allow one at a time */ - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (timeout > MAX_TIMEOUT) diff -r c4dfb28595bc drivers/watchdog/scx200_wdt.c --- a/drivers/watchdog/scx200_wdt.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/scx200_wdt.c Mon May 05 10:32:35 2008 +1000 @@ -92,7 +92,7 @@ static int scx200_wdt_open(struct inode static int scx200_wdt_open(struct inode *inode, struct file *file) { /* only allow one at a time */ - if (down_trylock(&open_semaphore)) + if (!down_try(&open_semaphore)) return -EBUSY; scx200_wdt_enable(); diff -r c4dfb28595bc drivers/watchdog/wdt_pci.c --- a/drivers/watchdog/wdt_pci.c Mon May 05 10:27:58 2008 +1000 +++ b/drivers/watchdog/wdt_pci.c Mon May 05 10:32:35 2008 +1000 @@ -426,7 +426,7 @@ static int wdtpci_ioctl(struct inode *in static int wdtpci_open(struct inode *inode, struct file *file) { - if (down_trylock(&open_sem)) + if (!down_try(&open_sem)) return -EBUSY; if (nowayout) { diff -r c4dfb28595bc fs/ocfs2/inode.c --- a/fs/ocfs2/inode.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/ocfs2/inode.c Mon May 05 10:32:35 2008 +1000 @@ -1062,10 +1062,6 @@ void ocfs2_clear_inode(struct inode *ino (unsigned long long)oi->ip_blkno); mutex_unlock(&oi->ip_io_mutex); - /* - * down_trylock() returns 0, down_write_trylock() returns 1 - * kernel 1, world 0 - */ mlog_bug_on_msg(!down_write_trylock(&oi->ip_alloc_sem), "Clear inode of %llu, alloc_sem is locked\n", (unsigned long long)oi->ip_blkno); diff -r c4dfb28595bc fs/reiserfs/journal.c --- a/fs/reiserfs/journal.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/reiserfs/journal.c Mon May 05 10:32:35 2008 +1000 @@ -1412,7 +1412,7 @@ static int flush_journal_list(struct sup /* if flushall == 0, the lock is already held */ if (flushall) { down(&journal->j_flush_sem); - } else if (!down_trylock(&journal->j_flush_sem)) { + } else if (down_try(&journal->j_flush_sem)) { BUG(); } diff -r c4dfb28595bc fs/xfs/linux-2.6/sema.h --- a/fs/xfs/linux-2.6/sema.h Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/sema.h Mon May 05 10:32:36 2008 +1000 @@ -36,17 +36,15 @@ typedef struct semaphore sema_t; static inline int issemalocked(sema_t *sp) { - return down_trylock(sp) || (up(sp), 0); + return !down_try(sp) || (up(sp), 0); } /* - * Map cpsema (try to get the sema) to down_trylock. We need to switch - * the return values since cpsema returns 1 (acquired) 0 (failed) and - * down_trylock returns the reverse 0 (acquired) 1 (failed). + * Map cpsema (try to get the sema) to down_try. */ static inline int cpsema(sema_t *sp) { - return down_trylock(sp) ? 0 : 1; + return down_try(sp); } #endif /* __XFS_SUPPORT_SEMA_H__ */ diff -r c4dfb28595bc fs/xfs/linux-2.6/xfs_buf.c --- a/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:27:58 2008 +1000 +++ b/fs/xfs/linux-2.6/xfs_buf.c Mon May 05 10:32:36 2008 +1000 @@ -530,7 +530,7 @@ found: * if this does not work then we need to drop the * spinlock and do a hard attempt on the semaphore. */ - if (down_trylock(&bp->b_sema)) { + if (!down_try(&bp->b_sema)) { if (!(flags & XBF_TRYLOCK)) { /* wait for buffer ownership */ XB_TRACE(bp, "get_lock", 0); @@ -873,7 +873,7 @@ xfs_buf_cond_lock( { int locked; - locked = down_trylock(&bp->b_sema) == 0; + locked = down_try(&bp->b_sema); if (locked) { XB_SET_OWNER(bp); } diff -r c4dfb28595bc include/linux/mutex.h --- a/include/linux/mutex.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/mutex.h Mon May 05 10:32:36 2008 +1000 @@ -141,10 +141,6 @@ extern int __must_check mutex_lock_killa # define mutex_lock_killable_nested(lock, subclass) mutex_lock_killable(lock) #endif -/* - * NOTE: mutex_trylock() follows the spin_trylock() convention, - * not the down_trylock() convention! - */ extern int mutex_trylock(struct mutex *lock); extern void mutex_unlock(struct mutex *lock); diff -r c4dfb28595bc include/linux/semaphore.h --- a/include/linux/semaphore.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/semaphore.h Mon May 05 10:32:36 2008 +1000 @@ -44,7 +44,7 @@ extern void down(struct semaphore *sem); extern void down(struct semaphore *sem); extern int __must_check down_interruptible(struct semaphore *sem); extern int __must_check down_killable(struct semaphore *sem); -extern int __must_check down_trylock(struct semaphore *sem); +extern int __must_check down_try(struct semaphore *sem); extern int __must_check down_timeout(struct semaphore *sem, long jiffies); extern void up(struct semaphore *sem); diff -r c4dfb28595bc include/linux/usb.h --- a/include/linux/usb.h Mon May 05 10:27:58 2008 +1000 +++ b/include/linux/usb.h Mon May 05 10:32:36 2008 +1000 @@ -491,7 +491,7 @@ extern void usb_put_dev(struct usb_devic /* USB device locking */ #define usb_lock_device(udev) down(&(udev)->dev.sem) #define usb_unlock_device(udev) up(&(udev)->dev.sem) -#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) +#define usb_trylock_device(udev) down_try(&(udev)->dev.sem) extern int usb_lock_device_for_reset(struct usb_device *udev, const struct usb_interface *iface); diff -r c4dfb28595bc kernel/mutex.c --- a/kernel/mutex.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/mutex.c Mon May 05 10:32:36 2008 +1000 @@ -373,8 +373,8 @@ static inline int __mutex_trylock_slowpa * Try to acquire the mutex atomically. Returns 1 if the mutex * has been acquired successfully, and 0 on contention. * - * NOTE: this function follows the spin_trylock() convention, so - * it is negated to the down_trylock() return values! Be careful + * NOTE: this function follows the spin_trylock()/down_try() convention, + * so it is negated to the old down_trylock() return values! Be careful * about this when converting semaphore users to mutexes. * * This function must not be used in interrupt context. The diff -r c4dfb28595bc kernel/printk.c --- a/kernel/printk.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/printk.c Mon May 05 10:32:36 2008 +1000 @@ -986,7 +986,7 @@ EXPORT_SYMBOL(acquire_console_sem); int try_acquire_console_sem(void) { - if (down_trylock(&console_sem)) + if (!down_try(&console_sem)) return -1; console_locked = 1; console_may_schedule = 0; @@ -1083,7 +1083,7 @@ void console_unblank(void) * oops_in_progress is set to 1.. */ if (oops_in_progress) { - if (down_trylock(&console_sem) != 0) + if (!down_try(&console_sem)) return; } else acquire_console_sem(); diff -r c4dfb28595bc kernel/semaphore.c --- a/kernel/semaphore.c Mon May 05 10:27:58 2008 +1000 +++ b/kernel/semaphore.c Mon May 05 10:32:36 2008 +1000 @@ -14,7 +14,7 @@ * Some notes on the implementation: * * The spinlock controls access to the other members of the semaphore. - * down_trylock() and up() can be called from interrupt context, so we + * down_try() and up() can be called from interrupt context, so we * have to disable interrupts when taking the lock. It turns out various * parts of the kernel expect to be able to use down() on a semaphore in * interrupt context when they know it will succeed, so we have to use @@ -114,19 +114,18 @@ EXPORT_SYMBOL(down_killable); EXPORT_SYMBOL(down_killable); /** - * down_trylock - try to acquire the semaphore, without waiting + * down_try - try to acquire the semaphore, without waiting * @sem: the semaphore to be acquired * - * Try to acquire the semaphore atomically. Returns 0 if the mutex has - * been acquired successfully or 1 if it it cannot be acquired. + * Try to acquire the semaphore atomically. Returns true if the mutex has + * been acquired successfully or 0 if it it cannot be acquired. * - * NOTE: This return value is inverted from both spin_trylock and - * mutex_trylock! Be careful about this when converting code. + * NOTE: This replaces down_trylock() which returned the reverse. * * Unlike mutex_trylock, this function can be used from interrupt context, * and the semaphore can be released by any task or interrupt. */ -int down_trylock(struct semaphore *sem) +int down_try(struct semaphore *sem) { unsigned long flags; int count; @@ -137,9 +136,9 @@ int down_trylock(struct semaphore *sem) sem->count = count; spin_unlock_irqrestore(&sem->lock, flags); - return (count < 0); + return (count >= 0); } -EXPORT_SYMBOL(down_trylock); +EXPORT_SYMBOL(down_try); /** * down_timeout - acquire the semaphore within a specified time From owner-xfs@oss.sgi.com Sun May 4 20:28:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 20:29:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m453Sk71013218 for ; Sun, 4 May 2008 20:28:48 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA15860; Mon, 5 May 2008 13:29:27 +1000 Message-ID: <481E7F17.5090601@sgi.com> Date: Mon, 05 May 2008 13:29:27 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: review: xfstests/016 change Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15773 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi there, xfstests/016 has been failing for a while in many cases. It was relying on the log traffic for create/rm to be unaltered in XFS over the life of XFS. Its initial purpose was to test out the writing of the log around wrapping and checking that as we wrapped we didn't corrupt any data after the end of the log. The patch is to modify xfstest, 016, to take a sampling of the log traffic to guestimate how many ops are needed to get to the end of the log, instead of hard-coding in how many ops are expected to get there. --Tim =========================================================================== Index: xfstests/016 =========================================================================== --- a/xfstests/016 2008-05-05 11:26:50.000000000 +1000 +++ b/xfstests/016 2008-05-05 13:07:01.040000000 +1000 @@ -50,7 +50,7 @@ _init() echo "*** reset partition" $here/src/devzero -b 2048 -n 50 -v 198 $SCRATCH_DEV echo "*** mkfs" - force_opts="-dsize=50m -lsize=2097152" + force_opts="-dsize=50m -lsize=$log_size" echo mkfs_xfs $force_opts $SCRATCH_DEV >>$seq.full _scratch_mkfs_xfs $force_opts >$tmp.mkfs0 2>&1 [ $? -ne 0 ] && \ @@ -156,6 +156,10 @@ _supported_os Linux rm -f $seq.full +# mkfs sizes +log_size=2097152 +log_size_bb=`expr $log_size / 512` + _require_scratch _init @@ -163,27 +167,47 @@ block=`_after_log $SCRATCH_DEV` echo "fsblock after log = $block" >>$seq.full _check_corrupt $SCRATCH_DEV $block -size=`_log_size` -echo "log size = $size BB" >>$seq.full +actual_log_size=`_log_size` +echo "log size = $actual_log_size BB" >>$seq.full head=`_log_head` echo "log position = $head" >>$seq.full lsunit=`_log_sunit` echo "log sunit = $lsunit" >>$seq.full -[ $size -eq 4096 ] || \ +# sanity checks +[ $actual_log_size -eq $log_size_bb ] || \ _fail "!!! unexpected log size $size" [ $head -eq 2 -o $head -eq $((lsunit/512)) ] || \ _fail "!!! unexpected initial log position $head vs. $((lsunit/512))" -echo " lots of traffic" >>$seq.full -_log_traffic 850 +# find how how many blocks per op for 100 ops +# ignore the fact that it will also include an unmount record etc... +# this should be small overall +echo " lots of traffic for sampling" >>$seq.full +sample_size_ops=100 +_log_traffic $sample_size_ops +head1=`_log_head` +num_blocks=`expr $head1 - $head` +blocks_per_op=`echo "scale=3; $num_blocks / $sample_size_ops" | bc` +echo "blocks_per_op = $blocks_per_op" >>$seq.full +num_expected_ops=`echo "$log_size_bb / $blocks_per_op" | bc` +echo "num_expected_ops = $num_expected_ops" >>$seq.full +num_expected_to_go=`echo "$num_expected_ops - $sample_size_ops" | bc` +echo "num_expected_to_go = $num_expected_to_go" >>$seq.full + +echo " lots more traffic" >>$seq.full +_log_traffic $num_expected_to_go head=`_log_head` echo "log position = $head" >>$seq.full -[ $head -gt 3850 -a $head -lt 4050 ] || \ - _fail "!!! unexpected log position $head" +# e.g. 3891 +near_end_min=`echo "0.95 * $log_size_bb" | bc | sed 's/\..*//'` +echo "near_end_min = $near_end_min" >>$seq.full + +[ $head -gt $near_end_min -a $head -lt $log_size_bb ] || \ + _fail "!!! unexpected near end log position $head" -for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +for c in `seq 0 20` do echo " little traffic" >>$seq.full _log_traffic 2 @@ -193,7 +217,7 @@ do done [ $head -lt 1000 ] || \ - _fail "!!! unexpected log position $head" + _fail "!!! unexpected wrapped log position $head" # success, all done status=0 From owner-xfs@oss.sgi.com Sun May 4 22:42:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 22:42:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m455gRLa019318 for ; Sun, 4 May 2008 22:42:29 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA18728; Mon, 5 May 2008 15:43:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 562FB58C4C15; Mon, 5 May 2008 15:43:07 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981154 - Add support for sb_bad_features2 in QA 122 Message-Id: <20080505054307.562FB58C4C15@chook.melbourne.sgi.com> Date: Mon, 5 May 2008 15:43:07 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15774 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Mon May 5 15:42:52 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/repair Inspected by: tes@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31022a xfstests/122 - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/122.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h xfstests/122.out - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/122.out.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - Add support for sb_bad_features2 in superblock structure From owner-xfs@oss.sgi.com Sun May 4 22:54:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 22:54:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m455sZSm020622 for ; Sun, 4 May 2008 22:54:36 -0700 X-ASG-Debug-ID: 1209966917-39e601100000-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 6952CB00A13; Sun, 4 May 2008 22:55:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JGFWCFHbLc0HDpSq; Sun, 04 May 2008 22:55:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JstfR-0005Qq-GY; Mon, 05 May 2008 05:55:17 +0000 Date: Mon, 5 May 2008 01:55:17 -0400 From: Christoph Hellwig To: Barry Naujok Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 981154 - Add support for sb_bad_features2 in QA 122 Subject: Re: TAKE 981154 - Add support for sb_bad_features2 in QA 122 Message-ID: <20080505055517.GC15609@infradead.org> References: <20080505054307.562FB58C4C15@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080505054307.562FB58C4C15@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209966921 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.1, rules version 3.1.49697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15776 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs I guess this fixes the 122 failures that came up recently? From owner-xfs@oss.sgi.com Sun May 4 22:54:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 22:54:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m455s4s6020570 for ; Sun, 4 May 2008 22:54:05 -0700 X-ASG-Debug-ID: 1209966886-397b01120000-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 0AE8EB00B96; Sun, 4 May 2008 22:54:46 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0d1QAWK2HRIwxC5j; Sun, 04 May 2008 22:54:46 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jstew-00054b-JX; Mon, 05 May 2008 05:54:46 +0000 Date: Mon, 5 May 2008 01:54:46 -0400 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: review: xfstests/016 change Subject: Re: review: xfstests/016 change Message-ID: <20080505055446.GB15609@infradead.org> References: <481E7F17.5090601@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481E7F17.5090601@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209966890 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.1, rules version 3.1.49697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15775 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 01:29:27PM +1000, Timothy Shimmin wrote: > Hi there, > > xfstests/016 has been failing for a while in many cases. > It was relying on the log traffic for create/rm to be unaltered > in XFS over the life of XFS. > Its initial purpose was to test out the writing of the log around > wrapping and checking that as we wrapped we didn't corrupt any data > after the end of the log. > > The patch is to modify xfstest, 016, to take a sampling of the log traffic > to guestimate how many ops are needed to get to the end of the log, > instead of hard-coding in how many ops are expected to get there. I get four rejects out of four hunk when trying to apply this patch, looks like whitespace-damage. From owner-xfs@oss.sgi.com Sun May 4 22:57:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 22:58:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m455vlZx021187 for ; Sun, 4 May 2008 22:57:50 -0700 X-ASG-Debug-ID: 1209967109-41c201080000-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 A7BB6163450A for ; Sun, 4 May 2008 22:58:29 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id cqPxF49C5b44FYgd for ; Sun, 04 May 2008 22:58:29 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JstiR-0005qI-Nm; Mon, 05 May 2008 05:58:23 +0000 Date: Mon, 5 May 2008 01:58:23 -0400 From: Christoph Hellwig To: Rusty Russell Cc: linux-kernel@vger.kernel.org, gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox X-ASG-Orig-Subj: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Subject: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Message-ID: <20080505055823.GA20970@infradead.org> References: <200805051156.36437.rusty@rustcorp.com.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200805051156.36437.rusty@rustcorp.com.au> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209967112 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.1, rules version 3.1.49697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15777 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 01:56:35AM +0000, Rusty Russell wrote: > > down_trylock() returns 1 on failure, 0 on success. This differs from > spin_trylock(), mutex_trylock() and common sense. Or as ocfs2 put it > "kernel 1, world 0". > > Rename it to down_try() (which makes more sense anyway), and reverse > it. Fortunately there aren't a huge number of callers left. > > I took the liberty of reversing the sense of usb_trylock_device() > without renaming it: it's only used in one place anyway. Given that people are actively trying to kill struct semaphore I don't think doing a big search and rename is a good idea right now. (And I also really hate the name down_try, but when it goes away that's rather void and we can spare the discussion) From owner-xfs@oss.sgi.com Sun May 4 23:08:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 23:09:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4568aml022817 for ; Sun, 4 May 2008 23:08:37 -0700 X-ASG-Debug-ID: 1209967758-42fd03bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ozlabs.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F2618125080 for ; Sun, 4 May 2008 23:09:18 -0700 (PDT) Received: from ozlabs.org (ozlabs.org [203.10.76.45]) by cuda.sgi.com with ESMTP id 0HupDjmTcz5h9U3D for ; Sun, 04 May 2008 23:09:18 -0700 (PDT) Received: from vivaldi.local (unknown [203.213.241.221]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPSA id CD751DDEEA; Mon, 5 May 2008 16:09:15 +1000 (EST) From: Rusty Russell To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Subject: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Date: Mon, 5 May 2008 16:09:12 +1000 User-Agent: KMail/1.9.9 Cc: linux-kernel@vger.kernel.org, gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox References: <200805051156.36437.rusty@rustcorp.com.au> <20080505055823.GA20970@infradead.org> In-Reply-To: <20080505055823.GA20970@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805051609.13731.rusty@rustcorp.com.au> X-Barracuda-Connect: ozlabs.org[203.10.76.45] X-Barracuda-Start-Time: 1209967761 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.1, rules version 3.1.49697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15778 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: rusty@rustcorp.com.au Precedence: bulk X-list: xfs On Monday 05 May 2008 15:58:23 Christoph Hellwig wrote: > On Mon, May 05, 2008 at 01:56:35AM +0000, Rusty Russell wrote: > > down_trylock() returns 1 on failure, 0 on success. This differs from > > spin_trylock(), mutex_trylock() and common sense. Or as ocfs2 put it > > "kernel 1, world 0". > > > > Rename it to down_try() (which makes more sense anyway), and reverse > > it. Fortunately there aren't a huge number of callers left. > > Given that people are actively trying to kill struct semaphore I don't > think doing a big search and rename is a good idea right now. If it goes away before the 2.6.27 merge window, great. But I don't see that happening, so let's clean up this horror. I cc'd all the people effected in the hope that it will prod some of them towards mutexes anyway. > (And I also really hate the name down_try, but when it goes away that's > rather void and we can spare the discussion) Ideas? down() is pretty bad, down_try() matches it. Thanks, Rusty. From owner-xfs@oss.sgi.com Sun May 4 23:09:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 23:09:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4568waH022852 for ; Sun, 4 May 2008 23:09:01 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA19348; Mon, 5 May 2008 16:09:32 +1000 To: "Christoph Hellwig" Subject: Re: TAKE 981154 - Add support for sb_bad_features2 in QA 122 From: "Barry Naujok" Organization: SGI Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080505054307.562FB58C4C15@chook.melbourne.sgi.com> <20080505055517.GC15609@infradead.org> Content-Transfer-Encoding: 7bit Date: Mon, 05 May 2008 16:10:56 +1000 Message-ID: In-Reply-To: <20080505055517.GC15609@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15779 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Mon, 05 May 2008 15:55:17 +1000, Christoph Hellwig wrote: > I guess this fixes the 122 failures that came up recently? Yep. From owner-xfs@oss.sgi.com Sun May 4 23:11:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 23:11:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m456Ban4023401 for ; Sun, 4 May 2008 23:11:38 -0700 X-ASG-Debug-ID: 1209967941-398401630000-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 D8087B00E37 for ; Sun, 4 May 2008 23:12:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id fwDbuCQ9ZMHQ2odO for ; Sun, 04 May 2008 23:12:21 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jstvt-0004LS-Is; Mon, 05 May 2008 06:12:17 +0000 Date: Mon, 5 May 2008 02:12:17 -0400 From: Christoph Hellwig To: Rusty Russell Cc: Christoph Hellwig , linux-kernel@vger.kernel.org, gregkh@suse.de, kaos@sgi.com, Stephen Rothwell , rolandd@cisco.com, "Brian S. Julin" , Martin Diehl , mokuno@sm.sony.co.jp, aacraid@adaptec.com, mfasheh@suse.com, wim@iguana.be, xfs@oss.sgi.com, reiserfs-devel@vger.kernel.org, Matthew Wilcox X-ASG-Orig-Subj: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Subject: Re: [PATCH 1/1] Replace down_trylock() with down_try(), reverse return values. Message-ID: <20080505061217.GA13398@infradead.org> References: <200805051156.36437.rusty@rustcorp.com.au> <20080505055823.GA20970@infradead.org> <200805051609.13731.rusty@rustcorp.com.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200805051609.13731.rusty@rustcorp.com.au> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209967941 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.1, rules version 3.1.49697 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15780 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 04:09:12PM +1000, Rusty Russell wrote: > > Given that people are actively trying to kill struct semaphore I don't > > think doing a big search and rename is a good idea right now. > > If it goes away before the 2.6.27 merge window, great. But I don't see that > happening, so let's clean up this horror. I cc'd all the people effected in > the hope that it will prod some of them towards mutexes anyway. .27 might not be doable but .28 seems probable if willy and co are continuing to churn like they do currently. > > (And I also really hate the name down_try, but when it goes away that's > > rather void and we can spare the discussion) > > Ideas? down() is pretty bad, down_try() matches it. The trylock is a convention for real locking function, so having one stand out would be nasty. Then again a semaphore is not just a simple lock but a higher level locking primitive, so a down_nowait might make sense because we don't encode the lock anywhere else either From owner-xfs@oss.sgi.com Sun May 4 23:19:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 23:19:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m456JKo1024762 for ; Sun, 4 May 2008 23:19:23 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA19649; Mon, 5 May 2008 16:19:55 +1000 Message-ID: <481EA70A.2030500@sgi.com> Date: Mon, 05 May 2008 16:19:54 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-dev , xfs-oss Subject: Re: review: xfstests/016 change References: <481E7F17.5090601@sgi.com> <20080505055446.GB15609@infradead.org> In-Reply-To: <20080505055446.GB15609@infradead.org> Content-Type: multipart/mixed; boundary="------------040506090206080500000808" X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15781 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs This is a multi-part message in MIME format. --------------040506090206080500000808 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Christoph Hellwig wrote: > On Mon, May 05, 2008 at 01:29:27PM +1000, Timothy Shimmin wrote: >> Hi there, >> >> xfstests/016 has been failing for a while in many cases. >> It was relying on the log traffic for create/rm to be unaltered >> in XFS over the life of XFS. >> Its initial purpose was to test out the writing of the log around >> wrapping and checking that as we wrapped we didn't corrupt any data >> after the end of the log. >> >> The patch is to modify xfstest, 016, to take a sampling of the log traffic >> to guestimate how many ops are needed to get to the end of the log, >> instead of hard-coding in how many ops are expected to get there. > > I get four rejects out of four hunk when trying to apply this patch, > looks like whitespace-damage. Groan. Sorry. I'll attach 016.patch for the moment. Need to see where things went wrong with the whitespace. --Tim --------------040506090206080500000808 Content-Type: text/x-patch; name="016.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="016.patch" =========================================================================== Index: xfstests/016 =========================================================================== --- a/xfstests/016 2008-05-05 11:26:50.000000000 +1000 +++ b/xfstests/016 2008-05-05 13:07:01.040000000 +1000 @@ -50,7 +50,7 @@ _init() echo "*** reset partition" $here/src/devzero -b 2048 -n 50 -v 198 $SCRATCH_DEV echo "*** mkfs" - force_opts="-dsize=50m -lsize=2097152" + force_opts="-dsize=50m -lsize=$log_size" echo mkfs_xfs $force_opts $SCRATCH_DEV >>$seq.full _scratch_mkfs_xfs $force_opts >$tmp.mkfs0 2>&1 [ $? -ne 0 ] && \ @@ -156,6 +156,10 @@ _supported_os Linux rm -f $seq.full +# mkfs sizes +log_size=2097152 +log_size_bb=`expr $log_size / 512` + _require_scratch _init @@ -163,27 +167,47 @@ block=`_after_log $SCRATCH_DEV` echo "fsblock after log = $block" >>$seq.full _check_corrupt $SCRATCH_DEV $block -size=`_log_size` -echo "log size = $size BB" >>$seq.full +actual_log_size=`_log_size` +echo "log size = $actual_log_size BB" >>$seq.full head=`_log_head` echo "log position = $head" >>$seq.full lsunit=`_log_sunit` echo "log sunit = $lsunit" >>$seq.full -[ $size -eq 4096 ] || \ +# sanity checks +[ $actual_log_size -eq $log_size_bb ] || \ _fail "!!! unexpected log size $size" [ $head -eq 2 -o $head -eq $((lsunit/512)) ] || \ _fail "!!! unexpected initial log position $head vs. $((lsunit/512))" -echo " lots of traffic" >>$seq.full -_log_traffic 850 +# find how how many blocks per op for 100 ops +# ignore the fact that it will also include an unmount record etc... +# this should be small overall +echo " lots of traffic for sampling" >>$seq.full +sample_size_ops=100 +_log_traffic $sample_size_ops +head1=`_log_head` +num_blocks=`expr $head1 - $head` +blocks_per_op=`echo "scale=3; $num_blocks / $sample_size_ops" | bc` +echo "blocks_per_op = $blocks_per_op" >>$seq.full +num_expected_ops=`echo "$log_size_bb / $blocks_per_op" | bc` +echo "num_expected_ops = $num_expected_ops" >>$seq.full +num_expected_to_go=`echo "$num_expected_ops - $sample_size_ops" | bc` +echo "num_expected_to_go = $num_expected_to_go" >>$seq.full + +echo " lots more traffic" >>$seq.full +_log_traffic $num_expected_to_go head=`_log_head` echo "log position = $head" >>$seq.full -[ $head -gt 3850 -a $head -lt 4050 ] || \ - _fail "!!! unexpected log position $head" +# e.g. 3891 +near_end_min=`echo "0.95 * $log_size_bb" | bc | sed 's/\..*//'` +echo "near_end_min = $near_end_min" >>$seq.full + +[ $head -gt $near_end_min -a $head -lt $log_size_bb ] || \ + _fail "!!! unexpected near end log position $head" -for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +for c in `seq 0 20` do echo " little traffic" >>$seq.full _log_traffic 2 @@ -193,7 +217,7 @@ do done [ $head -lt 1000 ] || \ - _fail "!!! unexpected log position $head" + _fail "!!! unexpected wrapped log position $head" # success, all done status=0 --------------040506090206080500000808-- From owner-xfs@oss.sgi.com Sun May 4 23:32:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 04 May 2008 23:33:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m456WthT025920 for ; Sun, 4 May 2008 23:32:57 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 9EE45304087; Sun, 4 May 2008 23:33:37 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m456XWjm927482; Mon, 5 May 2008 16:33:33 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs-dev@sgi.com, xfs@oss.sgi.com Subject: Re: Don't use d_alloc_anon for open_by_handle References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <20080502060654.GA23912@infradead.org> Date: Mon, 05 May 2008 16:33:34 +1000 In-Reply-To: <20080502060654.GA23912@infradead.org> (Christoph Hellwig's message of "Fri, 2 May 2008 02:06:54 -0400") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15782 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Fri, May 02, 2008 at 11:55:37AM +1000, xaiki@sgi.com wrote: >> One of our DMAPI user found that in some cases inodes weren't getting through >> xfs_inactive() in any reasonable amount of time. Investigation tracked it down >> to the use of d_alloc_anon() combined with another thread accessing the same >> inode via an open(). >> >> So we introduce a stripped down version of d_alloc_anon, that won't try to find >> an existing dentry, nor will hash it. > > No, this is even more buggy than using d_alloc_anon. I must be missing a point here, can you please further explain why is it buggy ? We are indeed abusing the normal dentry life, but that's what we want libhandle to be. i.e. We really don't need it connected, we don't need to know anything about that file, we just want to access it. > What really needs to be done in the handle code is to do the full > reconnect logic nfsd would be doing. That would be slow, and we don't really need it. What is wrong with having a temp hanging dentry if it gets thorn appart properly ? The dentry we're using never makes it to any kind of cache. We don't even have security concerns as the 2 pieces of code can only be triggered by root. > Aka you should be using exportfs_decode_fh and update xfs's > fh_to_dentry method to accept the file handle type used by the handle > interface. Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Mon May 5 00:08:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 00:08:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4578CPJ030674 for ; Mon, 5 May 2008 00:08:15 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA20989; Mon, 5 May 2008 17:08:52 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4578osT156915963; Mon, 5 May 2008 17:08:51 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4578lVN155823411; Mon, 5 May 2008 17:08:47 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 5 May 2008 17:08:47 +1000 From: David Chinner To: Eric Sandeen Cc: xfs-oss Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Message-ID: <20080505070847.GH155679365@sgi.com> References: <47DB4181.7040603@sandeen.net> <480E89B5.8070006@sandeen.net> <481B7FD1.3030107@sandeen.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481B7FD1.3030107@sandeen.net> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15783 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 03:55:45PM -0500, Eric Sandeen wrote: > Eric Sandeen wrote: > > Eric Sandeen wrote: > >> This should fix the longstanding issues with xfs and old ABI > >> arm boxes, which lead to various asserts and xfs shutdowns, > >> and for which an (incorrect) patch has been floating around > >> for years. (Said patch made ARM internally consistent, but > >> altered the normal xfs on-disk format such that it looked > >> corrupted on other architectures): > >> http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html > > > > ping again... > > ping #3... Looks like if I don't pick it up then nobody is going to answer. I'll run it through my ia64 and x86_64 test boxes and if it's ok then I'll commit it. Did you ever send an equivalent userspace patch? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon May 5 00:35:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 00:35:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m457ZUuC005097 for ; Mon, 5 May 2008 00:35:32 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA21572; Mon, 5 May 2008 17:36:15 +1000 To: xfs-oss Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI From: "Barry Naujok" Organization: SGI Cc: "David Chinner" Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <47DB4181.7040603@sandeen.net> <47E1D3C3.1050000@sandeen.net> Date: Mon, 05 May 2008 17:38:00 +1000 Message-ID: In-Reply-To: <47E1D3C3.1050000@sandeen.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m457ZYuC005102 X-archive-position: 15784 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 20 Mar 2008 14:02:27 +1100, Eric Sandeen wrote: > Here's the userspace side. Dave, yes he did! > Jeff, I guess this means you have more work to do ;) > > -Eric > > > Index: xfs-cmds/xfsprogs/include/platform_defs.h.in > =================================================================== > --- xfs-cmds.orig/xfsprogs/include/platform_defs.h.in > +++ xfs-cmds/xfsprogs/include/platform_defs.h.in > @@ -147,4 +147,11 @@ typedef unsigned long long __psunsigned_ > | (minor&IRIX_DEV_MAXMIN))) > #define > IRIX_DEV_TO_KDEVT(dev) makedev(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev)) > +/* ARM old ABI has some weird alignment/padding */ > +#if defined(__arm__) && !defined(__ARM_EABI__) > +#define __arch_pack __attribute__((packed)) > +#else > +#define __arch_pack > +#endif > + > #endif /* __XFS_PLATFORM_DEFS_H__ */ > Index: xfs-cmds/xfsprogs/include/xfs_dir2_sf.h > =================================================================== > --- xfs-cmds.orig/xfsprogs/include/xfs_dir2_sf.h > +++ xfs-cmds/xfsprogs/include/xfs_dir2_sf.h > @@ -62,7 +62,7 @@ typedef union { > * Normalized offset (in a data block) of the entry, really > xfs_dir2_data_off_t. > * Only need 16 bits, this is the byte offset into the single block > form. > */ > -typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t; > +typedef struct { __uint8_t i[2]; } __arch_pack xfs_dir2_sf_off_t; > /* > * The parent directory has a dedicated field, and the self-pointer must > @@ -76,14 +76,14 @@ typedef struct xfs_dir2_sf_hdr { > __uint8_t count; /* count of entries */ > __uint8_t i8count; /* count of 8-byte inode #s */ > xfs_dir2_inou_t parent; /* parent dir inode number */ > -} xfs_dir2_sf_hdr_t; > +} __arch_pack xfs_dir2_sf_hdr_t; > typedef struct xfs_dir2_sf_entry { > __uint8_t namelen; /* actual name length */ > xfs_dir2_sf_off_t offset; /* saved offset */ > __uint8_t name[1]; /* name, variable size */ > xfs_dir2_inou_t inumber; /* inode number, var. offset */ > -} xfs_dir2_sf_entry_t; > +} __arch_pack xfs_dir2_sf_entry_t; > typedef struct xfs_dir2_sf { > xfs_dir2_sf_hdr_t hdr; /* shortform header */ > > > > > From owner-xfs@oss.sgi.com Mon May 5 01:57:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 01:57:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m458vXb3010443 for ; Mon, 5 May 2008 01:57:34 -0700 X-ASG-Debug-ID: 1209977897-761202430000-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 72C2810F2BCA; Mon, 5 May 2008 01:58:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Jj5YAvvfsrNUp7j5; Mon, 05 May 2008 01:58:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JswWX-00016z-18; Mon, 05 May 2008 08:58:17 +0000 Date: Mon, 5 May 2008 04:58:17 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , "xfs@oss.sgi.com" , xfs-dev X-ASG-Orig-Subj: Re: REVIEW: ASCII CI support in xfsprogs Subject: Re: REVIEW: ASCII CI support in xfsprogs Message-ID: <20080505085817.GB2188@infradead.org> References: <20080501131725.GB7435@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209977898 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.1, rules version 3.1.49707 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15785 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 10:13:38AM +1000, Barry Naujok wrote: > Yes, I was going to do "ascii-ci=Y|N", got to keep it clear in only > does CI for A-Z. Fine with me. > I was thinking of that, but libxfs is pretty out of date anyway from > all the cleanup changes that have occured and would like to sync them > back at some stage in the near future. The sync would bring those other > changes in at that time (Nathan can correct me if I misunderstand the > sync process!) Yeah, it should bring over the files from the kernel tree. From owner-xfs@oss.sgi.com Mon May 5 02:52:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 02:52:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m459qXYo013998 for ; Mon, 5 May 2008 02:52:34 -0700 X-ASG-Debug-ID: 1209981197-746f01520000-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 D2A4F1636F79; Mon, 5 May 2008 02:53:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id v8LqwWaud2ojPcfP; Mon, 05 May 2008 02:53:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JsxNk-0006YY-NI; Mon, 05 May 2008 09:53:16 +0000 Date: Mon, 5 May 2008 05:53:16 -0400 From: Christoph Hellwig To: Niv Sardi Cc: Christoph Hellwig , xfs-dev@sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Don't use d_alloc_anon for open_by_handle Subject: Re: Don't use d_alloc_anon for open_by_handle Message-ID: <20080505095316.GA23934@infradead.org> References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <20080502060654.GA23912@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1209981198 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.1, rules version 3.1.49711 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15786 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 04:33:34PM +1000, Niv Sardi wrote: > > > > No, this is even more buggy than using d_alloc_anon. > > I must be missing a point here, can you please further explain why is it > buggy ? We are indeed abusing the normal dentry life, but that's what we > want libhandle to be. i.e. We really don't need it connected, we don't > need to know anything about that file, we just want to access it. > > > What really needs to be done in the handle code is to do the full > > reconnect logic nfsd would be doing. > > That would be slow, and we don't really need it. What is wrong with > having a temp hanging dentry if it gets thorn appart properly ? The > dentry we're using never makes it to any kind of cache. We don't even > have security concerns as the 2 pieces of code can only be triggered by > root. It shouldn't be slow. You'd do the equivalent no_subtree check export without parent fh, so what we do is call the fh_to_dentry method and then call find_acceptable_alias to check if there's already an dentry around and if yes use that one. That latter part is what should fix your problem. If you want to be lazy you could just copy find_acceptable_alias into the xfs code and call it directly and let me clean up the mess later.. From owner-xfs@oss.sgi.com Mon May 5 06:07:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 06:07:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m45D7EWP005275 for ; Mon, 5 May 2008 06:07:18 -0700 X-ASG-Debug-ID: 1209992877-232e029f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C95A278D567 for ; Mon, 5 May 2008 06:07:57 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id xQuBHq13UJhEQDJJ for ; Mon, 05 May 2008 06:07:57 -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 sandeen.net (Postfix) with ESMTP id C5DA718002BEA; Mon, 5 May 2008 08:07:54 -0500 (CDT) Message-ID: <481F06AA.4060301@sandeen.net> Date: Mon, 05 May 2008 08:07:54 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> <480E89B5.8070006@sandeen.net> <481B7FD1.3030107@sandeen.net> <20080505070847.GH155679365@sgi.com> In-Reply-To: <20080505070847.GH155679365@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: 1209992879 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.1, rules version 3.1.49724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15787 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs David Chinner wrote: > On Fri, May 02, 2008 at 03:55:45PM -0500, Eric Sandeen wrote: >> Eric Sandeen wrote: >>> Eric Sandeen wrote: >>>> This should fix the longstanding issues with xfs and old ABI >>>> arm boxes, which lead to various asserts and xfs shutdowns, >>>> and for which an (incorrect) patch has been floating around >>>> for years. (Said patch made ARM internally consistent, but >>>> altered the normal xfs on-disk format such that it looked >>>> corrupted on other architectures): >>>> http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html >>> ping again... >> ping #3... > > > > Looks like if I don't pick it up then nobody is going to answer. > I'll run it through my ia64 and x86_64 test boxes and if it's ok > then I'll commit it. > > Did you ever send an equivalent userspace patch? I did ... I can resend too. -Eric From owner-xfs@oss.sgi.com Mon May 5 11:30:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 11:30:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m45IUdMd014920 for ; Mon, 5 May 2008 11:30:42 -0700 X-ASG-Debug-ID: 1210012283-63a102a30000-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 8972B1639D70; Mon, 5 May 2008 11:31:23 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id vLgiFEmkOylmZE0A; Mon, 05 May 2008 11:31:23 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jt5T8-0004Vi-R4; Mon, 05 May 2008 18:31:22 +0000 Date: Mon, 5 May 2008 14:31:22 -0400 From: Christoph Hellwig To: Timothy Shimmin Cc: Christoph Hellwig , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: review: xfstests/016 change Subject: Re: review: xfstests/016 change Message-ID: <20080505183122.GA11163@infradead.org> References: <481E7F17.5090601@sgi.com> <20080505055446.GB15609@infradead.org> <481EA70A.2030500@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481EA70A.2030500@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210012284 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.1, rules version 3.1.49746 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15788 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 04:19:54PM +1000, Timothy Shimmin wrote: > Groan. Sorry. > I'll attach 016.patch for the moment. > > Need to see where things went wrong with the whitespace. Still fails for me with that patch applied: 016 43s ... - output mismatch (see 016.out.bad) 13a14,17 > *** generate log traffic > *** mount > *** fiddle > *** unmount Failures: 016 Failed 1 of 1 tests From owner-xfs@oss.sgi.com Mon May 5 11:43:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 11:43:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m45IheVn015874 for ; Mon, 5 May 2008 11:43:41 -0700 X-ASG-Debug-ID: 1210013064-607601a40000-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 19F2512AEE5; Mon, 5 May 2008 11:44:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id iLrZohPv1bvKeJdZ; Mon, 05 May 2008 11:44:25 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jt5fk-0002wA-Nh; Mon, 05 May 2008 18:44:24 +0000 Date: Mon, 5 May 2008 14:44:24 -0400 From: Christoph Hellwig To: Niv Sardi Cc: xfs-dev@sgi.com, xfs@oss.sgi.com, gnb@sgi.com X-ASG-Orig-Subj: Re: Don't use d_alloc_anon for open_by_handle Subject: Re: Don't use d_alloc_anon for open_by_handle Message-ID: <20080505184424.GA25933@infradead.org> References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <20080502060654.GA23912@infradead.org> <20080505095316.GA23934@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080505095316.GA23934@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210013066 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.1, rules version 3.1.49746 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15789 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 05, 2008 at 05:53:16AM -0400, Christoph Hellwig wrote: > It shouldn't be slow. You'd do the equivalent no_subtree check export > without parent fh, so what we do is call the fh_to_dentry method > and then call find_acceptable_alias to check if there's already an > dentry around and if yes use that one. That latter part is what should > fix your problem. If you want to be lazy you could just copy > find_acceptable_alias into the xfs code and call it directly and let me > clean up the mess later.. Sorry, this was written before my cup of tea in the morning. find_acceptable_alias is of course a no-op in the no_subtree_check case, and thus it's identical to what we're currently doing in the handle code. So any problem you see here will also be seen in an nfs environment with no_subtree_check, which is the sensible choise and I think even the default these days. So we'd better fix the lacking expiry in the core code. Cc'ing Greg as he's been fighting this code quite a bit in the past. From owner-xfs@oss.sgi.com Mon May 5 13:52:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 13:52:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (relay1.corp.sgi.com [192.26.58.214]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m45Kq3nO028701 for ; Mon, 5 May 2008 13:52:04 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay1.corp.sgi.com (Postfix) with ESMTP id C5F578F807C; Mon, 5 May 2008 13:52:45 -0700 (PDT) Received: from [134.15.64.153] (cf-vpn-sw-corp-64-153.corp.sgi.com [134.15.64.153]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m45KqZjm962490; Tue, 6 May 2008 06:52:38 +1000 (AEST) Message-ID: <481F7334.8000408@melbourne.sgi.com> Date: Mon, 05 May 2008 13:51:00 -0700 From: Greg Banks Organization: File Serving Technologies ; Silicon Graphics Inc. User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: Christoph Hellwig CC: Niv Sardi , xfs-dev@sgi.com, xfs@oss.sgi.com, gnb@sgi.com Subject: Re: Don't use d_alloc_anon for open_by_handle References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <20080502060654.GA23912@infradead.org> <20080505095316.GA23934@infradead.org> <20080505184424.GA25933@infradead.org> In-Reply-To: <20080505184424.GA25933@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15790 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gnb@melbourne.sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Mon, May 05, 2008 at 05:53:16AM -0400, Christoph Hellwig wrote: > >> It shouldn't be slow. You'd do the equivalent no_subtree check export >> without parent fh, so what we do is call the fh_to_dentry method >> and then call find_acceptable_alias to check if there's already an >> dentry around and if yes use that one. That latter part is what should >> fix your problem. If you want to be lazy you could just copy >> find_acceptable_alias into the xfs code and call it directly and let me >> clean up the mess later.. >> > > Sorry, this was written before my cup of tea in the morning. > find_acceptable_alias is of course a no-op in the no_subtree_check case, > and thus it's identical to what we're currently doing in the handle > code. So any problem you see here will also be seen in an nfs > environment with no_subtree_check, which is the sensible choise Agreed. > and > I think even the default these days. I believe so. We also use that as default on our shipping NAS servers anyway. > So we'd better fix the lacking > expiry in the core code. Mmm, sounds like fun. > Cc'ing Greg as he's been fighting this code > quite a bit in the past. > > Thanks. I'm on xfs-dev now so I've been lurking while you guys discussed this :-) -- Greg Banks, P.Engineer, SGI Australian Software Group. The cake is *not* a lie. I don't speak for SGI. From owner-xfs@oss.sgi.com Mon May 5 16:17:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 16:17:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m45NHIgq005930 for ; Mon, 5 May 2008 16:17:20 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA15512; Tue, 6 May 2008 09:17:58 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m45NHvsT157934004; Tue, 6 May 2008 09:17:58 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m45NHsTa157926046; Tue, 6 May 2008 09:17:54 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 6 May 2008 09:17:54 +1000 From: David Chinner To: Marco Berizzi Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Message-ID: <20080505231754.GL155679365@sgi.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15791 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs [Please cc the XFS list (xfs@oss.sgi.com) on bug reports or put "XFS" in the subject line so ppl know to pay attention to your report.] On Mon, May 05, 2008 at 03:41:29PM +0200, Marco Berizzi wrote: > Hi. > Just few minutes ago an xfs filesystem > was shutdown with these errors: > > May 5 14:31:38 Pleiadi kernel: xfs_inotobp: xfs_imap() returned an > error 22 on hda8. Returning error. > May 5 14:31:38 Pleiadi kernel: xfs_iunlink_remove: xfs_inotobp() > returned an error 22 on hda8. Returning error. > May 5 14:31:38 Pleiadi kernel: xfs_inactive:^Ixfs_ifree() returned an > error = 22 on hda8 > May 5 14:31:38 Pleiadi kernel: xfs_force_shutdown(hda8,0x1) called from > line 1737 of file fs/xfs/xfs_vnodeops.c. Return address = 0xc01e6fde > May 5 14:31:38 Pleiadi kernel: Filesystem "hda8": I/O Error Detected. > Shutting down filesystem: hda8 > May 5 14:31:38 Pleiadi kernel: Please umount the filesystem, and > rectify the problem(s) > May 5 14:36:43 Pleiadi kernel: xfs_force_shutdown(hda8,0x1) called from > line 420 of file fs/xfs/xfs_rw.c. Return address = 0xc01eaf21 Is it reproducable? What were you doing at the time the problem occurred? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon May 5 18:27:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 18:28:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m461RmsN017788 for ; Mon, 5 May 2008 18:27:50 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA17961; Tue, 6 May 2008 11:28:32 +1000 From: tes@sgi.com Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 890B358C4C15; Tue, 6 May 2008 11:28:32 +1000 (EST) Date: Tue, 06 May 2008 11:28:32 +1000 To: xfs-dev@sgi.com, xfs@oss.sgi.com Subject: review: 016.patch Message-ID: <481fb440.Vs2ofNh0UNXLCPCX%tes@sgi.com> User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15792 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Forgot to include the updated 016.out for the sampling log traffic. 016 | 44 ++++++++++++++++++++++++++++++++++---------- 016.out | 4 ++++ 2 files changed, 38 insertions(+), 10 deletions(-) =========================================================================== Index: xfstests/016 =========================================================================== --- a/xfstests/016 2008-05-06 10:54:31.000000000 +1000 +++ b/xfstests/016 2008-05-05 13:07:01.040000000 +1000 @@ -50,7 +50,7 @@ _init() echo "*** reset partition" $here/src/devzero -b 2048 -n 50 -v 198 $SCRATCH_DEV echo "*** mkfs" - force_opts="-dsize=50m -lsize=2097152" + force_opts="-dsize=50m -lsize=$log_size" echo mkfs_xfs $force_opts $SCRATCH_DEV >>$seq.full _scratch_mkfs_xfs $force_opts >$tmp.mkfs0 2>&1 [ $? -ne 0 ] && \ @@ -156,6 +156,10 @@ _supported_os Linux rm -f $seq.full +# mkfs sizes +log_size=2097152 +log_size_bb=`expr $log_size / 512` + _require_scratch _init @@ -163,27 +167,47 @@ block=`_after_log $SCRATCH_DEV` echo "fsblock after log = $block" >>$seq.full _check_corrupt $SCRATCH_DEV $block -size=`_log_size` -echo "log size = $size BB" >>$seq.full +actual_log_size=`_log_size` +echo "log size = $actual_log_size BB" >>$seq.full head=`_log_head` echo "log position = $head" >>$seq.full lsunit=`_log_sunit` echo "log sunit = $lsunit" >>$seq.full -[ $size -eq 4096 ] || \ +# sanity checks +[ $actual_log_size -eq $log_size_bb ] || \ _fail "!!! unexpected log size $size" [ $head -eq 2 -o $head -eq $((lsunit/512)) ] || \ _fail "!!! unexpected initial log position $head vs. $((lsunit/512))" -echo " lots of traffic" >>$seq.full -_log_traffic 850 +# find how how many blocks per op for 100 ops +# ignore the fact that it will also include an unmount record etc... +# this should be small overall +echo " lots of traffic for sampling" >>$seq.full +sample_size_ops=100 +_log_traffic $sample_size_ops +head1=`_log_head` +num_blocks=`expr $head1 - $head` +blocks_per_op=`echo "scale=3; $num_blocks / $sample_size_ops" | bc` +echo "blocks_per_op = $blocks_per_op" >>$seq.full +num_expected_ops=`echo "$log_size_bb / $blocks_per_op" | bc` +echo "num_expected_ops = $num_expected_ops" >>$seq.full +num_expected_to_go=`echo "$num_expected_ops - $sample_size_ops" | bc` +echo "num_expected_to_go = $num_expected_to_go" >>$seq.full + +echo " lots more traffic" >>$seq.full +_log_traffic $num_expected_to_go head=`_log_head` echo "log position = $head" >>$seq.full -[ $head -gt 3850 -a $head -lt 4050 ] || \ - _fail "!!! unexpected log position $head" +# e.g. 3891 +near_end_min=`echo "0.95 * $log_size_bb" | bc | sed 's/\..*//'` +echo "near_end_min = $near_end_min" >>$seq.full + +[ $head -gt $near_end_min -a $head -lt $log_size_bb ] || \ + _fail "!!! unexpected near end log position $head" -for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +for c in `seq 0 20` do echo " little traffic" >>$seq.full _log_traffic 2 @@ -193,7 +217,7 @@ do done [ $head -lt 1000 ] || \ - _fail "!!! unexpected log position $head" + _fail "!!! unexpected wrapped log position $head" # success, all done status=0 =========================================================================== Index: xfstests/016.out =========================================================================== --- a/xfstests/016.out 2008-05-06 10:54:31.000000000 +1000 +++ b/xfstests/016.out 2008-05-05 12:58:55.380000000 +1000 @@ -11,6 +11,10 @@ Wrote 51200.00Kb (value 0xc6) *** mount *** fiddle *** unmount +*** generate log traffic + *** mount + *** fiddle + *** unmount *** check for corruption *** generate log traffic *** mount From owner-xfs@oss.sgi.com Mon May 5 18:29:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 18:29:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m461TMe2017903 for ; Mon, 5 May 2008 18:29:26 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA17983; Tue, 6 May 2008 11:29:57 +1000 Message-ID: <481FB495.6040709@sgi.com> Date: Tue, 06 May 2008 11:29:57 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-dev , xfs-oss Subject: Re: review: xfstests/016 change References: <481E7F17.5090601@sgi.com> <20080505055446.GB15609@infradead.org> <481EA70A.2030500@sgi.com> <20080505183122.GA11163@infradead.org> In-Reply-To: <20080505183122.GA11163@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15793 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Mon, May 05, 2008 at 04:19:54PM +1000, Timothy Shimmin wrote: >> Groan. Sorry. >> I'll attach 016.patch for the moment. >> >> Need to see where things went wrong with the whitespace. > > Still fails for me with that patch applied: > > 016 43s ... > - output mismatch (see 016.out.bad) > 13a14,17 >> *** generate log traffic >> *** mount >> *** fiddle >> *** unmount > Failures: 016 > Failed 1 of 1 tests Forgot adding 016.out change to patch. The failure diff above means it worked ;-) --Tim From owner-xfs@oss.sgi.com Mon May 5 18:38:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 18:38:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23 autolearn=no version=3.3.0-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m461bxFw018725 for ; Mon, 5 May 2008 18:38:03 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 57C77304080; Mon, 5 May 2008 18:38:41 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m461cajm955238; Tue, 6 May 2008 11:38:37 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs-dev@sgi.com, xfs@oss.sgi.com, gnb@sgi.com Subject: Re: Don't use d_alloc_anon for open_by_handle References: <20080501070244.GH108924158@sgi.com> <1209693339-4861-1-git-send-email-xaiki@sgi.com> <20080502060654.GA23912@infradead.org> <20080505095316.GA23934@infradead.org> <20080505184424.GA25933@infradead.org> Date: Tue, 06 May 2008 11:38:37 +1000 In-Reply-To: <20080505184424.GA25933@infradead.org> (Christoph Hellwig's message of "Mon, 5 May 2008 14:44:24 -0400") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15794 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Mon, May 05, 2008 at 05:53:16AM -0400, Christoph Hellwig wrote: >> It shouldn't be slow. You'd do the equivalent no_subtree check >> export without parent fh, so what we do is call the fh_to_dentry >> method and then call find_acceptable_alias to check if there's >> already an dentry around and if yes use that one. That latter part >> is what should fix your problem. If you want to be lazy you could >> just copy find_acceptable_alias into the xfs code and call it >> directly and let me clean up the mess later.. > > Sorry, this was written before my cup of tea in the morning. > find_acceptable_alias is of course a no-op in the no_subtree_check > case, and thus it's identical to what we're currently doing in the > handle code. So any problem you see here will also be seen in an nfs > environment with no_subtree_check, which is the sensible choise and I > think even the default these days. So we'd better fix the lacking > expiry in the core code. Cc'ing Greg as he's been fighting this code > quite a bit in the past. So I've looked at find_acceptable_alias, and all it does is going through the dentries associated with the inode associated with the dentry we give it, testing if it's 'acceptable' with a function we provide. In this very case *any* dentry is acceptable, so we'd just provide a NO-OP there. So if I do as you suggest and call xfs_fh_to_dentry, which would give me a dentry using d_alloc_anon, which already tries to do the same thing with d_find_alias (just lacking the 'acceptable' check)… So we're back to the exact same situation as now. The argument is that we should then fix the core code… which should also fix the issue in the way it is NOW… may I ask: ¿ what's the point in moving things around ? Further more, the only critic you gave to the proposed solution is 'even more buggy than d_alloc_anon', from anyone else than you that would have been a plain useless troll, but I belive you have your reasons to have this position, can you please explain ? The situation being now, that users of the xfs libhandle interface will have dentries and inodes hanging in space and time for ever until OOM. Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Mon May 5 19:26:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 19:26:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m462QPT8021592 for ; Mon, 5 May 2008 19:26:27 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA19364; Tue, 6 May 2008 12:27:04 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m462R2sT158038494; Tue, 6 May 2008 12:27:03 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m462R1Bd157882535; Tue, 6 May 2008 12:27:01 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 6 May 2008 12:27:01 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Fix xfs_fsync() b0rkage Message-ID: <20080506022701.GN155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15795 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix fsync() b0rkage. xfs_fsync() fails to wait for data I/O completion before checking if the inode is dirty or clean to decide whether to log the inode or not. This misses inode size updates when the data flushed by the fsync() is extending the file. This results in xfsqa test 179 failures. Hence, like fdatasync(), we need to wait for I/O completion first, then check the inode for cleanliness. Doing so makes the behaviour of xfs_fsync() identical for fsync and fdatasync and we *always* use synchronous semantics if the inode is dirty. Therefore also kill the differences and remove the unused flags from the xfs_fsync function and callers. Signed-off-by: Dave Chinner --- fs/xfs/dmapi/xfs_dm.c | 9 --- fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_vnodeops.c | 108 ++++++++++++++++--------------------------- fs/xfs/xfs_vnodeops.h | 3 - 5 files changed, 56 insertions(+), 89 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/dmapi/xfs_dm.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/dmapi/xfs_dm.c 2008-04-28 16:35:23.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/dmapi/xfs_dm.c 2008-05-06 11:51:59.814232675 +1000 @@ -2880,19 +2880,14 @@ xfs_dm_sync_by_handle( /* We need to protect against concurrent writers.. */ ret = filemap_fdatawrite(inode->i_mapping); down_rw_sems(inode, DM_FLAGS_IMUX); - err = xfs_fsync(ip, FSYNC_WAIT, 0, -1); + err = -xfs_fsync(ip, 0, -1); if (!ret) ret = err; up_rw_sems(inode, DM_FLAGS_IMUX); err = filemap_fdatawait(inode->i_mapping); if (!ret) ret = err; - - xfs_iflags_clear(ip, XFS_ITRUNCATED); - if (ret > 0) - ret = -ret; /* Return negative errors to DMAPI */ - - return(ret); + return ret; } Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_file.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_file.c 2008-03-13 13:07:24.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_file.c 2008-05-06 12:06:08.715527861 +1000 @@ -187,19 +187,24 @@ xfs_file_release( return -xfs_release(XFS_I(inode)); } +/* + * We ignore the datasync flag here because a datasync is effectively + * identical to an fsync. That is, datasync implies that we need to write + * only the metadata needed to be able to access the data that is written + * if we crash after the call completes. Hence if we are writing beyond + * EOF we have to log the inode size change as well, which makes it a + * full fsync. If we don't write beyond EOF, the inode core will be + * clean in memory and so we don't need to log the inode, just like + * fsync. + */ STATIC int xfs_file_fsync( struct file *filp, struct dentry *dentry, int datasync) { - int flags = FSYNC_WAIT; - - if (datasync) - flags |= FSYNC_DATA; xfs_iflags_clear(XFS_I(dentry->d_inode), XFS_ITRUNCATED); - return -xfs_fsync(XFS_I(dentry->d_inode), flags, - (xfs_off_t)0, (xfs_off_t)-1); + return -xfs_fsync(XFS_I(dentry->d_inode), (xfs_off_t)0, (xfs_off_t)-1); } #ifdef HAVE_DMAPI Index: 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vnodeops.c 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c 2008-05-06 11:51:51.063375280 +1000 @@ -856,16 +856,14 @@ xfs_readlink( /* * xfs_fsync * - * This is called to sync the inode and its data out to disk. - * We need to hold the I/O lock while flushing the data, and - * the inode lock while flushing the inode. The inode lock CANNOT - * be held while flushing the data, so acquire after we're done - * with that. + * This is called to sync the inode and its data out to disk. We need to hold + * the I/O lock while flushing the data, and the inode lock while flushing the + * inode. The inode lock CANNOT be held while flushing the data, so acquire + * after we're done with that. */ int xfs_fsync( xfs_inode_t *ip, - int flag, xfs_off_t start, xfs_off_t stop) { @@ -880,98 +878,76 @@ xfs_fsync( if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return XFS_ERROR(EIO); - if (flag & FSYNC_DATA) - filemap_fdatawait(vn_to_inode(XFS_ITOV(ip))->i_mapping); + /* capture size updates in I/O completion before writing the inode. */ + error = filemap_fdatawait(vn_to_inode(XFS_ITOV(ip))->i_mapping); + if (error) + return XFS_ERROR(error); /* - * We always need to make sure that the required inode state - * is safe on disk. The vnode might be clean but because - * of committed transactions that haven't hit the disk yet. - * Likewise, there could be unflushed non-transactional - * changes to the inode core that have to go to disk. + * We always need to make sure that the required inode state is safe on + * disk. The vnode might be clean but we still might need to force the + * log because of committed transactions that haven't hit the disk yet. + * Likewise, there could be unflushed non-transactional changes to the + * inode core that have to go to disk and this requires us to issue + * a synchronous transaction to capture these changes correctly. * - * The following code depends on one assumption: that - * any transaction that changes an inode logs the core - * because it has to change some field in the inode core - * (typically nextents or nblocks). That assumption - * implies that any transactions against an inode will - * catch any non-transactional updates. If inode-altering - * transactions exist that violate this assumption, the - * code breaks. Right now, it figures that if the involved - * update_* field is clear and the inode is unpinned, the - * inode is clean. Either it's been flushed or it's been - * committed and the commit has hit the disk unpinning the inode. - * (Note that xfs_inode_item_format() called at commit clears - * the update_* fields.) + * This code relies on the assumption that if the update_* fields + * of the inode are clear and the inode is unpinned then it is clean + * and no action is required. */ xfs_ilock(ip, XFS_ILOCK_SHARED); - /* If we are flushing data then we care about update_size - * being set, otherwise we care about update_core - */ - if ((flag & FSYNC_DATA) ? - (ip->i_update_size == 0) : - (ip->i_update_core == 0)) { - /* - * Timestamps/size haven't changed since last inode - * flush or inode transaction commit. That means - * either nothing got written or a transaction - * committed which caught the updates. If the - * latter happened and the transaction hasn't - * hit the disk yet, the inode will be still - * be pinned. If it is, force the log. + if (!(ip->i_update_size || ip->i_update_core)) { + /* + * Timestamps/size haven't changed since last inode flush or + * inode transaction commit. That means either nothing got + * written or a transaction committed which caught the updates. + * If the latter happened and the transaction hasn't hit the + * disk yet, the inode will be still be pinned. If it is, + * force the log. */ xfs_iunlock(ip, XFS_ILOCK_SHARED); if (xfs_ipincount(ip)) { - _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, - XFS_LOG_FORCE | - ((flag & FSYNC_WAIT) - ? XFS_LOG_SYNC : 0), + error = _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, + XFS_LOG_FORCE | XFS_LOG_SYNC, &log_flushed); } else { /* - * If the inode is not pinned and nothing - * has changed we don't need to flush the - * cache. + * If the inode is not pinned and nothing has changed + * we don't need to flush the cache. */ changed = 0; } - error = 0; } else { /* - * Kick off a transaction to log the inode - * core to get the updates. Make it - * sync if FSYNC_WAIT is passed in (which - * is done by everybody but specfs). The - * sync transaction will also force the log. + * Kick off a transaction to log the inode core to get the + * updates. The sync transaction will also force the log. */ xfs_iunlock(ip, XFS_ILOCK_SHARED); tp = xfs_trans_alloc(ip->i_mount, XFS_TRANS_FSYNC_TS); - if ((error = xfs_trans_reserve(tp, 0, - XFS_FSYNC_TS_LOG_RES(ip->i_mount), - 0, 0, 0))) { + error = xfs_trans_reserve(tp, 0, + XFS_FSYNC_TS_LOG_RES(ip->i_mount), 0, 0, 0); + if (error) { xfs_trans_cancel(tp, 0); return error; } xfs_ilock(ip, XFS_ILOCK_EXCL); /* - * Note - it's possible that we might have pushed - * ourselves out of the way during trans_reserve - * which would flush the inode. But there's no - * guarantee that the inode buffer has actually - * gone out yet (it's delwri). Plus the buffer - * could be pinned anyway if it's part of an - * inode in another recent transaction. So we - * play it safe and fire off the transaction anyway. + * Note - it's possible that we might have pushed ourselves out + * of the way during trans_reserve which would flush the inode. + * But there's no guarantee that the inode buffer has actually + * gone out yet (it's delwri). Plus the buffer could be pinned + * anyway if it's part of an inode in another recent + * transaction. So we play it safe and fire off the + * transaction anyway. */ xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - if (flag & FSYNC_WAIT) - xfs_trans_set_sync(tp); + xfs_trans_set_sync(tp); error = _xfs_trans_commit(tp, 0, &log_flushed); xfs_iunlock(ip, XFS_ILOCK_EXCL); Index: 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vnodeops.h 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.h 2008-05-06 11:43:38.031188770 +1000 @@ -18,8 +18,7 @@ int xfs_open(struct xfs_inode *ip); int xfs_setattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags, struct cred *credp); int xfs_readlink(struct xfs_inode *ip, char *link); -int xfs_fsync(struct xfs_inode *ip, int flag, xfs_off_t start, - xfs_off_t stop); +int xfs_fsync(struct xfs_inode *ip, xfs_off_t start, xfs_off_t stop); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vnode.h 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-06 11:53:21.223604472 +1000 @@ -230,14 +230,6 @@ static inline void vn_atime_to_time_t(bh #define ATTR_NOSIZETOK 0x400 /* Don't get the SIZE token */ /* - * Flags to vop_fsync/reclaim. - */ -#define FSYNC_NOWAIT 0 /* asynchronous flush */ -#define FSYNC_WAIT 0x1 /* synchronous fsync or forced reclaim */ -#define FSYNC_INVAL 0x2 /* flush and invalidate cached data */ -#define FSYNC_DATA 0x4 /* synchronous fsync of data only */ - -/* * Tracking vnode activity. */ #if defined(XFS_INODE_TRACE) From owner-xfs@oss.sgi.com Mon May 5 21:21:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 21:21:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m464L4wD032543 for ; Mon, 5 May 2008 21:21:07 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA22276; Tue, 6 May 2008 14:21:37 +1000 Message-ID: <481FDCD1.2010905@sgi.com> Date: Tue, 06 May 2008 14:21:37 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: Eric Sandeen , xfs-oss Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> <480E89B5.8070006@sandeen.net> <481B7FD1.3030107@sandeen.net> <20080505070847.GH155679365@sgi.com> In-Reply-To: <20080505070847.GH155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15796 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Fri, May 02, 2008 at 03:55:45PM -0500, Eric Sandeen wrote: >> Eric Sandeen wrote: >>> Eric Sandeen wrote: >>>> This should fix the longstanding issues with xfs and old ABI >>>> arm boxes, which lead to various asserts and xfs shutdowns, >>>> and for which an (incorrect) patch has been floating around >>>> for years. (Said patch made ARM internally consistent, but >>>> altered the normal xfs on-disk format such that it looked >>>> corrupted on other architectures): >>>> http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html >>> ping again... >> ping #3... > > > > Looks like if I don't pick it up then nobody is going to answer. > I'll run it through my ia64 and x86_64 test boxes and if it's ok > then I'll commit it. > As it only defines __arch_pack for __arm__, I literally can't see how on earth it won't pass for ia64 and x86-64, though I realise (I guess) we need to test to be sure :) So Eric tested this on qemu-arm with success. And there was a little debate over whether ARM-EABI would work currently in XFS, with Luca Olivetti saying in one kernel he has success and in another he doesn't. And Andre Draszik saying that for ARM-EABI it wouldn't work. That aside, Eric has tried out on ARM without EABI (old ABI) and has had success, so it is at least useful for this case. I don't see us doing any arm testing for this ourselves :) --Tim From owner-xfs@oss.sgi.com Mon May 5 22:18:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 22:18:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m465IZ5V003474 for ; Mon, 5 May 2008 22:18:36 -0700 X-ASG-Debug-ID: 1210051157-39d702400000-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 4761510F49BF; Mon, 5 May 2008 22:19:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id UfQ8oBqMzIEZ3eiD; Mon, 05 May 2008 22:19:17 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JtFa8-0005Pw-Rw; Tue, 06 May 2008 05:19:16 +0000 Date: Tue, 6 May 2008 01:19:16 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Fix xfs_fsync() b0rkage Subject: Re: [PATCH] Fix xfs_fsync() b0rkage Message-ID: <20080506051916.GA7402@infradead.org> References: <20080506022701.GN155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080506022701.GN155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210051161 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.32 X-Barracuda-Spam-Status: No, SCORE=-1.32 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, PR0N_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M 0.20 PR0N_SUBJECT Subject has letters around special characters (pr0n) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15797 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 06, 2008 at 12:27:01PM +1000, David Chinner wrote: > Fix fsync() b0rkage. > > xfs_fsync() fails to wait for data I/O completion before checking if > the inode is dirty or clean to decide whether to log the inode or not. > This misses inode size updates when the data flushed by the fsync() > is extending the file. This results in xfsqa test 179 failures. > > Hence, like fdatasync(), we need to wait for I/O completion first, > then check the inode for cleanliness. Doing so makes the behaviour of > xfs_fsync() identical for fsync and fdatasync and we *always* use > synchronous semantics if the inode is dirty. Therefore also kill the > differences and remove the unused flags from the xfs_fsync function > and callers. The change looks good from a quick look, but while you're at it you can also remove the unused start/stop arguments. From owner-xfs@oss.sgi.com Mon May 5 22:50:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 05 May 2008 22:50:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15, J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m465oGff005559 for ; Mon, 5 May 2008 22:50:18 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA02798; Tue, 6 May 2008 15:50:58 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m465ovsT158090865; Tue, 6 May 2008 15:50:57 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m465otiu158080992; Tue, 6 May 2008 15:50:55 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 6 May 2008 15:50:55 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] Fix xfs_fsync() b0rkage Message-ID: <20080506055055.GQ155679365@sgi.com> References: <20080506022701.GN155679365@sgi.com> <20080506051916.GA7402@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080506051916.GA7402@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15798 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, May 06, 2008 at 01:19:16AM -0400, Christoph Hellwig wrote: > On Tue, May 06, 2008 at 12:27:01PM +1000, David Chinner wrote: > > Fix fsync() b0rkage. > > > > xfs_fsync() fails to wait for data I/O completion before checking if > > the inode is dirty or clean to decide whether to log the inode or not. > > This misses inode size updates when the data flushed by the fsync() > > is extending the file. This results in xfsqa test 179 failures. > > > > Hence, like fdatasync(), we need to wait for I/O completion first, > > then check the inode for cleanliness. Doing so makes the behaviour of > > xfs_fsync() identical for fsync and fdatasync and we *always* use > > synchronous semantics if the inode is dirty. Therefore also kill the > > differences and remove the unused flags from the xfs_fsync function > > and callers. > > The change looks good from a quick look, but while you're at it you > can also remove the unused start/stop arguments. Yup, good point. Updated patch below that also puts back the clearing of the ITRUNCATED flag in the dmapi code. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group Fix fsync() b0rkage. xfs_fsync() fails to wait for data I/O completion before checking if the inode is dirty or clean to decide whether to log the inode or not. This misses inode size updates when the data flushed by the fsync() is extending the file. Hence, like fdatasync(), we need to wait for I/o completion first, then check the inode for cleanliness. Doing so makes the behaviour of xfs_fsync() identical for fsync and fdatasync and we *always* use synchronous semantics if the inode is dirty. Therefore also kill the differences and remove the unused flags from the xfs_fsync function and callers. Version 2: o remove unused ranges from xfs_fsync() as well. o still need to clear the XFS_ITRUNCATED flag in dmapi code Signed-off-by: Dave Chinner --- fs/xfs/dmapi/xfs_dm.c | 8 --- fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_vnodeops.c | 114 ++++++++++++++++--------------------------- fs/xfs/xfs_vnodeops.h | 3 - 5 files changed, 57 insertions(+), 93 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/dmapi/xfs_dm.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/dmapi/xfs_dm.c 2008-04-28 16:35:23.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/dmapi/xfs_dm.c 2008-05-06 15:45:18.321651578 +1000 @@ -2880,19 +2880,15 @@ xfs_dm_sync_by_handle( /* We need to protect against concurrent writers.. */ ret = filemap_fdatawrite(inode->i_mapping); down_rw_sems(inode, DM_FLAGS_IMUX); - err = xfs_fsync(ip, FSYNC_WAIT, 0, -1); + err = -xfs_fsync(ip); if (!ret) ret = err; up_rw_sems(inode, DM_FLAGS_IMUX); err = filemap_fdatawait(inode->i_mapping); if (!ret) ret = err; - xfs_iflags_clear(ip, XFS_ITRUNCATED); - if (ret > 0) - ret = -ret; /* Return negative errors to DMAPI */ - - return(ret); + return ret; } Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_file.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_file.c 2008-03-13 13:07:24.000000000 +1100 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_file.c 2008-05-06 15:32:35.640495883 +1000 @@ -187,19 +187,24 @@ xfs_file_release( return -xfs_release(XFS_I(inode)); } +/* + * We ignore the datasync flag here because a datasync is effectively + * identical to an fsync. That is, datasync implies that we need to write + * only the metadata needed to be able to access the data that is written + * if we crash after the call completes. Hence if we are writing beyond + * EOF we have to log the inode size change as well, which makes it a + * full fsync. If we don't write beyond EOF, the inode core will be + * clean in memory and so we don't need to log the inode, just like + * fsync. + */ STATIC int xfs_file_fsync( struct file *filp, struct dentry *dentry, int datasync) { - int flags = FSYNC_WAIT; - - if (datasync) - flags |= FSYNC_DATA; xfs_iflags_clear(XFS_I(dentry->d_inode), XFS_ITRUNCATED); - return -xfs_fsync(XFS_I(dentry->d_inode), flags, - (xfs_off_t)0, (xfs_off_t)-1); + return -xfs_fsync(XFS_I(dentry->d_inode)); } #ifdef HAVE_DMAPI Index: 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vnodeops.c 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c 2008-05-06 15:34:23.234545942 +1000 @@ -856,18 +856,14 @@ xfs_readlink( /* * xfs_fsync * - * This is called to sync the inode and its data out to disk. - * We need to hold the I/O lock while flushing the data, and - * the inode lock while flushing the inode. The inode lock CANNOT - * be held while flushing the data, so acquire after we're done - * with that. + * This is called to sync the inode and its data out to disk. We need to hold + * the I/O lock while flushing the data, and the inode lock while flushing the + * inode. The inode lock CANNOT be held while flushing the data, so acquire + * after we're done with that. */ int xfs_fsync( - xfs_inode_t *ip, - int flag, - xfs_off_t start, - xfs_off_t stop) + xfs_inode_t *ip) { xfs_trans_t *tp; int error; @@ -875,103 +871,79 @@ xfs_fsync( xfs_itrace_entry(ip); - ASSERT(start >= 0 && stop >= -1); - if (XFS_FORCED_SHUTDOWN(ip->i_mount)) return XFS_ERROR(EIO); - if (flag & FSYNC_DATA) - filemap_fdatawait(vn_to_inode(XFS_ITOV(ip))->i_mapping); + /* capture size updates in I/O completion before writing the inode. */ + error = filemap_fdatawait(vn_to_inode(XFS_ITOV(ip))->i_mapping); + if (error) + return XFS_ERROR(error); /* - * We always need to make sure that the required inode state - * is safe on disk. The vnode might be clean but because - * of committed transactions that haven't hit the disk yet. - * Likewise, there could be unflushed non-transactional - * changes to the inode core that have to go to disk. + * We always need to make sure that the required inode state is safe on + * disk. The vnode might be clean but we still might need to force the + * log because of committed transactions that haven't hit the disk yet. + * Likewise, there could be unflushed non-transactional changes to the + * inode core that have to go to disk and this requires us to issue + * a synchronous transaction to capture these changes correctly. * - * The following code depends on one assumption: that - * any transaction that changes an inode logs the core - * because it has to change some field in the inode core - * (typically nextents or nblocks). That assumption - * implies that any transactions against an inode will - * catch any non-transactional updates. If inode-altering - * transactions exist that violate this assumption, the - * code breaks. Right now, it figures that if the involved - * update_* field is clear and the inode is unpinned, the - * inode is clean. Either it's been flushed or it's been - * committed and the commit has hit the disk unpinning the inode. - * (Note that xfs_inode_item_format() called at commit clears - * the update_* fields.) + * This code relies on the assumption that if the update_* fields + * of the inode are clear and the inode is unpinned then it is clean + * and no action is required. */ xfs_ilock(ip, XFS_ILOCK_SHARED); - /* If we are flushing data then we care about update_size - * being set, otherwise we care about update_core - */ - if ((flag & FSYNC_DATA) ? - (ip->i_update_size == 0) : - (ip->i_update_core == 0)) { - /* - * Timestamps/size haven't changed since last inode - * flush or inode transaction commit. That means - * either nothing got written or a transaction - * committed which caught the updates. If the - * latter happened and the transaction hasn't - * hit the disk yet, the inode will be still - * be pinned. If it is, force the log. + if (!(ip->i_update_size || ip->i_update_core)) { + /* + * Timestamps/size haven't changed since last inode flush or + * inode transaction commit. That means either nothing got + * written or a transaction committed which caught the updates. + * If the latter happened and the transaction hasn't hit the + * disk yet, the inode will be still be pinned. If it is, + * force the log. */ xfs_iunlock(ip, XFS_ILOCK_SHARED); if (xfs_ipincount(ip)) { - _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, - XFS_LOG_FORCE | - ((flag & FSYNC_WAIT) - ? XFS_LOG_SYNC : 0), + error = _xfs_log_force(ip->i_mount, (xfs_lsn_t)0, + XFS_LOG_FORCE | XFS_LOG_SYNC, &log_flushed); } else { /* - * If the inode is not pinned and nothing - * has changed we don't need to flush the - * cache. + * If the inode is not pinned and nothing has changed + * we don't need to flush the cache. */ changed = 0; } - error = 0; } else { /* - * Kick off a transaction to log the inode - * core to get the updates. Make it - * sync if FSYNC_WAIT is passed in (which - * is done by everybody but specfs). The - * sync transaction will also force the log. + * Kick off a transaction to log the inode core to get the + * updates. The sync transaction will also force the log. */ xfs_iunlock(ip, XFS_ILOCK_SHARED); tp = xfs_trans_alloc(ip->i_mount, XFS_TRANS_FSYNC_TS); - if ((error = xfs_trans_reserve(tp, 0, - XFS_FSYNC_TS_LOG_RES(ip->i_mount), - 0, 0, 0))) { + error = xfs_trans_reserve(tp, 0, + XFS_FSYNC_TS_LOG_RES(ip->i_mount), 0, 0, 0); + if (error) { xfs_trans_cancel(tp, 0); return error; } xfs_ilock(ip, XFS_ILOCK_EXCL); /* - * Note - it's possible that we might have pushed - * ourselves out of the way during trans_reserve - * which would flush the inode. But there's no - * guarantee that the inode buffer has actually - * gone out yet (it's delwri). Plus the buffer - * could be pinned anyway if it's part of an - * inode in another recent transaction. So we - * play it safe and fire off the transaction anyway. + * Note - it's possible that we might have pushed ourselves out + * of the way during trans_reserve which would flush the inode. + * But there's no guarantee that the inode buffer has actually + * gone out yet (it's delwri). Plus the buffer could be pinned + * anyway if it's part of an inode in another recent + * transaction. So we play it safe and fire off the + * transaction anyway. */ xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - if (flag & FSYNC_WAIT) - xfs_trans_set_sync(tp); + xfs_trans_set_sync(tp); error = _xfs_trans_commit(tp, 0, &log_flushed); xfs_iunlock(ip, XFS_ILOCK_EXCL); Index: 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_vnodeops.h 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.h 2008-05-06 15:34:35.472959313 +1000 @@ -18,8 +18,7 @@ int xfs_open(struct xfs_inode *ip); int xfs_setattr(struct xfs_inode *ip, struct bhv_vattr *vap, int flags, struct cred *credp); int xfs_readlink(struct xfs_inode *ip, char *link); -int xfs_fsync(struct xfs_inode *ip, int flag, xfs_off_t start, - xfs_off_t stop); +int xfs_fsync(struct xfs_inode *ip); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_vnode.h 2008-04-30 12:32:59.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-06 11:53:21.223604472 +1000 @@ -230,14 +230,6 @@ static inline void vn_atime_to_time_t(bh #define ATTR_NOSIZETOK 0x400 /* Don't get the SIZE token */ /* - * Flags to vop_fsync/reclaim. - */ -#define FSYNC_NOWAIT 0 /* asynchronous flush */ -#define FSYNC_WAIT 0x1 /* synchronous fsync or forced reclaim */ -#define FSYNC_INVAL 0x2 /* flush and invalidate cached data */ -#define FSYNC_DATA 0x4 /* synchronous fsync of data only */ - -/* * Tracking vnode activity. */ #if defined(XFS_INODE_TRACE) From owner-xfs@oss.sgi.com Tue May 6 00:04:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 00:05:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4674pgG012114 for ; Tue, 6 May 2008 00:04:53 -0700 X-ASG-Debug-ID: 1210057536-22f302490000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc3-s41.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D0AAB13A05 for ; Tue, 6 May 2008 00:05:36 -0700 (PDT) Received: from bay0-omc3-s41.bay0.hotmail.com (bay0-omc3-s41.bay0.hotmail.com [65.54.246.241]) by cuda.sgi.com with ESMTP id VIkfb0nBmzzUSjCB for ; Tue, 06 May 2008 00:05:36 -0700 (PDT) Received: from hotmail.com ([65.54.174.77]) by bay0-omc3-s41.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 6 May 2008 00:05:35 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 6 May 2008 00:05:35 -0700 Message-ID: Received: from 85.32.103.134 by BAY103-DAV5.phx.gbl with DAV; Tue, 06 May 2008 07:05:30 +0000 X-Originating-IP: [85.32.103.134] X-Originating-Email: [pupilla@hotmail.com] X-Sender: pupilla@hotmail.com From: "Marco Berizzi" To: "David Chinner" Cc: , References: <20080505231754.GL155679365@sgi.com> X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Date: Tue, 6 May 2008 09:03:06 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1123 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 X-OriginalArrivalTime: 06 May 2008 07:05:35.0448 (UTC) FILETIME=[94D36580:01C8AF47] X-Barracuda-Connect: bay0-omc3-s41.bay0.hotmail.com[65.54.246.241] X-Barracuda-Start-Time: 1210057536 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=MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15799 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pupilla@hotmail.com Precedence: bulk X-list: xfs David Chinner wrote: > [Please cc the XFS list (xfs@oss.sgi.com) on bug reports or put "XFS" in the > subject line so ppl know to pay attention to your report.] ok sorry. > On Mon, May 05, 2008 at 03:41:29PM +0200, Marco Berizzi wrote: > > Hi. > > Just few minutes ago an xfs filesystem > > was shutdown with these errors: > > > > May 5 14:31:38 Pleiadi kernel: xfs_inotobp: xfs_imap() returned an > > error 22 on hda8. Returning error. > > May 5 14:31:38 Pleiadi kernel: xfs_iunlink_remove: xfs_inotobp() > > returned an error 22 on hda8. Returning error. > > May 5 14:31:38 Pleiadi kernel: xfs_inactive:^Ixfs_ifree() returned an > > error = 22 on hda8 > > May 5 14:31:38 Pleiadi kernel: xfs_force_shutdown(hda8,0x1) called from > > line 1737 of file fs/xfs/xfs_vnodeops.c. Return address = 0xc01e6fde > > May 5 14:31:38 Pleiadi kernel: Filesystem "hda8": I/O Error Detected. > > Shutting down filesystem: hda8 > > May 5 14:31:38 Pleiadi kernel: Please umount the filesystem, and > > rectify the problem(s) > > May 5 14:36:43 Pleiadi kernel: xfs_force_shutdown(hda8,0x1) called from > > line 420 of file fs/xfs/xfs_rw.c. Return address = 0xc01eaf21 > > Is it reproducable? honestly, I don't know. As you may see from the dmesg output this box has been started on 24 april and the crash has happened yesterday. IMHO the crash happended because of this: At 12:23 squid complain that there is no left space on device, and it start to shrinking cache_dir, and at 12:57 the kernel start logging... This box is pretty slow (celeron) and the hda8 filesystem is about 2786928 1k-blocks. > What were you doing at the time the problem occurred? this box is running squid (http proxy): hda8 is where squid cache and logs are stored. I haven't rebooted this box since the problem happened. If you need ssh access just email me. This is the output from xfs_repair: Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... ALERT: The filesystem has valuable metadata changes in a log which is being destroyed because the -L option was used. - 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 data fork in ino 351800 claims free block 25655 imap claims in-use inode 351800 is free, correcting imap data fork in ino 755175 claims free block 47552 data fork in ino 755175 claims free block 47553 data fork in ino 755175 claims free block 47554 imap claims in-use inode 755175 is free, correcting imap - agno = 1 - agno = 2 - agno = 3 data fork in ino 6750465 claims free block 422290 imap claims in-use inode 6750465 is free, correcting imap data fork in ino 6750520 claims free block 422467 data fork in ino 6750520 claims free block 422468 data fork in ino 6750520 claims free block 422469 data fork in ino 6750520 claims free block 422470 imap claims in-use inode 6750520 is free, correcting imap - agno = 4 - agno = 5 data fork in ino 10787308 claims free block 681220 imap claims in-use inode 10787308 is free, correcting imap data fork in ino 10787309 claims free block 681221 imap claims in-use inode 10787309 is free, correcting imap data fork in ino 10842499 claims free block 677665 imap claims in-use inode 10842499 is free, correcting imap data fork in ino 10870100 claims free block 679867 imap claims in-use inode 10870100 is free, correcting imap data fork in ino 10895430 claims free block 681114 imap claims in-use inode 10895430 is free, correcting imap data fork in ino 10895431 claims free block 681115 imap claims in-use inode 10895431 is free, correcting imap - agno = 6 data fork in ino 12986518 claims free block 813324 data fork in ino 12986518 claims free block 813325 data fork in ino 12986518 claims free block 813326 data fork in ino 12986518 claims free block 813327 data fork in ino 12986518 claims free block 813328 imap claims in-use inode 12986518 is free, correcting imap - agno = 7 - process newly discovered inodes... Phase 4 - check for duplicate blocks... - setting up duplicate extent list... - clear lost+found (if it exists) ... - check for inodes claiming duplicate blocks... - agno = 0 - agno = 1 - agno = 2 - agno = 3 - agno = 4 - agno = 5 - agno = 6 - agno = 7 Phase 5 - rebuild AG headers and trees... - reset superblock... Phase 6 - check inode connectivity... - resetting contents of realtime bitmap and summary inodes - ensuring existence of lost+found directory - traversing filesystem starting at / ... - traversal finished ... - traversing all unattached subtrees ... - traversals finished ... - moving disconnected inodes to lost+found ... disconnected inode 351800, moving to lost+found disconnected inode 755175, moving to lost+found disconnected inode 6750465, moving to lost+found disconnected inode 6750520, moving to lost+found disconnected inode 10787308, moving to lost+found disconnected inode 10787309, moving to lost+found disconnected inode 10842499, moving to lost+found disconnected inode 10870100, moving to lost+found disconnected inode 10895430, moving to lost+found disconnected inode 10895431, moving to lost+found disconnected inode 12986518, moving to lost+found Phase 7 - verify and correct link counts... done PS: xfsprogs is 2.8.10 from slackware 11.0 From owner-xfs@oss.sgi.com Tue May 6 01:16:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 01:16:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=BAYES_20,TVD_SPACE_RATIO autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m468GLZP020943 for ; Tue, 6 May 2008 01:16:25 -0700 X-ASG-Debug-ID: 1210061825-2f9703950000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from www1458.sakura.ne.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 15016B13CD5 for ; Tue, 6 May 2008 01:17:06 -0700 (PDT) Received: from www1458.sakura.ne.jp (www1458.sakura.ne.jp [219.94.163.68]) by cuda.sgi.com with ESMTP id jkez6rjrFWVbssPJ for ; Tue, 06 May 2008 01:17:06 -0700 (PDT) Received: from www1458.sakura.ne.jp (localhost [127.0.0.1]) by www1458.sakura.ne.jp (8.13.6/8.13.6) with ESMTP id m468H4q6079591 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 6 May 2008 17:17:04 +0900 (JST) (envelope-from kong@www1458.sakura.ne.jp) Received: (from kong@localhost) by www1458.sakura.ne.jp (8.13.6/8.13.6/Submit) id m468H3HM079590; Tue, 6 May 2008 17:17:03 +0900 (JST) (envelope-from kong) Date: Tue, 6 May 2008 17:17:03 +0900 (JST) Message-Id: <200805060817.m468H3HM079590@www1458.sakura.ne.jp> From: Reply-To: king@kong.sakura.ne.jp To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: =?iso-2022-jp?B??= Subject: =?iso-2022-jp?B??= MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Mailer: ppp-124-121-210-237.revip2.asianet.co.th(124.121.210.237:) X-Barracuda-Connect: www1458.sakura.ne.jp[219.94.163.68] X-Barracuda-Start-Time: 1210061827 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.55 X-Barracuda-Spam-Status: No, SCORE=0.55 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=NO_REAL_NAME, SUBJECT_EXCESS_BASE64 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name 0.00 SUBJECT_EXCESS_BASE64 Subject: base64 encoded encoded unnecessarily X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15800 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: king@kong.sakura.ne.jp Precedence: bulk X-list: xfs From owner-xfs@oss.sgi.com Tue May 6 01:55:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 01:56:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m468tqRJ023436 for ; Tue, 6 May 2008 01:55:55 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA07194; Tue, 6 May 2008 18:56:36 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m468uYsT158013372; Tue, 6 May 2008 18:56:35 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m468uWIf157850722; Tue, 6 May 2008 18:56:32 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 6 May 2008 18:56:32 +1000 From: David Chinner To: Marco Berizzi Cc: David Chinner , linux-kernel@vger.kernel.org, xfs@oss.sgi.com Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Message-ID: <20080506085632.GT155679365@sgi.com> References: <20080505231754.GL155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15801 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, May 06, 2008 at 09:03:06AM +0200, Marco Berizzi wrote: > David Chinner wrote: > > > May 5 14:31:38 Pleiadi kernel: xfs_inactive:^Ixfs_ifree() returned > an > > > error = 22 on hda8 > > > > Is it reproducable? > > honestly, I don't know. As you may see from the > dmesg output this box has been started on 24 april > and the crash has happened yesterday. Yeah, I noticed that it happened after substantial uptime. > IMHO the crash happended because of this: > At 12:23 squid complain that there is no left space > on device, and it start to shrinking cache_dir, and > at 12:57 the kernel start logging... > This box is pretty slow (celeron) and the hda8 filesystem > is about 2786928 1k-blocks. Hmmmmm - interesting. Both the reports of this problem are from machines running as squid proxies. Are you using AUFS for the cache? Interesting the ENOSPC condition, but I'm not sure it is at all relevant - the other case seemed to be triggered by some cron job doing cache cleanup so I think it's just the removal files that is triggering this.... > > What were you doing at the time the problem occurred? > > this box is running squid (http proxy): hda8 is where > squid cache and logs are stored. > I haven't rebooted this box since the problem happened. > If you need ssh access just email me. > This is the output from xfs_repair: You've run repair, there's not much I can look at now. As a suggestion, when the cache gets close to full next time, can you take a metadump of the filesystem (obfuscates names and contains no data) and then trigger the cache cleanup function? If the filesystem falls over, I'd be very interested in getting a copy of hte metadump image and trying to reproduce the problem locally. (BTW, you'll need a newer xfsprogs to get xfs_metadump). Still, thank you for the information - the bit about squid proxies if definitely relevant, I think... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue May 6 02:27:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 02:27:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_05 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m469R0jj025852 for ; Tue, 6 May 2008 02:27:04 -0700 X-ASG-Debug-ID: 1210066066-66bc00660000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc1-s30.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CDCC1B1418A for ; Tue, 6 May 2008 02:27:46 -0700 (PDT) Received: from bay0-omc1-s30.bay0.hotmail.com (bay0-omc1-s30.bay0.hotmail.com [65.54.246.102]) by cuda.sgi.com with ESMTP id YROHSlfGJwAsGt6m for ; Tue, 06 May 2008 02:27:46 -0700 (PDT) Received: from hotmail.com ([65.54.174.79]) by bay0-omc1-s30.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 6 May 2008 02:27:46 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Tue, 6 May 2008 02:27:46 -0700 Message-ID: Received: from 85.32.103.134 by BAY103-DAV7.phx.gbl with DAV; Tue, 06 May 2008 09:27:44 +0000 X-Originating-IP: [85.32.103.134] X-Originating-Email: [pupilla@hotmail.com] X-Sender: pupilla@hotmail.com From: "Marco Berizzi" To: "David Chinner" Cc: "David Chinner" , , References: <20080505231754.GL155679365@sgi.com> <20080506085632.GT155679365@sgi.com> X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Date: Tue, 6 May 2008 11:25:21 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1123 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 X-OriginalArrivalTime: 06 May 2008 09:27:46.0132 (UTC) FILETIME=[71827940:01C8AF5B] X-Barracuda-Connect: bay0-omc1-s30.bay0.hotmail.com[65.54.246.102] X-Barracuda-Start-Time: 1210066066 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2543 1.0000 -0.5548 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.55 X-Barracuda-Spam-Status: No, SCORE=-0.55 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15802 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pupilla@hotmail.com Precedence: bulk X-list: xfs David Chinner wrote: > Hmmmmm - interesting. Both the reports of this problem are from > machines running as squid proxies. Are you using AUFS for the cache? no, I'm using cache_dir ufs with cache_replacement_policy heap LFUDA > You've run repair, there's not much I can look at now. > > As a suggestion, when the cache gets close to full next time, can > you take a metadump of the filesystem (obfuscates names and contains > no data) and then trigger the cache cleanup function? If the > filesystem falls over, I'd be very interested in getting a copy of > hte metadump image and trying to reproduce the problem locally. > (BTW, you'll need a newer xfsprogs to get xfs_metadump). could you please tell me the exact command to run when this happen again? > Still, thank you for the information no problem: 2.6.25 is a bit unlucky for me :-(( From owner-xfs@oss.sgi.com Tue May 6 06:43:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 06:43:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46DhEtc014925 for ; Tue, 6 May 2008 06:43:16 -0700 X-ASG-Debug-ID: 1210081438-20c503a00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DE5EB131933 for ; Tue, 6 May 2008 06:43:58 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id jHavppCDootS9Vj0 for ; Tue, 06 May 2008 06:43: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 sandeen.net (Postfix) with ESMTP id C41C218002BEA; Tue, 6 May 2008 08:43:56 -0500 (CDT) Message-ID: <4820609C.9090306@sandeen.net> Date: Tue, 06 May 2008 08:43:56 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Timothy Shimmin CC: David Chinner , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] fix dir2 shortform structures on ARM old ABI Subject: Re: [PATCH] fix dir2 shortform structures on ARM old ABI References: <47DB4181.7040603@sandeen.net> <480E89B5.8070006@sandeen.net> <481B7FD1.3030107@sandeen.net> <20080505070847.GH155679365@sgi.com> <481FDCD1.2010905@sgi.com> In-Reply-To: <481FDCD1.2010905@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: 1210081439 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.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15803 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Timothy Shimmin wrote: > David Chinner wrote: >> On Fri, May 02, 2008 at 03:55:45PM -0500, Eric Sandeen wrote: >>> Eric Sandeen wrote: >>>> Eric Sandeen wrote: >>>>> This should fix the longstanding issues with xfs and old ABI >>>>> arm boxes, which lead to various asserts and xfs shutdowns, >>>>> and for which an (incorrect) patch has been floating around >>>>> for years. (Said patch made ARM internally consistent, but >>>>> altered the normal xfs on-disk format such that it looked >>>>> corrupted on other architectures): >>>>> http://lists.arm.linux.org.uk/lurker/message/20040311.002034.5ecf21a2.html >>>> ping again... >>> ping #3... >> >> >> Looks like if I don't pick it up then nobody is going to answer. >> I'll run it through my ia64 and x86_64 test boxes and if it's ok >> then I'll commit it. >> > As it only defines __arch_pack for __arm__, > I literally can't see how on earth it won't pass for ia64 and x86-64, > though I realise (I guess) we need to test to be sure :) > > So Eric tested this on qemu-arm with success. > And there was a little debate over whether ARM-EABI would work > currently in XFS, > with Luca Olivetti saying in one kernel he has success and in another > he doesn't. And Andre Draszik saying that for ARM-EABI it wouldn't > work. The patch should only affect behavior on *old* abi: +#if defined(__arm__) && !defined(__ARM_EABI__) it is the only one with the unique alignment that matters here. There *is* still another issue on some arm chips related to processor cache flushing; I didn't see the problem in qemu because it the emulator does not have this behavior. But, it's a separate issue from the structure alignment this patch addresses. One thing at a time. :) Thanks, -Eric > That aside, Eric has tried out on ARM without EABI (old ABI) and has had success, > so it is at least useful for this case. > I don't see us doing any arm testing for this ourselves :) > > --Tim > From owner-xfs@oss.sgi.com Tue May 6 06:53:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 06:53:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46DrC37015854 for ; Tue, 6 May 2008 06:53:16 -0700 X-ASG-Debug-ID: 1210082038-21d600180000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9130D131AF5 for ; Tue, 6 May 2008 06:53:58 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 9Qm6vPJCmNoWi1RM for ; Tue, 06 May 2008 06:53: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 sandeen.net (Postfix) with ESMTP id B848B18002BEA; Tue, 6 May 2008 08:53:57 -0500 (CDT) Message-ID: <482062F5.9010402@sandeen.net> Date: Tue, 06 May 2008 08:53:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Marco Berizzi CC: David Chinner , linux-kernel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) References: <20080505231754.GL155679365@sgi.com> <20080506085632.GT155679365@sgi.com> In-Reply-To: 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: 1210082038 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.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15804 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Marco Berizzi wrote: > David Chinner wrote: > >> Hmmmmm - interesting. Both the reports of this problem are from >> machines running as squid proxies. Are you using AUFS for the cache? > > no, I'm using cache_dir ufs with cache_replacement_policy heap LFUDA > >> You've run repair, there's not much I can look at now. >> >> As a suggestion, when the cache gets close to full next time, can >> you take a metadump of the filesystem (obfuscates names and contains >> no data) and then trigger the cache cleanup function? If the >> filesystem falls over, I'd be very interested in getting a copy of >> hte metadump image and trying to reproduce the problem locally. >> (BTW, you'll need a newer xfsprogs to get xfs_metadump). > > could you please tell me the exact command to run > when this happen again? xfs_metadump /dev/hda8 /path/to/the/image/you/are/creating will make a metadata image of the on device hda8 and store it in the filename given on the 2nd argument. The idea is to catch the metadata state shortly before the cache cleanup triggers; this might lead to a reproducible testcase (sgi guys could then restore the metadata image, simulate the cache cleanup, see what happens). Thanks, -Eric >> Still, thank you for the information > > no problem: 2.6.25 is a bit unlucky for me :-(( > > > > From owner-xfs@oss.sgi.com Tue May 6 09:10:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 09:11:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46GAqKJ030176 for ; Tue, 6 May 2008 09:10:55 -0700 X-ASG-Debug-ID: 1210090289-3dee024c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from dubiel.endor.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4F53B164EBBD for ; Tue, 6 May 2008 09:11:30 -0700 (PDT) Received: from dubiel.endor.pl (mail.dubiel.pl [91.194.228.21]) by cuda.sgi.com with ESMTP id vkT6UGnIFAHblxg4 for ; Tue, 06 May 2008 09:11:30 -0700 (PDT) Received: (qmail 4739 invoked by uid 89); 6 May 2008 16:11:28 -0000 Received: from unknown (HELO orion) (postmaster@dubielvitrum.pl@83.12.36.210) by 0 with ESMTPA; 6 May 2008 16:11:28 -0000 Received: from [192.168.18.34] (ident=leszek) by orion with esmtpsa (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from ) id 1JtPlI-0006Dp-0T for xfs@oss.sgi.com; Tue, 06 May 2008 18:11:28 +0200 Message-ID: <4820832B.3070903@dubielvitrum.pl> Date: Tue, 06 May 2008 18:11:23 +0200 From: Leszek Dubiel User-Agent: IceDove 1.5.0.14pre (X11/20080305) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS for lots of small files Subject: XFS for lots of small files Content-Type: text/plain; charset=ISO-8859-2; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.dubiel.pl[91.194.228.21] X-Barracuda-Start-Time: 1210090294 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0627 1.0000 -1.6205 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.62 X-Barracuda-Spam-Status: No, SCORE=-1.62 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.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15805 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Leszek.Dubiel@dubielvitrum.pl Precedence: bulk X-list: xfs Hello! I consider moving server from reiserfs to xfs. In all benchmarks I have read both file systems have had comparable results. But I've made a test: 1. formated /dev/hda2 with reiserfs with default options and made 10.000 files 2. formated /dev/hda2 with xfs with default options and made 10.000 Reiserfs created those files in 2 (two) seconds, and xfs created them in 35 (thirty five) seconds. Is that normal? What I am doing wrong? My system is Debian, current stable version. Below is a log of operation. Thanks in advance. debian:/mnt/hdc2# mkfs.xfs /dev/hdc2 -f; mount /dev/hdc2 /mnt/hdc2; cd /mnt/hdc2; mount | egrep hdc2 meta-data=/dev/hdc2 isize=256 agcount=16, agsize=1220688 blks = sectsz=512 attr=0 data = bsize=4096 blocks=19531008, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=9536, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=65536 blocks=0, rtextents=0 /dev/hdc2 on /mnt/hdc2 type xfs (rw) debian:/mnt/hdc2# time for f in `seq 9999`; do echo $f > $f; done real 0m35.558s user 0m0.256s sys 0m1.080s debian:/mnt/hdc2# time cat * | wc -l 9999 real 0m0.239s user 0m0.020s sys 0m0.172s debian:/mnt/hdc2# cd /; umount /dev/hdc2; mkreiserfs /dev/hdc2 -f; mount /dev/hdc2 /mnt/hdc2; cd /mnt/hdc2; mount | egrep hdc2 mkreiserfs 3.6.19 (2003 www.namesys.com) [...] ReiserFS is successfully created on /dev/hdc2. /dev/hdc2 on /mnt/hdc2 type reiserfs (rw) debian:/mnt/hdc2# time for f in `seq 9999`; do echo $f > $f; done real 0m1.075s user 0m0.232s sys 0m0.844s debian:/mnt/hdc2# time cat * | wc -l 9999 real 0m0.257s user 0m0.028s sys 0m0.256s debian:/mnt/hdc2# exit From owner-xfs@oss.sgi.com Tue May 6 09:22:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 09:23:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46GMjK0031461 for ; Tue, 6 May 2008 09:22:50 -0700 X-ASG-Debug-ID: 1210091009-3bd4018b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay-dm.club-internet.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E4972132D7B for ; Tue, 6 May 2008 09:23:30 -0700 (PDT) Received: from relay-dm.club-internet.fr (relay-dm.club-internet.fr [194.158.104.222]) by cuda.sgi.com with ESMTP id Clye0ICvNM2duYOD for ; Tue, 06 May 2008 09:23:30 -0700 (PDT) Received: from petole.dyndns.org (i05m-87-90-240-206.d4.club-internet.fr [87.90.240.206]) by relay-dm.club-internet.fr (Postfix) with ESMTP id 5FE7825619 for ; Tue, 6 May 2008 18:23:28 +0200 (CEST) Received: from petole.dyndns.org (petole.dyndns.org [192.168.2.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by petole.dyndns.org (Postfix) with ESMTP id 452C9BF02 for ; Tue, 6 May 2008 18:23:28 +0200 (CEST) Date: Tue, 6 May 2008 18:23:28 +0200 From: Nicolas KOWALSKI To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files In-Reply-To: <4820832B.3070903@dubielvitrum.pl> Message-ID: References: <4820832B.3070903@dubielvitrum.pl> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: relay-dm.club-internet.fr[194.158.104.222] X-Barracuda-Start-Time: 1210091010 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.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15806 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: niko@petole.dyndns.org Precedence: bulk X-list: xfs On Tue, 6 May 2008, Leszek Dubiel wrote: > Hello! Hello, > Is that normal? What I am doing wrong? For metadata intensive work, you should consider a little bit of tuning. See this usefull advice: http://thread.gmane.org/gmane.comp.file-systems.xfs.general/21239/focus=21240 -- Nicolas From owner-xfs@oss.sgi.com Tue May 6 11:54:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 11:55:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_42 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46IsvDU009169 for ; Tue, 6 May 2008 11:54:59 -0700 X-ASG-Debug-ID: 1210100140-2f4100e80000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 12E98B1C9E9 for ; Tue, 6 May 2008 11:55:40 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id ajozqk36i7hrfzEb for ; Tue, 06 May 2008 11:55:40 -0700 (PDT) Received: from [10.0.0.21] (e179178177.adsl.alicedsl.de [85.179.178.177]) by mail.lichtvoll.de (Postfix) with ESMTP id 88F735AE2C for ; Tue, 6 May 2008 20:54:21 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files Date: Tue, 6 May 2008 20:55:36 +0200 User-Agent: KMail/1.9.9 References: <4820832B.3070903@dubielvitrum.pl> (sfid-20080506_185726_779300_46423265) In-Reply-To: <4820832B.3070903@dubielvitrum.pl> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805062055.36755.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1210100142 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4685 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.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15807 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Am Dienstag 06 Mai 2008 schrieb Leszek Dubiel: > Hello! Hi Leszek, > I consider moving server from reiserfs to xfs. In all benchmarks I have > read both file systems have had comparable results. > > But I've made a test: > > 1. formated /dev/hda2 with reiserfs with default options and made > 10.000 files > 2. formated /dev/hda2 with xfs with default options and made 10.000 > > Reiserfs created those files in 2 (two) seconds, and xfs created them > in 35 (thirty five) seconds. > > Is that normal? What I am doing wrong? > > My system is Debian, current stable version. Below is a log of > operation. > > > Thanks in advance. [...] > debian:/mnt/hdc2# time for f in `seq 9999`; do echo $f > $f; done > > real 0m35.558s > user 0m0.256s > sys 0m1.080s > > debian:/mnt/hdc2# time cat * | wc -l > 9999 > > real 0m0.239s > user 0m0.020s > sys 0m0.172s I get martin@shambala:~/Zeit/filetest -> rm *; sync ; time for ((I=1; I<=10000; I=I+1)); do echo $I > $I; done real 0m10.642s user 0m0.907s sys 0m1.713s martin@shambala:~/Zeit/filetest -> sync ; time cat * >/dev/null real 0m0.238s user 0m0.087s sys 0m0.153s martin@shambala:~/Zeit/filetest -> sync ; time cat * | wc -l 10000 real 0m0.375s user 0m0.120s sys 0m0.247s martin@shambala:~/Zeit/filetest -> sync ; time rm * real 0m7.600s user 0m0.113s sys 0m1.377s for XFS with optimized settings... shambala> xfs_info /home meta-data=/dev/sda5 isize=256 agcount=6, agsize=4883256 blks = sectsz=512 attr=2 data = bsize=4096 blocks=29299536, imaxpct=25 = 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=1 realtime =none extsz=4096 blocks=0, rtextents=0 agcount is two more than would be optimal cause I growed the partition once. shambala> mount | grep home /dev/sda5 on /home type xfs (rw,relatime,logbsize=256k,logbufs=8) This is on a ThinkPad T42 internal laptop 160 GB harddisk drive with I think 5400rpm. Partition I tested on was not empty at that time and is heavily used. shambala> LANG=EN df -h /home Filesystem Size Used Avail Use% Mounted on /dev/sda5 112G 84G 29G 75% /home And there is quite some fragmentation on it: xfs_db> frag actual 653519, ideal 587066, fragmentation factor 10.17% I do not have free space in my playground LVM to test against ext3 and reiserfs at the moment. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Tue May 6 14:21:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 14:21:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m46LLGIr025063 for ; Tue, 6 May 2008 14:21:22 -0700 X-ASG-Debug-ID: 1210108919-3acc01cc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E832616513AF for ; Tue, 6 May 2008 14:22:00 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id Y48tkLKCedjasZ66 for ; Tue, 06 May 2008 14:22:00 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m46LLYww008265 for ; Tue, 6 May 2008 14:21:34 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m46LLYiA023790 for ; Tue, 6 May 2008 14:21:34 -0700 Received: from goldfinger.agami.com ([10.123.4.142]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 6 May 2008 14:21:57 -0700 Message-ID: <4820CBF5.8090206@agami.com> Date: Tue, 06 May 2008 14:21:57 -0700 From: Michael Nishimoto User-Agent: Thunderbird 2.0.0.12 (X11/20080229) MIME-Version: 1.0 To: David Chinner CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: question about xfs_alloc_fix_freelist() Subject: Re: question about xfs_alloc_fix_freelist() References: <20080504235048.GC155679365@sgi.com> In-Reply-To: <20080504235048.GC155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 06 May 2008 21:21:57.0454 (UTC) FILETIME=[36E34EE0:01C8AFBF] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1210108921 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3311 1.0000 -0.2223 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=RDNS_GENERIC_NO_PTR X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49761 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_GENERIC_NO_PTR Delivered to trusted network by host with generic-looking RDNS - indicates no PTR record X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15808 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs David Chinner wrote: > On Fri, May 02, 2008 at 02:01:47PM -0700, Michael Nishimoto wrote: > > > > The following code can be found near the end of xfs_alloc_fix_freelist: > > > > if (targs.agbno == NULLAGBLOCK) { > > if (flags & XFS_ALLOC_FLAG_FREEING) > > break; > > xfs_trans_brelse(tp, agflbp); > > args->agbp = NULL; > > return 0; > > } > > > > Don't we need to release agbp too by calling xfs_trans_brelse(tp, agbp)? > > I don't think so. AFAICT, The agbp (agf block) is linked into the > transaction and by this point we may have modified the AGF (think > multiple iterations of the loop to fill the free list). Given that > it may be modified, we shouldn't release it here but instead allow > the transaction commit/abort to do that for us at the appropriate > time. > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group I understood that the transaction abort code will free resources/locks when passing back an error. However, by returning args->agbp = NULL, aren't we telling the calling code that we have not satisfied the request in the current AG? I do see the part of about the AGF possibly getting modified. It would help to have a clear comment description of possible inputs vs. expected outputs for this function. :-) thanks, Michael From owner-xfs@oss.sgi.com Tue May 6 22:30:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 06 May 2008 22:31:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m475UY7F003494 for ; Tue, 6 May 2008 22:30:36 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA05763; Wed, 7 May 2008 15:31:12 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m475VBsT159185683; Wed, 7 May 2008 15:31:12 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m475V8Jp159109215; Wed, 7 May 2008 15:31:08 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 7 May 2008 15:31:08 +1000 From: David Chinner To: Michael Nishimoto Cc: David Chinner , xfs@oss.sgi.com Subject: Re: question about xfs_alloc_fix_freelist() Message-ID: <20080507053108.GV103491721@sgi.com> References: <20080504235048.GC155679365@sgi.com> <4820CBF5.8090206@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4820CBF5.8090206@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15809 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, May 06, 2008 at 02:21:57PM -0700, Michael Nishimoto wrote: > David Chinner wrote: > >On Fri, May 02, 2008 at 02:01:47PM -0700, Michael Nishimoto wrote: > > > > > > The following code can be found near the end of xfs_alloc_fix_freelist: > > > > > > if (targs.agbno == NULLAGBLOCK) { > > > if (flags & XFS_ALLOC_FLAG_FREEING) > > > break; > > > xfs_trans_brelse(tp, agflbp); > > > args->agbp = NULL; > > > return 0; > > > } > > > > > > Don't we need to release agbp too by calling xfs_trans_brelse(tp, agbp)? > > > >I don't think so. AFAICT, The agbp (agf block) is linked into the > >transaction and by this point we may have modified the AGF (think > >multiple iterations of the loop to fill the free list). Given that > >it may be modified, we shouldn't release it here but instead allow > >the transaction commit/abort to do that for us at the appropriate > >time. > > I understood that the transaction abort code will free resources/locks > when passing back an error. However, by returning args->agbp = NULL, > aren't we telling the calling code that we have not satisfied the request > in the current AG? Yes. > I do see the part of about the AGF possibly getting modified. > > It would help to have a clear comment description of possible inputs vs. > expected outputs for this function. :-) Like a lot of code, not just XFS. :/ Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed May 7 00:15:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 00:16:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m477FWTQ014163 for ; Wed, 7 May 2008 00:15:35 -0700 X-ASG-Debug-ID: 1210144575-44e000720000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ext.agami.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F38481658392 for ; Wed, 7 May 2008 00:16:15 -0700 (PDT) Received: from ext.agami.com (64.221.212.177.ptr.us.xo.net [64.221.212.177]) by cuda.sgi.com with ESMTP id jcKLRGGRLmlQI82X for ; Wed, 07 May 2008 00:16:15 -0700 (PDT) Received: from agami.com (mail [192.168.168.5]) by ext.agami.com (8.12.5/8.12.5) with ESMTP id m477Fqww025479 for ; Wed, 7 May 2008 00:15:52 -0700 Received: from mx1.agami.com (mx1.agami.com [10.123.10.30]) by agami.com (8.12.11/8.12.11) with ESMTP id m477FqLi024685 for ; Wed, 7 May 2008 00:15:52 -0700 Received: from [127.0.0.1] ([10.123.1.239]) by mx1.agami.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 7 May 2008 00:16:14 -0700 Message-ID: <48215740.5050501@agami.com> Date: Wed, 07 May 2008 00:16:16 -0700 From: Michael Nishimoto User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax) X-Accept-Language: en-us, en MIME-Version: 1.0 To: David Chinner CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: question about xfs_alloc_fix_freelist() Subject: Re: question about xfs_alloc_fix_freelist() References: <20080504235048.GC155679365@sgi.com> <4820CBF5.8090206@agami.com> <20080507053108.GV103491721@sgi.com> In-Reply-To: <20080507053108.GV103491721@sgi.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-OriginalArrivalTime: 07 May 2008 07:16:14.0995 (UTC) FILETIME=[3C704630:01C8B012] X-Barracuda-Connect: 64.221.212.177.ptr.us.xo.net[64.221.212.177] X-Barracuda-Start-Time: 1210144577 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2958 1.0000 -0.3662 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.27 X-Barracuda-Spam-Status: No, SCORE=-0.27 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_GENERIC_NO_PTR X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49762 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_GENERIC_NO_PTR Delivered to trusted network by host with generic-looking RDNS - indicates no PTR record X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15810 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miken@agami.com Precedence: bulk X-list: xfs David Chinner wrote: > On Tue, May 06, 2008 at 02:21:57PM -0700, Michael Nishimoto wrote: > > David Chinner wrote: > > >On Fri, May 02, 2008 at 02:01:47PM -0700, Michael Nishimoto wrote: > > > > > > > > The following code can be found near the end of > xfs_alloc_fix_freelist: > > > > > > > > if (targs.agbno == NULLAGBLOCK) { > > > > if (flags & XFS_ALLOC_FLAG_FREEING) > > > > break; > > > > xfs_trans_brelse(tp, agflbp); > > > > args->agbp = NULL; > > > > return 0; > > > > } > > > > > > > > Don't we need to release agbp too by calling xfs_trans_brelse(tp, > agbp)? > > > > > >I don't think so. AFAICT, The agbp (agf block) is linked into the > > >transaction and by this point we may have modified the AGF (think > > >multiple iterations of the loop to fill the free list). Given that > > >it may be modified, we shouldn't release it here but instead allow > > >the transaction commit/abort to do that for us at the appropriate > > >time. > > > > I understood that the transaction abort code will free resources/locks > > when passing back an error. However, by returning args->agbp = NULL, > > aren't we telling the calling code that we have not satisfied the request > > in the current AG? > > Yes. If this happens and the calling function decides to choose another AG, is there a possibility of using up the entire transaction log reservation? Couldn't we end up affecting freelists in multiple AGs with the same transaction? > > > I do see the part of about the AGF possibly getting modified. > > > > It would help to have a clear comment description of possible inputs vs. > > expected outputs for this function. :-) > > Like a lot of code, not just XFS. :/\ > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group > From owner-xfs@oss.sgi.com Wed May 7 01:43:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 01:44:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m478hsGw026303 for ; Wed, 7 May 2008 01:43:56 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA10317; Wed, 7 May 2008 18:44:27 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m478iPsT149281399; Wed, 7 May 2008 18:44:26 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m478iLBw159216936; Wed, 7 May 2008 18:44:21 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 7 May 2008 18:44:21 +1000 From: David Chinner To: Michael Nishimoto Cc: David Chinner , xfs@oss.sgi.com Subject: Re: question about xfs_alloc_fix_freelist() Message-ID: <20080507084421.GY103491721@sgi.com> References: <20080504235048.GC155679365@sgi.com> <4820CBF5.8090206@agami.com> <20080507053108.GV103491721@sgi.com> <48215740.5050501@agami.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48215740.5050501@agami.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15811 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, May 07, 2008 at 12:16:16AM -0700, Michael Nishimoto wrote: > David Chinner wrote: > >On Tue, May 06, 2008 at 02:21:57PM -0700, Michael Nishimoto wrote: > > > David Chinner wrote: > > > >On Fri, May 02, 2008 at 02:01:47PM -0700, Michael Nishimoto wrote: > > > > > The following code can be found near the end of xfs_alloc_fix_freelist: ..... > > > > > Don't we need to release agbp too by calling xfs_trans_brelse(tp, agbp)? > > > > > > > >I don't think so. AFAICT, The agbp (agf block) is linked into the > > > >transaction and by this point we may have modified the AGF (think > > > >multiple iterations of the loop to fill the free list). Given that > > > >it may be modified, we shouldn't release it here but instead allow > > > >the transaction commit/abort to do that for us at the appropriate > > > >time. > > > > > > I understood that the transaction abort code will free resources/locks > > > when passing back an error. However, by returning args->agbp = NULL, > > > aren't we telling the calling code that we have not satisfied the request > > > in the current AG? > > > >Yes. > > If this happens and the calling function decides to choose another AG, is > there a possibility of using up the entire transaction log reservation? Yes, it could, but remember that if the calling code is obeying the rules then the AG will be considered ENOSPC before we try to touch the AGFL. i.e. this case will never happen if the code is correct. As it turns out, the recent fix I made for a long standing shutdown at ENOSPC during inode create was a result of the inode creation code not following the rules correctly - making it follows the rules meant it the early checks in xfs_alloc_fix_freelist() prevented the piece of code you pointed out dirtying the AGF/AGFL and then ENOSPCing in the AG. See: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=75de2a91c98a6f486f261c1367fe59f5583e15a3 > Couldn't we end up affecting freelists in multiple AGs with the same > transaction? Yes and that is a bug if we don't actually end up allocating out of those AGs. However, in almost cases it is not a fatal bug and the code reflects that.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed May 7 01:47:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 01:47:55 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m478lYZW026899 for ; Wed, 7 May 2008 01:47:38 -0700 X-ASG-Debug-ID: 1210150095-29e402550000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc2-s24.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 045EBB262D1 for ; Wed, 7 May 2008 01:48:15 -0700 (PDT) Received: from bay0-omc2-s24.bay0.hotmail.com (bay0-omc2-s24.bay0.hotmail.com [65.54.246.160]) by cuda.sgi.com with ESMTP id oj8GmTt2kspOQsxJ for ; Wed, 07 May 2008 01:48:15 -0700 (PDT) Received: from hotmail.com ([65.54.174.84]) by bay0-omc2-s24.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Wed, 7 May 2008 01:48:16 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 7 May 2008 01:48:15 -0700 Message-ID: Received: from 85.32.103.134 by BAY103-DAV12.phx.gbl with DAV; Wed, 07 May 2008 08:48:11 +0000 X-Originating-IP: [85.32.103.134] X-Originating-Email: [pupilla@hotmail.com] X-Sender: pupilla@hotmail.com From: "Marco Berizzi" To: "David Chinner" Cc: , References: <20080505231754.GL155679365@sgi.com> <20080506085632.GT155679365@sgi.com> X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Date: Wed, 7 May 2008 10:45:44 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1123 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 X-OriginalArrivalTime: 07 May 2008 08:48:15.0286 (UTC) FILETIME=[16C9D560:01C8B01F] X-Barracuda-Connect: bay0-omc2-s24.bay0.hotmail.com[65.54.246.160] X-Barracuda-Start-Time: 1210150096 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=MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.49762 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15812 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pupilla@hotmail.com Precedence: bulk X-list: xfs just few minutes ago another error. However this time no xfs crash (I have taken an xfs_metadump and then I have run xfs_repair no errors detected), but squid was unable to clean cache: 2008/05/07 09:21:05| diskHandleWrite: FD 120: disk write error: (28) No space left on device 2008/05/07 09:21:05| storeUfsWriteDone: got failure (-6) 2008/05/07 09:21:05| storeSwapOutFileClosed: dirno 0, swapfile 00012D2D, errflag=-6 (28) No space left on device 2008/05/07 09:21:05| WARNING: Shrinking cache_dir #0 to 1183828 KB 2008/05/07 09:21:06| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=125: (1) Operation not permitted 2008/05/07 09:21:06| diskHandleWrite: FD 120: disk write error: (28) No space left on device 2008/05/07 09:21:06| storeUfsWriteDone: got failure (-6) 2008/05/07 09:21:06| storeSwapOutFileClosed: dirno 0, swapfile 00012D2E, errflag=-6 (28) No space left on device 2008/05/07 09:21:06| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=117: (1) Operation not permitted 2008/05/07 09:21:06| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=108: (1) Operation not permitted 2008/05/07 09:44:28| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=155: (1) Operation not permitted 2008/05/07 09:44:48| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=89: (1) Operation not permitted 2008/05/07 09:44:56| diskHandleWrite: FD 73: disk write error: (28) No space left on device 2008/05/07 09:44:56| storeUfsWriteDone: got failure (-6) 2008/05/07 09:44:56| storeSwapOutFileClosed: dirno 0, swapfile 0001377E, errflag=-6 (28) No space left on device 2008/05/07 09:44:56| WARNING: Shrinking cache_dir #0 to 1065440 KB 2008/05/07 09:44:56| diskHandleWrite: FD 73: disk write error: (28) No space left on device 2008/05/07 09:44:56| storeUfsWriteDone: got failure (-6) 2008/05/07 09:44:56| storeSwapOutFileClosed: dirno 0, swapfile 0001377F, errflag=-6 (28) No space left on device 2008/05/07 09:44:56| diskHandleWrite: FD 73: disk write error: (28) No space left on device 2008/05/07 09:44:56| storeUfsWriteDone: got failure (-6) 2008/05/07 09:44:56| storeSwapOutFileClosed: dirno 0, swapfile 00013780, errflag=-6 (28) No space left on device 2008/05/07 09:44:56| diskHandleWrite: FD 73: disk write error: (28) No space left on device 2008/05/07 09:44:56| storeUfsWriteDone: got failure (-6) 2008/05/07 09:44:56| storeSwapOutFileClosed: dirno 0, swapfile 00013781, errflag=-6 (28) No space left on device 2008/05/07 10:36:49| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=162: (1) Operation not permitted 2008/05/07 10:37:00| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=123: (1) Operation not permitted 2008/05/07 10:37:00| commSetEvents: epoll_ctl(EPOLL_CTL_ADD): failed on fd=104: (1) Operation not permitted 2008/05/07 10:37:10| diskHandleWrite: FD 189: disk write error: (28) No space left on device 2008/05/07 10:37:10| storeUfsWriteDone: got failure (-6) 2008/05/07 10:37:10| storeSwapOutFileClosed: dirno 0, swapfile 00000C53, errflag=-6 (28) No space left on device 2008/05/07 10:37:10| WARNING: Shrinking cache_dir #0 to 1017288 KB 2008/05/07 10:37:10| diskHandleWrite: FD 189: disk write error: (28) No space left on device 2008/05/07 10:37:10| storeUfsWriteDone: got failure (-6) 2008/05/07 10:37:10| storeSwapOutFileClosed: dirno 0, swapfile 00000C54, errflag=-6 (28) No space left on device 2008/05/07 10:37:10| diskHandleWrite: FD 88: disk write error: (28) No space left on device 2008/05/07 10:37:10| storeUfsWriteDone: got failure (-6) 2008/05/07 10:37:10| storeSwapOutFileClosed: dirno 0, swapfile 00000C55, errflag=-6 (28) No space left on device May 7 09:44:57 Pleiadi kernel: printk: 103 messages suppressed. May 7 09:44:57 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:57 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:57 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:57 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:57 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:57 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __update_rq_clock+0x23/0x120 May 7 09:44:57 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:57 Pleiadi kernel: [] neigh_periodic_timer+0x0/0x120 May 7 09:44:57 Pleiadi kernel: [] run_timer_softirq+0x93/0x150 May 7 09:44:57 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:57 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:57 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:57 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:57 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:57 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:57 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:57 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:57 Pleiadi kernel: ======================= May 7 09:44:57 Pleiadi kernel: Mem-info: May 7 09:44:57 Pleiadi kernel: DMA per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:57 Pleiadi kernel: Normal per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 20 May 7 09:44:57 Pleiadi kernel: Active:28761 inactive:6843 dirty:46 writeback:0 unstable:0 May 7 09:44:57 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:57 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:57 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109116kB inactive:22384kB present:146304kB pages_scanned:43 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:57 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:57 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:57 Pleiadi kernel: 7028 total pagecache pages May 7 09:44:57 Pleiadi kernel: Swap cache: add 3187137, delete 3181047, find 266145/761335 May 7 09:44:57 Pleiadi kernel: Free swap = 109020kB May 7 09:44:57 Pleiadi kernel: Total swap = 151160kB May 7 09:44:57 Pleiadi kernel: Free swap: 109020kB May 7 09:44:57 Pleiadi kernel: 40960 pages of RAM May 7 09:44:57 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:57 Pleiadi kernel: 1202 reserved pages May 7 09:44:57 Pleiadi kernel: 3469 pages shared May 7 09:44:57 Pleiadi kernel: 6090 pages swap cached May 7 09:44:57 Pleiadi kernel: 46 pages dirty May 7 09:44:57 Pleiadi kernel: 0 pages writeback May 7 09:44:57 Pleiadi kernel: 384 pages mapped May 7 09:44:57 Pleiadi kernel: 2275 pages slab May 7 09:44:57 Pleiadi kernel: 300 pages pagetables May 7 09:44:57 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:57 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:57 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:57 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __update_rq_clock+0x23/0x120 May 7 09:44:57 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:57 Pleiadi kernel: [] neigh_periodic_timer+0x0/0x120 May 7 09:44:57 Pleiadi kernel: [] run_timer_softirq+0x93/0x150 May 7 09:44:57 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:57 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:57 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:57 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:57 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:57 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:57 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:57 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:57 Pleiadi kernel: ======================= May 7 09:44:57 Pleiadi kernel: Mem-info: May 7 09:44:57 Pleiadi kernel: DMA per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:57 Pleiadi kernel: Normal per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 19 May 7 09:44:57 Pleiadi kernel: Active:28761 inactive:6843 dirty:46 writeback:0 unstable:0 May 7 09:44:57 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:57 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:57 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109116kB inactive:22384kB present:146304kB pages_scanned:43 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:57 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*10240/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] shrink_page_list+0x34c/0x430 May 7 09:44:57 Pleiadi kernel: [] __dequeue_entity+0x5a/0xb0 May 7 09:44:57 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:57 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:57 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:57 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:57 Pleiadi kernel: [] schedule_timeout+0x4f/0x90 May 7 09:44:57 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:57 Pleiadi kernel: [] shrink_slab+0x14d/0x1b0 May 7 09:44:57 Pleiadi kernel: [] balance_pgdat+0x211/0x360 May 7 09:44:57 Pleiadi kernel: [] dequeue_task+0x15/0x30 May 7 09:44:57 Pleiadi kernel: [] isolate_pages_global+0x0/0x80 May 7 09:44:57 Pleiadi kernel: [] finish_wait+0x3/0x50 May 7 09:44:57 Pleiadi kernel: [] kswapd+0x89/0xc0 May 7 09:44:57 Pleiadi kernel: [] autoremove_wake_function+0x0/0x50 May 7 09:44:57 Pleiadi kernel: [] autoremove_wake_function+0x0/0x50 May 7 09:44:57 Pleiadi kernel: [] kswapd+0x0/0xc0 May 7 09:44:57 Pleiadi kernel: [] kthread+0x58/0xa0 May 7 09:44:57 Pleiadi kernel: [] kthread+0x0/0xa0 May 7 09:44:57 Pleiadi kernel: [] kernel_thread_helper+0x7/0x14 May 7 09:44:57 Pleiadi kernel: ======================= May 7 09:44:57 Pleiadi kernel: Mem-info: May 7 09:44:57 Pleiadi kernel: DMA per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:57 Pleiadi kernel: Normal per-cpu: May 7 09:44:57 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 15 May 7 09:44:57 Pleiadi kernel: Active:28761 inactive:6844 dirty:46 writeback:0 unstable:0 May 7 09:44:57 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:57 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:57 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109116kB inactive:22388kB present:146304kB pages_scanned:43 all_unreclaimable? no May 7 09:44:57 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:57 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:57 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:57 Pleiadi kernel: 7029 total pagecache pages May 7 09:44:57 Pleiadi kernel: Swap cache: add 3187138, delete 3181047, find 266145/761336 May 7 09:44:57 Pleiadi kernel: Free swap = 109020kB May 7 09:44:57 Pleiadi kernel: Total swap = 151160kB May 7 09:44:57 Pleiadi kernel: Free swap: 109020kB May 7 09:44:57 Pleiadi kernel: 40960 pages of RAM May 7 09:44:57 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:57 Pleiadi kernel: 1202 reserved pages May 7 09:44:57 Pleiadi kernel: 3468 pages shared May 7 09:44:57 Pleiadi kernel: 6091 pages swap cached May 7 09:44:57 Pleiadi kernel: 46 pages dirty May 7 09:44:57 Pleiadi kernel: 0 pages writeback May 7 09:44:57 Pleiadi kernel: 384 pages mapped May 7 09:44:57 Pleiadi kernel: 2275 pages slab May 7 09:44:57 Pleiadi kernel: 300 pages pagetables May 7 09:44:57 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:57 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:57 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:57 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:57 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:57 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:57 Pleiadi kernel: [] ip_forward_finish+0x19/0x30 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:57 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:57 Pleiadi kernel: [] ip_rcv+0x182/0x260 May 7 09:44:57 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:57 Pleiadi kernel: [] netif_receive_skb+0x20c/0x290 May 7 09:44:57 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:57 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:58 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:58 Pleiadi kernel: ======================= May 7 09:44:58 Pleiadi kernel: Mem-info: May 7 09:44:58 Pleiadi kernel: DMA per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:58 Pleiadi kernel: Normal per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 22 May 7 09:44:58 Pleiadi kernel: Active:28813 inactive:6785 dirty:46 writeback:0 unstable:0 May 7 09:44:58 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:58 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:58 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109324kB inactive:22152kB present:146304kB pages_scanned:345 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:58 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:58 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:58 Pleiadi kernel: 7021 total pagecache pages May 7 09:44:58 Pleiadi kernel: Swap cache: add 3187147, delete 3181064, find 266145/761338 May 7 09:44:58 Pleiadi kernel: Free swap = 109020kB May 7 09:44:58 Pleiadi kernel: Total swap = 151160kB May 7 09:44:58 Pleiadi kernel: Free swap: 109020kB May 7 09:44:58 Pleiadi kernel: 40960 pages of RAM May 7 09:44:58 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:58 Pleiadi kernel: 1202 reserved pages May 7 09:44:58 Pleiadi kernel: 3468 pages shared May 7 09:44:58 Pleiadi kernel: 6083 pages swap cached May 7 09:44:58 Pleiadi kernel: 46 pages dirty May 7 09:44:58 Pleiadi kernel: 0 pages writeback May 7 09:44:58 Pleiadi kernel: 384 pages mapped May 7 09:44:58 Pleiadi kernel: 2275 pages slab May 7 09:44:58 Pleiadi kernel: 300 pages pagetables May 7 09:44:58 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:58 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:58 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:58 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:58 Pleiadi kernel: [] xfrm_lookup+0x1b/0x70 May 7 09:44:58 Pleiadi kernel: [] __kmalloc+0xf0/0x100 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] ip_forward+0x286/0x350 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0xbf/0x2e0 May 7 09:44:58 Pleiadi kernel: [] nf_hook_slow+0x66/0x100 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] ip_rcv+0x182/0x260 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] netif_receive_skb+0x20c/0x290 May 7 09:44:58 Pleiadi kernel: [] process_backlog+0x67/0xc0 May 7 09:44:58 Pleiadi kernel: [] net_rx_action+0x63/0x130 May 7 09:44:58 Pleiadi kernel: [] __do_softirq+0x40/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_softirq+0x26/0x30 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x41/0x70 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:58 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:58 Pleiadi kernel: ======================= May 7 09:44:58 Pleiadi kernel: Mem-info: May 7 09:44:58 Pleiadi kernel: DMA per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:58 Pleiadi kernel: Normal per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 21 May 7 09:44:58 Pleiadi kernel: Active:28813 inactive:6785 dirty:46 writeback:0 unstable:0 May 7 09:44:58 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:58 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:58 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109324kB inactive:22152kB present:146304kB pages_scanned:345 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:58 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:58 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:58 Pleiadi kernel: 7021 total pagecache pages May 7 09:44:58 Pleiadi kernel: Swap cache: add 3187147, delete 3181064, find 266145/761338 May 7 09:44:58 Pleiadi kernel: Free swap = 109020kB May 7 09:44:58 Pleiadi kernel: Total swap = 151160kB May 7 09:44:58 Pleiadi kernel: Free swap: 109020kB May 7 09:44:58 Pleiadi kernel: 40960 pages of RAM May 7 09:44:58 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:58 Pleiadi kernel: 1202 reserved pages May 7 09:44:58 Pleiadi kernel: 3468 pages shared May 7 09:44:58 Pleiadi kernel: 6083 pages swap cached May 7 09:44:58 Pleiadi kernel: 46 pages dirty May 7 09:44:58 Pleiadi kernel: 0 pages writeback May 7 09:44:58 Pleiadi kernel: 384 pages mapped May 7 09:44:58 Pleiadi kernel: 2275 pages slab May 7 09:44:58 Pleiadi kernel: 300 pages pagetables May 7 09:44:58 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:58 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:58 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] xfrm_spd_getinfo+0xb/0x50 May 7 09:44:58 Pleiadi kernel: [] __kmalloc+0x5c/0x100 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] ip_forward+0x286/0x350 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0xbf/0x2e0 May 7 09:44:58 Pleiadi kernel: [] nf_hook_slow+0x66/0x100 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] ip_rcv+0x182/0x260 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] netif_receive_skb+0x20c/0x290 May 7 09:44:58 Pleiadi kernel: [] process_backlog+0x67/0xc0 May 7 09:44:58 Pleiadi kernel: [] net_rx_action+0x63/0x130 May 7 09:44:58 Pleiadi kernel: [] __do_softirq+0x40/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_softirq+0x26/0x30 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x41/0x70 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:58 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:58 Pleiadi kernel: ======================= May 7 09:44:58 Pleiadi kernel: Mem-info: May 7 09:44:58 Pleiadi kernel: DMA per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:58 Pleiadi kernel: Normal per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 20 May 7 09:44:58 Pleiadi kernel: Active:28813 inactive:6785 dirty:46 writeback:0 unstable:0 May 7 09:44:58 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:58 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:58 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109324kB inactive:22152kB present:146304kB pages_scanned:345 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:58 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:58 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:58 Pleiadi kernel: 7021 total pagecache pages May 7 09:44:58 Pleiadi kernel: Swap cache: add 3187147, delete 3181064, find 266145/761338 May 7 09:44:58 Pleiadi kernel: Free swap = 109020kB May 7 09:44:58 Pleiadi kernel: Total swap = 151160kB May 7 09:44:58 Pleiadi kernel: Free swap: 109020kB May 7 09:44:58 Pleiadi kernel: 40960 pages of RAM May 7 09:44:58 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:58 Pleiadi kernel: 1202 reserved pages May 7 09:44:58 Pleiadi kernel: 3468 pages shared May 7 09:44:58 Pleiadi kernel: 6083 pages swap cached May 7 09:44:58 Pleiadi kernel: 46 pages dirty May 7 09:44:58 Pleiadi kernel: 0 pages writeback May 7 09:44:58 Pleiadi kernel: 384 pages mapped May 7 09:44:58 Pleiadi kernel: 2275 pages slab May 7 09:44:58 Pleiadi kernel: 300 pages pagetables May 7 09:44:58 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:58 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:58 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __update_rq_clock+0x23/0x120 May 7 09:44:58 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:58 Pleiadi kernel: [] profile_tick+0x4d/0x70 May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] __kmalloc_track_caller+0x5a/0x100 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] xfrm_spd_getinfo+0xb/0x50 May 7 09:44:58 Pleiadi kernel: [] __kmalloc+0x5c/0x100 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] ip_forward+0x286/0x350 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0xbf/0x2e0 May 7 09:44:58 Pleiadi kernel: [] nf_hook_slow+0x66/0x100 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] ip_rcv+0x182/0x260 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] netif_receive_skb+0x20c/0x290 May 7 09:44:58 Pleiadi kernel: [] process_backlog+0x67/0xc0 May 7 09:44:58 Pleiadi kernel: [] net_rx_action+0x63/0x130 May 7 09:44:58 Pleiadi kernel: [] __do_softirq+0x40/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_softirq+0x26/0x30 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x41/0x70 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:58 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:58 Pleiadi kernel: ======================= May 7 09:44:58 Pleiadi kernel: Mem-info: May 7 09:44:58 Pleiadi kernel: DMA per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:58 Pleiadi kernel: Normal per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 19 May 7 09:44:58 Pleiadi kernel: Active:28813 inactive:6785 dirty:46 writeback:0 unstable:0 May 7 09:44:58 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:58 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:58 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109324kB inactive:22152kB present:146304kB pages_scanned:345 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:58 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:58 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:58 Pleiadi kernel: 7021 total pagecache pages May 7 09:44:58 Pleiadi kernel: Swap cache: add 3187147, delete 3181064, find 266145/761338 May 7 09:44:58 Pleiadi kernel: Free swap = 109020kB May 7 09:44:58 Pleiadi kernel: Total swap = 151160kB May 7 09:44:58 Pleiadi kernel: Free swap: 109020kB May 7 09:44:58 Pleiadi kernel: 40960 pages of RAM May 7 09:44:58 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:58 Pleiadi kernel: 1202 reserved pages May 7 09:44:58 Pleiadi kernel: 3468 pages shared May 7 09:44:58 Pleiadi kernel: 6083 pages swap cached May 7 09:44:58 Pleiadi kernel: 46 pages dirty May 7 09:44:58 Pleiadi kernel: 0 pages writeback May 7 09:44:58 Pleiadi kernel: 384 pages mapped May 7 09:44:58 Pleiadi kernel: 2275 pages slab May 7 09:44:58 Pleiadi kernel: 300 pages pagetables May 7 09:44:58 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:44:58 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:44:58 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:44:58 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:44:58 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:44:58 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:44:58 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] xfrm_spd_getinfo+0xb/0x50 May 7 09:44:58 Pleiadi kernel: [] __kmalloc+0x5c/0x100 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] pskb_expand_head+0x50/0x170 May 7 09:44:58 Pleiadi kernel: [] ip_forward+0x286/0x350 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0xbf/0x2e0 May 7 09:44:58 Pleiadi kernel: [] nf_hook_slow+0x66/0x100 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] ip_rcv+0x182/0x260 May 7 09:44:58 Pleiadi kernel: [] ip_rcv_finish+0x0/0x2e0 May 7 09:44:58 Pleiadi kernel: [] netif_receive_skb+0x20c/0x290 May 7 09:44:58 Pleiadi kernel: [] process_backlog+0x67/0xc0 May 7 09:44:58 Pleiadi kernel: [] net_rx_action+0x63/0x130 May 7 09:44:58 Pleiadi kernel: [] __do_softirq+0x40/0xa0 May 7 09:44:58 Pleiadi kernel: [] do_softirq+0x26/0x30 May 7 09:44:58 Pleiadi kernel: [] do_IRQ+0x41/0x70 May 7 09:44:58 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:44:58 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:44:58 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:44:58 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:44:58 Pleiadi kernel: ======================= May 7 09:44:58 Pleiadi kernel: Mem-info: May 7 09:44:58 Pleiadi kernel: DMA per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:44:58 Pleiadi kernel: Normal per-cpu: May 7 09:44:58 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 18 May 7 09:44:58 Pleiadi kernel: Active:28813 inactive:6785 dirty:46 writeback:0 unstable:0 May 7 09:44:58 Pleiadi kernel: free:734 slab:2275 mapped:384 pagetables:300 bounce:0 May 7 09:44:58 Pleiadi kernel: DMA free:780kB min:160kB low:200kB high:240kB active:5928kB inactive:4988kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:44:58 Pleiadi kernel: Normal free:2156kB min:1448kB low:1808kB high:2172kB active:109324kB inactive:22152kB present:146304kB pages_scanned:345 all_unreclaimable? no May 7 09:44:58 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:44:58 Pleiadi kernel: DMA: 165*4kB 9*8kB 1*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 780kB May 7 09:44:58 Pleiadi kernel: Normal: 441*4kB 17*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2156kB May 7 09:44:58 Pleiadi kernel: 7021 total pagecache pages May 7 09:44:58 Pleiadi kernel: Swap cache: add 3187147, delete 3181064, find 266145/761338 May 7 09:44:58 Pleiadi kernel: Free swap = 109020kB May 7 09:44:58 Pleiadi kernel: Total swap = 151160kB May 7 09:44:58 Pleiadi kernel: Free swap: 109020kB May 7 09:44:58 Pleiadi kernel: 40960 pages of RAM May 7 09:44:58 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:44:58 Pleiadi kernel: 1202 reserved pages May 7 09:44:58 Pleiadi kernel: 3468 pages shared May 7 09:44:58 Pleiadi kernel: 6083 pages swap cached May 7 09:44:58 Pleiadi kernel: 46 pages dirty May 7 09:44:58 Pleiadi kernel: 0 pages writeback May 7 09:44:58 Pleiadi kernel: 384 pages mapped May 7 09:44:58 Pleiadi kernel: 2275 pages slab May 7 09:44:58 Pleiadi kernel: 300 pages pagetables May 7 09:48:55 Pleiadi kernel: 1daa>] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:01 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:01 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:01 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:01 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:01 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:01 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:01 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:01 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:01 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:01 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:01 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:01 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 20 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:730 slab:2351 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1984kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 408*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1984kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2351 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: unlinkd: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 3333, comm: unlinkd Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:02 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:02 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:02 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:02 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:02 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:02 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:02 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:02 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 19 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:730 slab:2351 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1984kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 408*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1984kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2351 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: unlinkd: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 3333, comm: unlinkd Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:02 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:02 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:02 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:02 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:02 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:02 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:02 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:02 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 18 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:730 slab:2351 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1984kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 408*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1984kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2351 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: unlinkd: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 3333, comm: unlinkd Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:02 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:02 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:02 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:02 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:02 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:02 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:02 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:02 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 23 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:723 slab:2352 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1956kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 401*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1956kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2352 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: unlinkd: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 3333, comm: unlinkd Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:02 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:02 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:02 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:02 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:02 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:02 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:02 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:02 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 22 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:723 slab:2352 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1956kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 401*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1956kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2352 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: unlinkd: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 3333, comm: unlinkd Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_log_buf+0x5a/0x90 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] xlog_write+0x1af/0x4d0 May 7 09:49:02 Pleiadi kernel: [] xfs_log_write+0x3d/0x70 May 7 09:49:02 Pleiadi kernel: [] _xfs_trans_commit+0xe8/0x340 May 7 09:49:02 Pleiadi kernel: [] xfs_bmap_finish+0x11b/0x170 May 7 09:49:02 Pleiadi kernel: [] kmem_zone_zalloc+0x26/0x50 May 7 09:49:02 Pleiadi kernel: [] xfs_itruncate_finish+0x180/0x420 May 7 09:49:02 Pleiadi kernel: [] xfs_trans_ijoin+0x28/0x70 May 7 09:49:02 Pleiadi kernel: [] xfs_inactive+0x438/0x4b0 May 7 09:49:02 Pleiadi kernel: [] inotify_inode_is_dead+0x18/0x80 May 7 09:49:02 Pleiadi kernel: [] xfs_fs_clear_inode+0x36/0x80 May 7 09:49:02 Pleiadi kernel: [] invalidate_inode_buffers+0xa/0x80 May 7 09:49:02 Pleiadi kernel: [] clear_inode+0xa4/0xf0 May 7 09:49:02 Pleiadi kernel: [] generic_delete_inode+0xa2/0xb0 May 7 09:49:02 Pleiadi kernel: [] iput+0x53/0x60 May 7 09:49:02 Pleiadi kernel: [] do_unlinkat+0xc6/0x120 May 7 09:49:02 Pleiadi kernel: [] vfs_read+0xe0/0x140 May 7 09:49:02 Pleiadi kernel: [] sys_read+0x41/0x70 May 7 09:49:02 Pleiadi kernel: [] syscall_call+0x7/0xb May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 21 May 7 09:49:02 Pleiadi kernel: Active:34425 inactive:1103 dirty:40 writeback:0 unstable:0 May 7 09:49:02 Pleiadi kernel: free:723 slab:2352 mapped:323 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:936kB min:160kB low:200kB high:240kB active:10072kB inactive:380kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:1956kB min:1448kB low:1808kB high:2172kB active:127628kB inactive:4032kB present:146304kB pages_scanned:1897 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 110*4kB 34*8kB 12*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 936kB May 7 09:49:02 Pleiadi kernel: Normal: 401*4kB 12*8kB 10*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1956kB May 7 09:49:02 Pleiadi kernel: 12198 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3219731, delete 3208124, find 277400/779926 May 7 09:49:02 Pleiadi kernel: Free swap = 82100kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 82100kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4626 pages shared May 7 09:49:02 Pleiadi kernel: 11607 pages swap cached May 7 09:49:02 Pleiadi kernel: 40 pages dirty May 7 09:49:02 Pleiadi kernel: 0 pages writeback May 7 09:49:02 Pleiadi kernel: 323 pages mapped May 7 09:49:02 Pleiadi kernel: 2352 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables May 7 09:49:02 Pleiadi kernel: printk: 446 messages suppressed. May 7 09:49:02 Pleiadi kernel: swapper: page allocation failure. order:3, mode:0x4020 May 7 09:49:02 Pleiadi kernel: Pid: 0, comm: swapper Not tainted 2.6.25 #1 May 7 09:49:02 Pleiadi kernel: [] __alloc_pages+0x30e/0x360 May 7 09:49:02 Pleiadi kernel: [] ide_build_sglist+0x6f/0xa0 May 7 09:49:02 Pleiadi kernel: [] allocate_slab+0x35/0x90 May 7 09:49:02 Pleiadi kernel: [] new_slab+0x20/0x120 May 7 09:49:02 Pleiadi kernel: [] dma_timer_expiry+0x0/0x80 May 7 09:49:02 Pleiadi kernel: [] __slab_alloc+0xac/0x160 May 7 09:49:02 Pleiadi kernel: [] ide_dma_start+0x21/0x40 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __kmalloc_track_caller+0xee/0x100 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] __alloc_skb+0x54/0x110 May 7 09:49:02 Pleiadi kernel: [] boomerang_rx+0x210/0x430 [3c59x] May 7 09:49:02 Pleiadi kernel: [] enqueue_entity+0x2e/0x60 May 7 09:49:02 Pleiadi kernel: [] enqueue_task_fair+0x1b/0x20 May 7 09:49:02 Pleiadi kernel: [] enqueue_task+0x15/0x30 May 7 09:49:02 Pleiadi kernel: [] boomerang_interrupt+0x11b/0x3c0 [3c59x] May 7 09:49:02 Pleiadi kernel: [] process_timeout+0x0/0x10 May 7 09:49:02 Pleiadi kernel: [] run_timer_softirq+0x93/0x150 May 7 09:49:02 Pleiadi kernel: [] handle_IRQ_event+0x25/0x60 May 7 09:49:02 Pleiadi kernel: [] handle_level_irq+0x47/0xa0 May 7 09:49:02 Pleiadi kernel: [] do_IRQ+0x3c/0x70 May 7 09:49:02 Pleiadi kernel: [] common_interrupt+0x23/0x28 May 7 09:49:02 Pleiadi kernel: [] signal_wake_up+0x10/0x20 May 7 09:49:02 Pleiadi kernel: [] default_idle+0x39/0x70 May 7 09:49:02 Pleiadi kernel: [] default_idle+0x0/0x70 May 7 09:49:02 Pleiadi kernel: [] cpu_idle+0x26/0x60 May 7 09:49:02 Pleiadi kernel: ======================= May 7 09:49:02 Pleiadi kernel: Mem-info: May 7 09:49:02 Pleiadi kernel: DMA per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 0, btch: 1 usd: 0 May 7 09:49:02 Pleiadi kernel: Normal per-cpu: May 7 09:49:02 Pleiadi kernel: CPU 0: hi: 42, btch: 7 usd: 37 May 7 09:49:02 Pleiadi kernel: Active:30366 inactive:3481 dirty:7 writeback:340 unstable:0 May 7 09:49:02 Pleiadi kernel: free:2290 slab:2369 mapped:300 pagetables:301 bounce:0 May 7 09:49:02 Pleiadi kernel: DMA free:2024kB min:160kB low:200kB high:240kB active:8400kB inactive:932kB present:16256kB pages_scanned:0 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 142 142 May 7 09:49:02 Pleiadi kernel: Normal free:7136kB min:1448kB low:1808kB high:2172kB active:113064kB inactive:12992kB present:146304kB pages_scanned:176 all_unreclaimable? no May 7 09:49:02 Pleiadi kernel: lowmem_reserve[]: 0 0 0 May 7 09:49:02 Pleiadi kernel: DMA: 244*4kB 95*8kB 16*16kB 1*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2024kB May 7 09:49:02 Pleiadi kernel: Normal: 1240*4kB 190*8kB 35*16kB 1*32kB 1*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 7136kB May 7 09:49:02 Pleiadi kernel: 10866 total pagecache pages May 7 09:49:02 Pleiadi kernel: Swap cache: add 3220104, delete 3209653, find 277405/779939 May 7 09:49:02 Pleiadi kernel: Free swap = 80704kB May 7 09:49:02 Pleiadi kernel: Total swap = 151160kB May 7 09:49:02 Pleiadi kernel: Free swap: 80704kB May 7 09:49:02 Pleiadi kernel: 40960 pages of RAM May 7 09:49:02 Pleiadi kernel: 0 pages of HIGHMEM May 7 09:49:02 Pleiadi kernel: 1202 reserved pages May 7 09:49:02 Pleiadi kernel: 4542 pages shared May 7 09:49:02 Pleiadi kernel: 10451 pages swap cached May 7 09:49:02 Pleiadi kernel: 7 pages dirty May 7 09:49:02 Pleiadi kernel: 340 pages writeback May 7 09:49:02 Pleiadi kernel: 300 pages mapped May 7 09:49:02 Pleiadi kernel: 2369 pages slab May 7 09:49:02 Pleiadi kernel: 301 pages pagetables From owner-xfs@oss.sgi.com Wed May 7 08:36:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 08:36:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,WHOIS_DMNBYPROXY autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m47Fa5vD004288 for ; Wed, 7 May 2008 08:36:06 -0700 X-ASG-Debug-ID: 1210174610-598200c30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from fed1rmmtao107.cox.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7D2A2B2872A for ; Wed, 7 May 2008 08:36:50 -0700 (PDT) Received: from fed1rmmtao107.cox.net (fed1rmmtao107.cox.net [68.230.241.39]) by cuda.sgi.com with ESMTP id vDPEMCpp0Xg3Iz7g for ; Wed, 07 May 2008 08:36:50 -0700 (PDT) Received: from fed1rmimpo02.cox.net ([70.169.32.72]) by fed1rmmtao107.cox.net (InterMail vM.7.08.02.01 201-2186-121-102-20070209) with ESMTP id <20080507153649.OZTX10668.fed1rmmtao107.cox.net@fed1rmimpo02.cox.net> for ; Wed, 7 May 2008 11:36:49 -0400 Received: from shin ([72.199.86.230]) by fed1rmimpo02.cox.net with bizsmtp id Nfcp1Z00C4yAxSY04fcpU2; Wed, 07 May 2008 11:36:49 -0400 From: "Bond Masuda" To: References: <007001c898f5$cae2f4a0$60a8dde0$@masuda@jlbond.com> <20080407220106.GF108924158@sgi.com> In-Reply-To: <20080407220106.GF108924158@sgi.com> X-ASG-Orig-Subj: Is this XFS problem or something else? : xfs_trans_read_buf error 5 buf count 4096 Subject: Is this XFS problem or something else? : xfs_trans_read_buf error 5 buf count 4096 Date: Wed, 7 May 2008 08:36:50 -0700 Message-ID: <000001c8b058$2ae68460$80b38d20$@net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AciY+ua2wdYV1uP4RtifohcPgNap0AXWJtFA Content-Language: en-us x-cr-hashedpuzzle: A2i0 ByAt CGaA Ecij FT5r Fzgb GY/E GgKT HArl ICEI IGdT IYC4 ItkC JvfW Kp4m MMTU;1;eABmAHMAQABvAHMAcwAuAHMAZwBpAC4AYwBvAG0A;Sosha1_v1;7;{97C578EC-9E32-4190-B12D-0FAEAE122E8F};YgBtADAAMAA3AEAAYwBvAHgALgBuAGUAdAA=;Wed, 07 May 2008 15:36:47 GMT;SQBzACAAdABoAGkAcwAgAFgARgBTACAAcAByAG8AYgBsAGUAbQAgAG8AcgAgAHMAbwBtAGUAdABoAGkAbgBnACAAZQBsAHMAZQA/ACAAOgAgAHgAZgBzAF8AdAByAGEAbgBzAF8AcgBlAGEAZABfAGIAdQBmACAAZQByAHIAbwByACAANQAgAGIAdQBmACAAYwBvAHUAbgB0ACAANAAwADkANgA= x-cr-puzzleid: {97C578EC-9E32-4190-B12D-0FAEAE122E8F} X-Barracuda-Connect: fed1rmmtao107.cox.net[68.230.241.39] X-Barracuda-Start-Time: 1210174610 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1071 1.0000 -1.3503 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.35 X-Barracuda-Spam-Status: No, SCORE=-1.35 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.1, rules version 3.1.49785 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15813 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bm007@cox.net Precedence: bulk X-list: xfs Not sure if this is XFS related or not, but this seems to be reoccurring. The hardware is: Dell Inspiron 530, Q6600 quad core, 4GB Ram, 2x750GB SATA HDD I have Fedora 8/64bit installed, using XFS for "/", ext3 for "/boot". The two identical 750GB drives are striped to create a 1.4TB "md1" device, which is mounted as "/". Kernel is from Fedora8, 2.6.24.4-64.fc8. During the install, everything seemed to work fine. I was able to use the system without any problems for about 2 days. Then I reboot, and the md1 device running XFS shows the following error messages: I/O error in filesystem ("md1") meta-data dev md1 block 0x15d048574120008 ("xfs_trans_read_buf") error 5 buf count 4096 attempt to access beyond end of device md1: rw=0, want=98239738096517136, limit=2927780864 The above message repeats several times, but the system manages to boot to runlevel 3. I can login, but almost any command triggers that message which has flooded the logs. here is xfs_info on "/": meta-data=/dev/root isize=256 agcount=32, agsize=11436608 blks = sectsz=512 attr=1 data = bsize=4096 blocks=365971456, imaxpct=25 = sunit=64 swidth=128 blks, unwritten=1 naming =version2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=524288 blocks=0, rtextents=0 At first, I thought perhaps something wrong with the disks so I had them replaced. Reinstalled Fedora8 as before, then again, 2 days later (I don't know if the 2 day time period is coincidental or not), I reboot, and the exact same problem occurred. Since I've gone through 4 brand new 750GB HDD now, (Seagate diagnostics show all the disks to be fine in both occurances, but I replaced them anyway) I'm feeling that this is not a hardware issue, but software related. A search on google seems to show others with possibly similar issues: http://ubuntuforums.org/archive/index.php/t-568309.html Is that related? Other google searches show a pattern of this problem only with >1TB XFS partitions, but that's just what I found googling. I'm considering re-installing again, but using ext3 for "/" to see if the problem reoccurs, in hopes of "isolating" the issue. Not sure if it is related to XFS, the software stripe md1, or something else (but I don't think it's HDD related now). Thanks for any info or assistance. Though the system isn't really usable, (many commands fail, but does boot to runlevel 3 and permits me to login) I'll leave it as is for today so let me know if there's other info I can try to gather that would be useful. Any help would be appreciated. -Bond From owner-xfs@oss.sgi.com Wed May 7 08:50:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 08:50:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,WHOIS_DMNBYPROXY autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m47FoRFN005656 for ; Wed, 7 May 2008 08:50:28 -0700 X-ASG-Debug-ID: 1210175473-597a00fa0000-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 AA031B28CC1 for ; Wed, 7 May 2008 08:51:13 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id 3yf4FKBAWhtT4Kz8 for ; Wed, 07 May 2008 08:51:13 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation 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 m47FpAMX022020; Wed, 7 May 2008 11:51:10 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m47FpAvs011880; Wed, 7 May 2008 11:51:10 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m47Fp9hx001540; Wed, 7 May 2008 11:51:10 -0400 Message-ID: <4821CFED.4030804@sandeen.net> Date: Wed, 07 May 2008 10:51:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.12 (X11/20080226) MIME-Version: 1.0 To: Bond Masuda CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Is this XFS problem or something else? : xfs_trans_read_buf error 5 buf count 4096 Subject: Re: Is this XFS problem or something else? : xfs_trans_read_buf error 5 buf count 4096 References: <007001c898f5$cae2f4a0$60a8dde0$@masuda@jlbond.com> <20080407220106.GF108924158@sgi.com> <000001c8b058$2ae68460$80b38d20$@net> In-Reply-To: <000001c8b058$2ae68460$80b38d20$@net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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: 1210175473 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15814 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Bond Masuda wrote: > Not sure if this is XFS related or not, but this seems to be reoccurring. You are probably hitting: https://bugzilla.redhat.com/show_bug.cgi?id=437968 Bugzilla Bug 437968: Corrupt xfs root filesystem with kernel kernel-2.6.24.3-xx Fix is in 2.6.25-rc9 upstream and kernel-2.6.24.5-85.fc8 has been submitted as an update for Fedora 8 and is now in stable. If you need to keep the system as-is I'd upgrade the kernel immediately, then try xfs_repair. A fresh install might be best; do an install, upgrade to that kernel, reboot into it, *then* yum update the rest. -Eric > The hardware is: > > Dell Inspiron 530, Q6600 quad core, 4GB Ram, 2x750GB SATA HDD > > I have Fedora 8/64bit installed, using XFS for "/", ext3 for "/boot". The > two identical 750GB drives are striped to create a 1.4TB "md1" device, which > is mounted as "/". Kernel is from Fedora8, 2.6.24.4-64.fc8. > > During the install, everything seemed to work fine. I was able to use the > system without any problems for about 2 days. Then I reboot, and the md1 > device running XFS shows the following error messages: > > I/O error in filesystem ("md1") meta-data dev md1 block 0x15d048574120008 > ("xfs_trans_read_buf") error 5 buf count 4096 > attempt to access beyond end of device > md1: rw=0, want=98239738096517136, limit=2927780864 > > The above message repeats several times, but the system manages to boot to > runlevel 3. I can login, but almost any command triggers that message which > has flooded the logs. here is xfs_info on "/": > > meta-data=/dev/root isize=256 agcount=32, > agsize=11436608 blks > = sectsz=512 attr=1 > data = bsize=4096 > blocks=365971456, imaxpct=25 > = sunit=64 swidth=128 > blks, unwritten=1 > naming =version2 bsize=4096 > log =internal bsize=4096 blocks=32768, > version=1 > = sectsz=512 sunit=0 > blks, lazy-count=0 > realtime =none extsz=524288 blocks=0, rtextents=0 > > At first, I thought perhaps something wrong with the disks so I had them > replaced. Reinstalled Fedora8 as before, then again, 2 days later (I don't > know if the 2 day time period is coincidental or not), I reboot, and the > exact same problem occurred. Since I've gone through 4 brand new 750GB HDD > now, (Seagate diagnostics show all the disks to be fine in both occurances, > but I replaced them anyway) I'm feeling that this is not a hardware issue, > but software related. > > A search on google seems to show others with possibly similar issues: > > http://ubuntuforums.org/archive/index.php/t-568309.html > > Is that related? Other google searches show a pattern of this problem only > with >1TB XFS partitions, but that's just what I found googling. > > I'm considering re-installing again, but using ext3 for "/" to see if the > problem reoccurs, in hopes of "isolating" the issue. Not sure if it is > related to XFS, the software stripe md1, or something else (but I don't > think it's HDD related now). > > Thanks for any info or assistance. Though the system isn't really usable, > (many commands fail, but does boot to runlevel 3 and permits me to login) > I'll leave it as is for today so let me know if there's other info I can try > to gather that would be useful. > > Any help would be appreciated. > -Bond > > > From owner-xfs@oss.sgi.com Wed May 7 17:01:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 17:01:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4801M2g013749 for ; Wed, 7 May 2008 17:01:24 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA02129; Thu, 8 May 2008 10:02:05 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 2E92158C4C15; Thu, 8 May 2008 10:02:05 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980705 - Correctly detect if dmapi is present or not in tests 175-177 Message-Id: <20080508000205.2E92158C4C15@chook.melbourne.sgi.com> Date: Thu, 8 May 2008 10:02:05 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15816 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Correctly detect if dmapi is present or not in tests 175-177 Date: Thu May 8 10:01:42 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: tes@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31032a xfstests/177 - 1.3 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/177.diff?r1=text&tr1=1.3&r2=text&tr2=1.2&f=h xfstests/175 - 1.2 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/175.diff?r1=text&tr1=1.2&r2=text&tr2=1.1&f=h xfstests/176 - 1.2 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/176.diff?r1=text&tr1=1.2&r2=text&tr2=1.1&f=h - Correctly detect if dmapi is present. From owner-xfs@oss.sgi.com Wed May 7 16:58:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 16:58:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m47NwKKT013457 for ; Wed, 7 May 2008 16:58:24 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA01948; Thu, 8 May 2008 09:59:01 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 8680E58C4C15; Thu, 8 May 2008 09:59:01 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 979083 - xfsqa 166 - Use standard awk comment format. Message-Id: <20080507235901.8680E58C4C15@chook.melbourne.sgi.com> Date: Thu, 8 May 2008 09:59:01 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15815 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Use standard awk comment format. Date: Thu May 8 09:58:42 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31031a xfstests/166 - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/166.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - Use standard awk comment format. From owner-xfs@oss.sgi.com Wed May 7 18:13:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 07 May 2008 18:13:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m481D0s0018823 for ; Wed, 7 May 2008 18:13:02 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA03848; Thu, 8 May 2008 11:13:42 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 2710A58C4C15; Thu, 8 May 2008 11:13:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981296 - Fix fsync() b0rkage. Message-Id: <20080508011342.2710A58C4C15@chook.melbourne.sgi.com> Date: Thu, 8 May 2008 11:13:42 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15817 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix fsync() b0rkage. xfs_fsync() fails to wait for data I/O completion before checking if the inode is dirty or clean to decide whether to log the inode or not. This misses inode size updates when the data flushed by the fsync() is extending the file. Hence, like fdatasync(), we need to wait for I/o completion first, then check the inode for cleanliness. Doing so makes the behaviour of xfs_fsync() identical for fsync and fdatasync and we *always* use synchronous semantics if the inode is dirty. Therefore also kill the differences and remove the unused flags from the xfs_fsync function and callers. Date: Thu May 8 11:13:29 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31033a fs/xfs/xfs_vnodeops.c - 1.758 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.758&r2=text&tr2=1.757&f=h - fix xfs_fsync() to make fsync wait for data I/O completion and inode size updates correctly. fs/xfs/linux-2.6/xfs_file.c - 1.165 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_file.c.diff?r1=text&tr1=1.165&r2=text&tr2=1.164&f=h - fsync and fdatasync are implemented identically now. fs/xfs/linux-2.6/xfs_vnode.h - 1.150 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_vnode.h.diff?r1=text&tr1=1.150&r2=text&tr2=1.149&f=h - remove xfs_fsync() flags are they are unused now. fs/xfs/dmapi/xfs_dm.c - 1.71 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.71&r2=text&tr2=1.70&f=h - clean up xfs_fsync() usage. fs/xfs/xfs_vnodeops.h - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h - remove unused flags from xfs_fsync(). From owner-xfs@oss.sgi.com Thu May 8 18:00:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:01:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_37 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4910kAW005802 for ; Thu, 8 May 2008 18:00:49 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA03744; Fri, 9 May 2008 11:01:31 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 2139D58C4C15; Fri, 9 May 2008 11:01:31 +1000 (EST) To: xfs@oss.sgi.com, xfs-bugs-internal@sgi.com Subject: TAKE 981362 - update of xfstests 018,081,082 for onlink/gen# changes Message-Id: <20080509010131.2139D58C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:01:31 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15818 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Filter out onlink (because of v2 inodes by default) and gen# (because of random generation). Date: Fri May 9 10:56:30 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31049a xfstests/common.log - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/common.log.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h xfstests/081.ugquota.trans_inode - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/081.ugquota.trans_inode.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h xfstests/018.trans_inode - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/018.trans_inode.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/082.trans_inode - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/082.trans_inode.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/082.op.irix - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/082.op.irix.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/018.op.linux - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/018.op.linux.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/018.op.irix - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/018.op.irix.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/082.op.linux - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/082.op.linux.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - Filter out onlink (because of v2 inodes by default) and gen# (because of random generation). Subject: TAKE update xfstests/dmapi....Makefile.in regenerate dmapi Makefile in using automake Date: Thu May 1 16:07:18 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31014a xfstests/dmapi/aclocal.m4 - 1.7 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/dmapi/aclocal.m4.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h - regenerate using aclocal xfstests/dmapi/src/suite1/cmd/Makefile.in - 1.9 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/dmapi/src/suite1/Makefile.in.diff?r1=text&tr1=1.9&r2=text&tr2=1.8&f=h - regenerate using automake automake doesn't have "default" target but uses "all" target instead Date: Mon May 5 14:28:09 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: tes,bnaujok The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31021a xfstests/Makefile - 1.17 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/Makefile.diff?r1=text&tr1=1.17&r2=text&tr2=1.16&f=h - automake doesn't have "default" target but uses "all" target instead From owner-xfs@oss.sgi.com Thu May 8 18:10:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:10:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491AOle006439 for ; Thu, 8 May 2008 18:10:29 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA03865; Fri, 9 May 2008 11:11:06 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 68F2B58C4C15; Fri, 9 May 2008 11:11:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - Remove unused arg from kmem_free() Message-Id: <20080509011106.68F2B58C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:11:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15819 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove unused arg from kmem_free() kmem_free() function takes (ptr, size) arguments but doesn't actually use second one. This patch removes size argument from all callsites. Signed-off-by: Denys Vlasenko Date: Fri May 9 11:10:35 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: vda.linux@googlemail.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31050a fs/xfs/xfs_log.c - 1.357 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.357&r2=text&tr2=1.356&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_extfree_item.c - 1.69 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_extfree_item.c.diff?r1=text&tr1=1.69&r2=text&tr2=1.68&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_buf_item.c - 1.166 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_buf_item.c.diff?r1=text&tr1=1.166&r2=text&tr2=1.165&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_trans_inode.c - 1.55 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans_inode.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.54&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_da_btree.c - 1.177 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.c.diff?r1=text&tr1=1.177&r2=text&tr2=1.176&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_dir2_block.c - 1.59 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_block.c.diff?r1=text&tr1=1.59&r2=text&tr2=1.58&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_rtalloc.c - 1.112 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_rtalloc.c.diff?r1=text&tr1=1.112&r2=text&tr2=1.111&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_itable.c - 1.165 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_itable.c.diff?r1=text&tr1=1.165&r2=text&tr2=1.164&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_inode_item.c - 1.136 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode_item.c.diff?r1=text&tr1=1.136&r2=text&tr2=1.135&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_log_recover.c - 1.344 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_recover.c.diff?r1=text&tr1=1.344&r2=text&tr2=1.343&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_trans_item.c - 1.47 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans_item.c.diff?r1=text&tr1=1.47&r2=text&tr2=1.46&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_vfsops.c - 1.564 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.564&r2=text&tr2=1.563&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_dfrag.c - 1.67 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dfrag.c.diff?r1=text&tr1=1.67&r2=text&tr2=1.66&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_dir2_sf.c - 1.51 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_sf.c.diff?r1=text&tr1=1.51&r2=text&tr2=1.50&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_mount.c - 1.431 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.431&r2=text&tr2=1.430&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_inode.c - 1.502 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.502&r2=text&tr2=1.501&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_dir2_leaf.c - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_leaf.c.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_attr_leaf.c - 1.111 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr_leaf.c.diff?r1=text&tr1=1.111&r2=text&tr2=1.110&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_trans.c - 1.185 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_trans.c.diff?r1=text&tr1=1.185&r2=text&tr2=1.184&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_error.c - 1.60 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_error.c.diff?r1=text&tr1=1.60&r2=text&tr2=1.59&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_bmap.c - 1.392 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_bmap.c.diff?r1=text&tr1=1.392&r2=text&tr2=1.391&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_dir2.c - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h - Remove unused arg from kmem_free() fs/xfs/support/ktrace.c - 1.31 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/support/ktrace.c.diff?r1=text&tr1=1.31&r2=text&tr2=1.30&f=h - Remove unused arg from kmem_free() fs/xfs/quota/xfs_qm_syscalls.c - 1.43 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm_syscalls.c.diff?r1=text&tr1=1.43&r2=text&tr2=1.42&f=h - Remove unused arg from kmem_free() fs/xfs/quota/xfs_dquot_item.c - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot_item.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h - Remove unused arg from kmem_free() fs/xfs/quota/xfs_qm.c - 1.69 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.69&r2=text&tr2=1.68&f=h - Remove unused arg from kmem_free() fs/xfs/linux-2.6/xfs_super.c - 1.416 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.416&r2=text&tr2=1.415&f=h - Remove unused arg from kmem_free() fs/xfs/linux-2.6/xfs_buf.c - 1.255 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.c.diff?r1=text&tr1=1.255&r2=text&tr2=1.254&f=h - Remove unused arg from kmem_free() fs/xfs/linux-2.6/kmem.h - 1.46 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/kmem.h.diff?r1=text&tr1=1.46&r2=text&tr2=1.45&f=h - Remove unused arg from kmem_free() fs/xfs/linux-2.6/kmem.c - 1.13 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/kmem.c.diff?r1=text&tr1=1.13&r2=text&tr2=1.12&f=h - Remove unused arg from kmem_free() fs/xfs/xfs_mru_cache.c - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mru_cache.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h - Remove unused arg from kmem_free() From owner-xfs@oss.sgi.com Thu May 8 18:14:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:14:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491E3gL007037 for ; Thu, 8 May 2008 18:14:06 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA03950; Fri, 9 May 2008 11:14:45 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id ABF3D58C4C15; Fri, 9 May 2008 11:14:45 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - Remove unused kmem_free() args from XFS DMAPI code. Message-Id: <20080509011445.ABF3D58C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:14:45 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15820 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove unused kmem_free() args from XFS DMAPI code. Date: Fri May 9 11:14:19 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31054a fs/xfs/dmapi/xfs_dm.c - 1.72 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.72&r2=text&tr2=1.71&f=h - remove unused kmem_free() arg. From owner-xfs@oss.sgi.com Thu May 8 18:16:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:16:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491G0p4007308 for ; Thu, 8 May 2008 18:16:03 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA04024; Fri, 9 May 2008 11:16:46 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 5424558C4C15; Fri, 9 May 2008 11:16:46 +1000 (EST) To: xfs@oss.sgi.com, xfs-bugs-internal@sgi.com Subject: TAKE 981361 - xfstests/016 Message-Id: <20080509011646.5424558C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:16:46 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15821 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Sample the log traffic to work out its data rate so that we have a better idea of predicting when it will get to the end of the log. This way we can handle a change in log traffic in the future. A test to keep an eye on log traffic is more of a performance test than should be done elsewhere. --Tim Date: Fri May 9 11:15:14 AEST 2008 Workarea: emu.melbourne.sgi.com:/home/tes/isms/xfs-cmds Inspected by: xaiki@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31053a xfstests/016 - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/016.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h xfstests/016.out - 1.2 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/016.out.diff?r1=text&tr1=1.2&r2=text&tr2=1.1&f=h - Sample the log traffic to work out its data rate so that we have a better idea of predicting when it will get to the end of the log. This way we can handle a change in log traffic in the future. From owner-xfs@oss.sgi.com Thu May 8 18:19:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:20:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491JpJG007951 for ; Thu, 8 May 2008 18:19:53 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA04270; Fri, 9 May 2008 11:20:26 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 1309558C4C15; Fri, 9 May 2008 11:20:26 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - Remove unused flags parameter from xfs_qm_dqpurge Message-Id: <20080509012026.1309558C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:20:26 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15822 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove unused flags parameter from xfs_qm_dqpurge() Signed-off-by: Denys Vlasenko Date: Fri May 9 11:19:40 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31056a fs/xfs/quota/xfs_dquot.h - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot.h.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h - remove unused flag parameter from xfs_qm_dqpurge. fs/xfs/quota/xfs_dquot.c - 1.34 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_dquot.c.diff?r1=text&tr1=1.34&r2=text&tr2=1.33&f=h - remove unused flag parameter from xfs_qm_dqpurge. fs/xfs/quota/xfs_qm.c - 1.70 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/quota/xfs_qm.c.diff?r1=text&tr1=1.70&r2=text&tr2=1.69&f=h - remove unused flag parameter from xfs_qm_dqpurge. From owner-xfs@oss.sgi.com Thu May 8 18:23:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:24:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491NsrH008521 for ; Thu, 8 May 2008 18:23:56 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA04423; Fri, 9 May 2008 11:24:36 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 918CA58C4C15; Fri, 9 May 2008 11:24:36 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - Remove unused wbc parameter from xfs_start_page_writeback() Message-Id: <20080509012436.918CA58C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:24:36 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15823 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Remove unused wbc parameter from xfs_start_page_writeback() Signed-off-by: Denys Vlasenko Date: Fri May 9 11:24:08 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: vda.linux@googlemail.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31057a fs/xfs/linux-2.6/xfs_aops.c - 1.162 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_aops.c.diff?r1=text&tr1=1.162&r2=text&tr2=1.161&f=h - Remove unused wbc parameter from xfs_start_page_writeback From owner-xfs@oss.sgi.com Thu May 8 18:32:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:33:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491WtVt009256 for ; Thu, 8 May 2008 18:32:58 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA04685; Fri, 9 May 2008 11:33:38 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 4264358C4C15; Fri, 9 May 2008 11:33:38 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981502 - Ensure that 2 GiB xfs logs work properly. Message-Id: <20080509013338.4264358C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:33:38 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15824 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Ensure that 2 GiB xfs logs work properly. We found this while experimenting with 2GiB xfs logs. The previous code never assumed that xfs logs would ever get so large. Signed-off-by: Michael Nishimoto Date: Fri May 9 11:33:19 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: miken@agami.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31058a fs/xfs/xfs_log.c - 1.358 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.358&r2=text&tr2=1.357&f=h - Fix log space wrapping issue when using 2GB logs. From owner-xfs@oss.sgi.com Thu May 8 18:54:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 18:54:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m491s8ws010488 for ; Thu, 8 May 2008 18:54:12 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA05301; Fri, 9 May 2008 11:54:50 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id A416C58C4C15; Fri, 9 May 2008 11:54:50 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981507 - Convert l_flushsema to a sv_t Message-Id: <20080509015450.A416C58C4C15@chook.melbourne.sgi.com> Date: Fri, 9 May 2008 11:54:50 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15825 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Convert l_flushsema to a sv_t The l_flushsema doesn't exactly have completion semantics, nor mutex semantics. It's used as a list of tasks which are waiting to be notified that a flush has completed. It was also being used in a way that was potentially racy, depending on the semaphore implementation. By using a sv_t instead of a semaphore we avoid the need for a separate counter, since we know we just need to wake everything on the queue. Original waitqueue implementation from Matthew Wilcox. Cleanup and conversion to sv_t by Christoph Hellwig. Signed-off-by: Matthew Wilcox Signed-off-by: Christoph Hellwig Date: Fri May 9 11:54:32 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: willy@linux.intel.com,hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31059a fs/xfs/xfsidbg.c - 1.349 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfsidbg.c.diff?r1=text&tr1=1.349&r2=text&tr2=1.348&f=h - Convert l_flushsema to a sv_t fs/xfs/xfs_log.c - 1.359 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log.c.diff?r1=text&tr1=1.359&r2=text&tr2=1.358&f=h - Convert l_flushsema to a sv_t fs/xfs/xfs_log_priv.h - 1.131 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_log_priv.h.diff?r1=text&tr1=1.131&r2=text&tr2=1.130&f=h - Convert l_flushsema to a sv_t From owner-xfs@oss.sgi.com Thu May 8 23:25:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 23:25:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m496PADM029861 for ; Thu, 8 May 2008 23:25:13 -0700 X-ASG-Debug-ID: 1210314354-024101260000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7F71914A378 for ; Thu, 8 May 2008 23:25:54 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id KC4kBaLIFtGaza6B for ; Thu, 08 May 2008 23:25:54 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m496PkF3024899 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 9 May 2008 08:25:46 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m496Pkpw024897 for xfs@oss.sgi.com; Fri, 9 May 2008 08:25:46 +0200 Date: Fri, 9 May 2008 08:25:45 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] merge xfs_mntupdate into xfs_fs_remount Subject: Re: [PATCH] merge xfs_mntupdate into xfs_fs_remount Message-ID: <20080509062545.GA24784@lst.de> References: <20080426201029.GB14172@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080426201029.GB14172@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210314356 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.1, rules version 3.1.49834 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15826 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 10:10:29PM +0200, Christoph Hellwig wrote: > xfs_mntupdate already is completely Linux specific due to the VFS flags > passed in, so it might aswell be merged into xfs_fs_remount. > > > Signed-off-by: Christoph Hellwig Updated version ontop of the kmem_free signature change: Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:16:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:17:30.000000000 +0200 @@ -52,6 +52,7 @@ #include "xfs_version.h" #include "xfs_log_priv.h" #include "xfs_trans_priv.h" +#include "xfs_filestream.h" #include #include @@ -1221,8 +1222,26 @@ xfs_fs_remount( int error; error = xfs_parseargs(mp, options, args, 1); - if (!error) - error = xfs_mntupdate(mp, flags, args); + if (error) + goto out_free_args; + + if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ + if (mp->m_flags & XFS_MOUNT_RDONLY) + mp->m_flags &= ~XFS_MOUNT_RDONLY; + if (args->flags & XFSMNT_BARRIER) { + mp->m_flags |= XFS_MOUNT_BARRIER; + xfs_mountfs_check_barriers(mp); + } else { + mp->m_flags &= ~XFS_MOUNT_BARRIER; + } + } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ + xfs_filestream_flush(mp); + xfs_sync(mp, SYNC_DATA_QUIESCE); + xfs_attr_quiesce(mp); + mp->m_flags |= XFS_MOUNT_RDONLY; + } + + out_free_args: kmem_free(args); return -error; } Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-09 08:16:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-09 08:16:55.000000000 +0200 @@ -701,30 +701,6 @@ xfs_attr_quiesce( xfs_unmountfs_writesb(mp); } -int -xfs_mntupdate( - struct xfs_mount *mp, - int *flags, - struct xfs_mount_args *args) -{ - if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ - if (mp->m_flags & XFS_MOUNT_RDONLY) - mp->m_flags &= ~XFS_MOUNT_RDONLY; - if (args->flags & XFSMNT_BARRIER) { - mp->m_flags |= XFS_MOUNT_BARRIER; - xfs_mountfs_check_barriers(mp); - } else { - mp->m_flags &= ~XFS_MOUNT_BARRIER; - } - } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ - xfs_filestream_flush(mp); - xfs_sync(mp, SYNC_DATA_QUIESCE); - xfs_attr_quiesce(mp); - mp->m_flags |= XFS_MOUNT_RDONLY; - } - return 0; -} - /* * xfs_unmount_flush implements a set of flush operation on special * inodes, which are needed as a separate set of operations so that Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-05-09 08:16:46.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-05-09 08:16:55.000000000 +0200 @@ -11,8 +11,6 @@ struct xfs_mount_args; int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, struct cred *credp); int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); -int xfs_mntupdate(struct xfs_mount *mp, int *flags, - struct xfs_mount_args *args); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); From owner-xfs@oss.sgi.com Thu May 8 23:31:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 23:31:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m496VJn6030379 for ; Thu, 8 May 2008 23:31:23 -0700 X-ASG-Debug-ID: 1210314725-568a018e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0E383167AE4C for ; Thu, 8 May 2008 23:32:05 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id NSnIAbn7QMKDquWd for ; Thu, 08 May 2008 23:32:05 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m496VwF3025314 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 9 May 2008 08:31:58 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m496VwKd025312 for xfs@oss.sgi.com; Fri, 9 May 2008 08:31:58 +0200 Date: Fri, 9 May 2008 08:31:58 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Subject: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-ID: <20080509063158.GA25251@lst.de> References: <20080501220048.GA2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220048.GA2315@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210314726 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.1, rules version 3.1.49836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15827 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:00:48AM +0200, Christoph Hellwig wrote: > xfs_unmount is small and already pretty Linux specific, so merge it into > the callers. The real unmount path is simplified a little by doing a > WARN_ON on the xfs_unmount_flush retval directly instead of propagating > the error back to the caller, and the mout failure case in simplified > significantly by removing the forced shudown case and all the dmapi > events that shouldn't be sent because the dmapi mount event hasn't been > sent by that time either. Respin ontop of the kmem_free signature change: Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:18:05.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:27:09.000000000 +0200 @@ -1088,14 +1088,61 @@ xfs_fs_put_super( struct super_block *sb) { struct xfs_mount *mp = XFS_M(sb); + struct xfs_inode *rip = mp->m_rootip; + int unmount_event_flags = 0; int error; kthread_stop(mp->m_sync_task); xfs_sync(mp, SYNC_ATTR | SYNC_DELWRI); - error = xfs_unmount(mp, 0, NULL); - if (error) - printk("XFS: unmount got error=%d\n", error); + +#ifdef HAVE_DMAPI + if (mp->m_flags & XFS_MOUNT_DMAPI) { + unmount_event_flags = + (mp->m_dmevmask & (1 << DM_EVENT_UNMOUNT)) ? + 0 : DM_FLAGS_UNWANTED; + /* + * Ignore error from dmapi here, first unmount is not allowed + * to fail anyway, and second we wouldn't want to fail a + * unmount because of dmapi. + */ + XFS_SEND_PREUNMOUNT(mp, rip, DM_RIGHT_NULL, rip, DM_RIGHT_NULL, + NULL, NULL, 0, 0, unmount_event_flags); + } +#endif + + /* + * Blow away any referenced inode in the filestreams cache. + * This can and will cause log traffic as inodes go inactive + * here. + */ + xfs_filestream_unmount(mp); + + XFS_bflush(mp->m_ddev_targp); + error = xfs_unmount_flush(mp, 0); + WARN_ON(error); + + IRELE(rip); + + /* + * If we're forcing a shutdown, typically because of a media error, + * we want to make sure we invalidate dirty pages that belong to + * referenced vnodes as well. + */ + if (XFS_FORCED_SHUTDOWN(mp)) { + error = xfs_sync(mp, SYNC_WAIT | SYNC_CLOSE); + ASSERT(error != EFSCORRUPTED); + } + + if (mp->m_flags & XFS_MOUNT_DMAPI) { + XFS_SEND_UNMOUNT(mp, rip, DM_RIGHT_NULL, 0, 0, + unmount_event_flags); + } + + xfs_unmountfs(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + kmem_free(mp); } STATIC void @@ -1402,7 +1449,23 @@ fail_vnrele: } fail_unmount: - xfs_unmount(mp, 0, NULL); + /* + * Blow away any referenced inode in the filestreams cache. + * This can and will cause log traffic as inodes go inactive + * here. + */ + xfs_filestream_unmount(mp); + + XFS_bflush(mp->m_ddev_targp); + error = xfs_unmount_flush(mp, 0); + WARN_ON(error); + + IRELE(mp->m_rootip); + + xfs_unmountfs(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + kmem_free(mp); fail_vfsop: kmem_free(args); Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-09 08:16:55.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-09 08:26:40.000000000 +0200 @@ -558,93 +558,6 @@ error0: return error; } -int -xfs_unmount( - xfs_mount_t *mp, - int flags, - cred_t *credp) -{ - xfs_inode_t *rip; - bhv_vnode_t *rvp; - int unmount_event_wanted = 0; - int unmount_event_flags = 0; - int xfs_unmountfs_needed = 0; - int error; - - rip = mp->m_rootip; - rvp = XFS_ITOV(rip); - -#ifdef HAVE_DMAPI - if (mp->m_flags & XFS_MOUNT_DMAPI) { - error = XFS_SEND_PREUNMOUNT(mp, - rip, DM_RIGHT_NULL, rip, DM_RIGHT_NULL, - NULL, NULL, 0, 0, - (mp->m_dmevmask & (1<m_dmevmask & (1<m_ddev_targp); - error = xfs_unmount_flush(mp, 0); - if (error) - goto out; - - ASSERT(vn_count(rvp) == 1); - - /* - * Drop the reference count - */ - IRELE(rip); - - /* - * If we're forcing a shutdown, typically because of a media error, - * we want to make sure we invalidate dirty pages that belong to - * referenced vnodes as well. - */ - if (XFS_FORCED_SHUTDOWN(mp)) { - error = xfs_sync(mp, SYNC_WAIT | SYNC_CLOSE); - ASSERT(error != EFSCORRUPTED); - } - xfs_unmountfs_needed = 1; - -out: - /* Send DMAPI event, if required. - * Then do xfs_unmountfs() if needed. - * Then return error (or zero). - */ - if (unmount_event_wanted) { - /* Note: mp structure must still exist for - * XFS_SEND_UNMOUNT() call. - */ - XFS_SEND_UNMOUNT(mp, error == 0 ? rip : NULL, - DM_RIGHT_NULL, 0, error, unmount_event_flags); - } - if (xfs_unmountfs_needed) { - /* - * Call common unmount function to flush to disk - * and free the super block buffer & mount structures. - */ - xfs_unmountfs(mp, credp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - kmem_free(mp); - } - - return XFS_ERROR(error); -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-05-09 08:16:55.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-05-09 08:26:11.000000000 +0200 @@ -10,7 +10,6 @@ struct xfs_mount_args; int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, struct cred *credp); -int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); From owner-xfs@oss.sgi.com Thu May 8 23:39:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 23:39:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m496dWTu030969 for ; Thu, 8 May 2008 23:39:34 -0700 X-ASG-Debug-ID: 1210315213-7d8100de0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C791C10FC42A for ; Thu, 8 May 2008 23:40:14 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id KYkBWxaYlVGYDHaI for ; Thu, 08 May 2008 23:40:14 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m496e5F3025751 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 9 May 2008 08:40:05 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m496e5a7025747 for xfs@oss.sgi.com; Fri, 9 May 2008 08:40:05 +0200 Date: Fri, 9 May 2008 08:40:05 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/10] merge xfs_mount into xfs_fs_fill_super Subject: Re: [PATCH 2/10] merge xfs_mount into xfs_fs_fill_super Message-ID: <20080509064004.GB25251@lst.de> References: <20080501220054.GB2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220054.GB2315@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210315217 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.1, rules version 3.1.49834 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15828 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:00:54AM +0200, Christoph Hellwig wrote: > xfs_mount is already pretty linux-specific so merge it into > xfs_fs_fill_super to allow for a more structured mount code in the next > patches. xfs_start_flags and xfs_finish_flags also move to xfs_super.c. > > > Signed-off-by: Christoph Hellwig Respin ontop of the kmem_free signature change: Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-05-09 08:26:11.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-05-09 08:32:07.000000000 +0200 @@ -8,8 +8,6 @@ struct kstatfs; struct xfs_mount; struct xfs_mount_args; -int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, - struct cred *credp); int xfs_sync(struct xfs_mount *mp, int flags); void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:27:09.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:32:33.000000000 +0200 @@ -1367,6 +1367,235 @@ xfs_fs_setxquota( Q_XSETPQLIM), id, (caddr_t)fdq); } +/* + * This function fills in xfs_mount_t fields based on mount args. + * Note: the superblock has _not_ yet been read in. + */ +STATIC int +xfs_start_flags( + struct xfs_mount_args *ap, + struct xfs_mount *mp) +{ + /* Values are in BBs */ + if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { + /* + * At this point the superblock has not been read + * in, therefore we do not know the block size. + * Before the mount call ends we will convert + * these to FSBs. + */ + mp->m_dalign = ap->sunit; + mp->m_swidth = ap->swidth; + } + + if (ap->logbufs != -1 && + ap->logbufs != 0 && + (ap->logbufs < XLOG_MIN_ICLOGS || + ap->logbufs > XLOG_MAX_ICLOGS)) { + cmn_err(CE_WARN, + "XFS: invalid logbufs value: %d [not %d-%d]", + ap->logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); + return XFS_ERROR(EINVAL); + } + mp->m_logbufs = ap->logbufs; + if (ap->logbufsize != -1 && + ap->logbufsize != 0 && + (ap->logbufsize < XLOG_MIN_RECORD_BSIZE || + ap->logbufsize > XLOG_MAX_RECORD_BSIZE || + !is_power_of_2(ap->logbufsize))) { + cmn_err(CE_WARN, + "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", + ap->logbufsize); + return XFS_ERROR(EINVAL); + } + mp->m_logbsize = ap->logbufsize; + mp->m_fsname_len = strlen(ap->fsname) + 1; + mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); + strcpy(mp->m_fsname, ap->fsname); + if (ap->rtname[0]) { + mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); + strcpy(mp->m_rtname, ap->rtname); + } + if (ap->logname[0]) { + mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); + strcpy(mp->m_logname, ap->logname); + } + + if (ap->flags & XFSMNT_WSYNC) + mp->m_flags |= XFS_MOUNT_WSYNC; +#if XFS_BIG_INUMS + if (ap->flags & XFSMNT_INO64) { + mp->m_flags |= XFS_MOUNT_INO64; + mp->m_inoadd = XFS_INO64_OFFSET; + } +#endif + if (ap->flags & XFSMNT_RETERR) + mp->m_flags |= XFS_MOUNT_RETERR; + if (ap->flags & XFSMNT_NOALIGN) + mp->m_flags |= XFS_MOUNT_NOALIGN; + if (ap->flags & XFSMNT_SWALLOC) + mp->m_flags |= XFS_MOUNT_SWALLOC; + if (ap->flags & XFSMNT_OSYNCISOSYNC) + mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; + if (ap->flags & XFSMNT_32BITINODES) + mp->m_flags |= XFS_MOUNT_32BITINODES; + + if (ap->flags & XFSMNT_IOSIZE) { + if (ap->iosizelog > XFS_MAX_IO_LOG || + ap->iosizelog < XFS_MIN_IO_LOG) { + cmn_err(CE_WARN, + "XFS: invalid log iosize: %d [not %d-%d]", + ap->iosizelog, XFS_MIN_IO_LOG, + XFS_MAX_IO_LOG); + return XFS_ERROR(EINVAL); + } + + mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; + mp->m_readio_log = mp->m_writeio_log = ap->iosizelog; + } + + if (ap->flags & XFSMNT_IKEEP) + mp->m_flags |= XFS_MOUNT_IKEEP; + if (ap->flags & XFSMNT_DIRSYNC) + mp->m_flags |= XFS_MOUNT_DIRSYNC; + if (ap->flags & XFSMNT_ATTR2) + mp->m_flags |= XFS_MOUNT_ATTR2; + if (ap->flags & XFSMNT_NOATTR2) + mp->m_flags |= XFS_MOUNT_NOATTR2; + + if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) + mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; + + /* + * no recovery flag requires a read-only mount + */ + if (ap->flags & XFSMNT_NORECOVERY) { + if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { + cmn_err(CE_WARN, + "XFS: tried to mount a FS read-write without recovery!"); + return XFS_ERROR(EINVAL); + } + mp->m_flags |= XFS_MOUNT_NORECOVERY; + } + + if (ap->flags & XFSMNT_NOUUID) + mp->m_flags |= XFS_MOUNT_NOUUID; + if (ap->flags & XFSMNT_BARRIER) + mp->m_flags |= XFS_MOUNT_BARRIER; + else + mp->m_flags &= ~XFS_MOUNT_BARRIER; + + if (ap->flags2 & XFSMNT2_FILESTREAMS) + mp->m_flags |= XFS_MOUNT_FILESTREAMS; + + if (ap->flags & XFSMNT_DMAPI) + mp->m_flags |= XFS_MOUNT_DMAPI; + return 0; +} + +/* + * This function fills in xfs_mount_t fields based on mount args. + * Note: the superblock _has_ now been read in. + */ +STATIC int +xfs_finish_flags( + struct xfs_mount_args *ap, + struct xfs_mount *mp) +{ + int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); + + /* Fail a mount where the logbuf is smaller then the log stripe */ + if (xfs_sb_version_haslogv2(&mp->m_sb)) { + if ((ap->logbufsize <= 0) && + (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { + mp->m_logbsize = mp->m_sb.sb_logsunit; + } else if (ap->logbufsize > 0 && + ap->logbufsize < mp->m_sb.sb_logsunit) { + cmn_err(CE_WARN, + "XFS: logbuf size must be greater than or equal to log stripe size"); + return XFS_ERROR(EINVAL); + } + } else { + /* Fail a mount if the logbuf is larger than 32K */ + if (ap->logbufsize > XLOG_BIG_RECORD_BSIZE) { + cmn_err(CE_WARN, + "XFS: logbuf size for version 1 logs must be 16K or 32K"); + return XFS_ERROR(EINVAL); + } + } + + /* + * mkfs'ed attr2 will turn on attr2 mount unless explicitly + * told by noattr2 to turn it off + */ + if (xfs_sb_version_hasattr2(&mp->m_sb) && + !(ap->flags & XFSMNT_NOATTR2)) + mp->m_flags |= XFS_MOUNT_ATTR2; + + /* + * prohibit r/w mounts of read-only filesystems + */ + if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) { + cmn_err(CE_WARN, + "XFS: cannot mount a read-only filesystem as read-write"); + return XFS_ERROR(EROFS); + } + + /* + * check for shared mount. + */ + if (ap->flags & XFSMNT_SHARED) { + if (!xfs_sb_version_hasshared(&mp->m_sb)) + return XFS_ERROR(EINVAL); + + /* + * For IRIX 6.5, shared mounts must have the shared + * version bit set, have the persistent readonly + * field set, must be version 0 and can only be mounted + * read-only. + */ + if (!ronly || !(mp->m_sb.sb_flags & XFS_SBF_READONLY) || + (mp->m_sb.sb_shared_vn != 0)) + return XFS_ERROR(EINVAL); + + mp->m_flags |= XFS_MOUNT_SHARED; + + /* + * Shared XFS V0 can't deal with DMI. Return EINVAL. + */ + if (mp->m_sb.sb_shared_vn == 0 && (ap->flags & XFSMNT_DMAPI)) + return XFS_ERROR(EINVAL); + } + + if (ap->flags & XFSMNT_UQUOTA) { + mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); + if (ap->flags & XFSMNT_UQUOTAENF) + mp->m_qflags |= XFS_UQUOTA_ENFD; + } + + if (ap->flags & XFSMNT_GQUOTA) { + mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); + if (ap->flags & XFSMNT_GQUOTAENF) + mp->m_qflags |= XFS_OQUOTA_ENFD; + } else if (ap->flags & XFSMNT_PQUOTA) { + mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); + if (ap->flags & XFSMNT_PQUOTAENF) + mp->m_qflags |= XFS_OQUOTA_ENFD; + } + + return 0; +} + +/* + * The file system configurations are: + * (1) device (partition) with data and internal log + * (2) logical volume with data and log subvolumes. + * (3) logical volume with data, log, and realtime subvolumes. + * + * We only have to handle opening the log and realtime volumes here if + * they are present. The data subvolume has already been opened by + * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. + */ STATIC int xfs_fs_fill_super( struct super_block *sb, @@ -1376,7 +1605,9 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args = xfs_args_allocate(sb, silent); - int error; + struct block_device *ddev = sb->s_bdev; + struct block_device *logdev = NULL, *rtdev = NULL; + int flags = 0, error; mp = xfs_mount_init(); @@ -1400,10 +1631,114 @@ xfs_fs_fill_super( sb->s_qcop = &xfs_quotactl_operations; sb->s_op = &xfs_super_operations; - error = xfs_mount(mp, args, NULL); + error = xfs_dmops_get(mp, args); + if (error) + goto fail_vfsop; + error = xfs_qmops_get(mp, args); if (error) goto fail_vfsop; + if (args->flags & XFSMNT_QUIET) + flags |= XFS_MFSI_QUIET; + + /* + * Open real time and log devices - order is important. + */ + if (args->logname[0]) { + error = xfs_blkdev_get(mp, args->logname, &logdev); + if (error) + goto fail_vfsop; + } + if (args->rtname[0]) { + error = xfs_blkdev_get(mp, args->rtname, &rtdev); + if (error) { + xfs_blkdev_put(logdev); + goto fail_vfsop; + } + + if (rtdev == ddev || rtdev == logdev) { + cmn_err(CE_WARN, + "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + error = EINVAL; + goto fail_vfsop; + } + } + + /* + * Setup xfs_mount buffer target pointers + */ + error = ENOMEM; + mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); + if (!mp->m_ddev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto fail_vfsop; + } + if (rtdev) { + mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); + if (!mp->m_rtdev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto error0; + } + } + mp->m_logdev_targp = (logdev && logdev != ddev) ? + xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; + if (!mp->m_logdev_targp) { + xfs_blkdev_put(logdev); + xfs_blkdev_put(rtdev); + goto error0; + } + + /* + * Setup flags based on mount(2) options and then the superblock + */ + error = xfs_start_flags(args, mp); + if (error) + goto error1; + error = xfs_readsb(mp, flags); + if (error) + goto error1; + error = xfs_finish_flags(args, mp); + if (error) + goto error2; + + /* + * Setup xfs_mount buffer target pointers based on superblock + */ + error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (!error && logdev && logdev != ddev) { + unsigned int log_sector_size = BBSIZE; + + if (xfs_sb_version_hassector(&mp->m_sb)) + log_sector_size = mp->m_sb.sb_logsectsize; + error = xfs_setsize_buftarg(mp->m_logdev_targp, + mp->m_sb.sb_blocksize, + log_sector_size); + } + if (!error && rtdev) + error = xfs_setsize_buftarg(mp->m_rtdev_targp, + mp->m_sb.sb_blocksize, + mp->m_sb.sb_sectsize); + if (error) + goto error2; + + if (mp->m_flags & XFS_MOUNT_BARRIER) + xfs_mountfs_check_barriers(mp); + + error = xfs_filestream_mount(mp); + if (error) + goto error2; + + error = xfs_mountfs(mp, flags); + if (error) + goto error2; + + XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); + sb->s_dirt = 1; sb->s_magic = XFS_SB_MAGIC; sb->s_blocksize = mp->m_sb.sb_blocksize; @@ -1440,7 +1775,22 @@ xfs_fs_fill_super( kmem_free(args); return 0; -fail_vnrele: + error2: + if (mp->m_sb_bp) + xfs_freesb(mp); + error1: + xfs_binval(mp->m_ddev_targp); + if (logdev && logdev != ddev) + xfs_binval(mp->m_logdev_targp); + if (rtdev) + xfs_binval(mp->m_rtdev_targp); + error0: + xfs_unmountfs_close(mp, NULL); + xfs_qmops_put(mp); + xfs_dmops_put(mp); + goto fail_vfsop; + + fail_vnrele: if (sb->s_root) { dput(sb->s_root); sb->s_root = NULL; @@ -1448,7 +1798,7 @@ fail_vnrele: iput(root); } -fail_unmount: + fail_unmount: /* * Blow away any referenced inode in the filestreams cache. * This can and will cause log traffic as inodes go inactive @@ -1467,7 +1817,7 @@ fail_unmount: xfs_dmops_put(mp); kmem_free(mp); -fail_vfsop: + fail_vfsop: kmem_free(args); return -error; } Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-09 08:26:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-09 08:32:07.000000000 +0200 @@ -189,375 +189,6 @@ xfs_cleanup(void) kmem_zone_destroy(xfs_log_ticket_zone); } -/* - * xfs_start_flags - * - * This function fills in xfs_mount_t fields based on mount args. - * Note: the superblock has _not_ yet been read in. - */ -STATIC int -xfs_start_flags( - struct xfs_mount_args *ap, - struct xfs_mount *mp) -{ - /* Values are in BBs */ - if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { - /* - * At this point the superblock has not been read - * in, therefore we do not know the block size. - * Before the mount call ends we will convert - * these to FSBs. - */ - mp->m_dalign = ap->sunit; - mp->m_swidth = ap->swidth; - } - - if (ap->logbufs != -1 && - ap->logbufs != 0 && - (ap->logbufs < XLOG_MIN_ICLOGS || - ap->logbufs > XLOG_MAX_ICLOGS)) { - cmn_err(CE_WARN, - "XFS: invalid logbufs value: %d [not %d-%d]", - ap->logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); - return XFS_ERROR(EINVAL); - } - mp->m_logbufs = ap->logbufs; - if (ap->logbufsize != -1 && - ap->logbufsize != 0 && - (ap->logbufsize < XLOG_MIN_RECORD_BSIZE || - ap->logbufsize > XLOG_MAX_RECORD_BSIZE || - !is_power_of_2(ap->logbufsize))) { - cmn_err(CE_WARN, - "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", - ap->logbufsize); - return XFS_ERROR(EINVAL); - } - mp->m_logbsize = ap->logbufsize; - mp->m_fsname_len = strlen(ap->fsname) + 1; - mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); - strcpy(mp->m_fsname, ap->fsname); - if (ap->rtname[0]) { - mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); - strcpy(mp->m_rtname, ap->rtname); - } - if (ap->logname[0]) { - mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); - strcpy(mp->m_logname, ap->logname); - } - - if (ap->flags & XFSMNT_WSYNC) - mp->m_flags |= XFS_MOUNT_WSYNC; -#if XFS_BIG_INUMS - if (ap->flags & XFSMNT_INO64) { - mp->m_flags |= XFS_MOUNT_INO64; - mp->m_inoadd = XFS_INO64_OFFSET; - } -#endif - if (ap->flags & XFSMNT_RETERR) - mp->m_flags |= XFS_MOUNT_RETERR; - if (ap->flags & XFSMNT_NOALIGN) - mp->m_flags |= XFS_MOUNT_NOALIGN; - if (ap->flags & XFSMNT_SWALLOC) - mp->m_flags |= XFS_MOUNT_SWALLOC; - if (ap->flags & XFSMNT_OSYNCISOSYNC) - mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; - if (ap->flags & XFSMNT_32BITINODES) - mp->m_flags |= XFS_MOUNT_32BITINODES; - - if (ap->flags & XFSMNT_IOSIZE) { - if (ap->iosizelog > XFS_MAX_IO_LOG || - ap->iosizelog < XFS_MIN_IO_LOG) { - cmn_err(CE_WARN, - "XFS: invalid log iosize: %d [not %d-%d]", - ap->iosizelog, XFS_MIN_IO_LOG, - XFS_MAX_IO_LOG); - return XFS_ERROR(EINVAL); - } - - mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; - mp->m_readio_log = mp->m_writeio_log = ap->iosizelog; - } - - if (ap->flags & XFSMNT_IKEEP) - mp->m_flags |= XFS_MOUNT_IKEEP; - if (ap->flags & XFSMNT_DIRSYNC) - mp->m_flags |= XFS_MOUNT_DIRSYNC; - if (ap->flags & XFSMNT_ATTR2) - mp->m_flags |= XFS_MOUNT_ATTR2; - if (ap->flags & XFSMNT_NOATTR2) - mp->m_flags |= XFS_MOUNT_NOATTR2; - - if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) - mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; - - /* - * no recovery flag requires a read-only mount - */ - if (ap->flags & XFSMNT_NORECOVERY) { - if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { - cmn_err(CE_WARN, - "XFS: tried to mount a FS read-write without recovery!"); - return XFS_ERROR(EINVAL); - } - mp->m_flags |= XFS_MOUNT_NORECOVERY; - } - - if (ap->flags & XFSMNT_NOUUID) - mp->m_flags |= XFS_MOUNT_NOUUID; - if (ap->flags & XFSMNT_BARRIER) - mp->m_flags |= XFS_MOUNT_BARRIER; - else - mp->m_flags &= ~XFS_MOUNT_BARRIER; - - if (ap->flags2 & XFSMNT2_FILESTREAMS) - mp->m_flags |= XFS_MOUNT_FILESTREAMS; - - if (ap->flags & XFSMNT_DMAPI) - mp->m_flags |= XFS_MOUNT_DMAPI; - return 0; -} - -/* - * This function fills in xfs_mount_t fields based on mount args. - * Note: the superblock _has_ now been read in. - */ -STATIC int -xfs_finish_flags( - struct xfs_mount_args *ap, - struct xfs_mount *mp) -{ - int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); - - /* Fail a mount where the logbuf is smaller then the log stripe */ - if (xfs_sb_version_haslogv2(&mp->m_sb)) { - if ((ap->logbufsize <= 0) && - (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { - mp->m_logbsize = mp->m_sb.sb_logsunit; - } else if (ap->logbufsize > 0 && - ap->logbufsize < mp->m_sb.sb_logsunit) { - cmn_err(CE_WARN, - "XFS: logbuf size must be greater than or equal to log stripe size"); - return XFS_ERROR(EINVAL); - } - } else { - /* Fail a mount if the logbuf is larger than 32K */ - if (ap->logbufsize > XLOG_BIG_RECORD_BSIZE) { - cmn_err(CE_WARN, - "XFS: logbuf size for version 1 logs must be 16K or 32K"); - return XFS_ERROR(EINVAL); - } - } - - /* - * mkfs'ed attr2 will turn on attr2 mount unless explicitly - * told by noattr2 to turn it off - */ - if (xfs_sb_version_hasattr2(&mp->m_sb) && - !(ap->flags & XFSMNT_NOATTR2)) - mp->m_flags |= XFS_MOUNT_ATTR2; - - /* - * prohibit r/w mounts of read-only filesystems - */ - if ((mp->m_sb.sb_flags & XFS_SBF_READONLY) && !ronly) { - cmn_err(CE_WARN, - "XFS: cannot mount a read-only filesystem as read-write"); - return XFS_ERROR(EROFS); - } - - /* - * check for shared mount. - */ - if (ap->flags & XFSMNT_SHARED) { - if (!xfs_sb_version_hasshared(&mp->m_sb)) - return XFS_ERROR(EINVAL); - - /* - * For IRIX 6.5, shared mounts must have the shared - * version bit set, have the persistent readonly - * field set, must be version 0 and can only be mounted - * read-only. - */ - if (!ronly || !(mp->m_sb.sb_flags & XFS_SBF_READONLY) || - (mp->m_sb.sb_shared_vn != 0)) - return XFS_ERROR(EINVAL); - - mp->m_flags |= XFS_MOUNT_SHARED; - - /* - * Shared XFS V0 can't deal with DMI. Return EINVAL. - */ - if (mp->m_sb.sb_shared_vn == 0 && (ap->flags & XFSMNT_DMAPI)) - return XFS_ERROR(EINVAL); - } - - if (ap->flags & XFSMNT_UQUOTA) { - mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); - if (ap->flags & XFSMNT_UQUOTAENF) - mp->m_qflags |= XFS_UQUOTA_ENFD; - } - - if (ap->flags & XFSMNT_GQUOTA) { - mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - if (ap->flags & XFSMNT_GQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } else if (ap->flags & XFSMNT_PQUOTA) { - mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - if (ap->flags & XFSMNT_PQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } - - return 0; -} - -/* - * xfs_mount - * - * The file system configurations are: - * (1) device (partition) with data and internal log - * (2) logical volume with data and log subvolumes. - * (3) logical volume with data, log, and realtime subvolumes. - * - * We only have to handle opening the log and realtime volumes here if - * they are present. The data subvolume has already been opened by - * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. - */ -int -xfs_mount( - struct xfs_mount *mp, - struct xfs_mount_args *args, - cred_t *credp) -{ - struct block_device *ddev, *logdev, *rtdev; - int flags = 0, error; - - ddev = mp->m_super->s_bdev; - logdev = rtdev = NULL; - - error = xfs_dmops_get(mp, args); - if (error) - return error; - error = xfs_qmops_get(mp, args); - if (error) - return error; - - if (args->flags & XFSMNT_QUIET) - flags |= XFS_MFSI_QUIET; - - /* - * Open real time and log devices - order is important. - */ - if (args->logname[0]) { - error = xfs_blkdev_get(mp, args->logname, &logdev); - if (error) - return error; - } - if (args->rtname[0]) { - error = xfs_blkdev_get(mp, args->rtname, &rtdev); - if (error) { - xfs_blkdev_put(logdev); - return error; - } - - if (rtdev == ddev || rtdev == logdev) { - cmn_err(CE_WARN, - "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - return EINVAL; - } - } - - /* - * Setup xfs_mount buffer target pointers - */ - error = ENOMEM; - mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); - if (!mp->m_ddev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - return error; - } - if (rtdev) { - mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); - if (!mp->m_rtdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - } - mp->m_logdev_targp = (logdev && logdev != ddev) ? - xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; - if (!mp->m_logdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - - /* - * Setup flags based on mount(2) options and then the superblock - */ - error = xfs_start_flags(args, mp); - if (error) - goto error1; - error = xfs_readsb(mp, flags); - if (error) - goto error1; - error = xfs_finish_flags(args, mp); - if (error) - goto error2; - - /* - * Setup xfs_mount buffer target pointers based on superblock - */ - error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); - if (!error && logdev && logdev != ddev) { - unsigned int log_sector_size = BBSIZE; - - if (xfs_sb_version_hassector(&mp->m_sb)) - log_sector_size = mp->m_sb.sb_logsectsize; - error = xfs_setsize_buftarg(mp->m_logdev_targp, - mp->m_sb.sb_blocksize, - log_sector_size); - } - if (!error && rtdev) - error = xfs_setsize_buftarg(mp->m_rtdev_targp, - mp->m_sb.sb_blocksize, - mp->m_sb.sb_sectsize); - if (error) - goto error2; - - if (mp->m_flags & XFS_MOUNT_BARRIER) - xfs_mountfs_check_barriers(mp); - - if ((error = xfs_filestream_mount(mp))) - goto error2; - - error = xfs_mountfs(mp, flags); - if (error) - goto error2; - - XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); - - return 0; - -error2: - if (mp->m_sb_bp) - xfs_freesb(mp); -error1: - xfs_binval(mp->m_ddev_targp); - if (logdev && logdev != ddev) - xfs_binval(mp->m_logdev_targp); - if (rtdev) - xfs_binval(mp->m_rtdev_targp); -error0: - xfs_unmountfs_close(mp, credp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - return error; -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) From owner-xfs@oss.sgi.com Thu May 8 23:42:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 23:42:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m496gUvQ031221 for ; Thu, 8 May 2008 23:42:34 -0700 X-ASG-Debug-ID: 1210315395-7d8101000000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CB19210FC776 for ; Thu, 8 May 2008 23:43:15 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 1qZ3Y1jGaTnMXoQO for ; Thu, 08 May 2008 23:43:15 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m496h8F3025904 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 9 May 2008 08:43:09 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m496h86G025902 for xfs@oss.sgi.com; Fri, 9 May 2008 08:43:08 +0200 Date: Fri, 9 May 2008 08:43:08 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 6/10] allow xfs_args_allocate to fail Subject: Re: [PATCH 6/10] allow xfs_args_allocate to fail Message-ID: <20080509064308.GC25251@lst.de> References: <20080501220115.GF2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220115.GF2315@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210315396 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.1, rules version 3.1.49834 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15829 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:01:15AM +0200, Christoph Hellwig wrote: > Switch xfs_args_allocate to kzalloc and handle failures. > > Signed-off-by: Christoph Hellwig Respin ontop of the kmem_free signature change: Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:40:14.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:40:54.000000000 +0200 @@ -75,7 +75,10 @@ xfs_args_allocate( { struct xfs_mount_args *args; - args = kmem_zalloc(sizeof(struct xfs_mount_args), KM_SLEEP); + args = kzalloc(sizeof(struct xfs_mount_args), GFP_KERNEL); + if (!args) + return NULL; + args->logbufs = args->logbufsize = -1; strncpy(args->fsname, sb->s_id, MAXNAMELEN); @@ -1396,9 +1399,13 @@ xfs_fs_remount( char *options) { struct xfs_mount *mp = XFS_M(sb); - struct xfs_mount_args *args = xfs_args_allocate(sb, 0); + struct xfs_mount_args *args; int error; + args = xfs_args_allocate(sb, 0); + if (!args) + return -ENOMEM; + error = xfs_parseargs(mp, options, args, 1); if (error) goto out_free_args; @@ -1420,7 +1427,7 @@ xfs_fs_remount( } out_free_args: - kmem_free(args); + kfree(args); return -error; } @@ -1725,9 +1732,13 @@ xfs_fs_fill_super( { struct inode *root; struct xfs_mount *mp = NULL; - struct xfs_mount_args *args = xfs_args_allocate(sb, silent); + struct xfs_mount_args *args; int flags = 0, error; + args = xfs_args_allocate(sb, silent); + if (!args) + return -ENOMEM; + mp = xfs_mount_init(); INIT_LIST_HEAD(&mp->m_sync_list); @@ -1827,7 +1838,7 @@ xfs_fs_fill_super( xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); - kmem_free(args); + kfree(args); return 0; error2: @@ -1875,7 +1886,7 @@ xfs_fs_fill_super( kmem_free(mp); fail_vfsop: - kmem_free(args); + kfree(args); return -error; } From owner-xfs@oss.sgi.com Thu May 8 23:47:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 08 May 2008 23:47:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m496lE1U031874 for ; Thu, 8 May 2008 23:47:15 -0700 X-ASG-Debug-ID: 1210315679-4741031e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 261BF167AF62 for ; Thu, 8 May 2008 23:47:59 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8WOBI6kulf8kdilQ for ; Thu, 08 May 2008 23:47:59 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m496lqF3026076 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 9 May 2008 08:47:52 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m496lq3L026074 for xfs@oss.sgi.com; Fri, 9 May 2008 08:47:52 +0200 Date: Fri, 9 May 2008 08:47:52 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 7/10] kill xfs_mount_init Subject: Re: [PATCH 7/10] kill xfs_mount_init Message-ID: <20080509064752.GD25251@lst.de> References: <20080501220119.GG2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220119.GG2315@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210315681 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.1, rules version 3.1.49836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15830 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:01:19AM +0200, Christoph Hellwig wrote: > xfs_mount_init is inlined into xfs_fs_fill_super and allocation switched > to kzalloc. Plug a leak of the mount structure for most early mount > failures. Move xfs_icsb_init_counters to as late as possible in the > mount path and make sure to undo it so that no stale hotplug cpu > notifiers are left around on mount failures. > > > Signed-off-by: Christoph Hellwig Resping ontop of the kmem_free signature change: Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:40:54.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-09 08:44:57.000000000 +0200 @@ -1273,10 +1273,11 @@ xfs_fs_put_super( } xfs_unmountfs(mp); + xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); - kmem_free(mp); + kfree(mp); } STATIC void @@ -1733,14 +1734,20 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args; - int flags = 0, error; + int flags = 0, error = ENOMEM; args = xfs_args_allocate(sb, silent); if (!args) return -ENOMEM; - mp = xfs_mount_init(); + mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL); + if (!mp) + goto out_free_args; + spin_lock_init(&mp->m_sb_lock); + mutex_init(&mp->m_ilock); + mutex_init(&mp->m_growlock); + atomic_set(&mp->m_active_trans, 0); INIT_LIST_HEAD(&mp->m_sync_list); spin_lock_init(&mp->m_sync_lock); init_waitqueue_head(&mp->m_wait_single_sync_task); @@ -1753,7 +1760,7 @@ xfs_fs_fill_super( error = xfs_parseargs(mp, (char *)data, args, 0); if (error) - goto fail_vfsop; + goto out_free_mp; sb_min_blocksize(sb, BBSIZE); sb->s_xattr = xfs_xattr_handlers; @@ -1763,7 +1770,7 @@ xfs_fs_fill_super( error = xfs_dmops_get(mp, args); if (error) - goto fail_vfsop; + goto out_free_mp; error = xfs_qmops_get(mp, args); if (error) goto out_put_dmops; @@ -1775,6 +1782,9 @@ xfs_fs_fill_super( if (error) goto out_put_qmops; + if (xfs_icsb_init_counters(mp)) + mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; + /* * Setup flags based on mount(2) options and then the superblock */ @@ -1850,12 +1860,18 @@ xfs_fs_fill_super( xfs_binval(mp->m_logdev_targp); if (mp->m_rtdev_targp) xfs_binval(mp->m_rtdev_targp); + out_destroy_counters: + xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); out_put_qmops: xfs_qmops_put(mp); out_put_dmops: xfs_dmops_put(mp); - goto fail_vfsop; + out_free_mp: + kfree(mp); + out_free_args: + kfree(args); + return -error; fail_vnrele: if (sb->s_root) { @@ -1880,14 +1896,7 @@ xfs_fs_fill_super( IRELE(mp->m_rootip); xfs_unmountfs(mp); - xfs_close_devices(mp); - xfs_qmops_put(mp); - xfs_dmops_put(mp); - kmem_free(mp); - - fail_vfsop: - kfree(args); - return -error; + goto out_destroy_counters; } STATIC int Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-09 08:40:13.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-09 08:43:37.000000000 +0200 @@ -125,33 +125,11 @@ static const struct { }; /* - * Return a pointer to an initialized xfs_mount structure. - */ -xfs_mount_t * -xfs_mount_init(void) -{ - xfs_mount_t *mp; - - mp = kmem_zalloc(sizeof(xfs_mount_t), KM_SLEEP); - - if (xfs_icsb_init_counters(mp)) { - mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; - } - - spin_lock_init(&mp->m_sb_lock); - mutex_init(&mp->m_ilock); - mutex_init(&mp->m_growlock); - atomic_set(&mp->m_active_trans, 0); - - return mp; -} - -/* * Free up the resources associated with a mount structure. Assume that * the structure was initially zeroed, so we can tell which fields got * initialized. */ -void +STATIC void xfs_mount_free( xfs_mount_t *mp) { @@ -177,8 +155,6 @@ xfs_mount_free( kmem_free(mp->m_rtname); if (mp->m_logname != NULL) kmem_free(mp->m_logname); - - xfs_icsb_destroy_counters(mp); } /* @@ -2092,7 +2068,7 @@ xfs_icsb_reinit_counters( xfs_icsb_unlock(mp); } -STATIC void +void xfs_icsb_destroy_counters( xfs_mount_t *mp) { Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-09 08:40:13.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-09 08:43:20.000000000 +0200 @@ -210,6 +210,7 @@ typedef struct xfs_icsb_cnts { extern int xfs_icsb_init_counters(struct xfs_mount *); extern void xfs_icsb_reinit_counters(struct xfs_mount *); +extern void xfs_icsb_destroy_counters(struct xfs_mount *); extern void xfs_icsb_sync_counters(struct xfs_mount *, int); extern void xfs_icsb_sync_counters_locked(struct xfs_mount *, int); @@ -511,10 +512,8 @@ typedef struct xfs_mod_sb { #define XFS_MOUNT_ILOCK(mp) mutex_lock(&((mp)->m_ilock)) #define XFS_MOUNT_IUNLOCK(mp) mutex_unlock(&((mp)->m_ilock)) -extern xfs_mount_t *xfs_mount_init(void); extern void xfs_mod_sb(xfs_trans_t *, __int64_t); extern int xfs_log_sbcount(xfs_mount_t *, uint); -extern void xfs_mount_free(xfs_mount_t *mp); extern int xfs_mountfs(xfs_mount_t *mp, int); extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-09 08:14:56.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-09 08:43:20.000000000 +0200 @@ -256,8 +256,6 @@ EXPORT_SYMBOL(xfs_log_force_umount); EXPORT_SYMBOL(xfs_log_unmount_dealloc); EXPORT_SYMBOL(xfs_log_unmount_write); EXPORT_SYMBOL(xfs_mod_sb); -EXPORT_SYMBOL(xfs_mount_free); -EXPORT_SYMBOL(xfs_mount_init); EXPORT_SYMBOL(xfs_mount_reset_sbqflags); EXPORT_SYMBOL(xfs_mountfs); EXPORT_SYMBOL(xfs_qm_dqcheck); From owner-xfs@oss.sgi.com Sat May 10 20:47:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 10 May 2008 20:48:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4B3lVrP016898 for ; Sat, 10 May 2008 20:47:37 -0700 X-ASG-Debug-ID: 1210477694-063402ba0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from e23smtp04.au.ibm.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6D350150FB3 for ; Sat, 10 May 2008 20:48:15 -0700 (PDT) Received: from e23smtp04.au.ibm.com (E23SMTP04.au.ibm.com [202.81.18.173]) by cuda.sgi.com with ESMTP id FNpKd7yYCeMkOPjA for ; Sat, 10 May 2008 20:48:15 -0700 (PDT) Received: from sd0109e.au.ibm.com (d23rh905.au.ibm.com [202.81.18.225]) by e23smtp04.au.ibm.com (8.13.1/8.13.1) with ESMTP id m4B3lYvm021408 for ; Sun, 11 May 2008 13:47:34 +1000 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by sd0109e.au.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m4B3qGt5179872 for ; Sun, 11 May 2008 13:52:17 +1000 Received: from d23av04.au.ibm.com (loopback [127.0.0.1]) by d23av04.au.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m4B3mCYq013544 for ; Sun, 11 May 2008 13:48:12 +1000 Received: from [9.124.217.171] ([9.124.217.171]) by d23av04.au.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m4B3m8R3013524; Sun, 11 May 2008 13:48:09 +1000 Message-ID: <48266C77.3040102@linux.vnet.ibm.com> Date: Sun, 11 May 2008 09:18:07 +0530 From: Kamalesh Babulal User-Agent: Thunderbird 1.5.0.14ubu (X11/20080505) MIME-Version: 1.0 To: pvp-lsts@fs.ru.acad.bg CC: Alexander Beregalov , kernel-testers@vger.kernel.org, kernel list , Ingo Molnar , peterz@infradead.org, xfs@oss.sgi.com, David Chinner X-ASG-Orig-Subj: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem Subject: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem References: <4825DF71.1030209@linux.vnet.ibm.com> In-Reply-To: <4825DF71.1030209@linux.vnet.ibm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: E23SMTP04.au.ibm.com[202.81.18.173] X-Barracuda-Start-Time: 1210477697 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.1, rules version 3.1.50020 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15831 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: kamalesh@linux.vnet.ibm.com Precedence: bulk X-list: xfs Kamalesh Babulal wrote: > Adding the cc to kernel-list, Ingo Molnar and Peter Zijlstra > > Alexander Beregalov wrote: >> [ INFO: possible circular locking dependency detected ] >> 2.6.26-rc1-00279-g28a4acb #13 >> ------------------------------------------------------- >> nfsd/3087 is trying to acquire lock: >> (iprune_mutex){--..}, at: [] shrink_icache_memory+0x38/0x19b >> >> but task is already holding lock: >> (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0xa2/0xd6 >> >> which lock already depends on the new lock. >> >> >> the existing dependency chain (in reverse order) is: >> >> -> #1 (&(&ip->i_iolock)->mr_lock){----}: >> [] __lock_acquire+0xa0c/0xbc6 >> [] lock_acquire+0x6a/0x86 >> [] down_write_nested+0x33/0x6a >> [] xfs_ilock+0x7b/0xd6 >> [] xfs_ireclaim+0x1d/0x59 >> [] xfs_finish_reclaim+0x173/0x195 >> [] xfs_reclaim+0xb3/0x138 >> [] xfs_fs_clear_inode+0x55/0x8e >> [] clear_inode+0x83/0xd2 >> [] dispose_list+0x3c/0xc1 >> [] shrink_icache_memory+0x173/0x19b >> [] shrink_slab+0xda/0x14e >> [] try_to_free_pages+0x1e4/0x2a2 >> [] __alloc_pages_internal+0x23a/0x39d >> [] __alloc_pages+0xa/0xc >> [] __do_page_cache_readahead+0xaa/0x16a >> [] force_page_cache_readahead+0x4a/0x74 >> [] sys_madvise+0x308/0x400 >> [] sysenter_past_esp+0x6a/0xb1 >> [] 0xffffffff >> >> -> #0 (iprune_mutex){--..}: >> [] __lock_acquire+0x929/0xbc6 >> [] lock_acquire+0x6a/0x86 >> [] mutex_lock_nested+0xb4/0x226 >> [] shrink_icache_memory+0x38/0x19b >> [] shrink_slab+0xda/0x14e >> [] try_to_free_pages+0x1e4/0x2a2 >> [] __alloc_pages_internal+0x23a/0x39d >> [] __alloc_pages+0xa/0xc >> [] __do_page_cache_readahead+0xaa/0x16a >> [] ondemand_readahead+0x119/0x127 >> [] page_cache_async_readahead+0x52/0x5d >> [] generic_file_splice_read+0x290/0x4a8 >> [] xfs_splice_read+0x4b/0x78 >> [] xfs_file_splice_read+0x24/0x29 >> [] do_splice_to+0x45/0x63 >> [] splice_direct_to_actor+0xab/0x150 >> [] nfsd_vfs_read+0x1ed/0x2d0 >> [] nfsd_read+0x82/0x99 >> [] nfsd3_proc_read+0xdf/0x12a >> [] nfsd_dispatch+0xcf/0x19e >> [] svc_process+0x3b3/0x68b >> [] nfsd+0x168/0x26b >> [] kernel_thread_helper+0x7/0x10 >> [] 0xffffffff >> >> other info that might help us debug this: >> >> 3 locks held by nfsd/3087: >> #0: (hash_sem){..--}, at: [] exp_readlock+0xd/0xf >> #1: (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0xa2/0xd6 >> #2: (shrinker_rwsem){----}, at: [] shrink_slab+0x24/0x14e >> >> stack backtrace: >> Pid: 3087, comm: nfsd Not tainted 2.6.26-rc1-00279-g28a4acb #13 >> [] print_circular_bug_tail+0x5a/0x65 >> [] ? print_circular_bug_header+0xa8/0xb3 >> [] __lock_acquire+0x929/0xbc6 >> [] ? native_sched_clock+0x8b/0x9f >> [] lock_acquire+0x6a/0x86 >> [] ? shrink_icache_memory+0x38/0x19b >> [] mutex_lock_nested+0xb4/0x226 >> [] ? shrink_icache_memory+0x38/0x19b >> [] ? shrink_icache_memory+0x38/0x19b >> [] shrink_icache_memory+0x38/0x19b >> [] shrink_slab+0xda/0x14e >> [] try_to_free_pages+0x1e4/0x2a2 >> [] ? _spin_unlock_irqrestore+0x36/0x58 >> [] ? isolate_pages_global+0x0/0x3e >> [] __alloc_pages_internal+0x23a/0x39d >> [] __alloc_pages+0xa/0xc >> [] __do_page_cache_readahead+0xaa/0x16a >> [] ondemand_readahead+0x119/0x127 >> [] page_cache_async_readahead+0x52/0x5d >> [] generic_file_splice_read+0x290/0x4a8 >> [] ? _spin_unlock+0x27/0x3c >> [] ? _atomic_dec_and_lock+0x25/0x30 >> [] ? iput+0x24/0x4e >> [] ? __lock_acquire+0xbaa/0xbc6 >> [] ? exportfs_decode_fh+0x9b/0x1a1 >> [] ? spd_release_page+0x0/0xf >> [] xfs_splice_read+0x4b/0x78 >> [] xfs_file_splice_read+0x24/0x29 >> [] do_splice_to+0x45/0x63 >> [] splice_direct_to_actor+0xab/0x150 >> [] ? nfsd_direct_splice_actor+0x0/0xf >> [] nfsd_vfs_read+0x1ed/0x2d0 >> [] nfsd_read+0x82/0x99 >> [] nfsd3_proc_read+0xdf/0x12a >> [] nfsd_dispatch+0xcf/0x19e >> [] svc_process+0x3b3/0x68b >> [] nfsd+0x168/0x26b >> [] ? nfsd+0x0/0x26b >> [] kernel_thread_helper+0x7/0x10 >> -- Adding the trimmed forward message of syslog from Plamen Petrov May 9 02:16:46 nomad64 kernel: [42951853.992912] May 9 02:16:46 nomad64 kernel: [42951853.992913] ======================================================= May 9 02:16:46 nomad64 kernel: [42951853.992920] [ INFO: possible circular locking dependency detected ] May 9 02:16:46 nomad64 kernel: [42951853.992922] 2.6.26-rc1-00243-g46e4965 #1 May 9 02:16:46 nomad64 kernel: [42951853.992924] ------------------------------------------------------- May 9 02:16:46 nomad64 kernel: [42951853.992927] kio_http/3813 is trying to acquire lock: May 9 02:16:46 nomad64 kernel: [42951853.992930] (&mm->mmap_sem){----}, at: [] do_page_fault+0xdd/0x890 May 9 02:16:46 nomad64 kernel: [42951853.992944] May 9 02:16:46 nomad64 kernel: [42951853.992944] but task is already holding lock: May 9 02:16:46 nomad64 kernel: [42951853.992947] (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0x65/0xa0 May 9 02:16:46 nomad64 kernel: [42951853.992960] May 9 02:16:46 nomad64 kernel: [42951853.992960] which lock already depends on the new lock. May 9 02:16:46 nomad64 kernel: [42951853.992961] May 9 02:16:46 nomad64 kernel: [42951853.992964] May 9 02:16:46 nomad64 kernel: [42951853.992965] the existing dependency chain (in reverse order) is: May 9 02:16:46 nomad64 kernel: [42951853.992967] May 9 02:16:46 nomad64 kernel: [42951853.992968] -> #1 (&(&ip->i_iolock)->mr_lock){----}: May 9 02:16:46 nomad64 kernel: [42951853.992974] [] __lock_acquire+0xf92/0x1080 May 9 02:16:46 nomad64 kernel: [42951853.992989] [] lock_acquire+0xa2/0xd0 May 9 02:16:46 nomad64 kernel: [42951853.993002] [] down_write_nested+0x46/0x80 May 9 02:16:46 nomad64 kernel: [42951853.993018] [] xfs_ilock+0x99/0xa0 May 9 02:16:46 nomad64 kernel: [42951853.993034] [] xfs_free_eofblocks+0x1c7/0x250 May 9 02:16:46 nomad64 kernel: [42951853.993049] [] xfs_release+0x186/0x1d0 May 9 02:16:46 nomad64 kernel: [42951853.993062] [] xfs_file_release+0x10/0x20 May 9 02:16:46 nomad64 kernel: [42951853.993076] [] __fput+0xcc/0x1c0 May 9 02:16:46 nomad64 kernel: [42951853.993091] [] fput+0x16/0x20 May 9 02:16:46 nomad64 kernel: [42951853.993105] [] remove_vma+0x4a/0x80 May 9 02:16:46 nomad64 kernel: [42951853.993120] [] do_munmap+0x281/0x2e0 May 9 02:16:46 nomad64 kernel: [42951853.993134] [] sys_munmap+0x4b/0x70 May 9 02:16:46 nomad64 kernel: [42951853.993148] [] system_call_after_swapgs+0x7b/0x80 May 9 02:16:46 nomad64 kernel: [42951853.993161] [] 0xffffffffffffffff May 9 02:16:46 nomad64 kernel: [42951853.993178] May 9 02:16:46 nomad64 kernel: [42951853.993178] -> #0 (&mm->mmap_sem){----}: May 9 02:16:46 nomad64 kernel: [42951853.993185] [] __lock_acquire+0xdb0/0x1080 May 9 02:16:46 nomad64 kernel: [42951853.993197] [] lock_acquire+0xa2/0xd0 May 9 02:16:46 nomad64 kernel: [42951853.993213] [] down_read+0x3b/0x70 May 9 02:16:46 nomad64 kernel: [42951853.993228] [] do_page_fault+0xdd/0x890 May 9 02:16:46 nomad64 kernel: [42951853.993241] [] error_exit+0x0/0xa9 May 9 02:16:46 nomad64 kernel: [42951853.993256] [] 0xffffffffffffffff May 9 02:16:46 nomad64 kernel: [42951853.993269] May 9 02:16:46 nomad64 kernel: [42951853.993270] other info that might help us debug this: May 9 02:16:46 nomad64 kernel: [42951853.993270] May 9 02:16:46 nomad64 kernel: [42951853.993273] 1 lock held by kio_http/3813: May 9 02:16:46 nomad64 kernel: [42951853.993275] #0: (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0x65/0xa0 May 9 02:16:46 nomad64 kernel: [42951853.993286] May 9 02:16:46 nomad64 kernel: [42951853.993287] stack backtrace: May 9 02:16:46 nomad64 kernel: [42951853.993290] Pid: 3813, comm: kio_http Not tainted 2.6.26-rc1-00243-g46e4965 #1 May 9 02:16:46 nomad64 kernel: [42951853.993292] May 9 02:16:46 nomad64 kernel: [42951853.993293] Call Trace: May 9 02:16:46 nomad64 kernel: [42951853.993297] [] print_circular_bug_tail+0x83/0x90 May 9 02:16:46 nomad64 kernel: [42951853.993302] [] __lock_acquire+0xdb0/0x1080 May 9 02:16:46 nomad64 kernel: [42951853.993306] [] ? do_page_fault+0xdd/0x890 May 9 02:16:46 nomad64 kernel: [42951853.993310] [] lock_acquire+0xa2/0xd0 May 9 02:16:46 nomad64 kernel: [42951853.993313] [] ? do_page_fault+0xdd/0x890 May 9 02:16:46 nomad64 kernel: [42951853.993317] [] down_read+0x3b/0x70 May 9 02:16:46 nomad64 kernel: [42951853.993320] [] do_page_fault+0xdd/0x890 May 9 02:16:46 nomad64 kernel: [42951853.993324] [] error_exit+0x0/0xa9 May 9 02:16:46 nomad64 kernel: [42951853.993328] [] ? file_read_actor+0x46/0x1b0 May 9 02:16:46 nomad64 kernel: [42951853.993331] [] ? _read_unlock_irq+0x36/0x60 May 9 02:16:46 nomad64 kernel: [42951853.993335] [] ? generic_file_aio_read+0x2cc/0x5d0 May 9 02:16:46 nomad64 kernel: [42951853.993339] [] ? get_lock_stats+0x19/0x70 May 9 02:16:46 nomad64 kernel: [42951853.993343] [] ? xfs_read+0x139/0x220 May 9 02:16:46 nomad64 kernel: [42951853.993347] [] ? xfs_file_aio_read+0x4d/0x60 May 9 02:16:46 nomad64 kernel: [42951853.993350] [] ? do_sync_read+0xf1/0x130 May 9 02:16:46 nomad64 kernel: [42951853.993354] [] ? autoremove_wake_function+0x0/0x40 May 9 02:16:46 nomad64 kernel: [42951853.993358] [] ? trace_hardirqs_on+0xda/0x170 May 9 02:16:46 nomad64 kernel: [42951853.993361] [] ? __rcu_read_unlock+0xb5/0xc0 May 9 02:16:46 nomad64 kernel: [42951853.993365] [] ? trace_hardirqs_on+0xda/0x170 May 9 02:16:46 nomad64 kernel: [42951853.993369] [] ? security_file_permission+0x11/0x20 May 9 02:16:46 nomad64 kernel: [42951853.993374] [] ? vfs_read+0xc4/0x160 May 9 02:16:46 nomad64 kernel: [42951853.993377] [] ? sys_read+0x50/0x90 May 9 02:16:46 nomad64 kernel: [42951853.993380] [] ? system_call_after_swapgs+0x7b/0x80 -- Thanks & Regards, Kamalesh Babulal, Linux Technology Center, IBM, ISTL. From owner-xfs@oss.sgi.com Sun May 11 16:09:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 16:10:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4BN9lEP026535 for ; Sun, 11 May 2008 16:09:50 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA06330; Mon, 12 May 2008 09:10:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4BNAAsT164415468; Mon, 12 May 2008 09:10:11 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4BNA22k164600775; Mon, 12 May 2008 09:10:02 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 09:10:02 +1000 From: David Chinner To: Kamalesh Babulal Cc: pvp-lsts@fs.ru.acad.bg, Alexander Beregalov , kernel-testers@vger.kernel.org, kernel list , Ingo Molnar , peterz@infradead.org, xfs@oss.sgi.com, David Chinner Subject: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem Message-ID: <20080511231002.GN103491721@sgi.com> References: <4825DF71.1030209@linux.vnet.ibm.com> <48266C77.3040102@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48266C77.3040102@linux.vnet.ibm.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15832 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Sun, May 11, 2008 at 09:18:07AM +0530, Kamalesh Babulal wrote: > Kamalesh Babulal wrote: > > Adding the cc to kernel-list, Ingo Molnar and Peter Zijlstra > > > > Alexander Beregalov wrote: > >> [ INFO: possible circular locking dependency detected ] > >> 2.6.26-rc1-00279-g28a4acb #13 > >> ------------------------------------------------------- > >> nfsd/3087 is trying to acquire lock: > >> (iprune_mutex){--..}, at: [] shrink_icache_memory+0x38/0x19b > >> > >> but task is already holding lock: > >> (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0xa2/0xd6 > >> > >> which lock already depends on the new lock. > >> > >> > >> the existing dependency chain (in reverse order) is: > >> > >> -> #1 (&(&ip->i_iolock)->mr_lock){----}: > >> [] __lock_acquire+0xa0c/0xbc6 > >> [] lock_acquire+0x6a/0x86 > >> [] down_write_nested+0x33/0x6a > >> [] xfs_ilock+0x7b/0xd6 > >> [] xfs_ireclaim+0x1d/0x59 > >> [] xfs_finish_reclaim+0x173/0x195 > >> [] xfs_reclaim+0xb3/0x138 > >> [] xfs_fs_clear_inode+0x55/0x8e > >> [] clear_inode+0x83/0xd2 > >> [] dispose_list+0x3c/0xc1 > >> [] shrink_icache_memory+0x173/0x19b > >> [] shrink_slab+0xda/0x14e > >> [] try_to_free_pages+0x1e4/0x2a2 > >> [] __alloc_pages_internal+0x23a/0x39d > >> [] __alloc_pages+0xa/0xc > >> [] __do_page_cache_readahead+0xaa/0x16a > >> [] force_page_cache_readahead+0x4a/0x74 > >> [] sys_madvise+0x308/0x400 > >> [] sysenter_past_esp+0x6a/0xb1 > >> [] 0xffffffff > >> > >> -> #0 (iprune_mutex){--..}: > >> [] __lock_acquire+0x929/0xbc6 > >> [] lock_acquire+0x6a/0x86 > >> [] mutex_lock_nested+0xb4/0x226 > >> [] shrink_icache_memory+0x38/0x19b > >> [] shrink_slab+0xda/0x14e > >> [] try_to_free_pages+0x1e4/0x2a2 > >> [] __alloc_pages_internal+0x23a/0x39d > >> [] __alloc_pages+0xa/0xc > >> [] __do_page_cache_readahead+0xaa/0x16a > >> [] ondemand_readahead+0x119/0x127 > >> [] page_cache_async_readahead+0x52/0x5d > >> [] generic_file_splice_read+0x290/0x4a8 > >> [] xfs_splice_read+0x4b/0x78 > >> [] xfs_file_splice_read+0x24/0x29 > >> [] do_splice_to+0x45/0x63 > >> [] splice_direct_to_actor+0xab/0x150 > >> [] nfsd_vfs_read+0x1ed/0x2d0 > >> [] nfsd_read+0x82/0x99 > >> [] nfsd3_proc_read+0xdf/0x12a > >> [] nfsd_dispatch+0xcf/0x19e > >> [] svc_process+0x3b3/0x68b > >> [] nfsd+0x168/0x26b > >> [] kernel_thread_helper+0x7/0x10 > >> [] 0xffffffff Oh, yeah, that. Direct inode reclaim through memory pressure. Effectively memory reclaim inverts locking order w.r.t. iprune_mutex when it recurses into the filesystem. False positive - can never cause a deadlock on XFS. Can't be solved from the XFS side of things without effectively turning off lockdep checking for xfs inode locking. The fix is needed to lockdep via iprune_mutex annotations here.... > May 9 02:16:46 nomad64 kernel: [42951853.992965] the existing dependency chain (in reverse order) is: > May 9 02:16:46 nomad64 kernel: [42951853.992967] > May 9 02:16:46 nomad64 kernel: [42951853.992968] -> #1 (&(&ip->i_iolock)->mr_lock){----}: > May 9 02:16:46 nomad64 kernel: [42951853.992974] [] __lock_acquire+0xf92/0x1080 > May 9 02:16:46 nomad64 kernel: [42951853.992989] [] lock_acquire+0xa2/0xd0 > May 9 02:16:46 nomad64 kernel: [42951853.993002] [] down_write_nested+0x46/0x80 > May 9 02:16:46 nomad64 kernel: [42951853.993018] [] xfs_ilock+0x99/0xa0 > May 9 02:16:46 nomad64 kernel: [42951853.993034] [] xfs_free_eofblocks+0x1c7/0x250 > May 9 02:16:46 nomad64 kernel: [42951853.993049] [] xfs_release+0x186/0x1d0 > May 9 02:16:46 nomad64 kernel: [42951853.993062] [] xfs_file_release+0x10/0x20 > May 9 02:16:46 nomad64 kernel: [42951853.993076] [] __fput+0xcc/0x1c0 > May 9 02:16:46 nomad64 kernel: [42951853.993091] [] fput+0x16/0x20 > May 9 02:16:46 nomad64 kernel: [42951853.993105] [] remove_vma+0x4a/0x80 > May 9 02:16:46 nomad64 kernel: [42951853.993120] [] do_munmap+0x281/0x2e0 > May 9 02:16:46 nomad64 kernel: [42951853.993134] [] sys_munmap+0x4b/0x70 > May 9 02:16:46 nomad64 kernel: [42951853.993148] [] system_call_after_swapgs+0x7b/0x80 > May 9 02:16:46 nomad64 kernel: [42951853.993161] [] 0xffffffffffffffff hmmmm. Sounds like: fd = open() addr = mmap(fd) close(fd) ..... munmap(addr); But yes, XFS takes locks in ->release which means..... > May 9 02:16:46 nomad64 kernel: [42951853.993293] Call Trace: > May 9 02:16:46 nomad64 kernel: [42951853.993297] [] print_circular_bug_tail+0x83/0x90 > May 9 02:16:46 nomad64 kernel: [42951853.993302] [] __lock_acquire+0xdb0/0x1080 > May 9 02:16:46 nomad64 kernel: [42951853.993306] [] ? do_page_fault+0xdd/0x890 > May 9 02:16:46 nomad64 kernel: [42951853.993310] [] lock_acquire+0xa2/0xd0 > May 9 02:16:46 nomad64 kernel: [42951853.993313] [] ? do_page_fault+0xdd/0x890 > May 9 02:16:46 nomad64 kernel: [42951853.993317] [] down_read+0x3b/0x70 > May 9 02:16:46 nomad64 kernel: [42951853.993320] [] do_page_fault+0xdd/0x890 > May 9 02:16:46 nomad64 kernel: [42951853.993324] [] error_exit+0x0/0xa9 > May 9 02:16:46 nomad64 kernel: [42951853.993328] [] ? file_read_actor+0x46/0x1b0 > May 9 02:16:46 nomad64 kernel: [42951853.993331] [] ? _read_unlock_irq+0x36/0x60 > May 9 02:16:46 nomad64 kernel: [42951853.993335] [] ? generic_file_aio_read+0x2cc/0x5d0 > May 9 02:16:46 nomad64 kernel: [42951853.993339] [] ? get_lock_stats+0x19/0x70 > May 9 02:16:46 nomad64 kernel: [42951853.993343] [] ? xfs_read+0x139/0x220 > May 9 02:16:46 nomad64 kernel: [42951853.993347] [] ? xfs_file_aio_read+0x4d/0x60 > May 9 02:16:46 nomad64 kernel: [42951853.993350] [] ? do_sync_read+0xf1/0x130 > May 9 02:16:46 nomad64 kernel: [42951853.993354] [] ? autoremove_wake_function+0x0/0x40 > May 9 02:16:46 nomad64 kernel: [42951853.993358] [] ? trace_hardirqs_on+0xda/0x170 > May 9 02:16:46 nomad64 kernel: [42951853.993361] [] ? __rcu_read_unlock+0xb5/0xc0 > May 9 02:16:46 nomad64 kernel: [42951853.993365] [] ? trace_hardirqs_on+0xda/0x170 > May 9 02:16:46 nomad64 kernel: [42951853.993369] [] ? security_file_permission+0x11/0x20 > May 9 02:16:46 nomad64 kernel: [42951853.993374] [] ? vfs_read+0xc4/0x160 > May 9 02:16:46 nomad64 kernel: [42951853.993377] [] ? sys_read+0x50/0x90 > May 9 02:16:46 nomad64 kernel: [42951853.993380] [] ? system_call_after_swapgs+0x7b/0x80 Oh, joy - a page fault during a read() call triggers lock order inversions on the mmap->sem. I don't think this can deadlock (can't be page faulting in a vma that is being torn down), but it's clear from the last trace that the VM has a mmap->sem inversion problem with ->release vs ->read and page faults... Basically what we are seeing here in both cases is that the VM is calling inode ->release or ->clear_inode methods with different high level locks held. If the filesystem has to take the same locks in these methods as it does in, say, ->read (like XFS does), then we are guaranteed to get reports like this. AFAICT there's nothing we can do from the filesystem perspective to prevent false positives like this from being reported.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 18:47:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 18:47:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C1kuuU008572 for ; Sun, 11 May 2008 18:47:03 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA09480; Mon, 12 May 2008 11:47:25 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C1lNsT164617517; Mon, 12 May 2008 11:47:24 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C1lLV8164544894; Mon, 12 May 2008 11:47:21 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 11:47:21 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/2] kill attr_capable callbacks Message-ID: <20080512014721.GV155679365@sgi.com> References: <20080430112213.GA16966@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430112213.GA16966@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15834 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Tim, Seeing you are working on xattr stuff right now, can you pick this up? (and the followup patch as well?) Cheers, Dave. On Wed, Apr 30, 2008 at 01:22:13PM +0200, Christoph Hellwig wrote: > No need for addition permission checks in the xattr handler, > fs/xattr.c:xattr_permission() already does them, and in fact slightly > more strict then what was in the attr_capable handlers. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:32:56.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:33:30.000000000 +0200 > @@ -747,15 +747,11 @@ xfs_vn_setxattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - int error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > > /* Convert Linux syscall to XFS internal ATTR flags */ > if (flags & XATTR_CREATE) > @@ -777,15 +773,11 @@ xfs_vn_getxattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - ssize_t error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > > /* Convert Linux syscall to XFS internal ATTR flags */ > if (!size) { > @@ -825,15 +817,12 @@ xfs_vn_removexattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - int error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > + > xflags |= namesp->attr_flag; > return namesp->attr_remove(vp, attr, xflags); > } > Index: linux-2.6-xfs/fs/xfs/xfs_attr.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-04-29 21:32:25.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-04-29 21:32:51.000000000 +0200 > @@ -2622,43 +2622,6 @@ attr_lookup_namespace( > return NULL; > } > > -/* > - * Some checks to prevent people abusing EAs to get over quota: > - * - Don't allow modifying user EAs on devices/symlinks; > - * - Don't allow modifying user EAs if sticky bit set; > - */ > -STATIC int > -attr_user_capable( > - bhv_vnode_t *vp, > - cred_t *cred) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > - return -EPERM; > - if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && > - !capable(CAP_SYS_ADMIN)) > - return -EPERM; > - if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && > - (current_fsuid(cred) != inode->i_uid) && !capable(CAP_FOWNER)) > - return -EPERM; > - return 0; > -} > - > -STATIC int > -attr_trusted_capable( > - bhv_vnode_t *vp, > - cred_t *cred) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > - return -EPERM; > - if (!capable(CAP_SYS_ADMIN)) > - return -EPERM; > - return 0; > -} > - > STATIC int > attr_system_set( > bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > @@ -2709,7 +2672,6 @@ struct attrnames attr_system = { > .attr_get = attr_system_get, > .attr_set = attr_system_set, > .attr_remove = attr_system_remove, > - .attr_capable = (attrcapable_t)fs_noerr, > }; > > struct attrnames attr_trusted = { > @@ -2719,7 +2681,6 @@ struct attrnames attr_trusted = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = attr_trusted_capable, > }; > > struct attrnames attr_secure = { > @@ -2729,7 +2690,6 @@ struct attrnames attr_secure = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = (attrcapable_t)fs_noerr, > }; > > struct attrnames attr_user = { > @@ -2738,7 +2698,6 @@ struct attrnames attr_user = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = attr_user_capable, > }; > > struct attrnames *attr_namespaces[] = > Index: linux-2.6-xfs/fs/xfs/xfs_attr.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-04-29 21:33:38.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-04-29 21:33:52.000000000 +0200 > @@ -42,7 +42,6 @@ typedef int (*attrset_t)(bhv_vnode_t *, > typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); > typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); > typedef int (*attrexists_t)(bhv_vnode_t *); > -typedef int (*attrcapable_t)(bhv_vnode_t *, struct cred *); > > typedef struct attrnames { > char * attr_name; > @@ -52,7 +51,6 @@ typedef struct attrnames { > attrset_t attr_set; > attrremove_t attr_remove; > attrexists_t attr_exists; > - attrcapable_t attr_capable; > } attrnames_t; > > #define ATTR_NAMECOUNT 4 > -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 18:43:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 18:43:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C1hKAn008284 for ; Sun, 11 May 2008 18:43:23 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA09302; Mon, 12 May 2008 11:43:55 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C1hrsT164618241; Mon, 12 May 2008 11:43:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C1houa161925717; Mon, 12 May 2008 11:43:50 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 11:43:50 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-ID: <20080512014350.GQ103491721@sgi.com> References: <20080501220048.GA2315@lst.de> <20080509063158.GA25251@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080509063158.GA25251@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15833 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 09, 2008 at 08:31:58AM +0200, Christoph Hellwig wrote: > Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-05-09 08:16:55.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-05-09 08:26:11.000000000 +0200 > @@ -10,7 +10,6 @@ struct xfs_mount_args; > > int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, > struct cred *credp); > -int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); > int xfs_sync(struct xfs_mount *mp, int flags); > void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, > int lnnum); This hunk does not apply - xfs_mntupdate() is defined in this file in the current tree. Oh, this is on top a bunch of other patches you sent a while back that no-one has picked up. I'll go get those now.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 19:03:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 19:04:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C23lZD009800 for ; Sun, 11 May 2008 19:03:50 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA09918; Mon, 12 May 2008 12:04:26 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C24OsT162646107; Mon, 12 May 2008 12:04:25 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C24L1d161213787; Mon, 12 May 2008 12:04:21 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 12:04:21 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 4/10] sort out opening and closing of the block devices Message-ID: <20080512020421.GW155679365@sgi.com> References: <20080501220105.GD2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220105.GD2315@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15835 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:01:05AM +0200, Christoph Hellwig wrote: > +STATIC int > +xfs_open_devices( > + struct xfs_mount *mp, > + struct xfs_mount_args *args) > +{ > + struct block_device *ddev = mp->m_super->s_bdev; > + struct block_device *logdev = NULL, *rtdev = NULL; > + int error; > + > + /* > + * Open real time and log devices - order is important. > + */ > + if (args->logname[0]) { > + error = xfs_blkdev_get(mp, args->logname, &logdev); > + if (error) > + goto out; > + } > + > + if (args->rtname[0]) { > + error = xfs_blkdev_get(mp, args->rtname, &rtdev); > + if (error) > + goto out_close_logdev; > + > + if (rtdev == ddev || rtdev == logdev) { > + cmn_err(CE_WARN, > + "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); error needs to be set to something here. > + goto out_close_rtdev; > + } > + } > + > + /* > + * Setup xfs_mount buffer target pointers > + */ > + error = ENOMEM; > + mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); > + if (!mp->m_ddev_targp) > + goto out_close_rtdev; > + > + if (rtdev) { > + mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); > + if (!mp->m_rtdev_targp) > + goto out_free_ddev_targ; > + } > + > + if (logdev && logdev != ddev) { > + mp->m_logdev_targp = xfs_alloc_buftarg(logdev, 1); > + if (!mp->m_logdev_targp) > + goto out_free_rtdev_targ; > + } else { > + mp->m_logdev_targp = mp->m_ddev_targp; > + } > + > + return 0; > + > + out_free_rtdev_targ: > + if (mp->m_rtdev_targp) > + xfs_free_buftarg(mp->m_rtdev_targp); > + out_free_ddev_targ: > + xfs_free_buftarg(mp->m_ddev_targp); > + out_close_rtdev: > + if (mp->m_rtdev_targp) > + xfs_blkdev_put(mp->m_rtdev_targp->bt_bdev); And that looks broken - we either haven't allocated m_rtdev_targp yet or we've freed it above. incremental patch to fix is fine... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 19:21:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 19:21:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C2LAmC011232 for ; Sun, 11 May 2008 19:21:13 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA10269; Mon, 12 May 2008 12:21:45 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C2LfsT162712915; Mon, 12 May 2008 12:21:44 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C2LcO8164472660; Mon, 12 May 2008 12:21:38 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 12:21:38 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-ID: <20080512022138.GX155679365@sgi.com> References: <20080501220048.GA2315@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080501220048.GA2315@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15836 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:00:48AM +0200, Christoph Hellwig wrote: > xfs_unmount is small and already pretty Linux specific, so merge it into > the callers. The real unmount path is simplified a little by doing a > WARN_ON on the xfs_unmount_flush retval directly instead of propagating > the error back to the caller, and the mout failure case in simplified > significantly by removing the forced shudown case and all the dmapi > events that shouldn't be sent because the dmapi mount event hasn't been > sent by that time either. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:48:31.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:50:16.000000000 +0200 > @@ -1087,14 +1087,61 @@ xfs_fs_put_super( > struct super_block *sb) > { > struct xfs_mount *mp = XFS_M(sb); > + struct xfs_inode *rip = mp->m_rootip; > + int unmount_event_flags = 0; > int error; > > kthread_stop(mp->m_sync_task); > > xfs_sync(mp, SYNC_ATTR | SYNC_DELWRI); > - error = xfs_unmount(mp, 0, NULL); > - if (error) > - printk("XFS: unmount got error=%d\n", error); > + > +#ifdef HAVE_DMAPI > + if (mp->m_flags & XFS_MOUNT_DMAPI) { > + unmount_event_flags = > + (mp->m_dmevmask & (1 << DM_EVENT_UNMOUNT)) ? > + 0 : DM_FLAGS_UNWANTED; > + /* > + * Ignore error from dmapi here, first unmount is not allowed > + * to fail anyway, and second we wouldn't want to fail a > + * unmount because of dmapi. > + */ > + XFS_SEND_PREUNMOUNT(mp, rip, DM_RIGHT_NULL, rip, DM_RIGHT_NULL, > + NULL, NULL, 0, 0, unmount_event_flags); > + } > +#endif > + > + /* > + * Blow away any referenced inode in the filestreams cache. > + * This can and will cause log traffic as inodes go inactive > + * here. > + */ > + xfs_filestream_unmount(mp); > + > + XFS_bflush(mp->m_ddev_targp); > + error = xfs_unmount_flush(mp, 0); > + WARN_ON(error); > + > + IRELE(rip); > + > + /* > + * If we're forcing a shutdown, typically because of a media error, > + * we want to make sure we invalidate dirty pages that belong to > + * referenced vnodes as well. > + */ > + if (XFS_FORCED_SHUTDOWN(mp)) { > + error = xfs_sync(mp, SYNC_WAIT | SYNC_CLOSE); > + ASSERT(error != EFSCORRUPTED); > + } > + > + if (mp->m_flags & XFS_MOUNT_DMAPI) { > + XFS_SEND_UNMOUNT(mp, rip, DM_RIGHT_NULL, 0, 0, > + unmount_event_flags); > + } #ifdef HAVE_DMAPI around this chunk? I know the old code didn't, but it would then match the pre-unmount event hunk above... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 22:42:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 22:43:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4C5gf2L030369 for ; Sun, 11 May 2008 22:42:43 -0700 X-ASG-Debug-ID: 1210571008-583003790000-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 1E1321545FF; Sun, 11 May 2008 22:43:28 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0lzWUCUBtnU5MEgF; Sun, 11 May 2008 22:43:28 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JvQop-00077D-1b; Mon, 12 May 2008 05:43:27 +0000 Date: Mon, 12 May 2008 01:43:27 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Subject: Re: [PATCH 1/10] merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-ID: <20080512054327.GA26038@infradead.org> References: <20080501220048.GA2315@lst.de> <20080512022138.GX155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080512022138.GX155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210571009 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.1, rules version 3.1.50122 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15837 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 12, 2008 at 12:21:38PM +1000, David Chinner wrote: > > + if (mp->m_flags & XFS_MOUNT_DMAPI) { > > + XFS_SEND_UNMOUNT(mp, rip, DM_RIGHT_NULL, 0, 0, > > + unmount_event_flags); > > + } > > #ifdef HAVE_DMAPI around this chunk? I know the old code didn't, > but it would then match the pre-unmount event hunk above... We don't have #ifdefs around the other dmapi namespace bits. In fact I'd prefer to kill the one above aswell. It's on my todo list because I wan't to prove that using the normal event enabled macros are safe in the unmount path first and just switch to those. From owner-xfs@oss.sgi.com Sun May 11 23:01:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 23:02:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4C61krN031578 for ; Sun, 11 May 2008 23:01:46 -0700 X-ASG-Debug-ID: 1210572150-38a600380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 543501541E3; Sun, 11 May 2008 23:02:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id sVbHjM3Ibs12QnfH; Sun, 11 May 2008 23:02:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4C62MF3016020 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Mon, 12 May 2008 08:02:22 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4C62Mor016018; Mon, 12 May 2008 08:02:22 +0200 Date: Mon, 12 May 2008 08:02:22 +0200 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 4/10] sort out opening and closing of the block devices Subject: Re: [PATCH 4/10] sort out opening and closing of the block devices Message-ID: <20080512060222.GA15488@lst.de> References: <20080501220105.GD2315@lst.de> <20080512020421.GW155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080512020421.GW155679365@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210572152 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.1, rules version 3.1.50124 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15838 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Mon, May 12, 2008 at 12:04:21PM +1000, David Chinner wrote: > error needs to be set to something here. Fixed. > > + out_free_rtdev_targ: > > + if (mp->m_rtdev_targp) > > + xfs_free_buftarg(mp->m_rtdev_targp); > > + out_free_ddev_targ: > > + xfs_free_buftarg(mp->m_ddev_targp); > > + out_close_rtdev: > > + if (mp->m_rtdev_targp) > > + xfs_blkdev_put(mp->m_rtdev_targp->bt_bdev); > > And that looks broken - we either haven't allocated m_rtdev_targp > yet or we've freed it above. Yeah, we should just use the local struct block_device pointers here (and for the logdev case just below) > incremental patch to fix is fine... But in the days of quit a new one is much easier :) New patch below: Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-12 08:00:10.000000000 +0200 @@ -766,6 +766,103 @@ xfs_blkdev_issue_flush( blkdev_issue_flush(buftarg->bt_bdev, NULL); } +STATIC void +xfs_close_devices( + struct xfs_mount *mp) +{ + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { + xfs_free_buftarg(mp->m_logdev_targp); + xfs_blkdev_put(mp->m_logdev_targp->bt_bdev); + } + if (mp->m_rtdev_targp) { + xfs_free_buftarg(mp->m_rtdev_targp); + xfs_blkdev_put(mp->m_rtdev_targp->bt_bdev); + } + xfs_free_buftarg(mp->m_ddev_targp); +} + +/* + * The file system configurations are: + * (1) device (partition) with data and internal log + * (2) logical volume with data and log subvolumes. + * (3) logical volume with data, log, and realtime subvolumes. + * + * We only have to handle opening the log and realtime volumes here if + * they are present. The data subvolume has already been opened by + * get_sb_bdev() and is stored in sb->s_bdev. + */ +STATIC int +xfs_open_devices( + struct xfs_mount *mp, + struct xfs_mount_args *args) +{ + struct block_device *ddev = mp->m_super->s_bdev; + struct block_device *logdev = NULL, *rtdev = NULL; + int error; + + /* + * Open real time and log devices - order is important. + */ + if (args->logname[0]) { + error = xfs_blkdev_get(mp, args->logname, &logdev); + if (error) + goto out; + } + + if (args->rtname[0]) { + error = xfs_blkdev_get(mp, args->rtname, &rtdev); + if (error) + goto out_close_logdev; + + if (rtdev == ddev || rtdev == logdev) { + cmn_err(CE_WARN, + "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); + error = EINVAL; + goto out_close_rtdev; + } + } + + /* + * Setup xfs_mount buffer target pointers + */ + error = ENOMEM; + mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); + if (!mp->m_ddev_targp) + goto out_close_rtdev; + + if (rtdev) { + mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); + if (!mp->m_rtdev_targp) + goto out_free_ddev_targ; + } + + if (logdev && logdev != ddev) { + mp->m_logdev_targp = xfs_alloc_buftarg(logdev, 1); + if (!mp->m_logdev_targp) + goto out_free_rtdev_targ; + } else { + mp->m_logdev_targp = mp->m_ddev_targp; + } + + return 0; + + out_free_rtdev_targ: + if (mp->m_rtdev_targp) + xfs_free_buftarg(mp->m_rtdev_targp); + out_free_ddev_targ: + xfs_free_buftarg(mp->m_ddev_targp); + out_close_rtdev: + if (rtdev) + xfs_blkdev_put(rtdev); + out_close_logdev: + if (logdev && logdev != ddev) + xfs_blkdev_put(logdev); + out: + return error; +} + + + /* * XFS AIL push thread support */ @@ -1139,7 +1236,8 @@ xfs_fs_put_super( unmount_event_flags); } - xfs_unmountfs(mp, NULL); + xfs_unmountfs(mp); + xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); kmem_free(mp); @@ -1586,16 +1684,6 @@ xfs_finish_flags( return 0; } -/* - * The file system configurations are: - * (1) device (partition) with data and internal log - * (2) logical volume with data and log subvolumes. - * (3) logical volume with data, log, and realtime subvolumes. - * - * We only have to handle opening the log and realtime volumes here if - * they are present. The data subvolume has already been opened by - * get_sb_bdev() and is stored in vfsp->vfs_super->s_bdev. - */ STATIC int xfs_fs_fill_super( struct super_block *sb, @@ -1605,8 +1693,6 @@ xfs_fs_fill_super( struct inode *root; struct xfs_mount *mp = NULL; struct xfs_mount_args *args = xfs_args_allocate(sb, silent); - struct block_device *ddev = sb->s_bdev; - struct block_device *logdev = NULL, *rtdev = NULL; int flags = 0, error; mp = xfs_mount_init(); @@ -1636,61 +1722,14 @@ xfs_fs_fill_super( goto fail_vfsop; error = xfs_qmops_get(mp, args); if (error) - goto fail_vfsop; + goto out_put_dmops; if (args->flags & XFSMNT_QUIET) flags |= XFS_MFSI_QUIET; - /* - * Open real time and log devices - order is important. - */ - if (args->logname[0]) { - error = xfs_blkdev_get(mp, args->logname, &logdev); - if (error) - goto fail_vfsop; - } - if (args->rtname[0]) { - error = xfs_blkdev_get(mp, args->rtname, &rtdev); - if (error) { - xfs_blkdev_put(logdev); - goto fail_vfsop; - } - - if (rtdev == ddev || rtdev == logdev) { - cmn_err(CE_WARN, - "XFS: Cannot mount filesystem with identical rtdev and ddev/logdev."); - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - error = EINVAL; - goto fail_vfsop; - } - } - - /* - * Setup xfs_mount buffer target pointers - */ - error = ENOMEM; - mp->m_ddev_targp = xfs_alloc_buftarg(ddev, 0); - if (!mp->m_ddev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto fail_vfsop; - } - if (rtdev) { - mp->m_rtdev_targp = xfs_alloc_buftarg(rtdev, 1); - if (!mp->m_rtdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } - } - mp->m_logdev_targp = (logdev && logdev != ddev) ? - xfs_alloc_buftarg(logdev, 1) : mp->m_ddev_targp; - if (!mp->m_logdev_targp) { - xfs_blkdev_put(logdev); - xfs_blkdev_put(rtdev); - goto error0; - } + error = xfs_open_devices(mp, args); + if (error) + goto out_put_qmops; /* * Setup flags based on mount(2) options and then the superblock @@ -1710,7 +1749,9 @@ xfs_fs_fill_super( */ error = xfs_setsize_buftarg(mp->m_ddev_targp, mp->m_sb.sb_blocksize, mp->m_sb.sb_sectsize); - if (!error && logdev && logdev != ddev) { + if (error) + goto error2; + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) { unsigned int log_sector_size = BBSIZE; if (xfs_sb_version_hassector(&mp->m_sb)) @@ -1718,13 +1759,16 @@ xfs_fs_fill_super( error = xfs_setsize_buftarg(mp->m_logdev_targp, mp->m_sb.sb_blocksize, log_sector_size); + if (error) + goto error2; } - if (!error && rtdev) + if (mp->m_rtdev_targp) { error = xfs_setsize_buftarg(mp->m_rtdev_targp, mp->m_sb.sb_blocksize, mp->m_sb.sb_sectsize); - if (error) - goto error2; + if (error) + goto error2; + } if (mp->m_flags & XFS_MOUNT_BARRIER) xfs_mountfs_check_barriers(mp); @@ -1780,13 +1824,14 @@ xfs_fs_fill_super( xfs_freesb(mp); error1: xfs_binval(mp->m_ddev_targp); - if (logdev && logdev != ddev) + if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) xfs_binval(mp->m_logdev_targp); - if (rtdev) + if (mp->m_rtdev_targp) xfs_binval(mp->m_rtdev_targp); - error0: - xfs_unmountfs_close(mp, NULL); + xfs_close_devices(mp); + out_put_qmops: xfs_qmops_put(mp); + out_put_dmops: xfs_dmops_put(mp); goto fail_vfsop; @@ -1812,7 +1857,8 @@ xfs_fs_fill_super( IRELE(mp->m_rootip); - xfs_unmountfs(mp, NULL); + xfs_unmountfs(mp); + xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); kmem_free(mp); Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-12 07:45:05.000000000 +0200 @@ -1278,7 +1278,7 @@ xfs_mountfs( * log and makes sure that incore structures are freed. */ int -xfs_unmountfs(xfs_mount_t *mp, struct cred *cr) +xfs_unmountfs(xfs_mount_t *mp) { __uint64_t resblks; int error = 0; @@ -1345,7 +1345,6 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr */ ASSERT(mp->m_inodes == NULL); - xfs_unmountfs_close(mp, cr); if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0) uuid_table_remove(&mp->m_sb.sb_uuid); @@ -1356,16 +1355,6 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr return 0; } -void -xfs_unmountfs_close(xfs_mount_t *mp, struct cred *cr) -{ - if (mp->m_logdev_targp && mp->m_logdev_targp != mp->m_ddev_targp) - xfs_free_buftarg(mp->m_logdev_targp, 1); - if (mp->m_rtdev_targp) - xfs_free_buftarg(mp->m_rtdev_targp, 1); - xfs_free_buftarg(mp->m_ddev_targp, 0); -} - STATIC void xfs_unmountfs_wait(xfs_mount_t *mp) { Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-12 07:45:05.000000000 +0200 @@ -518,8 +518,7 @@ extern void xfs_mount_free(xfs_mount_t * extern int xfs_mountfs(xfs_mount_t *mp, int); extern void xfs_mountfs_check_barriers(xfs_mount_t *mp); -extern int xfs_unmountfs(xfs_mount_t *, struct cred *); -extern void xfs_unmountfs_close(xfs_mount_t *, struct cred *); +extern int xfs_unmountfs(xfs_mount_t *); extern int xfs_unmountfs_writesb(xfs_mount_t *); extern int xfs_unmount_flush(xfs_mount_t *, int); extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, int); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-12 07:45:05.000000000 +0200 @@ -78,9 +78,6 @@ extern void xfs_initialize_vnode(struct extern void xfs_flush_inode(struct xfs_inode *); extern void xfs_flush_device(struct xfs_inode *); -extern int xfs_blkdev_get(struct xfs_mount *, const char *, - struct block_device **); -extern void xfs_blkdev_put(struct block_device *); extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); extern const struct export_operations xfs_export_operations; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-05-12 07:45:05.000000000 +0200 @@ -1412,13 +1412,10 @@ xfs_unregister_buftarg( void xfs_free_buftarg( - xfs_buftarg_t *btp, - int external) + xfs_buftarg_t *btp) { xfs_flush_buftarg(btp, 1); xfs_blkdev_issue_flush(btp); - if (external) - xfs_blkdev_put(btp->bt_bdev); xfs_free_bufhash(btp); iput(btp->bt_mapping->host); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-05-12 07:45:03.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h 2008-05-12 07:45:05.000000000 +0200 @@ -410,7 +410,7 @@ static inline void xfs_bdwrite(void *mp, * Handling of buftargs. */ extern xfs_buftarg_t *xfs_alloc_buftarg(struct block_device *, int); -extern void xfs_free_buftarg(xfs_buftarg_t *, int); +extern void xfs_free_buftarg(xfs_buftarg_t *); extern void xfs_wait_buftarg(xfs_buftarg_t *); extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int); extern int xfs_flush_buftarg(xfs_buftarg_t *, int); From owner-xfs@oss.sgi.com Sun May 11 23:22:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 23:22:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C6M8wZ000884 for ; Sun, 11 May 2008 23:22:12 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA14686; Mon, 12 May 2008 16:22:37 +1000 Message-ID: <4827E22D.8030500@sgi.com> Date: Mon, 12 May 2008 16:22:37 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH 1/2] kill attr_capable callbacks References: <20080430112213.GA16966@lst.de> <20080512014721.GV155679365@sgi.com> In-Reply-To: <20080512014721.GV155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15839 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > Tim, > > Seeing you are working on xattr stuff right now, can you pick this up? > (and the followup patch as well?) > > Cheers, > > Dave. > Yep. --Tim > On Wed, Apr 30, 2008 at 01:22:13PM +0200, Christoph Hellwig wrote: >> No need for addition permission checks in the xattr handler, >> fs/xattr.c:xattr_permission() already does them, and in fact slightly >> more strict then what was in the attr_capable handlers. >> >> >> Signed-off-by: Christoph Hellwig >> >> Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:32:56.000000000 +0200 >> +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:33:30.000000000 +0200 >> @@ -747,15 +747,11 @@ xfs_vn_setxattr( >> char *attr = (char *)name; >> attrnames_t *namesp; >> int xflags = 0; >> - int error; >> >> namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); >> if (!namesp) >> return -EOPNOTSUPP; >> attr += namesp->attr_namelen; >> - error = namesp->attr_capable(vp, NULL); >> - if (error) >> - return error; >> >> /* Convert Linux syscall to XFS internal ATTR flags */ >> if (flags & XATTR_CREATE) >> @@ -777,15 +773,11 @@ xfs_vn_getxattr( >> char *attr = (char *)name; >> attrnames_t *namesp; >> int xflags = 0; >> - ssize_t error; >> >> namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); >> if (!namesp) >> return -EOPNOTSUPP; >> attr += namesp->attr_namelen; >> - error = namesp->attr_capable(vp, NULL); >> - if (error) >> - return error; >> >> /* Convert Linux syscall to XFS internal ATTR flags */ >> if (!size) { >> @@ -825,15 +817,12 @@ xfs_vn_removexattr( >> char *attr = (char *)name; >> attrnames_t *namesp; >> int xflags = 0; >> - int error; >> >> namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); >> if (!namesp) >> return -EOPNOTSUPP; >> attr += namesp->attr_namelen; >> - error = namesp->attr_capable(vp, NULL); >> - if (error) >> - return error; >> + >> xflags |= namesp->attr_flag; >> return namesp->attr_remove(vp, attr, xflags); >> } >> Index: linux-2.6-xfs/fs/xfs/xfs_attr.c >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-04-29 21:32:25.000000000 +0200 >> +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-04-29 21:32:51.000000000 +0200 >> @@ -2622,43 +2622,6 @@ attr_lookup_namespace( >> return NULL; >> } >> >> -/* >> - * Some checks to prevent people abusing EAs to get over quota: >> - * - Don't allow modifying user EAs on devices/symlinks; >> - * - Don't allow modifying user EAs if sticky bit set; >> - */ >> -STATIC int >> -attr_user_capable( >> - bhv_vnode_t *vp, >> - cred_t *cred) >> -{ >> - struct inode *inode = vn_to_inode(vp); >> - >> - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) >> - return -EPERM; >> - if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && >> - !capable(CAP_SYS_ADMIN)) >> - return -EPERM; >> - if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && >> - (current_fsuid(cred) != inode->i_uid) && !capable(CAP_FOWNER)) >> - return -EPERM; >> - return 0; >> -} >> - >> -STATIC int >> -attr_trusted_capable( >> - bhv_vnode_t *vp, >> - cred_t *cred) >> -{ >> - struct inode *inode = vn_to_inode(vp); >> - >> - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) >> - return -EPERM; >> - if (!capable(CAP_SYS_ADMIN)) >> - return -EPERM; >> - return 0; >> -} >> - >> STATIC int >> attr_system_set( >> bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) >> @@ -2709,7 +2672,6 @@ struct attrnames attr_system = { >> .attr_get = attr_system_get, >> .attr_set = attr_system_set, >> .attr_remove = attr_system_remove, >> - .attr_capable = (attrcapable_t)fs_noerr, >> }; >> >> struct attrnames attr_trusted = { >> @@ -2719,7 +2681,6 @@ struct attrnames attr_trusted = { >> .attr_get = attr_generic_get, >> .attr_set = attr_generic_set, >> .attr_remove = attr_generic_remove, >> - .attr_capable = attr_trusted_capable, >> }; >> >> struct attrnames attr_secure = { >> @@ -2729,7 +2690,6 @@ struct attrnames attr_secure = { >> .attr_get = attr_generic_get, >> .attr_set = attr_generic_set, >> .attr_remove = attr_generic_remove, >> - .attr_capable = (attrcapable_t)fs_noerr, >> }; >> >> struct attrnames attr_user = { >> @@ -2738,7 +2698,6 @@ struct attrnames attr_user = { >> .attr_get = attr_generic_get, >> .attr_set = attr_generic_set, >> .attr_remove = attr_generic_remove, >> - .attr_capable = attr_user_capable, >> }; >> >> struct attrnames *attr_namespaces[] = >> Index: linux-2.6-xfs/fs/xfs/xfs_attr.h >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-04-29 21:33:38.000000000 +0200 >> +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-04-29 21:33:52.000000000 +0200 >> @@ -42,7 +42,6 @@ typedef int (*attrset_t)(bhv_vnode_t *, >> typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); >> typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); >> typedef int (*attrexists_t)(bhv_vnode_t *); >> -typedef int (*attrcapable_t)(bhv_vnode_t *, struct cred *); >> >> typedef struct attrnames { >> char * attr_name; >> @@ -52,7 +51,6 @@ typedef struct attrnames { >> attrset_t attr_set; >> attrremove_t attr_remove; >> attrexists_t attr_exists; >> - attrcapable_t attr_capable; >> } attrnames_t; >> >> #define ATTR_NAMECOUNT 4 >> > From owner-xfs@oss.sgi.com Sun May 11 23:27:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 23:27:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64, J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4C6QwB4002032 for ; Sun, 11 May 2008 23:27:04 -0700 X-ASG-Debug-ID: 1210573661-4f5100120000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AD024154306; Sun, 11 May 2008 23:27:41 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 4ZuLjKdSn5ECS8FC; Sun, 11 May 2008 23:27:41 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4C6RXF3017081 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Mon, 12 May 2008 08:27:33 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4C6RXXP017079; Mon, 12 May 2008 08:27:33 +0200 Date: Mon, 12 May 2008 08:27:33 +0200 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] kill attr_capable callbacks Subject: Re: [PATCH 1/2] kill attr_capable callbacks Message-ID: <20080512062732.GA17007@lst.de> References: <20080430112213.GA16966@lst.de> <20080512014721.GV155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080512014721.GV155679365@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210573663 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.1, rules version 3.1.50126 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15840 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Mon, May 12, 2008 at 11:47:21AM +1000, David Chinner wrote: > Tim, > > Seeing you are working on xattr stuff right now, can you pick this up? > (and the followup patch as well?) Btw, here's the generic acl conversion rebased ontop of these two patches. Still haven't managed to sort out the other issues with it. Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_acl.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_acl.c 2008-05-02 19:34:18.000000000 +0200 @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2008 Christoph Hellwig. + * Released under GPL v2. + */ +#include "xfs.h" +#include "xfs_acl.h" +#include "xfs_attr.h" +#include "xfs_bmap_btree.h" /* required by xfs_inode.h */ +#include "xfs_inode.h" +#include "xfs_vnodeops.h" + +#include +#include + + +#define XFS_ACL_NOT_CACHED ((void *)-1) + +/* + * Convert from extended attribute to in-memory representation. + */ +static struct posix_acl *xfs_acl_from_disk(struct xfs_acl *aclp) +{ + struct posix_acl_entry *acl_e; + struct posix_acl *acl; + struct xfs_acl_entry *ace; + int count, i; + + count = be32_to_cpu(aclp->acl_cnt); + + acl = posix_acl_alloc(count, GFP_KERNEL); + if (!acl) + return ERR_PTR(-ENOMEM); + + for (i = 0; i < count; i++) { + acl_e = &acl->a_entries[i]; + ace = &aclp->acl_entry[i]; + + /* + * XXX(hch): the tag is 32 bits on disk and 16 bits in core. + * Any special handling required?? + */ + acl_e->e_tag = be32_to_cpu(ace->ae_tag); + acl_e->e_perm = be16_to_cpu(ace->ae_perm); + + switch(acl_e->e_tag) { + case ACL_USER: + case ACL_GROUP: + acl_e->e_id = be32_to_cpu(ace->ae_id); + break; + case ACL_USER_OBJ: + case ACL_GROUP_OBJ: + case ACL_MASK: + case ACL_OTHER: + acl_e->e_id = ACL_UNDEFINED_ID; + break; + default: + goto fail; + } + } + return acl; + +fail: + posix_acl_release(acl); + return ERR_PTR(-EINVAL); +} + +/* + * Convert from in-memory to extended attribute representation. + */ +static void xfs_acl_to_disk(struct xfs_acl *aclp, const struct posix_acl *acl) +{ + const struct posix_acl_entry *acl_e; + struct xfs_acl_entry *ace; + int i; + + for (i = 0; i < acl->a_count; i++) { + ace = &aclp->acl_entry[i]; + acl_e = &acl->a_entries[i]; + + ace->ae_tag = cpu_to_be32(acl_e->e_tag); + ace->ae_id = cpu_to_be32(acl_e->e_id); + ace->ae_perm = cpu_to_be16(acl_e->e_perm); + } +} + +struct posix_acl *xfs_get_acl(struct inode *inode, int type) +{ + struct xfs_inode *ip = XFS_I(inode); + struct posix_acl *acl = NULL, **p_acl; + struct xfs_acl *xfs_acl; + int len = sizeof(struct xfs_acl); + char *ea_name; + int error; + + switch (type) { + case ACL_TYPE_ACCESS: + ea_name = SGI_ACL_FILE; + p_acl = &ip->i_acl; + break; + case ACL_TYPE_DEFAULT: + ea_name = SGI_ACL_DEFAULT; + p_acl = &ip->i_default_acl; + break; + default: + return ERR_PTR(-EINVAL); + } + + if (*p_acl != XFS_ACL_NOT_CACHED) + return posix_acl_dup(*p_acl); + + xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + if (!xfs_acl) + return ERR_PTR(-ENOMEM); + + error = -xfs_attr_get(ip, ea_name, (char *)xfs_acl, &len, ATTR_ROOT); + if (!error) { + acl = xfs_acl_from_disk(xfs_acl); + if (!IS_ERR(acl)) + *p_acl = posix_acl_dup(acl); + } else { + *p_acl = NULL; + } + + kfree(xfs_acl); + return acl; +} + +static int xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) +{ + struct xfs_inode *ip = XFS_I(inode); + struct posix_acl **p_acl; + char *ea_name; + int error; + + if (S_ISLNK(inode->i_mode)) + return -EOPNOTSUPP; + + switch (type) { + case ACL_TYPE_ACCESS: + ea_name = SGI_ACL_FILE; + p_acl = &ip->i_acl; + break; + case ACL_TYPE_DEFAULT: + ea_name = SGI_ACL_DEFAULT; + p_acl = &ip->i_default_acl; + if (!S_ISDIR(inode->i_mode)) + return acl ? -EACCES : 0; + break; + default: + return -EINVAL; + } + + if (acl) { + struct xfs_acl *xfs_acl; + int len; + + xfs_acl = kzalloc(sizeof(struct xfs_acl), GFP_KERNEL); + if (!xfs_acl) + return -ENOMEM; + + xfs_acl_to_disk(xfs_acl, acl); + len = sizeof(struct xfs_acl) - + (sizeof(struct xfs_acl_entry) * + (XFS_ACL_MAX_ENTRIES - acl->a_count)); + + error = -xfs_attr_set(ip, ea_name, (char *)xfs_acl, + len, ATTR_ROOT); + + kfree(xfs_acl); + } else { + error = -xfs_attr_remove(ip, ea_name, ATTR_ROOT); + + /* + * If the attribute didn't exist to start with that's fine. + */ + if (error == -ENOATTR) + error = 0; + } + + if (!error) { + if (*p_acl && *p_acl != XFS_ACL_NOT_CACHED) + posix_acl_release(*p_acl); + *p_acl = posix_acl_dup(acl); + } + return error; +} + +static int xfs_check_acl(struct inode *inode, int mask) +{ + struct xfs_inode *ip = XFS_I(inode); + + xfs_itrace_entry(ip); + + if (!XFS_IFORK_Q(ip)) + return -EAGAIN; + + if (ip->i_acl == XFS_ACL_NOT_CACHED) { + struct posix_acl *acl = xfs_get_acl(inode, ACL_TYPE_ACCESS); + if (IS_ERR(acl)) + return PTR_ERR(acl); + posix_acl_release(acl); + } + + if (ip->i_acl) + return posix_acl_permission(inode, ip->i_acl, mask); + return -EAGAIN; +} + +int xfs_vn_permission(struct inode *inode, int mask, struct nameidata *nd) +{ + return generic_permission(inode, mask, xfs_check_acl); +} + + +/* + * Helper to propagate i_mode the xfs_inode. + */ +static int xfs_set_mode(struct inode *inode, mode_t mode) +{ + int error = 0; + + if (mode != inode->i_mode) { + struct bhv_vattr va = { + .va_mask = XFS_AT_MODE, + .va_mode = mode, + }; + + va.va_mask = XFS_AT_MODE; + va.va_mode = mode; + + error = -xfs_setattr(XFS_I(inode), &va, 0, sys_cred); + inode->i_mode = mode; + } + + return error; +} + +static int xfs_acl_exists(struct inode *inode, char *name) +{ + int len = sizeof(struct xfs_acl); + + return xfs_attr_get(XFS_I(inode), name, NULL, &len, + ATTR_ROOT|ATTR_KERNOVAL); +} + +int posix_acl_access_exists(struct inode *inode) +{ + return xfs_acl_exists(inode, SGI_ACL_FILE); +} + +int posix_acl_default_exists(struct inode *inode) +{ + if (!S_ISDIR(inode->i_mode)) + return 0; + return xfs_acl_exists(inode, SGI_ACL_DEFAULT); +} + +static int +xfs_decode_acl(const char *name) +{ + if (strcmp(name, "posix_acl_access") == 0) + return ACL_TYPE_ACCESS; + else if (strcmp(name, "posix_acl_default") == 0) + return ACL_TYPE_DEFAULT; + return -EINVAL; +} + +/* + * Extended attribute handlers + */ + +static int +xfs_xattr_system_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + struct posix_acl *acl; + int type, error; + + type = xfs_decode_acl(name); + if (type < 0) + return type; + + acl = xfs_get_acl(inode, type); + if (IS_ERR(acl)) + return PTR_ERR(acl); + if (acl == NULL) + return -ENODATA; + error = posix_acl_to_xattr(acl, value, size); + posix_acl_release(acl); + + return error; +} + +static int +xfs_xattr_system_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + struct posix_acl *acl = NULL; + int error, type; + + type = xfs_decode_acl(name); + if (type < 0) + return type; + if (flags & XATTR_CREATE) + return -EINVAL; + if (type == ACL_TYPE_DEFAULT && !S_ISDIR(inode->i_mode)) + return value ? -EACCES : 0; + if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER)) + return -EPERM; + + if (!value) + goto set_acl; + + acl = posix_acl_from_xattr(value, size); + if (IS_ERR(acl)) + return PTR_ERR(acl); + if (!acl) + goto set_acl; + + error = posix_acl_valid(acl); + if (error) + goto out_release; + + error = -EINVAL; + if (acl->a_count > XFS_ACL_MAX_ENTRIES) + goto out_release; + + if (type == ACL_TYPE_ACCESS) { + mode_t mode = inode->i_mode; + error = posix_acl_equiv_mode(acl, &mode); + if (error < 0) + return error; // XXX + + if (error == 0) { + posix_acl_release(acl); + acl = NULL; + } + error = xfs_set_mode(inode, mode); + if (error) + goto out_release; + } + + set_acl: + error = xfs_set_acl(inode, type, acl); + + out_release: + posix_acl_release(acl); + if (!error) + vn_revalidate(inode); + return error; +} + +struct xattr_handler xfs_xattr_system_handler = { + .prefix = XATTR_SYSTEM_PREFIX, + .get = xfs_xattr_system_get, + .set = xfs_xattr_system_set, +}; + +/* + * Unlike the other functions in this file this returns positive errors. + */ +int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl) +{ + struct xfs_inode *ip = XFS_I(inode); + struct posix_acl *clone; + mode_t mode; + int error = 0; + + if (S_ISDIR(inode->i_mode)) { + error = xfs_set_acl(inode, ACL_TYPE_DEFAULT, default_acl); + if (error) + return -error; + } + + clone = posix_acl_clone(default_acl, GFP_KERNEL); + if (!clone) + return ENOMEM; + + mode = inode->i_mode; + error = posix_acl_create_masq(clone, &mode); + if (error < 0) + goto out_release_clone; + + error = xfs_set_mode(inode, mode); + if (error > 0) + error = xfs_set_acl(inode, ACL_TYPE_ACCESS, clone); + xfs_iflags_set(ip, XFS_IMODIFIED); + + out_release_clone: + posix_acl_release(clone); + return -error; +} + +int xfs_acl_chmod(struct inode *inode) +{ + struct posix_acl *acl, *clone; + int error; + + if (S_ISLNK(inode->i_mode)) + return -EOPNOTSUPP; + + acl = xfs_get_acl(inode, ACL_TYPE_ACCESS); + if (IS_ERR(acl) || !acl) + return PTR_ERR(acl); + + clone = posix_acl_clone(acl, GFP_KERNEL); + posix_acl_release(acl); + if (!clone) + return -ENOMEM; + + error = posix_acl_chmod_masq(clone, inode->i_mode); + if (!error) + error = xfs_set_acl(inode, ACL_TYPE_ACCESS, clone); + + posix_acl_release(clone); + return error; +} + +void xfs_inode_init_acls(struct xfs_inode *ip) +{ + ip->i_acl = XFS_ACL_NOT_CACHED; + ip->i_default_acl = XFS_ACL_NOT_CACHED; +} + +static void xfs_clear_acl(struct posix_acl **aclp) +{ + if (*aclp != XFS_ACL_NOT_CACHED) { + posix_acl_release(*aclp); + *aclp = XFS_ACL_NOT_CACHED; + } +} + +void xfs_inode_clear_acls(struct xfs_inode *ip) +{ + xfs_clear_acl(&ip->i_acl); + xfs_clear_acl(&ip->i_default_acl); +} Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 19:20:38.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 19:34:18.000000000 +0200 @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -276,9 +277,8 @@ xfs_vn_mknod( { struct inode *inode; struct xfs_inode *ip = NULL; - xfs_acl_t *default_acl = NULL; + struct posix_acl *default_acl = NULL; struct xfs_name name; - int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; int error; /* @@ -288,21 +288,17 @@ xfs_vn_mknod( if (unlikely(!sysv_valid_dev(rdev) || MAJOR(rdev) & ~0x1ff)) return -EINVAL; - if (test_default_acl && test_default_acl(dir)) { - if (!_ACL_ALLOC(default_acl)) { - return -ENOMEM; - } - if (!_ACL_GET_DEFAULT(dir, default_acl)) { - _ACL_FREE(default_acl); - default_acl = NULL; - } + if (IS_POSIXACL(dir)) { + default_acl = xfs_get_acl(dir, ACL_TYPE_DEFAULT); + if (IS_ERR(default_acl)) + return -PTR_ERR(default_acl); + + if (!default_acl) + mode &= ~current->fs->umask; } xfs_dentry_to_name(&name, dentry); - if (IS_POSIXACL(dir) && !default_acl) - mode &= ~current->fs->umask; - switch (mode & S_IFMT) { case S_IFCHR: case S_IFBLK: @@ -330,11 +326,11 @@ xfs_vn_mknod( goto out_cleanup_inode; if (default_acl) { - error = _ACL_INHERIT(inode, mode, default_acl); + error = xfs_inherit_acl(inode, default_acl); if (unlikely(error)) goto out_cleanup_inode; xfs_iflags_set(ip, XFS_IMODIFIED); - _ACL_FREE(default_acl); + posix_acl_release(default_acl); } @@ -347,8 +343,7 @@ xfs_vn_mknod( out_cleanup_inode: xfs_cleanup_inode(dir, inode, dentry); out_free_acl: - if (default_acl) - _ACL_FREE(default_acl); + posix_acl_release(default_acl); return -error; } @@ -550,38 +545,6 @@ xfs_vn_put_link( kfree(s); } -#ifdef CONFIG_XFS_POSIX_ACL -STATIC int -xfs_check_acl( - struct inode *inode, - int mask) -{ - struct xfs_inode *ip = XFS_I(inode); - int error; - - xfs_itrace_entry(ip); - - if (XFS_IFORK_Q(ip)) { - error = xfs_acl_iaccess(ip, mask, NULL); - if (error != -1) - return -error; - } - - return -EAGAIN; -} - -STATIC int -xfs_vn_permission( - struct inode *inode, - int mask, - struct nameidata *nd) -{ - return generic_permission(inode, mask, xfs_check_acl); -} -#else -#define xfs_vn_permission NULL -#endif - STATIC int xfs_vn_getattr( struct vfsmount *mnt, @@ -694,6 +657,9 @@ xfs_vn_setattr( error = xfs_setattr(XFS_I(inode), &vattr, flags, NULL); if (likely(!error)) vn_revalidate(vn_from_inode(inode)); + + if (!error && (attr->ia_valid & ATTR_MODE)) + error = -xfs_acl_chmod(inode); return -error; } Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 19:34:18.000000000 +0200 @@ -31,6 +31,12 @@ extern void xfs_ichgtime_fast(struct xfs extern void xfs_setup_inode(struct xfs_inode *); +#ifdef CONFIG_XFS_POSIX_ACL +int xfs_vn_permission(struct inode *inode, int mask, struct nameidata *nd); +#else +#define xfs_vn_permission NULL +#endif + #define xfs_vtoi(vp) \ ((struct xfs_inode *)vn_to_inode(vp)->i_private) Index: linux-2.6-xfs/fs/xfs/xfs_acl.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_acl.h 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_acl.h 2008-05-02 19:34:18.000000000 +0200 @@ -18,27 +18,25 @@ #ifndef __XFS_ACL_H__ #define __XFS_ACL_H__ +struct inode; +struct posix_acl; +struct xfs_inode; + + /* * Access Control Lists */ -typedef __uint16_t xfs_acl_perm_t; -typedef __int32_t xfs_acl_type_t; -typedef __int32_t xfs_acl_tag_t; -typedef __int32_t xfs_acl_id_t; - #define XFS_ACL_MAX_ENTRIES 25 #define XFS_ACL_NOT_PRESENT (-1) -typedef struct xfs_acl_entry { - xfs_acl_tag_t ae_tag; - xfs_acl_id_t ae_id; - xfs_acl_perm_t ae_perm; -} xfs_acl_entry_t; - -typedef struct xfs_acl { - __int32_t acl_cnt; - xfs_acl_entry_t acl_entry[XFS_ACL_MAX_ENTRIES]; -} xfs_acl_t; +struct xfs_acl { + __be32 acl_cnt; + struct xfs_acl_entry { + __be32 ae_tag; + __be32 ae_id; + __be16 ae_perm; + } acl_entry[XFS_ACL_MAX_ENTRIES]; +}; /* On-disk XFS extended attribute names */ #define SGI_ACL_FILE "SGI_ACL_FILE" @@ -49,51 +47,35 @@ typedef struct xfs_acl { #ifdef CONFIG_XFS_POSIX_ACL -struct vattr; -struct xfs_inode; - -extern struct kmem_zone *xfs_acl_zone; -#define xfs_acl_zone_init(zone, name) \ - (zone) = kmem_zone_init(sizeof(xfs_acl_t), (name)) -#define xfs_acl_zone_destroy(zone) kmem_zone_destroy(zone) - -extern int xfs_acl_inherit(bhv_vnode_t *, mode_t mode, xfs_acl_t *); -extern int xfs_acl_iaccess(struct xfs_inode *, mode_t, cred_t *); -extern int xfs_acl_vtoacl(bhv_vnode_t *, xfs_acl_t *, xfs_acl_t *); -extern int xfs_acl_vhasacl_access(bhv_vnode_t *); -extern int xfs_acl_vhasacl_default(bhv_vnode_t *); -extern int xfs_acl_vset(bhv_vnode_t *, void *, size_t, int); -extern int xfs_acl_vget(bhv_vnode_t *, void *, size_t, int); -extern int xfs_acl_vremove(bhv_vnode_t *, int); - -#define _ACL_TYPE_ACCESS 1 -#define _ACL_TYPE_DEFAULT 2 -#define _ACL_PERM_INVALID(perm) ((perm) & ~(ACL_READ|ACL_WRITE|ACL_EXECUTE)) - -#define _ACL_INHERIT(c,m,d) (xfs_acl_inherit(c,m,d)) -#define _ACL_GET_ACCESS(pv,pa) (xfs_acl_vtoacl(pv,pa,NULL) == 0) -#define _ACL_GET_DEFAULT(pv,pd) (xfs_acl_vtoacl(pv,NULL,pd) == 0) -#define _ACL_ACCESS_EXISTS xfs_acl_vhasacl_access -#define _ACL_DEFAULT_EXISTS xfs_acl_vhasacl_default +struct posix_acl *xfs_get_acl(struct inode *inode, int type); +int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl); +int xfs_acl_chmod(struct inode *inode); +void xfs_inode_init_acls(struct xfs_inode *ip); +void xfs_inode_clear_acls(struct xfs_inode *ip); +int posix_acl_access_exists(struct inode *inode); +int posix_acl_default_exists(struct inode *inode); -#define _ACL_ALLOC(a) ((a) = kmem_zone_alloc(xfs_acl_zone, KM_SLEEP)) -#define _ACL_FREE(a) ((a)? kmem_zone_free(xfs_acl_zone, (a)):(void)0) +extern struct xattr_handler xfs_xattr_system_handler; #else -#define xfs_acl_zone_init(zone,name) -#define xfs_acl_zone_destroy(zone) -#define xfs_acl_vset(v,p,sz,t) (-EOPNOTSUPP) -#define xfs_acl_vget(v,p,sz,t) (-EOPNOTSUPP) -#define xfs_acl_vremove(v,t) (-EOPNOTSUPP) -#define xfs_acl_vhasacl_access(v) (0) -#define xfs_acl_vhasacl_default(v) (0) -#define _ACL_ALLOC(a) (1) /* successfully allocate nothing */ -#define _ACL_FREE(a) ((void)0) -#define _ACL_INHERIT(c,m,d) (0) -#define _ACL_GET_ACCESS(pv,pa) (0) -#define _ACL_GET_DEFAULT(pv,pd) (0) -#define _ACL_ACCESS_EXISTS (NULL) -#define _ACL_DEFAULT_EXISTS (NULL) -#endif +static inline struct posix_acl *xfs_get_acl(struct inode *inode, int type) +{ + BUG(); +} +static inline int xfs_inherit_acl(struct inode *inode, + struct posix_acl *default_acl) +{ + BUG(); +} + +static inline void xfs_inode_init_acls(struct xfs_inode *ip) +{ +} + +static inline void xfs_inode_clear_acls(struct xfs_inode *ip) +{ +} + +#endif /* CONFIG_XFS_POSIX_ACL */ #endif /* __XFS_ACL_H__ */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 19:34:18.000000000 +0200 @@ -51,7 +51,6 @@ #include "xfs_dir2_block.h" #include "xfs_dir2_node.h" #include "xfs_dir2_trace.h" -#include "xfs_acl.h" #include "xfs_attr.h" #include "xfs_attr_leaf.h" #include "xfs_inode_item.h" @@ -179,10 +178,6 @@ EXPORT_SYMBOL(uuid_table_remove); EXPORT_SYMBOL(vn_hold); EXPORT_SYMBOL(vn_revalidate); -#if defined(CONFIG_XFS_POSIX_ACL) -EXPORT_SYMBOL(xfs_acl_vtoacl); -EXPORT_SYMBOL(xfs_acl_inherit); -#endif EXPORT_SYMBOL(xfs_alloc_buftarg); EXPORT_SYMBOL(xfs_flush_buftarg); EXPORT_SYMBOL(xfs_free_buftarg); Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-02 19:34:18.000000000 +0200 @@ -80,7 +80,6 @@ xfs_init(void) xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); - xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); xfs_mru_cache_init(); xfs_filestream_init(); @@ -157,7 +156,6 @@ xfs_cleanup(void) xfs_sysctl_unregister(); xfs_filestream_uninit(); xfs_mru_cache_uninit(); - xfs_acl_zone_destroy(xfs_acl_zone); #ifdef XFS_DIR2_TRACE ktrace_free(xfs_dir2_trace_buf); Index: linux-2.6-xfs/fs/xfs/xfs_acl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_acl.c 2008-05-02 19:14:00.000000000 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,882 +0,0 @@ -/* - * Copyright (c) 2001-2002,2005 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 - */ -#include "xfs.h" -#include "xfs_fs.h" -#include "xfs_types.h" -#include "xfs_bit.h" -#include "xfs_inum.h" -#include "xfs_ag.h" -#include "xfs_dir2.h" -#include "xfs_bmap_btree.h" -#include "xfs_alloc_btree.h" -#include "xfs_ialloc_btree.h" -#include "xfs_dir2_sf.h" -#include "xfs_attr_sf.h" -#include "xfs_dinode.h" -#include "xfs_inode.h" -#include "xfs_btree.h" -#include "xfs_acl.h" -#include "xfs_attr.h" -#include "xfs_vnodeops.h" - -#include -#include - -STATIC int xfs_acl_setmode(bhv_vnode_t *, xfs_acl_t *, int *); -STATIC void xfs_acl_filter_mode(mode_t, xfs_acl_t *); -STATIC void xfs_acl_get_endian(xfs_acl_t *); -STATIC int xfs_acl_access(uid_t, gid_t, xfs_acl_t *, mode_t, cred_t *); -STATIC int xfs_acl_invalid(xfs_acl_t *); -STATIC void xfs_acl_sync_mode(mode_t, xfs_acl_t *); -STATIC void xfs_acl_get_attr(bhv_vnode_t *, xfs_acl_t *, int, int, int *); -STATIC void xfs_acl_set_attr(bhv_vnode_t *, xfs_acl_t *, int, int *); -STATIC int xfs_acl_allow_set(bhv_vnode_t *, int); - -kmem_zone_t *xfs_acl_zone; - - -/* - * Test for existence of access ACL attribute as efficiently as possible. - */ -int -xfs_acl_vhasacl_access( - bhv_vnode_t *vp) -{ - int error; - - xfs_acl_get_attr(vp, NULL, _ACL_TYPE_ACCESS, ATTR_KERNOVAL, &error); - return (error == 0); -} - -/* - * Test for existence of default ACL attribute as efficiently as possible. - */ -int -xfs_acl_vhasacl_default( - bhv_vnode_t *vp) -{ - int error; - - if (!S_ISDIR(vp->i_mode)) - return 0; - xfs_acl_get_attr(vp, NULL, _ACL_TYPE_DEFAULT, ATTR_KERNOVAL, &error); - return (error == 0); -} - -/* - * Convert from extended attribute representation to in-memory for XFS. - */ -STATIC int -posix_acl_xattr_to_xfs( - posix_acl_xattr_header *src, - size_t size, - xfs_acl_t *dest) -{ - posix_acl_xattr_entry *src_entry; - xfs_acl_entry_t *dest_entry; - int n; - - if (!src || !dest) - return EINVAL; - - if (size < sizeof(posix_acl_xattr_header)) - return EINVAL; - - if (src->a_version != cpu_to_le32(POSIX_ACL_XATTR_VERSION)) - return EOPNOTSUPP; - - memset(dest, 0, sizeof(xfs_acl_t)); - dest->acl_cnt = posix_acl_xattr_count(size); - if (dest->acl_cnt < 0 || dest->acl_cnt > XFS_ACL_MAX_ENTRIES) - return EINVAL; - - /* - * acl_set_file(3) may request that we set default ACLs with - * zero length -- defend (gracefully) against that here. - */ - if (!dest->acl_cnt) - return 0; - - src_entry = (posix_acl_xattr_entry *)((char *)src + sizeof(*src)); - dest_entry = &dest->acl_entry[0]; - - for (n = 0; n < dest->acl_cnt; n++, src_entry++, dest_entry++) { - dest_entry->ae_perm = le16_to_cpu(src_entry->e_perm); - if (_ACL_PERM_INVALID(dest_entry->ae_perm)) - return EINVAL; - dest_entry->ae_tag = le16_to_cpu(src_entry->e_tag); - switch(dest_entry->ae_tag) { - case ACL_USER: - case ACL_GROUP: - dest_entry->ae_id = le32_to_cpu(src_entry->e_id); - break; - case ACL_USER_OBJ: - case ACL_GROUP_OBJ: - case ACL_MASK: - case ACL_OTHER: - dest_entry->ae_id = ACL_UNDEFINED_ID; - break; - default: - return EINVAL; - } - } - if (xfs_acl_invalid(dest)) - return EINVAL; - - return 0; -} - -/* - * Comparison function called from xfs_sort(). - * Primary key is ae_tag, secondary key is ae_id. - */ -STATIC int -xfs_acl_entry_compare( - const void *va, - const void *vb) -{ - xfs_acl_entry_t *a = (xfs_acl_entry_t *)va, - *b = (xfs_acl_entry_t *)vb; - - if (a->ae_tag == b->ae_tag) - return (a->ae_id - b->ae_id); - return (a->ae_tag - b->ae_tag); -} - -/* - * Convert from in-memory XFS to extended attribute representation. - */ -STATIC int -posix_acl_xfs_to_xattr( - xfs_acl_t *src, - posix_acl_xattr_header *dest, - size_t size) -{ - int n; - size_t new_size = posix_acl_xattr_size(src->acl_cnt); - posix_acl_xattr_entry *dest_entry; - xfs_acl_entry_t *src_entry; - - if (size < new_size) - return -ERANGE; - - /* Need to sort src XFS ACL by */ - xfs_sort(src->acl_entry, src->acl_cnt, sizeof(src->acl_entry[0]), - xfs_acl_entry_compare); - - dest->a_version = cpu_to_le32(POSIX_ACL_XATTR_VERSION); - dest_entry = &dest->a_entries[0]; - src_entry = &src->acl_entry[0]; - for (n = 0; n < src->acl_cnt; n++, dest_entry++, src_entry++) { - dest_entry->e_perm = cpu_to_le16(src_entry->ae_perm); - if (_ACL_PERM_INVALID(src_entry->ae_perm)) - return -EINVAL; - dest_entry->e_tag = cpu_to_le16(src_entry->ae_tag); - switch (src_entry->ae_tag) { - case ACL_USER: - case ACL_GROUP: - dest_entry->e_id = cpu_to_le32(src_entry->ae_id); - break; - case ACL_USER_OBJ: - case ACL_GROUP_OBJ: - case ACL_MASK: - case ACL_OTHER: - dest_entry->e_id = cpu_to_le32(ACL_UNDEFINED_ID); - break; - default: - return -EINVAL; - } - } - return new_size; -} - -int -xfs_acl_vget( - bhv_vnode_t *vp, - void *acl, - size_t size, - int kind) -{ - int error; - xfs_acl_t *xfs_acl = NULL; - posix_acl_xattr_header *ext_acl = acl; - int flags = 0; - - VN_HOLD(vp); - if(size) { - if (!(_ACL_ALLOC(xfs_acl))) { - error = ENOMEM; - goto out; - } - memset(xfs_acl, 0, sizeof(xfs_acl_t)); - } else - flags = ATTR_KERNOVAL; - - xfs_acl_get_attr(vp, xfs_acl, kind, flags, &error); - if (error) - goto out; - - if (!size) { - error = -posix_acl_xattr_size(XFS_ACL_MAX_ENTRIES); - } else { - if (xfs_acl_invalid(xfs_acl)) { - error = EINVAL; - goto out; - } - if (kind == _ACL_TYPE_ACCESS) - xfs_acl_sync_mode(xfs_vtoi(vp)->i_d.di_mode, xfs_acl); - error = -posix_acl_xfs_to_xattr(xfs_acl, ext_acl, size); - } -out: - VN_RELE(vp); - if(xfs_acl) - _ACL_FREE(xfs_acl); - return -error; -} - -int -xfs_acl_vremove( - bhv_vnode_t *vp, - int kind) -{ - int error; - - VN_HOLD(vp); - error = xfs_acl_allow_set(vp, kind); - if (!error) { - error = xfs_attr_remove(xfs_vtoi(vp), - kind == _ACL_TYPE_DEFAULT? - SGI_ACL_DEFAULT: SGI_ACL_FILE, - ATTR_ROOT); - if (error == ENOATTR) - error = 0; /* 'scool */ - } - VN_RELE(vp); - return -error; -} - -int -xfs_acl_vset( - bhv_vnode_t *vp, - void *acl, - size_t size, - int kind) -{ - posix_acl_xattr_header *ext_acl = acl; - xfs_acl_t *xfs_acl; - int error; - int basicperms = 0; /* more than std unix perms? */ - - if (!acl) - return -EINVAL; - - if (!(_ACL_ALLOC(xfs_acl))) - return -ENOMEM; - - error = posix_acl_xattr_to_xfs(ext_acl, size, xfs_acl); - if (error) { - _ACL_FREE(xfs_acl); - return -error; - } - if (!xfs_acl->acl_cnt) { - _ACL_FREE(xfs_acl); - return 0; - } - - VN_HOLD(vp); - error = xfs_acl_allow_set(vp, kind); - - /* Incoming ACL exists, set file mode based on its value */ - if (!error && kind == _ACL_TYPE_ACCESS) - error = xfs_acl_setmode(vp, xfs_acl, &basicperms); - - if (error) - goto out; - - /* - * If we have more than std unix permissions, set up the actual attr. - * Otherwise, delete any existing attr. This prevents us from - * having actual attrs for permissions that can be stored in the - * standard permission bits. - */ - if (!basicperms) { - xfs_acl_set_attr(vp, xfs_acl, kind, &error); - } else { - error = -xfs_acl_vremove(vp, _ACL_TYPE_ACCESS); - } - -out: - VN_RELE(vp); - _ACL_FREE(xfs_acl); - return -error; -} - -int -xfs_acl_iaccess( - xfs_inode_t *ip, - mode_t mode, - cred_t *cr) -{ - xfs_acl_t *acl; - int rval; - struct xfs_name acl_name = {SGI_ACL_FILE, SGI_ACL_FILE_SIZE}; - - if (!(_ACL_ALLOC(acl))) - return -1; - - /* If the file has no ACL return -1. */ - rval = sizeof(xfs_acl_t); - if (xfs_attr_fetch(ip, &acl_name, (char *)acl, &rval, - ATTR_ROOT | ATTR_KERNACCESS)) { - _ACL_FREE(acl); - return -1; - } - xfs_acl_get_endian(acl); - - /* If the file has an empty ACL return -1. */ - if (acl->acl_cnt == XFS_ACL_NOT_PRESENT) { - _ACL_FREE(acl); - return -1; - } - - /* Synchronize ACL with mode bits */ - xfs_acl_sync_mode(ip->i_d.di_mode, acl); - - rval = xfs_acl_access(ip->i_d.di_uid, ip->i_d.di_gid, acl, mode, cr); - _ACL_FREE(acl); - return rval; -} - -STATIC int -xfs_acl_allow_set( - bhv_vnode_t *vp, - int kind) -{ - if (vp->i_flags & (S_IMMUTABLE|S_APPEND)) - return EPERM; - if (kind == _ACL_TYPE_DEFAULT && !S_ISDIR(vp->i_mode)) - return ENOTDIR; - if (vp->i_sb->s_flags & MS_RDONLY) - return EROFS; - if (xfs_vtoi(vp)->i_d.di_uid != current->fsuid && !capable(CAP_FOWNER)) - return EPERM; - return 0; -} - -/* - * Note: cr is only used here for the capability check if the ACL test fails. - * It is not used to find out the credentials uid or groups etc, as was - * done in IRIX. It is assumed that the uid and groups for the current - * thread are taken from "current" instead of the cr parameter. - */ -STATIC int -xfs_acl_access( - uid_t fuid, - gid_t fgid, - xfs_acl_t *fap, - mode_t md, - cred_t *cr) -{ - xfs_acl_entry_t matched; - int i, allows; - int maskallows = -1; /* true, but not 1, either */ - int seen_userobj = 0; - - matched.ae_tag = 0; /* Invalid type */ - matched.ae_perm = 0; - - for (i = 0; i < fap->acl_cnt; i++) { - /* - * Break out if we've got a user_obj entry or - * a user entry and the mask (and have processed USER_OBJ) - */ - if (matched.ae_tag == ACL_USER_OBJ) - break; - if (matched.ae_tag == ACL_USER) { - if (maskallows != -1 && seen_userobj) - break; - if (fap->acl_entry[i].ae_tag != ACL_MASK && - fap->acl_entry[i].ae_tag != ACL_USER_OBJ) - continue; - } - /* True if this entry allows the requested access */ - allows = ((fap->acl_entry[i].ae_perm & md) == md); - - switch (fap->acl_entry[i].ae_tag) { - case ACL_USER_OBJ: - seen_userobj = 1; - if (fuid != current->fsuid) - continue; - matched.ae_tag = ACL_USER_OBJ; - matched.ae_perm = allows; - break; - case ACL_USER: - if (fap->acl_entry[i].ae_id != current->fsuid) - continue; - matched.ae_tag = ACL_USER; - matched.ae_perm = allows; - break; - case ACL_GROUP_OBJ: - if ((matched.ae_tag == ACL_GROUP_OBJ || - matched.ae_tag == ACL_GROUP) && !allows) - continue; - if (!in_group_p(fgid)) - continue; - matched.ae_tag = ACL_GROUP_OBJ; - matched.ae_perm = allows; - break; - case ACL_GROUP: - if ((matched.ae_tag == ACL_GROUP_OBJ || - matched.ae_tag == ACL_GROUP) && !allows) - continue; - if (!in_group_p(fap->acl_entry[i].ae_id)) - continue; - matched.ae_tag = ACL_GROUP; - matched.ae_perm = allows; - break; - case ACL_MASK: - maskallows = allows; - break; - case ACL_OTHER: - if (matched.ae_tag != 0) - continue; - matched.ae_tag = ACL_OTHER; - matched.ae_perm = allows; - break; - } - } - /* - * First possibility is that no matched entry allows access. - * The capability to override DAC may exist, so check for it. - */ - switch (matched.ae_tag) { - case ACL_OTHER: - case ACL_USER_OBJ: - if (matched.ae_perm) - return 0; - break; - case ACL_USER: - case ACL_GROUP_OBJ: - case ACL_GROUP: - if (maskallows && matched.ae_perm) - return 0; - break; - case 0: - break; - } - - /* EACCES tells generic_permission to check for capability overrides */ - return EACCES; -} -EXPORT_SYMBOL(xfs_acl_access); - -/* - * ACL validity checker. - * This acl validation routine checks each ACL entry read in makes sense. - */ -STATIC int -xfs_acl_invalid( - xfs_acl_t *aclp) -{ - xfs_acl_entry_t *entry, *e; - int user = 0, group = 0, other = 0, mask = 0; - int mask_required = 0; - int i, j; - - if (!aclp) - goto acl_invalid; - - if (aclp->acl_cnt > XFS_ACL_MAX_ENTRIES) - goto acl_invalid; - - for (i = 0; i < aclp->acl_cnt; i++) { - entry = &aclp->acl_entry[i]; - switch (entry->ae_tag) { - case ACL_USER_OBJ: - if (user++) - goto acl_invalid; - break; - case ACL_GROUP_OBJ: - if (group++) - goto acl_invalid; - break; - case ACL_OTHER: - if (other++) - goto acl_invalid; - break; - case ACL_USER: - case ACL_GROUP: - for (j = i + 1; j < aclp->acl_cnt; j++) { - e = &aclp->acl_entry[j]; - if (e->ae_id == entry->ae_id && - e->ae_tag == entry->ae_tag) - goto acl_invalid; - } - mask_required++; - break; - case ACL_MASK: - if (mask++) - goto acl_invalid; - break; - default: - goto acl_invalid; - } - } - if (!user || !group || !other || (mask_required && !mask)) - goto acl_invalid; - else - return 0; -acl_invalid: - return EINVAL; -} - -/* - * Do ACL endian conversion. - */ -STATIC void -xfs_acl_get_endian( - xfs_acl_t *aclp) -{ - xfs_acl_entry_t *ace, *end; - - INT_SET(aclp->acl_cnt, ARCH_CONVERT, aclp->acl_cnt); - end = &aclp->acl_entry[0]+aclp->acl_cnt; - for (ace = &aclp->acl_entry[0]; ace < end; ace++) { - INT_SET(ace->ae_tag, ARCH_CONVERT, ace->ae_tag); - INT_SET(ace->ae_id, ARCH_CONVERT, ace->ae_id); - INT_SET(ace->ae_perm, ARCH_CONVERT, ace->ae_perm); - } -} - -/* - * Get the ACL from the EA and do endian conversion. - */ -STATIC void -xfs_acl_get_attr( - bhv_vnode_t *vp, - xfs_acl_t *aclp, - int kind, - int flags, - int *error) -{ - int len = sizeof(xfs_acl_t); - - ASSERT((flags & ATTR_KERNOVAL) ? (aclp == NULL) : 1); - flags |= ATTR_ROOT; - *error = xfs_attr_get(xfs_vtoi(vp), - kind == _ACL_TYPE_ACCESS ? - SGI_ACL_FILE : SGI_ACL_DEFAULT, - (char *)aclp, &len, flags); - if (*error || (flags & ATTR_KERNOVAL)) - return; - xfs_acl_get_endian(aclp); -} - -/* - * Set the EA with the ACL and do endian conversion. - */ -STATIC void -xfs_acl_set_attr( - bhv_vnode_t *vp, - xfs_acl_t *aclp, - int kind, - int *error) -{ - xfs_acl_entry_t *ace, *newace, *end; - xfs_acl_t *newacl; - int len; - - if (!(_ACL_ALLOC(newacl))) { - *error = ENOMEM; - return; - } - - len = sizeof(xfs_acl_t) - - (sizeof(xfs_acl_entry_t) * (XFS_ACL_MAX_ENTRIES - aclp->acl_cnt)); - end = &aclp->acl_entry[0]+aclp->acl_cnt; - for (ace = &aclp->acl_entry[0], newace = &newacl->acl_entry[0]; - ace < end; - ace++, newace++) { - INT_SET(newace->ae_tag, ARCH_CONVERT, ace->ae_tag); - INT_SET(newace->ae_id, ARCH_CONVERT, ace->ae_id); - INT_SET(newace->ae_perm, ARCH_CONVERT, ace->ae_perm); - } - INT_SET(newacl->acl_cnt, ARCH_CONVERT, aclp->acl_cnt); - *error = xfs_attr_set(xfs_vtoi(vp), - kind == _ACL_TYPE_ACCESS ? - SGI_ACL_FILE: SGI_ACL_DEFAULT, - (char *)newacl, len, ATTR_ROOT); - _ACL_FREE(newacl); -} - -int -xfs_acl_vtoacl( - bhv_vnode_t *vp, - xfs_acl_t *access_acl, - xfs_acl_t *default_acl) -{ - int error = 0; - - if (access_acl) { - /* - * Get the Access ACL and the mode. If either cannot - * be obtained for some reason, invalidate the access ACL. - */ - xfs_acl_get_attr(vp, access_acl, _ACL_TYPE_ACCESS, 0, &error); - if (error) - access_acl->acl_cnt = XFS_ACL_NOT_PRESENT; - else /* We have a good ACL and the file mode, synchronize. */ - xfs_acl_sync_mode(xfs_vtoi(vp)->i_d.di_mode, access_acl); - } - - if (default_acl) { - xfs_acl_get_attr(vp, default_acl, _ACL_TYPE_DEFAULT, 0, &error); - if (error) - default_acl->acl_cnt = XFS_ACL_NOT_PRESENT; - } - return error; -} - -/* - * This function retrieves the parent directory's acl, processes it - * and lets the child inherit the acl(s) that it should. - */ -int -xfs_acl_inherit( - bhv_vnode_t *vp, - mode_t mode, - xfs_acl_t *pdaclp) -{ - xfs_acl_t *cacl; - int error = 0; - int basicperms = 0; - - /* - * If the parent does not have a default ACL, or it's an - * invalid ACL, we're done. - */ - if (!vp) - return 0; - if (!pdaclp || xfs_acl_invalid(pdaclp)) - return 0; - - /* - * Copy the default ACL of the containing directory to - * the access ACL of the new file and use the mode that - * was passed in to set up the correct initial values for - * the u::,g::[m::], and o:: entries. This is what makes - * umask() "work" with ACL's. - */ - - if (!(_ACL_ALLOC(cacl))) - return ENOMEM; - - memcpy(cacl, pdaclp, sizeof(xfs_acl_t)); - xfs_acl_filter_mode(mode, cacl); - error = xfs_acl_setmode(vp, cacl, &basicperms); - if (error) - goto out_error; - - /* - * Set the Default and Access ACL on the file. The mode is already - * set on the file, so we don't need to worry about that. - * - * If the new file is a directory, its default ACL is a copy of - * the containing directory's default ACL. - */ - if (S_ISDIR(vp->i_mode)) - xfs_acl_set_attr(vp, pdaclp, _ACL_TYPE_DEFAULT, &error); - if (!error && !basicperms) - xfs_acl_set_attr(vp, cacl, _ACL_TYPE_ACCESS, &error); -out_error: - _ACL_FREE(cacl); - return error; -} - -/* - * Set up the correct mode on the file based on the supplied ACL. This - * makes sure that the mode on the file reflects the state of the - * u::,g::[m::], and o:: entries in the ACL. Since the mode is where - * the ACL is going to get the permissions for these entries, we must - * synchronize the mode whenever we set the ACL on a file. - */ -STATIC int -xfs_acl_setmode( - bhv_vnode_t *vp, - xfs_acl_t *acl, - int *basicperms) -{ - bhv_vattr_t va; - xfs_acl_entry_t *ap; - xfs_acl_entry_t *gap = NULL; - int i, nomask = 1; - - *basicperms = 1; - - if (acl->acl_cnt == XFS_ACL_NOT_PRESENT) - return 0; - - /* - * Copy the u::, g::, o::, and m:: bits from the ACL into the - * mode. The m:: bits take precedence over the g:: bits. - */ - va.va_mask = XFS_AT_MODE; - va.va_mode = xfs_vtoi(vp)->i_d.di_mode; - va.va_mode &= ~(S_IRWXU|S_IRWXG|S_IRWXO); - ap = acl->acl_entry; - for (i = 0; i < acl->acl_cnt; ++i) { - switch (ap->ae_tag) { - case ACL_USER_OBJ: - va.va_mode |= ap->ae_perm << 6; - break; - case ACL_GROUP_OBJ: - gap = ap; - break; - case ACL_MASK: /* more than just standard modes */ - nomask = 0; - va.va_mode |= ap->ae_perm << 3; - *basicperms = 0; - break; - case ACL_OTHER: - va.va_mode |= ap->ae_perm; - break; - default: /* more than just standard modes */ - *basicperms = 0; - break; - } - ap++; - } - - /* Set the group bits from ACL_GROUP_OBJ if there's no ACL_MASK */ - if (gap && nomask) - va.va_mode |= gap->ae_perm << 3; - - return xfs_setattr(xfs_vtoi(vp), &va, 0, sys_cred); -} - -/* - * The permissions for the special ACL entries (u::, g::[m::], o::) are - * actually stored in the file mode (if there is both a group and a mask, - * the group is stored in the ACL entry and the mask is stored on the file). - * This allows the mode to remain automatically in sync with the ACL without - * the need for a call-back to the ACL system at every point where the mode - * could change. This function takes the permissions from the specified mode - * and places it in the supplied ACL. - * - * This implementation draws its validity from the fact that, when the ACL - * was assigned, the mode was copied from the ACL. - * If the mode did not change, therefore, the mode remains exactly what was - * taken from the special ACL entries at assignment. - * If a subsequent chmod() was done, the POSIX spec says that the change in - * mode must cause an update to the ACL seen at user level and used for - * access checks. Before and after a mode change, therefore, the file mode - * most accurately reflects what the special ACL entries should permit/deny. - * - * CAVEAT: If someone sets the SGI_ACL_FILE attribute directly, - * the existing mode bits will override whatever is in the - * ACL. Similarly, if there is a pre-existing ACL that was - * never in sync with its mode (owing to a bug in 6.5 and - * before), it will now magically (or mystically) be - * synchronized. This could cause slight astonishment, but - * it is better than inconsistent permissions. - * - * The supplied ACL is a template that may contain any combination - * of special entries. These are treated as place holders when we fill - * out the ACL. This routine does not add or remove special entries, it - * simply unites each special entry with its associated set of permissions. - */ -STATIC void -xfs_acl_sync_mode( - mode_t mode, - xfs_acl_t *acl) -{ - int i, nomask = 1; - xfs_acl_entry_t *ap; - xfs_acl_entry_t *gap = NULL; - - /* - * Set ACL entries. POSIX1003.1eD16 requires that the MASK - * be set instead of the GROUP entry, if there is a MASK. - */ - for (ap = acl->acl_entry, i = 0; i < acl->acl_cnt; ap++, i++) { - switch (ap->ae_tag) { - case ACL_USER_OBJ: - ap->ae_perm = (mode >> 6) & 0x7; - break; - case ACL_GROUP_OBJ: - gap = ap; - break; - case ACL_MASK: - nomask = 0; - ap->ae_perm = (mode >> 3) & 0x7; - break; - case ACL_OTHER: - ap->ae_perm = mode & 0x7; - break; - default: - break; - } - } - /* Set the ACL_GROUP_OBJ if there's no ACL_MASK */ - if (gap && nomask) - gap->ae_perm = (mode >> 3) & 0x7; -} - -/* - * When inheriting an Access ACL from a directory Default ACL, - * the ACL bits are set to the intersection of the ACL default - * permission bits and the file permission bits in mode. If there - * are no permission bits on the file then we must not give them - * the ACL. This is what what makes umask() work with ACLs. - */ -STATIC void -xfs_acl_filter_mode( - mode_t mode, - xfs_acl_t *acl) -{ - int i, nomask = 1; - xfs_acl_entry_t *ap; - xfs_acl_entry_t *gap = NULL; - - /* - * Set ACL entries. POSIX1003.1eD16 requires that the MASK - * be merged with GROUP entry, if there is a MASK. - */ - for (ap = acl->acl_entry, i = 0; i < acl->acl_cnt; ap++, i++) { - switch (ap->ae_tag) { - case ACL_USER_OBJ: - ap->ae_perm &= (mode >> 6) & 0x7; - break; - case ACL_GROUP_OBJ: - gap = ap; - break; - case ACL_MASK: - nomask = 0; - ap->ae_perm &= (mode >> 3) & 0x7; - break; - case ACL_OTHER: - ap->ae_perm &= mode & 0x7; - break; - default: - break; - } - } - /* Set the ACL_GROUP_OBJ if there's no ACL_MASK */ - if (gap && nomask) - gap->ae_perm &= (mode >> 3) & 0x7; -} Index: linux-2.6-xfs/fs/xfs/Makefile =================================================================== --- linux-2.6-xfs.orig/fs/xfs/Makefile 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/Makefile 2008-05-02 19:34:18.000000000 +0200 @@ -29,7 +29,7 @@ obj-$(CONFIG_XFS_QUOTA) += quota/ obj-$(CONFIG_XFS_DMAPI) += dmapi/ xfs-$(CONFIG_XFS_RT) += xfs_rtalloc.o -xfs-$(CONFIG_XFS_POSIX_ACL) += xfs_acl.o +xfs-$(CONFIG_XFS_POSIX_ACL) += $(XFS_LINUX)/xfs_acl.o xfs-$(CONFIG_PROC_FS) += $(XFS_LINUX)/xfs_stats.o xfs-$(CONFIG_SYSCTL) += $(XFS_LINUX)/xfs_sysctl.o xfs-$(CONFIG_COMPAT) += $(XFS_LINUX)/xfs_ioctl32.o Index: linux-2.6-xfs/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-05-02 19:34:18.000000000 +0200 @@ -52,6 +52,7 @@ #include "xfs_acl.h" #include "xfs_filestream.h" #include "xfs_vnodeops.h" +#include "xfs_acl.h" kmem_zone_t *xfs_ifork_zone; kmem_zone_t *xfs_inode_zone; @@ -816,6 +817,7 @@ xfs_iread( ip->i_mount = mp; atomic_set(&ip->i_iocount, 0); spin_lock_init(&ip->i_flags_lock); + xfs_inode_init_acls(ip); /* * Get pointer's to the on-disk inode and the buffer containing it. @@ -2668,6 +2670,8 @@ xfs_idestroy( } xfs_inode_item_destroy(ip); } + + xfs_inode_clear_acls(ip); kmem_zone_free(xfs_inode_zone, ip); } Index: linux-2.6-xfs/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-05-02 19:34:18.000000000 +0200 @@ -18,6 +18,7 @@ #ifndef __XFS_INODE_H__ #define __XFS_INODE_H__ +struct posix_acl; struct xfs_dinode; struct xfs_dinode_core; @@ -239,6 +240,11 @@ typedef struct xfs_inode { xfs_fsize_t i_size; /* in-memory size */ xfs_fsize_t i_new_size; /* size when write completes */ atomic_t i_iocount; /* outstanding I/O count */ + +#ifdef CONFIG_XFS_POSIX_ACL + struct posix_acl *i_acl; + struct posix_acl *i_default_acl; +#endif /* Trace buffers per inode. */ #ifdef XFS_INODE_TRACE struct ktrace *i_trace; /* general inode trace */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_xattr.c 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c 2008-05-02 19:34:18.000000000 +0200 @@ -12,66 +12,6 @@ #include -/* - * ACL handling. Should eventually be moved into xfs_acl.c - */ - -static int -xfs_decode_acl(const char *name) -{ - if (strcmp(name, "posix_acl_access") == 0) - return _ACL_TYPE_ACCESS; - else if (strcmp(name, "posix_acl_default") == 0) - return _ACL_TYPE_DEFAULT; - return -EINVAL; -} - -static int -xfs_xattr_system_get(struct inode *inode, const char *name, - void *buffer, size_t size) -{ - int acl; - - acl = xfs_decode_acl(name); - if (acl < 0) - return acl; - - return xfs_acl_vget(inode, buffer, size, acl); -} - -static int -xfs_xattr_system_set(struct inode *inode, const char *name, - const void *value, size_t size, int flags) -{ - int error, acl; - - acl = xfs_decode_acl(name); - if (acl < 0) - return acl; - if (flags & XATTR_CREATE) - return -EINVAL; - - if (!value) - return xfs_acl_vremove(inode, acl); - - error = xfs_acl_vset(inode, (void *)value, size, acl); - if (!error) - vn_revalidate(inode); - return error; -} - -static struct xattr_handler xfs_xattr_system_handler = { - .prefix = XATTR_SYSTEM_PREFIX, - .get = xfs_xattr_system_get, - .set = xfs_xattr_system_set, -}; - - -/* - * Real xattr handling. The only difference between the namespaces is - * a flag passed to the low-level attr code. - */ - static int __xfs_xattr_get(struct inode *inode, const char *name, void *value, size_t size, int xflags) @@ -196,7 +136,9 @@ struct xattr_handler *xfs_xattr_handlers &xfs_xattr_user_handler, &xfs_xattr_trusted_handler, &xfs_xattr_security_handler, +#ifdef CONFIG_XFS_POSIX_ACL &xfs_xattr_system_handler, +#endif NULL }; @@ -246,7 +188,7 @@ xfs_vn_listxattr(struct dentry *dentry, /* * Then add the two synthetic ACL attributes. */ - if (xfs_acl_vhasacl_access(inode)) { + if (posix_acl_access_exists(inode)) { error = list_one_attr(POSIX_ACL_XATTR_ACCESS, strlen(POSIX_ACL_XATTR_ACCESS) + 1, data, size, &result); @@ -254,7 +196,7 @@ xfs_vn_listxattr(struct dentry *dentry, return error; } - if (xfs_acl_vhasacl_default(inode)) { + if (posix_acl_default_exists(inode)) { error = list_one_attr(POSIX_ACL_XATTR_DEFAULT, strlen(POSIX_ACL_XATTR_DEFAULT) + 1, data, size, &result); Index: linux-2.6-xfs/fs/xfs/Kconfig =================================================================== --- linux-2.6-xfs.orig/fs/xfs/Kconfig 2008-05-02 19:14:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/Kconfig 2008-05-02 19:34:18.000000000 +0200 @@ -51,6 +51,7 @@ config XFS_DMAPI config XFS_POSIX_ACL bool "XFS POSIX ACL support" depends on XFS_FS + select FS_POSIX_ACL help POSIX Access Control Lists (ACLs) support permissions for users and groups beyond the owner/group/world scheme. From owner-xfs@oss.sgi.com Sun May 11 23:40:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 23:40:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C6eZiB002971 for ; Sun, 11 May 2008 23:40:38 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA15016; Mon, 12 May 2008 16:41:19 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C6fIsT164763590; Mon, 12 May 2008 16:41:19 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C6fFMD164765327; Mon, 12 May 2008 16:41:15 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 16:41:15 +1000 From: David Chinner To: tes@sgi.com Cc: xfs-dev@sgi.com, xfs@oss.sgi.com Subject: Re: review: log_filter.patch 018,081,082 pv#981362 Message-ID: <20080512064115.GF155679365@sgi.com> References: <48227ef3.WIWE0hYubr4nS8cD%tes@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48227ef3.WIWE0hYubr4nS8cD%tes@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15841 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 08, 2008 at 02:17:55PM +1000, tes@sgi.com wrote: > Due to the changes for default mkfs options where we now have > version 2 inodes, we no longer update the di_onlink field. > To be consistent with previous output, we filter these values out. > Also, as part of changes to the inode generation number which uses > a random num generator, we need to filter out the gen# too. > > --Tim > > 018.op.irix | 400 +++++++++++------------ > 018.op.linux | 400 +++++++++++------------ > 018.trans_inode | 800 +++++++++++++++++++++++------------------------ > 081.ugquota.trans_inode | 816 ++++++++++++++++++++++++------------------------ > 082.op.irix | 400 +++++++++++------------ > 082.op.linux | 400 +++++++++++------------ > 082.trans_inode | 800 +++++++++++++++++++++++------------------------ > common.log | 3 > 8 files changed, 2011 insertions(+), 2008 deletions(-) Worth noting is that these tests all still fail on a config that corrects a problem with the superblock features2 field on mount. Probably not worth bothering about - but I thought I'd mention it as updating the tests didn't fix the failure on my machine. Updating xfsprogs now.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Sun May 11 23:46:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 11 May 2008 23:46:56 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C6kY3O003484 for ; Sun, 11 May 2008 23:46:36 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA15225; Mon, 12 May 2008 16:47:16 +1000 Message-ID: <4827E7F4.7010706@sgi.com> Date: Mon, 12 May 2008 16:47:16 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev@sgi.com, xfs@oss.sgi.com Subject: Re: review: log_filter.patch 018,081,082 pv#981362 References: <48227ef3.WIWE0hYubr4nS8cD%tes@sgi.com> <20080512064115.GF155679365@sgi.com> In-Reply-To: <20080512064115.GF155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15842 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Thu, May 08, 2008 at 02:17:55PM +1000, tes@sgi.com wrote: >> Due to the changes for default mkfs options where we now have >> version 2 inodes, we no longer update the di_onlink field. >> To be consistent with previous output, we filter these values out. >> Also, as part of changes to the inode generation number which uses >> a random num generator, we need to filter out the gen# too. >> >> --Tim >> >> 018.op.irix | 400 +++++++++++------------ >> 018.op.linux | 400 +++++++++++------------ >> 018.trans_inode | 800 +++++++++++++++++++++++------------------------ >> 081.ugquota.trans_inode | 816 ++++++++++++++++++++++++------------------------ >> 082.op.irix | 400 +++++++++++------------ >> 082.op.linux | 400 +++++++++++------------ >> 082.trans_inode | 800 +++++++++++++++++++++++------------------------ >> common.log | 3 >> 8 files changed, 2011 insertions(+), 2008 deletions(-) > > Worth noting is that these tests all still fail on a config that > corrects a problem with the superblock features2 field on mount. > > Probably not worth bothering about - but I thought I'd mention it > as updating the tests didn't fix the failure on my machine. Updating > xfsprogs now.... > > Cheers, > > Dave. :-) Yeah, I had the same failure until I updated mkfs. I had an extra SB_UNIT sb buffer transaction at the start of the log for the features2 correction. I didn't think it was worth bothering about for that interim scenario. --Tim From owner-xfs@oss.sgi.com Mon May 12 00:25:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 00:26:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4C7PdN3012993 for ; Mon, 12 May 2008 00:25:41 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA15976; Mon, 12 May 2008 17:26:23 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4C7QMsT164788173; Mon, 12 May 2008 17:26:22 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4C7QLb463423447; Mon, 12 May 2008 17:26:21 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 17:26:21 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: xfsprogs 2.9.8 gives unaligned access warnings on ia64 Message-ID: <20080512072621.GG155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15843 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Barry, I just upgraded to xfsprogs 2.9.8 and now every time xfs_check or xfs_repair runs I get a bunch of unaligned access warnings. I can't remember what the proevious version was on this machine; might have been 2.9.4. $ sudo ./check 018 [sudo] password for dgc: FSTYP -- xfs (debug) PLATFORM -- Linux/ia64 budgie 2.6.25-rc3-dgc-xfs MKFS_OPTIONS -- -f -bsize=4096 /dev/sdb6 MOUNT_OPTIONS -- /dev/sdb6 /mnt/scratch xfs_db(23565): unaligned access to 0x6000000000041264, ip=0x4000000000062a71 xfs_db(23565): unaligned access to 0x600000000004126c, ip=0x4000000000062a80 xfs_repair(23566): unaligned access to 0x2000000004000e64, ip=0x4000000000080c81 xfs_repair(23566): unaligned access to 0x2000000004000e6c, ip=0x4000000000080c90 xfs_repair(23566): unaligned access to 0x2000000004001664, ip=0x4000000000080c81 018 xfs_db(24234): unaligned access to 0x6000000000041264, ip=0x4000000000062a71 xfs_db(24234): unaligned access to 0x600000000004126c, ip=0x4000000000062a80 xfs_repair(24235): unaligned access to 0x6000000000020264, ip=0x4000000000080c81 xfs_repair(24235): unaligned access to 0x600000000002026c, ip=0x4000000000080c90 xfs_repair(24235): unaligned access to 0x6000000000020a64, ip=0x4000000000080c81 Passed all 1 tests $ sudo xfs_repair -V xfs_repair version 2.9.8 I'm going to turn this warning off manually (systune), but this really needs fixing ASAP. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon May 12 04:01:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 04:01:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4CB10If027379 for ; Mon, 12 May 2008 04:01:02 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA19506; Mon, 12 May 2008 21:01:38 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4CB1asT164508537; Mon, 12 May 2008 21:01:37 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4CB1Y24162101412; Mon, 12 May 2008 21:01:34 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Mon, 12 May 2008 21:01:34 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa 008 takes too long on UML... Message-ID: <20080512110134.GH155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15844 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs With the recent change for reliability with 64k page size made to test 008,the file sizes got much larger. It appears that randholes actually reads the entire file, so this has slowed the test down by a factor of ten (all file sizes were increased by 10x). This means the test is now taking about 18 minutes to run on a UML session, and all the time is spent reading the files. Instead, scale the file size based on the page size. We know how many holes we are trying to produce and the I/O size being used to produce them, so the size of the files can be finely tuned. Assuming a decent random distribution, if the number of blocks in the file is 4x the page size and the I/O size is page sized, this means that every I/O should generate a new hole and we'll only get a small amount of adjacent extents. This has passed over 10 times on ia64 w/ 64k page and another 15 times on UML with 4k page. UML runtime is down from ~1000s to 5s, ia64 runtime is down from ~30s to 7s. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- xfstests/008 | 13 +++++++------ xfstests/008.out | 10 +++++----- 2 files changed, 12 insertions(+), 11 deletions(-) Index: xfs-cmds/xfstests/008 =================================================================== --- xfs-cmds.orig/xfstests/008 2008-04-28 15:57:02.000000000 +1000 +++ xfs-cmds/xfstests/008 2008-05-12 20:43:11.946325031 +1000 @@ -28,7 +28,8 @@ _cleanup() _filter() { - sed -e "s/-b $pgsize/-b PGSIZE/g" + sed -e "s/-b $pgsize/-b PGSIZE/g" \ + -e "s/-l .* -c/-l FSIZE -c/g" } # get standard environment, filters and checks @@ -79,13 +80,13 @@ _setup_testdir rm -f $here/$seq.out.full -_do_test 1 50 "-l 50000000 -c 50 -b $pgsize" -_do_test 2 100 "-l 100000000 -c 100 -b $pgsize" -_do_test 3 100 "-l 100000000 -c 100 -b 512" # test partial pages +_do_test 1 50 "-l `expr 200 \* $pgsize` -c 50 -b $pgsize" +_do_test 2 100 "-l `expr 400 \* $pgsize` -c 100 -b $pgsize" +_do_test 3 100 "-l `expr 400 \* $pgsize` -c 100 -b 512" # test partial pages # rinse, lather, repeat for direct IO -_do_test 4 50 "-d -l 50000000 -c 50 -b $pgsize" -_do_test 5 100 "-d -l 100000000 -c 100 -b $pgsize" +_do_test 4 50 "-d -l `expr 200 \* $pgsize` -c 50 -b $pgsize" +_do_test 5 100 "-d -l `expr 400 \* $pgsize` -c 100 -b $pgsize" # note: direct IO requires page aligned IO # todo: realtime. Index: xfs-cmds/xfstests/008.out =================================================================== --- xfs-cmds.orig/xfstests/008.out 2008-04-28 15:57:02.000000000 +1000 +++ xfs-cmds/xfstests/008.out 2008-05-12 20:41:12.053827580 +1000 @@ -1,21 +1,21 @@ QA output created by 008 -randholes.1 : -l 50000000 -c 50 -b PGSIZE +randholes.1 : -l FSIZE -c 50 -b PGSIZE ------------------------------------------ holes is in range -randholes.2 : -l 100000000 -c 100 -b PGSIZE +randholes.2 : -l FSIZE -c 100 -b PGSIZE ------------------------------------------ holes is in range -randholes.3 : -l 100000000 -c 100 -b 512 +randholes.3 : -l FSIZE -c 100 -b 512 ------------------------------------------ holes is in range -randholes.4 : -d -l 50000000 -c 50 -b PGSIZE +randholes.4 : -d -l FSIZE -c 50 -b PGSIZE ------------------------------------------ holes is in range -randholes.5 : -d -l 100000000 -c 100 -b PGSIZE +randholes.5 : -d -l FSIZE -c 100 -b PGSIZE ------------------------------------------ holes is in range From owner-xfs@oss.sgi.com Mon May 12 09:25:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 09:25:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CGPYiC026466 for ; Mon, 12 May 2008 09:25:37 -0700 X-ASG-Debug-ID: 1210609579-320203db0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.betherenow.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id F21E61143646 for ; Mon, 12 May 2008 09:26:20 -0700 (PDT) Received: from smtp1.betherenow.co.uk (smtp1.betherenow.co.uk [87.194.0.68]) by cuda.sgi.com with SMTP id f9YCFAtGED5IXuAg for ; Mon, 12 May 2008 09:26:20 -0700 (PDT) Received: from damocles.lan (87-194-153-38.bethere.co.uk [87.194.153.38]) by smtp1.betherenow.co.uk (Postfix) with ESMTP id 993CF9809C; Mon, 12 May 2008 17:26:16 +0100 (BST) From: Alistair John Strachan To: Linus Torvalds X-ASG-Orig-Subj: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Date: Mon, 12 May 2008 17:26:15 +0100 User-Agent: KMail/1.9.9 References: In-Reply-To: Cc: xfs@oss.sgi.com, Jens Axboe , neilb@suse.de MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805121726.15576.alistair@devzero.co.uk> X-Barracuda-Connect: smtp1.betherenow.co.uk[87.194.0.68] X-Barracuda-Start-Time: 1210609581 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.1, rules version 3.1.50165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15845 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alistair@devzero.co.uk Precedence: bulk X-list: xfs I've been getting this since -rc1. It's still present in -rc2, so I thought I'd bug some people. Everything seems to be working fine. I'm not sure who's to blame here so I've added a few people to CC; if I've done so in error, sorry for the noise. The taint is from loading a custom (fixed) DSDT which I've been doing for ages, and which shouldn't affect this trace. XFS: correcting sb_features alignment problem XFS mounting filesystem md1 ------------[ cut here ]------------ WARNING: at include/linux/blkdev.h:443 blk_remove_plug+0x60/0x88() Modules linked in: Pid: 1, comm: swapper Tainted: G A 2.6.26-rc2-damocles #2 Call Trace: [] warn_on_slowpath+0x58/0x82 [] ? find_symbol+0x21e/0x236 [] ? __rmqueue+0x1f/0x1c1 [] blk_remove_plug+0x60/0x88 [] raid5_unplug_device+0x31/0xe6 [] get_active_stripe+0x21b/0x4c0 [] ? __wake_up+0x43/0x50 [] ? default_wake_function+0x0/0xf [] make_request+0x4d7/0x675 [] ? mempool_alloc_slab+0x11/0x13 [] ? autoremove_wake_function+0x0/0x38 [] ? mempool_alloc_slab+0x11/0x13 [] generic_make_request+0x1ec/0x227 [] ? __get_free_pages+0x15/0x54 [] submit_bio+0x112/0x11b [] _xfs_buf_ioapply+0x1eb/0x216 [] xfs_buf_iorequest+0x3e/0x65 [] xfs_bdstrat_cb+0x19/0x3b [] xfs_bwrite+0x5f/0xc0 [] xlog_bwrite+0x81/0xac [] xlog_write_log_records+0x1eb/0x228 [] xlog_clear_stale_blocks+0x13a/0x147 [] xlog_find_tail+0x33f/0x3a5 [] xlog_recover+0x19/0x88 [] xfs_log_mount+0xb9/0x10d [] xfs_mountfs+0x252/0x5a2 [] ? kmem_zalloc+0x11/0x2c [] ? xfs_mru_cache_create+0x119/0x166 [] xfs_mount+0x2a1/0x352 [] xfs_fs_fill_super+0xc3/0x1f9 [] get_sb_bdev+0xfe/0x14d [] ? xfs_fs_fill_super+0x0/0x1f9 [] xfs_fs_get_sb+0x13/0x15 [] vfs_kern_mount+0x52/0x99 [] do_kern_mount+0x47/0xe2 [] do_new_mount+0x5f/0x92 [] do_mount+0x1af/0x1de [] ? __alloc_pages+0xb/0xd [] sys_mount+0x89/0xd5 [] mount_block_root+0xda/0x263 [] mount_root+0x56/0x5a [] prepare_namespace+0x11d/0x14a [] kernel_init+0x251/0x267 [] child_rip+0xa/0x12 [] ? kernel_init+0x0/0x267 [] ? child_rip+0x0/0x12 ---[ end trace 693a3c7fd0010c41 ]--- Ending clean XFS mount for filesystem: md1 -- Cheers, Alistair. 137/1 Warrender Park Road, Edinburgh, UK. From owner-xfs@oss.sgi.com Mon May 12 09:40:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 09:40:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CGeGfe027560 for ; Mon, 12 May 2008 09:40:20 -0700 X-ASG-Debug-ID: 1210610460-01f000af0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kernel.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A2FC8158C1C for ; Mon, 12 May 2008 09:41:00 -0700 (PDT) Received: from kernel.dk (brick.kernel.dk [87.55.233.238]) by cuda.sgi.com with ESMTP id NIF7ZThKWZpiB4FJ for ; Mon, 12 May 2008 09:41:00 -0700 (PDT) Received: by kernel.dk (Postfix, from userid 500) id F2560258326; Mon, 12 May 2008 18:40:53 +0200 (CEST) Date: Mon, 12 May 2008 18:40:53 +0200 From: Jens Axboe To: Alistair John Strachan Cc: Linus Torvalds , xfs@oss.sgi.com, neilb@suse.de X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Message-ID: <20080512164053.GD16217@kernel.dk> References: <200805121726.15576.alistair@devzero.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200805121726.15576.alistair@devzero.co.uk> X-Barracuda-Connect: brick.kernel.dk[87.55.233.238] X-Barracuda-Start-Time: 1210610463 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.1, rules version 3.1.50166 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15846 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jens.axboe@oracle.com Precedence: bulk X-list: xfs On Mon, May 12 2008, Alistair John Strachan wrote: > I've been getting this since -rc1. It's still present in -rc2, so I thought > I'd bug some people. Everything seems to be working fine. > > I'm not sure who's to blame here so I've added a few people to CC; if I've > done so in error, sorry for the noise. > > The taint is from loading a custom (fixed) DSDT which I've been doing for > ages, and which shouldn't affect this trace. Neil should have a pending patch for this warning. Don't worry about it :-) -- Jens Axboe From owner-xfs@oss.sgi.com Mon May 12 09:47:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 09:47:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CGlASo028168 for ; Mon, 12 May 2008 09:47:13 -0700 X-ASG-Debug-ID: 1210610877-6aa202fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.linux-foundation.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 892B61142FC1 for ; Mon, 12 May 2008 09:47:57 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id I7xisHlzuajwfvCr for ; Mon, 12 May 2008 09:47:57 -0700 (PDT) Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4CGliIe008355 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 12 May 2008 09:47:46 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4CGlh6J031665; Mon, 12 May 2008 09:47:43 -0700 Date: Mon, 12 May 2008 09:47:43 -0700 (PDT) From: Linus Torvalds To: Alistair John Strachan cc: xfs@oss.sgi.com, Jens Axboe , Neil Brown , Nick Piggin X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) In-Reply-To: <200805121726.15576.alistair@devzero.co.uk> Message-ID: References: <200805121726.15576.alistair@devzero.co.uk> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 X-Barracuda-Connect: smtp1.linux-foundation.org[140.211.169.13] X-Barracuda-Start-Time: 1210610877 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.1, rules version 3.1.50167 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15847 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: torvalds@linux-foundation.org Precedence: bulk X-list: xfs On Mon, 12 May 2008, Alistair John Strachan wrote: > > I've been getting this since -rc1. It's still present in -rc2, so I thought > I'd bug some people. Everything seems to be working fine. Hmm. The problem is that blk_remove_plug() does a non-atomic queue_flag_clear(QUEUE_FLAG_PLUGGED, q); without holding the queue lock. Now, sometimes that's ok, because of higher-level locking on the same queue, so there is no possibility of any races. And yes, this comes through the raid5 layer, and yes, the raid layer holds the 'device_lock' on the raid5_conf_t, so it's all safe from other accesses by that raid5 configuration, but I wonder if at least in theory somebody could access that same device directly. So I do suspect that this whole situation with md needs to be resolved some way. Either the queue is already safe (because of md layer locking), and in that case maybe the queue lock should be changed to point to that md layer lock (or that sanity test simply needs to be removed). Or the queue is unsafe (because non-md users can find it too), and we need to fix the locking. Alternatively, we may just need to totally revert the thing that made the bit operations non-atomic and depend on the locking. This was introduced by Nick in commit 75ad23bc0fcb4f992a5d06982bf0857ab1738e9e ("block: make queue flags non-atomic"), and maybe it simply isn't viable. Anyway, this is not an XFS bug, and no, I do not think you can ever actually find any problems in real life that comes from this. But we do need to resolve it one way or another. (I'm leaving the rest of your report quoted, since I added Nick to the list of Cc's). Linus --- > The taint is from loading a custom (fixed) DSDT which I've been doing for > ages, and which shouldn't affect this trace. > > XFS: correcting sb_features alignment problem > XFS mounting filesystem md1 > ------------[ cut here ]------------ > WARNING: at include/linux/blkdev.h:443 blk_remove_plug+0x60/0x88() > Modules linked in: > Pid: 1, comm: swapper Tainted: G A 2.6.26-rc2-damocles #2 > > Call Trace: > [] warn_on_slowpath+0x58/0x82 > [] ? find_symbol+0x21e/0x236 > [] ? __rmqueue+0x1f/0x1c1 > [] blk_remove_plug+0x60/0x88 > [] raid5_unplug_device+0x31/0xe6 > [] get_active_stripe+0x21b/0x4c0 > [] ? __wake_up+0x43/0x50 > [] ? default_wake_function+0x0/0xf > [] make_request+0x4d7/0x675 > [] ? mempool_alloc_slab+0x11/0x13 > [] ? autoremove_wake_function+0x0/0x38 > [] ? mempool_alloc_slab+0x11/0x13 > [] generic_make_request+0x1ec/0x227 > [] ? __get_free_pages+0x15/0x54 > [] submit_bio+0x112/0x11b > [] _xfs_buf_ioapply+0x1eb/0x216 > [] xfs_buf_iorequest+0x3e/0x65 > [] xfs_bdstrat_cb+0x19/0x3b > [] xfs_bwrite+0x5f/0xc0 > [] xlog_bwrite+0x81/0xac > [] xlog_write_log_records+0x1eb/0x228 > [] xlog_clear_stale_blocks+0x13a/0x147 > [] xlog_find_tail+0x33f/0x3a5 > [] xlog_recover+0x19/0x88 > [] xfs_log_mount+0xb9/0x10d > [] xfs_mountfs+0x252/0x5a2 > [] ? kmem_zalloc+0x11/0x2c > [] ? xfs_mru_cache_create+0x119/0x166 > [] xfs_mount+0x2a1/0x352 > [] xfs_fs_fill_super+0xc3/0x1f9 > [] get_sb_bdev+0xfe/0x14d > [] ? xfs_fs_fill_super+0x0/0x1f9 > [] xfs_fs_get_sb+0x13/0x15 > [] vfs_kern_mount+0x52/0x99 > [] do_kern_mount+0x47/0xe2 > [] do_new_mount+0x5f/0x92 > [] do_mount+0x1af/0x1de > [] ? __alloc_pages+0xb/0xd > [] sys_mount+0x89/0xd5 > [] mount_block_root+0xda/0x263 > [] mount_root+0x56/0x5a > [] prepare_namespace+0x11d/0x14a > [] kernel_init+0x251/0x267 > [] child_rip+0xa/0x12 > [] ? kernel_init+0x0/0x267 > [] ? child_rip+0x0/0x12 > > ---[ end trace 693a3c7fd0010c41 ]--- > Ending clean XFS mount for filesystem: md1 > > -- > Cheers, > Alistair. > > 137/1 Warrender Park Road, Edinburgh, UK. > From owner-xfs@oss.sgi.com Mon May 12 09:48:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 09:48:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CGmea2028353 for ; Mon, 12 May 2008 09:48:43 -0700 X-ASG-Debug-ID: 1210610966-037100e80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from kernel.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B9010158A65 for ; Mon, 12 May 2008 09:49:26 -0700 (PDT) Received: from kernel.dk (brick.kernel.dk [87.55.233.238]) by cuda.sgi.com with ESMTP id 4l4q7iT5FnCTwXCo for ; Mon, 12 May 2008 09:49:26 -0700 (PDT) Received: by kernel.dk (Postfix, from userid 500) id 6A358258329; Mon, 12 May 2008 18:49:20 +0200 (CEST) Date: Mon, 12 May 2008 18:49:20 +0200 From: Jens Axboe To: Linus Torvalds Cc: Alistair John Strachan , xfs@oss.sgi.com, Neil Brown , Nick Piggin X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Message-ID: <20080512164920.GE16217@kernel.dk> References: <200805121726.15576.alistair@devzero.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Barracuda-Connect: brick.kernel.dk[87.55.233.238] X-Barracuda-Start-Time: 1210610967 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.1, rules version 3.1.50168 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15848 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jens.axboe@oracle.com Precedence: bulk X-list: xfs On Mon, May 12 2008, Linus Torvalds wrote: > > > On Mon, 12 May 2008, Alistair John Strachan wrote: > > > > I've been getting this since -rc1. It's still present in -rc2, so I thought > > I'd bug some people. Everything seems to be working fine. > > Hmm. The problem is that blk_remove_plug() does a non-atomic > > queue_flag_clear(QUEUE_FLAG_PLUGGED, q); > > without holding the queue lock. > > Now, sometimes that's ok, because of higher-level locking on the same > queue, so there is no possibility of any races. > > And yes, this comes through the raid5 layer, and yes, the raid layer holds > the 'device_lock' on the raid5_conf_t, so it's all safe from other > accesses by that raid5 configuration, but I wonder if at least in theory > somebody could access that same device directly. > > So I do suspect that this whole situation with md needs to be resolved > some way. Either the queue is already safe (because of md layer locking), > and in that case maybe the queue lock should be changed to point to that > md layer lock (or that sanity test simply needs to be removed). Or the > queue is unsafe (because non-md users can find it too), and we need to fix > the locking. > > Alternatively, we may just need to totally revert the thing that made the > bit operations non-atomic and depend on the locking. This was introduced > by Nick in commit 75ad23bc0fcb4f992a5d06982bf0857ab1738e9e ("block: make > queue flags non-atomic"), and maybe it simply isn't viable. There's been a proposed patch for at least a week, so Neil just needs to send it in... -- Jens Axboe From owner-xfs@oss.sgi.com Mon May 12 15:54:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 15:55:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CMsfVF023432 for ; Mon, 12 May 2008 15:54:47 -0700 X-ASG-Debug-ID: 1210632925-289b03bc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ns.unixsol.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D0ACD157D2F for ; Mon, 12 May 2008 15:55:25 -0700 (PDT) Received: from ns.unixsol.org ([193.110.159.2]) by cuda.sgi.com with ESMTP id DAGNpR1I6NkPV6HW for ; Mon, 12 May 2008 15:55:25 -0700 (PDT) Received: from [85.187.186.121] ([::ffff:85.187.186.121]) (AUTH: CRAM-MD5 gf, SSL: TLSv1/SSLv3,256bits,AES256-SHA) by ns.unixsol.org with esmtp; Tue, 13 May 2008 01:54:55 +0300 id 0013E5AC.4828CABF.00006CEC Message-ID: <4828CAC6.3090402@unixsol.org> Date: Tue, 13 May 2008 01:55:02 +0300 From: Georgi Chorbadzhiyski Organization: Unix Solutions (http://unixsol.org) User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com CC: Linux Kernel Mailing List X-ASG-Orig-Subj: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Unneeded kernel threads (xfs, jfs, gfs2) Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: UNKNOWN[193.110.159.2] X-Barracuda-Start-Time: 1210632927 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1571 1.0000 -1.0610 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.96 X-Barracuda-Spam-Status: No, SCORE=-0.96 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_NONE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50189 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15849 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gf@unixsol.org Precedence: bulk X-list: xfs Hi guys, I know that not all kernel thread users are converted to start only when needed but the following is little annoying specially when I'm not even using jfs, xfs and gfs2. Look at the ps output from a standard distro 2.6.24.5 kernel after a fresh boot: > PID TTY STAT TIME COMMAND > 2 ? S< 0:00 [kthreadd] > 3 ? S< 0:00 \_ [migration/0] > 4 ? S< 0:00 \_ [ksoftirqd/0] > 5 ? S< 0:00 \_ [migration/1] > 6 ? S< 0:00 \_ [ksoftirqd/1] > 7 ? S< 0:00 \_ [events/0] > 8 ? S< 0:00 \_ [events/1] > 9 ? S< 0:00 \_ [khelper] > 102 ? S< 0:00 \_ [kblockd/0] > 103 ? S< 0:00 \_ [kblockd/1] > 106 ? S< 0:00 \_ [kacpid] > 107 ? S< 0:00 \_ [kacpi_notify] > 230 ? S< 0:00 \_ [ata/0] > 231 ? S< 0:00 \_ [ata/1] > 232 ? S< 0:00 \_ [ata_aux] > 233 ? S< 0:00 \_ [ksuspend_usbd] > 239 ? S< 0:00 \_ [khubd] > 242 ? S< 0:00 \_ [kseriod] > 284 ? S 0:00 \_ [pdflush] > 285 ? S 0:00 \_ [pdflush] > 286 ? S< 0:00 \_ [kswapd0] > 326 ? S< 0:00 \_ [aio/0] > 327 ? S< 0:00 \_ [aio/1] > 349 ? S< 0:00 \_ [jfsIO] > 350 ? S< 0:00 \_ [jfsCommit] > 351 ? S< 0:00 \_ [jfsCommit] > 352 ? S< 0:00 \_ [jfsSync] Not needed here, because no jfs partition is in use. > 354 ? S< 0:00 \_ [xfslogd/0] > 355 ? S< 0:00 \_ [xfslogd/1] > 356 ? S< 0:00 \_ [xfsdatad/0] > 357 ? S< 0:00 \_ [xfsdatad/1] > 361 ? S< 0:00 \_ [xfs_mru_cache] Not needed here, because no xfs partition is in use. > 366 ? S< 0:00 \_ [gfs2_scand] > 367 ? S< 0:00 \_ [glock_workqueue] > 368 ? S< 0:00 \_ [glock_workqueue] I dont use gfs2 > 1047 ? S< 0:00 \_ [scsi_tgtd/0] > 1048 ? S< 0:00 \_ [scsi_tgtd/1] > 1118 ? S< 0:00 \_ [scsi_eh_2] > 1120 ? S< 0:00 \_ [scsi_eh_3] > 1122 ? S< 0:00 \_ [scsi_eh_4] > 1124 ? S< 0:00 \_ [scsi_eh_5] > 1133 ? S< 0:00 \_ [exec-osm/0] > 1134 ? S< 0:00 \_ [exec-osm/1] > 1140 ? S< 0:00 \_ [block-osm/0] > 1141 ? S< 0:00 \_ [block-osm/1] What is osm? Can't find anything in kernel config? > 1148 ? S< 0:00 \_ [khpsbpkt] What is this? > 1193 ? S< 0:00 \_ [ksnapd] > 1201 ? S< 0:00 \_ [rpciod/0] > 1202 ? S< 0:00 \_ [rpciod/1] > 1204 ? S< 0:00 \_ [kjournald] > 2448 ? S< 0:00 \_ [kjournald] > 2649 ? S 0:00 \_ [lockd] Kernel config can be found here: http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config -- Georgi Chorbadzhiyski http://georgi.unixsol.org/ From owner-xfs@oss.sgi.com Mon May 12 16:20:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 16:21:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4CNKZBo030096 for ; Mon, 12 May 2008 16:20:38 -0700 X-ASG-Debug-ID: 1210634480-143201dc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sovereign.computergmbh.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A0A5716A24AF for ; Mon, 12 May 2008 16:21:20 -0700 (PDT) Received: from sovereign.computergmbh.de (sovereign.computergmbh.de [85.214.69.204]) by cuda.sgi.com with ESMTP id 8RsuRBLQH1SFnHOB for ; Mon, 12 May 2008 16:21:20 -0700 (PDT) Received: by sovereign.computergmbh.de (Postfix, from userid 25121) id 6C7181803EB72; Tue, 13 May 2008 01:21:19 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by sovereign.computergmbh.de (Postfix) with ESMTP id 622861C00DB1A; Tue, 13 May 2008 01:21:19 +0200 (CEST) Date: Tue, 13 May 2008 01:21:19 +0200 (CEST) From: Jan Engelhardt To: Georgi Chorbadzhiyski cc: xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) In-Reply-To: <4828CAC6.3090402@unixsol.org> Message-ID: References: <4828CAC6.3090402@unixsol.org> User-Agent: Alpine 1.10 (LNX 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Barracuda-Connect: sovereign.computergmbh.de[85.214.69.204] X-Barracuda-Start-Time: 1210634482 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.1, rules version 3.1.50189 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15850 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jengelh@medozas.de Precedence: bulk X-list: xfs On Tuesday 2008-05-13 00:55, Georgi Chorbadzhiyski wrote: > >Not needed here, because no jfs partition is in use. >Not needed here, because no xfs partition is in use. >I dont use gfs2 You miss the best of Linux. So, why not unload the modules? >> 1141 ? S< 0:00 \_ [block-osm/1] > >What is osm? Can't find anything in kernel config? drivers/message/i2o/i2o_block.c:#define OSM_NAME "block-osm" >> 1148 ? S< 0:00 \_ [khpsbpkt] > >What is this? ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread; From owner-xfs@oss.sgi.com Mon May 12 17:57:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 17:57:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D0vHW1003257 for ; Mon, 12 May 2008 17:57:21 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA06513; Tue, 13 May 2008 10:58:01 +1000 To: "David Chinner" , xfs-dev Subject: Re: [patch] xfsqa - fix 17[5-7] "unmount" typo From: "Barry Naujok" Organization: SGI Cc: xfs-oss Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513005436.GQ155679365@sgi.com> Date: Tue, 13 May 2008 10:58:15 +1000 Message-ID: In-Reply-To: <20080513005436.GQ155679365@sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4D0vMW1003268 X-archive-position: 15852 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 13 May 2008 10:54:36 +1000, David Chinner wrote: > 177 fails because mkfs tries to run on a mounted filesystem. > All 17[5-7] have the same problem - "unmount" is not the command > to unmount a filesystem. Looks fine (or looks fie). > Signed-off-by: Dave Chinner > --- > xfstests/175 | 2 +- > xfstests/176 | 2 +- > xfstests/177 | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > Index: xfs-cmds/xfstests/175 > =================================================================== > --- xfs-cmds.orig/xfstests/175 2008-05-08 09:59:28.000000000 +1000 > +++ xfs-cmds/xfstests/175 2008-05-13 10:50:01.581533095 +1000 > @@ -40,7 +40,7 @@ _require_scratch > # test that we have DMAPI support > _dmapi_scratch_mount > -unmount $SCRATCH_MNT > /dev/null 2>&1 > +umount $SCRATCH_MNT > /dev/null 2>&1 > # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ > # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ > Index: xfs-cmds/xfstests/176 > =================================================================== > --- xfs-cmds.orig/xfstests/176 2008-05-08 09:59:28.000000000 +1000 > +++ xfs-cmds/xfstests/176 2008-05-13 10:50:05.281061350 +1000 > @@ -38,7 +38,7 @@ _require_scratch > # test that we have DMAPI support > _dmapi_scratch_mount > -unmount $SCRATCH_MNT > /dev/null 2>&1 > +umount $SCRATCH_MNT > /dev/null 2>&1 > # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ > # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ > Index: xfs-cmds/xfstests/177 > =================================================================== > --- xfs-cmds.orig/xfstests/177 2008-05-08 09:59:28.000000000 +1000 > +++ xfs-cmds/xfstests/177 2008-05-13 10:49:58.181966589 +1000 > @@ -40,7 +40,7 @@ _require_scratch > # test that we have DMAPI support > _dmapi_scratch_mount > -unmount $SCRATCH_MNT > /dev/null 2>&1 > +umount $SCRATCH_MNT > /dev/null 2>&1 > _scratch_mkfs_xfs >/dev/null 2>&1 \ > || _fail "mkfs failed" From owner-xfs@oss.sgi.com Mon May 12 17:53:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 17:54:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D0rsx0002981 for ; Mon, 12 May 2008 17:53:58 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA06449; Tue, 13 May 2008 10:54:38 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4D0sbsT163986750; Tue, 13 May 2008 10:54:38 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4D0saCE165776403; Tue, 13 May 2008 10:54:36 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 13 May 2008 10:54:36 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa - fix 17[5-7] "unmount" typo Message-ID: <20080513005436.GQ155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15851 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs 177 fails because mkfs tries to run on a mounted filesystem. All 17[5-7] have the same problem - "unmount" is not the command to unmount a filesystem. Signed-off-by: Dave Chinner --- xfstests/175 | 2 +- xfstests/176 | 2 +- xfstests/177 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) Index: xfs-cmds/xfstests/175 =================================================================== --- xfs-cmds.orig/xfstests/175 2008-05-08 09:59:28.000000000 +1000 +++ xfs-cmds/xfstests/175 2008-05-13 10:50:01.581533095 +1000 @@ -40,7 +40,7 @@ _require_scratch # test that we have DMAPI support _dmapi_scratch_mount -unmount $SCRATCH_MNT > /dev/null 2>&1 +umount $SCRATCH_MNT > /dev/null 2>&1 # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ Index: xfs-cmds/xfstests/176 =================================================================== --- xfs-cmds.orig/xfstests/176 2008-05-08 09:59:28.000000000 +1000 +++ xfs-cmds/xfstests/176 2008-05-13 10:50:05.281061350 +1000 @@ -38,7 +38,7 @@ _require_scratch # test that we have DMAPI support _dmapi_scratch_mount -unmount $SCRATCH_MNT > /dev/null 2>&1 +umount $SCRATCH_MNT > /dev/null 2>&1 # _test_punch args: blksize extsize_hint filesize "pp1 pp2 pp3" \ # "ps1 ps2 ps3" "pt1 pt2 pt3" "wp1 wp2" "ws1 ws2" \ Index: xfs-cmds/xfstests/177 =================================================================== --- xfs-cmds.orig/xfstests/177 2008-05-08 09:59:28.000000000 +1000 +++ xfs-cmds/xfstests/177 2008-05-13 10:49:58.181966589 +1000 @@ -40,7 +40,7 @@ _require_scratch # test that we have DMAPI support _dmapi_scratch_mount -unmount $SCRATCH_MNT > /dev/null 2>&1 +umount $SCRATCH_MNT > /dev/null 2>&1 _scratch_mkfs_xfs >/dev/null 2>&1 \ || _fail "mkfs failed" From owner-xfs@oss.sgi.com Mon May 12 18:05:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 18:05:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D159Vd004106 for ; Mon, 12 May 2008 18:05:12 -0700 X-ASG-Debug-ID: 1210640756-2216037e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.suse.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51E9616A3989 for ; Mon, 12 May 2008 18:05:56 -0700 (PDT) Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id eANQ7eUlla9d22DJ for ; Mon, 12 May 2008 18:05:56 -0700 (PDT) X-ASG-Whitelist: Client Received: from Relay1.suse.de (relay-ext.suse.de [195.135.221.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 47D74457AA; Tue, 13 May 2008 03:05:55 +0200 (CEST) From: Neil Brown To: Linus Torvalds Date: Tue, 13 May 2008 11:05:42 +1000 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <18472.59750.744829.929828@notabene.brown> Cc: Dan Williams , Jens Axboe , Alistair John Strachan , xfs@oss.sgi.com, Nick Piggin , "Rafael J. Wysocki" , Jacek Luczak , Prakash Punnoor , Linux Kernel list , linux-raid@vger.kernel.org X-ASG-Orig-Subj: [PATCH] Remove blkdev warning triggered by using md. Subject: [PATCH] Remove blkdev warning triggered by using md. In-Reply-To: message from Jens Axboe on Monday May 12 References: <200805121726.15576.alistair@devzero.co.uk> <20080512164920.GE16217@kernel.dk> X-Mailer: VM 7.19 under Emacs 21.4.1 X-face: [Gw_3E*Gng}4rRrKRYotwlE?.2|**#s9Dqueue_lock to point to the appropriate lock. Those personalities which didn't previously use a spin_lock, us q->__queue_lock. So always initialise that lock when allocated. With this in place, setting/clearing of the QUEUE_FLAG_PLUGGED bit will no longer cause warnings as it will be clear that the proper lock is held. Thanks to Dan Williams for review and fixing the silly bugs. Signed-off-by: NeilBrown -- diffstat output --------------- block/blk-core.c | 5 ++--- block/blk-settings.c | 8 +++++++- drivers/md/linear.c | 1 + drivers/md/multipath.c | 1 + drivers/md/raid0.c | 1 + drivers/md/raid1.c | 4 +++- drivers/md/raid10.c | 4 +++- drivers/md/raid5.c | 1 + 8 files changed, 19 insertions(+), 6 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 2987fe4..6a9cc0d 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -482,6 +482,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id) kobject_init(&q->kobj, &blk_queue_ktype); mutex_init(&q->sysfs_lock); + spin_lock_init(&q->__queue_lock); return q; } @@ -544,10 +545,8 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id) * if caller didn't supply a lock, they get per-queue locking with * our embedded lock */ - if (!lock) { - spin_lock_init(&q->__queue_lock); + if (!lock) lock = &q->__queue_lock; - } q->request_fn = rfn; q->prep_rq_fn = NULL; diff --git a/block/blk-settings.c b/block/blk-settings.c index bb93d4c..8dd8641 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -286,8 +286,14 @@ void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b) t->max_hw_segments = min(t->max_hw_segments, b->max_hw_segments); t->max_segment_size = min(t->max_segment_size, b->max_segment_size); t->hardsect_size = max(t->hardsect_size, b->hardsect_size); - if (!test_bit(QUEUE_FLAG_CLUSTER, &b->queue_flags)) + if (!t->queue_lock) + WARN_ON_ONCE(1); + else if (!test_bit(QUEUE_FLAG_CLUSTER, &b->queue_flags)) { + unsigned long flags; + spin_lock_irqsave(t->queue_lock, flags); queue_flag_clear(QUEUE_FLAG_CLUSTER, t); + spin_unlock_irqrestore(t->queue_lock, flags); + } } EXPORT_SYMBOL(blk_queue_stack_limits); diff --git a/drivers/md/linear.c b/drivers/md/linear.c index 0b85117..1074824 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c @@ -250,6 +250,7 @@ static int linear_run (mddev_t *mddev) { linear_conf_t *conf; + mddev->queue->queue_lock = &mddev->queue->__queue_lock; conf = linear_conf(mddev, mddev->raid_disks); if (!conf) diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 42ee1a2..4f4d1f3 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c @@ -417,6 +417,7 @@ static int multipath_run (mddev_t *mddev) * bookkeeping area. [whatever we allocate in multipath_run(), * should be freed in multipath_stop()] */ + mddev->queue->queue_lock = &mddev->queue->__queue_lock; conf = kzalloc(sizeof(multipath_conf_t), GFP_KERNEL); mddev->private = conf; diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 818b482..914c04d 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c @@ -280,6 +280,7 @@ static int raid0_run (mddev_t *mddev) (mddev->chunk_size>>1)-1); blk_queue_max_sectors(mddev->queue, mddev->chunk_size >> 9); blk_queue_segment_boundary(mddev->queue, (mddev->chunk_size>>1) - 1); + mddev->queue->queue_lock = &mddev->queue->__queue_lock; conf = kmalloc(sizeof (raid0_conf_t), GFP_KERNEL); if (!conf) diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 6778b7c..ac409b7 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1935,6 +1935,9 @@ static int run(mddev_t *mddev) if (!conf->r1bio_pool) goto out_no_mem; + spin_lock_init(&conf->device_lock); + mddev->queue->queue_lock = &conf->device_lock; + rdev_for_each(rdev, tmp, mddev) { disk_idx = rdev->raid_disk; if (disk_idx >= mddev->raid_disks @@ -1958,7 +1961,6 @@ static int run(mddev_t *mddev) } conf->raid_disks = mddev->raid_disks; conf->mddev = mddev; - spin_lock_init(&conf->device_lock); INIT_LIST_HEAD(&conf->retry_list); spin_lock_init(&conf->resync_lock); diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index faf3d89..8536ede 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -2082,6 +2082,9 @@ static int run(mddev_t *mddev) goto out_free_conf; } + spin_lock_init(&conf->device_lock); + mddev->queue->queue_lock = &conf->device_lock; + rdev_for_each(rdev, tmp, mddev) { disk_idx = rdev->raid_disk; if (disk_idx >= mddev->raid_disks @@ -2103,7 +2106,6 @@ static int run(mddev_t *mddev) disk->head_position = 0; } - spin_lock_init(&conf->device_lock); INIT_LIST_HEAD(&conf->retry_list); spin_lock_init(&conf->resync_lock); diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 087eee0..4fafc79 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -4256,6 +4256,7 @@ static int run(mddev_t *mddev) goto abort; } spin_lock_init(&conf->device_lock); + mddev->queue->queue_lock = &conf->device_lock; init_waitqueue_head(&conf->wait_for_stripe); init_waitqueue_head(&conf->wait_for_overlap); INIT_LIST_HEAD(&conf->handle_list); From owner-xfs@oss.sgi.com Mon May 12 18:28:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 18:29:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D1Stp9005690 for ; Mon, 12 May 2008 18:28:58 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA07166; Tue, 13 May 2008 11:29:38 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 45EE158C4C29; Tue, 13 May 2008 11:29:38 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 980705 - xfsqa 17[5-7] - fix "unmount" typo Message-Id: <20080513012938.45EE158C4C29@chook.melbourne.sgi.com> Date: Tue, 13 May 2008 11:29:38 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15854 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix silly "unmount" typo in dmapi test. Date: Tue May 13 11:29:01 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: bnaujok@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31069a xfstests/177 - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/177.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h xfstests/175 - 1.3 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/175.diff?r1=text&tr1=1.3&r2=text&tr2=1.2&f=h xfstests/176 - 1.3 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/176.diff?r1=text&tr1=1.3&r2=text&tr2=1.2&f=h - Fix silly "unmount" typo in dmapi test. From owner-xfs@oss.sgi.com Mon May 12 22:29:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 22:29:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D5Sxdl022830 for ; Mon, 12 May 2008 22:29:03 -0700 Received: from cxfsmac10.melbourne.sgi.com (cxfsmac10.melbourne.sgi.com [134.14.55.100]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA11667; Tue, 13 May 2008 15:29:38 +1000 Message-ID: <48292742.8090409@sgi.com> Date: Tue, 13 May 2008 15:29:38 +1000 From: Donald Douwsma User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Georgi Chorbadzhiyski CC: xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> In-Reply-To: <4828CAC6.3090402@unixsol.org> Content-Type: text/plain; charset=windows-1251; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15855 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Georgi Chorbadzhiyski wrote: > Hi guys, I know that not all kernel thread users are converted to > start only when needed but the following is little annoying specially > when I'm not even using jfs, xfs and gfs2. > > Look at the ps output from a standard distro 2.6.24.5 kernel after a > fresh boot: ... > > Kernel config can be found here: > http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config > Your distro is building all of these modules into the kernel. CONFIG_XFS_FS=y CONFIG_JFS_FS=y CONFIG_GFS2_FS=y This isnt exactly standard practice, normally they'd be set to =m and only used if required to mount a filesystem. You may want to ask the slackware people why they chose to do this for their hugexxx.s kernels. Don From owner-xfs@oss.sgi.com Mon May 12 22:50:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 22:50:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D5oMvD024105 for ; Mon, 12 May 2008 22:50:23 -0700 X-ASG-Debug-ID: 1210657868-308c02ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp5-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 50AEE16A721D for ; Mon, 12 May 2008 22:51:09 -0700 (PDT) Received: from smtp5-g19.free.fr (smtp5-g19.free.fr [212.27.42.35]) by cuda.sgi.com with ESMTP id VzernGI891CuPGmH for ; Mon, 12 May 2008 22:51:09 -0700 (PDT) Received: from smtp5-g19.free.fr (localhost.localdomain [127.0.0.1]) by smtp5-g19.free.fr (Postfix) with ESMTP id 5137D3F6169; Tue, 13 May 2008 07:51:08 +0200 (CEST) Received: from olorin (wmh38-1-82-225-54-107.fbx.proxad.net [82.225.54.107]) by smtp5-g19.free.fr (Postfix) with ESMTP id A62C83F61CD; Tue, 13 May 2008 07:51:07 +0200 (CEST) Date: Tue, 13 May 2008 07:51:07 +0200 From: FD Cami To: Donald Douwsma Cc: Georgi Chorbadzhiyski , xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List , volkerdi@slackware.com X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) Message-ID: <20080513075107.2edc44d3@olorin> In-Reply-To: <48292742.8090409@sgi.com> References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> X-Mailer: Claws Mail 3.3.1 (GTK+ 2.12.5; x86_64-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp5-g19.free.fr[212.27.42.35] X-Barracuda-Start-Time: 1210657870 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1967 1.0000 -0.8454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.85 X-Barracuda-Spam-Status: No, SCORE=-0.85 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.1, rules version 3.1.50214 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15856 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: francois.cami@free.fr Precedence: bulk X-list: xfs On Tue, 13 May 2008 15:29:38 +1000 Donald Douwsma wrote: > Georgi Chorbadzhiyski wrote: > > Hi guys, I know that not all kernel thread users are converted to > > start only when needed but the following is little annoying specially > > when I'm not even using jfs, xfs and gfs2. > > > > Look at the ps output from a standard distro 2.6.24.5 kernel after a > > fresh boot: > ... > > > > > Kernel config can be found here: > > http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config > > > > Your distro is building all of these modules into the kernel. > CONFIG_XFS_FS=y > CONFIG_JFS_FS=y > CONFIG_GFS2_FS=y > > This isnt exactly standard practice, normally they'd be set to =m and only > used if required to mount a filesystem. You may want to ask the slackware > people why they chose to do this for their hugexxx.s kernels. To be able to use those filesystems on root partitions without requiring an initrd. Georgi might be interested to use the generic kernel instead of the huge one, it is available there : http://mirrors.unixsol.org/slackware/slackware-12.1/slackware/a/kernel-generic-smp-2.6.24.5_smp-i686-2.tgz Documentation : http://mirrors.unixsol.org/slackware/slackware-12.1/README.TXT http://mirrors.unixsol.org/slackware/slackware-12.1/README.initrd http://mirrors.unixsol.org/slackware/slackware-12.1/RELEASE_NOTES Cheers Francois From owner-xfs@oss.sgi.com Mon May 12 23:23:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 12 May 2008 23:23:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D6NSdt026318 for ; Mon, 12 May 2008 23:23:30 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA12797; Tue, 13 May 2008 16:24:12 +1000 Message-ID: <4829340B.4090708@sgi.com> Date: Tue, 13 May 2008 16:24:11 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [patch] xfsqa 008 takes too long on UML... References: <20080512110134.GH155679365@sgi.com> In-Reply-To: <20080512110134.GH155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15857 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Sounds reasonable to me. Might be nice to have the description as a comment in the test so it is easy to see the thought behind the calculations in the future. --Tim David Chinner wrote: > With the recent change for reliability with 64k page size > made to test 008,the file sizes got much larger. It appears > that randholes actually reads the entire file, so this has > slowed the test down by a factor of ten (all file sizes > were increased by 10x). This means the test is now taking > about 18 minutes to run on a UML session, and all the time > is spent reading the files. > > Instead, scale the file size based on the page size. We know > how many holes we are trying to produce and the I/O size > being used to produce them, so the size of the files can be > finely tuned. Assuming a decent random distribution, if the > number of blocks in the file is 4x the page size and the > I/O size is page sized, this means that every I/O should > generate a new hole and we'll only get a small amount of > adjacent extents. This has passed over 10 times on ia64 > w/ 64k page and another 15 times on UML with 4k page. > > UML runtime is down from ~1000s to 5s, ia64 runtime is down from > ~30s to 7s. > > Cheers, > > Dave. From owner-xfs@oss.sgi.com Tue May 13 01:01:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:01:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_53,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D816nL006485 for ; Tue, 13 May 2008 01:01:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA14884; Tue, 13 May 2008 18:01:53 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 2878758C4C36; Tue, 13 May 2008 18:01:53 +1000 (EST) Message-Id: <20080513080152.911303131@chook.melbourne.sgi.com> References: <20080513075749.477238845@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Tue, 13 May 2008 17:57:52 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Content-Disposition: inline; filename=return_name.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15862 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This implements the code to store the actual filename found during a lookup in the dentry cache and to avoid multiple entries in the dcache pointing to the same inode. To avoid polluting the dcache, we implement a new directory inode operations for lookup. xfs_vn_ci_lookup() interacts directly with the dcache and the code was derived from ntfs_lookup() in fs/ntfs/namei.c. The "actual name" is only allocated and returned for a case- insensitive match and not an actual match. Another unusual interaction with the dcache is not storing negative dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT is returned. During the VFS lookup, if a dentry returned has no inode, dput is called and ENOENT is returned. By not doing a d_add, this actually removes it completely from the dcache to be reused. create/rename have to be modified to support unhashed dentries being passed in. Signed-off-by: Barry Naujok --- fs/dcache.c | 104 ++++++++++++++++++++++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_export.c | 2 fs/xfs/linux-2.6/xfs_iops.c | 61 ++++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_iops.h | 1 fs/xfs/xfs_da_btree.h | 6 ++ fs/xfs/xfs_dir2.c | 40 +++++++++++++++- fs/xfs/xfs_dir2.h | 6 ++ fs/xfs/xfs_dir2_block.c | 9 ++- fs/xfs/xfs_dir2_leaf.c | 5 +- fs/xfs/xfs_dir2_node.c | 16 ++++-- fs/xfs/xfs_dir2_sf.c | 12 ++-- fs/xfs/xfs_vnodeops.c | 18 +++++-- fs/xfs/xfs_vnodeops.h | 2 include/linux/dcache.h | 1 14 files changed, 256 insertions(+), 27 deletions(-) Index: kern_ci/fs/dcache.c =================================================================== --- kern_ci.orig/fs/dcache.c +++ kern_ci/fs/dcache.c @@ -1191,6 +1191,109 @@ struct dentry *d_splice_alias(struct ino return new; } +/** + * d_add_ci - lookup or allocate new dentry with case-exact name + * @inode: the inode case-insensitive lookup has found + * @dentry: the negative dentry that was passed to the parent's lookup func + * @name: the case-exact name to be associated with the returned dentry + * + * This is to avoid filling the dcache with case-insensitive names to the + * same inode, only the actual correct case is stored in the dcache for + * case-insensitive filesystems. + * + * For a case-insensitive lookup match and if the the case-exact dentry + * already exists in in the dcache, use it and return it. + * + * If no entry exists with the exact case name, allocate new dentry with + * the exact case, and return the spliced entry. + */ + +struct dentry *d_add_ci(struct inode *inode, struct dentry *dentry, + struct qstr *name) +{ + int error; + struct dentry *found; + struct dentry *new; + + /* Does a dentry matching the name exist already? */ + found = d_hash_and_lookup(dentry->d_parent, name); + /* If not, create it now and return */ + if (!found) { + new = d_alloc(dentry->d_parent, name); + if (!new) { + error = -ENOMEM; + goto err_out; + } + found = d_splice_alias(inode, new); + if (found) { + dput(new); + return found; + } + return new; + } + /* Matching dentry exists, check if it is negative. */ + if (found->d_inode) { + if (unlikely(found->d_inode != inode)) { + /* This can't happen because bad inodes are unhashed. */ + BUG_ON(!is_bad_inode(inode)); + BUG_ON(!is_bad_inode(found->d_inode)); + } + /* + * Already have the inode and the dentry attached, decrement + * the reference count to balance the iget() done + * earlier on. We found the dentry using d_lookup() so it + * cannot be disconnected and thus we do not need to worry + * about any NFS/disconnectedness issues here. + */ + iput(inode); + return found; + } + /* + * Negative dentry: instantiate it unless the inode is a directory and + * has a 'disconnected' dentry (i.e. IS_ROOT and DCACHE_DISCONNECTED), + * in which case d_move() that in place of the found dentry. + */ + if (!S_ISDIR(inode->i_mode)) { + /* Not a directory; everything is easy. */ + d_instantiate(found, inode); + return found; + } + spin_lock(&dcache_lock); + if (list_empty(&inode->i_dentry)) { + /* + * Directory without a 'disconnected' dentry; we need to do + * d_instantiate() by hand because it takes dcache_lock which + * we already hold. + */ + list_add(&found->d_alias, &inode->i_dentry); + found->d_inode = inode; + spin_unlock(&dcache_lock); + security_d_instantiate(found, inode); + return found; + } + /* + * Directory with a 'disconnected' dentry; get a reference to the + * 'disconnected' dentry. + */ + new = list_entry(inode->i_dentry.next, struct dentry, d_alias); + dget_locked(new); + spin_unlock(&dcache_lock); + /* Do security vodoo. */ + security_d_instantiate(found, inode); + /* Move new in place of found. */ + d_move(new, found); + /* Balance the iget() we did above. */ + iput(inode); + /* Throw away found. */ + dput(found); + /* Use new as the actual dentry. */ + return new; + +err_out: + iput(inode); + return ERR_PTR(error); +} + /** * d_lookup - search for a dentry @@ -2178,6 +2281,7 @@ EXPORT_SYMBOL(d_path); EXPORT_SYMBOL(d_prune_aliases); EXPORT_SYMBOL(d_rehash); EXPORT_SYMBOL(d_splice_alias); +EXPORT_SYMBOL(d_add_ci); EXPORT_SYMBOL(d_validate); EXPORT_SYMBOL(dget_locked); EXPORT_SYMBOL(dput); Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -215,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); + error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip, NULL); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -389,7 +389,7 @@ xfs_vn_lookup( return ERR_PTR(-ENAMETOOLONG); xfs_dentry_to_name(&name, dentry); - error = xfs_lookup(XFS_I(dir), &name, &cip); + error = xfs_lookup(XFS_I(dir), &name, &cip, NULL); if (unlikely(error)) { if (unlikely(error != ENOENT)) return ERR_PTR(-error); @@ -400,6 +400,46 @@ xfs_vn_lookup( return d_splice_alias(cip->i_vnode, dentry); } +STATIC struct dentry * +xfs_vn_ci_lookup( + struct inode *dir, + struct dentry *dentry, + struct nameidata *nd) +{ + struct xfs_inode *ip; + struct xfs_name xname; + struct qstr dname; + int ci_match = 0; + int error; + + if (dentry->d_name.len >= MAXNAMELEN) + return ERR_PTR(-ENAMETOOLONG); + + xfs_dentry_to_name(&xname, dentry); + error = xfs_lookup(XFS_I(dir), &xname, &ip, &ci_match); + if (unlikely(error)) { + if (unlikely(error != ENOENT)) + return ERR_PTR(-error); + /* + * don't d_add dentry, __link_path_walk will dput the + * dentry if its inode is NULL which means the negative + * dentry will be destroyed rather than kept around. + */ + return NULL; + } + + /* if exact match, just splice and exit */ + if (!ci_match) + return d_splice_alias(ip->i_vnode, dentry); + + /* else case-insensitive match... */ + dname.name = xname.name; + dname.len = xname.len; + dentry = d_add_ci(ip->i_vnode, dentry, &dname); + kmem_free(xname.name, xname.len); + return dentry; +} + STATIC int xfs_vn_link( struct dentry *old_dentry, @@ -911,6 +951,25 @@ const struct inode_operations xfs_dir_in .removexattr = xfs_vn_removexattr, }; +const struct inode_operations xfs_dir_ci_inode_operations = { + .create = xfs_vn_create, + .lookup = xfs_vn_ci_lookup, + .link = xfs_vn_link, + .unlink = xfs_vn_unlink, + .symlink = xfs_vn_symlink, + .mkdir = xfs_vn_mkdir, + .rmdir = xfs_vn_rmdir, + .mknod = xfs_vn_mknod, + .rename = xfs_vn_rename, + .permission = xfs_vn_permission, + .getattr = xfs_vn_getattr, + .setattr = xfs_vn_setattr, + .setxattr = xfs_vn_setxattr, + .getxattr = xfs_vn_getxattr, + .listxattr = xfs_vn_listxattr, + .removexattr = xfs_vn_removexattr, +}; + const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.h +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.h @@ -20,6 +20,7 @@ extern const struct inode_operations xfs_inode_operations; extern const struct inode_operations xfs_dir_inode_operations; +extern const struct inode_operations xfs_dir_ci_inode_operations; extern const struct inode_operations xfs_symlink_inode_operations; extern const struct file_operations xfs_file_operations; Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -143,6 +143,7 @@ typedef struct xfs_da_args { #define XFS_DA_OP_RENAME 0x0002 /* this is an atomic rename op */ #define XFS_DA_OP_ADDNAME 0x0004 /* this is an add operation */ #define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ +#define XFS_DA_OP_CILOOKUP 0x0010 /* lookup to return CI name if found */ static inline int xfs_da_isjustcheck_op(struct xfs_da_args *args) { @@ -164,6 +165,11 @@ static inline int xfs_da_isoknoent_op(st return args->op_flags & XFS_DA_OP_OKNOENT; } +static inline int xfs_da_iscilookup_op(struct xfs_da_args *args) +{ + return args->op_flags & XFS_DA_OP_CILOOKUP; +} + /* * Structure to describe buffer(s) for a block. * This is needed in the directory version 2 format case, when Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -193,14 +193,42 @@ xfs_dir_createname( } /* + * If doing a CI lookup and case-insensitive match, dup actual name into + * args.value. Return EEXIST for success (ie. name found) or an error. + */ +int +xfs_dir_cilookup_result( + struct xfs_da_args *args, + const char *name, + int len) +{ + if (args->cmpresult == XFS_CMP_DIFFERENT) + return ENOENT; + if (args->cmpresult != XFS_CMP_CASE || !xfs_da_iscilookup_op(args)) + return EEXIST; + + args->value = kmem_alloc(len, KM_MAYFAIL); + if (!args->value) + return ENOMEM; + + memcpy(args->value, name, len); + args->valuelen = len; + return EEXIST; +} + +/* * Lookup a name in a directory, give back the inode number. + * If ci_match is not NULL, sets whether a CI match occurred of not, and + * if so, return the actual name in name. */ + int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, struct xfs_name *name, - xfs_ino_t *inum) /* out: inode number */ + xfs_ino_t *inum, /* out: inode number */ + int *ci_match) /* out: CI match occurred */ { xfs_da_args_t args; int rval; @@ -217,6 +245,8 @@ xfs_dir_lookup( args.whichfork = XFS_DATA_FORK; args.trans = tp; args.op_flags = XFS_DA_OP_OKNOENT; + if (ci_match) + args.op_flags |= XFS_DA_OP_CILOOKUP; args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) @@ -233,8 +263,14 @@ xfs_dir_lookup( rval = xfs_dir2_node_lookup(&args); if (rval == EEXIST) rval = 0; - if (rval == 0) + if (!rval) { *inum = args.inumber; + if (ci_match) { + *ci_match = args.cmpresult == XFS_CMP_CASE; + name->name = args.value; + name->len = args.valuelen; + } + } return rval; } Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -74,7 +74,8 @@ extern int xfs_dir_createname(struct xfs xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - struct xfs_name *name, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum, + int *ci_match); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, @@ -99,4 +100,7 @@ extern int xfs_dir2_isleaf(struct xfs_tr extern int xfs_dir2_shrink_inode(struct xfs_da_args *args, xfs_dir2_db_t db, struct xfs_dabuf *bp); +extern int xfs_dir_cilookup_result(struct xfs_da_args *args, const char *name, + int len); + #endif /* __XFS_DIR2_H__ */ Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -610,14 +610,15 @@ xfs_dir2_block_lookup( /* * Get the offset from the leaf entry, to point to the data. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)block + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); + dep = (xfs_dir2_data_entry_t *)((char *)block + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); /* - * Fill in inode number, release the block. + * Fill in inode number, CI name if appropriate, release the block. */ args->inumber = be64_to_cpu(dep->inumber); + error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); xfs_da_brelse(args->trans, bp); - return XFS_ERROR(EEXIST); + return XFS_ERROR(error); } /* Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1298,12 +1298,13 @@ xfs_dir2_leaf_lookup( ((char *)dbp->data + xfs_dir2_dataptr_to_off(dp->i_mount, be32_to_cpu(lep->address))); /* - * Return the found inode number. + * Return the found inode number & CI name if appropriate */ args->inumber = be64_to_cpu(dep->inumber); + error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); - return XFS_ERROR(EEXIST); + return XFS_ERROR(error); } /* Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -549,7 +549,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_dir2_data_entry_t *dep; /* data block entry */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ - int di; /* data entry index */ + int di = -1; /* data entry index */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ @@ -577,6 +577,7 @@ xfs_dir2_leafn_lookup_for_entry( if (state->extravalid) { curbp = state->extrablk.bp; curdb = state->extrablk.blkno; + di = state->extrablk.index; } /* * Loop over leaf entries with the right hash value. @@ -637,7 +638,6 @@ xfs_dir2_leafn_lookup_for_entry( } /* Didn't find an exact match. */ error = ENOENT; - di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || xfs_da_isoknoent_op(args)); out: @@ -652,7 +652,7 @@ out: state->extravalid = 0; } /* - * Return the index, that will be the insertion point. + * Return the index, that will be the deletion point for remove/replace. */ *indexp = index; return XFS_ERROR(error); @@ -1819,8 +1819,14 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; - else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) - rval = EEXIST; /* a case-insensitive match was found */ + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { + /* If a CI match, dup the actual name and return EEXIST */ + xfs_dir2_data_entry_t *dep; + + dep = (xfs_dir2_data_entry_t *)((char *)state->extrablk.bp-> + data + state->extrablk.index); + rval = xfs_dir_cilookup_result(args, dep->name, dep->namelen); + } /* * Release the btree blocks and leaf block. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -815,6 +815,7 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ enum xfs_dacmp cmp; /* comparison result */ + xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -852,6 +853,7 @@ xfs_dir2_sf_lookup( /* * Loop over all the entries trying to match ours. */ + ci_sfep = NULL; for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { /* @@ -867,15 +869,13 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_inumberp(sfep)); if (cmp == XFS_CMP_EXACT) return XFS_ERROR(EEXIST); + ci_sfep = sfep; } } ASSERT(xfs_da_isoknoent_op(args)); - /* - * Here, we can only be doing a lookup (not a rename or replace). - * If a case-insensitive match was found earlier, return "found". - */ - if (args->cmpresult == XFS_CMP_CASE) - return XFS_ERROR(EEXIST); + if (ci_sfep) + return XFS_ERROR(xfs_dir_cilookup_result(args, + ci_sfep->name, ci_sfep->namelen)); /* * Didn't find it. */ Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1629,12 +1629,19 @@ xfs_inactive( return VN_INACTIVE_CACHE; } - +/* + * Lookups up an inode from "name". If ci_match is not NULL, then name->name + * will be replaced. If a CI match is found, name->name will point to a the + * actual name (caller must free) and ci_match is set to 1. + * The caller of xfs_lookup must call xfs_name_free(name->name) if + * ci_match in non-NULL. If no CI match is found, name->name will be NULL. + */ int xfs_lookup( xfs_inode_t *dp, struct xfs_name *name, - xfs_inode_t **ipp) + xfs_inode_t **ipp, + int *ci_match) { xfs_ino_t inum; int error; @@ -1646,15 +1653,18 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup(NULL, dp, name, &inum); + error = xfs_dir_lookup(NULL, dp, name, &inum, ci_match); xfs_iunlock_map_shared(dp, lock_mode); if (error) goto out; error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); - if (error) + if (error) { + if (ci_match && *ci_match) + kmem_free(name->name, name->len); goto out; + } xfs_itrace_ref(*ipp); return 0; Index: kern_ci/fs/xfs/xfs_vnodeops.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -23,7 +23,7 @@ int xfs_fsync(struct xfs_inode *ip, int int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, - struct xfs_inode **ipp); + struct xfs_inode **ipp, int *ci_match); int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, Index: kern_ci/include/linux/dcache.h =================================================================== --- kern_ci.orig/include/linux/dcache.h +++ kern_ci/include/linux/dcache.h @@ -231,6 +231,7 @@ extern void d_delete(struct dentry *); extern struct dentry * d_alloc(struct dentry *, const struct qstr *); extern struct dentry * d_alloc_anon(struct inode *); extern struct dentry * d_splice_alias(struct inode *, struct dentry *); +extern struct dentry * d_add_ci(struct inode *, struct dentry *, struct qstr *); extern void shrink_dcache_sb(struct super_block *); extern void shrink_dcache_parent(struct dentry *); extern void shrink_dcache_for_umount(struct super_block *); -- From owner-xfs@oss.sgi.com Tue May 13 01:01:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:01:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D817vl006486 for ; Tue, 13 May 2008 01:01:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA14886; Tue, 13 May 2008 18:01:53 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 6EDA158C4C37; Tue, 13 May 2008 18:01:53 +1000 (EST) Message-Id: <20080513080153.184936637@chook.melbourne.sgi.com> References: <20080513075749.477238845@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Tue, 13 May 2008 17:57:53 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 4/4] XFS: ASCII case-insensitive support Content-Disposition: inline; filename=ascii_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15860 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Implement ASCII case-insensitive support. It's primary purpose is for supporting existing filesystems that already use this case-insensitive mode migrated from IRIX. But, if you only need ASCII-only case-insensitive support (ie. English only) and will never use another language, then this mode is perfectly adequate. ASCII-CI is implemented by generating hashes based on lower-case letters and doing lower-case compares. It implements a new xfs_nameops vector for doing the hashes and comparisons for all filename operations. To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 5 +++- fs/xfs/xfs_dir2.c | 52 ++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_fs.h | 1 fs/xfs/xfs_fsops.c | 4 ++- fs/xfs/xfs_sb.h | 10 +++++++- 6 files changed, 69 insertions(+), 4 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -76,6 +76,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -565,7 +565,10 @@ xfs_set_inodeops( inode->i_mapping->a_ops = &xfs_address_space_operations; break; case S_IFDIR: - inode->i_op = &xfs_dir_inode_operations; + if (xfs_sb_version_hasoldci(&XFS_M(inode->i_sb)->m_sb)) + inode->i_op = &xfs_dir_ci_inode_operations; + else + inode->i_op = &xfs_dir_inode_operations; inode->i_fop = &xfs_dir_file_operations; break; case S_IFLNK: Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -48,6 +48,53 @@ struct xfs_name xfs_name_dotdot = {"..", extern const struct xfs_nameops xfs_default_nameops; +/* + * V1/OLDCI case-insensitive support for directories that was used in IRIX. + * + * This is ASCII only case support, ie. A-Z. + */ +STATIC xfs_dahash_t +xfs_ascii_ci_hashname( + struct xfs_name *name) +{ + xfs_dahash_t hash; + int i; + + for (i = 0, hash = 0; i < name->len; i++) + hash = tolower(name->name[i]) ^ rol32(hash, 7); + + return hash; +} + +STATIC enum xfs_dacmp +xfs_ascii_ci_compname( + struct xfs_da_args *args, + const char *name, + int len) +{ + enum xfs_dacmp result; + int i; + + if (args->namelen != len) + return XFS_CMP_DIFFERENT; + + result = XFS_CMP_EXACT; + for (i = 0; i < len; i++) { + if (args->name[i] == name[i]) + continue; + if (tolower(args->name[i]) != tolower(name[i])) + return XFS_CMP_DIFFERENT; + result = XFS_CMP_CASE; + } + + return result; +} + +static struct xfs_nameops xfs_ascii_ci_nameops = { + .hashname = xfs_ascii_ci_hashname, + .compname = xfs_ascii_ci_compname, +}; + void xfs_dir_mount( xfs_mount_t *mp) @@ -67,7 +114,10 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - mp->m_dirnameops = &xfs_default_nameops; + if (xfs_sb_version_hasoldci(&mp->m_sb)) + mp->m_dirnameops = &xfs_ascii_ci_nameops; + else + mp->m_dirnameops = &xfs_default_nameops; } /* Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -239,6 +239,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -95,6 +95,8 @@ xfs_fs_geometry( XFS_FSOP_GEOM_FLAGS_DIRV2 : 0) | (xfs_sb_version_hassector(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_SECTOR : 0) | + (xfs_sb_version_hasoldci(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_DIRV2CI : 0) | (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? @@ -625,7 +627,7 @@ xfs_fs_goingdown( xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); thaw_bdev(sb->s_bdev, sb); } - + break; } case XFS_FSOP_GOING_FLAGS_LOGFLUSH: Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_BORGBIT 0x4000 /* ASCII only case-insens. */ #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_BORGBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -437,6 +439,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } +static inline int xfs_sb_version_hasoldci(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); +} + static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ -- From owner-xfs@oss.sgi.com Tue May 13 01:01:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:01:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_35, J_CHICKENPOX_42,J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_55, J_CHICKENPOX_57,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D816cf006484 for ; Tue, 13 May 2008 01:01:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA14882; Tue, 13 May 2008 18:01:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id D93C858C4C35; Tue, 13 May 2008 18:01:52 +1000 (EST) Message-Id: <20080513080152.598022276@chook.melbourne.sgi.com> References: <20080513075749.477238845@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Tue, 13 May 2008 17:57:51 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 2/4] XFS: add op_flags field and helpers to xfs_da_args Content-Disposition: inline; filename=additional_da_args_flag.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15861 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs The end of the xfs_da_args structure has 4 unsigned char fields for true/false information on directory and attr operations using the xfs_da_args structure. The following converts these 4 into a op_flags field that uses the first 4 bits for these fields and allows expansion for future operation information (eg. case-insensitive lookup request). There is also a bit of EOL whitespace cleanup too. Signed-off-by: Barry Naujok --- fs/xfs/xfs_attr.c | 11 ++++------ fs/xfs/xfs_attr_leaf.c | 52 ++++++++++++++++++++++++------------------------ fs/xfs/xfs_da_btree.c | 2 - fs/xfs/xfs_da_btree.h | 33 ++++++++++++++++++++++++++---- fs/xfs/xfs_dir2.c | 12 +++++------ fs/xfs/xfs_dir2_block.c | 10 ++++----- fs/xfs/xfs_dir2_leaf.c | 6 ++--- fs/xfs/xfs_dir2_node.c | 15 +++++++------ fs/xfs/xfs_dir2_sf.c | 8 +++---- fs/xfs/xfs_dir2_trace.c | 19 +++++++++-------- fs/xfs/xfsidbg.c | 13 ++++++------ 11 files changed, 105 insertions(+), 76 deletions(-) Index: kern_ci/fs/xfs/xfs_attr.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -241,8 +241,7 @@ xfs_attr_set_int(xfs_inode_t *dp, struct args.firstblock = &firstblock; args.flist = &flist; args.whichfork = XFS_ATTR_FORK; - args.addname = 1; - args.oknoent = 1; + args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; /* * Determine space new attribute will use, and if it would be @@ -974,7 +973,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *arg xfs_da_brelse(args->trans, bp); return(retval); } - args->rename = 1; /* an atomic rename */ + args->op_flags |= XFS_DA_OP_RENAME; /* an atomic rename */ args->blkno2 = args->blkno; /* set 2nd entry info*/ args->index2 = args->index; args->rmtblkno2 = args->rmtblkno; @@ -1054,7 +1053,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *arg * so that one disappears and one appears atomically. Then we * must remove the "old" attribute/value pair. */ - if (args->rename) { + if (xfs_da_isrename_op(args)) { /* * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. @@ -1307,7 +1306,7 @@ restart: } else if (retval == EEXIST) { if (args->flags & ATTR_CREATE) goto out; - args->rename = 1; /* atomic rename op */ + args->op_flags |= XFS_DA_OP_RENAME; /* atomic rename op */ args->blkno2 = args->blkno; /* set 2nd entry info*/ args->index2 = args->index; args->rmtblkno2 = args->rmtblkno; @@ -1425,7 +1424,7 @@ restart: * so that one disappears and one appears atomically. Then we * must remove the "old" attribute/value pair. */ - if (args->rename) { + if (xfs_da_isrename_op(args)) { /* * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. Index: kern_ci/fs/xfs/xfs_attr_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr_leaf.c +++ kern_ci/fs/xfs/xfs_attr_leaf.c @@ -150,7 +150,7 @@ xfs_attr_shortform_bytesfit(xfs_inode_t int offset; int minforkoff; /* lower limit on valid forkoff locations */ int maxforkoff; /* upper limit on valid forkoff locations */ - int dsize; + int dsize; xfs_mount_t *mp = dp->i_mount; offset = (XFS_LITINO(mp) - bytes) >> 3; /* rounded down */ @@ -171,39 +171,39 @@ xfs_attr_shortform_bytesfit(xfs_inode_t } dsize = dp->i_df.if_bytes; - + switch (dp->i_d.di_format) { case XFS_DINODE_FMT_EXTENTS: - /* - * If there is no attr fork and the data fork is extents, - * determine if creating the default attr fork will result - * in the extents form migrating to btree. If so, the - * minimum offset only needs to be the space required for + /* + * If there is no attr fork and the data fork is extents, + * determine if creating the default attr fork will result + * in the extents form migrating to btree. If so, the + * minimum offset only needs to be the space required for * the btree root. - */ + */ if (!dp->i_d.di_forkoff && dp->i_df.if_bytes > mp->m_attroffset) dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS); break; - + case XFS_DINODE_FMT_BTREE: /* * If have data btree then keep forkoff if we have one, - * otherwise we are adding a new attr, so then we set - * minforkoff to where the btree root can finish so we have + * otherwise we are adding a new attr, so then we set + * minforkoff to where the btree root can finish so we have * plenty of room for attrs */ if (dp->i_d.di_forkoff) { - if (offset < dp->i_d.di_forkoff) + if (offset < dp->i_d.di_forkoff) return 0; - else + else return dp->i_d.di_forkoff; } else dsize = XFS_BMAP_BROOT_SPACE(dp->i_df.if_broot); break; } - - /* - * A data fork btree root must have space for at least + + /* + * A data fork btree root must have space for at least * MINDBTPTRS key/ptr pairs if the data fork is small or empty. */ minforkoff = MAX(dsize, XFS_BMDR_SPACE_CALC(MINDBTPTRS)); @@ -369,9 +369,10 @@ xfs_attr_shortform_remove(xfs_da_args_t * Fix up the start offset of the attribute fork */ totsize -= size; - if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname && - (mp->m_flags & XFS_MOUNT_ATTR2) && - (dp->i_d.di_format != XFS_DINODE_FMT_BTREE)) { + if (totsize == sizeof(xfs_attr_sf_hdr_t) && + !xfs_da_isaddname_op(args) && + (mp->m_flags & XFS_MOUNT_ATTR2) && + (dp->i_d.di_format != XFS_DINODE_FMT_BTREE)) { /* * Last attribute now removed, revert to original * inode format making all literal area available @@ -389,9 +390,10 @@ xfs_attr_shortform_remove(xfs_da_args_t xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); ASSERT(dp->i_d.di_forkoff); - ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname || - !(mp->m_flags & XFS_MOUNT_ATTR2) || - dp->i_d.di_format == XFS_DINODE_FMT_BTREE); + ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || + xfs_da_isaddname_op(args) || + !(mp->m_flags & XFS_MOUNT_ATTR2) || + dp->i_d.di_format == XFS_DINODE_FMT_BTREE); dp->i_afp->if_ext_max = XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); dp->i_df.if_ext_max = @@ -531,7 +533,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t nargs.total = args->total; nargs.whichfork = XFS_ATTR_FORK; nargs.trans = args->trans; - nargs.oknoent = 1; + nargs.op_flags = XFS_DA_OP_OKNOENT; sfe = &sf->list[0]; for (i = 0; i < sf->hdr.count; i++) { @@ -853,7 +855,7 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t * nargs.total = args->total; nargs.whichfork = XFS_ATTR_FORK; nargs.trans = args->trans; - nargs.oknoent = 1; + nargs.op_flags = XFS_DA_OP_OKNOENT; entry = &leaf->entries[0]; for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) { if (entry->flags & XFS_ATTR_INCOMPLETE) @@ -1155,7 +1157,7 @@ xfs_attr_leaf_add_work(xfs_dabuf_t *bp, entry->hashval = cpu_to_be32(args->hashval); entry->flags = tmp ? XFS_ATTR_LOCAL : 0; entry->flags |= XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags); - if (args->rename) { + if (xfs_da_isrename_op(args)) { entry->flags |= XFS_ATTR_INCOMPLETE; if ((args->blkno2 == args->blkno) && (args->index2 <= args->index)) { Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1431,7 +1431,7 @@ xfs_da_path_shift(xfs_da_state_t *state, } if (level < 0) { *result = XFS_ERROR(ENOENT); /* we're out of our tree */ - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); return(0); } Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -132,14 +132,39 @@ typedef struct xfs_da_args { int index2; /* index of 2nd attr in blk */ xfs_dablk_t rmtblkno2; /* remote attr value starting blkno */ int rmtblkcnt2; /* remote attr value block count */ - unsigned char justcheck; /* T/F: check for ok with no space */ - unsigned char rename; /* T/F: this is an atomic rename op */ - unsigned char addname; /* T/F: this is an add operation */ - unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + int op_flags; /* operation flags */ enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* + * Operation flags: + */ +#define XFS_DA_OP_JUSTCHECK 0x0001 /* check for ok with no space */ +#define XFS_DA_OP_RENAME 0x0002 /* this is an atomic rename op */ +#define XFS_DA_OP_ADDNAME 0x0004 /* this is an add operation */ +#define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ + +static inline int xfs_da_isjustcheck_op(struct xfs_da_args *args) +{ + return args->op_flags & XFS_DA_OP_JUSTCHECK; +} + +static inline int xfs_da_isrename_op(struct xfs_da_args *args) +{ + return args->op_flags & XFS_DA_OP_RENAME; +} + +static inline int xfs_da_isaddname_op(struct xfs_da_args *args) +{ + return args->op_flags & XFS_DA_OP_ADDNAME; +} + +static inline int xfs_da_isoknoent_op(struct xfs_da_args *args) +{ + return args->op_flags & XFS_DA_OP_OKNOENT; +} + +/* * Structure to describe buffer(s) for a block. * This is needed in the directory version 2 format case, when * multiple non-contiguous fsblocks might be needed to cover one Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -175,8 +175,7 @@ xfs_dir_createname( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = 0; - args.addname = args.oknoent = 1; + args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_addname(&args); @@ -217,7 +216,7 @@ xfs_dir_lookup( args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.oknoent = 1; + args.op_flags = XFS_DA_OP_OKNOENT; args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) @@ -269,7 +268,7 @@ xfs_dir_removename( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 0; + args.op_flags = 0; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_removename(&args); @@ -352,7 +351,7 @@ xfs_dir_replace( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 0; + args.op_flags = 0; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_replace(&args); @@ -396,7 +395,8 @@ xfs_dir_canenter( args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 1; + args.op_flags = XFS_DA_OP_JUSTCHECK | XFS_DA_OP_ADDNAME | + XFS_DA_OP_OKNOENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_addname(&args); Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -215,7 +215,7 @@ xfs_dir2_block_addname( /* * If this isn't a real add, we're done with the buffer. */ - if (args->justcheck) + if (xfs_da_isjustcheck_op(args)) xfs_da_brelse(tp, bp); /* * If we don't have space for the new entry & leaf ... @@ -225,7 +225,7 @@ xfs_dir2_block_addname( * Not trying to actually do anything, or don't have * a space reservation: return no-space. */ - if (args->justcheck || args->total == 0) + if (xfs_da_isjustcheck_op(args) || args->total == 0) return XFS_ERROR(ENOSPC); /* * Convert to the next larger format. @@ -240,7 +240,7 @@ xfs_dir2_block_addname( /* * Just checking, and it would work, so say so. */ - if (args->justcheck) + if (xfs_da_isjustcheck_op(args)) return 0; needlog = needscan = 0; /* @@ -674,7 +674,7 @@ xfs_dir2_block_lookup_int( else high = mid - 1; if (low > high) { - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -713,7 +713,7 @@ xfs_dir2_block_lookup_int( } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, return success. Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -276,7 +276,7 @@ xfs_dir2_leaf_addname( /* * Just checking or no space reservation, give up. */ - if (args->justcheck || args->total == 0) { + if (xfs_da_isjustcheck_op(args) || args->total == 0) { xfs_da_brelse(tp, lbp); return XFS_ERROR(ENOSPC); } @@ -301,7 +301,7 @@ xfs_dir2_leaf_addname( * If just checking, then it will fit unless we needed to allocate * a new data block. */ - if (args->justcheck) { + if (xfs_da_isjustcheck_op(args)) { xfs_da_brelse(tp, lbp); return use_block == -1 ? XFS_ERROR(ENOSPC) : 0; } @@ -1414,7 +1414,7 @@ xfs_dir2_leaf_lookup_int( cbp = dbp; } } - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, release the current Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -226,7 +226,7 @@ xfs_dir2_leafn_add( ASSERT(index == be16_to_cpu(leaf->hdr.count) || be32_to_cpu(leaf->ents[index].hashval) >= args->hashval); - if (args->justcheck) + if (xfs_da_isjustcheck_op(args)) return 0; /* @@ -515,7 +515,7 @@ xfs_dir2_leafn_lookup_for_addname( /* Didn't find any space */ fi = -1; out: - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); if (curbp) { /* Giving back a free block. */ state->extravalid = 1; @@ -638,7 +638,8 @@ xfs_dir2_leafn_lookup_for_entry( /* Didn't find an exact match. */ error = ENOENT; di = -1; - ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); + ASSERT(index == be16_to_cpu(leaf->hdr.count) || + xfs_da_isoknoent_op(args)); out: if (curbp) { /* Giving back a data block. */ @@ -669,7 +670,7 @@ xfs_dir2_leafn_lookup_int( int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - if (args->addname) + if (xfs_da_isaddname_op(args)) return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, state); return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); @@ -1383,7 +1384,7 @@ xfs_dir2_node_addname( /* * It worked, fix the hash values up the btree. */ - if (!args->justcheck) + if (!xfs_da_isjustcheck_op(args)) xfs_da_fixhashpath(state, &state->path); } else { /* @@ -1566,7 +1567,7 @@ xfs_dir2_node_addname_int( /* * Not allowed to allocate, return failure. */ - if (args->justcheck || args->total == 0) { + if (xfs_da_isjustcheck_op(args) || args->total == 0) { /* * Drop the freespace buffer unless it came from our * caller. @@ -1712,7 +1713,7 @@ xfs_dir2_node_addname_int( /* * If just checking, we succeeded. */ - if (args->justcheck) { + if (xfs_da_isjustcheck_op(args)) { if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL) xfs_da_buf_done(fbp); return 0; Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -332,7 +332,7 @@ xfs_dir2_sf_addname( /* * Just checking or no space reservation, it doesn't fit. */ - if (args->justcheck || args->total == 0) + if (xfs_da_isjustcheck_op(args) || args->total == 0) return XFS_ERROR(ENOSPC); /* * Convert to block form then add the name. @@ -345,7 +345,7 @@ xfs_dir2_sf_addname( /* * Just checking, it fits. */ - if (args->justcheck) + if (xfs_da_isjustcheck_op(args)) return 0; /* * Do it the easy way - just add it at the end. @@ -869,7 +869,7 @@ xfs_dir2_sf_lookup( return XFS_ERROR(EEXIST); } } - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, return "found". @@ -1071,7 +1071,7 @@ xfs_dir2_sf_replace( * Didn't find it. */ if (i == sfp->hdr.count) { - ASSERT(args->oknoent); + ASSERT(xfs_da_isoknoent_op(args)); #if XFS_BIG_INUMS if (i8elevated) xfs_dir2_sf_toino4(args); Index: kern_ci/fs/xfs/xfs_dir2_trace.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_trace.c +++ kern_ci/fs/xfs/xfs_dir2_trace.c @@ -85,7 +85,7 @@ xfs_dir2_trace_args( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, NULL, NULL); + (void *)(unsigned long)xfs_da_isjustcheck_op(args), NULL, NULL); } void @@ -100,7 +100,7 @@ xfs_dir2_trace_args_b( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)xfs_da_isjustcheck_op(args), (void *)(bp ? bp->bps[0] : NULL), NULL); } @@ -117,7 +117,7 @@ xfs_dir2_trace_args_bb( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)xfs_da_isjustcheck_op(args), (void *)(lbp ? lbp->bps[0] : NULL), (void *)(dbp ? dbp->bps[0] : NULL)); } @@ -157,8 +157,8 @@ xfs_dir2_trace_args_db( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)db, - (void *)dbp); + (void *)(unsigned long)xfs_da_isjustcheck_op(args), + (void *)(long)db, (void *)dbp); } void @@ -173,7 +173,7 @@ xfs_dir2_trace_args_i( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)xfs_da_isjustcheck_op(args), (void *)((unsigned long)(i >> 32)), (void *)((unsigned long)(i & 0xFFFFFFFF))); } @@ -190,7 +190,8 @@ xfs_dir2_trace_args_s( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)s, NULL); + (void *)(unsigned long)xfs_da_isjustcheck_op(args), + (void *)(long)s, NULL); } void @@ -208,7 +209,7 @@ xfs_dir2_trace_args_sb( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)s, - (void *)dbp); + (void *)(unsigned long)xfs_da_isjustcheck_op(args), + (void *)(long)s, (void *)dbp); } #endif /* XFS_DIR2_TRACE */ Index: kern_ci/fs/xfs/xfsidbg.c =================================================================== --- kern_ci.orig/fs/xfs/xfsidbg.c +++ kern_ci/fs/xfs/xfsidbg.c @@ -308,7 +308,7 @@ static int kdbm_xfs_xalatrace( int nextarg = 1; long offset = 0; int diag; - + if (argc != 1) return KDB_ARGCOUNT; @@ -5237,7 +5237,8 @@ xfsidbg_xdaargs(xfs_da_args_t *n) kdb_printf("0x%x", n->flags & i); kdb_printf(">\n"); kdb_printf(" rename %d justcheck %d addname %d oknoent %d\n", - n->rename, n->justcheck, n->addname, n->oknoent); + xfs_da_isrename_op(n) != 0, xfs_da_isjustcheck_op(n) != 0, + xfs_da_isaddname_op(n) != 0, xfs_da_isoknoent_op(n) != 0); kdb_printf(" leaf: blkno %d index %d rmtblkno %d rmtblkcnt %d\n", n->blkno, n->index, n->rmtblkno, n->rmtblkcnt); kdb_printf(" leaf2: blkno %d index %d rmtblkno %d rmtblkcnt %d\n", @@ -5955,7 +5956,7 @@ xfsidbg_xlog_granttrace(xlog_t *log) xfsidbg_print_trans_type((unsigned long)ktep->val[12]); qprintf("]\n"); qprintf(" t_ocnt = %lu, t_cnt = %lu, t_curr_res = %lu, " - "t_unit_res = %lu\n", + "t_unit_res = %lu\n", t_ocnt, t_cnt, (unsigned long)ktep->val[14], (unsigned long)ktep->val[15]); qprintf(" tic:0x%p resQ:0x%p wrQ:0x%p ", @@ -6449,16 +6450,16 @@ xfsidbg_xnode(xfs_inode_t *ip) #endif #ifdef XFS_BMBT_TRACE qprintf(" bmbt trace 0x%p\n", ip->i_btrace); -#endif +#endif #ifdef XFS_RW_TRACE qprintf(" rw trace 0x%p\n", ip->i_rwtrace); -#endif +#endif #ifdef XFS_ILOCK_TRACE qprintf(" ilock trace 0x%p\n", ip->i_lock_trace); #endif #ifdef XFS_DIR2_TRACE qprintf(" dir trace 0x%p\n", ip->i_dir_trace); -#endif +#endif kdb_printf("\n"); xfs_xnode_fork("data", &ip->i_df); xfs_xnode_fork("attr", ip->i_afp); -- From owner-xfs@oss.sgi.com Tue May 13 01:01:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:01:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_63, J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D816La006482 for ; Tue, 13 May 2008 01:01:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA14880; Tue, 13 May 2008 18:01:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 8D0B558C4C34; Tue, 13 May 2008 18:01:52 +1000 (EST) Message-Id: <20080513080152.312488863@chook.melbourne.sgi.com> References: <20080513075749.477238845@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Tue, 13 May 2008 17:57:50 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 1/4] XFS: Name operation vector for hash and compare Content-Disposition: inline; filename=nameops.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15859 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Adds two pieces of functionality for the basis of case-insensitive support in XFS: 1. A comparison result enumerated type: xfs_dacmp. It represents an exact match, case-insensitive match or no match at all. This patch only implements different and exact results. 2. xfs_nameops vector for specifying how to perform the hash generation of filenames and comparision methods. In this patch the hash vector points to the existing xfs_da_hashname function and the comparison method does a length compare, and if the same, does a memcmp and return the xfs_dacmp result. All filename functions that use the hash (create, lookup remove, rename, etc) now use the xfs_nameops.hashname function and all directory lookup functions also use the xfs_nameops.compname function. The lookup functions also handle case-insensitive results even though the default comparison function cannot return that. And important aspect of the lookup functions is that an exact match always has precedence over a case-insensitive. So while a case-insensitive match is found, we have to keep looking just in case there is an exact match. In the meantime, the info for the first case-insensitive match is retained if no exact match is found. Signed-off-by: Barry Naujok --- fs/xfs/xfs_da_btree.c | 22 +++++++++++++++++ fs/xfs/xfs_da_btree.h | 22 +++++++++++++++++ fs/xfs/xfs_dir2.c | 12 +++++---- fs/xfs/xfs_dir2_block.c | 33 ++++++++++++++++++------- fs/xfs/xfs_dir2_data.c | 5 +++ fs/xfs/xfs_dir2_leaf.c | 60 +++++++++++++++++++++++++++++++++------------- fs/xfs/xfs_dir2_node.c | 25 +++++++++++-------- fs/xfs/xfs_dir2_sf.c | 62 +++++++++++++++++++++++++++--------------------- fs/xfs/xfs_mount.h | 2 + 9 files changed, 175 insertions(+), 68 deletions(-) Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,6 +1530,28 @@ xfs_da_hashname(const uchar_t *name, int } } +enum xfs_dacmp +xfs_da_compname( + struct xfs_da_args *args, + const char *name, + int len) +{ + return (args->namelen == len && memcmp(args->name, name, len) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +static xfs_dahash_t +xfs_default_hashname( + struct xfs_name *name) +{ + return xfs_da_hashname(name->name, name->len); +} + +const struct xfs_nameops xfs_default_nameops = { + .hashname = xfs_default_hashname, + .compname = xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -99,6 +99,15 @@ typedef struct xfs_da_node_entry xfs_da_ *========================================================================*/ /* + * Search comparison results + */ +enum xfs_dacmp { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +}; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -127,6 +136,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* @@ -201,6 +211,14 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(struct xfs_name *); + enum xfs_dacmp (*compname)(struct xfs_da_args *, const char *, int); +}; + #ifdef __KERNEL__ /*======================================================================== @@ -249,6 +267,10 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); uint xfs_da_hashname(const uchar_t *name_string, int name_length); +enum xfs_dacmp xfs_da_compname(struct xfs_da_args *args, + const char *name, int len); + + xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -67,6 +67,7 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; + mp->m_dirnameops = &xfs_default_nameops; } /* @@ -166,7 +167,7 @@ xfs_dir_createname( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -212,11 +213,12 @@ xfs_dir_lookup( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; args.oknoent = 1; + args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_lookup(&args); @@ -259,7 +261,7 @@ xfs_dir_removename( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = ino; args.dp = dp; args.firstblock = first; @@ -342,7 +344,7 @@ xfs_dir_replace( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -390,7 +392,7 @@ xfs_dir_canenter( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( int mid; /* binary search current idx */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + enum xfs_dacmp cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -697,20 +698,31 @@ xfs_dir2_block_lookup_int( dep = (xfs_dir2_data_entry_t *) ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); /* - * Compare, if it's right give back buffer & entry number. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *bpp = bp; *entno = mid; - return 0; + if (cmp == XFS_CMP_EXACT) + return 0; } - } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); + } while (++mid < be32_to_cpu(btp->count) && + be32_to_cpu(blp[mid].hashval) == hash); + + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return success. + */ + if (args->cmpresult == XFS_CMP_CASE) + return 0; /* * No match, release the buffer and return ENOENT. */ - ASSERT(args->oknoent); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -1033,6 +1045,7 @@ xfs_dir2_sf_to_block( xfs_dir2_sf_t *sfp; /* shortform structure */ __be16 *tagp; /* end of data entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_name name; xfs_dir2_trace_args("sf_to_block", args); dp = args->dp; @@ -1187,8 +1200,10 @@ xfs_dir2_sf_to_block( tagp = xfs_dir2_data_entry_tag_p(dep); *tagp = cpu_to_be16((char *)dep - (char *)block); xfs_dir2_data_log_entry(tp, bp, dep); - blp[2 + i].hashval = cpu_to_be32(xfs_da_hashname( - (char *)sfep->name, sfep->namelen)); + name.name = sfep->name; + name.len = sfep->namelen; + blp[2 + i].hashval = cpu_to_be32(mp->m_dirnameops-> + hashname(&name)); blp[2 + i].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset = (int)((char *)(tagp + 1) - (char *)block); Index: kern_ci/fs/xfs/xfs_dir2_data.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_data.c +++ kern_ci/fs/xfs/xfs_dir2_data.c @@ -65,6 +65,7 @@ xfs_dir2_data_check( xfs_mount_t *mp; /* filesystem mount point */ char *p; /* current data position */ int stale; /* count of stale leaves */ + struct xfs_name name; mp = dp->i_mount; d = bp->data; @@ -140,7 +141,9 @@ xfs_dir2_data_check( addr = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash = xfs_da_hashname((char *)dep->name, dep->namelen); + name.name = dep->name; + name.len = dep->namelen; + hash = mp->m_dirnameops->hashname(&name); for (i = 0; i < be32_to_cpu(btp->count); i++) { if (be32_to_cpu(lep[i].address) == addr && be32_to_cpu(lep[i].hashval) == hash) Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1331,6 +1331,8 @@ xfs_dir2_leaf_lookup_int( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dabuf_t *cbp; /* case match data buffer */ + enum xfs_dacmp cmp; /* name compare result */ dp = args->dp; tp = args->trans; @@ -1354,9 +1356,11 @@ xfs_dir2_leaf_lookup_int( * Loop over all the entries with the right hash value * looking to match the name. */ + cbp = NULL; for (lep = &leaf->ents[index], dbp = NULL, curdb = -1; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip over stale leaf entries. */ @@ -1371,12 +1375,12 @@ xfs_dir2_leaf_lookup_int( * need to pitch the old one and read the new one. */ if (newdb != curdb) { - if (dbp) + if (dbp != cbp) xfs_da_brelse(tp, dbp); - if ((error = - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, &dbp, - XFS_DATA_FORK))) { + error = xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newdb), + -1, &dbp, XFS_DATA_FORK); + if (error) { xfs_da_brelse(tp, lbp); return error; } @@ -1386,24 +1390,46 @@ xfs_dir2_leaf_lookup_int( /* * Point to the data entry. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)dbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + dep = (xfs_dir2_data_entry_t *)((char *)dbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * If it matches then return it. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { - *dbpp = dbp; + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *indexp = index; - return 0; + /* + * case exact match: release the stored CI buffer if it + * exists and return the current buffer. + */ + if (cmp == XFS_CMP_EXACT) { + if (cbp && cbp != dbp) + xfs_da_brelse(tp, cbp); + *dbpp = dbp; + return 0; + } + cbp = dbp; } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, release the current + * buffer and return the stored CI matching buffer. + */ + if (args->cmpresult == XFS_CMP_CASE) { + if (cbp != dbp) + xfs_da_brelse(tp, dbp); + *dbpp = cbp; + return 0; + } /* * No match found, return ENOENT. */ - ASSERT(args->oknoent); + ASSERT(cbp == NULL); if (dbp) xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -556,6 +556,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + enum xfs_dacmp cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -620,17 +621,21 @@ xfs_dir2_leafn_lookup_for_entry( dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen == args->namelen && memcmp(dep->name, - args->name, args->namelen) == 0) { + * Compare the entry and if it's an exact match, return + * EEXIST immediately. If it's the first case-insensitive + * match, store the inode number and continue looking. + */ + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; args->inumber = be64_to_cpu(dep->inumber); di = (int)((char *)dep - (char *)curbp->data); error = EEXIST; - goto out; + if (cmp == XFS_CMP_EXACT) + goto out; } } - /* Didn't find a match. */ + /* Didn't find an exact match. */ error = ENOENT; di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); @@ -1813,6 +1818,8 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) + rval = EEXIST; /* a case-insensitive match was found */ /* * Release the btree blocks and leaf block. */ @@ -1856,9 +1863,8 @@ xfs_dir2_node_removename( * Look up the entry we're deleting, set up the cursor. */ error = xfs_da_node_lookup_int(state, &rval); - if (error) { + if (error) rval = error; - } /* * Didn't find it, upper layer screwed up. */ @@ -1875,9 +1881,8 @@ xfs_dir2_node_removename( */ error = xfs_dir2_leafn_remove(args, blk->bp, blk->index, &state->extrablk, &rval); - if (error) { + if (error) return error; - } /* * Fix the hash values up the btree. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -814,6 +814,7 @@ xfs_dir2_sf_lookup( int i; /* entry index */ xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ + enum xfs_dacmp cmp; /* comparison result */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -836,6 +837,7 @@ xfs_dir2_sf_lookup( */ if (args->namelen == 1 && args->name[0] == '.') { args->inumber = dp->i_ino; + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* @@ -844,27 +846,39 @@ xfs_dir2_sf_lookup( if (args->namelen == 2 && args->name[0] == '.' && args->name[1] == '.') { args->inumber = xfs_dir2_sf_get_inumber(sfp, &sfp->hdr.parent); + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* * Loop over all the entries trying to match ours. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { - args->inumber = - xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)); - return XFS_ERROR(EEXIST); + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + /* + * Compare name and if it's an exact match, return the inode + * number. If it's the first case-insensitive match, store the + * inode number and continue looking for an exact match. + */ + cmp = dp->i_mount->m_dirnameops->compname(args, sfep->name, + sfep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; + args->inumber = xfs_dir2_sf_get_inumber(sfp, + xfs_dir2_sf_inumberp(sfep)); + if (cmp == XFS_CMP_EXACT) + return XFS_ERROR(EEXIST); } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return "found". + */ + if (args->cmpresult == XFS_CMP_CASE) + return XFS_ERROR(EEXIST); /* * Didn't find it. */ - ASSERT(args->oknoent); return XFS_ERROR(ENOENT); } @@ -904,24 +918,21 @@ xfs_dir2_sf_removename( * Loop over the old directory entries. * Find the one we're deleting. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(sfep->name, args->name, args->namelen) == 0) { + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(args, sfep->name, sfep->namelen) == + XFS_CMP_EXACT) { ASSERT(xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)) == - args->inumber); + xfs_dir2_sf_inumberp(sfep)) == + args->inumber); break; } } /* * Didn't find it. */ - if (i == sfp->hdr.count) { + if (i == sfp->hdr.count) return XFS_ERROR(ENOENT); - } /* * Calculate sizes. */ @@ -1042,11 +1053,10 @@ xfs_dir2_sf_replace( */ else { for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { + i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(args, sfep->name, sfep->namelen) == + XFS_CMP_EXACT) { #if XFS_BIG_INUMS || defined(DEBUG) ino = xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)); Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -61,6 +61,7 @@ struct xfs_bmap_free; struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; +struct xfs_nameops; /* * Prototypes and functions for the Data Migration subsystem. @@ -313,6 +314,7 @@ typedef struct xfs_mount { __uint8_t m_inode_quiesce;/* call quiesce on new inodes. field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ + const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ -- From owner-xfs@oss.sgi.com Tue May 13 01:01:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:01:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D816w7006481 for ; Tue, 13 May 2008 01:01:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA14878; Tue, 13 May 2008 18:01:52 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 4F66258C4C29; Tue, 13 May 2008 18:01:52 +1000 (EST) Message-Id: <20080513075749.477238845@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Tue, 13 May 2008 17:57:49 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 0/4] XFS: Case-insensitive support - ASCII only X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15858 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This patch seems to resolve all issues I had with CI support with the dentry cache. My solution for negative dentries was to not call d_add() when the inode was not found. I had to fix up the create so it would call d_rehash if the entry was unhashed. I've also applied the other previous suggestions and cleanups. The only outstanding problem is case-preserving rename on a CI filesystem. I will write a patch for passing flags down to the fs-specific lookup once the nameidata patch mentioned by Christoph has been removed. -- From owner-xfs@oss.sgi.com Tue May 13 01:30:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:30:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8UFNR009690 for ; Tue, 13 May 2008 01:30:17 -0700 X-ASG-Debug-ID: 1210667461-1dce00290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ns.unixsol.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7148A169A798 for ; Tue, 13 May 2008 01:31:01 -0700 (PDT) Received: from ns.unixsol.org (ns.unixsol.org [193.110.159.2]) by cuda.sgi.com with ESMTP id qPEIKCpcsxc2xtop for ; Tue, 13 May 2008 01:31:01 -0700 (PDT) Received: from gfmac.local ([::ffff:85.187.186.121]) (AUTH: CRAM-MD5 gf, SSL: TLSv1/SSLv3,256bits,AES256-SHA) by ns.unixsol.org with esmtp; Tue, 13 May 2008 11:31:01 +0300 id 0013E8BA.482951C5.000002FD Message-ID: <482951C3.60600@unixsol.org> Date: Tue, 13 May 2008 11:30:59 +0300 From: Georgi Chorbadzhiyski Organization: Unix Solutions Ltd. User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Donald Douwsma CC: xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> In-Reply-To: <48292742.8090409@sgi.com> Content-Type: text/plain; charset=windows-1251; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ns.unixsol.org[193.110.159.2] X-Barracuda-Start-Time: 1210667463 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2598 1.0000 -0.5287 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.53 X-Barracuda-Spam-Status: No, SCORE=-0.53 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.1, rules version 3.1.50222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15863 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gf@unixsol.org Precedence: bulk X-list: xfs Donald Douwsma mumbled something about, On 5/13/08 8:29 AM: > Georgi Chorbadzhiyski wrote: >> Hi guys, I know that not all kernel thread users are converted to >> start only when needed but the following is little annoying specially >> when I'm not even using jfs, xfs and gfs2. >> >> Look at the ps output from a standard distro 2.6.24.5 kernel after a >> fresh boot: > ... > >> Kernel config can be found here: >> >> http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config > > Your distro is building all of these modules into the kernel. > CONFIG_XFS_FS=y > CONFIG_JFS_FS=y > CONFIG_GFS2_FS=y > > This isnt exactly standard practice, normally they'd be set to =m and only > used if required to mount a filesystem. You may want to ask the slackware > people why they chose to do this for their hugexxx.s kernels. I know that they are compiled in the kernel, but since they are not used isn't starting their own kthreads kind of unnecessary? Surely the threads can be started on demand only when xfs/etc volume is mounted. -- Georgi Chorbadzhiyski http://georgi.unixsol.org/ From owner-xfs@oss.sgi.com Tue May 13 01:30:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:30:46 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8Ua27009707 for ; Tue, 13 May 2008 01:30:38 -0700 X-ASG-Debug-ID: 1210667483-54ec00aa0000-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 85C931155D16; Tue, 13 May 2008 01:31:23 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 5Em0d1GmWaxNkp3p; Tue, 13 May 2008 01:31:23 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jvpus-0000Xa-Vw; Tue, 13 May 2008 08:31:22 +0000 Date: Tue, 13 May 2008 04:31:22 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 1/4] XFS: Name operation vector for hash and compare Subject: Re: [PATCH 1/4] XFS: Name operation vector for hash and compare Message-ID: <20080513083122.GA21919@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.312488863@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513080152.312488863@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210667484 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.1, rules version 3.1.50223 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15864 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good to me. From owner-xfs@oss.sgi.com Tue May 13 01:32:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:32:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8WLrj010089 for ; Tue, 13 May 2008 01:32:22 -0700 X-ASG-Debug-ID: 1210667587-60d3003d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ns.unixsol.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5639F15C4F8 for ; Tue, 13 May 2008 01:33:08 -0700 (PDT) Received: from ns.unixsol.org (ns.unixsol.org [193.110.159.2]) by cuda.sgi.com with ESMTP id Rysk6bEc8cbY9Alc for ; Tue, 13 May 2008 01:33:08 -0700 (PDT) Received: from gfmac.local ([::ffff:85.187.186.121]) (AUTH: CRAM-MD5 gf, SSL: TLSv1/SSLv3,256bits,AES256-SHA) by ns.unixsol.org with esmtp; Tue, 13 May 2008 11:33:07 +0300 id 0013E8BA.48295243.000003D5 Message-ID: <48295240.4030301@unixsol.org> Date: Tue, 13 May 2008 11:33:04 +0300 From: Georgi Chorbadzhiyski Organization: Unix Solutions Ltd. User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: FD Cami CC: Donald Douwsma , xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List , volkerdi@slackware.com X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> <20080513075107.2edc44d3@olorin> In-Reply-To: <20080513075107.2edc44d3@olorin> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ns.unixsol.org[193.110.159.2] X-Barracuda-Start-Time: 1210667589 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2856 1.0000 -0.4108 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.41 X-Barracuda-Spam-Status: No, SCORE=-0.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.1, rules version 3.1.50224 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15865 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gf@unixsol.org Precedence: bulk X-list: xfs FD Cami mumbled something about, On 5/13/08 8:51 AM: > On Tue, 13 May 2008 15:29:38 +1000 > Donald Douwsma wrote: > >> Georgi Chorbadzhiyski wrote: >>> Hi guys, I know that not all kernel thread users are converted to >>> start only when needed but the following is little annoying specially >>> when I'm not even using jfs, xfs and gfs2. >>> >>> Look at the ps output from a standard distro 2.6.24.5 kernel after a >>> fresh boot: >> ... >> >>> Kernel config can be found here: >>> http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config >>> >> Your distro is building all of these modules into the kernel. >> CONFIG_XFS_FS=y >> CONFIG_JFS_FS=y >> CONFIG_GFS2_FS=y >> >> This isnt exactly standard practice, normally they'd be set to =m and only >> used if required to mount a filesystem. You may want to ask the slackware >> people why they chose to do this for their hugexxx.s kernels. > > To be able to use those filesystems on root partitions without requiring > an initrd. > > Georgi might be interested to use the generic kernel instead of the huge > one, it is available there : > http://mirrors.unixsol.org/slackware/slackware-12.1/slackware/a/kernel-generic-smp-2.6.24.5_smp-i686-2.tgz I'm well aware of this kernels but I prefer to not use initrd when possible and still have most of the functionality available. -- Georgi Chorbadzhiyski http://georgi.unixsol.org/ From owner-xfs@oss.sgi.com Tue May 13 01:34:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:34:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_35 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8YBIw010521 for ; Tue, 13 May 2008 01:34:12 -0700 X-ASG-Debug-ID: 1210667698-6b3101ce0000-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 0DEF216A74CC; Tue, 13 May 2008 01:34:58 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id f0ROaEjurnaX27Qm; Tue, 13 May 2008 01:34:58 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JvpyM-0008Fx-MZ; Tue, 13 May 2008 08:34:58 +0000 Date: Tue, 13 May 2008 04:34:58 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 2/4] XFS: add op_flags field and helpers to xfs_da_args Subject: Re: [PATCH 2/4] XFS: add op_flags field and helpers to xfs_da_args Message-ID: <20080513083458.GB21919@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.598022276@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513080152.598022276@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210667699 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.1, rules version 3.1.50222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15866 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 13, 2008 at 05:57:51PM +1000, Barry Naujok wrote: > The end of the xfs_da_args structure has 4 unsigned char fields for > true/false information on directory and attr operations using the > xfs_da_args structure. > > The following converts these 4 into a op_flags field that uses the > first 4 bits for these fields and allows expansion for future > operation information (eg. case-insensitive lookup request). > > There is also a bit of EOL whitespace cleanup too. Looks generally good to me. A few stylistic comments: - I don't think the xfs_da_is*_op wrappers help readability, we'd be better off without those. - op_flags seems like a rather odd name to me, what about lookup_flags instead? And the hinks below are an awfull lot of random reformatting that don't belong into this patch. As they're sensible what about just commiting the beforehand? > dsize = dp->i_df.if_bytes; > - > + > switch (dp->i_d.di_format) { > case XFS_DINODE_FMT_EXTENTS: > - /* > - * If there is no attr fork and the data fork is extents, > - * determine if creating the default attr fork will result > - * in the extents form migrating to btree. If so, the > - * minimum offset only needs to be the space required for > + /* > + * If there is no attr fork and the data fork is extents, > + * determine if creating the default attr fork will result > + * in the extents form migrating to btree. If so, the > + * minimum offset only needs to be the space required for > * the btree root. > - */ > + */ > if (!dp->i_d.di_forkoff && dp->i_df.if_bytes > mp->m_attroffset) > dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS); > break; > - > + > case XFS_DINODE_FMT_BTREE: > /* > * If have data btree then keep forkoff if we have one, > - * otherwise we are adding a new attr, so then we set > - * minforkoff to where the btree root can finish so we have > + * otherwise we are adding a new attr, so then we set > + * minforkoff to where the btree root can finish so we have > * plenty of room for attrs > */ > if (dp->i_d.di_forkoff) { > - if (offset < dp->i_d.di_forkoff) > + if (offset < dp->i_d.di_forkoff) > return 0; > - else > + else > return dp->i_d.di_forkoff; > } else > dsize = XFS_BMAP_BROOT_SPACE(dp->i_df.if_broot); > break; > } > - > - /* > - * A data fork btree root must have space for at least > + > + /* > + * A data fork btree root must have space for at least > * MINDBTPTRS key/ptr pairs if the data fork is small or empty. > */ > minforkoff = MAX(dsize, XFS_BMDR_SPACE_CALC(MINDBTPTRS)); From owner-xfs@oss.sgi.com Tue May 13 01:35:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:35:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8ZH6r010785 for ; Tue, 13 May 2008 01:35:18 -0700 X-ASG-Debug-ID: 1210667763-1e0900330000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ns.unixsol.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D001D1225EDE for ; Tue, 13 May 2008 01:36:04 -0700 (PDT) Received: from ns.unixsol.org (ns.unixsol.org [193.110.159.2]) by cuda.sgi.com with ESMTP id pMryDR90uLVScHpL for ; Tue, 13 May 2008 01:36:04 -0700 (PDT) Received: from gfmac.local ([::ffff:85.187.186.121]) (AUTH: CRAM-MD5 gf, SSL: TLSv1/SSLv3,256bits,AES256-SHA) by ns.unixsol.org with esmtp; Tue, 13 May 2008 11:36:04 +0300 id 0013E8BA.482952F4.00000570 Message-ID: <482952F2.3080608@unixsol.org> Date: Tue, 13 May 2008 11:36:02 +0300 From: Georgi Chorbadzhiyski Organization: Unix Solutions Ltd. User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Jan Engelhardt CC: xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ns.unixsol.org[193.110.159.2] X-Barracuda-Start-Time: 1210667764 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.1, rules version 3.1.50222 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15867 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gf@unixsol.org Precedence: bulk X-list: xfs Jan Engelhardt mumbled something about, On 5/13/08 2:21 AM: > On Tuesday 2008-05-13 00:55, Georgi Chorbadzhiyski wrote: >> Not needed here, because no jfs partition is in use. >> Not needed here, because no xfs partition is in use. >> I dont use gfs2 > > You miss the best of Linux. So, why not unload the modules? ext3 is working just fine for now, thanks (: >>> 1141 ? S< 0:00 \_ [block-osm/1] >> What is osm? Can't find anything in kernel config? > > drivers/message/i2o/i2o_block.c:#define OSM_NAME "block-osm" > >>> 1148 ? S< 0:00 \_ [khpsbpkt] >> What is this? > > ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread; Strange names :) -- Georgi Chorbadzhiyski http://georgi.unixsol.org/ From owner-xfs@oss.sgi.com Tue May 13 01:56:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:57:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8uc3Z012914 for ; Tue, 13 May 2008 01:56:42 -0700 X-ASG-Debug-ID: 1210669045-15f2032f0000-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 2319315C7F7; Tue, 13 May 2008 01:57:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JiCT2J8Nd0lc4g64; Tue, 13 May 2008 01:57:25 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JvqK4-0004Ly-OD; Tue, 13 May 2008 08:57:24 +0000 Date: Tue, 13 May 2008 04:57:24 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, aia21@cantab.net X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080513085724.GC21919@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513080152.911303131@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210669046 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.1, rules version 3.1.50226 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15868 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs First please Cc Anton on this as he wrote the original version of what's now d_add_ci, I suspect he might have some useful comments. On Tue, May 13, 2008 at 05:57:52PM +1000, Barry Naujok wrote: > Another unusual interaction with the dcache is not storing > negative dentries like other filesystems doing a d_add(dentry, NULL) > when an ENOENT is returned. During the VFS lookup, if a dentry > returned has no inode, dput is called and ENOENT is returned. > By not doing a d_add, this actually removes it completely from > the dcache to be reused. That is a way to implement this correctly, but I suspect not creating negative dentries will degrade performance quite badly on some workloads. Then again CI is useful only for samba serving where the namecache on the client side should mitigate that effect. We'd probably be better off long-term implementing Anton's earlier suggestion to have a routine that purges all ci aliased negative dentries on a successfull lookup. > create/rename have to be modified to > support unhashed dentries being passed in. > + if (ci_sfep) > + return XFS_ERROR(xfs_dir_cilookup_result(args, > + ci_sfep->name, ci_sfep->namelen)); Putting a function call inside XFS_ERROR is quite unreadable. Should be easy to fix as there's already an error variable in scope. > @@ -1646,15 +1653,18 @@ xfs_lookup( > return XFS_ERROR(EIO); > > lock_mode = xfs_ilock_map_shared(dp); > - error = xfs_dir_lookup(NULL, dp, name, &inum); > + error = xfs_dir_lookup(NULL, dp, name, &inum, ci_match); > xfs_iunlock_map_shared(dp, lock_mode); > > if (error) > goto out; > > error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); > - if (error) > + if (error) { > + if (ci_match && *ci_match) > + kmem_free(name->name, name->len); > goto out; normal style would be to add a out_free_name label for this one to move the error handling code into one place at the end of the function. From owner-xfs@oss.sgi.com Tue May 13 01:57:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 01:58:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D8vP1H012997 for ; Tue, 13 May 2008 01:57:27 -0700 X-ASG-Debug-ID: 1210669093-5ee100d50000-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 8969DB620F0; Tue, 13 May 2008 01:58:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id rOZ8XC3O42M1CXzW; Tue, 13 May 2008 01:58:13 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JvqKq-00064v-Uz; Tue, 13 May 2008 08:58:12 +0000 Date: Tue, 13 May 2008 04:58:12 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 4/4] XFS: ASCII case-insensitive support Subject: Re: [PATCH 4/4] XFS: ASCII case-insensitive support Message-ID: <20080513085812.GD21919@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080153.184936637@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513080153.184936637@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210669093 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.1, rules version 3.1.50225 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15869 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good. From owner-xfs@oss.sgi.com Tue May 13 02:02:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 02:02:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4D92Zc4013968 for ; Tue, 13 May 2008 02:02:37 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id TAA16673; Tue, 13 May 2008 19:03:17 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4D93EsT165749947; Tue, 13 May 2008 19:03:15 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4D93BMw165910305; Tue, 13 May 2008 19:03:11 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 13 May 2008 19:03:11 +1000 From: David Chinner To: Georgi Chorbadzhiyski Cc: Donald Douwsma , xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) Message-ID: <20080513090311.GZ155679365@sgi.com> References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> <482951C3.60600@unixsol.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482951C3.60600@unixsol.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15870 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Tue, May 13, 2008 at 11:30:59AM +0300, Georgi Chorbadzhiyski wrote: > >>http://mirrors.unixsol.org/slackware/slackware-12.1/kernels/hugesmp.s/config > > > >Your distro is building all of these modules into the kernel. > > CONFIG_XFS_FS=y > > CONFIG_JFS_FS=y > > CONFIG_GFS2_FS=y > > > >This isnt exactly standard practice, normally they'd be set to =m and only > >used if required to mount a filesystem. You may want to ask the slackware > >people why they chose to do this for their hugexxx.s kernels. > > I know that they are compiled in the kernel, but since they > are not used isn't starting their own kthreads kind of > unnecessary? Surely the threads can be started on demand > only when xfs/etc volume is mounted. Sure - XFS will start another three kernel threads per filesystem that gets mounted. And for good measure, it cleans them up again on unmount. :) The other threads are per-cpu workqueue threads that are shared across all XFS filesystems in the system and hence are started when XFS is initialised rather than when a mount occurs. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Tue May 13 02:21:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 02:21:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D9LBr8015619 for ; Tue, 13 May 2008 02:21:13 -0700 X-ASG-Debug-ID: 1210670518-032201da0000-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 D376F16A75C0; Tue, 13 May 2008 02:21:58 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id OI8eGFesTiEUS44H; Tue, 13 May 2008 02:21:58 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jvqho-0001bE-RL; Tue, 13 May 2008 09:21:56 +0000 Date: Tue, 13 May 2008 05:21:56 -0400 From: Christoph Hellwig To: David Chinner Cc: Georgi Chorbadzhiyski , cluster-devel@redhat.com, Linux Kernel Mailing List , jfs-discussion@lists.sourceforge.net, Donald Douwsma , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) Message-ID: <20080513092156.GA26736@infradead.org> References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> <482951C3.60600@unixsol.org> <20080513090311.GZ155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513090311.GZ155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210670518 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.1, rules version 3.1.50228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15871 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 13, 2008 at 07:03:11PM +1000, David Chinner wrote: > Sure - XFS will start another three kernel threads per filesystem > that gets mounted. And for good measure, it cleans them up again > on unmount. :) > > The other threads are per-cpu workqueue threads that are shared > across all XFS filesystems in the system and hence are started > when XFS is initialised rather than when a mount occurs. Well, we could refcount the number of active xfs instances and start/stop the global threads based on that. Not really worth my time IHMO, but if someone comes up with a clean enough patch it should go in. From owner-xfs@oss.sgi.com Tue May 13 02:28:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 02:28:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4D9S4Ru016296 for ; Tue, 13 May 2008 02:28:08 -0700 X-ASG-Debug-ID: 1210670931-60fb012d0000-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 3C51115CB4A; Tue, 13 May 2008 02:28:51 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 85mnH4NStlK77bYA; Tue, 13 May 2008 02:28:51 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JvqoV-0001Rx-EI; Tue, 13 May 2008 09:28:51 +0000 Date: Tue, 13 May 2008 05:28:51 -0400 From: Christoph Hellwig To: David Chinner Cc: Georgi Chorbadzhiyski , cluster-devel@redhat.com, Linux Kernel Mailing List , jfs-discussion@lists.sourceforge.net, Donald Douwsma , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) Message-ID: <20080513092851.GA19879@infradead.org> References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> <482951C3.60600@unixsol.org> <20080513090311.GZ155679365@sgi.com> <20080513092156.GA26736@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080513092156.GA26736@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210670932 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.1, rules version 3.1.50228 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15872 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 13, 2008 at 05:21:56AM -0400, Christoph Hellwig wrote: > Well, we could refcount the number of active xfs instances and > start/stop the global threads based on that. Not really worth my > time IHMO, but if someone comes up with a clean enough patch it should > go in. Actually doing it in the VFS might be even better. Add ->init and ->exit methods to struct file_system_type and then the filesystems can move most of module_init/exit into the new methods. From owner-xfs@oss.sgi.com Tue May 13 06:31:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 06:31:39 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4DDVGle004783 for ; Tue, 13 May 2008 06:31:20 -0700 X-ASG-Debug-ID: 1210685524-09c600ee0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from caffeine.csclub.uwaterloo.ca (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 93D6A15DE57 for ; Tue, 13 May 2008 06:32:04 -0700 (PDT) Received: from caffeine.csclub.uwaterloo.ca (caffeine.csclub.uwaterloo.ca [129.97.134.17]) by cuda.sgi.com with ESMTP id 2N1ltZUIZczBp380 for ; Tue, 13 May 2008 06:32:04 -0700 (PDT) Received: from caffeine.csclub.uwaterloo.ca (localhost [127.0.0.1]) by caffeine.csclub.uwaterloo.ca (Postfix) with ESMTP id AB1F073DAF; Tue, 13 May 2008 09:31:58 -0400 (EDT) Received: by caffeine.csclub.uwaterloo.ca (Postfix, from userid 20367) id 94C4373DCB; Tue, 13 May 2008 09:31:58 -0400 (EDT) Date: Tue, 13 May 2008 09:31:58 -0400 To: Donald Douwsma Cc: Georgi Chorbadzhiyski , xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) Message-ID: <20080513133158.GA7579@csclub.uwaterloo.ca> References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48292742.8090409@sgi.com> User-Agent: Mutt/1.5.13 (2006-08-11) From: lsorense@csclub.uwaterloo.ca (Lennart Sorensen) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: caffeine.csclub.uwaterloo.ca[129.97.134.17] X-Barracuda-Start-Time: 1210685524 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0017 1.0000 -2.0098 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.50244 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15873 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lsorense@csclub.uwaterloo.ca Precedence: bulk X-list: xfs On Tue, May 13, 2008 at 03:29:38PM +1000, Donald Douwsma wrote: > Your distro is building all of these modules into the kernel. > CONFIG_XFS_FS=y > CONFIG_JFS_FS=y > CONFIG_GFS2_FS=y > > This isnt exactly standard practice, normally they'd be set to =m and only > used if required to mount a filesystem. You may want to ask the slackware > people why they chose to do this for their hugexxx.s kernels. Because they have always done it that way so it has to be right? :) -- Len Sorensen From owner-xfs@oss.sgi.com Tue May 13 08:30:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 08:30:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4DFUHUO017329 for ; Tue, 13 May 2008 08:30:18 -0700 X-ASG-Debug-ID: 1210692664-0cc203530000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 26D9B16A8378 for ; Tue, 13 May 2008 08:31:04 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id BVPwtbVeNCAHzZAW for ; Tue, 13 May 2008 08:31:04 -0700 (PDT) Received: from x-128-101-213-57.wireless.umn.edu (x-128-101-213-57.wireless.umn.edu [128.101.213.57]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 600A3AC08D7; Tue, 13 May 2008 10:31:02 -0500 (CDT) Message-ID: <4829B435.10200@sandeen.net> Date: Tue, 13 May 2008 10:31:01 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: David Chinner , Georgi Chorbadzhiyski , cluster-devel@redhat.com, Linux Kernel Mailing List , jfs-discussion@lists.sourceforge.net, Donald Douwsma , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: [Jfs-discussion] Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> <48292742.8090409@sgi.com> <482951C3.60600@unixsol.org> <20080513090311.GZ155679365@sgi.com> <20080513092156.GA26736@infradead.org> <20080513092851.GA19879@infradead.org> In-Reply-To: <20080513092851.GA19879@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: 1210692665 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.1, rules version 3.1.50252 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15874 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Tue, May 13, 2008 at 05:21:56AM -0400, Christoph Hellwig wrote: >> Well, we could refcount the number of active xfs instances and >> start/stop the global threads based on that. Not really worth my >> time IHMO, but if someone comes up with a clean enough patch it should >> go in. > > Actually doing it in the VFS might be even better. Add ->init and > ->exit methods to struct file_system_type and then the filesystems can > move most of module_init/exit into the new methods. Hmm I like that idea! :) -Eric From owner-xfs@oss.sgi.com Tue May 13 09:34:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 09:35:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4DGYwSG021332 for ; Tue, 13 May 2008 09:34:59 -0700 X-ASG-Debug-ID: 1210696544-795400d50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AAD7416A97C7 for ; Tue, 13 May 2008 09:35:44 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id C6jBBcpWpOC3ybdd for ; Tue, 13 May 2008 09:35:44 -0700 (PDT) Received: from x-128-101-213-57.wireless.umn.edu (x-128-101-213-57.wireless.umn.edu [128.101.213.57]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 7556CAC08D6 for ; Tue, 13 May 2008 11:35:41 -0500 (CDT) Message-ID: <4829C360.5060500@sandeen.net> Date: Tue, 13 May 2008 11:35:44 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] re-remove xfs custom bitops Subject: Re: [PATCH] re-remove xfs custom bitops References: <480EB397.1040304@sandeen.net> In-Reply-To: <480EB397.1040304@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: 1210696545 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.1, rules version 3.1.50256 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15875 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > Once more, with feeling! > > This re-instates the reverted mod after the ppc panic of > Feb '08. You guys do have ppc boxes in the test farm now right? :) > > This keeps xfs_lowbit64 as it was since there aren't good > generic helpers there ... > > This should probably keep Dave's signed-off line, there's > a bit of my (userspace) testing here but no original work. > > This exact patch isn't tested but it's based on a conglomeration > of prior testing... SGI guys, any takers on this one? -Eric > Thanks, > -Eric > > Index: linux-2.6-xfs/fs/xfs/xfs_bit.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.c > +++ linux-2.6-xfs/fs/xfs/xfs_bit.c > @@ -25,109 +25,6 @@ > * XFS bit manipulation routines, used in non-realtime code. > */ > > -#ifndef HAVE_ARCH_HIGHBIT > -/* > - * Index of high bit number in byte, -1 for none set, 0..7 otherwise. > - */ > -static const char xfs_highbit[256] = { > - -1, 0, 1, 1, 2, 2, 2, 2, /* 00 .. 07 */ > - 3, 3, 3, 3, 3, 3, 3, 3, /* 08 .. 0f */ > - 4, 4, 4, 4, 4, 4, 4, 4, /* 10 .. 17 */ > - 4, 4, 4, 4, 4, 4, 4, 4, /* 18 .. 1f */ > - 5, 5, 5, 5, 5, 5, 5, 5, /* 20 .. 27 */ > - 5, 5, 5, 5, 5, 5, 5, 5, /* 28 .. 2f */ > - 5, 5, 5, 5, 5, 5, 5, 5, /* 30 .. 37 */ > - 5, 5, 5, 5, 5, 5, 5, 5, /* 38 .. 3f */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 40 .. 47 */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 48 .. 4f */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 50 .. 57 */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 58 .. 5f */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 60 .. 67 */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 68 .. 6f */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 70 .. 77 */ > - 6, 6, 6, 6, 6, 6, 6, 6, /* 78 .. 7f */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* 80 .. 87 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* 88 .. 8f */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* 90 .. 97 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* 98 .. 9f */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* a0 .. a7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* a8 .. af */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* b0 .. b7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* b8 .. bf */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* c0 .. c7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* c8 .. cf */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* d0 .. d7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* d8 .. df */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* e0 .. e7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* e8 .. ef */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* f0 .. f7 */ > - 7, 7, 7, 7, 7, 7, 7, 7, /* f8 .. ff */ > -}; > -#endif > - > -/* > - * xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. > - */ > -inline int > -xfs_highbit32( > - __uint32_t v) > -{ > -#ifdef HAVE_ARCH_HIGHBIT > - return highbit32(v); > -#else > - int i; > - > - if (v & 0xffff0000) > - if (v & 0xff000000) > - i = 24; > - else > - i = 16; > - else if (v & 0x0000ffff) > - if (v & 0x0000ff00) > - i = 8; > - else > - i = 0; > - else > - return -1; > - return i + xfs_highbit[(v >> i) & 0xff]; > -#endif > -} > - > -/* > - * xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. > - */ > -int > -xfs_lowbit64( > - __uint64_t v) > -{ > - __uint32_t w = (__uint32_t)v; > - int n = 0; > - > - if (w) { /* lower bits */ > - n = ffs(w); > - } else { /* upper bits */ > - w = (__uint32_t)(v >> 32); > - if (w && (n = ffs(w))) > - n += 32; > - } > - return n - 1; > -} > - > -/* > - * xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. > - */ > -int > -xfs_highbit64( > - __uint64_t v) > -{ > - __uint32_t h = (__uint32_t)(v >> 32); > - > - if (h) > - return xfs_highbit32(h) + 32; > - return xfs_highbit32((__uint32_t)v); > -} > - > - > /* > * Return whether bitmap is empty. > * Size is number of words in the bitmap, which is padded to word boundary > Index: linux-2.6-xfs/fs/xfs/xfs_bit.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.h > +++ linux-2.6-xfs/fs/xfs/xfs_bit.h > @@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in > } > > /* Get high bit set out of 32-bit argument, -1 if none set */ > -extern int xfs_highbit32(__uint32_t v); > - > -/* Get low bit set out of 64-bit argument, -1 if none set */ > -extern int xfs_lowbit64(__uint64_t v); > +static inline int xfs_highbit32(__uint32_t v) > +{ > + return fls(v) - 1; > +} > > /* Get high bit set out of 64-bit argument, -1 if none set */ > -extern int xfs_highbit64(__uint64_t); > +static inline int xfs_highbit64(__uint64_t v) > +{ > + return fls64(v) - 1; > +} > + > +/* Get low bit set out of 32-bit argument, -1 if none set */ > +static inline int xfs_lowbit32(__uint32_t v) > +{ > + unsigned long t = v; > + return (v) ? find_first_bit(&t, 32) : -1; > +} > + > +/* Get low bit set out of 64-bit argument, -1 if none set */ > +static inline int xfs_lowbit64(__uint64_t v) > +{ > + __uint32_t w = (__uint32_t)v; > + int n = 0; > + > + if (w) { /* lower bits */ > + n = ffs(w); > + } else { /* upper bits */ > + w = (__uint32_t)(v >> 32); > + if (w && (n = ffs(w))) > + n += 32; > + } > + return n - 1; > +} > > /* Return whether bitmap is empty (1 == empty) */ > extern int xfs_bitmap_empty(uint *map, uint size); > Index: linux-2.6-xfs/fs/xfs/xfs_rtalloc.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_rtalloc.c > +++ linux-2.6-xfs/fs/xfs/xfs_rtalloc.c > @@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun > */ > > /* > - * xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. > - */ > -STATIC int > -xfs_lowbit32( > - __uint32_t v) > -{ > - if (v) > - return ffs(v) - 1; > - return -1; > -} > - > -/* > * Allocate space to the bitmap or summary file, and zero it, for growfs. > */ > STATIC int /* error */ > @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( > } > bbno = XFS_BITTOBLOCK(mp, bno); > i = 0; > + ASSERT(minlen != 0); > log2len = xfs_highbit32(minlen); > /* > * Loop over all bitmap blocks (bbno + i is current block). > @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size( > xfs_suminfo_t sum; /* summary information for extents */ > > ASSERT(minlen % prod == 0 && maxlen % prod == 0); > + ASSERT(maxlen != 0); > + > /* > * Loop over all the levels starting with maxlen. > * At each level, look at all the bitmap blocks, to see if there > @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( > *rtblock = NULLRTBLOCK; > return 0; > } > + ASSERT(minlen != 0); > + ASSERT(maxlen != 0); > + > /* > * Loop over sizes, from maxlen down to minlen. > * This time, when we do the allocations, allow smaller ones > @@ -1961,6 +1955,7 @@ xfs_growfs_rt( > nsbp->sb_blocksize * nsbp->sb_rextsize); > nsbp->sb_rextents = nsbp->sb_rblocks; > do_div(nsbp->sb_rextents, nsbp->sb_rextsize); > + ASSERT(nsbp->sb_rextents != 0); > nsbp->sb_rextslog = xfs_highbit32(nsbp->sb_rextents); > nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog + 1; > nrsumsize = > > > From owner-xfs@oss.sgi.com Tue May 13 22:22:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 22:23:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E5MbI7012447 for ; Tue, 13 May 2008 22:22:39 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA13455; Wed, 14 May 2008 15:23:21 +1000 Message-ID: <482A77A9.5040806@sgi.com> Date: Wed, 14 May 2008 15:24:57 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH] make inode reclaim wait for log I/O to complete Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15876 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs An xfs inode can be destroyed before log I/O involving that inode is complete. We need to wait for the inode to be unpinned before tearing it down. Lachlan --- fs/xfs/xfs_inode.c_1.501 2008-05-12 14:45:17.000000000 +1000 +++ fs/xfs/xfs_inode.c 2008-05-12 12:23:48.000000000 +1000 @@ -2787,7 +2787,7 @@ __xfs_iunpin_wait( wait_event(ip->i_ipin_wait, (atomic_read(&ip->i_pincount) == 0)); } -static inline void +inline void xfs_iunpin_wait( xfs_inode_t *ip) { --- fs/xfs/xfs_inode.h_1.245 2008-05-12 14:45:20.000000000 +1000 +++ fs/xfs/xfs_inode.h 2008-05-12 12:31:37.000000000 +1000 @@ -481,6 +481,7 @@ void xfs_ifunlock(xfs_inode_t *); void xfs_ireclaim(xfs_inode_t *); int xfs_finish_reclaim(xfs_inode_t *, int, int); int xfs_finish_reclaim_all(struct xfs_mount *, int); +void xfs_iunpin_wait(xfs_inode_t *); /* * xfs_inode.c prototypes. --- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 +++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 @@ -3324,6 +3324,7 @@ xfs_finish_reclaim( * because we're gonna reclaim the inode anyway. */ if (error) { + xfs_iunpin_wait(ip); xfs_iunlock(ip, XFS_ILOCK_EXCL); goto reclaim; } @@ -3336,6 +3337,7 @@ xfs_finish_reclaim( } xfs_ifunlock(ip); + xfs_iunpin_wait(ip); xfs_iunlock(ip, XFS_ILOCK_EXCL); reclaim: From owner-xfs@oss.sgi.com Tue May 13 23:10:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 23:10:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E6ActN015222 for ; Tue, 13 May 2008 23:10:41 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA14835; Wed, 14 May 2008 16:11:20 +1000 Date: Wed, 14 May 2008 16:15:01 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> Message-ID: In-Reply-To: <20080513085724.GC21919@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4E6AhtN015246 X-archive-position: 15878 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 13 May 2008 18:57:24 +1000, Christoph Hellwig wrote: > On Tue, May 13, 2008 at 05:57:52PM +1000, Barry Naujok wrote: > >> + if (ci_sfep) >> + return XFS_ERROR(xfs_dir_cilookup_result(args, >> + ci_sfep->name, ci_sfep->namelen)); > > Putting a function call inside XFS_ERROR is quite unreadable. Should be > easy to fix as there's already an error variable in scope. Done (even though there was no "error" variable in this function). >> @@ -1646,15 +1653,18 @@ xfs_lookup( >> return XFS_ERROR(EIO); >> >> lock_mode = xfs_ilock_map_shared(dp); >> - error = xfs_dir_lookup(NULL, dp, name, &inum); >> + error = xfs_dir_lookup(NULL, dp, name, &inum, ci_match); >> xfs_iunlock_map_shared(dp, lock_mode); >> >> if (error) >> goto out; >> >> error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); >> - if (error) >> + if (error) { >> + if (ci_match && *ci_match) >> + kmem_free(name->name, name->len); >> goto out; > > normal style would be to add a out_free_name label for this one to move > the error handling code into one place at the end of the function. Done. I've also changed "int *ci_match" to "struct xfs_name *ci_name" to make it's use clearer and not overload the use of the "name" parameter. Barry. From owner-xfs@oss.sgi.com Tue May 13 23:08:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 23:08:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_35 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E68Svk015019 for ; Tue, 13 May 2008 23:08:30 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA14801; Wed, 14 May 2008 16:09:09 +1000 Date: Wed, 14 May 2008 16:12:50 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 2/4] XFS: add op_flags field and helpers to xfs_da_args From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.598022276@chook.melbourne.sgi.com> <20080513083458.GB21919@infradead.org> Message-ID: In-Reply-To: <20080513083458.GB21919@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4E68Yvk015026 X-archive-position: 15877 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 13 May 2008 18:34:58 +1000, Christoph Hellwig wrote: > On Tue, May 13, 2008 at 05:57:51PM +1000, Barry Naujok wrote: >> The end of the xfs_da_args structure has 4 unsigned char fields for >> true/false information on directory and attr operations using the >> xfs_da_args structure. >> >> The following converts these 4 into a op_flags field that uses the >> first 4 bits for these fields and allows expansion for future >> operation information (eg. case-insensitive lookup request). >> >> There is also a bit of EOL whitespace cleanup too. > > Looks generally good to me. A few stylistic comments: > > - I don't think the xfs_da_is*_op wrappers help readability, we'd > be better off without those. I have taken the wrappers out. > - op_flags seems like a rather odd name to me, what about > lookup_flags instead? Because these flags are used for all sorts of dir and attr operations. > And the hinks below are an awfull lot of random reformatting that don't > belong into this patch. As they're sensible what about just commiting > the beforehand? Yanked the whitespace cleanups from the follow up patches. >> dsize = dp->i_df.if_bytes; >> - >> + >> switch (dp->i_d.di_format) { >> case XFS_DINODE_FMT_EXTENTS: >> - /* >> - * If there is no attr fork and the data fork is extents, >> - * determine if creating the default attr fork will result >> - * in the extents form migrating to btree. If so, the >> - * minimum offset only needs to be the space required for >> + /* >> + * If there is no attr fork and the data fork is extents, >> + * determine if creating the default attr fork will result >> + * in the extents form migrating to btree. If so, the >> + * minimum offset only needs to be the space required for >> * the btree root. >> - */ >> + */ >> if (!dp->i_d.di_forkoff && dp->i_df.if_bytes > mp->m_attroffset) >> dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS); >> break; >> - >> + >> case XFS_DINODE_FMT_BTREE: >> /* >> * If have data btree then keep forkoff if we have one, >> - * otherwise we are adding a new attr, so then we set >> - * minforkoff to where the btree root can finish so we have >> + * otherwise we are adding a new attr, so then we set >> + * minforkoff to where the btree root can finish so we have >> * plenty of room for attrs >> */ >> if (dp->i_d.di_forkoff) { >> - if (offset < dp->i_d.di_forkoff) >> + if (offset < dp->i_d.di_forkoff) >> return 0; >> - else >> + else >> return dp->i_d.di_forkoff; >> } else >> dsize = XFS_BMAP_BROOT_SPACE(dp->i_df.if_broot); >> break; >> } >> - >> - /* >> - * A data fork btree root must have space for at least >> + >> + /* >> + * A data fork btree root must have space for at least >> * MINDBTPTRS key/ptr pairs if the data fork is small or empty. >> */ >> minforkoff = MAX(dsize, XFS_BMDR_SPACE_CALC(MINDBTPTRS)); > > From owner-xfs@oss.sgi.com Tue May 13 23:44:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 13 May 2008 23:44:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E6iAta017693 for ; Tue, 13 May 2008 23:44:13 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA15981; Wed, 14 May 2008 16:44:53 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4E6iqsT165849683; Wed, 14 May 2008 16:44:53 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4E6ip1w167237394; Wed, 14 May 2008 16:44:51 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Wed, 14 May 2008 16:44:51 +1000 From: David Chinner To: Lachlan McIlroy Cc: xfs-dev , xfs-oss Subject: Re: [PATCH] make inode reclaim wait for log I/O to complete Message-ID: <20080514064451.GF155679365@sgi.com> References: <482A77A9.5040806@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482A77A9.5040806@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15879 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Wed, May 14, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: > An xfs inode can be destroyed before log I/O involving that inode > is complete. We need to wait for the inode to be unpinned before > tearing it down. > > Lachlan > > --- fs/xfs/xfs_inode.c_1.501 2008-05-12 14:45:17.000000000 +1000 > +++ fs/xfs/xfs_inode.c 2008-05-12 12:23:48.000000000 +1000 > @@ -2787,7 +2787,7 @@ __xfs_iunpin_wait( > wait_event(ip->i_ipin_wait, (atomic_read(&ip->i_pincount) == > 0)); > } > > -static inline void > +inline void > xfs_iunpin_wait( > xfs_inode_t *ip) > { You want to kill the inline on this. > --- fs/xfs/xfs_inode.h_1.245 2008-05-12 14:45:20.000000000 +1000 > +++ fs/xfs/xfs_inode.h 2008-05-12 12:31:37.000000000 +1000 > @@ -481,6 +481,7 @@ void xfs_ifunlock(xfs_inode_t *); > void xfs_ireclaim(xfs_inode_t *); > int xfs_finish_reclaim(xfs_inode_t *, int, int); > int xfs_finish_reclaim_all(struct xfs_mount *, int); > +void xfs_iunpin_wait(xfs_inode_t *); > > /* > * xfs_inode.c prototypes. > --- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 > +++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 > @@ -3324,6 +3324,7 @@ xfs_finish_reclaim( > * because we're gonna reclaim the inode anyway. > */ > if (error) { > + xfs_iunpin_wait(ip); > xfs_iunlock(ip, XFS_ILOCK_EXCL); > goto reclaim; > } We can't get an error from xfs_iflush() from here that hasn't already passed through xfs_iunpin_wait() in xfs_iflush(). Hence we should never see a pinned inode through this path. > @@ -3336,6 +3337,7 @@ xfs_finish_reclaim( > } > > xfs_ifunlock(ip); > + xfs_iunpin_wait(ip); If we are not shutting down the filesystem, how do we get a pinned inode here? A pinned inode is a dirty inode and should be caught by the above code. Is the crash occurring when a force shutdown is in progress? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed May 14 00:05:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:05:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E755fn021436 for ; Wed, 14 May 2008 00:05:09 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA17015; Wed, 14 May 2008 17:05:45 +1000 Message-ID: <482A8F49.6050003@sgi.com> Date: Wed, 14 May 2008 17:05:45 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH 1/2] kill attr_capable callbacks References: <20080430112213.GA16966@lst.de> In-Reply-To: <20080430112213.GA16966@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15880 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi Christoph, Looks reasonable to me - comparing xattr_permission() with attr_user_capable() and attr_trusted_capable(). Also the xattr_permission() makes more sense with its MAY_WRITE testing otherwise it looks like we'd be doing some unfair tests in the getxattr case. I'll run thru qa and check in soon. --Tim Christoph Hellwig wrote: > No need for addition permission checks in the xattr handler, > fs/xattr.c:xattr_permission() already does them, and in fact slightly > more strict then what was in the attr_capable handlers. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:32:56.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-04-29 21:33:30.000000000 +0200 > @@ -747,15 +747,11 @@ xfs_vn_setxattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - int error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > > /* Convert Linux syscall to XFS internal ATTR flags */ > if (flags & XATTR_CREATE) > @@ -777,15 +773,11 @@ xfs_vn_getxattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - ssize_t error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > > /* Convert Linux syscall to XFS internal ATTR flags */ > if (!size) { > @@ -825,15 +817,12 @@ xfs_vn_removexattr( > char *attr = (char *)name; > attrnames_t *namesp; > int xflags = 0; > - int error; > > namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > if (!namesp) > return -EOPNOTSUPP; > attr += namesp->attr_namelen; > - error = namesp->attr_capable(vp, NULL); > - if (error) > - return error; > + > xflags |= namesp->attr_flag; > return namesp->attr_remove(vp, attr, xflags); > } > Index: linux-2.6-xfs/fs/xfs/xfs_attr.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-04-29 21:32:25.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-04-29 21:32:51.000000000 +0200 > @@ -2622,43 +2622,6 @@ attr_lookup_namespace( > return NULL; > } > > -/* > - * Some checks to prevent people abusing EAs to get over quota: > - * - Don't allow modifying user EAs on devices/symlinks; > - * - Don't allow modifying user EAs if sticky bit set; > - */ > -STATIC int > -attr_user_capable( > - bhv_vnode_t *vp, > - cred_t *cred) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > - return -EPERM; > - if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode) && > - !capable(CAP_SYS_ADMIN)) > - return -EPERM; > - if (S_ISDIR(inode->i_mode) && (inode->i_mode & S_ISVTX) && > - (current_fsuid(cred) != inode->i_uid) && !capable(CAP_FOWNER)) > - return -EPERM; > - return 0; > -} > - > -STATIC int > -attr_trusted_capable( > - bhv_vnode_t *vp, > - cred_t *cred) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) > - return -EPERM; > - if (!capable(CAP_SYS_ADMIN)) > - return -EPERM; > - return 0; > -} > - > STATIC int > attr_system_set( > bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > @@ -2709,7 +2672,6 @@ struct attrnames attr_system = { > .attr_get = attr_system_get, > .attr_set = attr_system_set, > .attr_remove = attr_system_remove, > - .attr_capable = (attrcapable_t)fs_noerr, > }; > > struct attrnames attr_trusted = { > @@ -2719,7 +2681,6 @@ struct attrnames attr_trusted = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = attr_trusted_capable, > }; > > struct attrnames attr_secure = { > @@ -2729,7 +2690,6 @@ struct attrnames attr_secure = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = (attrcapable_t)fs_noerr, > }; > > struct attrnames attr_user = { > @@ -2738,7 +2698,6 @@ struct attrnames attr_user = { > .attr_get = attr_generic_get, > .attr_set = attr_generic_set, > .attr_remove = attr_generic_remove, > - .attr_capable = attr_user_capable, > }; > > struct attrnames *attr_namespaces[] = > Index: linux-2.6-xfs/fs/xfs/xfs_attr.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-04-29 21:33:38.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-04-29 21:33:52.000000000 +0200 > @@ -42,7 +42,6 @@ typedef int (*attrset_t)(bhv_vnode_t *, > typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); > typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); > typedef int (*attrexists_t)(bhv_vnode_t *); > -typedef int (*attrcapable_t)(bhv_vnode_t *, struct cred *); > > typedef struct attrnames { > char * attr_name; > @@ -52,7 +51,6 @@ typedef struct attrnames { > attrset_t attr_set; > attrremove_t attr_remove; > attrexists_t attr_exists; > - attrcapable_t attr_capable; > } attrnames_t; > > #define ATTR_NAMECOUNT 4 > From owner-xfs@oss.sgi.com Wed May 14 00:50:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:51:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7onvB028763 for ; Wed, 14 May 2008 00:50:52 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18197; Wed, 14 May 2008 17:51:25 +1000 Date: Wed, 14 May 2008 17:55:45 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, aia21@cantab.net Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080513085724.GC21919@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15881 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Tue, 13 May 2008 18:57:24 +1000, Christoph Hellwig wrote: > First please Cc Anton on this as he wrote the original version of > what's now d_add_ci, I suspect he might have some useful comments. > > > On Tue, May 13, 2008 at 05:57:52PM +1000, Barry Naujok wrote: >> Another unusual interaction with the dcache is not storing >> negative dentries like other filesystems doing a d_add(dentry, NULL) >> when an ENOENT is returned. During the VFS lookup, if a dentry >> returned has no inode, dput is called and ENOENT is returned. >> By not doing a d_add, this actually removes it completely from >> the dcache to be reused. > > That is a way to implement this correctly, but I suspect not creating > negative dentries will degrade performance quite badly on some > workloads. Then again CI is useful only for samba serving where the > namecache on the client side should mitigate that effect. Not quite sure if this is the right test, but I did 1000 creates on a brand new filesystem with and without ci on my SATA drive, both sustained almost 600 creates per second. I believe creates would be the worst case scenario for not adding negative dentries? > We'd probably be better off long-term implementing Anton's earlier > suggestion to have a routine that purges all ci aliased negative > dentries on a successfull lookup. Barry. From owner-xfs@oss.sgi.com Wed May 14 00:54:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:54:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7sTYo029053 for ; Wed, 14 May 2008 00:54:35 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18251; Wed, 14 May 2008 17:55:16 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 11F3558C4C29; Wed, 14 May 2008 17:55:15 +1000 (EST) Message-Id: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 14 May 2008 17:52:44 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 0/4] XFS: ASCII case-insensitivity support X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15882 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs I've addressed Christoph's comments in these patches. I've also changed the behaviour of the "ci_match" parameter being passed to the lookup functions, and kept the use of it separate from the "name" parameter. The other change is the xfs_sb_version_hasasciici() name from "oldci". This is inline with the user-space patch posted a few days ago. -- From owner-xfs@oss.sgi.com Wed May 14 00:54:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:55:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_45, J_CHICKENPOX_53,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7sUIq029056 for ; Wed, 14 May 2008 00:54:35 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18261; Wed, 14 May 2008 17:55:17 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 52A9758C4C29; Wed, 14 May 2008 17:55:17 +1000 (EST) Message-Id: <20080514075516.790251517@chook.melbourne.sgi.com> References: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 14 May 2008 17:52:47 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Content-Disposition: inline; filename=return_name.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15885 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs This implements the code to store the actual filename found during a lookup in the dentry cache and to avoid multiple entries in the dcache pointing to the same inode. To avoid polluting the dcache, we implement a new directory inode operations for lookup. xfs_vn_ci_lookup() interacts directly with the dcache and the code was derived from ntfs_lookup() in fs/ntfs/namei.c. The "actual name" is only allocated and returned for a case- insensitive match and not an actual match. Another unusual interaction with the dcache is not storing negative dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT is returned. During the VFS lookup, if a dentry returned has no inode, dput is called and ENOENT is returned. By not doing a d_add, this actually removes it completely from the dcache to be reused. create/rename have to be modified to support unhashed dentries being passed in. Signed-off-by: Barry Naujok --- fs/dcache.c | 104 ++++++++++++++++++++++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_export.c | 2 fs/xfs/linux-2.6/xfs_iops.c | 63 +++++++++++++++++++++++++ fs/xfs/linux-2.6/xfs_iops.h | 1 fs/xfs/xfs_da_btree.h | 1 fs/xfs/xfs_dir2.c | 40 +++++++++++++++- fs/xfs/xfs_dir2.h | 6 ++ fs/xfs/xfs_dir2_block.c | 9 ++- fs/xfs/xfs_dir2_leaf.c | 5 +- fs/xfs/xfs_dir2_node.c | 16 ++++-- fs/xfs/xfs_dir2_sf.c | 16 +++--- fs/xfs/xfs_vnodeops.c | 17 +++++- fs/xfs/xfs_vnodeops.h | 2 include/linux/dcache.h | 1 14 files changed, 255 insertions(+), 28 deletions(-) Index: kern_ci/fs/dcache.c =================================================================== --- kern_ci.orig/fs/dcache.c +++ kern_ci/fs/dcache.c @@ -1191,6 +1191,109 @@ struct dentry *d_splice_alias(struct ino return new; } +/** + * d_add_ci - lookup or allocate new dentry with case-exact name + * @inode: the inode case-insensitive lookup has found + * @dentry: the negative dentry that was passed to the parent's lookup func + * @name: the case-exact name to be associated with the returned dentry + * + * This is to avoid filling the dcache with case-insensitive names to the + * same inode, only the actual correct case is stored in the dcache for + * case-insensitive filesystems. + * + * For a case-insensitive lookup match and if the the case-exact dentry + * already exists in in the dcache, use it and return it. + * + * If no entry exists with the exact case name, allocate new dentry with + * the exact case, and return the spliced entry. + */ + +struct dentry *d_add_ci(struct inode *inode, struct dentry *dentry, + struct qstr *name) +{ + int error; + struct dentry *found; + struct dentry *new; + + /* Does a dentry matching the name exist already? */ + found = d_hash_and_lookup(dentry->d_parent, name); + /* If not, create it now and return */ + if (!found) { + new = d_alloc(dentry->d_parent, name); + if (!new) { + error = -ENOMEM; + goto err_out; + } + found = d_splice_alias(inode, new); + if (found) { + dput(new); + return found; + } + return new; + } + /* Matching dentry exists, check if it is negative. */ + if (found->d_inode) { + if (unlikely(found->d_inode != inode)) { + /* This can't happen because bad inodes are unhashed. */ + BUG_ON(!is_bad_inode(inode)); + BUG_ON(!is_bad_inode(found->d_inode)); + } + /* + * Already have the inode and the dentry attached, decrement + * the reference count to balance the iget() done + * earlier on. We found the dentry using d_lookup() so it + * cannot be disconnected and thus we do not need to worry + * about any NFS/disconnectedness issues here. + */ + iput(inode); + return found; + } + /* + * Negative dentry: instantiate it unless the inode is a directory and + * has a 'disconnected' dentry (i.e. IS_ROOT and DCACHE_DISCONNECTED), + * in which case d_move() that in place of the found dentry. + */ + if (!S_ISDIR(inode->i_mode)) { + /* Not a directory; everything is easy. */ + d_instantiate(found, inode); + return found; + } + spin_lock(&dcache_lock); + if (list_empty(&inode->i_dentry)) { + /* + * Directory without a 'disconnected' dentry; we need to do + * d_instantiate() by hand because it takes dcache_lock which + * we already hold. + */ + list_add(&found->d_alias, &inode->i_dentry); + found->d_inode = inode; + spin_unlock(&dcache_lock); + security_d_instantiate(found, inode); + return found; + } + /* + * Directory with a 'disconnected' dentry; get a reference to the + * 'disconnected' dentry. + */ + new = list_entry(inode->i_dentry.next, struct dentry, d_alias); + dget_locked(new); + spin_unlock(&dcache_lock); + /* Do security vodoo. */ + security_d_instantiate(found, inode); + /* Move new in place of found. */ + d_move(new, found); + /* Balance the iget() we did above. */ + iput(inode); + /* Throw away found. */ + dput(found); + /* Use new as the actual dentry. */ + return new; + +err_out: + iput(inode); + return ERR_PTR(error); +} + /** * d_lookup - search for a dentry @@ -2178,6 +2281,7 @@ EXPORT_SYMBOL(d_path); EXPORT_SYMBOL(d_prune_aliases); EXPORT_SYMBOL(d_rehash); EXPORT_SYMBOL(d_splice_alias); +EXPORT_SYMBOL(d_add_ci); EXPORT_SYMBOL(d_validate); EXPORT_SYMBOL(dget_locked); EXPORT_SYMBOL(dput); Index: kern_ci/fs/xfs/linux-2.6/xfs_export.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_export.c +++ kern_ci/fs/xfs/linux-2.6/xfs_export.c @@ -215,7 +215,7 @@ xfs_fs_get_parent( struct xfs_inode *cip; struct dentry *parent; - error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip); + error = xfs_lookup(XFS_I(child->d_inode), &xfs_name_dotdot, &cip, NULL); if (unlikely(error)) return ERR_PTR(-error); Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.c +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.c @@ -345,6 +345,8 @@ xfs_vn_mknod( if (S_ISDIR(mode)) xfs_validate_fields(inode); d_instantiate(dentry, inode); + if (d_unhashed(dentry)) + d_rehash(dentry); xfs_validate_fields(dir); return -error; @@ -389,7 +391,7 @@ xfs_vn_lookup( return ERR_PTR(-ENAMETOOLONG); xfs_dentry_to_name(&name, dentry); - error = xfs_lookup(XFS_I(dir), &name, &cip); + error = xfs_lookup(XFS_I(dir), &name, &cip, NULL); if (unlikely(error)) { if (unlikely(error != ENOENT)) return ERR_PTR(-error); @@ -400,6 +402,46 @@ xfs_vn_lookup( return d_splice_alias(cip->i_vnode, dentry); } +STATIC struct dentry * +xfs_vn_ci_lookup( + struct inode *dir, + struct dentry *dentry, + struct nameidata *nd) +{ + struct xfs_inode *ip; + struct xfs_name xname; + struct xfs_name ci_name; + struct qstr dname; + int error; + + if (dentry->d_name.len >= MAXNAMELEN) + return ERR_PTR(-ENAMETOOLONG); + + xfs_dentry_to_name(&xname, dentry); + error = xfs_lookup(XFS_I(dir), &xname, &ip, &ci_name); + if (unlikely(error)) { + if (unlikely(error != ENOENT)) + return ERR_PTR(-error); + /* + * don't d_add dentry, __link_path_walk will dput the + * dentry if its inode is NULL which means the negative + * dentry will be destroyed rather than kept around. + */ + return NULL; + } + + /* if exact match, just splice and exit */ + if (!ci_name->name) + return d_splice_alias(ip->i_vnode, dentry); + + /* else case-insensitive match... */ + dname.name = ci_name.name; + dname.len = ci_name.len; + dentry = d_add_ci(ip->i_vnode, dentry, &dname); + kmem_free(ci_name.name); + return dentry; +} + STATIC int xfs_vn_link( struct dentry *old_dentry, @@ -911,6 +953,25 @@ const struct inode_operations xfs_dir_in .removexattr = xfs_vn_removexattr, }; +const struct inode_operations xfs_dir_ci_inode_operations = { + .create = xfs_vn_create, + .lookup = xfs_vn_ci_lookup, + .link = xfs_vn_link, + .unlink = xfs_vn_unlink, + .symlink = xfs_vn_symlink, + .mkdir = xfs_vn_mkdir, + .rmdir = xfs_vn_rmdir, + .mknod = xfs_vn_mknod, + .rename = xfs_vn_rename, + .permission = xfs_vn_permission, + .getattr = xfs_vn_getattr, + .setattr = xfs_vn_setattr, + .setxattr = xfs_vn_setxattr, + .getxattr = xfs_vn_getxattr, + .listxattr = xfs_vn_listxattr, + .removexattr = xfs_vn_removexattr, +}; + const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, Index: kern_ci/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_iops.h +++ kern_ci/fs/xfs/linux-2.6/xfs_iops.h @@ -20,6 +20,7 @@ extern const struct inode_operations xfs_inode_operations; extern const struct inode_operations xfs_dir_inode_operations; +extern const struct inode_operations xfs_dir_ci_inode_operations; extern const struct inode_operations xfs_symlink_inode_operations; extern const struct file_operations xfs_file_operations; Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -143,6 +143,7 @@ typedef struct xfs_da_args { #define XFS_DA_OP_RENAME 0x0002 /* this is an atomic rename op */ #define XFS_DA_OP_ADDNAME 0x0004 /* this is an add operation */ #define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ +#define XFS_DA_OP_CILOOKUP 0x0010 /* lookup to return CI name if found */ /* * Structure to describe buffer(s) for a block. Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -193,14 +193,43 @@ xfs_dir_createname( } /* + * If doing a CI lookup and case-insensitive match, dup actual name into + * args.value. Return EEXIST for success (ie. name found) or an error. + */ +int +xfs_dir_cilookup_result( + struct xfs_da_args *args, + const char *name, + int len) +{ + if (args->cmpresult == XFS_CMP_DIFFERENT) + return ENOENT; + if (args->cmpresult != XFS_CMP_CASE || + !(args->op_flags & XFS_DA_OP_CILOOKUP)) + return EEXIST; + + args->value = kmem_alloc(len, KM_MAYFAIL); + if (!args->value) + return ENOMEM; + + memcpy(args->value, name, len); + args->valuelen = len; + return EEXIST; +} + +/* * Lookup a name in a directory, give back the inode number. + * If ci_name is not NULL, returns the actual name in ci_name if it differs + * to name, or ci_name->name is set to NULL for an exact match. */ + int xfs_dir_lookup( xfs_trans_t *tp, xfs_inode_t *dp, struct xfs_name *name, - xfs_ino_t *inum) /* out: inode number */ + xfs_ino_t *inum, /* out: inode number */ + struct xfs_name *ci_name) /* out: actual name if CI match */ { xfs_da_args_t args; int rval; @@ -217,6 +246,8 @@ xfs_dir_lookup( args.whichfork = XFS_DATA_FORK; args.trans = tp; args.op_flags = XFS_DA_OP_OKNOENT; + if (ci_name) + args.op_flags |= XFS_DA_OP_CILOOKUP; args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) @@ -233,8 +264,13 @@ xfs_dir_lookup( rval = xfs_dir2_node_lookup(&args); if (rval == EEXIST) rval = 0; - if (rval == 0) + if (!rval) { *inum = args.inumber; + if (ci_name) { + ci_name->name = args.value; + ci_name->len = args.valuelen; + } + } return rval; } Index: kern_ci/fs/xfs/xfs_dir2.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.h +++ kern_ci/fs/xfs/xfs_dir2.h @@ -74,7 +74,8 @@ extern int xfs_dir_createname(struct xfs xfs_fsblock_t *first, struct xfs_bmap_free *flist, xfs_extlen_t tot); extern int xfs_dir_lookup(struct xfs_trans *tp, struct xfs_inode *dp, - struct xfs_name *name, xfs_ino_t *inum); + struct xfs_name *name, xfs_ino_t *inum, + struct xfs_name *ci_name); extern int xfs_dir_removename(struct xfs_trans *tp, struct xfs_inode *dp, struct xfs_name *name, xfs_ino_t ino, xfs_fsblock_t *first, @@ -99,4 +100,7 @@ extern int xfs_dir2_isleaf(struct xfs_tr extern int xfs_dir2_shrink_inode(struct xfs_da_args *args, xfs_dir2_db_t db, struct xfs_dabuf *bp); +extern int xfs_dir_cilookup_result(struct xfs_da_args *args, const char *name, + int len); + #endif /* __XFS_DIR2_H__ */ Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -610,14 +610,15 @@ xfs_dir2_block_lookup( /* * Get the offset from the leaf entry, to point to the data. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)block + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); + dep = (xfs_dir2_data_entry_t *)((char *)block + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(blp[ent].address))); /* - * Fill in inode number, release the block. + * Fill in inode number, CI name if appropriate, release the block. */ args->inumber = be64_to_cpu(dep->inumber); + error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); xfs_da_brelse(args->trans, bp); - return XFS_ERROR(EEXIST); + return XFS_ERROR(error); } /* Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1299,12 +1299,13 @@ xfs_dir2_leaf_lookup( ((char *)dbp->data + xfs_dir2_dataptr_to_off(dp->i_mount, be32_to_cpu(lep->address))); /* - * Return the found inode number. + * Return the found inode number & CI name if appropriate */ args->inumber = be64_to_cpu(dep->inumber); + error = xfs_dir_cilookup_result(args, dep->name, dep->namelen); xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); - return XFS_ERROR(EEXIST); + return XFS_ERROR(error); } /* Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -549,7 +549,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_dir2_data_entry_t *dep; /* data block entry */ xfs_inode_t *dp; /* incore directory inode */ int error; /* error return value */ - int di; /* data entry index */ + int di = -1; /* data entry index */ int index; /* leaf entry index */ xfs_dir2_leaf_t *leaf; /* leaf structure */ xfs_dir2_leaf_entry_t *lep; /* leaf entry */ @@ -577,6 +577,7 @@ xfs_dir2_leafn_lookup_for_entry( if (state->extravalid) { curbp = state->extrablk.bp; curdb = state->extrablk.blkno; + di = state->extrablk.index; } /* * Loop over leaf entries with the right hash value. @@ -637,7 +638,6 @@ xfs_dir2_leafn_lookup_for_entry( } /* Didn't find an exact match. */ error = ENOENT; - di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || (args->op_flags & XFS_DA_OP_OKNOENT)); out: @@ -652,7 +652,7 @@ out: state->extravalid = 0; } /* - * Return the index, that will be the insertion point. + * Return the index, that will be the deletion point for remove/replace. */ *indexp = index; return XFS_ERROR(error); @@ -1820,8 +1820,14 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; - else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) - rval = EEXIST; /* a case-insensitive match was found */ + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) { + /* If a CI match, dup the actual name and return EEXIST */ + xfs_dir2_data_entry_t *dep; + + dep = (xfs_dir2_data_entry_t *)((char *)state->extrablk.bp-> + data + state->extrablk.index); + rval = xfs_dir_cilookup_result(args, dep->name, dep->namelen); + } /* * Release the btree blocks and leaf block. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -812,9 +812,11 @@ xfs_dir2_sf_lookup( { xfs_inode_t *dp; /* incore directory inode */ int i; /* entry index */ + int error; xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ enum xfs_dacmp cmp; /* comparison result */ + xfs_dir2_sf_entry_t *ci_sfep; /* case-insens. entry */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -852,6 +854,7 @@ xfs_dir2_sf_lookup( /* * Loop over all the entries trying to match ours. */ + ci_sfep = NULL; for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { /* @@ -872,14 +875,13 @@ xfs_dir2_sf_lookup( ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); /* * Here, we can only be doing a lookup (not a rename or replace). - * If a case-insensitive match was found earlier, return "found". + * If a case-insensitive match was not found, return ENOENT. */ - if (args->cmpresult == XFS_CMP_CASE) - return XFS_ERROR(EEXIST); - /* - * Didn't find it. - */ - return XFS_ERROR(ENOENT); + if (!ci_sfep) + return XFS_ERROR(ENOENT); + /* otherwise process the CI match as required by the caller */ + error = xfs_dir_cilookup_result(args, ci_sfep->name, ci_sfep->namelen); + return XFS_ERROR(error); } /* Index: kern_ci/fs/xfs/xfs_vnodeops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.c +++ kern_ci/fs/xfs/xfs_vnodeops.c @@ -1601,12 +1601,18 @@ xfs_inactive( return VN_INACTIVE_CACHE; } - +/* + * Lookups up an inode from "name". If ci_name is not NULL, then a CI match + * is allowed, otherwise it has to be an exact match. If a CI match is found, + * ci_name->name will point to a the actual name (caller must free) or + * will be set to NULL if an exact match is found. + */ int xfs_lookup( xfs_inode_t *dp, struct xfs_name *name, - xfs_inode_t **ipp) + xfs_inode_t **ipp, + struct xfs_name *ci_name) { xfs_ino_t inum; int error; @@ -1618,15 +1624,18 @@ xfs_lookup( return XFS_ERROR(EIO); lock_mode = xfs_ilock_map_shared(dp); - error = xfs_dir_lookup(NULL, dp, name, &inum); + error = xfs_dir_lookup(NULL, dp, name, &inum, ci_name); xfs_iunlock_map_shared(dp, lock_mode); if (error) goto out; error = xfs_iget(dp->i_mount, NULL, inum, 0, 0, ipp, 0); - if (error) + if (error) { + if (ci_name) + kmem_free(ci_name->name); goto out; + } xfs_itrace_ref(*ipp); return 0; Index: kern_ci/fs/xfs/xfs_vnodeops.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_vnodeops.h +++ kern_ci/fs/xfs/xfs_vnodeops.h @@ -22,7 +22,7 @@ int xfs_fsync(struct xfs_inode *ip); int xfs_release(struct xfs_inode *ip); int xfs_inactive(struct xfs_inode *ip); int xfs_lookup(struct xfs_inode *dp, struct xfs_name *name, - struct xfs_inode **ipp); + struct xfs_inode **ipp, struct xfs_name *ci_name); int xfs_create(struct xfs_inode *dp, struct xfs_name *name, mode_t mode, xfs_dev_t rdev, struct xfs_inode **ipp, struct cred *credp); int xfs_remove(struct xfs_inode *dp, struct xfs_name *name, Index: kern_ci/include/linux/dcache.h =================================================================== --- kern_ci.orig/include/linux/dcache.h +++ kern_ci/include/linux/dcache.h @@ -231,6 +231,7 @@ extern void d_delete(struct dentry *); extern struct dentry * d_alloc(struct dentry *, const struct qstr *); extern struct dentry * d_alloc_anon(struct inode *); extern struct dentry * d_splice_alias(struct inode *, struct dentry *); +extern struct dentry * d_add_ci(struct inode *, struct dentry *, struct qstr *); extern void shrink_dcache_sb(struct super_block *); extern void shrink_dcache_parent(struct dentry *); extern void shrink_dcache_for_umount(struct super_block *); -- From owner-xfs@oss.sgi.com Wed May 14 00:54:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:55:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_55,J_CHICKENPOX_57, J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7sUaX029055 for ; Wed, 14 May 2008 00:54:35 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18257; Wed, 14 May 2008 17:55:16 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id B7CBD58C4C35; Wed, 14 May 2008 17:55:16 +1000 (EST) Message-Id: <20080514075516.430681639@chook.melbourne.sgi.com> References: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 14 May 2008 17:52:46 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 2/4] XFS: add op_flags field and helpers to xfs_da_args Content-Disposition: inline; filename=additional_da_args_flag.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15886 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs The end of the xfs_da_args structure has 4 unsigned char fields for true/false information on directory and attr operations using the xfs_da_args structure. The following converts these 4 into a op_flags field that uses the first 4 bits for these fields and allows expansion for future operation information (eg. case-insensitive lookup request). There is also a bit of EOL whitespace cleanup too. Signed-off-by: Barry Naujok --- fs/xfs/xfs_attr.c | 11 +++++------ fs/xfs/xfs_attr_leaf.c | 20 +++++++++++--------- fs/xfs/xfs_da_btree.c | 2 +- fs/xfs/xfs_da_btree.h | 13 +++++++++---- fs/xfs/xfs_dir2.c | 12 ++++++------ fs/xfs/xfs_dir2_block.c | 10 +++++----- fs/xfs/xfs_dir2_leaf.c | 15 ++++++++------- fs/xfs/xfs_dir2_node.c | 16 +++++++++------- fs/xfs/xfs_dir2_sf.c | 8 ++++---- fs/xfs/xfs_dir2_trace.c | 20 +++++++++++--------- fs/xfs/xfsidbg.c | 5 ++++- 11 files changed, 73 insertions(+), 59 deletions(-) Index: kern_ci/fs/xfs/xfs_attr.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr.c +++ kern_ci/fs/xfs/xfs_attr.c @@ -241,8 +241,7 @@ xfs_attr_set_int(xfs_inode_t *dp, struct args.firstblock = &firstblock; args.flist = &flist; args.whichfork = XFS_ATTR_FORK; - args.addname = 1; - args.oknoent = 1; + args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; /* * Determine space new attribute will use, and if it would be @@ -974,7 +973,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *arg xfs_da_brelse(args->trans, bp); return(retval); } - args->rename = 1; /* an atomic rename */ + args->op_flags |= XFS_DA_OP_RENAME; /* an atomic rename */ args->blkno2 = args->blkno; /* set 2nd entry info*/ args->index2 = args->index; args->rmtblkno2 = args->rmtblkno; @@ -1054,7 +1053,7 @@ xfs_attr_leaf_addname(xfs_da_args_t *arg * so that one disappears and one appears atomically. Then we * must remove the "old" attribute/value pair. */ - if (args->rename) { + if (args->op_flags & XFS_DA_OP_RENAME) { /* * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. @@ -1307,7 +1306,7 @@ restart: } else if (retval == EEXIST) { if (args->flags & ATTR_CREATE) goto out; - args->rename = 1; /* atomic rename op */ + args->op_flags |= XFS_DA_OP_RENAME; /* atomic rename op */ args->blkno2 = args->blkno; /* set 2nd entry info*/ args->index2 = args->index; args->rmtblkno2 = args->rmtblkno; @@ -1425,7 +1424,7 @@ restart: * so that one disappears and one appears atomically. Then we * must remove the "old" attribute/value pair. */ - if (args->rename) { + if (args->op_flags & XFS_DA_OP_RENAME) { /* * In a separate transaction, set the incomplete flag on the * "old" attr and clear the incomplete flag on the "new" attr. Index: kern_ci/fs/xfs/xfs_attr_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_attr_leaf.c +++ kern_ci/fs/xfs/xfs_attr_leaf.c @@ -369,9 +369,10 @@ xfs_attr_shortform_remove(xfs_da_args_t * Fix up the start offset of the attribute fork */ totsize -= size; - if (totsize == sizeof(xfs_attr_sf_hdr_t) && !args->addname && - (mp->m_flags & XFS_MOUNT_ATTR2) && - (dp->i_d.di_format != XFS_DINODE_FMT_BTREE)) { + if (totsize == sizeof(xfs_attr_sf_hdr_t) && + !(args->op_flags & XFS_DA_OP_ADDNAME) && + (mp->m_flags & XFS_MOUNT_ATTR2) && + (dp->i_d.di_format != XFS_DINODE_FMT_BTREE)) { /* * Last attribute now removed, revert to original * inode format making all literal area available @@ -389,9 +390,10 @@ xfs_attr_shortform_remove(xfs_da_args_t xfs_idata_realloc(dp, -size, XFS_ATTR_FORK); dp->i_d.di_forkoff = xfs_attr_shortform_bytesfit(dp, totsize); ASSERT(dp->i_d.di_forkoff); - ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || args->addname || - !(mp->m_flags & XFS_MOUNT_ATTR2) || - dp->i_d.di_format == XFS_DINODE_FMT_BTREE); + ASSERT(totsize > sizeof(xfs_attr_sf_hdr_t) || + (args->op_flags & XFS_DA_OP_ADDNAME) || + !(mp->m_flags & XFS_MOUNT_ATTR2) || + dp->i_d.di_format == XFS_DINODE_FMT_BTREE); dp->i_afp->if_ext_max = XFS_IFORK_ASIZE(dp) / (uint)sizeof(xfs_bmbt_rec_t); dp->i_df.if_ext_max = @@ -531,7 +533,7 @@ xfs_attr_shortform_to_leaf(xfs_da_args_t nargs.total = args->total; nargs.whichfork = XFS_ATTR_FORK; nargs.trans = args->trans; - nargs.oknoent = 1; + nargs.op_flags = XFS_DA_OP_OKNOENT; sfe = &sf->list[0]; for (i = 0; i < sf->hdr.count; i++) { @@ -853,7 +855,7 @@ xfs_attr_leaf_to_shortform(xfs_dabuf_t * nargs.total = args->total; nargs.whichfork = XFS_ATTR_FORK; nargs.trans = args->trans; - nargs.oknoent = 1; + nargs.op_flags = XFS_DA_OP_OKNOENT; entry = &leaf->entries[0]; for (i = 0; i < be16_to_cpu(leaf->hdr.count); entry++, i++) { if (entry->flags & XFS_ATTR_INCOMPLETE) @@ -1155,7 +1157,7 @@ xfs_attr_leaf_add_work(xfs_dabuf_t *bp, entry->hashval = cpu_to_be32(args->hashval); entry->flags = tmp ? XFS_ATTR_LOCAL : 0; entry->flags |= XFS_ATTR_NSP_ARGS_TO_ONDISK(args->flags); - if (args->rename) { + if (args->op_flags & XFS_DA_OP_RENAME) { entry->flags |= XFS_ATTR_INCOMPLETE; if ((args->blkno2 == args->blkno) && (args->index2 <= args->index)) { Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1431,7 +1431,7 @@ xfs_da_path_shift(xfs_da_state_t *state, } if (level < 0) { *result = XFS_ERROR(ENOENT); /* we're out of our tree */ - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); return(0); } Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -132,14 +132,19 @@ typedef struct xfs_da_args { int index2; /* index of 2nd attr in blk */ xfs_dablk_t rmtblkno2; /* remote attr value starting blkno */ int rmtblkcnt2; /* remote attr value block count */ - unsigned char justcheck; /* T/F: check for ok with no space */ - unsigned char rename; /* T/F: this is an atomic rename op */ - unsigned char addname; /* T/F: this is an add operation */ - unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + int op_flags; /* operation flags */ enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* + * Operation flags: + */ +#define XFS_DA_OP_JUSTCHECK 0x0001 /* check for ok with no space */ +#define XFS_DA_OP_RENAME 0x0002 /* this is an atomic rename op */ +#define XFS_DA_OP_ADDNAME 0x0004 /* this is an add operation */ +#define XFS_DA_OP_OKNOENT 0x0008 /* lookup/add op, ENOENT ok, else die */ + +/* * Structure to describe buffer(s) for a block. * This is needed in the directory version 2 format case, when * multiple non-contiguous fsblocks might be needed to cover one Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -175,8 +175,7 @@ xfs_dir_createname( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = 0; - args.addname = args.oknoent = 1; + args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_addname(&args); @@ -217,7 +216,7 @@ xfs_dir_lookup( args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.oknoent = 1; + args.op_flags = XFS_DA_OP_OKNOENT; args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) @@ -269,7 +268,7 @@ xfs_dir_removename( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 0; + args.op_flags = 0; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_removename(&args); @@ -352,7 +351,7 @@ xfs_dir_replace( args.total = total; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 0; + args.op_flags = 0; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_replace(&args); @@ -396,7 +395,8 @@ xfs_dir_canenter( args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; - args.justcheck = args.addname = args.oknoent = 1; + args.op_flags = XFS_DA_OP_JUSTCHECK | XFS_DA_OP_ADDNAME | + XFS_DA_OP_OKNOENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_addname(&args); Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -215,7 +215,7 @@ xfs_dir2_block_addname( /* * If this isn't a real add, we're done with the buffer. */ - if (args->justcheck) + if (args->op_flags & XFS_DA_OP_JUSTCHECK) xfs_da_brelse(tp, bp); /* * If we don't have space for the new entry & leaf ... @@ -225,7 +225,7 @@ xfs_dir2_block_addname( * Not trying to actually do anything, or don't have * a space reservation: return no-space. */ - if (args->justcheck || args->total == 0) + if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0) return XFS_ERROR(ENOSPC); /* * Convert to the next larger format. @@ -240,7 +240,7 @@ xfs_dir2_block_addname( /* * Just checking, and it would work, so say so. */ - if (args->justcheck) + if (args->op_flags & XFS_DA_OP_JUSTCHECK) return 0; needlog = needscan = 0; /* @@ -674,7 +674,7 @@ xfs_dir2_block_lookup_int( else high = mid - 1; if (low > high) { - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -713,7 +713,7 @@ xfs_dir2_block_lookup_int( } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, return success. Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -263,20 +263,21 @@ xfs_dir2_leaf_addname( * If we don't have enough free bytes but we can make enough * by compacting out stale entries, we'll do that. */ - if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] < needbytes && - be16_to_cpu(leaf->hdr.stale) > 1) { + if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] < + needbytes && be16_to_cpu(leaf->hdr.stale) > 1) { compact = 1; } /* * Otherwise if we don't have enough free bytes we need to * convert to node form. */ - else if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu(leaf->hdr.count)] < - needbytes) { + else if ((char *)bestsp - (char *)&leaf->ents[be16_to_cpu( + leaf->hdr.count)] < needbytes) { /* * Just checking or no space reservation, give up. */ - if (args->justcheck || args->total == 0) { + if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || + args->total == 0) { xfs_da_brelse(tp, lbp); return XFS_ERROR(ENOSPC); } @@ -301,7 +302,7 @@ xfs_dir2_leaf_addname( * If just checking, then it will fit unless we needed to allocate * a new data block. */ - if (args->justcheck) { + if (args->op_flags & XFS_DA_OP_JUSTCHECK) { xfs_da_brelse(tp, lbp); return use_block == -1 ? XFS_ERROR(ENOSPC) : 0; } @@ -1414,7 +1415,7 @@ xfs_dir2_leaf_lookup_int( cbp = dbp; } } - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, release the current Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -226,7 +226,7 @@ xfs_dir2_leafn_add( ASSERT(index == be16_to_cpu(leaf->hdr.count) || be32_to_cpu(leaf->ents[index].hashval) >= args->hashval); - if (args->justcheck) + if (args->op_flags & XFS_DA_OP_JUSTCHECK) return 0; /* @@ -515,7 +515,7 @@ xfs_dir2_leafn_lookup_for_addname( /* Didn't find any space */ fi = -1; out: - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); if (curbp) { /* Giving back a free block. */ state->extravalid = 1; @@ -638,7 +638,8 @@ xfs_dir2_leafn_lookup_for_entry( /* Didn't find an exact match. */ error = ENOENT; di = -1; - ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); + ASSERT(index == be16_to_cpu(leaf->hdr.count) || + (args->op_flags & XFS_DA_OP_OKNOENT)); out: if (curbp) { /* Giving back a data block. */ @@ -669,7 +670,7 @@ xfs_dir2_leafn_lookup_int( int *indexp, /* out: leaf entry index */ xfs_da_state_t *state) /* state to fill in */ { - if (args->addname) + if (args->op_flags & XFS_DA_OP_ADDNAME) return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp, state); return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state); @@ -1383,7 +1384,7 @@ xfs_dir2_node_addname( /* * It worked, fix the hash values up the btree. */ - if (!args->justcheck) + if (!(args->op_flags & XFS_DA_OP_JUSTCHECK)) xfs_da_fixhashpath(state, &state->path); } else { /* @@ -1566,7 +1567,8 @@ xfs_dir2_node_addname_int( /* * Not allowed to allocate, return failure. */ - if (args->justcheck || args->total == 0) { + if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || + args->total == 0) { /* * Drop the freespace buffer unless it came from our * caller. @@ -1712,7 +1714,7 @@ xfs_dir2_node_addname_int( /* * If just checking, we succeeded. */ - if (args->justcheck) { + if (args->op_flags & XFS_DA_OP_JUSTCHECK) { if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL) xfs_da_buf_done(fbp); return 0; Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -332,7 +332,7 @@ xfs_dir2_sf_addname( /* * Just checking or no space reservation, it doesn't fit. */ - if (args->justcheck || args->total == 0) + if ((args->op_flags & XFS_DA_OP_JUSTCHECK) || args->total == 0) return XFS_ERROR(ENOSPC); /* * Convert to block form then add the name. @@ -345,7 +345,7 @@ xfs_dir2_sf_addname( /* * Just checking, it fits. */ - if (args->justcheck) + if (args->op_flags & XFS_DA_OP_JUSTCHECK) return 0; /* * Do it the easy way - just add it at the end. @@ -869,7 +869,7 @@ xfs_dir2_sf_lookup( return XFS_ERROR(EEXIST); } } - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); /* * Here, we can only be doing a lookup (not a rename or replace). * If a case-insensitive match was found earlier, return "found". @@ -1071,7 +1071,7 @@ xfs_dir2_sf_replace( * Didn't find it. */ if (i == sfp->hdr.count) { - ASSERT(args->oknoent); + ASSERT(args->op_flags & XFS_DA_OP_OKNOENT); #if XFS_BIG_INUMS if (i8elevated) xfs_dir2_sf_toino4(args); Index: kern_ci/fs/xfs/xfs_dir2_trace.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_trace.c +++ kern_ci/fs/xfs/xfs_dir2_trace.c @@ -85,7 +85,8 @@ xfs_dir2_trace_args( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, NULL, NULL); + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), + NULL, NULL); } void @@ -100,7 +101,7 @@ xfs_dir2_trace_args_b( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), (void *)(bp ? bp->bps[0] : NULL), NULL); } @@ -117,7 +118,7 @@ xfs_dir2_trace_args_bb( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), (void *)(lbp ? lbp->bps[0] : NULL), (void *)(dbp ? dbp->bps[0] : NULL)); } @@ -157,8 +158,8 @@ xfs_dir2_trace_args_db( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)db, - (void *)dbp); + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), + (void *)(long)db, (void *)dbp); } void @@ -173,7 +174,7 @@ xfs_dir2_trace_args_i( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), (void *)((unsigned long)(i >> 32)), (void *)((unsigned long)(i & 0xFFFFFFFF))); } @@ -190,7 +191,8 @@ xfs_dir2_trace_args_s( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)s, NULL); + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), + (void *)(long)s, NULL); } void @@ -208,7 +210,7 @@ xfs_dir2_trace_args_sb( (void *)((unsigned long)(args->inumber >> 32)), (void *)((unsigned long)(args->inumber & 0xFFFFFFFF)), (void *)args->dp, (void *)args->trans, - (void *)(unsigned long)args->justcheck, (void *)(long)s, - (void *)dbp); + (void *)(unsigned long)(args->op_flags & XFS_DA_OP_JUSTCHECK), + (void *)(long)s, (void *)dbp); } #endif /* XFS_DIR2_TRACE */ Index: kern_ci/fs/xfs/xfsidbg.c =================================================================== --- kern_ci.orig/fs/xfs/xfsidbg.c +++ kern_ci/fs/xfs/xfsidbg.c @@ -5237,7 +5237,10 @@ xfsidbg_xdaargs(xfs_da_args_t *n) kdb_printf("0x%x", n->flags & i); kdb_printf(">\n"); kdb_printf(" rename %d justcheck %d addname %d oknoent %d\n", - n->rename, n->justcheck, n->addname, n->oknoent); + n->op_flags & XFS_DA_OP_RENAME != 0, + n->op_flags & XFS_DA_OP_JUSTCHECK != 0, + n->op_flags & XFS_DA_OP_ADDNAME != 0, + n->op_flags & XFS_DA_OP_OKNOENT != 0); kdb_printf(" leaf: blkno %d index %d rmtblkno %d rmtblkcnt %d\n", n->blkno, n->index, n->rmtblkno, n->rmtblkcnt); kdb_printf(" leaf2: blkno %d index %d rmtblkno %d rmtblkcnt %d\n", -- From owner-xfs@oss.sgi.com Wed May 14 00:54:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:54:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7sV5V029057 for ; Wed, 14 May 2008 00:54:35 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18264; Wed, 14 May 2008 17:55:18 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id A071A58C4C36; Wed, 14 May 2008 17:55:17 +1000 (EST) Message-Id: <20080514075517.356633290@chook.melbourne.sgi.com> References: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 14 May 2008 17:52:48 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 4/4] XFS: ASCII case-insensitive support Content-Disposition: inline; filename=ascii_ci.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15884 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Implement ASCII case-insensitive support. It's primary purpose is for supporting existing filesystems that already use this case-insensitive mode migrated from IRIX. But, if you only need ASCII-only case-insensitive support (ie. English only) and will never use another language, then this mode is perfectly adequate. ASCII-CI is implemented by generating hashes based on lower-case letters and doing lower-case compares. It implements a new xfs_nameops vector for doing the hashes and comparisons for all filename operations. To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci Signed-off-by: Barry Naujok --- fs/xfs/linux-2.6/xfs_linux.h | 1 fs/xfs/linux-2.6/xfs_super.c | 5 +++- fs/xfs/xfs_dir2.c | 51 ++++++++++++++++++++++++++++++++++++++++++- fs/xfs/xfs_fs.h | 1 fs/xfs/xfs_fsops.c | 4 ++- fs/xfs/xfs_sb.h | 10 +++++++- 6 files changed, 68 insertions(+), 4 deletions(-) Index: kern_ci/fs/xfs/linux-2.6/xfs_linux.h =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_linux.h +++ kern_ci/fs/xfs/linux-2.6/xfs_linux.h @@ -76,6 +76,7 @@ #include #include #include +#include #include #include Index: kern_ci/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- kern_ci.orig/fs/xfs/linux-2.6/xfs_super.c +++ kern_ci/fs/xfs/linux-2.6/xfs_super.c @@ -565,7 +565,10 @@ xfs_set_inodeops( inode->i_mapping->a_ops = &xfs_address_space_operations; break; case S_IFDIR: - inode->i_op = &xfs_dir_inode_operations; + if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb)) + inode->i_op = &xfs_dir_ci_inode_operations; + else + inode->i_op = &xfs_dir_inode_operations; inode->i_fop = &xfs_dir_file_operations; break; case S_IFLNK: Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -48,6 +48,52 @@ struct xfs_name xfs_name_dotdot = {"..", extern const struct xfs_nameops xfs_default_nameops; +/* + * ASCII case-insensitive (ie. A-Z) support for directories that was + * used in IRIX. + */ +STATIC xfs_dahash_t +xfs_ascii_ci_hashname( + struct xfs_name *name) +{ + xfs_dahash_t hash; + int i; + + for (i = 0, hash = 0; i < name->len; i++) + hash = tolower(name->name[i]) ^ rol32(hash, 7); + + return hash; +} + +STATIC enum xfs_dacmp +xfs_ascii_ci_compname( + struct xfs_da_args *args, + const char *name, + int len) +{ + enum xfs_dacmp result; + int i; + + if (args->namelen != len) + return XFS_CMP_DIFFERENT; + + result = XFS_CMP_EXACT; + for (i = 0; i < len; i++) { + if (args->name[i] == name[i]) + continue; + if (tolower(args->name[i]) != tolower(name[i])) + return XFS_CMP_DIFFERENT; + result = XFS_CMP_CASE; + } + + return result; +} + +static struct xfs_nameops xfs_ascii_ci_nameops = { + .hashname = xfs_ascii_ci_hashname, + .compname = xfs_ascii_ci_compname, +}; + void xfs_dir_mount( xfs_mount_t *mp) @@ -67,7 +113,10 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; - mp->m_dirnameops = &xfs_default_nameops; + if (xfs_sb_version_hasasciici(&mp->m_sb)) + mp->m_dirnameops = &xfs_ascii_ci_nameops; + else + mp->m_dirnameops = &xfs_default_nameops; } /* Index: kern_ci/fs/xfs/xfs_fs.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_fs.h +++ kern_ci/fs/xfs/xfs_fs.h @@ -239,6 +239,7 @@ typedef struct xfs_fsop_resblks { #define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */ #define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */ #define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */ +#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */ #define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */ Index: kern_ci/fs/xfs/xfs_fsops.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_fsops.c +++ kern_ci/fs/xfs/xfs_fsops.c @@ -95,6 +95,8 @@ xfs_fs_geometry( XFS_FSOP_GEOM_FLAGS_DIRV2 : 0) | (xfs_sb_version_hassector(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_SECTOR : 0) | + (xfs_sb_version_hasasciici(&mp->m_sb) ? + XFS_FSOP_GEOM_FLAGS_DIRV2CI : 0) | (xfs_sb_version_haslazysbcount(&mp->m_sb) ? XFS_FSOP_GEOM_FLAGS_LAZYSB : 0) | (xfs_sb_version_hasattr2(&mp->m_sb) ? @@ -625,7 +627,7 @@ xfs_fs_goingdown( xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); thaw_bdev(sb->s_bdev, sb); } - + break; } case XFS_FSOP_GOING_FLAGS_LOGFLUSH: Index: kern_ci/fs/xfs/xfs_sb.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_sb.h +++ kern_ci/fs/xfs/xfs_sb.h @@ -46,10 +46,12 @@ struct xfs_mount; #define XFS_SB_VERSION_SECTORBIT 0x0800 #define XFS_SB_VERSION_EXTFLGBIT 0x1000 #define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_BORGBIT 0x4000 /* ASCII only case-insens. */ #define XFS_SB_VERSION_MOREBITSBIT 0x8000 #define XFS_SB_VERSION_OKSASHFBITS \ (XFS_SB_VERSION_EXTFLGBIT | \ - XFS_SB_VERSION_DIRV2BIT) + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_BORGBIT) #define XFS_SB_VERSION_OKREALFBITS \ (XFS_SB_VERSION_ATTRBIT | \ XFS_SB_VERSION_NLINKBIT | \ @@ -437,6 +439,12 @@ static inline int xfs_sb_version_hassect ((sbp)->sb_versionnum & XFS_SB_VERSION_SECTORBIT); } +static inline int xfs_sb_version_hasasciici(xfs_sb_t *sbp) +{ + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ + (sbp->sb_versionnum & XFS_SB_VERSION_BORGBIT); +} + static inline int xfs_sb_version_hasmorebits(xfs_sb_t *sbp) { return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \ -- From owner-xfs@oss.sgi.com Wed May 14 00:54:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 00:54:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, J_CHICKENPOX_43,J_CHICKENPOX_45,J_CHICKENPOX_47,J_CHICKENPOX_63, J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4E7sUfU029054 for ; Wed, 14 May 2008 00:54:35 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA18256; Wed, 14 May 2008 17:55:16 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 655DC58C4C34; Wed, 14 May 2008 17:55:16 +1000 (EST) Message-Id: <20080514075516.056272354@chook.melbourne.sgi.com> References: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: quilt/0.46-1 Date: Wed, 14 May 2008 17:52:45 +1000 From: Barry Naujok To: xfs@oss.sgi.com Cc: linux-fsdevel@vger.kernel.org Subject: [PATCH 1/4] XFS: Name operation vector for hash and compare Content-Disposition: inline; filename=nameops.patch X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15883 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Adds two pieces of functionality for the basis of case-insensitive support in XFS: 1. A comparison result enumerated type: xfs_dacmp. It represents an exact match, case-insensitive match or no match at all. This patch only implements different and exact results. 2. xfs_nameops vector for specifying how to perform the hash generation of filenames and comparision methods. In this patch the hash vector points to the existing xfs_da_hashname function and the comparison method does a length compare, and if the same, does a memcmp and return the xfs_dacmp result. All filename functions that use the hash (create, lookup remove, rename, etc) now use the xfs_nameops.hashname function and all directory lookup functions also use the xfs_nameops.compname function. The lookup functions also handle case-insensitive results even though the default comparison function cannot return that. And important aspect of the lookup functions is that an exact match always has precedence over a case-insensitive. So while a case-insensitive match is found, we have to keep looking just in case there is an exact match. In the meantime, the info for the first case-insensitive match is retained if no exact match is found. Signed-off-by: Barry Naujok --- fs/xfs/xfs_da_btree.c | 22 +++++++++++++++++ fs/xfs/xfs_da_btree.h | 22 +++++++++++++++++ fs/xfs/xfs_dir2.c | 12 +++++---- fs/xfs/xfs_dir2_block.c | 33 ++++++++++++++++++------- fs/xfs/xfs_dir2_data.c | 5 +++ fs/xfs/xfs_dir2_leaf.c | 60 +++++++++++++++++++++++++++++++++------------- fs/xfs/xfs_dir2_node.c | 25 +++++++++++-------- fs/xfs/xfs_dir2_sf.c | 62 +++++++++++++++++++++++++++--------------------- fs/xfs/xfs_mount.h | 2 + 9 files changed, 175 insertions(+), 68 deletions(-) Index: kern_ci/fs/xfs/xfs_da_btree.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.c +++ kern_ci/fs/xfs/xfs_da_btree.c @@ -1530,6 +1530,28 @@ xfs_da_hashname(const uchar_t *name, int } } +enum xfs_dacmp +xfs_da_compname( + struct xfs_da_args *args, + const char *name, + int len) +{ + return (args->namelen == len && memcmp(args->name, name, len) == 0) ? + XFS_CMP_EXACT : XFS_CMP_DIFFERENT; +} + +static xfs_dahash_t +xfs_default_hashname( + struct xfs_name *name) +{ + return xfs_da_hashname(name->name, name->len); +} + +const struct xfs_nameops xfs_default_nameops = { + .hashname = xfs_default_hashname, + .compname = xfs_da_compname +}; + /* * Add a block to the btree ahead of the file. * Return the new block number to the caller. Index: kern_ci/fs/xfs/xfs_da_btree.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_da_btree.h +++ kern_ci/fs/xfs/xfs_da_btree.h @@ -99,6 +99,15 @@ typedef struct xfs_da_node_entry xfs_da_ *========================================================================*/ /* + * Search comparison results + */ +enum xfs_dacmp { + XFS_CMP_DIFFERENT, /* names are completely different */ + XFS_CMP_EXACT, /* names are exactly the same */ + XFS_CMP_CASE /* names are same but differ in case */ +}; + +/* * Structure to ease passing around component names. */ typedef struct xfs_da_args { @@ -127,6 +136,7 @@ typedef struct xfs_da_args { unsigned char rename; /* T/F: this is an atomic rename op */ unsigned char addname; /* T/F: this is an add operation */ unsigned char oknoent; /* T/F: ok to return ENOENT, else die */ + enum xfs_dacmp cmpresult; /* name compare result for lookups */ } xfs_da_args_t; /* @@ -201,6 +211,14 @@ typedef struct xfs_da_state { (uint)(XFS_DA_LOGOFF(BASE, ADDR)), \ (uint)(XFS_DA_LOGOFF(BASE, ADDR)+(SIZE)-1) +/* + * Name ops for directory and/or attr name operations + */ +struct xfs_nameops { + xfs_dahash_t (*hashname)(struct xfs_name *); + enum xfs_dacmp (*compname)(struct xfs_da_args *, const char *, int); +}; + #ifdef __KERNEL__ /*======================================================================== @@ -249,6 +267,10 @@ int xfs_da_shrink_inode(xfs_da_args_t *a xfs_dabuf_t *dead_buf); uint xfs_da_hashname(const uchar_t *name_string, int name_length); +enum xfs_dacmp xfs_da_compname(struct xfs_da_args *args, + const char *name, int len); + + xfs_da_state_t *xfs_da_state_alloc(void); void xfs_da_state_free(xfs_da_state_t *state); Index: kern_ci/fs/xfs/xfs_dir2.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2.c +++ kern_ci/fs/xfs/xfs_dir2.c @@ -67,6 +67,7 @@ xfs_dir_mount( (mp->m_dirblksize - (uint)sizeof(xfs_da_node_hdr_t)) / (uint)sizeof(xfs_da_node_entry_t); mp->m_dir_magicpct = (mp->m_dirblksize * 37) / 100; + mp->m_dirnameops = &xfs_default_nameops; } /* @@ -166,7 +167,7 @@ xfs_dir_createname( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -212,11 +213,12 @@ xfs_dir_lookup( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; args.oknoent = 1; + args.cmpresult = XFS_CMP_DIFFERENT; if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) rval = xfs_dir2_sf_lookup(&args); @@ -259,7 +261,7 @@ xfs_dir_removename( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = ino; args.dp = dp; args.firstblock = first; @@ -342,7 +344,7 @@ xfs_dir_replace( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.inumber = inum; args.dp = dp; args.firstblock = first; @@ -390,7 +392,7 @@ xfs_dir_canenter( args.name = name->name; args.namelen = name->len; - args.hashval = xfs_da_hashname(name->name, name->len); + args.hashval = dp->i_mount->m_dirnameops->hashname(name); args.dp = dp; args.whichfork = XFS_DATA_FORK; args.trans = tp; Index: kern_ci/fs/xfs/xfs_dir2_block.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_block.c +++ kern_ci/fs/xfs/xfs_dir2_block.c @@ -643,6 +643,7 @@ xfs_dir2_block_lookup_int( int mid; /* binary search current idx */ xfs_mount_t *mp; /* filesystem mount point */ xfs_trans_t *tp; /* transaction pointer */ + enum xfs_dacmp cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -697,20 +698,31 @@ xfs_dir2_block_lookup_int( dep = (xfs_dir2_data_entry_t *) ((char *)block + xfs_dir2_dataptr_to_off(mp, addr)); /* - * Compare, if it's right give back buffer & entry number. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *bpp = bp; *entno = mid; - return 0; + if (cmp == XFS_CMP_EXACT) + return 0; } - } while (++mid < be32_to_cpu(btp->count) && be32_to_cpu(blp[mid].hashval) == hash); + } while (++mid < be32_to_cpu(btp->count) && + be32_to_cpu(blp[mid].hashval) == hash); + + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return success. + */ + if (args->cmpresult == XFS_CMP_CASE) + return 0; /* * No match, release the buffer and return ENOENT. */ - ASSERT(args->oknoent); xfs_da_brelse(tp, bp); return XFS_ERROR(ENOENT); } @@ -1033,6 +1045,7 @@ xfs_dir2_sf_to_block( xfs_dir2_sf_t *sfp; /* shortform structure */ __be16 *tagp; /* end of data entry */ xfs_trans_t *tp; /* transaction pointer */ + struct xfs_name name; xfs_dir2_trace_args("sf_to_block", args); dp = args->dp; @@ -1187,8 +1200,10 @@ xfs_dir2_sf_to_block( tagp = xfs_dir2_data_entry_tag_p(dep); *tagp = cpu_to_be16((char *)dep - (char *)block); xfs_dir2_data_log_entry(tp, bp, dep); - blp[2 + i].hashval = cpu_to_be32(xfs_da_hashname( - (char *)sfep->name, sfep->namelen)); + name.name = sfep->name; + name.len = sfep->namelen; + blp[2 + i].hashval = cpu_to_be32(mp->m_dirnameops-> + hashname(&name)); blp[2 + i].address = cpu_to_be32(xfs_dir2_byte_to_dataptr(mp, (char *)dep - (char *)block)); offset = (int)((char *)(tagp + 1) - (char *)block); Index: kern_ci/fs/xfs/xfs_dir2_data.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_data.c +++ kern_ci/fs/xfs/xfs_dir2_data.c @@ -65,6 +65,7 @@ xfs_dir2_data_check( xfs_mount_t *mp; /* filesystem mount point */ char *p; /* current data position */ int stale; /* count of stale leaves */ + struct xfs_name name; mp = dp->i_mount; d = bp->data; @@ -140,7 +141,9 @@ xfs_dir2_data_check( addr = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk, (xfs_dir2_data_aoff_t) ((char *)dep - (char *)d)); - hash = xfs_da_hashname((char *)dep->name, dep->namelen); + name.name = dep->name; + name.len = dep->namelen; + hash = mp->m_dirnameops->hashname(&name); for (i = 0; i < be32_to_cpu(btp->count); i++) { if (be32_to_cpu(lep[i].address) == addr && be32_to_cpu(lep[i].hashval) == hash) Index: kern_ci/fs/xfs/xfs_dir2_leaf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_leaf.c +++ kern_ci/fs/xfs/xfs_dir2_leaf.c @@ -1331,6 +1331,8 @@ xfs_dir2_leaf_lookup_int( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + xfs_dabuf_t *cbp; /* case match data buffer */ + enum xfs_dacmp cmp; /* name compare result */ dp = args->dp; tp = args->trans; @@ -1354,9 +1356,11 @@ xfs_dir2_leaf_lookup_int( * Loop over all the entries with the right hash value * looking to match the name. */ + cbp = NULL; for (lep = &leaf->ents[index], dbp = NULL, curdb = -1; - index < be16_to_cpu(leaf->hdr.count) && be32_to_cpu(lep->hashval) == args->hashval; - lep++, index++) { + index < be16_to_cpu(leaf->hdr.count) && + be32_to_cpu(lep->hashval) == args->hashval; + lep++, index++) { /* * Skip over stale leaf entries. */ @@ -1371,12 +1375,12 @@ xfs_dir2_leaf_lookup_int( * need to pitch the old one and read the new one. */ if (newdb != curdb) { - if (dbp) + if (dbp != cbp) xfs_da_brelse(tp, dbp); - if ((error = - xfs_da_read_buf(tp, dp, - xfs_dir2_db_to_da(mp, newdb), -1, &dbp, - XFS_DATA_FORK))) { + error = xfs_da_read_buf(tp, dp, + xfs_dir2_db_to_da(mp, newdb), + -1, &dbp, XFS_DATA_FORK); + if (error) { xfs_da_brelse(tp, lbp); return error; } @@ -1386,24 +1390,46 @@ xfs_dir2_leaf_lookup_int( /* * Point to the data entry. */ - dep = (xfs_dir2_data_entry_t *) - ((char *)dbp->data + - xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); + dep = (xfs_dir2_data_entry_t *)((char *)dbp->data + + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * If it matches then return it. + * Compare name and if it's an exact match, return the index + * and buffer. If it's the first case-insensitive match, store + * the index and buffer and continue looking for an exact match. */ - if (dep->namelen == args->namelen && - dep->name[0] == args->name[0] && - memcmp(dep->name, args->name, args->namelen) == 0) { - *dbpp = dbp; + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; *indexp = index; - return 0; + /* + * case exact match: release the stored CI buffer if it + * exists and return the current buffer. + */ + if (cmp == XFS_CMP_EXACT) { + if (cbp && cbp != dbp) + xfs_da_brelse(tp, cbp); + *dbpp = dbp; + return 0; + } + cbp = dbp; } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, release the current + * buffer and return the stored CI matching buffer. + */ + if (args->cmpresult == XFS_CMP_CASE) { + if (cbp != dbp) + xfs_da_brelse(tp, dbp); + *dbpp = cbp; + return 0; + } /* * No match found, return ENOENT. */ - ASSERT(args->oknoent); + ASSERT(cbp == NULL); if (dbp) xfs_da_brelse(tp, dbp); xfs_da_brelse(tp, lbp); Index: kern_ci/fs/xfs/xfs_dir2_node.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_node.c +++ kern_ci/fs/xfs/xfs_dir2_node.c @@ -556,6 +556,7 @@ xfs_dir2_leafn_lookup_for_entry( xfs_mount_t *mp; /* filesystem mount point */ xfs_dir2_db_t newdb; /* new data block number */ xfs_trans_t *tp; /* transaction pointer */ + enum xfs_dacmp cmp; /* comparison result */ dp = args->dp; tp = args->trans; @@ -620,17 +621,21 @@ xfs_dir2_leafn_lookup_for_entry( dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); /* - * Compare the entry, return it if it matches. - */ - if (dep->namelen == args->namelen && memcmp(dep->name, - args->name, args->namelen) == 0) { + * Compare the entry and if it's an exact match, return + * EEXIST immediately. If it's the first case-insensitive + * match, store the inode number and continue looking. + */ + cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; args->inumber = be64_to_cpu(dep->inumber); di = (int)((char *)dep - (char *)curbp->data); error = EEXIST; - goto out; + if (cmp == XFS_CMP_EXACT) + goto out; } } - /* Didn't find a match. */ + /* Didn't find an exact match. */ error = ENOENT; di = -1; ASSERT(index == be16_to_cpu(leaf->hdr.count) || args->oknoent); @@ -1813,6 +1818,8 @@ xfs_dir2_node_lookup( error = xfs_da_node_lookup_int(state, &rval); if (error) rval = error; + else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) + rval = EEXIST; /* a case-insensitive match was found */ /* * Release the btree blocks and leaf block. */ @@ -1856,9 +1863,8 @@ xfs_dir2_node_removename( * Look up the entry we're deleting, set up the cursor. */ error = xfs_da_node_lookup_int(state, &rval); - if (error) { + if (error) rval = error; - } /* * Didn't find it, upper layer screwed up. */ @@ -1875,9 +1881,8 @@ xfs_dir2_node_removename( */ error = xfs_dir2_leafn_remove(args, blk->bp, blk->index, &state->extrablk, &rval); - if (error) { + if (error) return error; - } /* * Fix the hash values up the btree. */ Index: kern_ci/fs/xfs/xfs_dir2_sf.c =================================================================== --- kern_ci.orig/fs/xfs/xfs_dir2_sf.c +++ kern_ci/fs/xfs/xfs_dir2_sf.c @@ -814,6 +814,7 @@ xfs_dir2_sf_lookup( int i; /* entry index */ xfs_dir2_sf_entry_t *sfep; /* shortform directory entry */ xfs_dir2_sf_t *sfp; /* shortform structure */ + enum xfs_dacmp cmp; /* comparison result */ xfs_dir2_trace_args("sf_lookup", args); xfs_dir2_sf_check(args); @@ -836,6 +837,7 @@ xfs_dir2_sf_lookup( */ if (args->namelen == 1 && args->name[0] == '.') { args->inumber = dp->i_ino; + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* @@ -844,27 +846,39 @@ xfs_dir2_sf_lookup( if (args->namelen == 2 && args->name[0] == '.' && args->name[1] == '.') { args->inumber = xfs_dir2_sf_get_inumber(sfp, &sfp->hdr.parent); + args->cmpresult = XFS_CMP_EXACT; return XFS_ERROR(EEXIST); } /* * Loop over all the entries trying to match ours. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { - args->inumber = - xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)); - return XFS_ERROR(EEXIST); + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + /* + * Compare name and if it's an exact match, return the inode + * number. If it's the first case-insensitive match, store the + * inode number and continue looking for an exact match. + */ + cmp = dp->i_mount->m_dirnameops->compname(args, sfep->name, + sfep->namelen); + if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) { + args->cmpresult = cmp; + args->inumber = xfs_dir2_sf_get_inumber(sfp, + xfs_dir2_sf_inumberp(sfep)); + if (cmp == XFS_CMP_EXACT) + return XFS_ERROR(EEXIST); } } + ASSERT(args->oknoent); + /* + * Here, we can only be doing a lookup (not a rename or replace). + * If a case-insensitive match was found earlier, return "found". + */ + if (args->cmpresult == XFS_CMP_CASE) + return XFS_ERROR(EEXIST); /* * Didn't find it. */ - ASSERT(args->oknoent); return XFS_ERROR(ENOENT); } @@ -904,24 +918,21 @@ xfs_dir2_sf_removename( * Loop over the old directory entries. * Find the one we're deleting. */ - for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(sfep->name, args->name, args->namelen) == 0) { + for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(args, sfep->name, sfep->namelen) == + XFS_CMP_EXACT) { ASSERT(xfs_dir2_sf_get_inumber(sfp, - xfs_dir2_sf_inumberp(sfep)) == - args->inumber); + xfs_dir2_sf_inumberp(sfep)) == + args->inumber); break; } } /* * Didn't find it. */ - if (i == sfp->hdr.count) { + if (i == sfp->hdr.count) return XFS_ERROR(ENOENT); - } /* * Calculate sizes. */ @@ -1042,11 +1053,10 @@ xfs_dir2_sf_replace( */ else { for (i = 0, sfep = xfs_dir2_sf_firstentry(sfp); - i < sfp->hdr.count; - i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { - if (sfep->namelen == args->namelen && - sfep->name[0] == args->name[0] && - memcmp(args->name, sfep->name, args->namelen) == 0) { + i < sfp->hdr.count; + i++, sfep = xfs_dir2_sf_nextentry(sfp, sfep)) { + if (xfs_da_compname(args, sfep->name, sfep->namelen) == + XFS_CMP_EXACT) { #if XFS_BIG_INUMS || defined(DEBUG) ino = xfs_dir2_sf_get_inumber(sfp, xfs_dir2_sf_inumberp(sfep)); Index: kern_ci/fs/xfs/xfs_mount.h =================================================================== --- kern_ci.orig/fs/xfs/xfs_mount.h +++ kern_ci/fs/xfs/xfs_mount.h @@ -61,6 +61,7 @@ struct xfs_bmap_free; struct xfs_extdelta; struct xfs_swapext; struct xfs_mru_cache; +struct xfs_nameops; /* * Prototypes and functions for the Data Migration subsystem. @@ -313,6 +314,7 @@ typedef struct xfs_mount { __uint8_t m_inode_quiesce;/* call quiesce on new inodes. field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ + const struct xfs_nameops *m_dirnameops; /* vector of dir name ops */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ -- From owner-xfs@oss.sgi.com Wed May 14 01:06:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 01:06:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4E86JvC031760 for ; Wed, 14 May 2008 01:06:20 -0700 X-ASG-Debug-ID: 1210752422-125702120000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F2B1916B1DB5 for ; Wed, 14 May 2008 01:07:03 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id 5oBRSADFhU2CIvJD for ; Wed, 14 May 2008 01:07:03 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53E.nec.co.jp [10.7.69.161]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E8715U005163; Wed, 14 May 2008 17:07:01 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4E871e01192; Wed, 14 May 2008 17:07:01 +0900 (JST) Received: from yonosuke.jp.nec.com (yonosuke.jp.nec.com [10.26.220.15]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E871d3015807; Wed, 14 May 2008 17:07:01 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 14 May 2008 17:07:00 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Subject: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Message-Id: <20080514170700t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Wed, 14 May 2008 17:07:00 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1210752426 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.1, rules version 3.1.50314 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15889 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. Signed-off-by: Dave Chinner Signed-off-by: Takashi Sato --- linux-2.6/xfs_ioctl.c | 15 --------------- linux-2.6/xfs_ioctl32.c | 2 -- xfs_fs.h | 4 ++-- 3 files changed, 2 insertions(+), 19 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-bit/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.26-rc2-xf s/fs/xfs/linux-2.6/xfs_ioctl.c --- linux-2.6.26-rc2-bit/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-12 11:15:10.000000000 +0900 +++ linux-2.6.26-rc2-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-12 11:25:50.000000000 +0900 @@ -1233,21 +1233,6 @@ xfs_ioctl( return -error; } - case XFS_IOC_FREEZE: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (inode->i_sb->s_frozen == SB_UNFROZEN) - freeze_bdev(inode->i_sb->s_bdev); - return 0; - - case XFS_IOC_THAW: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (inode->i_sb->s_frozen != SB_UNFROZEN) - thaw_bdev(inode->i_sb->s_bdev, inode->i_sb); - return 0; - case XFS_IOC_GOINGDOWN: { __uint32_t in; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-bit/fs/xfs/linux-2.6/xfs_ioctl32.c linux-2.6.26-rc2- xfs/fs/xfs/linux-2.6/xfs_ioctl32.c --- linux-2.6.26-rc2-bit/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-05-12 11:15:10.000000000 +0900 +++ linux-2.6.26-rc2-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-05-12 11:25:50.000000000 +0900 @@ -398,8 +398,6 @@ xfs_compat_ioctl( case XFS_IOC_FSGROWFSDATA: case XFS_IOC_FSGROWFSLOG: case XFS_IOC_FSGROWFSRT: - case XFS_IOC_FREEZE: - case XFS_IOC_THAW: case XFS_IOC_GOINGDOWN: case XFS_IOC_ERROR_INJECTION: case XFS_IOC_ERROR_CLEARALL: diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-bit/fs/xfs/xfs_fs.h linux-2.6.26-rc2-xfs/fs/xfs/xfs_ fs.h --- linux-2.6.26-rc2-bit/fs/xfs/xfs_fs.h 2008-05-12 11:15:11.000000000 +0900 +++ linux-2.6.26-rc2-xfs/fs/xfs/xfs_fs.h 2008-05-12 11:25:50.000000000 +0900 @@ -473,8 +473,8 @@ typedef struct xfs_handle { #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection) /* XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118 */ -#define XFS_IOC_FREEZE _IOWR('X', 119, int) -#define XFS_IOC_THAW _IOWR('X', 120, int) +/* XFS_IOC_FREEZE -- FIFREEZE 119 */ +/* XFS_IOC_THAW -- FITHAW 120 */ #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) #define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) From owner-xfs@oss.sgi.com Wed May 14 01:05:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 01:05:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4E84xu7031574 for ; Wed, 14 May 2008 01:05:04 -0700 X-ASG-Debug-ID: 1210752345-19b903140000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F3FE8167493 for ; Wed, 14 May 2008 01:05:45 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id wu4xwR8XOILCKXR1 for ; Wed, 14 May 2008 01:05:45 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53F.nec.co.jp [10.7.69.162]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E85ZUL003578; Wed, 14 May 2008 17:05:35 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4E85ZA01993; Wed, 14 May 2008 17:05:35 +0900 (JST) Received: from shoin.jp.nec.com (shoin.jp.nec.com [10.26.220.3]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E85YOn024076; Wed, 14 May 2008 17:05:34 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 14 May 2008 17:05:34 +0900 To: Christoph Hellwig Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 0/3] freeze feature ver 1.3 Subject: [RFC PATCH 0/3] freeze feature ver 1.3 Message-Id: <20080514170534t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Wed, 14 May 2008 17:05:34 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1210752346 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.1, rules version 3.1.50314 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15887 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, Christoph Hellwig wrote: >> + case FIFREEZE: { > > This would be better to split intot a small helper ala ioctl_fibmap() > >> + case FITHAW: { > > Same here. I have added two new helper functions (ioctl_freeze and ioctl_thaw) in "[PATCH 1/3] Implement generic freeze feature". >>> I think the protection against double freezes would be better done by >>> using a trylock on bd_mount_sem. >> >> bd_mount_sem can protect against only freezes and cannot protect against >> unfreezes. If multiple unfreezes run in parallel, the multiple up() for >> bd_mount_sem might occur incorrectly. > > Indeed. The bit flag would fix that because unfreeze could then check > for the bit beeing set first. So that's probably the easiest way to go. I have replaced the semaphore (bd_freeze_sem) with new bit flag in "[PATCH 1/3] Implement generic freeze feature". When a thread is in freeze operation, subsequent freeze operations will fail immediately. (They waited for the thread in the previous patches.) I think this change of the behavior doesn't matter because freezes and unfreezes don't run in parallel in usual situation. In addition, the patches are re-based from linux-2.6.25 to linux-2.6.26-rc2. The patch-set consists of the following three patches. Only [PATCH 1/3] is modified as above from the previous version. [PATCH 1/3] Implement generic freeze feature I have modified the following two points from the previous version. These are suggested by Christoph Hellwig. o Two helper functions for ioctls (ioctl_freeze and ioctl_thaw) are added for the readability. o The semaphore for the freeze operation is replaced with new bit flag (bd_state) for the efficiency of the locking. The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 [PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. [PATCH 3/3] Add timeout feature The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period This is useful for the application to set the timeval more accurately. For example, the freezer resets the timeval to 10 seconds every 5 seconds. In this approach, even if the freezer causes a deadlock by accessing the frozen filesystem, it will be solved by the timeout in 10 seconds and the freezer can recognize that at the next reset of timeval. int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Any comments are very welcome. Cheers, Takashi From owner-xfs@oss.sgi.com Wed May 14 01:05:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 01:05:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4E85g65031627 for ; Wed, 14 May 2008 01:05:43 -0700 X-ASG-Debug-ID: 1210752388-1c0d00520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8C96D116E3AD for ; Wed, 14 May 2008 01:06:28 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id 8P3Fjd40LzcZQTN0 for ; Wed, 14 May 2008 01:06:28 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.195]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E86Q6E012671; Wed, 14 May 2008 17:06:26 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4E86Qp05165; Wed, 14 May 2008 17:06:26 +0900 (JST) Received: from kuichi.jp.nec.com (kuichi.jp.nec.com [10.26.220.17]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E86QM1015335; Wed, 14 May 2008 17:06:26 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 14 May 2008 17:06:26 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 1/3] Implement generic freeze feature Subject: [RFC PATCH 1/3] Implement generic freeze feature Message-Id: <20080514170625t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Wed, 14 May 2008 17:06:25 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1210752389 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50315 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15888 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs I have modified the following two points from the previous version. These are suggested by Christoph Hellwig. o Two helper functions for ioctls (ioctl_freeze and ioctl_thaw) are added for the readability. o The semaphore for the freeze operation is replaced with new bit flag (bd_state) for the efficiency of the locking. The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- fs/block_dev.c | 3 +++ fs/buffer.c | 25 +++++++++++++++++++++++++ fs/ioctl.c | 35 +++++++++++++++++++++++++++++++++++ fs/super.c | 32 +++++++++++++++++++++++++++++++- include/linux/fs.h | 7 +++++++ 5 files changed, 101 insertions(+), 1 deletion(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2.org/fs/buffer.c linux-2.6.26-rc2-bit/fs/buffer.c --- linux-2.6.26-rc2.org/fs/buffer.c 2008-05-12 09:09:41.000000000 +0900 +++ linux-2.6.26-rc2-bit/fs/buffer.c 2008-05-12 11:20:19.000000000 +0900 @@ -201,6 +201,21 @@ struct super_block *freeze_bdev(struct b { struct super_block *sb; + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) + return ERR_PTR(-EBUSY); + + sb = get_super_without_lock(bdev); + + /* If super_block has been already frozen, return. */ + if (sb && sb->s_frozen != SB_UNFROZEN) { + put_super(sb); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return sb; + } + + if (sb) + put_super(sb); + down(&bdev->bd_mount_sem); sb = get_super(bdev); if (sb && !(sb->s_flags & MS_RDONLY)) { @@ -219,6 +234,8 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ } EXPORT_SYMBOL(freeze_bdev); @@ -230,8 +247,17 @@ EXPORT_SYMBOL(freeze_bdev); * * Unlocks the filesystem and marks it writeable again after freeze_bdev(). */ -void thaw_bdev(struct block_device *bdev, struct super_block *sb) +int thaw_bdev(struct block_device *bdev, struct super_block *sb) { + + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) + return -EBUSY; + + if (sb && sb->s_frozen == SB_UNFROZEN) { + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return 0; + } + if (sb) { BUG_ON(sb->s_bdev != bdev); @@ -244,6 +270,8 @@ void thaw_bdev(struct block_device *bdev } up(&bdev->bd_mount_sem); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return 0; } EXPORT_SYMBOL(thaw_bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2.org/fs/ioctl.c linux-2.6.26-rc2-bit/fs/ioctl.c --- linux-2.6.26-rc2.org/fs/ioctl.c 2008-05-12 09:09:41.000000000 +0900 +++ linux-2.6.26-rc2-bit/fs/ioctl.c 2008-05-13 14:33:33.000000000 +0900 @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -141,6 +142,49 @@ static int ioctl_fioasync(unsigned int f } /* + * ioctl_freeze - Freeze the filesystem. + * + * @filp: target file + * + * Call freeze_bdev() to freeze the filesystem. + */ +static int ioctl_freeze(struct file *filp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* If filesystem doesn't support freeze feature, return. */ + if (sb->s_op->write_super_lockfs == NULL) + return -EINVAL; + + /* Freeze */ + sb = freeze_bdev(sb->s_bdev); + if (IS_ERR(sb)) + return PTR_ERR(sb); + return 0; +} + +/* + * ioctl_thaw - Thaw the filesystem. + * + * @filp: target file + * + * Call thaw_bdev() to thaw the filesystem. + */ +static int ioctl_thaw(struct file *filp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* Thaw */ + return thaw_bdev(sb->s_bdev, sb); +} + +/* * When you add any new common ioctls to the switches above and below * please update compat_sys_ioctl() too. * @@ -181,6 +225,15 @@ int do_vfs_ioctl(struct file *filp, unsi } else error = -ENOTTY; break; + + case FIFREEZE: + error = ioctl_freeze(filp); + break; + + case FITHAW: + error = ioctl_thaw(filp); + break; + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2.org/fs/super.c linux-2.6.26-rc2-bit/fs/super.c --- linux-2.6.26-rc2.org/fs/super.c 2008-05-12 09:09:41.000000000 +0900 +++ linux-2.6.26-rc2-bit/fs/super.c 2008-05-12 11:20:19.000000000 +0900 @@ -156,7 +156,7 @@ int __put_super_and_need_restart(struct * Drops a temporary reference, frees superblock if there's no * references left. */ -static void put_super(struct super_block *sb) +void put_super(struct super_block *sb) { spin_lock(&sb_lock); __put_super(sb); @@ -509,6 +509,36 @@ rescan: EXPORT_SYMBOL(get_super); +/* + * get_super_without_lock - Get super_block from block_device without lock. + * @bdev: block device struct + * + * Scan the superblock list and finds the superblock of the file system + * mounted on the block device given. This doesn't lock anyone. + * %NULL is returned if no match is found. + */ +struct super_block *get_super_without_lock(struct block_device *bdev) +{ + struct super_block *sb; + + if (!bdev) + return NULL; + + spin_lock(&sb_lock); + list_for_each_entry(sb, &super_blocks, s_list) { + if (sb->s_bdev == bdev) { + if (sb->s_root) { + sb->s_count++; + spin_unlock(&sb_lock); + return sb; + } + } + } + spin_unlock(&sb_lock); + return NULL; +} +EXPORT_SYMBOL(get_super_without_lock); + struct super_block * user_get_super(dev_t dev) { struct super_block *sb; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2.org/include/linux/buffer_head.h linux-2.6.26-rc2-bit /include/linux/buffer_head.h --- linux-2.6.26-rc2.org/include/linux/buffer_head.h 2008-05-12 09:09:41.000000000 +0900 +++ linux-2.6.26-rc2-bit/include/linux/buffer_head.h 2008-05-12 11:20:19.000000000 +0900 @@ -171,7 +171,7 @@ void __wait_on_buffer(struct buffer_head wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); struct super_block *freeze_bdev(struct block_device *); -void thaw_bdev(struct block_device *, struct super_block *); +int thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2.org/include/linux/fs.h linux-2.6.26-rc2-bit/include/ linux/fs.h --- linux-2.6.26-rc2.org/include/linux/fs.h 2008-05-12 09:09:41.000000000 +0900 +++ linux-2.6.26-rc2-bit/include/linux/fs.h 2008-05-12 11:20:19.000000000 +0900 @@ -223,6 +223,8 @@ extern int dir_notify_enable; #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ +#define FIFREEZE _IOWR('X', 119, int) /* Freeze */ +#define FITHAW _IOWR('X', 120, int) /* Thaw */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -494,6 +496,13 @@ int pagecache_write_end(struct file *, s loff_t pos, unsigned len, unsigned copied, struct page *page, void *fsdata); +/* + * Bits in block_device.bd_state. + */ +enum bd_state { + BD_FREEZE_OP /* In freeze operation */ +}; + struct backing_dev_info; struct address_space { struct inode *host; /* owner: inode, block_device */ @@ -547,6 +556,9 @@ struct block_device { * care to not mess up bd_private for that case. */ unsigned long bd_private; + + /* State of the block device. (Used by freeze feature) */ + unsigned long bd_state; }; /* @@ -1964,7 +1976,9 @@ extern int do_vfs_ioctl(struct file *fil extern void get_filesystem(struct file_system_type *fs); extern void put_filesystem(struct file_system_type *fs); extern struct file_system_type *get_fs_type(const char *name); +extern void put_super(struct super_block *sb); extern struct super_block *get_super(struct block_device *); +extern struct super_block *get_super_without_lock(struct block_device *); extern struct super_block *user_get_super(dev_t); extern void drop_super(struct super_block *sb); From owner-xfs@oss.sgi.com Wed May 14 01:07:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 01:07:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4E878mW032000 for ; Wed, 14 May 2008 01:07:14 -0700 X-ASG-Debug-ID: 1210752474-0bc702550000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C341D16B1DBE for ; Wed, 14 May 2008 01:07:54 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id LKDcRS4erdDqsY1C for ; Wed, 14 May 2008 01:07:54 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53.nec.co.jp [10.7.69.160]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E87r9M014568; Wed, 14 May 2008 17:07:53 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4E87r009644; Wed, 14 May 2008 17:07:53 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4E87qkA026225; Wed, 14 May 2008 17:07:52 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 14 May 2008 17:07:50 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 3/3] Add timeout feature Subject: [RFC PATCH 3/3] Add timeout feature Message-Id: <20080514170750t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Wed, 14 May 2008 17:07:50 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1210752475 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.1, rules version 3.1.50314 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15890 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- drivers/md/dm.c | 2 - fs/block_dev.c | 2 + fs/buffer.c | 14 ++++++- fs/ioctl.c | 78 ++++++++++++++++++++++++++++++++++++++++++-- fs/super.c | 51 ++++++++++++++++++++++++++++ fs/xfs/xfs_fsops.c | 2 - include/linux/buffer_head.h | 2 - include/linux/fs.h | 8 ++++ 8 files changed, 151 insertions(+), 8 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/drivers/md/dm.c linux-2.6.26-rc2-timeout/drivers /md/dm.c --- linux-2.6.26-rc2-xfs/drivers/md/dm.c 2008-05-12 11:20:47.000000000 +0900 +++ linux-2.6.26-rc2-timeout/drivers/md/dm.c 2008-05-12 21:14:13.000000000 +0900 @@ -1407,7 +1407,7 @@ static int lock_fs(struct mapped_device WARN_ON(md->frozen_sb); - md->frozen_sb = freeze_bdev(md->suspended_bdev); + md->frozen_sb = freeze_bdev(md->suspended_bdev, 0); if (IS_ERR(md->frozen_sb)) { r = PTR_ERR(md->frozen_sb); md->frozen_sb = NULL; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/fs/block_dev.c linux-2.6.26-rc2-timeout/fs/block _dev.c --- linux-2.6.26-rc2-xfs/fs/block_dev.c 2008-05-12 11:20:58.000000000 +0900 +++ linux-2.6.26-rc2-timeout/fs/block_dev.c 2008-05-12 21:14:13.000000000 +0900 @@ -284,6 +284,8 @@ static void init_once(struct kmem_cache INIT_LIST_HEAD(&bdev->bd_holder_list); #endif inode_init_once(&ei->vfs_inode); + /* Setup freeze timeout function. */ + INIT_DELAYED_WORK(&bdev->bd_freeze_timeout, freeze_timeout); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/fs/buffer.c linux-2.6.26-rc2-timeout/fs/buffer.c --- linux-2.6.26-rc2-xfs/fs/buffer.c 2008-05-12 11:20:56.000000000 +0900 +++ linux-2.6.26-rc2-timeout/fs/buffer.c 2008-05-12 21:14:13.000000000 +0900 @@ -190,14 +190,17 @@ int fsync_bdev(struct block_device *bdev /** * freeze_bdev -- lock a filesystem and force it into a consistent state - * @bdev: blockdevice to lock + * @bdev: blockdevice to lock + * @timeout_msec: timeout period * * This takes the block device bd_mount_sem to make sure no new mounts * happen on bdev until thaw_bdev() is called. * If a superblock is found on this device, we take the s_umount semaphore * on it to make sure nobody unmounts until the snapshot creation is done. + * If timeout_msec is bigger than 0, this registers the delayed work for + * timeout of the freeze feature. */ -struct super_block *freeze_bdev(struct block_device *bdev) +struct super_block *freeze_bdev(struct block_device *bdev, long timeout_msec) { struct super_block *sb; @@ -234,6 +237,10 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + /* Setup unfreeze timer. */ + if (timeout_msec > 0) + add_freeze_timeout(bdev, timeout_msec); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ @@ -258,6 +265,9 @@ int thaw_bdev(struct block_device *bdev, return 0; } + /* Delete unfreeze timer. */ + del_freeze_timeout(bdev); + if (sb) { BUG_ON(sb->s_bdev != bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/fs/ioctl.c linux-2.6.26-rc2-timeout/fs/ioctl.c --- linux-2.6.26-rc2-xfs/fs/ioctl.c 2008-05-13 14:35:59.000000000 +0900 +++ linux-2.6.26-rc2-timeout/fs/ioctl.c 2008-05-13 14:59:09.000000000 +0900 @@ -145,12 +145,16 @@ static int ioctl_fioasync(unsigned int f * ioctl_freeze - Freeze the filesystem. * * @filp: target file + * @argp: timeout value(sec) * * Call freeze_bdev() to freeze the filesystem. */ -static int ioctl_freeze(struct file *filp) +static int ioctl_freeze(struct file *filp, unsigned long arg) { + long timeout_sec; + long timeout_msec; struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + int error; if (!capable(CAP_SYS_ADMIN)) return -EPERM; @@ -159,8 +163,27 @@ static int ioctl_freeze(struct file *fil if (sb->s_op->write_super_lockfs == NULL) return -EINVAL; + /* arg(sec) to tick value. */ + error = get_user(timeout_sec, (long __user *) arg); + if (error != 0) + return error; + /* + * If 1 is specified as the timeout period, + * it will be changed into 0 to keep the compatibility + * of XFS application(xfs_freeze). + */ + if (timeout_sec < 0) + return -EINVAL; + else if (timeout_sec < 2) + timeout_sec = 0; + + timeout_msec = timeout_sec * 1000; + /* overflow case */ + if (timeout_msec < 0) + return -EINVAL; + /* Freeze */ - sb = freeze_bdev(sb->s_bdev); + sb = freeze_bdev(sb->s_bdev, timeout_msec); if (IS_ERR(sb)) return PTR_ERR(sb); return 0; @@ -185,6 +208,51 @@ static int ioctl_thaw(struct file *filp) } /* + * ioctl_freeze_reset_timeout - Reset timeout for freeze. + * + * @filp: target file + * @argp: timeout value(sec) + * + * Rest timeout for freeze. + */ +static int +ioctl_freeze_reset_timeout(struct file *filp, unsigned long arg) +{ + long timeout_sec; + long timeout_msec; + struct super_block *sb + = filp->f_path.dentry->d_inode->i_sb; + int error; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* arg(sec) to tick value */ + error = get_user(timeout_sec, (long __user *) arg); + if (error) + return error; + timeout_msec = timeout_sec * 1000; + if (timeout_msec < 0) + return -EINVAL; + + if (sb) { + if (test_and_set_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state)) + return -EBUSY; + if (sb->s_frozen == SB_UNFROZEN) { + clear_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state); + return -EINVAL; + } + /* setup unfreeze timer */ + if (timeout_msec > 0) + add_freeze_timeout(sb->s_bdev, + timeout_msec); + clear_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state); + } + + return 0; +} + +/* * When you add any new common ioctls to the switches above and below * please update compat_sys_ioctl() too. * @@ -227,13 +295,17 @@ int do_vfs_ioctl(struct file *filp, unsi break; case FIFREEZE: - error = ioctl_freeze(filp); + error = ioctl_freeze(filp, arg); break; case FITHAW: error = ioctl_thaw(filp); break; + case FIFREEZE_RESET_TIMEOUT: + error = ioctl_freeze_reset_timeout(filp, arg); + break; + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/fs/super.c linux-2.6.26-rc2-timeout/fs/super.c --- linux-2.6.26-rc2-xfs/fs/super.c 2008-05-12 11:20:59.000000000 +0900 +++ linux-2.6.26-rc2-timeout/fs/super.c 2008-05-12 21:14:13.000000000 +0900 @@ -1010,3 +1010,54 @@ struct vfsmount *kern_mount_data(struct } EXPORT_SYMBOL_GPL(kern_mount_data); + +/* + * freeze_timeout - Thaw the filesystem. + * + * @work: work queue (delayed_work.work) + * + * Called by the delayed work when elapsing the timeout period. + * Thaw the filesystem. + */ +void freeze_timeout(struct work_struct *work) +{ + struct block_device *bd = container_of(work, + struct block_device, bd_freeze_timeout.work); + struct super_block *sb = get_super_without_lock(bd); + + thaw_bdev(bd, sb); + + if (sb) + put_super(sb); +} +EXPORT_SYMBOL_GPL(freeze_timeout); + +/* + * add_freeze_timeout - Add timeout for freeze. + * + * @bdev: block device struct + * @timeout_msec: timeout period + * + * Add the delayed work for freeze timeout to the delayed work queue. + */ +void add_freeze_timeout(struct block_device *bdev, long timeout_msec) +{ + s64 timeout_jiffies = msecs_to_jiffies(timeout_msec); + + /* Set delayed work queue */ + cancel_delayed_work(&bdev->bd_freeze_timeout); + schedule_delayed_work(&bdev->bd_freeze_timeout, timeout_jiffies); +} + +/* + * del_freeze_timeout - Delete timeout for freeze. + * + * @bdev: block device struct + * + * Delete the delayed work for freeze timeout from the delayed work queue. + */ +void del_freeze_timeout(struct block_device *bdev) +{ + if (delayed_work_pending(&bdev->bd_freeze_timeout)) + cancel_delayed_work(&bdev->bd_freeze_timeout); +} diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/fs/xfs/xfs_fsops.c linux-2.6.26-rc2-timeout/fs/x fs/xfs_fsops.c --- linux-2.6.26-rc2-xfs/fs/xfs/xfs_fsops.c 2008-05-12 11:20:57.000000000 +0900 +++ linux-2.6.26-rc2-timeout/fs/xfs/xfs_fsops.c 2008-05-12 21:14:13.000000000 +0900 @@ -619,7 +619,7 @@ xfs_fs_goingdown( { switch (inflags) { case XFS_FSOP_GOING_FLAGS_DEFAULT: { - struct super_block *sb = freeze_bdev(mp->m_super->s_bdev); + struct super_block *sb = freeze_bdev(mp->m_super->s_bdev, 0); if (sb && !IS_ERR(sb)) { xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/include/linux/buffer_head.h linux-2.6.26-rc2-tim eout/include/linux/buffer_head.h --- linux-2.6.26-rc2-xfs/include/linux/buffer_head.h 2008-05-12 11:21:09.000000000 +0900 +++ linux-2.6.26-rc2-timeout/include/linux/buffer_head.h 2008-05-12 21:14:13.000000000 +0900 @@ -170,7 +170,7 @@ int sync_blockdev(struct block_device *b void __wait_on_buffer(struct buffer_head *); wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); -struct super_block *freeze_bdev(struct block_device *); +struct super_block *freeze_bdev(struct block_device *, long timeout_msec); int thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc2-xfs/include/linux/fs.h linux-2.6.26-rc2-timeout/incl ude/linux/fs.h --- linux-2.6.26-rc2-xfs/include/linux/fs.h 2008-05-12 11:21:09.000000000 +0900 +++ linux-2.6.26-rc2-timeout/include/linux/fs.h 2008-05-12 21:14:13.000000000 +0900 @@ -8,6 +8,7 @@ #include #include +#include /* * It's silly to have NR_OPEN bigger than NR_FILE, but you can change @@ -225,6 +226,7 @@ extern int dir_notify_enable; #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ #define FIFREEZE _IOWR('X', 119, int) /* Freeze */ #define FITHAW _IOWR('X', 120, int) /* Thaw */ +#define FIFREEZE_RESET_TIMEOUT _IO(0x00, 3) /* Reset freeze timeout */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -559,6 +561,8 @@ struct block_device { /* State of the block device. (Used by freeze feature) */ unsigned long bd_state; + /* Delayed work for freeze */ + struct delayed_work bd_freeze_timeout; }; /* @@ -2146,5 +2150,9 @@ int proc_nr_files(struct ctl_table *tabl int get_filesystem_list(char * buf); +extern void add_freeze_timeout(struct block_device *bdev, long timeout_msec); +extern void del_freeze_timeout(struct block_device *bdev); +extern void freeze_timeout(struct work_struct *work); + #endif /* __KERNEL__ */ #endif /* _LINUX_FS_H */ From owner-xfs@oss.sgi.com Wed May 14 01:43:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 01:43:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4E8gvN1002356 for ; Wed, 14 May 2008 01:43:00 -0700 X-ASG-Debug-ID: 1210754624-4aec02000000-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 4AE7516B2603; Wed, 14 May 2008 01:43:45 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4UslJ4xTccNmuAQG; Wed, 14 May 2008 01:43:45 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwCaO-00082V-Mf; Wed, 14 May 2008 08:43:44 +0000 Date: Wed, 14 May 2008 04:43:44 -0400 From: Christoph Hellwig To: Barry Naujok Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: [PATCH 0/4] XFS: ASCII case-insensitivity support Subject: Re: [PATCH 0/4] XFS: ASCII case-insensitivity support Message-ID: <20080514084344.GA4333@infradead.org> References: <20080514075244.738514733@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080514075244.738514733@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210754625 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.1, rules version 3.1.50316 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15891 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs All patches looks good to me, but please add a comment describing the conditional d_reash in the create case. From owner-xfs@oss.sgi.com Wed May 14 10:23:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 10:23:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4EHNAcR009525 for ; Wed, 14 May 2008 10:23:12 -0700 X-ASG-Debug-ID: 1210785835-7756018e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from hp3.statik.tu-cottbus.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 183CD16BCDA8 for ; Wed, 14 May 2008 10:23:55 -0700 (PDT) Received: from hp3.statik.tu-cottbus.de (hp3.statik.tu-cottbus.de [141.43.120.68]) by cuda.sgi.com with ESMTP id Qi6R1TwHT4GlWYvi for ; Wed, 14 May 2008 10:23:55 -0700 (PDT) Received: from [141.43.120.89] (unknown [141.43.120.89]) by hp3.statik.tu-cottbus.de (Postfix) with ESMTP id 1D78A47A36; Wed, 14 May 2008 19:23:54 +0200 (CEST) Message-ID: <482B1FD7.70108@s5r6.in-berlin.de> Date: Wed, 14 May 2008 19:22:31 +0200 From: Stefan Richter User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1.13) Gecko/20080313 SeaMonkey/1.1.9 MIME-Version: 1.0 To: Georgi Chorbadzhiyski CC: Jan Engelhardt , xfs@oss.sgi.com, jfs-discussion@lists.sourceforge.net, cluster-devel@redhat.com, Linux Kernel Mailing List X-ASG-Orig-Subj: Re: Unneeded kernel threads (xfs, jfs, gfs2) Subject: Re: Unneeded kernel threads (xfs, jfs, gfs2) References: <4828CAC6.3090402@unixsol.org> <482952F2.3080608@unixsol.org> In-Reply-To: <482952F2.3080608@unixsol.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: hp3.statik.tu-cottbus.de[141.43.120.68] X-Barracuda-Start-Time: 1210785837 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1315 1.0000 -1.2070 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.21 X-Barracuda-Spam-Status: No, SCORE=-1.21 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.1, rules version 3.1.50352 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15892 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stefanr@s5r6.in-berlin.de Precedence: bulk X-list: xfs Georgi Chorbadzhiyski wrote: > Jan Engelhardt mumbled something about, On 5/13/08 2:21 AM: >> On Tuesday 2008-05-13 00:55, Georgi Chorbadzhiyski wrote: >>>> 1148 ? S< 0:00 \_ [khpsbpkt] >>> What is this? >> >> ieee1394/ieee1394_core.c:static struct task_struct *khpsbpkt_thread; > > Strange names :) Fixed in drivers/firewire/. :-) PS: "k" = kernel "hpsb" = High Performance Serial Bus ( = IEEE 1394) "pkt" = packet (The thread completes split transactions associated with outbound request packets.) -- Stefan Richter -=====-==--- -=-= -===- http://arcgraph.de/sr/ From owner-xfs@oss.sgi.com Wed May 14 18:03:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 18:03:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F1350j020919 for ; Wed, 14 May 2008 18:03:09 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA13801; Thu, 15 May 2008 11:03:34 +1000 Date: Thu, 15 May 2008 11:03:51 +1000 To: "Christoph Hellwig" , "Anton Altaparmakov" Subject: VFS case-insenstive dcache code (was Re: [PATCH 0/4] XFS: ASCII case-insensitivity support) From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080514075244.738514733@chook.melbourne.sgi.com> <20080514084344.GA4333@infradead.org> Message-ID: In-Reply-To: <20080514084344.GA4333@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4F13D0j020929 X-archive-position: 15893 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 14 May 2008 18:43:44 +1000, Christoph Hellwig wrote: > All patches looks good to me, but please add a comment describing the > conditional d_reash in the create case. I'm separating the "return name" patch into two patches: one for the dcache code which Anton wrote and one with the XFS specific code. So, how does one apply the Signed-off line and copyright for the dcache code (below - possibly mangled)? Regards, Barry. -- VFS: Add case-insensitive support d_ci_add() routine This add a dcache entry to the dcache for lookup, but changing the name that is associated with the entry rather than the one passed in to the lookup routine. First, it sees if the case-exact match already exists in the dcache and uses it if one exists. Otherwise, it allocates a new node with the new name and splices it into the dcache. --- fs/dcache.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/dcache.h | 1 2 files changed, 105 insertions(+) Index: kern_ci/fs/dcache.c =================================================================== --- kern_ci.orig/fs/dcache.c +++ kern_ci/fs/dcache.c @@ -1191,6 +1191,109 @@ struct dentry *d_splice_alias(struct ino return new; } +/** + * d_add_ci - lookup or allocate new dentry with case-exact name + * @inode: the inode case-insensitive lookup has found + * @dentry: the negative dentry that was passed to the parent's lookup func + * @name: the case-exact name to be associated with the returned dentry + * + * This is to avoid filling the dcache with case-insensitive names to the + * same inode, only the actual correct case is stored in the dcache for + * case-insensitive filesystems. + * + * For a case-insensitive lookup match and if the the case-exact dentry + * already exists in in the dcache, use it and return it. + * + * If no entry exists with the exact case name, allocate new dentry with + * the exact case, and return the spliced entry. + */ + +struct dentry *d_add_ci(struct inode *inode, struct dentry *dentry, + struct qstr *name) +{ + int error; + struct dentry *found; + struct dentry *new; + + /* Does a dentry matching the name exist already? */ + found = d_hash_and_lookup(dentry->d_parent, name); + /* If not, create it now and return */ + if (!found) { + new = d_alloc(dentry->d_parent, name); + if (!new) { + error = -ENOMEM; + goto err_out; + } + found = d_splice_alias(inode, new); + if (found) { + dput(new); + return found; + } + return new; + } + /* Matching dentry exists, check if it is negative. */ + if (found->d_inode) { + if (unlikely(found->d_inode != inode)) { + /* This can't happen because bad inodes are unhashed. */ + BUG_ON(!is_bad_inode(inode)); + BUG_ON(!is_bad_inode(found->d_inode)); + } + /* + * Already have the inode and the dentry attached, decrement + * the reference count to balance the iget() done + * earlier on. We found the dentry using d_lookup() so it + * cannot be disconnected and thus we do not need to worry + * about any NFS/disconnectedness issues here. + */ + iput(inode); + return found; + } + /* + * Negative dentry: instantiate it unless the inode is a directory and + * has a 'disconnected' dentry (i.e. IS_ROOT and DCACHE_DISCONNECTED), + * in which case d_move() that in place of the found dentry. + */ + if (!S_ISDIR(inode->i_mode)) { + /* Not a directory; everything is easy. */ + d_instantiate(found, inode); + return found; + } + spin_lock(&dcache_lock); + if (list_empty(&inode->i_dentry)) { + /* + * Directory without a 'disconnected' dentry; we need to do + * d_instantiate() by hand because it takes dcache_lock which + * we already hold. + */ + list_add(&found->d_alias, &inode->i_dentry); + found->d_inode = inode; + spin_unlock(&dcache_lock); + security_d_instantiate(found, inode); + return found; + } + /* + * Directory with a 'disconnected' dentry; get a reference to the + * 'disconnected' dentry. + */ + new = list_entry(inode->i_dentry.next, struct dentry, d_alias); + dget_locked(new); + spin_unlock(&dcache_lock); + /* Do security vodoo. */ + security_d_instantiate(found, inode); + /* Move new in place of found. */ + d_move(new, found); + /* Balance the iget() we did above. */ + iput(inode); + /* Throw away found. */ + dput(found); + /* Use new as the actual dentry. */ + return new; + +err_out: + iput(inode); + return ERR_PTR(error); +} + /** * d_lookup - search for a dentry @@ -2178,6 +2281,7 @@ EXPORT_SYMBOL(d_path); EXPORT_SYMBOL(d_prune_aliases); EXPORT_SYMBOL(d_rehash); EXPORT_SYMBOL(d_splice_alias); +EXPORT_SYMBOL(d_add_ci); EXPORT_SYMBOL(d_validate); EXPORT_SYMBOL(dget_locked); EXPORT_SYMBOL(dput); Index: kern_ci/include/linux/dcache.h =================================================================== --- kern_ci.orig/include/linux/dcache.h +++ kern_ci/include/linux/dcache.h @@ -231,6 +231,7 @@ extern void d_delete(struct dentry *); extern struct dentry * d_alloc(struct dentry *, const struct qstr *); extern struct dentry * d_alloc_anon(struct inode *); extern struct dentry * d_splice_alias(struct inode *, struct dentry *); +extern struct dentry * d_add_ci(struct inode *, struct dentry *, struct qstr *); extern void shrink_dcache_sb(struct super_block *); extern void shrink_dcache_parent(struct dentry *); extern void shrink_dcache_for_umount(struct super_block *); From owner-xfs@oss.sgi.com Wed May 14 18:16:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 18:17:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F1Gq76022184 for ; Wed, 14 May 2008 18:16:55 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA14399; Thu, 15 May 2008 11:17:37 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4F1HasT168263627; Thu, 15 May 2008 11:17:37 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4F1HZQw167315651; Thu, 15 May 2008 11:17:35 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 15 May 2008 11:17:35 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa 166 - fix filter pathname issue Message-ID: <20080515011735.GL155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15894 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs If the path to the file being bmap'd has a [0-9] in it, the output filter matches it and we get golden output failure. Be more specific on the match. Signed-off-by: Dave Chinner --- xfstests/166 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: xfs-cmds/xfstests/166 =================================================================== --- xfs-cmds.orig/xfstests/166 2008-05-08 09:57:55.000000000 +1000 +++ xfs-cmds/xfstests/166 2008-05-15 09:10:09.890128276 +1000 @@ -33,7 +33,7 @@ _cleanup() _filter_blocks() { $AWK_PROG ' -/[0-9]/ { +/^ +[0-9]/ { if (!written_size) { written_size = $6 unwritten1 = ((1048576/512) / 2) - written_size From owner-xfs@oss.sgi.com Wed May 14 18:23:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 18:23:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F1N51l022786 for ; Wed, 14 May 2008 18:23:07 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA14612; Thu, 15 May 2008 11:23:49 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4F1NmsT167110525; Thu, 15 May 2008 11:23:48 +1000 (AEST) Received: (from mohamedb@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4F1NlCN167238325; Thu, 15 May 2008 11:23:47 +1000 (AEST) Date: Thu, 15 May 2008 11:23:47 +1000 (AEST) From: Mohamed Barwani Message-Id: <200805150123.m4F1NlCN167238325@snort.melbourne.sgi.com> To: sgi.bugs.mangrove@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981801 - Fix Test 180 for long /dev paths X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15895 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: mohamedb@snort.melbourne.sgi.com Precedence: bulk X-list: xfs Test 180 breaks if you have long device paths Use -P for df to fix it -P, --portability use the POSIX output format Date: Thu May 15 11:23:04 AEST 2008 Workarea: snort.melbourne.sgi.com:/home/mohamedb/isms/xfs-cmds Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31162a xfstests/180 - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/180.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h - fix df for long /dev paths From owner-xfs@oss.sgi.com Wed May 14 18:32:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 18:32:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_72 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F1WDm4023641 for ; Wed, 14 May 2008 18:32:14 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA14935; Thu, 15 May 2008 11:32:57 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4F1WtsT64815299; Thu, 15 May 2008 11:32:57 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4F1WtIj165543608; Thu, 15 May 2008 11:32:55 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 15 May 2008 11:32:55 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa 073 - don't host loopback images in /tmp Message-ID: <20080515013255.GM155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15896 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs /tmp might be small, might not support files larger than 2GB, etc, so trying to host loopback images of 100GB filesystems will break in some situations. We should use $TEST_DIR for the images. Note: remounting of loopback images has a major bug (in mount) that "leaks" loopback device references. Hence all the hackery with losetup to work around this. Signed-off-by: Dave Chinner --- xfstests/073 | 78 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 27 deletions(-) Index: xfs-cmds/xfstests/073 =================================================================== --- xfs-cmds.orig/xfstests/073 2007-06-13 17:49:44.000000000 +1000 +++ xfs-cmds/xfstests/073 2008-05-14 08:52:51.029055515 +1000 @@ -3,8 +3,17 @@ # # Test xfs_copy # +# HACK WARNING: +# +# Due to the severe brokenness of mount's handling of loopback devices, we +# hardcode the loop devices we use for this test. This enables us to clean up +# the pieces when we remount the loop device because mount loses all trace of +# the fact this is a loop device. Hence to enable us to unmount the hosting +# filesystem, we need to manually tear down the relevant loop device. If +# mount ever gets fixed then this hack can be removed. +# #----------------------------------------------------------------------- -# Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. +# Copyright (c) 2000-2003,2008 Silicon Graphics, Inc. All Rights Reserved. #----------------------------------------------------------------------- # # creator @@ -16,14 +25,22 @@ echo "QA output created by $seq" here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# don't put fs images in /tmp +imgs=$TEST_DIR/$$ + _cleanup() { cd / umount $SCRATCH_MNT 2>/dev/null - umount $tmp.loop 2>/dev/null - [ -d $tmp.loop ] && rmdir $tmp.loop - [ -d $tmp.source_dir ] && rm -rf $tmp.source_dir - rm -f $tmp.* /var/tmp/xfs_copy.log.* + umount $imgs.loop 2>/dev/null + [ -d $imgs.loop ] && rmdir $imgs.loop + [ -d $imgs.source_dir ] && rm -rf $imgs.source_dir + rm -f $imgs.* $tmp.* /var/tmp/xfs_copy.log.* } trap "_cleanup; exit \$status" 0 1 2 3 15 @@ -51,9 +68,10 @@ _populate_scratch() _verify_copy() { target=$1 - target_dir=$tmp.loop + target_dir=$imgs.loop source=$2 source_dir=$3 + loop=`losetup -sf` [ $source = $SCRATCH_DEV ] && _scratch_mount @@ -63,7 +81,8 @@ _verify_copy() echo mounting new image on loopback rmdir $target_dir 2>/dev/null mkdir $target_dir - mount -t xfs -o loop $target $target_dir 2>/dev/null + + mount -t xfs -o loop=$loop $target $target_dir 2>/dev/null if [ $? -ne 0 ]; then echo retrying mount with nouuid option mount -t xfs -o loop -o nouuid $target $target_dir @@ -96,13 +115,10 @@ _verify_copy() echo unmounting and removing new image umount $source $target + losetup -d $loop > /dev/null 2>&1 rm -f $target } -# get standard environment, filters and checks -. ./common.rc -. ./common.filter - # real QA test starts here _supported_fs xfs @@ -124,31 +140,39 @@ umount $SCRATCH_MNT 2>/dev/null echo echo === copying scratch device to single target -xfs_copy $SCRATCH_DEV $tmp.image | _filter_copy '#' $tmp.image '#' '#' -_verify_copy $tmp.image $SCRATCH_DEV $SCRATCH_MNT +xfs_copy $SCRATCH_DEV $imgs.image | _filter_copy '#' $imgs.image '#' '#' +_verify_copy $imgs.image $SCRATCH_DEV $SCRATCH_MNT echo echo === copying scratch device to single target, duplicate UUID -xfs_copy -d $SCRATCH_DEV $tmp.image | _filter_copy '#' $tmp.image '#' '#' -_verify_copy $tmp.image $SCRATCH_DEV $SCRATCH_MNT +xfs_copy -d $SCRATCH_DEV $imgs.image | _filter_copy '#' $imgs.image '#' '#' +_verify_copy $imgs.image $SCRATCH_DEV $SCRATCH_MNT echo echo === copying scratch device to single target, large ro device -/sbin/mkfs.xfs -dfile,name=$tmp.source,size=100g | _filter_mkfs 2>/dev/null -rmdir $tmp.source_dir 2>/dev/null -mkdir $tmp.source_dir -mount -t xfs -o loop $tmp.source $tmp.source_dir -cp -a $here $tmp.source_dir -mount -t xfs -o remount,ro $tmp.source $tmp.source_dir -xfs_copy $tmp.source $tmp.image | _filter_copy '#' $tmp.image '#' '#' -_verify_copy $tmp.image $tmp.source $tmp.source_dir +/sbin/mkfs.xfs -dfile,name=$imgs.source,size=100g | _filter_mkfs 2>/dev/null +rmdir $imgs.source_dir 2>/dev/null +mkdir $imgs.source_dir + +loop2=`losetup -sf` +mount -t xfs -o loop=$loop2 $imgs.source $imgs.source_dir +cp -a $here $imgs.source_dir +mount -t xfs -o remount,ro $imgs.source $imgs.source_dir +xfs_copy $imgs.source $imgs.image | _filter_copy '#' $imgs.image '#' '#' +_verify_copy $imgs.image $imgs.source $imgs.source_dir + +# HACK WARNING: +# +# We're done with the nested loop mount, now we have to clean +# up the pieces that mount is incapable of doing. +losetup -d $loop2 > /dev/null 2>&1 echo echo === copying scratch device to multiple targets -xfs_copy -L$tmp.log -b $SCRATCH_DEV $tmp.image1 $tmp.image2 \ - | _filter_copy '#' $tmp.image1 '#' $tmp.image2 -_verify_copy $tmp.image1 $SCRATCH_DEV $SCRATCH_MNT -_verify_copy $tmp.image2 $SCRATCH_DEV $SCRATCH_MNT +xfs_copy -L$imgs.log -b $SCRATCH_DEV $imgs.image1 $imgs.image2 \ + | _filter_copy '#' $imgs.image1 '#' $imgs.image2 +_verify_copy $imgs.image1 $SCRATCH_DEV $SCRATCH_MNT +_verify_copy $imgs.image2 $SCRATCH_DEV $SCRATCH_MNT # success, all done status=0 From owner-xfs@oss.sgi.com Wed May 14 20:58:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 20:59:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F3wb1r007946 for ; Wed, 14 May 2008 20:58:41 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA17795; Thu, 15 May 2008 13:59:19 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 4966658C4C29; Thu, 15 May 2008 13:59:19 +1000 (EST) To: xfs@oss.sgi.com, sgi.bugs.xfs@engr.sgi.com Subject: TAKE 981809 - kill attr_capable checks Message-Id: <20080515035919.4966658C4C29@chook.melbourne.sgi.com> Date: Thu, 15 May 2008 13:59:19 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15897 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Kill attr_capable checks as already done in xattr_permission. No need for addition permission checks in the xattr handler, fs/xattr.c:xattr_permission() already does them, and in fact slightly more strict then what was in the attr_capable handlers. Signed-off-by: Christoph Hellwig Date: Thu May 15 13:58:26 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs-quilt Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31164a fs/xfs/xfs_attr.c - 1.149 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.149&r2=text&tr2=1.148&f=h - Kill attr_capable checks as already done in xattr_permission. fs/xfs/xfs_attr.h - 1.40 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.h.diff?r1=text&tr1=1.40&r2=text&tr2=1.39&f=h - Kill attr_capable checks as already done in xattr_permission. fs/xfs/linux-2.6/xfs_iops.c - 1.285 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.285&r2=text&tr2=1.284&f=h - Kill attr_capable checks as already done in xattr_permission. From owner-xfs@oss.sgi.com Wed May 14 21:35:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 21:35:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F4Z0Q3010542 for ; Wed, 14 May 2008 21:35:01 -0700 X-ASG-Debug-ID: 1210826147-125900f10000-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 E5FFC117ED7A; Wed, 14 May 2008 21:35:47 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Xe7I7NshtheSkM39; Wed, 14 May 2008 21:35:47 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwVBy-0000uL-Qv; Thu, 15 May 2008 04:35:46 +0000 Date: Thu, 15 May 2008 00:35:46 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , Anton Altaparmakov , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Re: VFS case-insenstive dcache code (was Re: [PATCH 0/4] XFS: ASCII case-insensitivity support) Subject: Re: VFS case-insenstive dcache code (was Re: [PATCH 0/4] XFS: ASCII case-insensitivity support) Message-ID: <20080515043546.GA22054@infradead.org> References: <20080514075244.738514733@chook.melbourne.sgi.com> <20080514084344.GA4333@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210826148 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.1, rules version 3.1.50396 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15898 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 11:03:51AM +1000, Barry Naujok wrote: > On Wed, 14 May 2008 18:43:44 +1000, Christoph Hellwig > wrote: > >> All patches looks good to me, but please add a comment describing the >> conditional d_reash in the create case. > > I'm separating the "return name" patch into two patches: one for the dcache > code which Anton wrote and one with the XFS specific code. > > So, how does one apply the Signed-off line and copyright for the dcache > code (below - possibly mangled)? In this from it should be From: and Signed-off-by: you as you factored it out of the ntfs code. Just mention it's originally Anton's ntfs code in the description. Of course getting Anton to sign off on it and prepare a patch to use it in ntfs would be even better. From owner-xfs@oss.sgi.com Wed May 14 21:56:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 21:56:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F4uFhC012010 for ; Wed, 14 May 2008 21:56:17 -0700 X-ASG-Debug-ID: 1210827421-5bd8030d0000-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 A67D016C458A; Wed, 14 May 2008 21:57:01 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id BqXe4qlQZ1dOGijT; Wed, 14 May 2008 21:57:01 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwVWW-0001TK-Nt; Thu, 15 May 2008 04:57:00 +0000 Date: Thu, 15 May 2008 00:57:00 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, aia21@cantab.net X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080515045700.GA4328@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210827423 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.1, rules version 3.1.50397 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15899 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, May 14, 2008 at 05:55:45PM +1000, Barry Naujok wrote: > Not quite sure if this is the right test, but I did 1000 creates on > a brand new filesystem with and without ci on my SATA drive, both > sustained almost 600 creates per second. > > I believe creates would be the worst case scenario for not adding > negative dentries? No, negative dentries shouldn't have any effect on that. negative entries help to optimize away lookups. E.g. thing of the PATH variable and say your shell is not in the first directory listed there. Having a negative dentry for it means that you don't have to do a lookup in the first directories everytime someone wants to use the shell. From owner-xfs@oss.sgi.com Wed May 14 22:13:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 22:13:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F5D2Gm013176 for ; Wed, 14 May 2008 22:13:05 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA19351; Thu, 15 May 2008 15:13:40 +1000 Date: Thu, 15 May 2008 15:14:54 +1000 To: "Christoph Hellwig" Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org, aia21@cantab.net Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> Message-ID: In-Reply-To: <20080515045700.GA4328@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4F5D7Gm013205 X-archive-position: 15900 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 15 May 2008 14:57:00 +1000, Christoph Hellwig wrote: > On Wed, May 14, 2008 at 05:55:45PM +1000, Barry Naujok wrote: >> Not quite sure if this is the right test, but I did 1000 creates on >> a brand new filesystem with and without ci on my SATA drive, both >> sustained almost 600 creates per second. >> >> I believe creates would be the worst case scenario for not adding >> negative dentries? > > No, negative dentries shouldn't have any effect on that. negative > entries help to optimize away lookups. E.g. thing of the PATH variable > and say your shell is not in the first directory listed there. Having > a negative dentry for it means that you don't have to do a lookup in > the first directories everytime someone wants to use the shell. Ah, that makes more sense. I did a test of a million lookups to a non-existant file in a short-form directory (dual 1.6G opteron): CI = 4.6s non-CI = 3.7s And a directory with 10000 files: CI = 10.3s non-CI = 3.9s Barry. From owner-xfs@oss.sgi.com Wed May 14 22:38:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 22:38:56 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F5ccth015373 for ; Wed, 14 May 2008 22:38:39 -0700 X-ASG-Debug-ID: 1210829965-6d3d01ac0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D0D4C16FA0D for ; Wed, 14 May 2008 22:39:25 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id cZCUk75Z8I0gT4kI for ; Wed, 14 May 2008 22:39:25 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4F5dIF3016691 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 15 May 2008 07:39:18 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4F5dIKc016689 for xfs@oss.sgi.com; Thu, 15 May 2008 07:39:18 +0200 Date: Thu, 15 May 2008 07:39:18 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] don't run test 167 if killall is not installed Subject: [PATCH] don't run test 167 if killall is not installed Message-ID: <20080515053918.GA16530@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210829966 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0195 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.1, rules version 3.1.50399 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15901 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Test 167 will leave runaway fsstress processes around in case killall is not installed and thus make all following tests fail. This patch checks for killall beeing installed and error out otherwise. Signed-off-by: Christoph Hellwig Index: xfstests/167 =================================================================== RCS file: /cvs/xfs-cmds/xfstests/167,v retrieving revision 1.3 diff -u -p -r1.3 167 --- xfstests/167 2 Aug 2007 16:19:56 -0000 1.3 +++ xfstests/167 15 May 2008 05:34:20 -0000 @@ -13,6 +13,7 @@ owner=dgc@sgi.com seq=`basename $0` echo "QA output created by $seq" +killall="/usr/bin/killall" here=`pwd` tmp=/tmp/$$ rm -f $seq.full @@ -43,6 +44,8 @@ workout() _supported_fs xfs _supported_os Linux +[ -x $killall ] || _notrun "$killall executable not found" + _setup_testdir _require_scratch _scratch_mkfs_xfs >/dev/null 2>&1 From owner-xfs@oss.sgi.com Wed May 14 23:05:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:05:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F65A8J017160 for ; Wed, 14 May 2008 23:05:11 -0700 X-ASG-Debug-ID: 1210831558-652c00810000-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 F243D117F262; Wed, 14 May 2008 23:05:58 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ldGPX2XtoeQXgDSp; Wed, 14 May 2008 23:05:58 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwWbG-0005ET-9q; Thu, 15 May 2008 06:05:58 +0000 Date: Thu, 15 May 2008 02:05:58 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa 073 - don't host loopback images in /tmp Subject: Re: [patch] xfsqa 073 - don't host loopback images in /tmp Message-ID: <20080515060558.GB8780@infradead.org> References: <20080515013255.GM155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515013255.GM155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210831558 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.1, rules version 3.1.50402 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15903 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 11:32:55AM +1000, David Chinner wrote: > /tmp might be small, might not support files larger than 2GB, > etc, so trying to host loopback images of 100GB filesystems > will break in some situations. We should use $TEST_DIR for the > images. > > Note: remounting of loopback images has a major bug (in mount) > that "leaks" loopback device references. Hence all the hackery > with losetup to work around this. Looks good. From owner-xfs@oss.sgi.com Wed May 14 23:03:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:03:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F63Tld016993 for ; Wed, 14 May 2008 23:03:30 -0700 X-ASG-Debug-ID: 1210831456-099502910000-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 26AF516C468A; Wed, 14 May 2008 23:04:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id jQsD9DnOGndR9Qpc; Wed, 14 May 2008 23:04:16 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwWZc-0002IO-NH; Thu, 15 May 2008 06:04:16 +0000 Date: Thu, 15 May 2008 02:04:16 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa 166 - fix filter pathname issue Subject: Re: [patch] xfsqa 166 - fix filter pathname issue Message-ID: <20080515060416.GA8780@infradead.org> References: <20080515011735.GL155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515011735.GL155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210831457 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.1, rules version 3.1.50401 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15902 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 11:17:35AM +1000, David Chinner wrote: > If the path to the file being bmap'd has a [0-9] in it, > the output filter matches it and we get golden output > failure. Be more specific on the match. Looks good. From owner-xfs@oss.sgi.com Wed May 14 23:39:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:39:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F6dMJr019676 for ; Wed, 14 May 2008 23:39:24 -0700 Received: from tim-shimmins-mac-mini.local (melb-sw-corp-251-5.corp.sgi.com [134.15.251.5]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21440; Thu, 15 May 2008 16:40:02 +1000 Message-ID: <482BDAC1.7070407@sgi.com> Date: Thu, 15 May 2008 16:40:01 +1000 From: Tim Shimmin User-Agent: Thunderbird 2.0.0.12 (Macintosh/20080213) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH] don't run test 167 if killall is not installed References: <20080515053918.GA16530@lst.de> In-Reply-To: <20080515053918.GA16530@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15904 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > Test 167 will leave runaway fsstress processes around in case killall is > not installed and thus make all following tests fail. This patch checks > for killall beeing installed and error out otherwise. > > Looks reasonable. However: * could use set_prog_path like we do in common.config. * I wonder if one could use "kill -$pgid" on the process group for fsstress instead of killall (I've never tried it :). --Tim > Signed-off-by: Christoph Hellwig > > Index: xfstests/167 > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/167,v > retrieving revision 1.3 > diff -u -p -r1.3 167 > --- xfstests/167 2 Aug 2007 16:19:56 -0000 1.3 > +++ xfstests/167 15 May 2008 05:34:20 -0000 > @@ -13,6 +13,7 @@ owner=dgc@sgi.com > seq=`basename $0` > echo "QA output created by $seq" > > +killall="/usr/bin/killall" > here=`pwd` > tmp=/tmp/$$ > rm -f $seq.full > @@ -43,6 +44,8 @@ workout() > _supported_fs xfs > _supported_os Linux > > +[ -x $killall ] || _notrun "$killall executable not found" > + > _setup_testdir > _require_scratch > _scratch_mkfs_xfs >/dev/null 2>&1 > From owner-xfs@oss.sgi.com Wed May 14 23:44:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:44:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F6iGTS020293 for ; Wed, 14 May 2008 23:44:18 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21517; Thu, 15 May 2008 16:45:01 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 449FB58C4C29; Thu, 15 May 2008 16:45:01 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981816 - XFSQA 008 - Takes too long on UML Message-Id: <20080515064501.449FB58C4C29@chook.melbourne.sgi.com> Date: Thu, 15 May 2008 16:45:01 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15906 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs With the recent change for reliability with 64k page size made to test 008,the file sizes got much larger. It appears that randholes actually reads the entire file, so this has slowed the test down by a factor of ten (all file sizes were increased by 10x). This means the test is now taking about 18 minutes to run on a UML session, and all the time is spent reading the files. Instead, scale the file size based on the page size. We know how many holes we are trying to produce and the I/O size being used to produce them, so the size of the files can be finely tuned. Assuming a decent random distribution, if the number of blocks in the file is 4x the page size and the I/O size is page sized, this means that every I/O should generate a new hole and we'll only get a small amount of adjacent extents. This has passed over 10 times on ia64 w/ 64k page and another 15 times on UML with 4k page. UML runtime is down from ~1000s to 5s, ia64 runtime is down from ~30s to 7s. Date: Thu May 15 16:44:20 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: tes@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31168a xfstests/008 - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/008.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h xfstests/008.out - 1.5 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/008.out.diff?r1=text&tr1=1.5&r2=text&tr2=1.4&f=h - Greatly reduce runtime by reducing filesizes down to sane minimum. From owner-xfs@oss.sgi.com Wed May 14 23:40:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:40:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F6ducS019723 for ; Wed, 14 May 2008 23:40:02 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21446; Thu, 15 May 2008 16:40:40 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4F6ebsT165857269; Thu, 15 May 2008 16:40:38 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4F6eaO7168356316; Thu, 15 May 2008 16:40:36 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 15 May 2008 16:40:35 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] don't run test 167 if killall is not installed Message-ID: <20080515064035.GQ155679365@sgi.com> References: <20080515053918.GA16530@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515053918.GA16530@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15905 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 07:39:18AM +0200, Christoph Hellwig wrote: > Test 167 will leave runaway fsstress processes around in case killall is > not installed and thus make all following tests fail. This patch checks > for killall beeing installed and error out otherwise. Looks sane to me. I'll check it in in a minute.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed May 14 23:46:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:46:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F6kBAU020631 for ; Wed, 14 May 2008 23:46:15 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21680; Thu, 15 May 2008 16:46:56 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5107D58C4C29; Thu, 15 May 2008 16:46:56 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981816 - Don't use /tmp for hosting loopback images Message-Id: <20080515064656.5107D58C4C29@chook.melbourne.sgi.com> Date: Thu, 15 May 2008 16:46:56 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15907 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't use /tmp for hosting loopback images /tmp might be small, might not support files larger than 2GB, etc, so trying to host loopback images of 100GB filesystems will break in some situations. We should use $TEST_DIR for the images. Note: remounting of loopback images has a major bug (in mount) that "leaks" loopback device references. Hence all the hackery with losetup to work around this. Date: Thu May 15 16:46:41 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31169a xfstests/073 - 1.11 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/073.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h - Don't use /tmp for hosting loopback images From owner-xfs@oss.sgi.com Wed May 14 23:48:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 14 May 2008 23:48:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F6mWvJ021095 for ; Wed, 14 May 2008 23:48:34 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21713; Thu, 15 May 2008 16:49:16 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id D6AFA58C4C29; Thu, 15 May 2008 16:49:16 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981816 - Fix pathname filter issue in 166 Message-Id: <20080515064916.D6AFA58C4C29@chook.melbourne.sgi.com> Date: Thu, 15 May 2008 16:49:16 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15908 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix pathname filter issue. If the path to the file being bmap'd has a [0-9] in it, the output filter matches it and we get golden output failure. Be more specific on the match. Date: Thu May 15 16:48:30 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31170a xfstests/166 - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/166.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h - Be more specific when trying to match extent output lines. From owner-xfs@oss.sgi.com Thu May 15 00:07:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 00:07:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F7738M024970 for ; Thu, 15 May 2008 00:07:06 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA22123; Thu, 15 May 2008 17:07:41 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id B63D158C4C29; Thu, 15 May 2008 17:07:41 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981816 - Don't run 167 if killall is not installed Message-Id: <20080515070741.B63D158C4C29@chook.melbourne.sgi.com> Date: Thu, 15 May 2008 17:07:41 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15909 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Don't run 167 if killall is not installed Test 167 will leave runaway fsstress processes around in case killall is not installed and thus make all following tests fail. This patch checks for killall beeing installed and error out otherwise. Signed-off-by: Christoph Hellwig Date: Thu May 15 17:07:24 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/xfs-cmds Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31171a xfstests/167 - 1.4 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/167.diff?r1=text&tr1=1.4&r2=text&tr2=1.3&f=h - don't run if killall is not installed. From owner-xfs@oss.sgi.com Thu May 15 00:13:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 00:13:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F7D31l025618 for ; Thu, 15 May 2008 00:13:12 -0700 X-ASG-Debug-ID: 1210835625-1c7702990000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 951FE16C808; Thu, 15 May 2008 00:13:46 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id Ce8rvFAWV6ItSs5F; Thu, 15 May 2008 00:13:46 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4F7DcF3026500 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Thu, 15 May 2008 09:13:39 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4F7Dcas026498; Thu, 15 May 2008 09:13:38 +0200 Date: Thu, 15 May 2008 09:13:38 +0200 From: Christoph Hellwig To: Tim Shimmin Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] don't run test 167 if killall is not installed Subject: Re: [PATCH] don't run test 167 if killall is not installed Message-ID: <20080515071338.GA26247@lst.de> References: <20080515053918.GA16530@lst.de> <482BDAC1.7070407@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482BDAC1.7070407@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210835631 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.1, rules version 3.1.50405 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15910 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 04:40:01PM +1000, Tim Shimmin wrote: > Looks reasonable. > > However: > > * could use set_prog_path like we do in common.config. > > * I wonder if one could use "kill -$pgid" on the process group > for fsstress instead of killall (I've never tried it :). Dave already commited the original version, but I'll send an update to use set_prog_path later today. From owner-xfs@oss.sgi.com Thu May 15 00:35:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 00:35:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F7ZX7U031933 for ; Thu, 15 May 2008 00:35:36 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA22873; Thu, 15 May 2008 17:36:09 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4F7a7sT163741673; Thu, 15 May 2008 17:36:08 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4F7a5CO167361421; Thu, 15 May 2008 17:36:05 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 15 May 2008 17:36:05 +1000 From: David Chinner To: Christoph Hellwig Cc: Tim Shimmin , xfs@oss.sgi.com Subject: Re: [PATCH] don't run test 167 if killall is not installed Message-ID: <20080515073605.GR155679365@sgi.com> References: <20080515053918.GA16530@lst.de> <482BDAC1.7070407@sgi.com> <20080515071338.GA26247@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515071338.GA26247@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15911 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 09:13:38AM +0200, Christoph Hellwig wrote: > On Thu, May 15, 2008 at 04:40:01PM +1000, Tim Shimmin wrote: > > Looks reasonable. > > > > However: > > > > * could use set_prog_path like we do in common.config. > > > > * I wonder if one could use "kill -$pgid" on the process group > > for fsstress instead of killall (I've never tried it :). > > Dave already commited the original version, but I'll send an update > to use set_prog_path later today. Sorry, didn't see that Tim replied as well. set_prog_path is fine by me too, but stopping every test from running because killall is not present is a bit of overkill, isn't it? Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 00:38:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 00:38:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4F7c04n032262 for ; Thu, 15 May 2008 00:38:06 -0700 X-ASG-Debug-ID: 1210837124-4151006c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C1FCB117F75A; Thu, 15 May 2008 00:38:45 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id dMFuhcJzFWblbHsQ; Thu, 15 May 2008 00:38:45 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4F7cbF3028630 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Thu, 15 May 2008 09:38:37 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4F7cb1E028627; Thu, 15 May 2008 09:38:37 +0200 Date: Thu, 15 May 2008 09:38:37 +0200 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , Tim Shimmin , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] don't run test 167 if killall is not installed Subject: Re: [PATCH] don't run test 167 if killall is not installed Message-ID: <20080515073837.GA28530@lst.de> References: <20080515053918.GA16530@lst.de> <482BDAC1.7070407@sgi.com> <20080515071338.GA26247@lst.de> <20080515073605.GR155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515073605.GR155679365@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210837128 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.1, rules version 3.1.50408 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15912 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 05:36:05PM +1000, David Chinner wrote: > > Dave already commited the original version, but I'll send an update > > to use set_prog_path later today. > > Sorry, didn't see that Tim replied as well. set_prog_path is fine > by me too, but stopping every test from running because killall is > not present is a bit of overkill, isn't it? My plan was to use it in 167 not common.config. But I don't really care either way. From owner-xfs@oss.sgi.com Thu May 15 01:45:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 01:45:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4F8jCNi004638 for ; Thu, 15 May 2008 01:45:14 -0700 Received: from cxfsmac10.melbourne.sgi.com (cxfsmac10.melbourne.sgi.com [134.14.55.100]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA24553; Thu, 15 May 2008 18:45:53 +1000 Message-ID: <482BF841.8050704@sgi.com> Date: Thu, 15 May 2008 18:45:53 +1000 From: Donald Douwsma User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: Re: [PATCH] re-remove xfs custom bitops References: <480EB397.1040304@sandeen.net> <4829C360.5060500@sandeen.net> In-Reply-To: <4829C360.5060500@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15913 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> Once more, with feeling! >> >> This re-instates the reverted mod after the ppc panic of >> Feb '08. You guys do have ppc boxes in the test farm now right? :) >> >> This keeps xfs_lowbit64 as it was since there aren't good >> generic helpers there ... >> >> This should probably keep Dave's signed-off line, there's >> a bit of my (userspace) testing here but no original work. >> >> This exact patch isn't tested but it's based on a conglomeration >> of prior testing... > > SGI guys, any takers on this one? > -Eric Sorry Eric, havent had chance to run this on all platforms yet. I want to test it on ppc as well as the usual x86_64/ia64 combinations, then I'll get it committed. Don > >> Thanks, >> -Eric >> >> Index: linux-2.6-xfs/fs/xfs/xfs_bit.c >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.c >> +++ linux-2.6-xfs/fs/xfs/xfs_bit.c >> @@ -25,109 +25,6 @@ >> * XFS bit manipulation routines, used in non-realtime code. >> */ >> >> -#ifndef HAVE_ARCH_HIGHBIT >> -/* >> - * Index of high bit number in byte, -1 for none set, 0..7 otherwise. >> - */ >> -static const char xfs_highbit[256] = { >> - -1, 0, 1, 1, 2, 2, 2, 2, /* 00 .. 07 */ >> - 3, 3, 3, 3, 3, 3, 3, 3, /* 08 .. 0f */ >> - 4, 4, 4, 4, 4, 4, 4, 4, /* 10 .. 17 */ >> - 4, 4, 4, 4, 4, 4, 4, 4, /* 18 .. 1f */ >> - 5, 5, 5, 5, 5, 5, 5, 5, /* 20 .. 27 */ >> - 5, 5, 5, 5, 5, 5, 5, 5, /* 28 .. 2f */ >> - 5, 5, 5, 5, 5, 5, 5, 5, /* 30 .. 37 */ >> - 5, 5, 5, 5, 5, 5, 5, 5, /* 38 .. 3f */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 40 .. 47 */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 48 .. 4f */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 50 .. 57 */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 58 .. 5f */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 60 .. 67 */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 68 .. 6f */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 70 .. 77 */ >> - 6, 6, 6, 6, 6, 6, 6, 6, /* 78 .. 7f */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* 80 .. 87 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* 88 .. 8f */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* 90 .. 97 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* 98 .. 9f */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* a0 .. a7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* a8 .. af */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* b0 .. b7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* b8 .. bf */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* c0 .. c7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* c8 .. cf */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* d0 .. d7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* d8 .. df */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* e0 .. e7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* e8 .. ef */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* f0 .. f7 */ >> - 7, 7, 7, 7, 7, 7, 7, 7, /* f8 .. ff */ >> -}; >> -#endif >> - >> -/* >> - * xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set. >> - */ >> -inline int >> -xfs_highbit32( >> - __uint32_t v) >> -{ >> -#ifdef HAVE_ARCH_HIGHBIT >> - return highbit32(v); >> -#else >> - int i; >> - >> - if (v & 0xffff0000) >> - if (v & 0xff000000) >> - i = 24; >> - else >> - i = 16; >> - else if (v & 0x0000ffff) >> - if (v & 0x0000ff00) >> - i = 8; >> - else >> - i = 0; >> - else >> - return -1; >> - return i + xfs_highbit[(v >> i) & 0xff]; >> -#endif >> -} >> - >> -/* >> - * xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set. >> - */ >> -int >> -xfs_lowbit64( >> - __uint64_t v) >> -{ >> - __uint32_t w = (__uint32_t)v; >> - int n = 0; >> - >> - if (w) { /* lower bits */ >> - n = ffs(w); >> - } else { /* upper bits */ >> - w = (__uint32_t)(v >> 32); >> - if (w && (n = ffs(w))) >> - n += 32; >> - } >> - return n - 1; >> -} >> - >> -/* >> - * xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set. >> - */ >> -int >> -xfs_highbit64( >> - __uint64_t v) >> -{ >> - __uint32_t h = (__uint32_t)(v >> 32); >> - >> - if (h) >> - return xfs_highbit32(h) + 32; >> - return xfs_highbit32((__uint32_t)v); >> -} >> - >> - >> /* >> * Return whether bitmap is empty. >> * Size is number of words in the bitmap, which is padded to word boundary >> Index: linux-2.6-xfs/fs/xfs/xfs_bit.h >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.h >> +++ linux-2.6-xfs/fs/xfs/xfs_bit.h >> @@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in >> } >> >> /* Get high bit set out of 32-bit argument, -1 if none set */ >> -extern int xfs_highbit32(__uint32_t v); >> - >> -/* Get low bit set out of 64-bit argument, -1 if none set */ >> -extern int xfs_lowbit64(__uint64_t v); >> +static inline int xfs_highbit32(__uint32_t v) >> +{ >> + return fls(v) - 1; >> +} >> >> /* Get high bit set out of 64-bit argument, -1 if none set */ >> -extern int xfs_highbit64(__uint64_t); >> +static inline int xfs_highbit64(__uint64_t v) >> +{ >> + return fls64(v) - 1; >> +} >> + >> +/* Get low bit set out of 32-bit argument, -1 if none set */ >> +static inline int xfs_lowbit32(__uint32_t v) >> +{ >> + unsigned long t = v; >> + return (v) ? find_first_bit(&t, 32) : -1; >> +} >> + >> +/* Get low bit set out of 64-bit argument, -1 if none set */ >> +static inline int xfs_lowbit64(__uint64_t v) >> +{ >> + __uint32_t w = (__uint32_t)v; >> + int n = 0; >> + >> + if (w) { /* lower bits */ >> + n = ffs(w); >> + } else { /* upper bits */ >> + w = (__uint32_t)(v >> 32); >> + if (w && (n = ffs(w))) >> + n += 32; >> + } >> + return n - 1; >> +} >> >> /* Return whether bitmap is empty (1 == empty) */ >> extern int xfs_bitmap_empty(uint *map, uint size); >> Index: linux-2.6-xfs/fs/xfs/xfs_rtalloc.c >> =================================================================== >> --- linux-2.6-xfs.orig/fs/xfs/xfs_rtalloc.c >> +++ linux-2.6-xfs/fs/xfs/xfs_rtalloc.c >> @@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun >> */ >> >> /* >> - * xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set. >> - */ >> -STATIC int >> -xfs_lowbit32( >> - __uint32_t v) >> -{ >> - if (v) >> - return ffs(v) - 1; >> - return -1; >> -} >> - >> -/* >> * Allocate space to the bitmap or summary file, and zero it, for growfs. >> */ >> STATIC int /* error */ >> @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near( >> } >> bbno = XFS_BITTOBLOCK(mp, bno); >> i = 0; >> + ASSERT(minlen != 0); >> log2len = xfs_highbit32(minlen); >> /* >> * Loop over all bitmap blocks (bbno + i is current block). >> @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size( >> xfs_suminfo_t sum; /* summary information for extents */ >> >> ASSERT(minlen % prod == 0 && maxlen % prod == 0); >> + ASSERT(maxlen != 0); >> + >> /* >> * Loop over all the levels starting with maxlen. >> * At each level, look at all the bitmap blocks, to see if there >> @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size( >> *rtblock = NULLRTBLOCK; >> return 0; >> } >> + ASSERT(minlen != 0); >> + ASSERT(maxlen != 0); >> + >> /* >> * Loop over sizes, from maxlen down to minlen. >> * This time, when we do the allocations, allow smaller ones >> @@ -1961,6 +1955,7 @@ xfs_growfs_rt( >> nsbp->sb_blocksize * nsbp->sb_rextsize); >> nsbp->sb_rextents = nsbp->sb_rblocks; >> do_div(nsbp->sb_rextents, nsbp->sb_rextsize); >> + ASSERT(nsbp->sb_rextents != 0); >> nsbp->sb_rextslog = xfs_highbit32(nsbp->sb_rextents); >> nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog + 1; >> nrsumsize = >> >> >> > From owner-xfs@oss.sgi.com Thu May 15 06:37:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 06:37:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FDb2LY028977 for ; Thu, 15 May 2008 06:37:09 -0700 X-ASG-Debug-ID: 1210858669-26ef01970000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ppsw-7.csi.cam.ac.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 896061182717; Thu, 15 May 2008 06:37:49 -0700 (PDT) Received: from ppsw-7.csi.cam.ac.uk (ppsw-7.csi.cam.ac.uk [131.111.8.137]) by cuda.sgi.com with ESMTP id nuD74MZ7sTrBZ0hF; Thu, 15 May 2008 06:37:49 -0700 (PDT) X-Cam-SpamDetails: Not scanned X-Cam-AntiVirus: No virus found X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ Received: from imp.csi.cam.ac.uk ([131.111.10.57]:49228) by ppsw-7.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:25) with esmtpsa (PLAIN:aia21) (TLSv1:AES128-SHA:128) id 1JwdeU-0004tP-N8 (Exim 4.67) (return-path ); Thu, 15 May 2008 14:37:46 +0100 From: Anton Altaparmakov To: Christoph Hellwig In-Reply-To: <20080515043546.GA22054@infradead.org> X-ASG-Orig-Subj: Re: VFS case-insenstive dcache code (was Re: [PATCH 0/4] XFS: ASCII case-insensitivity support) Subject: Re: VFS case-insenstive dcache code (was Re: [PATCH 0/4] XFS: ASCII case-insensitivity support) References: <20080514075244.738514733@chook.melbourne.sgi.com> <20080514084344.GA4333@infradead.org> <20080515043546.GA22054@infradead.org> Message-Id: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v919.2) Date: Thu, 15 May 2008 14:37:45 +0100 Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel@vger.kernel.org X-Mailer: Apple Mail (2.919.2) X-Barracuda-Connect: ppsw-7.csi.cam.ac.uk[131.111.8.137] X-Barracuda-Start-Time: 1210858670 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.75 X-Barracuda-Spam-Status: No, SCORE=-1.75 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.1, rules version 3.1.50432 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.28 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15914 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aia21@cam.ac.uk Precedence: bulk X-list: xfs Hi, On 15 May 2008, at 05:35, Christoph Hellwig wrote: > On Thu, May 15, 2008 at 11:03:51AM +1000, Barry Naujok wrote: >> On Wed, 14 May 2008 18:43:44 +1000, Christoph Hellwig > > >> wrote: >> >>> All patches looks good to me, but please add a comment describing >>> the >>> conditional d_reash in the create case. >> >> I'm separating the "return name" patch into two patches: one for >> the dcache >> code which Anton wrote and one with the XFS specific code. >> >> So, how does one apply the Signed-off line and copyright for the >> dcache >> code (below - possibly mangled)? > > In this from it should be From: and Signed-off-by: you as you factored > it out of the ntfs code. Just mention it's originally Anton's ntfs > code in the description. Of course getting Anton to sign off on it > and prepare a patch to use it in ntfs would be even better. You can certainly add SOB: Signed-off-by: Anton Altaparmakov to the patch. It looks good to me. Once Linus has applied this I will try and get NTFS switched to using the new function. I have got a few other patches that need applying for NTFS anyway so I will roll them all up in one go into the NTFS git tree and get Linus to apply them... Best regards, Anton -- Anton Altaparmakov (replace at with @) Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK Linux NTFS maintainer, http://www.linux-ntfs.org/ From owner-xfs@oss.sgi.com Thu May 15 06:43:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 06:43:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FDh4W3029565 for ; Thu, 15 May 2008 06:43:07 -0700 X-ASG-Debug-ID: 1210859031-1a1502190000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ppsw-7.csi.cam.ac.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 08FDB118320E; Thu, 15 May 2008 06:43:52 -0700 (PDT) Received: from ppsw-7.csi.cam.ac.uk (ppsw-7.csi.cam.ac.uk [131.111.8.137]) by cuda.sgi.com with ESMTP id 0Hb2eIaljNZv4uLh; Thu, 15 May 2008 06:43:52 -0700 (PDT) X-Cam-SpamDetails: Not scanned X-Cam-AntiVirus: No virus found X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ Received: from imp.csi.cam.ac.uk ([131.111.10.57]:49229) by ppsw-7.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.157]:25) with esmtpsa (PLAIN:aia21) (TLSv1:AES128-SHA:128) id 1JwdkG-0007NH-Pe (Exim 4.67) (return-path ); Thu, 15 May 2008 14:43:45 +0100 From: Anton Altaparmakov To: Barry Naujok In-Reply-To: X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> Message-Id: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v919.2) Date: Thu, 15 May 2008 14:43:44 +0100 Cc: Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel X-Mailer: Apple Mail (2.919.2) X-Barracuda-Connect: ppsw-7.csi.cam.ac.uk[131.111.8.137] X-Barracuda-Start-Time: 1210859033 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.1, rules version 3.1.50432 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15915 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aia21@cam.ac.uk Precedence: bulk X-list: xfs Hi, On 15 May 2008, at 06:14, Barry Naujok wrote: > On Thu, 15 May 2008 14:57:00 +1000, Christoph Hellwig > wrote: >> On Wed, May 14, 2008 at 05:55:45PM +1000, Barry Naujok wrote: >>> Not quite sure if this is the right test, but I did 1000 creates on >>> a brand new filesystem with and without ci on my SATA drive, both >>> sustained almost 600 creates per second. >>> >>> I believe creates would be the worst case scenario for not adding >>> negative dentries? >> >> No, negative dentries shouldn't have any effect on that. negative >> entries help to optimize away lookups. E.g. thing of the PATH >> variable >> and say your shell is not in the first directory listed there. >> Having >> a negative dentry for it means that you don't have to do a lookup in >> the first directories everytime someone wants to use the shell. > > Ah, that makes more sense. I did a test of a million lookups to a > non-existant file in a short-form directory (dual 1.6G opteron): > > CI = 4.6s > non-CI = 3.7s > > And a directory with 10000 files: > > CI = 10.3s > non-CI = 3.9s Yes, and you can get the performance back if you allow negative dentries to be created. You just have to make sure that every time a directory entry is created in directory X, all negative dentries which are children of directory X are thrown away. Failure to do so will result in lookups returning ENOENT even though a file now exists that matches case insensitively. This happens because the VFS will find the negative dentry and return ENOENT without calling the file system lookup method thus the file system does not get a chance to discover the new matching directory entry... Best regards, Anton -- Anton Altaparmakov (replace at with @) Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK Linux NTFS maintainer, http://www.linux-ntfs.org/ From owner-xfs@oss.sgi.com Thu May 15 07:10:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 07:10:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FEAYUM031928 for ; Thu, 15 May 2008 07:10:36 -0700 X-ASG-Debug-ID: 1210860682-173703d50000-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 50C2F112AC74; Thu, 15 May 2008 07:11:22 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id GLi0StEE3qkSXBr8; Thu, 15 May 2008 07:11:22 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JweAz-0002lG-Ns; Thu, 15 May 2008 14:11:21 +0000 Date: Thu, 15 May 2008 10:11:21 -0400 From: Christoph Hellwig To: Anton Altaparmakov Cc: Barry Naujok , Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080515141121.GA14198@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210860683 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.1, rules version 3.1.50434 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15916 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 02:43:44PM +0100, Anton Altaparmakov wrote: > Yes, and you can get the performance back if you allow negative dentries to > be created. You just have to make sure that every time a directory entry > is created in directory X, all negative dentries which are children of > directory X are thrown away. We might even be able to optimize this a little by calling d_compare on each alias to see if it hashes down to the same one down in the fs. From owner-xfs@oss.sgi.com Thu May 15 07:22:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 07:22:46 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FEMS4U000902 for ; Thu, 15 May 2008 07:22:29 -0700 X-ASG-Debug-ID: 1210861393-2c00036d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 29CDC16C6341 for ; Thu, 15 May 2008 07:23:13 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8geBOYHZbKfZdVa9 for ; Thu, 15 May 2008 07:23:13 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4FEN6F3030535 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 15 May 2008 16:23:06 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4FEN6gC030533 for xfs@oss.sgi.com; Thu, 15 May 2008 16:23:06 +0200 Date: Thu, 15 May 2008 16:23:06 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] fix memory corruption with small buffer reads Subject: [PATCH] fix memory corruption with small buffer reads Message-ID: <20080515142306.GA29842@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210861396 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.1, rules version 3.1.50435 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15917 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs When we have multiple buffers in a single page for a blocksize == pagesize filesystem we might overwrite the page contents if two callers hit it shortly after each other. To prevent that we need to keep the page locked until I/O is completed and the page marked uptodate. Thanks to Eric Sandeen for triaging this bug and finding a reproducible testcase and Dave Chinner for additional advice. This should fix kernel.org bz #10421. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 11:45:10.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 15:26:09.000000000 +0200 @@ -386,6 +386,8 @@ _xfs_buf_lookup_pages( if (unlikely(page == NULL)) { if (flags & XBF_READ_AHEAD) { bp->b_page_count = i; + for (i = 0; i < bp->b_page_count; i++) + unlock_page(bp->b_pages[i]); return -ENOMEM; } @@ -415,17 +417,24 @@ _xfs_buf_lookup_pages( ASSERT(!PagePrivate(page)); if (!PageUptodate(page)) { page_count--; - if (blocksize < PAGE_CACHE_SIZE && !PagePrivate(page)) { + if (blocksize >= PAGE_CACHE_SIZE) { + if (flags & XBF_READ) + bp->b_flags |= _XBF_PAGE_LOCKED; + } else if (!PagePrivate(page)) { if (test_page_region(page, offset, nbytes)) page_count++; } } - unlock_page(page); bp->b_pages[i] = page; offset = 0; } + if (!(bp->b_flags & _XBF_PAGE_LOCKED)) { + for (i = 0; i < bp->b_page_count; i++) + unlock_page(bp->b_pages[i]); + } + if (page_count == bp->b_page_count) bp->b_flags |= XBF_DONE; @@ -746,6 +755,7 @@ xfs_buf_associate_memory( bp->b_count_desired = len; bp->b_buffer_length = buflen; bp->b_flags |= XBF_MAPPED; + bp->b_flags &= ~_XBF_PAGE_LOCKED; return 0; } @@ -1093,8 +1103,10 @@ _xfs_buf_ioend( xfs_buf_t *bp, int schedule) { - if (atomic_dec_and_test(&bp->b_io_remaining) == 1) + if (atomic_dec_and_test(&bp->b_io_remaining) == 1) { + bp->b_flags &= ~_XBF_PAGE_LOCKED; xfs_buf_ioend(bp, schedule); + } } STATIC void @@ -1125,6 +1137,9 @@ xfs_buf_bio_end_io( if (--bvec >= bio->bi_io_vec) prefetchw(&bvec->bv_page->flags); + + if (bp->b_flags & _XBF_PAGE_LOCKED) + unlock_page(page); } while (bvec >= bio->bi_io_vec); _xfs_buf_ioend(bp, 1); @@ -1163,7 +1178,8 @@ _xfs_buf_ioapply( * filesystem block size is not smaller than the page size. */ if ((bp->b_buffer_length < PAGE_CACHE_SIZE) && - (bp->b_flags & XBF_READ) && + ((bp->b_flags & (XBF_READ|_XBF_PAGE_LOCKED)) == + (XBF_READ|_XBF_PAGE_LOCKED)) && (blocksize >= PAGE_CACHE_SIZE)) { bio = bio_alloc(GFP_NOIO, 1); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 11:45:10.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 15:26:09.000000000 +0200 @@ -66,6 +66,25 @@ typedef enum { _XBF_PAGES = (1 << 18), /* backed by refcounted pages */ _XBF_RUN_QUEUES = (1 << 19),/* run block device task queue */ _XBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ + + /* + * Special flag for supporting metadata blocks smaller than a FSB. + * + * In this case we can have multiple xfs_buf_t on a single page and + * need to lock out concurrent xfs_buf_t readers as they only + * serialise access to the buffer. + * + * If the FSB size >= PAGE_CACHE_SIZE case, we have no serialisation + * between reads of the page. Hence we can have one thread read the + * page and modify it, but then race with another thread that thinks + * the page is not up-to-date and hence reads it again. + * + * The result is that the first modifcation to the page is lost. + * This sort of AGF/AGI reading race can happen when unlinking inodes + * that require truncation and results in the AGI unlinked list + * modifications being lost. + */ + _XBF_PAGE_LOCKED = (1 << 22), } xfs_buf_flags_t; typedef enum { From owner-xfs@oss.sgi.com Thu May 15 09:16:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 09:16:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FGGZAn012887 for ; Thu, 15 May 2008 09:16:36 -0700 X-ASG-Debug-ID: 1210868242-157501130000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1D0E61185DDA for ; Thu, 15 May 2008 09:17:22 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id td0SO9jSQVxbOh9R for ; Thu, 15 May 2008 09: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 sandeen.net (Postfix) with ESMTP id 1C9E0AC08E4; Thu, 15 May 2008 11:17:22 -0500 (CDT) Message-ID: <482C6211.4050506@sandeen.net> Date: Thu, 15 May 2008 11:17:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] fix memory corruption with small buffer reads Subject: Re: [PATCH] fix memory corruption with small buffer reads References: <20080515142306.GA29842@lst.de> In-Reply-To: <20080515142306.GA29842@lst.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: 1210868244 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.1, rules version 3.1.50442 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15918 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Christoph Hellwig wrote: > When we have multiple buffers in a single page for a blocksize == pagesize > filesystem we might overwrite the page contents if two callers hit it > shortly after each other. To prevent that we need to keep the page > locked until I/O is completed and the page marked uptodate. > > Thanks to Eric Sandeen for triaging this bug and finding a reproducible > testcase and Dave Chinner for additional advice. > > This should fix kernel.org bz #10421. > > > Signed-off-by: Christoph Hellwig Thanks for the fix, Christoph. This has passed many, many iterations of my original testcase, which almost always failed first-time on stock 2.6.25. Tested-by: Eric Sandeen > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 11:45:10.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 15:26:09.000000000 +0200 > @@ -386,6 +386,8 @@ _xfs_buf_lookup_pages( > if (unlikely(page == NULL)) { > if (flags & XBF_READ_AHEAD) { > bp->b_page_count = i; > + for (i = 0; i < bp->b_page_count; i++) > + unlock_page(bp->b_pages[i]); > return -ENOMEM; > } > > @@ -415,17 +417,24 @@ _xfs_buf_lookup_pages( > ASSERT(!PagePrivate(page)); > if (!PageUptodate(page)) { > page_count--; > - if (blocksize < PAGE_CACHE_SIZE && !PagePrivate(page)) { > + if (blocksize >= PAGE_CACHE_SIZE) { > + if (flags & XBF_READ) > + bp->b_flags |= _XBF_PAGE_LOCKED; > + } else if (!PagePrivate(page)) { > if (test_page_region(page, offset, nbytes)) > page_count++; > } > } > > - unlock_page(page); > bp->b_pages[i] = page; > offset = 0; > } > > + if (!(bp->b_flags & _XBF_PAGE_LOCKED)) { > + for (i = 0; i < bp->b_page_count; i++) > + unlock_page(bp->b_pages[i]); > + } > + > if (page_count == bp->b_page_count) > bp->b_flags |= XBF_DONE; > > @@ -746,6 +755,7 @@ xfs_buf_associate_memory( > bp->b_count_desired = len; > bp->b_buffer_length = buflen; > bp->b_flags |= XBF_MAPPED; > + bp->b_flags &= ~_XBF_PAGE_LOCKED; > > return 0; > } > @@ -1093,8 +1103,10 @@ _xfs_buf_ioend( > xfs_buf_t *bp, > int schedule) > { > - if (atomic_dec_and_test(&bp->b_io_remaining) == 1) > + if (atomic_dec_and_test(&bp->b_io_remaining) == 1) { > + bp->b_flags &= ~_XBF_PAGE_LOCKED; > xfs_buf_ioend(bp, schedule); > + } > } > > STATIC void > @@ -1125,6 +1137,9 @@ xfs_buf_bio_end_io( > > if (--bvec >= bio->bi_io_vec) > prefetchw(&bvec->bv_page->flags); > + > + if (bp->b_flags & _XBF_PAGE_LOCKED) > + unlock_page(page); > } while (bvec >= bio->bi_io_vec); > > _xfs_buf_ioend(bp, 1); > @@ -1163,7 +1178,8 @@ _xfs_buf_ioapply( > * filesystem block size is not smaller than the page size. > */ > if ((bp->b_buffer_length < PAGE_CACHE_SIZE) && > - (bp->b_flags & XBF_READ) && > + ((bp->b_flags & (XBF_READ|_XBF_PAGE_LOCKED)) == > + (XBF_READ|_XBF_PAGE_LOCKED)) && > (blocksize >= PAGE_CACHE_SIZE)) { > bio = bio_alloc(GFP_NOIO, 1); > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 11:45:10.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 15:26:09.000000000 +0200 > @@ -66,6 +66,25 @@ typedef enum { > _XBF_PAGES = (1 << 18), /* backed by refcounted pages */ > _XBF_RUN_QUEUES = (1 << 19),/* run block device task queue */ > _XBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ > + > + /* > + * Special flag for supporting metadata blocks smaller than a FSB. > + * > + * In this case we can have multiple xfs_buf_t on a single page and > + * need to lock out concurrent xfs_buf_t readers as they only > + * serialise access to the buffer. > + * > + * If the FSB size >= PAGE_CACHE_SIZE case, we have no serialisation > + * between reads of the page. Hence we can have one thread read the > + * page and modify it, but then race with another thread that thinks > + * the page is not up-to-date and hence reads it again. > + * > + * The result is that the first modifcation to the page is lost. > + * This sort of AGF/AGI reading race can happen when unlinking inodes > + * that require truncation and results in the AGI unlinked list > + * modifications being lost. > + */ > + _XBF_PAGE_LOCKED = (1 << 22), > } xfs_buf_flags_t; > > typedef enum { > > From owner-xfs@oss.sgi.com Thu May 15 09:17:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 09:17:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FGHIVr012947 for ; Thu, 15 May 2008 09:17:19 -0700 X-ASG-Debug-ID: 1210868285-491400b90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AB5CB1723B8 for ; Thu, 15 May 2008 09:18:06 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id IXm5aHdu17OKzuEy for ; Thu, 15 May 2008 09:18:06 -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 sandeen.net (Postfix) with ESMTP id A1A21AC08E4; Thu, 15 May 2008 11:18:05 -0500 (CDT) Message-ID: <482C623D.7070208@sandeen.net> Date: Thu, 15 May 2008 11:18:05 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] fix memory corruption with small buffer reads Subject: Re: [PATCH] fix memory corruption with small buffer reads References: <20080515142306.GA29842@lst.de> In-Reply-To: <20080515142306.GA29842@lst.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: 1210868286 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.1, rules version 3.1.50443 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15919 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Christoph Hellwig wrote: > When we have multiple buffers in a single page for a blocksize == pagesize > filesystem we might overwrite the page contents if two callers hit it > shortly after each other. To prevent that we need to keep the page > locked until I/O is completed and the page marked uptodate. > > Thanks to Eric Sandeen for triaging this bug and finding a reproducible > testcase and Dave Chinner for additional advice. > > This should fix kernel.org bz #10421. Oh, this should go to -stable too, when everyone is happy with it... Thanks, -Eric > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 11:45:10.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.c 2008-05-15 15:26:09.000000000 +0200 > @@ -386,6 +386,8 @@ _xfs_buf_lookup_pages( > if (unlikely(page == NULL)) { > if (flags & XBF_READ_AHEAD) { > bp->b_page_count = i; > + for (i = 0; i < bp->b_page_count; i++) > + unlock_page(bp->b_pages[i]); > return -ENOMEM; > } > > @@ -415,17 +417,24 @@ _xfs_buf_lookup_pages( > ASSERT(!PagePrivate(page)); > if (!PageUptodate(page)) { > page_count--; > - if (blocksize < PAGE_CACHE_SIZE && !PagePrivate(page)) { > + if (blocksize >= PAGE_CACHE_SIZE) { > + if (flags & XBF_READ) > + bp->b_flags |= _XBF_PAGE_LOCKED; > + } else if (!PagePrivate(page)) { > if (test_page_region(page, offset, nbytes)) > page_count++; > } > } > > - unlock_page(page); > bp->b_pages[i] = page; > offset = 0; > } > > + if (!(bp->b_flags & _XBF_PAGE_LOCKED)) { > + for (i = 0; i < bp->b_page_count; i++) > + unlock_page(bp->b_pages[i]); > + } > + > if (page_count == bp->b_page_count) > bp->b_flags |= XBF_DONE; > > @@ -746,6 +755,7 @@ xfs_buf_associate_memory( > bp->b_count_desired = len; > bp->b_buffer_length = buflen; > bp->b_flags |= XBF_MAPPED; > + bp->b_flags &= ~_XBF_PAGE_LOCKED; > > return 0; > } > @@ -1093,8 +1103,10 @@ _xfs_buf_ioend( > xfs_buf_t *bp, > int schedule) > { > - if (atomic_dec_and_test(&bp->b_io_remaining) == 1) > + if (atomic_dec_and_test(&bp->b_io_remaining) == 1) { > + bp->b_flags &= ~_XBF_PAGE_LOCKED; > xfs_buf_ioend(bp, schedule); > + } > } > > STATIC void > @@ -1125,6 +1137,9 @@ xfs_buf_bio_end_io( > > if (--bvec >= bio->bi_io_vec) > prefetchw(&bvec->bv_page->flags); > + > + if (bp->b_flags & _XBF_PAGE_LOCKED) > + unlock_page(page); > } while (bvec >= bio->bi_io_vec); > > _xfs_buf_ioend(bp, 1); > @@ -1163,7 +1178,8 @@ _xfs_buf_ioapply( > * filesystem block size is not smaller than the page size. > */ > if ((bp->b_buffer_length < PAGE_CACHE_SIZE) && > - (bp->b_flags & XBF_READ) && > + ((bp->b_flags & (XBF_READ|_XBF_PAGE_LOCKED)) == > + (XBF_READ|_XBF_PAGE_LOCKED)) && > (blocksize >= PAGE_CACHE_SIZE)) { > bio = bio_alloc(GFP_NOIO, 1); > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 11:45:10.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_buf.h 2008-05-15 15:26:09.000000000 +0200 > @@ -66,6 +66,25 @@ typedef enum { > _XBF_PAGES = (1 << 18), /* backed by refcounted pages */ > _XBF_RUN_QUEUES = (1 << 19),/* run block device task queue */ > _XBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ > + > + /* > + * Special flag for supporting metadata blocks smaller than a FSB. > + * > + * In this case we can have multiple xfs_buf_t on a single page and > + * need to lock out concurrent xfs_buf_t readers as they only > + * serialise access to the buffer. > + * > + * If the FSB size >= PAGE_CACHE_SIZE case, we have no serialisation > + * between reads of the page. Hence we can have one thread read the > + * page and modify it, but then race with another thread that thinks > + * the page is not up-to-date and hence reads it again. > + * > + * The result is that the first modifcation to the page is lost. > + * This sort of AGF/AGI reading race can happen when unlinking inodes > + * that require truncation and results in the AGI unlinked list > + * modifications being lost. > + */ > + _XBF_PAGE_LOCKED = (1 << 22), > } xfs_buf_flags_t; > > typedef enum { > > From owner-xfs@oss.sgi.com Thu May 15 10:04:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 10:04:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FH4VdE017149 for ; Thu, 15 May 2008 10:04:33 -0700 X-ASG-Debug-ID: 1210871113-4e6500ef0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7D9AF11866F3 for ; Thu, 15 May 2008 10:05:13 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id UIVn8C8u6TQpryKT for ; Thu, 15 May 2008 10:05:13 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4FH56F3009109 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 15 May 2008 19:05:06 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4FH56US009106 for xfs@oss.sgi.com; Thu, 15 May 2008 19:05:06 +0200 Date: Thu, 15 May 2008 19:05:05 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] fix reiserfs case in 032 Subject: [PATCH] fix reiserfs case in 032 Message-ID: <20080515170505.GA8949@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210871114 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0693 1.0000 -1.5798 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.58 X-Barracuda-Spam-Status: No, SCORE=-1.58 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.1, rules version 3.1.50446 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15920 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs mkfs.reiserfs refuses to create a filesystem on full devices without partitions unless it's given -f in addition to the already required Y input to confirm the fs creation, so give the argument to it. While we're at it also write the full command line used to create the filesystem into the log to ease future debugging. Signed-off-by: Christoph Hellwig Index: xfstests/032 =================================================================== RCS file: /cvs/xfs-cmds/xfstests/032,v retrieving revision 1.13 diff -u -p -r1.13 032 --- xfstests/032 9 Nov 2005 02:49:08 -0000 1.13 +++ xfstests/032 15 May 2008 17:02:08 -0000 @@ -43,7 +43,7 @@ do [ $fs = vfat ] && postargs=2000 # these folks prompt before writing [ $fs = jfs ] && preop="echo Y |" - [ $fs = reiserfs ] && preop="echo y |" + [ $fs = reiserfs ] && preop="echo y |" && preargs="-f" # cramfs mkfs requires a directory argument [ $fs = cramfs ] && preargs=/proc/fs/xfs @@ -52,7 +52,7 @@ do # create a filesystem of this type echo "=== Creating $fs filesystem..." >>$seq.full - echo " ( mkfs -t $fs $SCRATCH_DEV )" >>$seq.full + echo " ( $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs )" >>$seq.full eval $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs >>$seq.full 2>&1 # next, ensure we don't overwrite it From owner-xfs@oss.sgi.com Thu May 15 10:15:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 10:15:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FHFcFR018438 for ; Thu, 15 May 2008 10:15:40 -0700 X-ASG-Debug-ID: 1210871785-491303380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4FFD61730A5 for ; Thu, 15 May 2008 10:16:26 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id zf2In3NbV23Zkwv4 for ; Thu, 15 May 2008 10:16:26 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4FHGJF3010177 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 15 May 2008 19:16:19 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4FHGJ8B010175 for xfs@oss.sgi.com; Thu, 15 May 2008 19:16:19 +0200 Date: Thu, 15 May 2008 19:16:19 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH, RFC] re-enable test 010 Subject: [PATCH, RFC] re-enable test 010 Message-ID: <20080515171619.GA10094@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210871787 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0022 1.0000 -2.0065 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.50445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15921 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs The dbtest program required for testcase 010 hasn't been build for ages due to various crufty autofoo magic. The patch below just builds it unconditionally for Linux as all distros should have the ndbm compat bits for libgdbm in the same place. Signed-off-by: Christoph Hellwig Index: xfstests/src/Makefile =================================================================== RCS file: /cvs/xfs-cmds/xfstests/src/Makefile,v retrieving revision 1.43 diff -u -p -r1.43 Makefile --- xfstests/src/Makefile 3 Oct 2007 16:23:57 -0000 1.43 +++ xfstests/src/Makefile 15 May 2008 17:13:50 -0000 @@ -15,7 +15,7 @@ TARGETS = dirstress fill fill2 getpagesi LINUX_TARGETS = loggen xfsctl bstat t_mtab getdevicesize \ preallo_rw_pattern_reader preallo_rw_pattern_writer ftrunc trunc \ fs_perms testx looptest locktest unwritten_mmap \ - bulkstat_unlink_test bulkstat_unlink_test_modified + bulkstat_unlink_test bulkstat_unlink_test_modified dbtest t_immutable IRIX_TARGETS = open_unlink @@ -27,14 +27,6 @@ ifeq ($(PKG_PLATFORM),irix) TARGETS += $(IRIX_TARGETS) endif -ifeq ($(HAVE_DB), true) -TARGETS += dbtest -endif - -ifeq ($(PKG_PLATFORM),linux) -TARGETS += t_immutable -endif - CFILES = $(TARGETS:=.c) LDIRT = $(TARGETS) @@ -50,7 +42,7 @@ truncfile: truncfile.o $(LIBTEST) $(LINKTEST) $(LIBTEST) $(LDLIBS) dbtest: dbtest.o $(LIBTEST) - $(LINKTEST) $(LIBTEST) $(LIBGDBM) $(LDLIBS) + $(LINKTEST) $(LIBTEST) -lgdbm_compat $(LDLIBS) nametest: nametest.o $(LIBTEST) $(LINKTEST) $(LIBTEST) $(LDLIBS) Index: xfstests/src/dbtest.c =================================================================== RCS file: /cvs/xfs-cmds/xfstests/src/dbtest.c,v retrieving revision 1.6 diff -u -p -r1.6 dbtest.c --- xfstests/src/dbtest.c 9 Nov 2005 02:50:19 -0000 1.6 +++ xfstests/src/dbtest.c 15 May 2008 17:13:51 -0000 @@ -17,20 +17,7 @@ */ #include "global.h" - -#ifdef HAVE_GDBM_NDBM_H -#include -#else -#ifdef HAVE_GDBM_H -#include -#else -#ifdef HAVE_NDBM_H -#include -#else -bozo! -#endif -#endif -#endif +#include /* #define WorkDir "/xfs" */ From owner-xfs@oss.sgi.com Thu May 15 10:38:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 10:38:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FHcZEn020084 for ; Thu, 15 May 2008 10:38:36 -0700 X-ASG-Debug-ID: 1210873160-5bb401210000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5F86716C797C for ; Thu, 15 May 2008 10:39:20 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id SURNLfDpwpSp2GhA for ; Thu, 15 May 2008 10:39:20 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4FHdDF3011691 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 15 May 2008 19:39:13 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4FHdDiA011689 for xfs@oss.sgi.com; Thu, 15 May 2008 19:39:13 +0200 Date: Thu, 15 May 2008 19:39:13 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] scale down 074 on lower end machines Subject: [PATCH] scale down 074 on lower end machines Message-ID: <20080515173913.GA11494@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210873162 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0669 1.0000 -1.5945 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.59 X-Barracuda-Spam-Status: No, SCORE=-1.59 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.1, rules version 3.1.50447 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15922 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs 074 takes ages to complete on my kvm test VM, but scaling it back to the level used on IRIX makes it complete in slightly under 10 minutes. I'm not sure if checking for UP vs SMP is the right way to go into slow mode, but I couldn't think of anything better. Signed-off-by: Christoph Hellwig Index: xfstests/074 =================================================================== RCS file: /cvs/xfs-cmds/xfstests/074,v retrieving revision 1.7 diff -u -p -r1.7 074 --- xfstests/074 9 Nov 2005 02:49:08 -0000 1.7 +++ xfstests/074 15 May 2008 17:37:03 -0000 @@ -120,10 +120,17 @@ if [ $HOSTOS == "IRIX" ]; then param_type="IRIX nondebug" fi elif [ $HOSTOS == "Linux" ]; then - numloops=10 - numfiles=5 - numchildren=3 - param_type="Linux" + if uname -a | grep -q SMP; then + numloops=10 + numfiles=5 + numchildren=3 + param_type="Linux SMP" + else + numloops=2 + numfiles=3 + numchildren=3 + param_type="Linux UP" + fi else numloops=1 numfiles=1 From owner-xfs@oss.sgi.com Thu May 15 10:45:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 10:45:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FHjCeV020713 for ; Thu, 15 May 2008 10:45:15 -0700 X-ASG-Debug-ID: 1210873556-1d4002660000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wx-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BAA47173643 for ; Thu, 15 May 2008 10:45:56 -0700 (PDT) Received: from wx-out-0506.google.com (wx-out-0506.google.com [66.249.82.227]) by cuda.sgi.com with ESMTP id Pam4tGQ9CZSB2Mkf for ; Thu, 15 May 2008 10:45:56 -0700 (PDT) Received: by wx-out-0506.google.com with SMTP id h30so422074wxd.32 for ; Thu, 15 May 2008 10:45:56 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=FP7+l80XQHY5FBy226G52fg0CL+aTASsvjHZSzg32XI=; b=TCrw38tuhp9KlbH3Pk0JoEOtQ/UAJdeT4TQBnF+QPHjNi1AAU9zyOXdjfSdtDJyqPb4wGshxKq6arlHk3ZjdpzHrVb3MPobiVQVhu+2GK31XpfX3i59/5OnipIV3gbyw2+evgkKzPJd1myzIorw50JWRqaR0EitAO0/Mx3ew3WY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=PpMNs5u1D/j1Ex6X59XQjJfhGCwrNoJqwz65kU8lu38ctohCAmnCtsiG1qeUClL8GoplCX4BLf7RRAn6IpKu7vsq6xIns96OQAml0T5UsPh1FVUWROua5xCqTUSfHHBX86WGqdMKO1wmtyA6dksTz1aR7zuiJ8k6wMVijnDffIY= Received: by 10.70.50.12 with SMTP id x12mr3163088wxx.73.1210873555914; Thu, 15 May 2008 10:45:55 -0700 (PDT) Received: by 10.70.111.1 with HTTP; Thu, 15 May 2008 10:45:55 -0700 (PDT) Message-ID: Date: Thu, 15 May 2008 21:45:55 +0400 From: "Alexander Beregalov" To: "David Chinner" X-ASG-Orig-Subj: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem Subject: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem Cc: "Kamalesh Babulal" , pvp-lsts@fs.ru.acad.bg, kernel-testers@vger.kernel.org, "kernel list" , "Ingo Molnar" , peterz@infradead.org, xfs@oss.sgi.com In-Reply-To: <20080511231002.GN103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <4825DF71.1030209@linux.vnet.ibm.com> <48266C77.3040102@linux.vnet.ibm.com> <20080511231002.GN103491721@sgi.com> X-Barracuda-Connect: wx-out-0506.google.com[66.249.82.227] X-Barracuda-Start-Time: 1210873560 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.1, rules version 3.1.50447 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15923 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: a.beregalov@gmail.com Precedence: bulk X-list: xfs 2008/5/12 David Chinner : > On Sun, May 11, 2008 at 09:18:07AM +0530, Kamalesh Babulal wrote: >> Kamalesh Babulal wrote: >> > Adding the cc to kernel-list, Ingo Molnar and Peter Zijlstra >> > >> > Alexander Beregalov wrote: >> >> [ INFO: possible circular locking dependency detected ] >> >> 2.6.26-rc1-00279-g28a4acb #13 >> >> ------------------------------------------------------- >> >> nfsd/3087 is trying to acquire lock: >> >> (iprune_mutex){--..}, at: [] shrink_icache_memory+0x38/0x19b >> >> >> >> but task is already holding lock: >> >> (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0xa2/0xd6 >> >> >> >> which lock already depends on the new lock. >> >> >> >> >> >> the existing dependency chain (in reverse order) is: >> >> >> >> -> #1 (&(&ip->i_iolock)->mr_lock){----}: >> >> [] __lock_acquire+0xa0c/0xbc6 >> >> [] lock_acquire+0x6a/0x86 >> >> [] down_write_nested+0x33/0x6a >> >> [] xfs_ilock+0x7b/0xd6 >> >> [] xfs_ireclaim+0x1d/0x59 >> >> [] xfs_finish_reclaim+0x173/0x195 >> >> [] xfs_reclaim+0xb3/0x138 >> >> [] xfs_fs_clear_inode+0x55/0x8e >> >> [] clear_inode+0x83/0xd2 >> >> [] dispose_list+0x3c/0xc1 >> >> [] shrink_icache_memory+0x173/0x19b >> >> [] shrink_slab+0xda/0x14e >> >> [] try_to_free_pages+0x1e4/0x2a2 >> >> [] __alloc_pages_internal+0x23a/0x39d >> >> [] __alloc_pages+0xa/0xc >> >> [] __do_page_cache_readahead+0xaa/0x16a >> >> [] force_page_cache_readahead+0x4a/0x74 >> >> [] sys_madvise+0x308/0x400 >> >> [] sysenter_past_esp+0x6a/0xb1 >> >> [] 0xffffffff >> >> >> >> -> #0 (iprune_mutex){--..}: >> >> [] __lock_acquire+0x929/0xbc6 >> >> [] lock_acquire+0x6a/0x86 >> >> [] mutex_lock_nested+0xb4/0x226 >> >> [] shrink_icache_memory+0x38/0x19b >> >> [] shrink_slab+0xda/0x14e >> >> [] try_to_free_pages+0x1e4/0x2a2 >> >> [] __alloc_pages_internal+0x23a/0x39d >> >> [] __alloc_pages+0xa/0xc >> >> [] __do_page_cache_readahead+0xaa/0x16a >> >> [] ondemand_readahead+0x119/0x127 >> >> [] page_cache_async_readahead+0x52/0x5d >> >> [] generic_file_splice_read+0x290/0x4a8 >> >> [] xfs_splice_read+0x4b/0x78 >> >> [] xfs_file_splice_read+0x24/0x29 >> >> [] do_splice_to+0x45/0x63 >> >> [] splice_direct_to_actor+0xab/0x150 >> >> [] nfsd_vfs_read+0x1ed/0x2d0 >> >> [] nfsd_read+0x82/0x99 >> >> [] nfsd3_proc_read+0xdf/0x12a >> >> [] nfsd_dispatch+0xcf/0x19e >> >> [] svc_process+0x3b3/0x68b >> >> [] nfsd+0x168/0x26b >> >> [] kernel_thread_helper+0x7/0x10 >> >> [] 0xffffffff > > Oh, yeah, that. Direct inode reclaim through memory pressure. > > Effectively memory reclaim inverts locking order w.r.t. iprune_mutex > when it recurses into the filesystem. False positive - can never > cause a deadlock on XFS. Can't be solved from the XFS side of things > without effectively turning off lockdep checking for xfs inode > locking. Yes, it is not a deadlock, but machine hangs for few seconds. It still happens about once a day for me. Every kernel report looks similar to the above. I cannot reproduce it quickly, so bisect is not possible. > > The fix is needed to lockdep via iprune_mutex annotations here.... > >> May 9 02:16:46 nomad64 kernel: [42951853.992965] the existing dependency chain (in reverse order) is: >> May 9 02:16:46 nomad64 kernel: [42951853.992967] >> May 9 02:16:46 nomad64 kernel: [42951853.992968] -> #1 (&(&ip->i_iolock)->mr_lock){----}: >> May 9 02:16:46 nomad64 kernel: [42951853.992974] [] __lock_acquire+0xf92/0x1080 >> May 9 02:16:46 nomad64 kernel: [42951853.992989] [] lock_acquire+0xa2/0xd0 >> May 9 02:16:46 nomad64 kernel: [42951853.993002] [] down_write_nested+0x46/0x80 >> May 9 02:16:46 nomad64 kernel: [42951853.993018] [] xfs_ilock+0x99/0xa0 >> May 9 02:16:46 nomad64 kernel: [42951853.993034] [] xfs_free_eofblocks+0x1c7/0x250 >> May 9 02:16:46 nomad64 kernel: [42951853.993049] [] xfs_release+0x186/0x1d0 >> May 9 02:16:46 nomad64 kernel: [42951853.993062] [] xfs_file_release+0x10/0x20 >> May 9 02:16:46 nomad64 kernel: [42951853.993076] [] __fput+0xcc/0x1c0 >> May 9 02:16:46 nomad64 kernel: [42951853.993091] [] fput+0x16/0x20 >> May 9 02:16:46 nomad64 kernel: [42951853.993105] [] remove_vma+0x4a/0x80 >> May 9 02:16:46 nomad64 kernel: [42951853.993120] [] do_munmap+0x281/0x2e0 >> May 9 02:16:46 nomad64 kernel: [42951853.993134] [] sys_munmap+0x4b/0x70 >> May 9 02:16:46 nomad64 kernel: [42951853.993148] [] system_call_after_swapgs+0x7b/0x80 >> May 9 02:16:46 nomad64 kernel: [42951853.993161] [] 0xffffffffffffffff > > hmmmm. Sounds like: > > fd = open() > addr = mmap(fd) > close(fd) > ..... > munmap(addr); > > But yes, XFS takes locks in ->release which means..... > >> May 9 02:16:46 nomad64 kernel: [42951853.993293] Call Trace: >> May 9 02:16:46 nomad64 kernel: [42951853.993297] [] print_circular_bug_tail+0x83/0x90 >> May 9 02:16:46 nomad64 kernel: [42951853.993302] [] __lock_acquire+0xdb0/0x1080 >> May 9 02:16:46 nomad64 kernel: [42951853.993306] [] ? do_page_fault+0xdd/0x890 >> May 9 02:16:46 nomad64 kernel: [42951853.993310] [] lock_acquire+0xa2/0xd0 >> May 9 02:16:46 nomad64 kernel: [42951853.993313] [] ? do_page_fault+0xdd/0x890 >> May 9 02:16:46 nomad64 kernel: [42951853.993317] [] down_read+0x3b/0x70 >> May 9 02:16:46 nomad64 kernel: [42951853.993320] [] do_page_fault+0xdd/0x890 >> May 9 02:16:46 nomad64 kernel: [42951853.993324] [] error_exit+0x0/0xa9 >> May 9 02:16:46 nomad64 kernel: [42951853.993328] [] ? file_read_actor+0x46/0x1b0 >> May 9 02:16:46 nomad64 kernel: [42951853.993331] [] ? _read_unlock_irq+0x36/0x60 >> May 9 02:16:46 nomad64 kernel: [42951853.993335] [] ? generic_file_aio_read+0x2cc/0x5d0 >> May 9 02:16:46 nomad64 kernel: [42951853.993339] [] ? get_lock_stats+0x19/0x70 >> May 9 02:16:46 nomad64 kernel: [42951853.993343] [] ? xfs_read+0x139/0x220 >> May 9 02:16:46 nomad64 kernel: [42951853.993347] [] ? xfs_file_aio_read+0x4d/0x60 >> May 9 02:16:46 nomad64 kernel: [42951853.993350] [] ? do_sync_read+0xf1/0x130 >> May 9 02:16:46 nomad64 kernel: [42951853.993354] [] ? autoremove_wake_function+0x0/0x40 >> May 9 02:16:46 nomad64 kernel: [42951853.993358] [] ? trace_hardirqs_on+0xda/0x170 >> May 9 02:16:46 nomad64 kernel: [42951853.993361] [] ? __rcu_read_unlock+0xb5/0xc0 >> May 9 02:16:46 nomad64 kernel: [42951853.993365] [] ? trace_hardirqs_on+0xda/0x170 >> May 9 02:16:46 nomad64 kernel: [42951853.993369] [] ? security_file_permission+0x11/0x20 >> May 9 02:16:46 nomad64 kernel: [42951853.993374] [] ? vfs_read+0xc4/0x160 >> May 9 02:16:46 nomad64 kernel: [42951853.993377] [] ? sys_read+0x50/0x90 >> May 9 02:16:46 nomad64 kernel: [42951853.993380] [] ? system_call_after_swapgs+0x7b/0x80 > > Oh, joy - a page fault during a read() call triggers lock order > inversions on the mmap->sem. I don't think this can deadlock > (can't be page faulting in a vma that is being torn down), but > it's clear from the last trace that the VM has a mmap->sem > inversion problem with ->release vs ->read and page faults... > > Basically what we are seeing here in both cases is that the VM is > calling inode ->release or ->clear_inode methods with different high > level locks held. If the filesystem has to take the same locks in > these methods as it does in, say, ->read (like XFS does), then we > are guaranteed to get reports like this. AFAICT there's nothing we > can do from the filesystem perspective to prevent false positives like > this from being reported.... > > Cheers, > > Dave. > -- > Dave Chinner > Principal Engineer > SGI Australian Software Group > -- > To unsubscribe from this list: send the line "unsubscribe kernel-testers" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > From owner-xfs@oss.sgi.com Thu May 15 14:41:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 14:41:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4FLfBqI010073 for ; Thu, 15 May 2008 14:41:14 -0700 X-ASG-Debug-ID: 1210887718-69a701e40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8D12DB6A05E for ; Thu, 15 May 2008 14:41:58 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id wFvBHUFbjuisF2nD for ; Thu, 15 May 2008 14:41: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 sandeen.net (Postfix) with ESMTP id 582D7AC08E4; Thu, 15 May 2008 16:41:58 -0500 (CDT) Message-ID: <482CAE26.8080707@sandeen.net> Date: Thu, 15 May 2008 16:41:58 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Marco Berizzi CC: David Chinner , linux-kernel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) References: <20080505231754.GL155679365@sgi.com> <20080506085632.GT155679365@sgi.com> <482062F5.9010402@sandeen.net> In-Reply-To: <482062F5.9010402@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: 1210887719 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.1, rules version 3.1.50464 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15924 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > Marco Berizzi wrote: >> David Chinner wrote: >> >>> Hmmmmm - interesting. Both the reports of this problem are from >>> machines running as squid proxies. Are you using AUFS for the cache? >> no, I'm using cache_dir ufs with cache_replacement_policy heap LFUDA Christoph recently sent a patch to the xfs list which resolves my testcase for this problem, FYI. [PATCH] fix memory corruption with small buffer reads -Eric From owner-xfs@oss.sgi.com Thu May 15 15:14:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 15:14:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4FMEXvQ012900 for ; Thu, 15 May 2008 15:14:35 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA15110; Fri, 16 May 2008 08:15:15 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4FMFCsT169284205; Fri, 16 May 2008 08:15:13 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4FMFAKD165994283; Fri, 16 May 2008 08:15:10 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 08:15:10 +1000 From: David Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] scale down 074 on lower end machines Message-ID: <20080515221510.GT155679365@sgi.com> References: <20080515173913.GA11494@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515173913.GA11494@lst.de> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15925 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 07:39:13PM +0200, Christoph Hellwig wrote: > 074 takes ages to complete on my kvm test VM, but scaling it back to the > level used on IRIX makes it complete in slightly under 10 minutes. > > I'm not sure if checking for UP vs SMP is the right way to go into slow > mode, but I couldn't think of anything better. Seems fair - I was wondering exactly the same thing yesterday as this is another test that takes >15min to run on UML. I didn't think of the UP vs SMP trigger, but it seems like a good way to go given all of the real QA boxes we have are SMP. I'll give it a run and see how it goes. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 15:27:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 15:28:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4FMRl3r013983 for ; Thu, 15 May 2008 15:27:50 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA15358; Fri, 16 May 2008 08:28:08 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4FMS0sT169399734; Fri, 16 May 2008 08:28:04 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4FMRriO169478356; Fri, 16 May 2008 08:27:53 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 08:27:53 +1000 From: David Chinner To: Alexander Beregalov Cc: David Chinner , Kamalesh Babulal , pvp-lsts@fs.ru.acad.bg, kernel-testers@vger.kernel.org, kernel list , Ingo Molnar , peterz@infradead.org, xfs@oss.sgi.com Subject: Re: 2.6.26-rc1: possible circular locking dependency with xfs filesystem Message-ID: <20080515222753.GV155679365@sgi.com> References: <4825DF71.1030209@linux.vnet.ibm.com> <48266C77.3040102@linux.vnet.ibm.com> <20080511231002.GN103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15926 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 15, 2008 at 09:45:55PM +0400, Alexander Beregalov wrote: > 2008/5/12 David Chinner : > > On Sun, May 11, 2008 at 09:18:07AM +0530, Kamalesh Babulal wrote: > >> Kamalesh Babulal wrote: > >> > Adding the cc to kernel-list, Ingo Molnar and Peter Zijlstra > >> > > >> > Alexander Beregalov wrote: > >> >> [ INFO: possible circular locking dependency detected ] > >> >> 2.6.26-rc1-00279-g28a4acb #13 > >> >> ------------------------------------------------------- > >> >> nfsd/3087 is trying to acquire lock: > >> >> (iprune_mutex){--..}, at: [] shrink_icache_memory+0x38/0x19b > >> >> > >> >> but task is already holding lock: > >> >> (&(&ip->i_iolock)->mr_lock){----}, at: [] xfs_ilock+0xa2/0xd6 [snip] > > Oh, yeah, that. Direct inode reclaim through memory pressure. > > > > Effectively memory reclaim inverts locking order w.r.t. iprune_mutex > > when it recurses into the filesystem. False positive - can never > > cause a deadlock on XFS. Can't be solved from the XFS side of things > > without effectively turning off lockdep checking for xfs inode > > locking. > Yes, it is not a deadlock, but machine hangs for few seconds. > It still happens about once a day for me. Every kernel report looks > similar to the above. That hang is just memory reclaim running, I think you'll find. It can take some time for reclaim to find pages to use, and meanwhile everything in the machine will back up behind it.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 16:26:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 16:26:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4FNQEbb022517 for ; Thu, 15 May 2008 16:26:16 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA16674; Fri, 16 May 2008 09:26:55 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4FNQrsT169449089; Fri, 16 May 2008 09:26:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4FNQpdo161667697; Fri, 16 May 2008 09:26:51 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 09:26:51 +1000 From: David Chinner To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: [PATCH] scale down 074 on lower end machines Message-ID: <20080515232651.GA155679365@sgi.com> References: <20080515173913.GA11494@lst.de> <20080515221510.GT155679365@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515221510.GT155679365@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15927 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 08:15:10AM +1000, David Chinner wrote: > On Thu, May 15, 2008 at 07:39:13PM +0200, Christoph Hellwig wrote: > > 074 takes ages to complete on my kvm test VM, but scaling it back to the > > level used on IRIX makes it complete in slightly under 10 minutes. > > > > I'm not sure if checking for UP vs SMP is the right way to go into slow > > mode, but I couldn't think of anything better. > > Seems fair - I was wondering exactly the same thing yesterday > as this is another test that takes >15min to run on UML. I didn't > think of the UP vs SMP trigger, but it seems like a good way to > go given all of the real QA boxes we have are SMP. > > I'll give it a run and see how it goes. FWIW - runtime on UML has dropped from 918s to 88s. Very reasonable now, and makes the maximum single test runtime in UML about 330s.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 17:30:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 17:30:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G0TxXq026889 for ; Thu, 15 May 2008 17:30:01 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA17853; Fri, 16 May 2008 10:30:27 +1000 Date: Fri, 16 May 2008 10:30:37 +1000 To: "Christoph Hellwig" , "Anton Altaparmakov" Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com, linux-fsdevel Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> <20080515141121.GA14198@infradead.org> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080515141121.GA14198@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15928 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 16 May 2008 00:11:21 +1000, Christoph Hellwig wrote: > On Thu, May 15, 2008 at 02:43:44PM +0100, Anton Altaparmakov wrote: >> Yes, and you can get the performance back if you allow negative >> dentries to >> be created. You just have to make sure that every time a directory >> entry >> is created in directory X, all negative dentries which are children of >> directory X are thrown away. > > We might even be able to optimize this a little by calling d_compare on > each alias to see if it hashes down to the same one down in the fs. So, I gather from this comment is that the CI FS implementation overrides d_compare but not d_hash, and the CI purge function will behave differently if d_compare is overridden or not? If overridden, use it as per your suggestion and if not (due to oversight or unexpected problems), purge all negative children? Barry. From owner-xfs@oss.sgi.com Thu May 15 18:27:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 18:28:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G1RgN7030732 for ; Thu, 15 May 2008 18:27:45 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA18649; Fri, 16 May 2008 11:28:25 +1000 Message-ID: <482CE39F.9050404@sgi.com> Date: Fri, 16 May 2008 11:30:07 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15929 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs There's a new check added to dentry_open(): if (!mnt) { printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__); dump_stack(); return ERR_PTR(-EINVAL); } We need to pass a mountpoint in the call to dentry_open() in xfs_dm_rdwr() to avoid this code. --- fs/xfs/dmapi/xfs_dm.c_1.72 2008-05-15 13:23:41.000000000 +1000 +++ fs/xfs/dmapi/xfs_dm.c 2008-05-15 17:51:41.000000000 +1000 @@ -52,6 +52,8 @@ #include #include "xfs_dm.h" +#include + #define MAXNAMLEN MAXNAMELEN #define MIN_DIO_SIZE(mp) ((mp)->m_sb.sb_sectsize) @@ -1121,7 +1123,7 @@ xfs_dm_rdwr( return ENOMEM; } - file = dentry_open(dentry, NULL, oflags); + file = dentry_open(dentry, mntget(ip->i_mount->m_vfsmount), oflags); if (IS_ERR(file)) { return -PTR_ERR(file); } --- fs/xfs/linux-2.6/xfs_super.c_1.416 2008-05-15 13:23:43.000000000 +1000 +++ fs/xfs/linux-2.6/xfs_super.c 2008-05-15 13:29:49.000000000 +1000 @@ -1397,8 +1397,14 @@ xfs_fs_get_sb( void *data, struct vfsmount *mnt) { - return get_sb_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super, + int error; + + error = get_sb_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super, mnt); + if (!error) + ((struct xfs_mount *)mnt->mnt_sb->s_fs_info)->m_vfsmount = mnt; + + return error; } static struct super_operations xfs_super_operations = { --- fs/xfs/xfs_mount.h_1.265 2008-05-15 13:23:49.000000000 +1000 +++ fs/xfs/xfs_mount.h 2008-05-15 13:21:50.000000000 +1000 @@ -337,6 +337,7 @@ typedef struct xfs_mount { spinlock_t m_sync_lock; /* work item list lock */ int m_sync_seq; /* sync thread generation no. */ wait_queue_head_t m_wait_single_sync_task; + struct vfsmount *m_vfsmount; } xfs_mount_t; /* From owner-xfs@oss.sgi.com Thu May 15 18:58:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 18:58:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G1vvwE032515 for ; Thu, 15 May 2008 18:58:00 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA19205; Fri, 16 May 2008 11:58:29 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4G1wSsT164719774; Fri, 16 May 2008 11:58:29 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4G1wSTx169466703; Fri, 16 May 2008 11:58:28 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 11:58:28 +1000 From: David Chinner To: Lachlan McIlroy Cc: xfs-dev , xfs-oss Subject: Re: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-ID: <20080516015828.GC155679365@sgi.com> References: <482CE39F.9050404@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482CE39F.9050404@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15930 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 11:30:07AM +1000, Lachlan McIlroy wrote: > There's a new check added to dentry_open(): > > if (!mnt) { > printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__); > dump_stack(); > return ERR_PTR(-EINVAL); > } > > We need to pass a mountpoint in the call to dentry_open() in xfs_dm_rdwr() > to avoid this code. > > --- fs/xfs/dmapi/xfs_dm.c_1.72 2008-05-15 13:23:41.000000000 +1000 > +++ fs/xfs/dmapi/xfs_dm.c 2008-05-15 17:51:41.000000000 +1000 > @@ -52,6 +52,8 @@ > #include > #include "xfs_dm.h" > > +#include Should be defined in fs/xfs/linux-2.6/xfs_linux.h, right? > + > #define MAXNAMLEN MAXNAMELEN > > #define MIN_DIO_SIZE(mp) ((mp)->m_sb.sb_sectsize) > @@ -1121,7 +1123,7 @@ xfs_dm_rdwr( > return ENOMEM; > } > > - file = dentry_open(dentry, NULL, oflags); > + file = dentry_open(dentry, mntget(ip->i_mount->m_vfsmount), oflags); > if (IS_ERR(file)) { > return -PTR_ERR(file); > } > --- fs/xfs/linux-2.6/xfs_super.c_1.416 2008-05-15 13:23:43.000000000 +1000 > +++ fs/xfs/linux-2.6/xfs_super.c 2008-05-15 13:29:49.000000000 +1000 > @@ -1397,8 +1397,14 @@ xfs_fs_get_sb( > void *data, > struct vfsmount *mnt) > { > - return get_sb_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super, > + int error; > + > + error = get_sb_bdev(fs_type, flags, dev_name, data, > xfs_fs_fill_super, > mnt); > + if (!error) > + ((struct xfs_mount *)mnt->mnt_sb->s_fs_info)->m_vfsmount = > mnt; As I previously suggested, please use XFS_M(mnt->mnt_sb) for this. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 19:12:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 19:12:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G2CToE001286 for ; Thu, 15 May 2008 19:12:33 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA19511; Fri, 16 May 2008 12:13:13 +1000 Message-ID: <482CEE1F.9050105@sgi.com> Date: Fri, 16 May 2008 12:14:55 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() References: <482CE39F.9050404@sgi.com> <20080516015828.GC155679365@sgi.com> In-Reply-To: <20080516015828.GC155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15931 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Fri, May 16, 2008 at 11:30:07AM +1000, Lachlan McIlroy wrote: >> There's a new check added to dentry_open(): >> >> if (!mnt) { >> printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__); >> dump_stack(); >> return ERR_PTR(-EINVAL); >> } >> >> We need to pass a mountpoint in the call to dentry_open() in xfs_dm_rdwr() >> to avoid this code. >> >> --- fs/xfs/dmapi/xfs_dm.c_1.72 2008-05-15 13:23:41.000000000 +1000 >> +++ fs/xfs/dmapi/xfs_dm.c 2008-05-15 17:51:41.000000000 +1000 >> @@ -52,6 +52,8 @@ >> #include >> #include "xfs_dm.h" >> >> +#include > > Should be defined in fs/xfs/linux-2.6/xfs_linux.h, right? It's not currently in xfs_linux.h. It's needed for mntget(). I saw that xfs_ioctl.c uses mntget() and pulls in linux/mount.h directly so I followed suit. I can add it to xfs_linux.h if you prefer. > >> + >> #define MAXNAMLEN MAXNAMELEN >> >> #define MIN_DIO_SIZE(mp) ((mp)->m_sb.sb_sectsize) >> @@ -1121,7 +1123,7 @@ xfs_dm_rdwr( >> return ENOMEM; >> } >> >> - file = dentry_open(dentry, NULL, oflags); >> + file = dentry_open(dentry, mntget(ip->i_mount->m_vfsmount), oflags); >> if (IS_ERR(file)) { >> return -PTR_ERR(file); >> } >> --- fs/xfs/linux-2.6/xfs_super.c_1.416 2008-05-15 13:23:43.000000000 +1000 >> +++ fs/xfs/linux-2.6/xfs_super.c 2008-05-15 13:29:49.000000000 +1000 >> @@ -1397,8 +1397,14 @@ xfs_fs_get_sb( >> void *data, >> struct vfsmount *mnt) >> { >> - return get_sb_bdev(fs_type, flags, dev_name, data, xfs_fs_fill_super, >> + int error; >> + >> + error = get_sb_bdev(fs_type, flags, dev_name, data, >> xfs_fs_fill_super, >> mnt); >> + if (!error) >> + ((struct xfs_mount *)mnt->mnt_sb->s_fs_info)->m_vfsmount = >> mnt; > > As I previously suggested, please use XFS_M(mnt->mnt_sb) for this. Sorry, missed that one. From owner-xfs@oss.sgi.com Thu May 15 19:10:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 19:26:59 -0700 (PDT) Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G2Arhi001184 for ; Thu, 15 May 2008 19:10:56 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA19497; Fri, 16 May 2008 12:11:35 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 46AB658C4C29; Fri, 16 May 2008 12:11:35 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981813 - Fix memory corruption with small buffer reads Message-Id: <20080516021135.46AB658C4C29@chook.melbourne.sgi.com> Date: Fri, 16 May 2008 12:11:35 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15932 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix memory corruption with small buffer reads When we have multiple buffers in a single page for a blocksize == pagesize filesystem we might overwrite the page contents if two callers hit it shortly after each other. To prevent that we need to keep the page locked until I/O is completed and the page marked uptodate. Thanks to Eric Sandeen for triaging this bug and finding a reproducible testcase and Dave Chinner for additional advice. This should fix kernel.org bz #10421. Signed-off-by: Christoph Hellwig Tested-by: Eric Sandeen Date: Fri May 16 12:10:56 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31173a fs/xfs/linux-2.6/xfs_buf.h - 1.125 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.h.diff?r1=text&tr1=1.125&r2=text&tr2=1.124&f=h - Reintroduce page locking for sub-blocksize buffer read synchronisation. fs/xfs/linux-2.6/xfs_buf.c - 1.256 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.c.diff?r1=text&tr1=1.256&r2=text&tr2=1.255&f=h - Reintroduce page locking for sub-blocksize buffer read synchronisation. From owner-xfs@oss.sgi.com Thu May 15 20:50:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 20:50:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G3oLMo013441 for ; Thu, 15 May 2008 20:50:23 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA21050; Fri, 16 May 2008 13:51:09 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4G3p8sT169576822; Fri, 16 May 2008 13:51:08 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4G3p8bR168180034; Fri, 16 May 2008 13:51:08 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 13:51:08 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-ID: <20080516035108.GF155679365@sgi.com> References: <482CE39F.9050404@sgi.com> <20080516015828.GC155679365@sgi.com> <482CEE1F.9050105@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482CEE1F.9050105@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15933 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 12:14:55PM +1000, Lachlan McIlroy wrote: > David Chinner wrote: > >On Fri, May 16, 2008 at 11:30:07AM +1000, Lachlan McIlroy wrote: > >>There's a new check added to dentry_open(): > >> > >> if (!mnt) { > >> printk(KERN_WARNING "%s called with NULL vfsmount\n", __func__); > >> dump_stack(); > >> return ERR_PTR(-EINVAL); > >> } > >> > >>We need to pass a mountpoint in the call to dentry_open() in xfs_dm_rdwr() > >>to avoid this code. > >> > >>--- fs/xfs/dmapi/xfs_dm.c_1.72 2008-05-15 13:23:41.000000000 +1000 > >>+++ fs/xfs/dmapi/xfs_dm.c 2008-05-15 17:51:41.000000000 +1000 > >>@@ -52,6 +52,8 @@ > >>#include > >>#include "xfs_dm.h" > >> > >>+#include > > > >Should be defined in fs/xfs/linux-2.6/xfs_linux.h, right? > It's not currently in xfs_linux.h. It's needed for mntget(). I saw that > xfs_ioctl.c uses mntget() and pulls in linux/mount.h directly so I followed > suit. I can add it to xfs_linux.h if you prefer. Typically we include linux specific headers in code outside fs/xfs/linux-2.6 via an implicit include (xfs.h pulls in linux-2.6/xfs_linux.h) to try and keep platform specific headers out of the core code. Whether that rule applies to dmapi is a good question - the dmapi code needs so much cleaning up anyway I'm not sure it matters..... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 15 21:56:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 21:57:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G4uoX2016469 for ; Thu, 15 May 2008 21:56:52 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA22307; Fri, 16 May 2008 14:57:33 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id F12DC58C4C29; Fri, 16 May 2008 14:57:32 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-Id: <20080516045732.F12DC58C4C29@chook.melbourne.sgi.com> Date: Fri, 16 May 2008 14:57:32 +1000 (EST) From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15934 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() We need a vfsmount pointer in xfs_dm_rdwr() but we are not provided with one and there's no way to get to it. So add a m_vfsmount field to the xfs_mount structure and set it up at mount time. We can then access it through the xfs inode. Date: Fri May 16 14:56:46 AEST 2008 Workarea: redback.melbourne.sgi.com:/home/lachlan/isms/2.6.x-bmap Inspected by: dgc Author: lachlan The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31176a fs/xfs/xfs_mount.h - 1.266 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.266&r2=text&tr2=1.265&f=h fs/xfs/linux-2.6/xfs_super.c - 1.417 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.417&r2=text&tr2=1.416&f=h - Set up a vfsmount pointer in the xfs mount structure. fs/xfs/dmapi/xfs_dm.c - 1.73 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/dmapi/xfs_dm.c.diff?r1=text&tr1=1.73&r2=text&tr2=1.72&f=h - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() From owner-xfs@oss.sgi.com Thu May 15 22:09:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 22:09:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G59Za3017266 for ; Thu, 15 May 2008 22:09:36 -0700 X-ASG-Debug-ID: 1210914623-257702c30000-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 5F0F5B6D679; Thu, 15 May 2008 22:10:23 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id R1n4MX4bwNyCX7GP; Thu, 15 May 2008 22:10:23 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwsD1-0004Bq-5L; Fri, 16 May 2008 05:10:23 +0000 Date: Fri, 16 May 2008 01:10:23 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Subject: Re: [PATCH] xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-ID: <20080516051023.GA5035@infradead.org> References: <482CE39F.9050404@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <482CE39F.9050404@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210914624 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.1, rules version 3.1.50494 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15935 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 11:30:07AM +1000, Lachlan McIlroy wrote: > --- fs/xfs/xfs_mount.h_1.265 2008-05-15 13:23:49.000000000 +1000 > +++ fs/xfs/xfs_mount.h 2008-05-15 13:21:50.000000000 +1000 > @@ -337,6 +337,7 @@ typedef struct xfs_mount { > spinlock_t m_sync_lock; /* work item list lock */ > int m_sync_seq; /* sync thread generation no. */ > wait_queue_head_t m_wait_single_sync_task; > + struct vfsmount *m_vfsmount; > } xfs_mount_t; there can be multiple vfsmounts for a single xfs_mount. In addition to that please don't mess up core xfs for dmapi braindamage. From owner-xfs@oss.sgi.com Thu May 15 22:10:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 22:10:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G5A4Ax017312 for ; Thu, 15 May 2008 22:10:09 -0700 X-ASG-Debug-ID: 1210914648-2cda039b0000-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 1F8E917B6BB; Thu, 15 May 2008 22:10:49 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id J80gbWDEuH9LP08O; Thu, 15 May 2008 22:10:49 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwsDQ-0004D4-Kq; Fri, 16 May 2008 05:10:48 +0000 Date: Fri, 16 May 2008 01:10:48 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Subject: Re: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-ID: <20080516051048.GB5035@infradead.org> References: <20080516045732.F12DC58C4C29@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080516045732.F12DC58C4C29@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210914653 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.1, rules version 3.1.50493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15936 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 02:57:32PM +1000, Lachlan McIlroy wrote: > xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() > > We need a vfsmount pointer in xfs_dm_rdwr() but we are not > provided with one and there's no way to get to it. So add > a m_vfsmount field to the xfs_mount structure and set it > up at mount time. We can then access it through the xfs > inode. Stong NACK for this crap, and double NACK for pushing this towards mainline. From owner-xfs@oss.sgi.com Thu May 15 22:28:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 15 May 2008 22:29:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4G5Sfi6019124 for ; Thu, 15 May 2008 22:28:44 -0700 Received: from cxfsmac10.melbourne.sgi.com (cxfsmac10.melbourne.sgi.com [134.14.55.100]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA23121; Fri, 16 May 2008 15:29:18 +1000 Message-ID: <482D1BAE.9070109@sgi.com> Date: Fri, 16 May 2008 15:29:18 +1000 From: Donald Douwsma User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH, RFC] re-enable test 010 References: <20080515171619.GA10094@lst.de> In-Reply-To: <20080515171619.GA10094@lst.de> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15937 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: donaldd@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > The dbtest program required for testcase 010 hasn't been build for ages > due to various crufty autofoo magic. The patch below just builds it > unconditionally for Linux as all distros should have the ndbm compat > bits for libgdbm in the same place. > > > Signed-off-by: Christoph Hellwig I'd rather we fixed the autofoo magic rather than just chop it out, Gdbm isn't always packaged the same way. Currently on Suse (gdbm-devel) it doesnt build, with your patch we get build errors. On Rhel (unknown package) it builds fine as is but would break with your patch. I've been trying to figure out the autotools foo required to fix this, we'll need to add your include/lib layout into the mix too. Anyone know autotools? Don .. gcc -g -O2 -DDEBUG -I../include -DVERSION=\"1.0.0\" -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -funsigned-char -fno-strict-aliasing -Wall -c -o dbtest.o dbtest.c dbtest.c:20:23: error: gdbm-ndbm.h: No such file or directory donaldd@molten ~/isms/xfs-cmds/xfstests $ rpm -ql gdbm-devel /usr/include/dbm.h /usr/include/gdbm.h /usr/include/ndbm.h /usr/lib64/libgdbm.a /usr/lib64/libgdbm.la /usr/lib64/libgdbm.so /usr/lib64/libgdbm_compat.a /usr/lib64/libgdbm_compat.la /usr/lib64/libgdbm_compat.so /usr/lib64/libndbm.a /usr/lib64/libndbm.so /usr/share/info/gdbm.info.gz /usr/share/man/man3/gdbm.3.gz > Index: xfstests/src/Makefile > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/src/Makefile,v > retrieving revision 1.43 > diff -u -p -r1.43 Makefile > --- xfstests/src/Makefile 3 Oct 2007 16:23:57 -0000 1.43 > +++ xfstests/src/Makefile 15 May 2008 17:13:50 -0000 > @@ -15,7 +15,7 @@ TARGETS = dirstress fill fill2 getpagesi > LINUX_TARGETS = loggen xfsctl bstat t_mtab getdevicesize \ > preallo_rw_pattern_reader preallo_rw_pattern_writer ftrunc trunc \ > fs_perms testx looptest locktest unwritten_mmap \ > - bulkstat_unlink_test bulkstat_unlink_test_modified > + bulkstat_unlink_test bulkstat_unlink_test_modified dbtest t_immutable > > IRIX_TARGETS = open_unlink > > @@ -27,14 +27,6 @@ ifeq ($(PKG_PLATFORM),irix) > TARGETS += $(IRIX_TARGETS) > endif > > -ifeq ($(HAVE_DB), true) > -TARGETS += dbtest > -endif > - > -ifeq ($(PKG_PLATFORM),linux) > -TARGETS += t_immutable > -endif > - > CFILES = $(TARGETS:=.c) > LDIRT = $(TARGETS) > > @@ -50,7 +42,7 @@ truncfile: truncfile.o $(LIBTEST) > $(LINKTEST) $(LIBTEST) $(LDLIBS) > > dbtest: dbtest.o $(LIBTEST) > - $(LINKTEST) $(LIBTEST) $(LIBGDBM) $(LDLIBS) > + $(LINKTEST) $(LIBTEST) -lgdbm_compat $(LDLIBS) > > nametest: nametest.o $(LIBTEST) > $(LINKTEST) $(LIBTEST) $(LDLIBS) > Index: xfstests/src/dbtest.c > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/src/dbtest.c,v > retrieving revision 1.6 > diff -u -p -r1.6 dbtest.c > --- xfstests/src/dbtest.c 9 Nov 2005 02:50:19 -0000 1.6 > +++ xfstests/src/dbtest.c 15 May 2008 17:13:51 -0000 > @@ -17,20 +17,7 @@ > */ > > #include "global.h" > - > -#ifdef HAVE_GDBM_NDBM_H > -#include > -#else > -#ifdef HAVE_GDBM_H > -#include > -#else > -#ifdef HAVE_NDBM_H > -#include > -#else > -bozo! > -#endif > -#endif > -#endif > +#include > > > /* #define WorkDir "/xfs" */ > From owner-xfs@oss.sgi.com Fri May 16 00:25:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 00:25:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G7PCQd030941 for ; Fri, 16 May 2008 00:25:15 -0700 X-ASG-Debug-ID: 1210922759-78f7039e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ppsw-9.csi.cam.ac.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D4D77B6DDBB; Fri, 16 May 2008 00:25:59 -0700 (PDT) Received: from ppsw-9.csi.cam.ac.uk (ppsw-9.csi.cam.ac.uk [131.111.8.139]) by cuda.sgi.com with ESMTP id 7qlqQBhnkssQhGyF; Fri, 16 May 2008 00:25:59 -0700 (PDT) X-Cam-SpamDetails: Not scanned X-Cam-AntiVirus: No virus found X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ Received: from imp.csi.cam.ac.uk ([131.111.10.57]:49327) by ppsw-9.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.159]:25) with esmtpsa (PLAIN:aia21) (TLSv1:AES128-SHA:128) id 1JwuKC-0004f8-Vk (Exim 4.67) (return-path ); Fri, 16 May 2008 08:25:56 +0100 From: Anton Altaparmakov To: Christoph Hellwig In-Reply-To: <20080515141121.GA14198@infradead.org> X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> <20080515141121.GA14198@infradead.org> Message-Id: <7C3356E7-7985-4B0D-B29E-3357464ED787@cam.ac.uk> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v919.2) Date: Fri, 16 May 2008 08:25:55 +0100 Cc: Barry Naujok , xfs@oss.sgi.com, linux-fsdevel X-Mailer: Apple Mail (2.919.2) X-Barracuda-Connect: ppsw-9.csi.cam.ac.uk[131.111.8.139] X-Barracuda-Start-Time: 1210922760 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.1, rules version 3.1.50502 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15941 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: aia21@cam.ac.uk Precedence: bulk X-list: xfs Hi, On 15 May 2008, at 15:11, Christoph Hellwig wrote: > On Thu, May 15, 2008 at 02:43:44PM +0100, Anton Altaparmakov wrote: >> Yes, and you can get the performance back if you allow negative >> dentries to >> be created. You just have to make sure that every time a directory >> entry >> is created in directory X, all negative dentries which are children >> of >> directory X are thrown away. > > We might even be able to optimize this a little by calling d_compare > on > each alias to see if it hashes down to the same one down in the fs. Perhaps, although I am not convinced that wouldn't be worse than just throwing them all away. For example think of a very active directory with thousands of negative dentries in it. A create comes in and we either throw away thousands of entries or we perform a case insensitive comparison thousands of times and discard only a few entries. I am concerned that the "thousands of case insensitive comparisons" would actually be very costly and far outweigh the cost of throwing all negative dentries away and letting them be created again if they are requested again. At lest in NTFS the case insensitive comparison is very expensive as it involves converting both the UTF8 strings into little endian 2-byte fixed width Unicode, and then for each Unicode character of each of the strings being compared, individually performing a look up in the 128kiB large Unicode upcase table and then the two upcased characters are compared and if they match we move to the next character. Doing that a thousand times would be way more expensive then simply throwing all negative dentries away I would think. In the end it probably depends on the usage scenario as to what will be more efficient and perhaps on the file system as well so it may be worth allowing the file system to decide whether to try and do comparisons or to simply throw all the negative dentries away. Best regards, Anton -- Anton Altaparmakov (replace at with @) Unix Support, Computing Service, University of Cambridge, CB2 3QH, UK Linux NTFS maintainer, http://www.linux-ntfs.org/ From owner-xfs@oss.sgi.com Fri May 16 00:21:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 00:22:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G7LnN3030580 for ; Fri, 16 May 2008 00:21:56 -0700 X-ASG-Debug-ID: 1210922556-34ac001a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6E48016D5143 for ; Fri, 16 May 2008 00:22:36 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id hT5qzeIKaXh1XZpM for ; Fri, 16 May 2008 00:22:36 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4G7MSF3001097 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 16 May 2008 09:22:28 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4G7MSDL001095 for xfs@oss.sgi.com; Fri, 16 May 2008 09:22:28 +0200 Date: Fri, 16 May 2008 09:22:28 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] kill xfs_igrow_start and xfs_igrow_finish Subject: Re: [PATCH] kill xfs_igrow_start and xfs_igrow_finish Message-ID: <20080516072228.GA1052@lst.de> References: <20080430112448.GA17537@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430112448.GA17537@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210922557 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.1, rules version 3.1.50503 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15938 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 01:24:48PM +0200, Christoph Hellwig wrote: > xfs_igrow_start just expands to xfs_zero_eof with two assers that are > useless in the context of the only caller and some rather confusing > comments. > > xfs_igrow_finish is just a few lines of code decorated again with > useless asserts and confusing comments. > > Just kill those two and merge them into xfs_setattr. ping? > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_inode.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-04-24 21:18:18.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-04-24 21:23:58.000000000 +0200 > @@ -1763,67 +1763,6 @@ xfs_itruncate_finish( > return 0; > } > > - > -/* > - * xfs_igrow_start > - * > - * Do the first part of growing a file: zero any data in the last > - * block that is beyond the old EOF. We need to do this before > - * the inode is joined to the transaction to modify the i_size. > - * That way we can drop the inode lock and call into the buffer > - * cache to get the buffer mapping the EOF. > - */ > -int > -xfs_igrow_start( > - xfs_inode_t *ip, > - xfs_fsize_t new_size, > - cred_t *credp) > -{ > - ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); > - ASSERT(new_size > ip->i_size); > - > - /* > - * Zero any pages that may have been created by > - * xfs_write_file() beyond the end of the file > - * and any blocks between the old and new file sizes. > - */ > - return xfs_zero_eof(ip, new_size, ip->i_size); > -} > - > -/* > - * xfs_igrow_finish > - * > - * This routine is called to extend the size of a file. > - * The inode must have both the iolock and the ilock locked > - * for update and it must be a part of the current transaction. > - * The xfs_igrow_start() function must have been called previously. > - * If the change_flag is not zero, the inode change timestamp will > - * be updated. > - */ > -void > -xfs_igrow_finish( > - xfs_trans_t *tp, > - xfs_inode_t *ip, > - xfs_fsize_t new_size, > - int change_flag) > -{ > - ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_IOLOCK_EXCL)); > - ASSERT(ip->i_transp == tp); > - ASSERT(new_size > ip->i_size); > - > - /* > - * Update the file size. Update the inode change timestamp > - * if change_flag set. > - */ > - ip->i_d.di_size = new_size; > - ip->i_size = new_size; > - if (change_flag) > - xfs_ichgtime(ip, XFS_ICHGTIME_CHG); > - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > - > -} > - > - > /* > * This is called when the inode's link count goes to 0. > * We place the on-disk inode on a list in the AGI. It > Index: linux-2.6-xfs/fs/xfs/xfs_inode.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-04-24 21:18:10.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-04-24 21:18:14.000000000 +0200 > @@ -507,9 +507,6 @@ int xfs_itruncate_start(xfs_inode_t *, > int xfs_itruncate_finish(struct xfs_trans **, xfs_inode_t *, > xfs_fsize_t, int, int); > int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); > -int xfs_igrow_start(xfs_inode_t *, xfs_fsize_t, struct cred *); > -void xfs_igrow_finish(struct xfs_trans *, xfs_inode_t *, > - xfs_fsize_t, int); > > void xfs_idestroy_fork(xfs_inode_t *, int); > void xfs_idestroy(xfs_inode_t *); > Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-04-24 21:18:18.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-04-24 21:24:07.000000000 +0200 > @@ -444,7 +444,13 @@ xfs_setattr( > code = 0; > if ((vap->va_size > ip->i_size) && > (flags & ATTR_NOSIZETOK) == 0) { > - code = xfs_igrow_start(ip, vap->va_size, credp); > + /* > + * Do the first part of growing a file: zero any data > + * in the last block that is beyond the old EOF. We > + * need to do this before the inode is joined to the > + * transaction to modify the i_size. > + */ > + code = xfs_zero_eof(ip, vap->va_size, ip->i_size); > } > xfs_iunlock(ip, XFS_ILOCK_EXCL); > > @@ -512,8 +518,11 @@ xfs_setattr( > timeflags |= XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG; > > if (vap->va_size > ip->i_size) { > - xfs_igrow_finish(tp, ip, vap->va_size, > - !(flags & ATTR_DMI)); > + ip->i_d.di_size = vap->va_size; > + ip->i_size = vap->va_size; > + if (!(flags & ATTR_DMI)) > + xfs_ichgtime(ip, XFS_ICHGTIME_CHG); > + xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); > } else if ((vap->va_size <= ip->i_size) || > ((vap->va_size == 0) && ip->i_d.di_nextents)) { > /* > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-24 21:24:34.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-04-24 21:24:37.000000000 +0200 > @@ -235,8 +235,6 @@ EXPORT_SYMBOL(xfs_iflock_nowait); > EXPORT_SYMBOL(xfs_iflush); > EXPORT_SYMBOL(xfs_ifunlock); > EXPORT_SYMBOL(xfs_iget); > -EXPORT_SYMBOL(xfs_igrow_start); > -EXPORT_SYMBOL(xfs_igrow_finish); > EXPORT_SYMBOL(xfs_ilock); > EXPORT_SYMBOL(xfs_ilock_map_shared); > EXPORT_SYMBOL(xfs_ilock_nowait); ---end quoted text--- From owner-xfs@oss.sgi.com Fri May 16 00:22:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 00:22:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G7MIpO030619 for ; Fri, 16 May 2008 00:22:21 -0700 X-ASG-Debug-ID: 1210922585-5e9401d50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9E5B316D5708 for ; Fri, 16 May 2008 00:23:06 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 9lpowwbDCwv6TMCv for ; Fri, 16 May 2008 00:23:06 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4G7MxF3001147 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 16 May 2008 09:22:59 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4G7MxGA001145 for xfs@oss.sgi.com; Fri, 16 May 2008 09:22:59 +0200 Date: Fri, 16 May 2008 09:22:59 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] merge xfs_mntupdate into xfs_fs_remount Subject: Re: [PATCH] merge xfs_mntupdate into xfs_fs_remount Message-ID: <20080516072259.GC1052@lst.de> References: <20080426201029.GB14172@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080426201029.GB14172@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210922586 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.1, rules version 3.1.50503 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15940 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 10:10:29PM +0200, Christoph Hellwig wrote: > xfs_mntupdate already is completely Linux specific due to the VFS flags > passed in, so it might aswell be merged into xfs_fs_remount. ping? > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:42:43.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-04-25 20:44:55.000000000 +0200 > @@ -52,6 +52,7 @@ > #include "xfs_version.h" > #include "xfs_log_priv.h" > #include "xfs_trans_priv.h" > +#include "xfs_filestream.h" > > #include > #include > @@ -1220,8 +1221,26 @@ xfs_fs_remount( > int error; > > error = xfs_parseargs(mp, options, args, 1); > - if (!error) > - error = xfs_mntupdate(mp, flags, args); > + if (error) > + goto out_free_args; > + > + if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ > + if (mp->m_flags & XFS_MOUNT_RDONLY) > + mp->m_flags &= ~XFS_MOUNT_RDONLY; > + if (args->flags & XFSMNT_BARRIER) { > + mp->m_flags |= XFS_MOUNT_BARRIER; > + xfs_mountfs_check_barriers(mp); > + } else { > + mp->m_flags &= ~XFS_MOUNT_BARRIER; > + } > + } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ > + xfs_filestream_flush(mp); > + xfs_sync(mp, SYNC_DATA_QUIESCE); > + xfs_attr_quiesce(mp); > + mp->m_flags |= XFS_MOUNT_RDONLY; > + } > + > + out_free_args: > kmem_free(args, sizeof(*args)); > return -error; > } > Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-04-25 20:42:43.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-04-25 20:43:36.000000000 +0200 > @@ -693,30 +693,6 @@ xfs_attr_quiesce( > xfs_unmountfs_writesb(mp); > } > > -int > -xfs_mntupdate( > - struct xfs_mount *mp, > - int *flags, > - struct xfs_mount_args *args) > -{ > - if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ > - if (mp->m_flags & XFS_MOUNT_RDONLY) > - mp->m_flags &= ~XFS_MOUNT_RDONLY; > - if (args->flags & XFSMNT_BARRIER) { > - mp->m_flags |= XFS_MOUNT_BARRIER; > - xfs_mountfs_check_barriers(mp); > - } else { > - mp->m_flags &= ~XFS_MOUNT_BARRIER; > - } > - } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ > - xfs_filestream_flush(mp); > - xfs_sync(mp, SYNC_DATA_QUIESCE); > - xfs_attr_quiesce(mp); > - mp->m_flags |= XFS_MOUNT_RDONLY; > - } > - return 0; > -} > - > /* > * xfs_unmount_flush implements a set of flush operation on special > * inodes, which are needed as a separate set of operations so that > Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.h 2008-04-25 20:42:43.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.h 2008-04-25 20:42:48.000000000 +0200 > @@ -11,8 +11,6 @@ struct xfs_mount_args; > int xfs_mount(struct xfs_mount *mp, struct xfs_mount_args *args, > struct cred *credp); > int xfs_unmount(struct xfs_mount *mp, int flags, struct cred *credp); > -int xfs_mntupdate(struct xfs_mount *mp, int *flags, > - struct xfs_mount_args *args); > int xfs_sync(struct xfs_mount *mp, int flags); > void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, > int lnnum); ---end quoted text--- From owner-xfs@oss.sgi.com Fri May 16 00:22:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 00:22:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G7MBsm030605 for ; Fri, 16 May 2008 00:22:17 -0700 X-ASG-Debug-ID: 1210922579-78d703cf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4A20AB6DBDE for ; Fri, 16 May 2008 00:22:59 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 0ZJQLIBypJr2ftsg for ; Fri, 16 May 2008 00:22:59 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4G7MpF3001133 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 16 May 2008 09:22:52 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4G7MpvY001131 for xfs@oss.sgi.com; Fri, 16 May 2008 09:22:51 +0200 Date: Fri, 16 May 2008 09:22:51 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] kill xfs_uuid_unmount Subject: Re: [PATCH] kill xfs_uuid_unmount Message-ID: <20080516072251.GB1052@lst.de> References: <20080426200923.GA14172@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080426200923.GA14172@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1210922580 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.1, rules version 3.1.50502 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15939 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Sat, Apr 26, 2008 at 10:09:23PM +0200, Christoph Hellwig wrote: > Quite useless wrapper that doesn't help making the code more readable. ping? > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_mount.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-04-25 20:40:50.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-04-25 20:48:27.000000000 +0200 > @@ -47,7 +47,6 @@ > > STATIC int xfs_mount_log_sb(xfs_mount_t *, __int64_t); > STATIC int xfs_uuid_mount(xfs_mount_t *); > -STATIC void xfs_uuid_unmount(xfs_mount_t *mp); > STATIC void xfs_unmountfs_wait(xfs_mount_t *); > > > @@ -1262,7 +1261,7 @@ xfs_mountfs( > /* FALLTHROUGH */ > error1: > if (uuid_mounted) > - xfs_uuid_unmount(mp); > + uuid_table_remove(&mp->m_sb.sb_uuid); > xfs_freesb(mp); > return error; > } > @@ -1343,7 +1342,7 @@ xfs_unmountfs(xfs_mount_t *mp, struct cr > > xfs_unmountfs_close(mp, cr); > if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0) > - xfs_uuid_unmount(mp); > + uuid_table_remove(&mp->m_sb.sb_uuid); > > #if defined(DEBUG) || defined(INDUCE_IO_ERROR) > xfs_errortag_clearall(mp, 0); > @@ -1905,16 +1904,6 @@ xfs_uuid_mount( > } > > /* > - * Remove filesystem from the UUID table. > - */ > -STATIC void > -xfs_uuid_unmount( > - xfs_mount_t *mp) > -{ > - uuid_table_remove(&mp->m_sb.sb_uuid); > -} > - > -/* > * Used to log changes to the superblock unit and width fields which could > * be altered by the mount options, as well as any potential sb_features2 > * fixup. Only the first superblock is updated. ---end quoted text--- From owner-xfs@oss.sgi.com Fri May 16 00:45:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 00:45:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4G7j3P3032578 for ; Fri, 16 May 2008 00:45:04 -0700 X-ASG-Debug-ID: 1210923951-6ce500da0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc1-s26.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24FB8B6DD43 for ; Fri, 16 May 2008 00:45:51 -0700 (PDT) Received: from bay0-omc1-s26.bay0.hotmail.com (bay0-omc1-s26.bay0.hotmail.com [65.54.246.98]) by cuda.sgi.com with ESMTP id Cn6Quw3MKp2zYtUK for ; Fri, 16 May 2008 00:45:51 -0700 (PDT) Received: from hotmail.com ([65.54.174.79]) by bay0-omc1-s26.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 16 May 2008 00:45:51 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 16 May 2008 00:45:51 -0700 Message-ID: Received: from 85.32.103.134 by BAY103-DAV7.phx.gbl with DAV; Fri, 16 May 2008 07:45:49 +0000 X-Originating-IP: [85.32.103.134] X-Originating-Email: [pupilla@hotmail.com] X-Sender: pupilla@hotmail.com From: "Marco Berizzi" To: "Eric Sandeen" Cc: "David Chinner" , , , References: <20080505231754.GL155679365@sgi.com> <20080506085632.GT155679365@sgi.com> <482062F5.9010402@sandeen.net> <482CAE26.8080707@sandeen.net> X-ASG-Orig-Subj: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Subject: Re: XFS shutdown in xfs_iunlink_remove() (was Re: 2.6.25: swapper: page allocation failure. order:3, mode:0x4020) Date: Fri, 16 May 2008 09:43:14 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1123 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 X-OriginalArrivalTime: 16 May 2008 07:45:51.0447 (UTC) FILETIME=[DD011670:01C8B728] X-Barracuda-Connect: bay0-omc1-s26.bay0.hotmail.com[65.54.246.98] X-Barracuda-Start-Time: 1210923952 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0033 1.0000 -1.9997 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50504 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15942 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: pupilla@hotmail.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: > > Marco Berizzi wrote: > >> David Chinner wrote: > >> > >>> Hmmmmm - interesting. Both the reports of this problem are from > >>> machines running as squid proxies. Are you using AUFS for the cache? > >> no, I'm using cache_dir ufs with cache_replacement_policy heap LFUDA > > Christoph recently sent a patch to the xfs list which resolves my > testcase for this problem, FYI. > > [PATCH] fix memory corruption with small buffer reads Thanks I will try asap. I have also cc'ed Denys which had opened bug #10421 From owner-xfs@oss.sgi.com Fri May 16 03:06:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 03:06:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4GA6FK3009735 for ; Fri, 16 May 2008 03:06:18 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA27543; Fri, 16 May 2008 20:06:59 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4GA6wsT169717228; Fri, 16 May 2008 20:06:58 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4GA6vkd169714005; Fri, 16 May 2008 20:06:57 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 20:06:57 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] Fix inode list allocation size in writeback. Message-ID: <20080516100657.GV103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15943 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs We only need to allocate space for the number of inodes in the cluster when writing back inodes, not every byte in the inode cluster. This reduces the amount of memory needing to be allocated to 256 bytes instead of 64k. Somebody pass me the brown paper bag, please. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-05-16 19:43:55.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-16 19:47:47.778141722 +1000 @@ -2913,6 +2913,7 @@ xfs_iflush_cluster( xfs_mount_t *mp = ip->i_mount; xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); unsigned long first_index, mask; + unsigned long inodes_per_cluster; int ilist_size; xfs_inode_t **ilist; xfs_inode_t *iq; @@ -2924,7 +2925,8 @@ xfs_iflush_cluster( ASSERT(pag->pagi_inodeok); ASSERT(pag->pag_ici_init); - ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); + inodes_per_cluster = XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog; + ilist_size = inodes_per_cluster * sizeof(xfs_inode_t *); ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); if (!ilist) return 0; @@ -2934,8 +2936,7 @@ xfs_iflush_cluster( read_lock(&pag->pag_ici_lock); /* really need a gang lookup range call here */ nr_found = radix_tree_gang_lookup(&pag->pag_ici_root, (void**)ilist, - first_index, - XFS_INODE_CLUSTER_SIZE(mp)); + first_index, inodes_per_cluster); if (nr_found == 0) goto out_free; From owner-xfs@oss.sgi.com Fri May 16 03:34:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 03:34:39 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_45,J_CHICKENPOX_62,J_CHICKENPOX_75,SUBJECT_FUZZY_TION autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GAYMG7012240 for ; Fri, 16 May 2008 03:34:23 -0700 X-ASG-Debug-ID: 1210934108-62eb00580000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.arkeia.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B04AC17CB9B for ; Fri, 16 May 2008 03:35:08 -0700 (PDT) Received: from mail.arkeia.com (mail2.fr.arkeia.com [62.240.235.218]) by cuda.sgi.com with ESMTP id Q3FDicKwY8BZ68Il for ; Fri, 16 May 2008 03:35:08 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.arkeia.com (Postfix) with ESMTP id 9AC2C4BCBD7 for ; Fri, 16 May 2008 12:35:07 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: by mail.arkeia.com Received: from mail.arkeia.com ([127.0.0.1]) by localhost (mail.arkeia.com [127.0.0.1]) (amavisd-new, port 42001) with ESMTP id M8ALKuAU1Fxd for ; Fri, 16 May 2008 12:35:01 +0200 (CEST) Received: from [10.1.14.5] (hubert.bat2.fr.arkeia.com [10.1.14.5]) by mail.arkeia.com (Postfix) with ESMTP id DFE6C4BCBCC for ; Fri, 16 May 2008 12:35:01 +0200 (CEST) Message-ID: <482D6388.7040602@free.fr> Date: Fri, 16 May 2008 12:35:52 +0200 From: Hubert Verstraete User-Agent: Thunderbird 1.5.0.12 (X11/20071019) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Subject: Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 References: <47D90614.9040206@free.fr> <18408.36753.223347.129420@notabene.brown> <47E92EE2.1080108@free.fr> <20080326065232.GA21970@percy.comedia.it> <47EA71BF.8050800@tmr.com> <47EA8CF4.7080201@free.fr> <47EA99AD.9060400@free.fr> In-Reply-To: <47EA99AD.9060400@free.fr> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail2.fr.arkeia.com[62.240.235.218] X-Barracuda-Start-Time: 1210934110 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1519 1.0000 -1.0906 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.09 X-Barracuda-Spam-Status: No, SCORE=-1.09 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.1, rules version 3.1.50515 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 15944 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hubskml@free.fr Precedence: bulk X-list: xfs Hello First, thank you for including the patch in xfsprogs-2.9.8. I have just reviewed the new source code; unfortunately, I found out a change from the original patch that could generate a segmentation fault. The line 89 in libdisk/md.c is: "free(dfile2);" but it should have remained "if (dfile2) free(dfile2);" because dfile2 is null in case mkfs.xfs is run on an MD device. Regards, Hubert Verstraete Hubert Verstraete wrote: > Hi XFS list, > > please find attached a patch for libdisk/mkfs.xfs which tunes XFS on > software partitionable RAID arrays, also called mdp. > > Hubert Verstraete > > ------------------------------------------------------------------------ > > diff -u -r xfsprogs-2.8.11/libdisk/md.c xfsprogs-2.8.11-mdp/libdisk/md.c > --- xfsprogs-2.8.11/libdisk/md.c 2006-06-26 07:01:15.000000000 +0200 > +++ xfsprogs-2.8.11-mdp/libdisk/md.c 2008-03-26 20:12:38.000000000 +0100 > @@ -24,8 +24,12 @@ > dev_t dev) > { > if (major(dev) == MD_MAJOR) > - return 1; > - return get_driver_block_major("md", major(dev)); > + return MD_IS_MD; > + if (get_driver_block_major("md", major(dev))) > + return MD_IS_MD; > + if (get_driver_block_major("mdp", major(dev))) > + return MD_IS_MDP; > + return 0; > } > > int > @@ -37,12 +41,32 @@ > int *sectalign, > struct stat64 *sb) > { > - if (mnt_is_md_subvol(sb->st_rdev)) { > + char *pc, *dfile2 = NULL; > + int is_md; > + > + if ((is_md = mnt_is_md_subvol(sb->st_rdev))) { > struct md_array_info md; > int fd; > > + if (is_md == MD_IS_MDP) { > + if (!(pc = strrchr(dfile, 'd')) > + || !(pc = strchr(pc, 'p'))) { > + fprintf(stderr, > + _("Error getting MD array device from %s\n"), > + dfile); > + exit(1); > + } > + dfile2 = (char *) malloc(pc - dfile + 1); > + if (dfile2 == NULL) { > + fprintf(stderr, > + _("Couldn't malloc device string\n")); > + exit(1); > + } > + strncpy(dfile2, dfile, pc - dfile); > + dfile2[pc - dfile + 1] = '\0'; > + } > /* Open device */ > - fd = open(dfile, O_RDONLY); > + fd = open(dfile2 ? dfile2 : dfile, O_RDONLY); > if (fd == -1) > return 0; > > @@ -50,10 +74,11 @@ > if (ioctl(fd, GET_ARRAY_INFO, &md)) { > fprintf(stderr, > _("Error getting MD array info from %s\n"), > - dfile); > + dfile2 ? dfile2 : dfile); > exit(1); > } > close(fd); > + if (dfile2) free(dfile2); > > /* > * Ignore levels we don't want aligned (e.g. linear) > diff -u -r xfsprogs-2.8.11/libdisk/md.h xfsprogs-2.8.11-mdp/libdisk/md.h > --- xfsprogs-2.8.11/libdisk/md.h 2006-06-26 07:01:15.000000000 +0200 > +++ xfsprogs-2.8.11-mdp/libdisk/md.h 2008-03-26 20:12:10.000000000 +0100 > @@ -20,6 +20,9 @@ > #define MD_MAJOR 9 /* we also check at runtime */ > #endif > > +#define MD_IS_MD 1 > +#define MD_IS_MDP 2 > + > #define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, struct md_array_info) > > #define MD_SB_CLEAN 0 From owner-xfs@oss.sgi.com Fri May 16 03:40:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 03:40:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GAeYCt012915 for ; Fri, 16 May 2008 03:40:38 -0700 X-ASG-Debug-ID: 1210934481-486c03c70000-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 08079B6F88D; Fri, 16 May 2008 03:41:21 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9wviUCbwdK6Uvsiq; Fri, 16 May 2008 03:41:21 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JwxNJ-0001pq-8f; Fri, 16 May 2008 10:41:21 +0000 Date: Fri, 16 May 2008 06:41:21 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] Fix inode list allocation size in writeback. Subject: Re: [PATCH] Fix inode list allocation size in writeback. Message-ID: <20080516104121.GA28064@infradead.org> References: <20080516100657.GV103491721@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080516100657.GV103491721@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1210934483 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.1, rules version 3.1.50516 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15945 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 08:06:57PM +1000, David Chinner wrote: > We only need to allocate space for the number of inodes in > the cluster when writing back inodes, not every byte in the > inode cluster. This reduces the amount of memory needing to > be allocated to 256 bytes instead of 64k. > > Somebody pass me the brown paper bag, please. Looks good, and I'll happily pass on my brown paper bag :) From owner-xfs@oss.sgi.com Fri May 16 04:34:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 04:35:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GBYiMW021967 for ; Fri, 16 May 2008 04:34:48 -0700 X-ASG-Debug-ID: 1210937732-1533004f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp-out03.alice-dsl.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B5ECA17C7B0 for ; Fri, 16 May 2008 04:35:32 -0700 (PDT) Received: from smtp-out03.alice-dsl.net (smtp-out03.alice-dsl.net [88.44.63.5]) by cuda.sgi.com with ESMTP id KAKNnSI6KCMaM6BG for ; Fri, 16 May 2008 04:35:32 -0700 (PDT) Received: from out.alice-dsl.de ([192.168.125.59]) by smtp-out03.alice-dsl.net with Microsoft SMTPSVC(6.0.3790.1830); Fri, 16 May 2008 13:28:30 +0200 Received: from basil.firstfloor.org ([78.53.157.183]) by out.alice-dsl.de with Microsoft SMTPSVC(6.0.3790.1830); Fri, 16 May 2008 13:23:14 +0200 Received: by basil.firstfloor.org (Postfix, from userid 1000) id A8A4F1B41FD; Fri, 16 May 2008 13:30:15 +0200 (CEST) To: Hubert Verstraete Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Subject: Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 From: Andi Kleen References: <47D90614.9040206@free.fr> <18408.36753.223347.129420@notabene.brown> <47E92EE2.1080108@free.fr> <20080326065232.GA21970@percy.comedia.it> <47EA71BF.8050800@tmr.com> <47EA8CF4.7080201@free.fr> <47EA99AD.9060400@free.fr> <482D6388.7040602@free.fr> Date: Fri, 16 May 2008 13:30:15 +0200 In-Reply-To: <482D6388.7040602@free.fr> (Hubert Verstraete's message of "Fri, 16 May 2008 12:35:52 +0200") Message-ID: <87fxsi32rc.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-OriginalArrivalTime: 16 May 2008 11:23:15.0113 (UTC) FILETIME=[3BA29190:01C8B747] X-Barracuda-Connect: smtp-out03.alice-dsl.net[88.44.63.5] X-Barracuda-Start-Time: 1210937733 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4078 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.1, rules version 3.1.50518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15946 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andi@firstfloor.org Precedence: bulk X-list: xfs Hubert Verstraete writes: > > The line 89 in libdisk/md.c is: "free(dfile2);" but it should have > remained "if (dfile2) free(dfile2);" because dfile2 is null in case > mkfs.xfs is run on an MD device. ISO-C free() is defined to do nothing on a NULL input. -Andi From owner-xfs@oss.sgi.com Fri May 16 06:15:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 06:15:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4GDF7Ri029494 for ; Fri, 16 May 2008 06:15:08 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id XAA00465; Fri, 16 May 2008 23:15:50 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4GDFnsT157072331; Fri, 16 May 2008 23:15:50 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4GDFmeS167874865; Fri, 16 May 2008 23:15:48 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 16 May 2008 23:15:48 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [PATCH] update check on valid sb fields being modified on mount Message-ID: <20080516131548.GX103491721@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15947 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Recent changes to update the version number during mount (attr2 stuff) failed to change the assert that checked for calid flags being changed on mount. Clearly this path hasn't been exercised by the test code.... Signed-off-by: Dave Chinner --- fs/xfs/xfs_mount.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_mount.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_mount.c 2008-05-16 23:08:18.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_mount.c 2008-05-16 23:10:00.224848630 +1000 @@ -1887,7 +1887,8 @@ xfs_mount_log_sb( int error; ASSERT(fields & (XFS_SB_UNIT | XFS_SB_WIDTH | XFS_SB_UUID | - XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2)); + XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2 | + XFS_SB_VERSIONNUM)); tp = xfs_trans_alloc(mp, XFS_TRANS_SB_UNIT); error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, From owner-xfs@oss.sgi.com Fri May 16 06:49:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 06:50:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GDnwji032367 for ; Fri, 16 May 2008 06:49:59 -0700 X-ASG-Debug-ID: 1210945845-497301f20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ADD3D17D7B2 for ; Fri, 16 May 2008 06:50:45 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id xJlJuLCesUGHPLz0 for ; Fri, 16 May 2008 06:50:45 -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 sandeen.net (Postfix) with ESMTP id E82CAAC08E4; Fri, 16 May 2008 08:50:43 -0500 (CDT) Message-ID: <482D9133.8030403@sandeen.net> Date: Fri, 16 May 2008 08:50:43 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] update check on valid sb fields being modified on mount Subject: Re: [PATCH] update check on valid sb fields being modified on mount References: <20080516131548.GX103491721@sgi.com> In-Reply-To: <20080516131548.GX103491721@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: 1210945846 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.1, rules version 3.1.50529 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15948 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs David Chinner wrote: > Recent changes to update the version number during mount > (attr2 stuff) failed to change the assert that checked for > calid flags being changed on mount. Clearly this path hasn't > been exercised by the test code.... > > Signed-off-by: Dave Chinner > --- > fs/xfs/xfs_mount.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > Index: 2.6.x-xfs-new/fs/xfs/xfs_mount.c > =================================================================== > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_mount.c 2008-05-16 23:08:18.000000000 +1000 > +++ 2.6.x-xfs-new/fs/xfs/xfs_mount.c 2008-05-16 23:10:00.224848630 +1000 > @@ -1887,7 +1887,8 @@ xfs_mount_log_sb( > int error; > > ASSERT(fields & (XFS_SB_UNIT | XFS_SB_WIDTH | XFS_SB_UUID | > - XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2)); > + XFS_SB_FEATURES2 | XFS_SB_BAD_FEATURES2 | > + XFS_SB_VERSIONNUM)); > > tp = xfs_trans_alloc(mp, XFS_TRANS_SB_UNIT); > error = xfs_trans_reserve(tp, 0, mp->m_sb.sb_sectsize + 128, 0, 0, > > Ah, looks like this is from: /* update sb_versionnum for the clearing of the morebits */ if (!sbp->sb_features2) update_flags |= XFS_SB_VERSIONNUM; when attr2 gets turned back off? Anyway, looks fine. -Eric From owner-xfs@oss.sgi.com Fri May 16 10:10:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 10:11:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=BAYES_00,J_CHICKENPOX_29, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GHAvua024912 for ; Fri, 16 May 2008 10:10:58 -0700 X-ASG-Debug-ID: 1210957905-5ccc015c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C8027B76CAE for ; Fri, 16 May 2008 10:11:45 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id sqg6BSHCATlTHl2D for ; Fri, 16 May 2008 10:11:45 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id D55DFDEE5C; Fri, 16 May 2008 18:16:08 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id KN6TmHweCfab; Fri, 16 May 2008 17:40:09 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id 41B9ADEE25; Fri, 16 May 2008 18:15:56 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1Jx3St-0007Mh-Gm; Fri, 16 May 2008 18:11:31 +0100 Message-ID: <482DC043.5000307@dgreaves.com> Date: Fri, 16 May 2008 18:11:31 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: David Chinner CC: LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Regression- XFS won't mount on partitioned md array Subject: Regression- XFS won't mount on partitioned md array X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1210957905 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0427 1.0000 -1.7456 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.25 X-Barracuda-Spam-Status: No, SCORE=-1.25 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.1, rules version 3.1.50539 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15949 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs I just attempted a kernel upgrade from 2.6.20.7 to 2.6.25.3 and it no longer mounts my xfs filesystem. I bisected it to around a67d7c5f5d25d0b13a4dfb182697135b014fa478 [XFS] Move platform specific mount option parse out of core XFS code I have a RAID5 array with partitions: Partition Table for /dev/md_d0 First Last # Type Sector Sector Offset Length Filesystem Type (ID) Flag -- ------- ----------- ----------- ------ ----------- -------------------- ---- 1 Primary 0 2500288279 4 2500288280 Linux (83) None 2 Primary 2500288280 2500483583 0 195304 Non-FS data (DA) None when I attempt to mount /media: /dev/md_d0p1 /media xfs rw,nobarrier,noatime,logdev=/dev/md_d0p2,allocsize=512m 0 0 I get: md_d0: p1 p2 XFS mounting filesystem md_d0p1 attempt to access beyond end of device md_d0p2: rw=0, want=195311, limit=195304 I/O error in filesystem ("md_d0p1") meta-data dev md_d0p2 block 0x2fae7 ("xlog_bread") error 5 buf count 512 XFS: empty log check failed XFS: log mount/recovery failed: error 5 XFS: log mount failed A repair: xfs_repair /dev/md_d0p1 -l /dev/md_d0p2 gives no errors. Phase 1 - find and verify superblock... Phase 2 - using external log on /dev/md_d0p2 - zero log... - scan filesystem freespace and inode maps... - found root inode chunk ... David From owner-xfs@oss.sgi.com Fri May 16 10:16:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 10:16:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_29, J_CHICKENPOX_62,RDNS_NONE,SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GHG1q9025671 for ; Fri, 16 May 2008 10:16:01 -0700 X-ASG-Debug-ID: 1210958209-535502b30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A127616D943D for ; Fri, 16 May 2008 10:16:49 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id lItoQO8iKQowUMlm for ; Fri, 16 May 2008 10:16:49 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 86FB81C005E1A; Fri, 16 May 2008 13:16:48 -0400 (EDT) Date: Fri, 16 May 2008 13:16:48 -0400 (EDT) From: Justin Piszcz To: David Greaves cc: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array In-Reply-To: <482DC043.5000307@dgreaves.com> Message-ID: References: <482DC043.5000307@dgreaves.com> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1210958209 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.1, rules version 3.1.50541 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15950 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Fri, 16 May 2008, David Greaves wrote: > I just attempted a kernel upgrade from 2.6.20.7 to 2.6.25.3 and it no longer > mounts my xfs filesystem. > > I bisected it to around > a67d7c5f5d25d0b13a4dfb182697135b014fa478 > [XFS] Move platform specific mount option parse out of core XFS code > > I have a RAID5 array with partitions: > > Partition Table for /dev/md_d0 > > First Last > # Type Sector Sector Offset Length Filesystem Type (ID) Flag > -- ------- ----------- ----------- ------ ----------- -------------------- ---- > 1 Primary 0 2500288279 4 2500288280 Linux (83) None > 2 Primary 2500288280 2500483583 0 195304 Non-FS data (DA) None > > > when I attempt to mount /media: > /dev/md_d0p1 /media xfs rw,nobarrier,noatime,logdev=/dev/md_d0p2,allocsize=512m 0 0 > > I get: > md_d0: p1 p2 > XFS mounting filesystem md_d0p1 > attempt to access beyond end of device > md_d0p2: rw=0, want=195311, limit=195304 > I/O error in filesystem ("md_d0p1") meta-data dev md_d0p2 block 0x2fae7 > ("xlog_bread") error 5 buf count 512 > XFS: empty log check failed > XFS: log mount/recovery failed: error 5 > XFS: log mount failed > > A repair: > xfs_repair /dev/md_d0p1 -l /dev/md_d0p2 > gives no errors. > > Phase 1 - find and verify superblock... > Phase 2 - using external log on /dev/md_d0p2 > - zero log... > - scan filesystem freespace and inode maps... > - found root inode chunk > ... > > > David > > Ouch, still on 2.6.25.1 here, didn't reboot yet, but I do not use mdraid'ed partitions, just regular mdraid, if you boot back to 2.6.20.7 does it work again? From owner-xfs@oss.sgi.com Fri May 16 11:04:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 11:04:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_62, RDNS_NONE,SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GI4FVZ028591 for ; Fri, 16 May 2008 11:04:17 -0700 X-ASG-Debug-ID: 1210961102-7e8d03480000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 89F6A16D991A for ; Fri, 16 May 2008 11:05:03 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id lT856gfLUUb7eioC for ; Fri, 16 May 2008 11:05:03 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 2ABDBDEC82; Fri, 16 May 2008 19:09:27 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id y68T1QYCEY-8; Fri, 16 May 2008 18:33:26 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id F289EDEB86; Fri, 16 May 2008 19:09:26 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1Jx4If-0007Y0-VV; Fri, 16 May 2008 19:05:02 +0100 Message-ID: <482DCCCD.8020503@dgreaves.com> Date: Fri, 16 May 2008 19:05:01 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Justin Piszcz CC: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> In-Reply-To: X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1210961103 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0011 1.0000 -2.0142 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.50543 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15951 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs > Ouch, still on 2.6.25.1 here, didn't reboot yet, but I do not use > mdraid'ed partitions, just regular mdraid, if you boot back to 2.6.20.7 > does it work again? Yes, no probs. It came in prior to 2.6.25-rc1 The machine has a root xfs filesystem with an internal log on a sata disk and a data filesystem on a partitioned array with an external log (also on the partitioned array). Only the partitioned array/external-log filesystem is affected. David From owner-xfs@oss.sgi.com Fri May 16 11:34:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 11:34:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=BAYES_00,J_CHICKENPOX_62, RDNS_NONE,SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GIYlxP030448 for ; Fri, 16 May 2008 11:34:49 -0700 X-ASG-Debug-ID: 1210962933-57b600d20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from gv-out-0910.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 63C8716D9871 for ; Fri, 16 May 2008 11:35:33 -0700 (PDT) Received: from gv-out-0910.google.com (gv-out-0910.google.com [216.239.58.191]) by cuda.sgi.com with ESMTP id wIlIL5PDeKvrNwIC for ; Fri, 16 May 2008 11:35:33 -0700 (PDT) Received: by gv-out-0910.google.com with SMTP id n29so125795gve.9 for ; Fri, 16 May 2008 11:35:32 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=ox80v/PJQVABPN+sgcy64p9o3Uy45Y47GNMt+QjvN90=; b=wWA6RGKhOJ0d3NhzCMi9whfiBhph/itIm4m2XoBXTtGwgCBnKDojtIv6ZJKL1V4GdfOufCRW+kP9/seAa2i/xTTp9Td7QAYVast9j7I7X16PeUgdAXsliVoq1HsONZvom33z7b1SonZnwJhhh+YJSvdwx2mn1OLgGO6ZJqvyqc4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=eKgwXR+ZAWiPitXjwTe13ehc19VTdjf1J2lm8CxwE8r9T7Lfkb22S9LizuQwTJTnvCJ/AtwjCDS11oy46/fN6dBotniCzQ0ocNwrZIhtH+5Le+agJJpCxWOQjMA2cx1I74WowvRy6WG92F+uvsP8t2AgcQY2rmHVlo1s3Nme8zQ= Received: by 10.124.47.38 with SMTP id u38mr2887335mku.175.1210962932591; Fri, 16 May 2008 11:35:32 -0700 (PDT) Received: by 10.86.83.20 with HTTP; Fri, 16 May 2008 11:35:32 -0700 (PDT) Message-ID: <6101e8c40805161135w7470123uaac93ca59caee026@mail.gmail.com> Date: Fri, 16 May 2008 20:35:32 +0200 From: "Oliver Pinter" To: "David Greaves" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array Cc: "Justin Piszcz" , "David Chinner" , LinuxRaid , xfs@oss.sgi.com, "linux-kernel@vger.kernel.org" In-Reply-To: <482DCCCD.8020503@dgreaves.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <482DC043.5000307@dgreaves.com> <482DCCCD.8020503@dgreaves.com> X-Barracuda-Connect: gv-out-0910.google.com[216.239.58.191] X-Barracuda-Start-Time: 1210962934 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.1, rules version 3.1.50545 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15952 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: oliver.pntr@gmail.com Precedence: bulk X-list: xfs this[1] patch fixed? this patch is for 2.6.25.5 kernel 1: http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git;a=blob;f=queue-2.6.25/block-do_mounts-accept-root-non-existant-partition.patch;h=097cda9928b434994dbb157065b2ca38e7cec3a1;hb=8cc4c3b370d59deb16c2e92165a466c82e914020 On 5/16/08, David Greaves wrote: >> Ouch, still on 2.6.25.1 here, didn't reboot yet, but I do not use >> mdraid'ed partitions, just regular mdraid, if you boot back to 2.6.20.7 >> does it work again? > Yes, no probs. > > It came in prior to 2.6.25-rc1 > The machine has a root xfs filesystem with an internal log on a sata disk > and a > data filesystem on a partitioned array with an external log (also on the > partitioned array). > Only the partitioned array/external-log filesystem is affected. > > David > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Thanks, Oliver From owner-xfs@oss.sgi.com Fri May 16 11:58:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 11:58:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_29, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GIwRwt032088 for ; Fri, 16 May 2008 11:58:27 -0700 X-ASG-Debug-ID: 1210964355-4dd4019e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4FF21118A9C3 for ; Fri, 16 May 2008 11:59:15 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 7yyO9zuneEcEKwTv for ; Fri, 16 May 2008 11:59: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 sandeen.net (Postfix) with ESMTP id 6B5A8AC08CA; Fri, 16 May 2008 13:59:14 -0500 (CDT) Message-ID: <482DD981.5070004@sandeen.net> Date: Fri, 16 May 2008 13:59:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Greaves CC: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> In-Reply-To: <482DC043.5000307@dgreaves.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: 1210964356 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.1, rules version 3.1.50546 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15953 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs David Greaves wrote: > I just attempted a kernel upgrade from 2.6.20.7 to 2.6.25.3 and it no longer > mounts my xfs filesystem. > > I bisected it to around > a67d7c5f5d25d0b13a4dfb182697135b014fa478 > [XFS] Move platform specific mount option parse out of core XFS code around that... not exactly? That commit should have been largely a code move, which is not to say that it can't contain a bug... :) > I have a RAID5 array with partitions: > > Partition Table for /dev/md_d0 > > First Last > # Type Sector Sector Offset Length Filesystem Type (ID) Flag > -- ------- ----------- ----------- ------ ----------- -------------------- ---- > 1 Primary 0 2500288279 4 2500288280 Linux (83) None > 2 Primary 2500288280 2500483583 0 195304 Non-FS data (DA) None > > > when I attempt to mount /media: > /dev/md_d0p1 /media xfs rw,nobarrier,noatime,logdev=/dev/md_d0p2,allocsize=512m 0 0 mythbox? :) Hm, so it's the external log size that it doesn't much like... > I get: > md_d0: p1 p2 > XFS mounting filesystem md_d0p1 > attempt to access beyond end of device > md_d0p2: rw=0, want=195311, limit=195304 what does /proc/partitions say about md_d0p1 and p2? Is it different between the older & newer kernel? What does xfs_info /mount/point say about the filesystem when you mount it under the older kernel? Or... if you can't mount it, xfs_db -r -c "sb 0" -c p /dev/md_d0p1 -Eric From owner-xfs@oss.sgi.com Fri May 16 13:34:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 13:34:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4GKYoHS010614 for ; Fri, 16 May 2008 13:34:51 -0700 X-ASG-Debug-ID: 1210970137-7e9c01100000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1C47316DA3A7 for ; Fri, 16 May 2008 13:35:37 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id BLfM7bJFabfEx1y8 for ; Fri, 16 May 2008 13:35:37 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id AD51A322813 for ; Fri, 16 May 2008 22:35:15 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 726093227FB for ; Fri, 16 May 2008 22:35:15 +0200 (CEST) Date: Fri, 16 May 2008 22:27:55 +0200 From: Emmanuel Florac To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS filesystem reports as full though it isn't Subject: XFS filesystem reports as full though it isn't Message-ID: <20080516222755.3e557c00@galadriel.home> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1210970139 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0464 1.0000 -1.7228 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.72 X-Barracuda-Spam-Status: No, SCORE=-1.72 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.1, rules version 3.1.50553 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15954 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs I have a 64 bits (x86_64) machine running Linux 2.6.22.19 with a 24TB XFS filesystem. There are some 15TB of data on it. All is well, no error except that I can't create a single file (touch foo : no space left on device). I don't understand what can be going wrong... History : this filesystem was extended (xfs_growfs) from 16TB to 24. I've tought about all XFS problems I can remember of; first, inode exhaustion : cluster1:/proc/sys/fs# df -i Sys. de fich. Inodes IUtil. ILib. %IUti. Mont?sur /dev/sda1 0 0 0 - / tmpfs 2058624 3 2058621 1% /lib/init/rw udev 2058624 1445 2057179 1% /dev tmpfs 2058624 1 2058623 1% /dev/shm /dev/mapper/vg0-lv0 25379856384 4287 25379852097 1% /mnt/raid OK so there's still plenty of inodes available here, that should be OK. Then maybe we have something wrong elsewhere : cluster1:/proc/sys/fs# xfs_db -r -c 'freesp -s -a 0' /dev/vg0/lv0 from to extents blocks pct 1 1 5 5 71.43 2 3 1 2 28.57 total free extents 6 total free blocks 7 average free extent size 1.16667 7 blocks free? But there are 9 TB of free space! Here is the output from xfs_info /dev/vg0/lv0 meta-data=/dev/vg0/lv0 isize=256 agcount=47, agsize=137245616 blks = sectsz=512 attr=0 data = bsize=4096 blocks=6344964096, imaxpct=25 = sunit=16 swidth=32 blks, unwritten=1 naming =version 2 bsize=4096 log =internal bsize=4096 blocks=32768, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=131072 blocks=0, rtextents=0 I fail to see nothing special there however. The only significant thing I see is that the FS is really close to 16 TB of allocated data (15.7TB). I tried mounting it with "inode64" option with no more loving. Any help would be tremendously welcome. Users are starving for more space and they can't even create a single file! -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Fri May 16 17:55:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 16 May 2008 17:55:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4H0t3KT001277 for ; Fri, 16 May 2008 17:55:04 -0700 X-ASG-Debug-ID: 1210985751-70fb00b30000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from jackfruit.srv.cs.cmu.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D3393B7ABD5 for ; Fri, 16 May 2008 17:55:51 -0700 (PDT) Received: from jackfruit.srv.cs.cmu.edu (JACKFRUIT.SRV.CS.CMU.EDU [128.2.201.16]) by cuda.sgi.com with ESMTP id 0TWAala0YgGvKAne for ; Fri, 16 May 2008 17:55:51 -0700 (PDT) Received: from starfruit.srv.cs.cmu.edu (STARFRUIT.SRV.CS.CMU.EDU [128.2.203.59]) by jackfruit.srv.cs.cmu.edu (8.13.6/8.13.6) with ESMTP id m4H0tkS0013484 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 16 May 2008 20:55:50 -0400 (EDT) Received: from starfruit.srv.cs.cmu.edu (localhost [127.0.0.1]) by starfruit.srv.cs.cmu.edu (8.13.6/8.13.6) with ESMTP id m4H0tkCO012196 for ; Fri, 16 May 2008 20:55:46 -0400 (EDT) Received: (from cyrus@localhost) by starfruit.srv.cs.cmu.edu (8.13.6/8.13.6/Submit) id m4H0tk1P012195 for linux-xfs@oss.sgi.com; Fri, 16 May 2008 20:55:46 -0400 (EDT) X-Authentication-Warning: starfruit.srv.cs.cmu.edu: cyrus set sender to <> using -f Message-ID: Date: Fri, 16 May 2008 20:55:46 -0400 X-Sieve: CMU Sieve 2.2 From: To: X-ASG-Orig-Subj: Out of the Office Subject: Out of the Office In-Reply-To: <200805170055.m4H0tfUe010424@toasties.srv.cs.cmu.edu> Auto-Submitted: auto-replied (vacation) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: JACKFRUIT.SRV.CS.CMU.EDU[128.2.201.16] X-Barracuda-Start-Time: 1210985752 X-Barracuda-Bayes: INNOCENT GLOBAL 0.6187 1.0000 0.8410 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.39 X-Barracuda-Spam-Status: No, SCORE=1.39 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.1, rules version 3.1.50570 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.55 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15955 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cleah@cs.cmu.edu Precedence: bulk X-list: xfs I will be away from the office until May 12th however I will still read email. It may take a little longer to get back to you but I will. Have a nice day. -- Thanks, Cleah From owner-xfs@oss.sgi.com Sat May 17 07:46:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 07:46:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_29, RDNS_NONE,SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HEk7ZP025934 for ; Sat, 17 May 2008 07:46:09 -0700 X-ASG-Debug-ID: 1211035615-2f8903830000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1EB151B95618 for ; Sat, 17 May 2008 07:46:55 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id OdzABENfs3T4QTzv for ; Sat, 17 May 2008 07:46:55 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 37B64DECBC; Sat, 17 May 2008 15:51:24 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id Ybe8bgyHA6YE; Sat, 17 May 2008 15:14:40 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id C2F63DECC5; Sat, 17 May 2008 15:51:23 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1JxNgR-0003uU-6w; Sat, 17 May 2008 15:46:51 +0100 Message-ID: <482EEFDA.50101@dgreaves.com> Date: Sat, 17 May 2008 15:46:50 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Eric Sandeen CC: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> In-Reply-To: <482DD981.5070004@sandeen.net> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1211035616 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.1, rules version 3.1.50625 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15956 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > David Greaves wrote: >> I just attempted a kernel upgrade from 2.6.20.7 to 2.6.25.3 and it no longer >> mounts my xfs filesystem. >> >> I bisected it to around >> a67d7c5f5d25d0b13a4dfb182697135b014fa478 >> [XFS] Move platform specific mount option parse out of core XFS code > > around that... not exactly? That commit should have been largely a code > move, which is not to say that it can't contain a bug... :) I got to within 4 on the bisect and my xfs partition containing the kernel src and the bisect history blew up telling me that files were directories and then exploding in a heap of lost+found/ fragments. Quite, erm, "interesting" really. At that point I decided I was close enough to ask for advice, looked at the commits and took this one as the most likely to cause the bug :) But, thinking about it, I can decode the kernel extraversion tags in /boot. From that I think my bounds were: 40ebd81d1a7635cf92a59c387a599fce4863206b [XFS] Use kernel-supplied "roundup_pow_of_two" for simplicity and: 3ed6526441053d79b85d206b14d75125e6f51cc2 [XFS] Implement fallocate. so those bound: [XFS] Remove the BPCSHIFT and NB* based macros from XFS. [XFS] Remove bogus assert [XFS] optimize XFS_IS_REALTIME_INODE w/o realtime config [XFS] Move platform specific mount option parse out of core XFS code and just glancing through the patches I didn't see any changes that looked likely in the others... > >> I have a RAID5 array with partitions: >> >> Partition Table for /dev/md_d0 >> >> First Last >> # Type Sector Sector Offset Length Filesystem Type (ID) Flag >> -- ------- ----------- ----------- ------ ----------- -------------------- ---- >> 1 Primary 0 2500288279 4 2500288280 Linux (83) None >> 2 Primary 2500288280 2500483583 0 195304 Non-FS data (DA) None >> >> >> when I attempt to mount /media: >> /dev/md_d0p1 /media xfs rw,nobarrier,noatime,logdev=/dev/md_d0p2,allocsize=512m 0 0 > > mythbox? :) Hey - we test some interesting corner cases... :) My *wife* just told *me* to buy, and I quote "No more than 10" 1Tb Samsung drives... I decided 5 would be plenty. > Hm, so it's the external log size that it doesn't much like... Yep - I noticed that - and ISTR that Neil has been fiddling in the md partitioning code over the last 6 months or so. I wondered where it got the larger figure from and if, somehow, md was changing the partition size somehow... >> I get: >> md_d0: p1 p2 >> XFS mounting filesystem md_d0p1 >> attempt to access beyond end of device >> md_d0p2: rw=0, want=195311, limit=195304 > > what does /proc/partitions say about md_d0p1 and p2? Is it different > between the older & newer kernel? 2.6.20.7 (good) 254 0 1250241792 md_d0 254 1 1250144138 md_d0p1 254 2 97652 md_d0p2 2.6.25.3 (bad) 254 0 1250241792 md_d0 254 1 1250144138 md_d0p1 254 2 97652 md_d0p2 2.6.25.4 (bad) 254 0 1250241792 md_d0 254 1 1250144138 md_d0p1 254 2 97652 md_d0p2 So nothing obvious there then... > > What does xfs_info /mount/point say about the filesystem when you mount > it under the older kernel? Or... if you can't mount it, teak:~# xfs_info /media/ meta-data=/dev/md_d0p1 isize=256 agcount=32, agsize=9766751 blks = sectsz=512 attr=0 data = bsize=4096 blocks=312536032, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 log =external bsize=4096 blocks=24413, version=2 = sectsz=512 sunit=0 blks, lazy-count=0 realtime =none extsz=65536 blocks=0, rtextents=0 From owner-xfs@oss.sgi.com Sat May 17 07:47:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 07:47:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HElJ9q026153 for ; Sat, 17 May 2008 07:47:20 -0700 X-ASG-Debug-ID: 1211035687-226501340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2ECE278FE3F for ; Sat, 17 May 2008 07:48:07 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id aZZM11wbKEWXGDzC for ; Sat, 17 May 2008 07:48:07 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 2A7BADED1A; Sat, 17 May 2008 15:52:37 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id ia2Mc05tneM5; Sat, 17 May 2008 15:15:52 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id D83C5DECCF; Sat, 17 May 2008 15:52:36 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1JxNhe-0003ue-LI; Sat, 17 May 2008 15:48:06 +0100 Message-ID: <482EF026.9000206@dgreaves.com> Date: Sat, 17 May 2008 15:48:06 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Oliver Pinter CC: Justin Piszcz , David Chinner , LinuxRaid , xfs@oss.sgi.com, "linux-kernel@vger.kernel.org" , Eric Sandeen X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DCCCD.8020503@dgreaves.com> <6101e8c40805161135w7470123uaac93ca59caee026@mail.gmail.com> In-Reply-To: <6101e8c40805161135w7470123uaac93ca59caee026@mail.gmail.com> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1211035688 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0197 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.1, rules version 3.1.50627 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15957 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs Oliver Pinter wrote: > this[1] patch fixed? > > 1: http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git;a=blob;f=queue-2.6.25/block-do_mounts-accept-root-non-existant-partition.patch;h=097cda9928b434994dbb157065b2ca38e7cec3a1;hb=8cc4c3b370d59deb16c2e92165a466c82e914020 Looks like a possible candidate - thanks. I think this patch is for mounting root on an md device when the partitions aren't yet initialised. However: * When I run cfdisk I can read the partition table. * Subsequent attempts to mount the xfs when /proc/partitions is clearly present still fail. > this patch is for 2.6.25.5 kernel ? there isn't a 2.6.25.5 It doesn't apply to 2.6.25.4 I'll see if I can make it apply... David From owner-xfs@oss.sgi.com Sat May 17 08:16:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 08:17:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HFGRpZ027176 for ; Sat, 17 May 2008 08:16:37 -0700 X-ASG-Debug-ID: 1211037412-552502300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 05B7616DF224 for ; Sat, 17 May 2008 08:16:52 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id D0q01cWSKe5cCixf for ; Sat, 17 May 2008 08:16:52 -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 sandeen.net (Postfix) with ESMTP id 5143FAC08DE; Sat, 17 May 2008 10:15:52 -0500 (CDT) Message-ID: <482EF6A7.2020909@sandeen.net> Date: Sat, 17 May 2008 10:15:51 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Greaves CC: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> In-Reply-To: <482EEFDA.50101@dgreaves.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: 1211037431 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.1, rules version 3.1.50627 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15958 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs David Greaves wrote: > Eric Sandeen wrote: >>> I get: >>> md_d0: p1 p2 >>> XFS mounting filesystem md_d0p1 >>> attempt to access beyond end of device >>> md_d0p2: rw=0, want=195311, limit=195304 >> what does /proc/partitions say about md_d0p1 and p2? Is it different >> between the older & newer kernel? ... > 2.6.25.4 (bad) > 254 0 1250241792 md_d0 > 254 1 1250144138 md_d0p1 > 254 2 97652 md_d0p2 > > So nothing obvious there then... > >> What does xfs_info /mount/point say about the filesystem when you mount >> it under the older kernel? Or... if you can't mount it, > teak:~# xfs_info /media/ > meta-data=/dev/md_d0p1 isize=256 agcount=32, agsize=9766751 blks > = sectsz=512 attr=0 > data = bsize=4096 blocks=312536032, imaxpct=25 > = sunit=0 swidth=0 blks > naming =version 2 bsize=4096 > log =external bsize=4096 blocks=24413, version=2 > = sectsz=512 sunit=0 blks, lazy-count=0 > realtime =none extsz=65536 blocks=0, rtextents=0 ok, and with: > Partition Table for /dev/md_d0 > > First Last > # Type Sector Sector Offset Length Filesystem Type (ID) Flag > -- ------- ----------- ----------- ------ ----------- -------------------- ---- > 1 Primary 0 2500288279 4 2500288280 Linux (83) None > 2 Primary 2500288280 2500483583 0 195304 Non-FS data (DA) None So, xfs thinks the external log is 24413 4k blocks (from the sb geometry printed by xfs_info). This is 97652 1k units (matching your /proc/partitions output) and 195304 512-byte sectors (matching the partition table output). So that all looks consistent. So if xfs is doing: >>> md_d0p2: rw=0, want=195311, limit=195304 >>> XFS: empty log check failed it surely does seem to be trying to read past the end of what even it thinks is the end of its log. And, with your geometry I can reproduce this w/o md, partitioned or not. So looks like xfs itself is busted: loop5: rw=0, want=195311, limit=195304 I'll see if I have a little time today to track down the problem. Thanks, -Eric From owner-xfs@oss.sgi.com Sat May 17 09:03:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 09:03:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.7 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HG36sA001003 for ; Sat, 17 May 2008 09:03:06 -0700 X-ASG-Debug-ID: 1211038249-7d7100e70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 50B5516DF5E6 for ; Sat, 17 May 2008 08:30:49 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id fWDNGyoJu1exZNQ5 for ; Sat, 17 May 2008 08:30:49 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 18A37DECA7; Sat, 17 May 2008 16:25:19 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id e8haUOnVEcOO; Sat, 17 May 2008 15:48:33 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id D9255DEC5F; Sat, 17 May 2008 16:25:18 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1JxODI-00044W-EI; Sat, 17 May 2008 16:20:48 +0100 Message-ID: <482EF7D0.2030309@dgreaves.com> Date: Sat, 17 May 2008 16:20:48 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Oliver Pinter CC: Justin Piszcz , David Chinner , LinuxRaid , xfs@oss.sgi.com, "linux-kernel@vger.kernel.org" , Eric Sandeen X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DCCCD.8020503@dgreaves.com> <6101e8c40805161135w7470123uaac93ca59caee026@mail.gmail.com> <482EF026.9000206@dgreaves.com> In-Reply-To: <482EF026.9000206@dgreaves.com> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1211038254 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0012 1.0000 -2.0130 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.50629 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15959 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs David Greaves wrote: > Oliver Pinter wrote: >> this[1] patch fixed? >> >> 1: > http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git;a=blob;f=queue-2.6.25/block-do_mounts-accept-root-non-existant-partition.patch;h=097cda9928b434994dbb157065b2ca38e7cec3a1;hb=8cc4c3b370d59deb16c2e92165a466c82e914020 > > > Looks like a possible candidate - thanks. > > I think this patch is for mounting root on an md device when the partitions > aren't yet initialised. > > However: > * When I run cfdisk I can read the partition table. > * Subsequent attempts to mount the xfs when /proc/partitions is clearly present > still fail. > >> this patch is for 2.6.25.5 kernel > ? there isn't a 2.6.25.5 Sorry, I understand; it's queued for 2.6.25.5. > It doesn't apply to 2.6.25.4 > > I'll see if I can make it apply... Yep - it was download corruption. Applied but it didn't help. David From owner-xfs@oss.sgi.com Sat May 17 11:22:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 11:22:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HIMD63012861 for ; Sat, 17 May 2008 11:22:15 -0700 X-ASG-Debug-ID: 1211048580-718703b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.betherenow.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 38DAA16DFC99 for ; Sat, 17 May 2008 11:23:01 -0700 (PDT) Received: from smtp1.betherenow.co.uk (smtp1.betherenow.co.uk [87.194.0.68]) by cuda.sgi.com with SMTP id sc1Aa2Di2BZitwjg for ; Sat, 17 May 2008 11:23:01 -0700 (PDT) Received: from damocles.lan (87-194-153-38.bethere.co.uk [87.194.153.38]) by smtp1.betherenow.co.uk (Postfix) with ESMTP id 23A8D2920FE; Sat, 17 May 2008 19:22:56 +0100 (BST) From: Alistair John Strachan To: Jens Axboe X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Date: Sat, 17 May 2008 19:22:56 +0100 User-Agent: KMail/1.9.9 Cc: Linus Torvalds , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org References: <20080512164920.GE16217@kernel.dk> In-Reply-To: <20080512164920.GE16217@kernel.dk> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805171922.56272.alistair@devzero.co.uk> X-Barracuda-Connect: smtp1.betherenow.co.uk[87.194.0.68] X-Barracuda-Start-Time: 1211048582 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.1, rules version 3.1.50641 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15960 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alistair@devzero.co.uk Precedence: bulk X-list: xfs (Added LKML CC) On Monday 12 May 2008 17:49:20 Jens Axboe wrote: > On Mon, May 12 2008, Linus Torvalds wrote: > > On Mon, 12 May 2008, Alistair John Strachan wrote: > > > I've been getting this since -rc1. It's still present in -rc2, so I > > > thought I'd bug some people. Everything seems to be working fine. > > > > Hmm. The problem is that blk_remove_plug() does a non-atomic > > > > queue_flag_clear(QUEUE_FLAG_PLUGGED, q); > > > > without holding the queue lock. > > > > Now, sometimes that's ok, because of higher-level locking on the same > > queue, so there is no possibility of any races. > > > > And yes, this comes through the raid5 layer, and yes, the raid layer > > holds the 'device_lock' on the raid5_conf_t, so it's all safe from other > > accesses by that raid5 configuration, but I wonder if at least in theory > > somebody could access that same device directly. > > > > So I do suspect that this whole situation with md needs to be resolved > > some way. Either the queue is already safe (because of md layer locking), > > and in that case maybe the queue lock should be changed to point to that > > md layer lock (or that sanity test simply needs to be removed). Or the > > queue is unsafe (because non-md users can find it too), and we need to > > fix the locking. > > > > Alternatively, we may just need to totally revert the thing that made the > > bit operations non-atomic and depend on the locking. This was introduced > > by Nick in commit 75ad23bc0fcb4f992a5d06982bf0857ab1738e9e ("block: make > > queue flags non-atomic"), and maybe it simply isn't viable. > > There's been a proposed patch for at least a week, so Neil just needs to > send it in... (I could be perverting this report a bit by reporting something possibly not related, but I have a gut feeling about this..) So I applied Neil's patch which is now upstream to 2.6.26-rc2 and the warning did go away. But I later found that I have another problem: if I copy more than my free memory's worth of data, my machine hangs mysteriously. My guess is that when the kernel runs out of MemFree and starts reclaiming the cache, something is deadlocking somewhere. Just doing a: cat /dev/zero >/path/to/file Is enough to reproduce it. Doing this on my stacked XFS+md+libata causes a hang, but if I try to reproduce on the only other filesystem I have handy (a FUSE/ntfs-3g mounted NTFS partition) cache reclaim seems to work fine. Maybe this test is contrived in a million different ways, but it would seem to indicate the bug lies either in XFS or md. I don't have any disks handy at the moment to try another filesystem on top of md (to eliminate md), and I've not yet tried enabling any kernel debugging options. When the machine hangs, all disk I/O stops permanently. No logging messages are shown. Does anybody have any ideas about what to try or switch on to debug this problem? -- Cheers, Alistair. 137/1 Warrender Park Road, Edinburgh, UK. From owner-xfs@oss.sgi.com Sat May 17 11:37:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 11:37:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HIbSNW014144 for ; Sat, 17 May 2008 11:37:29 -0700 X-ASG-Debug-ID: 1211049496-4f7d00700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.linux-foundation.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7BEFC1B95BD0 for ; Sat, 17 May 2008 11:38:17 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id u0ZS5CnYEdRkAJ3V for ; Sat, 17 May 2008 11:38:17 -0700 (PDT) Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HIbbnI020045 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 17 May 2008 11:37:38 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HIbZcb011130; Sat, 17 May 2008 11:37:36 -0700 Date: Sat, 17 May 2008 11:37:35 -0700 (PDT) From: Linus Torvalds To: Alistair John Strachan cc: Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) In-Reply-To: <200805171922.56272.alistair@devzero.co.uk> Message-ID: References: <20080512164920.GE16217@kernel.dk> <200805171922.56272.alistair@devzero.co.uk> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 X-Barracuda-Connect: smtp1.linux-foundation.org[140.211.169.13] X-Barracuda-Start-Time: 1211049497 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.1, rules version 3.1.50641 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15961 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: torvalds@linux-foundation.org Precedence: bulk X-list: xfs On Sat, 17 May 2008, Alistair John Strachan wrote: > > My guess is that when the kernel runs out of MemFree and starts reclaiming the > cache, something is deadlocking somewhere. Just doing a: > > cat /dev/zero >/path/to/file Do this on the console (and having a serial console or working netconsole is a wonderful thing to log it, because otherwise it will generally just scroll off the screen), and trigger SysRQ-w. That dumps all blocked tasks to the screen. You may need to do echo 1 > /proc/sys/kernel/sysrq before that to enable it. (Or if you have some things still running because they haevn't hit the lock that causes the deadlock, you can try echo w > /proc/sysrq-trigger rather than the key combination). Linus From owner-xfs@oss.sgi.com Sat May 17 11:40:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 11:40:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HIejaM014731 for ; Sat, 17 May 2008 11:40:46 -0700 X-ASG-Debug-ID: 1211049693-4f7d00a30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.linux-foundation.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2F26416DFCE2 for ; Sat, 17 May 2008 11:41:33 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id Pze1DTxfKNnJ4Sme for ; Sat, 17 May 2008 11:41:33 -0700 (PDT) Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HIfMdI020250 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 17 May 2008 11:41:23 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HIfKOe011299; Sat, 17 May 2008 11:41:21 -0700 Date: Sat, 17 May 2008 11:41:20 -0700 (PDT) From: Linus Torvalds To: Alistair John Strachan cc: Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) In-Reply-To: Message-ID: References: <20080512164920.GE16217@kernel.dk> <200805171922.56272.alistair@devzero.co.uk> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 X-Barracuda-Connect: smtp1.linux-foundation.org[140.211.169.13] X-Barracuda-Start-Time: 1211049694 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.1, rules version 3.1.50641 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15962 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: torvalds@linux-foundation.org Precedence: bulk X-list: xfs On Sat, 17 May 2008, Linus Torvalds wrote: > > Do this on the console (and having a serial console or working netconsole > is a wonderful thing to log it, because otherwise it will generally just > scroll off the screen), and trigger SysRQ-w. That dumps all blocked tasks > to the screen. Another thing to try is to enable lock debugging, and have CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y CONFIG_LOCKDEP=y CONFIG_DEBUG_LOCKDEP=y in your kernel .config file. It has performance implications, of course, but it can help debug incorrect locking much more quickly. Linus From owner-xfs@oss.sgi.com Sat May 17 13:09:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 13:09:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_33, J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HK9IYl026863 for ; Sat, 17 May 2008 13:09:18 -0700 X-ASG-Debug-ID: 1211055002-71cf02d80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.betherenow.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 1D119182CBC for ; Sat, 17 May 2008 13:10:02 -0700 (PDT) Received: from smtp1.betherenow.co.uk (smtp1.betherenow.co.uk [87.194.0.68]) by cuda.sgi.com with SMTP id MGbhW9OCohH8suBa for ; Sat, 17 May 2008 13:10:02 -0700 (PDT) Received: from damocles.lan (87-194-153-38.bethere.co.uk [87.194.153.38]) by smtp1.betherenow.co.uk (Postfix) with ESMTP id 078CF9804C; Sat, 17 May 2008 21:09:59 +0100 (BST) From: Alistair John Strachan To: Linus Torvalds X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Date: Sat, 17 May 2008 21:09:58 +0100 User-Agent: KMail/1.9.9 Cc: Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org References: <200805171922.56272.alistair@devzero.co.uk> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805172109.59244.alistair@devzero.co.uk> X-Barracuda-Connect: smtp1.betherenow.co.uk[87.194.0.68] X-Barracuda-Start-Time: 1211055004 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.1, rules version 3.1.50647 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15963 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alistair@devzero.co.uk Precedence: bulk X-list: xfs On Saturday 17 May 2008 19:37:35 Linus Torvalds wrote: > On Sat, 17 May 2008, Alistair John Strachan wrote: > > My guess is that when the kernel runs out of MemFree and starts > > reclaiming the cache, something is deadlocking somewhere. Just doing a: > > > > cat /dev/zero >/path/to/file > > Do this on the console (and having a serial console or working netconsole > is a wonderful thing to log it, because otherwise it will generally just > scroll off the screen), and trigger SysRQ-w. That dumps all blocked tasks > to the screen. I actually had the opposite problem, too little was showing. I guess this is because the log level the "SysRq : Show Blocked State" bit goes out on is higher than the level of the actual result, so it was being trapped by sysklogd. (I actually ended up getting netconsole working too, but it confusingly didn't dump any messages that sysklogd trapped either, so I'd get the "SysRq : Show Blocked State" message but nothing else. This isn't very user friendly.) Regardless, I managed to get a log. Thanks for the help Linus.. Both XFS and md are showing up: [ 0.000000] Linux version 2.6.26-rc2-damocles (root@damocles) (gcc version 4.2.4 20080512 (prerelease) (Debian 4.2.3-6)) #2 SMP PREEMPT Sat May 17 20:42:49 BST 2008 [ 0.000000] Command line: root=/dev/md1 ro mem=2000M iommu=off vga=791 quiet [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009e400 (usable) [ 0.000000] BIOS-e820: 000000000009e400 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 00000000cfee0000 (usable) [ 0.000000] BIOS-e820: 00000000cfee0000 - 00000000cfee3000 (ACPI NVS) [ 0.000000] BIOS-e820: 00000000cfee3000 - 00000000cfef0000 (ACPI data) [ 0.000000] BIOS-e820: 00000000cfef0000 - 00000000cff00000 (reserved) [ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved) [ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved) [ 0.000000] BIOS-e820: 0000000100000000 - 0000000130000000 (usable) [ 0.000000] Entering add_active_range(0, 0, 158) 0 entries of 256 used [ 0.000000] Entering add_active_range(0, 256, 512000) 1 entries of 256 used [ 0.000000] max_pfn_mapped = 1048576 [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] init_memory_mapping [ 0.000000] DMI 2.5 present. [ 0.000000] ACPI: RSDP 000F7860, 0014 (r0 IntelR) [ 0.000000] ACPI: RSDT CFEE3000, 0034 (r1 IntelR AWRDACPI 42302E31 AWRD 0) [ 0.000000] ACPI: FACP CFEE3080, 0074 (r1 IntelR AWRDACPI 42302E31 AWRD 0) [ 0.000000] ACPI: DSDT CFEE3100, 4D0B (r1 INTELR AWRDACPI 1000 MSFT 100000E) [ 0.000000] ACPI: FACS CFEE0000, 0040 [ 0.000000] ACPI: MCFG CFEE7F00, 003C (r1 IntelR AWRDACPI 42302E31 AWRD 0) [ 0.000000] ACPI: APIC CFEE7E40, 0084 (r1 IntelR AWRDACPI 42302E31 AWRD 0) [ 0.000000] ACPI: SSDT CFEE85A0, 0380 (r1 PmRef CpuPm 3000 INTL 20041203) [ 0.000000] Entering add_active_range(0, 0, 158) 0 entries of 256 used [ 0.000000] Entering add_active_range(0, 256, 512000) 1 entries of 256 used [ 0.000000] early res: 0 [0-fff] BIOS data page [ 0.000000] early res: 1 [6000-7fff] TRAMPOLINE [ 0.000000] early res: 2 [200000-a2bc3f] TEXT DATA BSS [ 0.000000] early res: 3 [9e000-fffff] BIOS reserved [ 0.000000] early res: 4 [8000-cfff] PGTABLE [ 0.000000] [ffffe20000000000-ffffe20001bfffff] PMD -> [ffff810001200000-ffff810002dfffff] on node 0 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0 -> 4096 [ 0.000000] DMA32 4096 -> 1048576 [ 0.000000] Normal 1048576 -> 1048576 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0 -> 158 [ 0.000000] 0: 256 -> 512000 [ 0.000000] On node 0 totalpages: 511902 [ 0.000000] DMA zone: 56 pages used for memmap [ 0.000000] DMA zone: 2199 pages reserved [ 0.000000] DMA zone: 1743 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 6944 pages used for memmap [ 0.000000] DMA32 zone: 500960 pages, LIFO batch:31 [ 0.000000] Normal zone: 0 pages used for memmap [ 0.000000] Movable zone: 0 pages used for memmap [ 0.000000] ACPI: PM-Timer IO Port: 0x408 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] disabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x03] disabled) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1]) [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1]) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 0, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Setting APIC routing to flat [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] Allocating PCI resources starting at d0000000 (gap: cff00000:10100000) [ 0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs [ 0.000000] PERCPU: Allocating 34628 bytes of per cpu data [ 0.000000] NR_CPUS: 2, nr_cpu_ids: 2 [4294014.506571] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 502703 [4294014.506571] Kernel command line: root=/dev/md1 ro mem=2000M iommu=off vga=791 quiet [4294014.506571] Initializing CPU#0 [4294014.506571] Preemptible RCU implementation. [4294014.506571] PID hash table entries: 4096 (order: 12, 32768 bytes) [4294014.506571] TSC calibrated against PM_TIMER [4294014.506571] time.c: Detected 2996.999 MHz processor. [4294014.506571] Console: colour dummy device 80x25 [4294014.506571] console [tty0] enabled [4294014.506571] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar [4294014.506571] ... MAX_LOCKDEP_SUBCLASSES: 8 [4294014.506571] ... MAX_LOCK_DEPTH: 48 [4294014.506571] ... MAX_LOCKDEP_KEYS: 2048 [4294014.506571] ... CLASSHASH_SIZE: 1024 [4294014.506571] ... MAX_LOCKDEP_ENTRIES: 8192 [4294014.506571] ... MAX_LOCKDEP_CHAINS: 16384 [4294014.506571] ... CHAINHASH_SIZE: 8192 [4294014.506571] memory used by lock dependency info: 1648 kB [4294014.506571] per task-struct memory footprint: 2688 bytes [4294014.506571] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes) [4294014.506571] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes) [4294014.506571] Checking aperture... [4294014.506571] Memory: 2006672k/2048000k available (2559k kernel code, 40440k reserved, 1332k data, 232k init) [4294014.506571] CPA: page pool initialized 1 of 1 pages preallocated [4294014.506571] SLUB: Genslabs=12, HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [4294014.566565] Calibrating delay using timer specific routine.. 5997.96 BogoMIPS (lpj=2998980) [4294014.566620] Mount-cache hash table entries: 256 [4294014.567148] CPU: L1 I cache: 32K, L1 D cache: 32K [4294014.567150] CPU: L2 cache: 1024K [4294014.567152] CPU: Physical Processor ID: 0 [4294014.567154] CPU: Processor Core ID: 0 [4294014.567158] CPU0: Thermal monitoring enabled (TM2) [4294014.567160] using mwait in idle threads. [4294014.567186] ACPI: Core revision 20080321 [4294014.568670] ACPI: Override [DSDT-AWRDACPI], this is unsafe: tainting kernel [4294014.568675] ACPI: Table DSDT replaced by host OS [4294014.568678] ACPI: DSDT 00000000, 477D (r1 INTELR AWRDACPI 1000 INTL 20061109) [4294014.568681] ACPI: DSDT override uses original SSDTs unless "acpi_no_auto_ssdt"<6>CPU0: Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz stepping 0d [4294014.582559] Using local APIC timer interrupts. [4294014.583559] APIC timer calibration result 20812478 [4294014.583559] Detected 20.812 MHz APIC timer. [4294014.583559] lockdep: fixing up alternatives. [4294014.583559] Booting processor 1/1 ip 6000 [4294014.583559] Initializing CPU#1 [4294014.583559] Calibrating delay using timer specific routine.. 5993.90 BogoMIPS (lpj=2996954) [4294014.583559] CPU: L1 I cache: 32K, L1 D cache: 32K [4294014.583559] CPU: L2 cache: 1024K [4294014.583559] CPU: Physical Processor ID: 0 [4294014.583559] CPU: Processor Core ID: 1 [4294014.583559] CPU1: Thermal monitoring enabled (TM2) [4294014.583559] x86 PAT enabled: cpu 1, old 0x7040600070406, new 0x7010600070106 [4294014.654548] CPU1: Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz stepping 0d [4294014.654548] checking TSC synchronization [CPU#0 -> CPU#1]: passed. [4294014.655562] Brought up 2 CPUs [4294014.655564] Total of 2 processors activated (11991.86 BogoMIPS). [4294014.655601] CPU0 attaching sched-domain: [4294014.655603] domain 0: span 0-1 [4294014.655605] groups: 0 1 [4294014.655609] CPU1 attaching sched-domain: [4294014.655610] domain 0: span 0-1 [4294014.655612] groups: 1 0 [4294014.656548] net_namespace: 464 bytes [4294014.656548] xor: automatically using best checksumming function: generic_sse [4294014.661160] generic_sse: 10868.000 MB/sec [4294014.661161] xor: using function: generic_sse (10868.000 MB/sec) [4294014.661186] NET: Registered protocol family 16 [4294014.661341] No dock devices found. [4294014.661426] ACPI: bus type pci registered [4294014.661516] PCI: MCFG configuration 0: base e0000000 segment 0 buses 0 - 255 [4294014.661518] PCI: MCFG area at e0000000 reserved in E820 [4294014.669475] PCI: Using MMCONFIG at e0000000 - efffffff [4294014.669479] PCI: Using configuration type 1 for base access [4294014.671454] ACPI: EC: Look up EC in DSDT [4294014.676456] ACPI: Interpreter enabled [4294014.676459] ACPI: (supports S0 S3 S5) [4294014.676470] ACPI: Using IOAPIC for interrupt routing [4294014.680947] ACPI: PCI Root Bridge [PCI0] (0000:00) [4294014.681709] pci 0000:00:1f.0: Force enabled HPET at 0xfed00000 [4294014.681714] pci 0000:00:1f.0: quirk: region 0400-047f claimed by ICH6 ACPI/GPIO/TCO [4294014.681717] pci 0000:00:1f.0: quirk: region 0480-04bf claimed by ICH6 GPIO [4294014.682768] PCI: Transparent bridge - 0000:00:1e.0 [4294014.682795] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [4294014.682991] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX0._PRT] [4294014.683073] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX4._PRT] [4294014.683154] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.HUB0._PRT] [4294014.696710] ACPI: PCI Interrupt Link [LNKA] (IRQs 4 *5 7 9 10 11 12) [4294014.696797] ACPI: PCI Interrupt Link [LNKB] (IRQs 4 5 7 9 *10 11 12) [4294014.696882] ACPI: PCI Interrupt Link [LNKC] (IRQs 4 *5 7 9 10 11 12) [4294014.696967] ACPI: PCI Interrupt Link [LNKD] (IRQs 4 5 7 9 10 *11 12) [4294014.697051] ACPI: PCI Interrupt Link [LNKE] (IRQs 4 5 7 9 10 *11 12) [4294014.697136] ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 7 9 *10 11 12) [4294014.697220] ACPI: PCI Interrupt Link [LNK0] (IRQs 4 5 *7 9 10 11 12) [4294014.697304] ACPI: PCI Interrupt Link [LNK1] (IRQs *4 5 7 9 10 11 12) [4294014.697472] Linux Plug and Play Support v0.97 (c) Adam Belay [4294014.697501] pnp: PnP ACPI init [4294014.697509] ACPI: bus type pnp registered [4294014.699665] pnp: PnP ACPI: found 12 devices [4294014.699667] ACPI: ACPI bus type pnp unregistered [4294014.699824] SCSI subsystem initialized [4294014.699886] libata version 3.00 loaded. [4294014.700017] PCI: Using ACPI for IRQ routing [4294014.708627] PCI-GART: No AMD northbridge found. [4294014.708704] hpet clockevent registered [4294014.708709] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0, 0 [4294014.708713] hpet0: 4 64-bit timers, 14318180 Hz [4294014.721660] system 00:01: ioport range 0x4d0-0x4d1 has been reserved [4294014.721663] system 00:01: ioport range 0x880-0x88f has been reserved [4294014.721680] system 00:07: ioport range 0x400-0x4bf could not be reserved [4294014.721693] system 00:0a: iomem range 0xe0000000-0xefffffff could not be reserved [4294014.721703] system 00:0b: iomem range 0xf0000-0xfffff could not be reserved [4294014.721706] system 00:0b: iomem range 0xcff00000-0xcfffffff has been reserved [4294014.721710] system 00:0b: iomem range 0xcfee0000-0xcfefffff could not be reserved [4294014.721713] system 00:0b: iomem range 0x0-0x9ffff could not be reserved [4294014.721717] system 00:0b: iomem range 0x100000-0xcfedffff could not be reserved [4294014.721720] system 00:0b: iomem range 0xfec00000-0xfec00fff could not be reserved [4294014.721724] system 00:0b: iomem range 0xfed14000-0xfed1dfff could not be reserved [4294014.721727] system 00:0b: iomem range 0xfed20000-0xfed9ffff could not be reserved [4294014.721731] system 00:0b: iomem range 0xfee00000-0xfee00fff could not be reserved [4294014.721737] system 00:0b: iomem range 0xffb00000-0xffb7ffff could not be reserved [4294014.721739] system 00:0b: iomem range 0xfff00000-0xffffffff could not be reserved [4294014.721741] system 00:0b: iomem range 0xe0000-0xeffff has been reserved [4294014.722287] PCI: Bridge: 0000:00:01.0 [4294014.722290] IO window: d000-dfff [4294014.722293] MEM window: 0xf8000000-0xfbffffff [4294014.722295] PREFETCH window: 0x00000000d0000000-0x00000000dfffffff [4294014.722299] PCI: Bridge: 0000:00:1c.0 [4294014.722301] IO window: c000-cfff [4294014.722305] MEM window: 0xfde00000-0xfdefffff [4294014.722308] PREFETCH window: 0x00000000fdb00000-0x00000000fdbfffff [4294014.722314] PCI: Bridge: 0000:00:1c.4 [4294014.722316] IO window: b000-bfff [4294014.722320] MEM window: 0xfda00000-0xfdafffff [4294014.722323] PREFETCH window: 0x00000000fd900000-0x00000000fd9fffff [4294014.722329] PCI: Bridge: 0000:00:1e.0 [4294014.722332] IO window: a000-afff [4294014.722335] MEM window: 0xfdd00000-0xfddfffff [4294014.722339] PREFETCH window: 0x00000000fdc00000-0x00000000fdcfffff [4294014.722353] ACPI: PCI Interrupt 0000:00:01.0[A] -> GSI 16 (level, low) -> IRQ 16 [4294014.722358] PCI: Setting latency timer of device 0000:00:01.0 to 64 [4294014.722373] ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 16 (level, low) -> IRQ 16 [4294014.722378] PCI: Setting latency timer of device 0000:00:1c.0 to 64 [4294014.722392] ACPI: PCI Interrupt 0000:00:1c.4[A] -> GSI 16 (level, low) -> IRQ 16 [4294014.722396] PCI: Setting latency timer of device 0000:00:1c.4 to 64 [4294014.722405] PCI: Setting latency timer of device 0000:00:1e.0 to 64 [4294014.722415] NET: Registered protocol family 2 [4294014.754957] IP route cache hash table entries: 65536 (order: 7, 524288 bytes) [4294014.755236] TCP established hash table entries: 262144 (order: 10, 4194304 bytes) [4294014.756695] TCP bind hash table entries: 65536 (order: 9, 3670016 bytes) [4294014.758006] TCP: Hash tables configured (established 262144 bind 65536) [4294014.758009] TCP reno registered [4294014.770040] NET: Registered protocol family 1 [4294014.770040] IA-32 Microcode Update Driver: v1.14a [4294014.772444] fuse init (API version 7.9) [4294014.772603] SGI XFS with security attributes, large block/inode numbers, no debug enabled [4294014.773043] msgmni has been set to 3920 for ipc namespace ffffffff805ac120 [4294014.773071] async_tx: api initialized (sync-only) [4294014.773166] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [4294014.773169] io scheduler noop registered [4294014.773226] io scheduler cfq registered (default) [4294014.773361] pci 0000:01:00.0: Boot video device [4294014.773475] PCI: Setting latency timer of device 0000:00:01.0 to 64 [4294014.773502] assign_interrupt_mode Found MSI capability [4294014.773526] Allocate Port Service[0000:00:01.0:pcie00] [4294014.773571] Allocate Port Service[0000:00:01.0:pcie03] [4294014.773647] PCI: Setting latency timer of device 0000:00:1c.0 to 64 [4294014.773675] assign_interrupt_mode Found MSI capability [4294014.773703] Allocate Port Service[0000:00:1c.0:pcie00] [4294014.773745] Allocate Port Service[0000:00:1c.0:pcie02] [4294014.773789] Allocate Port Service[0000:00:1c.0:pcie03] [4294014.773868] PCI: Setting latency timer of device 0000:00:1c.4 to 64 [4294014.773895] assign_interrupt_mode Found MSI capability [4294014.773924] Allocate Port Service[0000:00:1c.4:pcie00] [4294014.773965] Allocate Port Service[0000:00:1c.4:pcie02] [4294014.774006] Allocate Port Service[0000:00:1c.4:pcie03] [4294014.774246] vesafb: framebuffer at 0xf9000000, mapped to 0xffffc20010100000, using 3072k, total 14336k [4294014.774248] vesafb: mode is 1024x768x16, linelength=2048, pages=1 [4294014.774250] vesafb: scrolling: redraw [4294014.774251] vesafb: Truecolor: size=0:5:6:5, shift=0:11:5:0 [4294014.784804] Console: switching to colour frame buffer device 128x48 [4294014.794263] fb0: VESA VGA frame buffer device [4294014.794449] input: Power Button (FF) as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input0 [4294014.794452] ACPI: Power Button (FF) [PWRF] [4294014.794527] input: Power Button (CM) as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input1 [4294014.794530] ACPI: Power Button (CM) [PWRB] [4294014.794974] ACPI: SSDT CFEE7F80, 022A (r1 PmRef Cpu0Ist 3000 INTL 20041203) [4294014.795070] ACPI: ACPI0007:00 is registered as cooling_device0 [4294014.795260] ACPI: SSDT CFEE8440, 0152 (r1 PmRef Cpu1Ist 3000 INTL 20041203) [4294014.795375] ACPI: ACPI0007:01 is registered as cooling_device1 [4294014.798936] ACPI: LNXTHERM:01 is registered as thermal_zone0 [4294014.799028] ACPI: Thermal Zone [THRM] (20 C) [4294014.820282] Real Time Clock Driver v1.12ac [4294014.820420] Linux agpgart interface v0.103 [4294014.821159] loop: module loaded [4294014.821159] tun: Universal TUN/TAP device driver, 1.6 [4294014.821159] tun: (C) 1999-2004 Max Krasnyansky [4294014.821159] Linux video capture interface: v2.00 [4294014.821159] Driver 'sd' needs updating - please use bus_type methods [4294014.821159] Driver 'sr' needs updating - please use bus_type methods [4294014.821209] ahci 0000:00:1f.2: version 3.0 [4294014.821232] ACPI: PCI Interrupt 0000:00:1f.2[A] -> GSI 19 (level, low) -> IRQ 19 [4294015.210601] Switched to high resolution mode on CPU 1 [4294015.212464] Switched to high resolution mode on CPU 0 [4294015.821085] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x3f impl SATA mode [4294015.821089] ahci 0000:00:1f.2: flags: 64bit ncq sntf led clo pio slum part [4294015.821094] PCI: Setting latency timer of device 0000:00:1f.2 to 64 [4294015.821723] scsi0 : ahci [4294015.821723] scsi1 : ahci [4294015.821723] scsi2 : ahci [4294015.821723] scsi3 : ahci [4294015.821723] scsi4 : ahci [4294015.821723] scsi5 : ahci [4294015.821723] ata1: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd100 irq 316 [4294015.821723] ata2: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd180 irq 316 [4294015.821723] ata3: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd200 irq 316 [4294015.821723] ata4: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd280 irq 316 [4294015.821723] ata5: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd300 irq 316 [4294015.821723] ata6: SATA max UDMA/133 abar m2048@0xfdffd000 port 0xfdffd380 irq 316 [4294016.125735] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [4294016.126578] ata1.00: ATA-7: Hitachi HDT725050VLA360, V56OA7EA, max UDMA/133 [4294016.126581] ata1.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32) [4294016.126705] ata1.00: configured for UDMA/133 [4294016.431877] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [4294016.432969] ata2.00: ATA-7: Hitachi HDT725050VLA360, V56OA7EA, max UDMA/133 [4294016.432969] ata2.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32) [4294016.432969] ata2.00: configured for UDMA/133 [4294016.737825] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [4294016.738649] ata3.00: ATA-7: Hitachi HDT725050VLA360, V56OA7EA, max UDMA/133 [4294016.738652] ata3.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32) [4294016.738649] ata3.00: configured for UDMA/133 [4294017.043943] ata4: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [4294017.300918] ata4.00: ATA-7: Hitachi HDT725050VLA360, V56OA7EA, max UDMA/133 [4294017.300918] ata4.00: 976773168 sectors, multi 0: LBA48 NCQ (depth 31/32) [4294017.300918] ata4.00: configured for UDMA/133 [4294017.605833] ata5: SATA link down (SStatus 0 SControl 300) [4294017.910791] ata6: SATA link down (SStatus 0 SControl 300) [4294017.921884] scsi 0:0:0:0: Direct-Access ATA Hitachi HDT72505 V56O PQ: 0 ANSI: 5 [4294017.922788] sd 0:0:0:0: [sda] 976773168 512-byte hardware sectors (500108 MB) [4294017.922801] sd 0:0:0:0: [sda] Write Protect is off [4294017.922803] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [4294017.922825] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.922884] sd 0:0:0:0: [sda] 976773168 512-byte hardware sectors (500108 MB) [4294017.922896] sd 0:0:0:0: [sda] Write Protect is off [4294017.922898] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [4294017.922919] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.922922] sda: sda1 sda2 sda3 sda4 [4294017.931684] sd 0:0:0:0: [sda] Attached SCSI disk [4294017.931706] sd 0:0:0:0: Attached scsi generic sg0 type 0 [4294017.931706] scsi 1:0:0:0: Direct-Access ATA Hitachi HDT72505 V56O PQ: 0 ANSI: 5 [4294017.931706] sd 1:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB) [4294017.931706] sd 1:0:0:0: [sdb] Write Protect is off [4294017.931706] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [4294017.931706] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.931706] sd 1:0:0:0: [sdb] 976773168 512-byte hardware sectors (500108 MB) [4294017.931706] sd 1:0:0:0: [sdb] Write Protect is off [4294017.931706] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00 [4294017.931706] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.931706] sdb: sdb1 sdb2 sdb3 [4294017.942037] sd 1:0:0:0: [sdb] Attached SCSI disk [4294017.942037] sd 1:0:0:0: Attached scsi generic sg1 type 0 [4294017.942037] scsi 2:0:0:0: Direct-Access ATA Hitachi HDT72505 V56O PQ: 0 ANSI: 5 [4294017.943027] sd 2:0:0:0: [sdc] 976773168 512-byte hardware sectors (500108 MB) [4294017.943027] sd 2:0:0:0: [sdc] Write Protect is off [4294017.943027] sd 2:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [4294017.943027] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.943027] sd 2:0:0:0: [sdc] 976773168 512-byte hardware sectors (500108 MB) [4294017.943027] sd 2:0:0:0: [sdc] Write Protect is off [4294017.943027] sd 2:0:0:0: [sdc] Mode Sense: 00 3a 00 00 [4294017.943027] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.943027] sdc: sdc1 sdc2 sdc3 sdc4 [4294017.957567] sd 2:0:0:0: [sdc] Attached SCSI disk [4294017.957567] sd 2:0:0:0: Attached scsi generic sg2 type 0 [4294017.957567] scsi 3:0:0:0: Direct-Access ATA Hitachi HDT72505 V56O PQ: 0 ANSI: 5 [4294017.957568] sd 3:0:0:0: [sdd] 976773168 512-byte hardware sectors (500108 MB) [4294017.957568] sd 3:0:0:0: [sdd] Write Protect is off [4294017.957568] sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00 [4294017.957568] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.957568] sd 3:0:0:0: [sdd] 976773168 512-byte hardware sectors (500108 MB) [4294017.957568] sd 3:0:0:0: [sdd] Write Protect is off [4294017.957568] sd 3:0:0:0: [sdd] Mode Sense: 00 3a 00 00 [4294017.957568] sd 3:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [4294017.957568] sdd: sdd1 sdd2 sdd3 sdd4 [4294017.964037] sd 3:0:0:0: [sdd] Attached SCSI disk [4294017.964037] sd 3:0:0:0: Attached scsi generic sg3 type 0 [4294017.964037] ACPI: PCI Interrupt 0000:03:00.0[A] -> GSI 16 (level, low) -> IRQ 16 [4294018.964818] ahci 0000:03:00.0: AHCI 0001.0000 32 slots 2 ports 3 Gbps 0x3 impl SATA mode [4294018.964822] ahci 0000:03:00.0: flags: 64bit ncq pm led clo pmp pio slum part [4294018.964829] PCI: Setting latency timer of device 0000:03:00.0 to 64 [4294018.965781] scsi6 : ahci [4294018.966027] scsi7 : ahci [4294018.966027] ata7: SATA max UDMA/133 abar m8192@0xfdafe000 port 0xfdafe100 irq 16 [4294018.966027] ata8: SATA max UDMA/133 abar m8192@0xfdafe000 port 0xfdafe180 irq 16 [4294019.270061] ata7: SATA link down (SStatus 0 SControl 300) [4294019.586697] ata8: SATA link down (SStatus 0 SControl 300) [4294019.586697] PNP: PS/2 Controller [PNP0303:PS2K] at 0x60,0x64 irq 1 [4294019.586697] PNP: PS/2 appears to have AUX port disabled, if this is incorrect please boot with i8042.nopnp [4294019.586697] serio: i8042 KBD port at 0x60,0x64 irq 1 [4294019.586697] mice: PS/2 mouse device common for all mice [4294019.625677] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input2 [4294019.649479] md: raid0 personality registered for level 0 [4294019.649479] md: raid1 personality registered for level 1 [4294019.666708] raid6: int64x1 2808 MB/s [4294019.683708] raid6: int64x2 3535 MB/s [4294019.700708] raid6: int64x4 2957 MB/s [4294019.717708] raid6: int64x8 2660 MB/s [4294019.734708] raid6: sse2x1 5101 MB/s [4294019.751709] raid6: sse2x2 5578 MB/s [4294019.768708] raid6: sse2x4 9027 MB/s [4294019.768708] raid6: using algorithm sse2x4 (9027 MB/s) [4294019.768708] md: raid6 personality registered for level 6 [4294019.768708] md: raid5 personality registered for level 5 [4294019.768708] md: raid4 personality registered for level 4 [4294019.768708] cpuidle: using governor ladder [4294019.768708] cpuidle: using governor menu [4294019.768860] TCP cubic registered [4294019.768862] NET: Registered protocol family 17 [4294019.769709] md: Autodetecting RAID arrays. [4294019.792424] md: Scanned 3 and added 3 devices. [4294019.792424] md: autorun ... [4294019.792424] md: considering sdd2 ... [4294019.792424] md: adding sdd2 ... [4294019.792424] md: adding sdc2 ... [4294019.792424] md: adding sda2 ... [4294019.792424] md: created md1 [4294019.792424] md: bind [4294019.792424] md: bind [4294019.792424] md: bind [4294019.792424] md: running: [4294019.792424] raid5: device sdd2 operational as raid disk 2 [4294019.792424] raid5: device sdc2 operational as raid disk 1 [4294019.792424] raid5: device sda2 operational as raid disk 0 [4294019.792737] raid5: allocated 3236kB for md1 [4294019.792739] raid5: raid level 5 set md1 active with 3 out of 3 devices, algorithm 2 [4294019.792741] RAID5 conf printout: [4294019.792742] --- rd:3 wd:3 [4294019.792744] disk 0, o:1, dev:sda2 [4294019.792745] disk 1, o:1, dev:sdc2 [4294019.792747] disk 2, o:1, dev:sdd2 [4294019.793290] md: ... autorun DONE. [4294019.800684] Filesystem "md1": Disabling barriers, not supported by the underlying device [4294019.800684] XFS: correcting sb_features alignment problem [4294019.800722] XFS mounting filesystem md1 [4294019.922250] Ending clean XFS mount for filesystem: md1 [4294019.922250] VFS: Mounted root (xfs filesystem) readonly. [4294019.922250] Freeing unused kernel memory: 232k freed [4294021.222724] r8169 Gigabit Ethernet driver 2.2LK-NAPI loaded [4294021.222724] ACPI: PCI Interrupt 0000:04:00.0[A] -> GSI 23 (level, low) -> IRQ 23 [4294021.222724] eth0: RTL8169sc/8110sc at 0xffffc2000001a000, 00:50:8d:b3:5f:de, XID 18000000 IRQ 23 [4294021.223674] r8169 Gigabit Ethernet driver 2.2LK-NAPI loaded [4294021.223674] ACPI: PCI Interrupt 0000:04:01.0[A] -> GSI 22 (level, low) -> IRQ 22 [4294021.223674] eth1: RTL8169sc/8110sc at 0xffffc20000068000, 00:50:8d:b3:5f:df, XID 18000000 IRQ 22 [4294021.241674] usbcore: registered new interface driver usbfs [4294021.241674] usbcore: registered new interface driver hub [4294021.242673] ACPI: PCI Interrupt 0000:00:1f.3[B] -> GSI 18 (level, low) -> IRQ 18 [4294021.246675] usbcore: registered new device driver usb [4294021.277673] ACPI: PCI Interrupt 0000:04:02.0[A] -> GSI 21 (level, low) -> IRQ 21 [4294021.289674] USB Universal Host Controller Interface driver v3.0 [4294021.289674] ACPI: PCI Interrupt 0000:00:1a.0[A] -> GSI 16 (level, low) -> IRQ 16 [4294021.289674] PCI: Setting latency timer of device 0000:00:1a.0 to 64 [4294021.289674] uhci_hcd 0000:00:1a.0: UHCI Host Controller [4294021.289791] uhci_hcd 0000:00:1a.0: new USB bus registered, assigned bus number 1 [4294021.289815] uhci_hcd 0000:00:1a.0: irq 16, io base 0x0000ff00 [4294021.290674] usb usb1: configuration #1 chosen from 1 choice [4294021.290674] hub 1-0:1.0: USB hub found [4294021.290674] hub 1-0:1.0: 2 ports detected [4294021.323673] udev: renamed network interface eth0 to lan0 [4294021.328674] udev: renamed network interface eth1 to lan1 [4294021.337686] firewire_ohci: Added fw-ohci device 0000:04:02.0, OHCI version 1.10 [4294021.337732] ACPI: PCI Interrupt 0000:04:05.2[B] -> GSI 21 (level, low) -> IRQ 21 [4294021.337738] PCI: Setting latency timer of device 0000:04:05.2 to 64 [4294021.391826] ACPI: PCI Interrupt 0000:00:1a.7[C] -> GSI 18 (level, low) -> IRQ 18 [4294021.391841] PCI: Setting latency timer of device 0000:00:1a.7 to 64 [4294021.391844] ehci_hcd 0000:00:1a.7: EHCI Host Controller [4294021.391871] ehci_hcd 0000:00:1a.7: new USB bus registered, assigned bus number 2 [4294021.395779] PCI: cache line size of 32 is not supported by device 0000:00:1a.7 [4294021.395789] ehci_hcd 0000:00:1a.7: irq 18, io mem 0xfdfff000 [4294021.397709] firewire_ohci: Added fw-ohci device 0000:04:05.2, OHCI version 1.10 [4294021.405694] ehci_hcd 0000:00:1a.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 [4294021.405818] usb usb2: configuration #1 chosen from 1 choice [4294021.405839] hub 2-0:1.0: USB hub found [4294021.405845] hub 2-0:1.0: 6 ports detected [4294021.506768] ACPI: PCI Interrupt 0000:00:1a.1[B] -> GSI 21 (level, low) -> IRQ 21 [4294021.506778] PCI: Setting latency timer of device 0000:00:1a.1 to 64 [4294021.506781] uhci_hcd 0000:00:1a.1: UHCI Host Controller [4294021.506807] uhci_hcd 0000:00:1a.1: new USB bus registered, assigned bus number 3 [4294021.506828] uhci_hcd 0000:00:1a.1: irq 21, io base 0x0000fe00 [4294021.507673] usb usb3: configuration #1 chosen from 1 choice [4294021.507673] hub 3-0:1.0: USB hub found [4294021.507673] hub 3-0:1.0: 2 ports detected [4294021.607883] ACPI: PCI Interrupt 0000:00:1d.7[A] -> GSI 23 (level, low) -> IRQ 23 [4294021.607899] PCI: Setting latency timer of device 0000:00:1d.7 to 64 [4294021.607902] ehci_hcd 0000:00:1d.7: EHCI Host Controller [4294021.607930] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 4 [4294021.611815] PCI: cache line size of 32 is not supported by device 0000:00:1d.7 [4294021.611826] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfdffe000 [4294021.715839] usb 2-4: new high speed USB device using ehci_hcd and address 2 [4294021.722695] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004 [4294021.722819] usb usb4: configuration #1 chosen from 1 choice [4294021.722840] hub 4-0:1.0: USB hub found [4294021.722846] hub 4-0:1.0: 6 ports detected [4294021.822789] ACPI: PCI Interrupt 0000:00:1a.2[D] -> GSI 19 (level, low) -> IRQ 19 [4294021.822798] PCI: Setting latency timer of device 0000:00:1a.2 to 64 [4294021.822801] uhci_hcd 0000:00:1a.2: UHCI Host Controller [4294021.822827] uhci_hcd 0000:00:1a.2: new USB bus registered, assigned bus number 5 [4294021.822854] uhci_hcd 0000:00:1a.2: irq 19, io base 0x0000fd00 [4294021.822947] usb usb5: configuration #1 chosen from 1 choice [4294021.822969] hub 5-0:1.0: USB hub found [4294021.822974] hub 5-0:1.0: 2 ports detected [4294021.836775] firewire_core: created device fw0: GUID 00508d00009b4941, S400 [4294021.837718] usb 2-4: configuration #1 chosen from 1 choice [4294021.837897] hub 2-4:1.0: USB hub found [4294021.838215] hub 2-4:1.0: 4 ports detected [4294021.896937] firewire_core: created device fw1: GUID 00023c0091023fd7, S400 [4294021.924678] ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 23 (level, low) -> IRQ 23 [4294021.924678] PCI: Setting latency timer of device 0000:00:1d.0 to 64 [4294021.924678] uhci_hcd 0000:00:1d.0: UHCI Host Controller [4294021.924678] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 6 [4294021.924678] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000fc00 [4294021.924798] usb usb6: configuration #1 chosen from 1 choice [4294021.924822] hub 6-0:1.0: USB hub found [4294021.924829] hub 6-0:1.0: 2 ports detected [4294022.026678] ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 19 (level, low) -> IRQ 19 [4294022.026678] PCI: Setting latency timer of device 0000:00:1d.1 to 64 [4294022.026678] uhci_hcd 0000:00:1d.1: UHCI Host Controller [4294022.026678] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 7 [4294022.026678] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000fb00 [4294022.026678] usb usb7: configuration #1 chosen from 1 choice [4294022.026678] hub 7-0:1.0: USB hub found [4294022.026678] hub 7-0:1.0: 2 ports detected [4294022.127678] ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 18 [4294022.127678] PCI: Setting latency timer of device 0000:00:1d.2 to 64 [4294022.127678] uhci_hcd 0000:00:1d.2: UHCI Host Controller [4294022.127678] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 8 [4294022.127678] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000fa00 [4294022.127678] usb usb8: configuration #1 chosen from 1 choice [4294022.127678] hub 8-0:1.0: USB hub found [4294022.127678] hub 8-0:1.0: 2 ports detected [4294022.220820] usb 2-4.4: new low speed USB device using ehci_hcd and address 3 [4294022.226472] ACPI: PCI Interrupt 0000:04:05.0[A] -> GSI 20 (level, low) -> IRQ 20 [4294022.226472] PCI: Setting latency timer of device 0000:04:05.0 to 64 [4294022.231423] Installing spdif_bug patch: Audigy 2 Platinum [SB0240P] [4294022.314109] usb 2-4.4: configuration #1 chosen from 1 choice [4294022.330236] input: Logitech USB-PS/2 Optical Mouse as /devices/pci0000:00/0000:00:1a.7/usb2/2-4/2-4.4/2-4.4:1.0/input/input3 [4294022.344794] input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1a.7-4.4 [4294022.344819] usbcore: registered new interface driver usbhid [4294022.344822] usbhid: v2.6:USB HID core driver [4294023.987374] Filesystem "md1": Disabling barriers, not supported by the underlying device [4294024.978674] coretemp coretemp.0: Using relative temperature scale! [4294024.978674] coretemp coretemp.1: Using relative temperature scale! [4294024.999465] abituguru3: no Abit uGuru3 found, data = 0x00, cmd = 0x55 [4294025.412245] md: md0 stopped. [4294025.591515] md: bind [4294025.591862] md: bind [4294025.591862] md: bind [4294025.595765] raid1: raid set md0 active with 3 out of 3 mirrors [4294025.595971] md: md2 stopped. [4294025.609929] md: bind [4294025.610781] md: bind [4294025.610781] md: bind [4294025.610781] md: bind [4294025.614672] raid5: device sda3 operational as raid disk 0 [4294025.614672] raid5: device sdd3 operational as raid disk 3 [4294025.614672] raid5: device sdb2 operational as raid disk 2 [4294025.614672] raid5: device sdc3 operational as raid disk 1 [4294025.614817] raid5: allocated 4286kB for md2 [4294025.614820] raid5: raid level 5 set md2 active with 4 out of 4 devices, algorithm 2 [4294025.614823] RAID5 conf printout: [4294025.614824] --- rd:4 wd:4 [4294025.614827] disk 0, o:1, dev:sda3 [4294025.614829] disk 1, o:1, dev:sdc3 [4294025.614831] disk 2, o:1, dev:sdb2 [4294025.614833] disk 3, o:1, dev:sdd3 [4294025.616268] md: md3 stopped. [4294025.648346] md: bind [4294025.648346] md: bind [4294025.648884] md: bind [4294025.648951] md: bind [4294025.652650] raid5: device sda4 operational as raid disk 0 [4294025.652653] raid5: device sdd4 operational as raid disk 3 [4294025.652656] raid5: device sdb3 operational as raid disk 2 [4294025.652659] raid5: device sdc4 operational as raid disk 1 [4294025.652951] raid5: allocated 4286kB for md3 [4294025.652951] raid5: raid level 5 set md3 active with 4 out of 4 devices, algorithm 2 [4294025.652951] RAID5 conf printout: [4294025.652951] --- rd:4 wd:4 [4294025.652951] disk 0, o:1, dev:sda4 [4294025.652951] disk 1, o:1, dev:sdc4 [4294025.652951] disk 2, o:1, dev:sdb3 [4294025.652951] disk 3, o:1, dev:sdd4 [4294025.920950] Filesystem "md0": Disabling barriers, not supported by the underlying device [4294025.929889] XFS mounting filesystem md0 [4294026.033461] Ending clean XFS mount for filesystem: md0 [4294026.043950] Filesystem "md2": Disabling barriers, not supported by the underlying device [4294026.044346] XFS mounting filesystem md2 [4294026.224344] Ending clean XFS mount for filesystem: md2 [4294026.241391] Filesystem "md3": Disabling barriers, not supported by the underlying device [4294026.241391] XFS mounting filesystem md3 [4294026.918094] Ending clean XFS mount for filesystem: md3 [4294027.663637] br0: Dropping NETIF_F_UFO since no NETIF_F_HW_CSUM feature. [4294027.667348] device lan0 entered promiscuous mode [4294027.668966] r8169: lan0: link up [4294027.670967] device lan1 entered promiscuous mode [4294027.672350] r8169: lan1: link down [4294027.683962] br0: port 1(lan0) entering learning state [4294042.682966] br0: topology change detected, propagating [4294042.682971] br0: port 1(lan0) entering forwarding state [4294057.720963] warning: `ntpd' uses 32-bit capabilities (legacy support in use) [4294133.341963] netconsole: couldn't parse config at 192.168.0.14! [4294133.341963] netconsole: cleaning up [4294146.028723] netconsole: local port 6665 [4294146.028723] netconsole: local IP 0.0.0.0 [4294146.028723] netconsole: interface br0 [4294146.028723] netconsole: remote port 1234 [4294146.028723] netconsole: remote IP 192.168.0.14 [4294146.028723] netconsole: remote ethernet address ff:ff:ff:ff:ff:ff [4294146.028723] netconsole: br0 doesn't support polling, aborting. [4294146.031982] netconsole: cleaning up [4294160.852001] netconsole: local port 6665 [4294160.852001] netconsole: local IP 0.0.0.0 [4294160.852001] netconsole: interface lan0 [4294160.852001] netconsole: remote port 1234 [4294160.852001] netconsole: remote IP 192.168.0.14 [4294160.852025] netconsole: remote ethernet address ff:ff:ff:ff:ff:ff [4294160.852098] netconsole: no IP address for lan0, aborting [4294160.856195] netconsole: cleaning up [4294173.023636] br0: port 1(lan0) entering disabled state [4294173.046964] device lan0 left promiscuous mode [4294173.046964] br0: port 1(lan0) entering disabled state [4294173.059755] device lan1 left promiscuous mode [4294173.059762] br0: port 2(lan1) entering disabled state [4294200.651348] r8169: lan0: link up [4294215.478349] netconsole: local port 6665 [4294215.478349] netconsole: local IP 0.0.0.0 [4294215.478349] netconsole: interface lan0 [4294215.478349] netconsole: remote port 1234 [4294215.478349] netconsole: remote IP 192.168.0.14 [4294215.478349] netconsole: remote ethernet address ff:ff:ff:ff:ff:ff [4294215.478349] netconsole: local IP 192.168.0.12 [4294215.486807] console [netcon0] enabled [4294215.486816] netconsole: network logging started [4294228.526185] SysRq : Emergency Sync [4294228.526185] Emergency Sync complete [4294293.003500] SysRq : Show Blocked State [4294293.003500] task PC stack pid father [4294293.003500] pdflush D 0000000000000002 0 191 2 [4294293.003500] ffff81007cee1660 0000000000000046 0000000000000082 0000000000000001 [4294293.003500] 0000000000000001 ffff81007cee1610 ffff81007cee15e0 ffffffff80625dc0 [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 [4294293.003500] Call Trace: [4294293.003500] [] ? raid5_unplug_device+0xdd/0xe6 [4294293.003500] [] io_schedule+0x28/0x33 [4294293.003500] [] sync_page+0x3f/0x43 [4294293.003500] [] __wait_on_bit+0x45/0x77 [4294293.003500] [] ? sync_page+0x0/0x43 [4294293.003500] [] wait_on_page_bit+0x6f/0x76 [4294293.003500] [] ? wake_bit_function+0x0/0x2a [4294293.003500] [] shrink_page_list+0x116/0x57b [4294293.003500] [] ? get_active_stripe+0x3a/0x4cc [4294293.003500] [] ? schedule_timeout+0x98/0xb4 [4294293.003500] [] ? process_timeout+0x0/0xb [4294293.003500] [] ? schedule_timeout+0x88/0xb4 [4294293.003500] [] ? congestion_wait+0x7a/0x88 [4294293.003500] [] shrink_inactive_list+0x1ee/0x414 [4294293.003500] [] ? enqueue_task_fair+0x1df/0x1eb [4294293.003500] [] shrink_zone+0xe5/0x10a [4294293.003500] [] try_to_free_pages+0x232/0x36e [4294293.003500] [] ? isolate_pages_global+0x0/0x34 [4294293.003500] [] __alloc_pages_internal+0x245/0x3c6 [4294293.003500] [] __alloc_pages+0xb/0xd [4294293.003500] [] __get_free_pages+0x15/0x54 [4294293.003500] [] __kmalloc+0x3e/0xe6 [4294293.003500] [] ? xfs_iflush_int+0x272/0x2fb [4294293.003500] [] kmem_alloc+0x6a/0xd1 [4294293.003500] [] xfs_iflush_cluster+0x4b/0x33f [4294293.003500] [] ? xfs_iflush_int+0x294/0x2fb [4294293.003500] [] xfs_iflush+0x1bb/0x29d [4294293.003500] [] xfs_inode_flush+0xb8/0xdd [4294293.003500] [] xfs_fs_write_inode+0x30/0x4c [4294293.003500] [] __writeback_single_inode+0x197/0x2c5 [4294293.003500] [] ? __up_read+0x1c/0x97 [4294293.003500] [] ? writeback_inodes+0x69/0xd8 [4294293.003500] [] sync_sb_inodes+0x1cc/0x2cf [4294293.003500] [] writeback_inodes+0x74/0xd8 [4294293.003500] [] background_writeout+0x93/0xcc [4294293.003500] [] ? pdflush+0x0/0x1f2 [4294293.003500] [] pdflush+0x147/0x1f2 [4294293.003500] [] ? background_writeout+0x0/0xcc [4294293.003500] [] kthread+0x49/0x77 [4294293.003500] [] child_rip+0xa/0x12 [4294293.003500] [] ? restore_args+0x0/0x30 [4294293.003500] [] ? kthread+0x0/0x77 [4294293.003500] [] ? child_rip+0x0/0x12 [4294293.003500] [4294293.003500] xfsdatad/0 D ffffffff8032085b 0 249 2 [4294293.003500] ffff81007bd0bd70 0000000000000046 0000000000000002 0000000000000000 [4294293.003500] ffff81007839c0d0 ffff81007bd0bd20 ffffffff8024660e ffffffff80625dc0 [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 [4294293.003500] Call Trace: [4294293.003500] [] ? lock_hrtimer_base+0x25/0x4b [4294293.003500] [] ? xfs_end_bio_delalloc+0x0/0x24 [4294293.003500] [] __down_write_nested+0x91/0xab [4294293.003500] [] __down_write+0xb/0xd [4294293.003500] [] down_write_nested+0x2b/0x2f [4294293.003500] [] xfs_ilock+0x5b/0x79 [4294293.003500] [] xfs_setfilesize+0x36/0x9d [4294293.003500] [] ? run_workqueue+0xa0/0x20c [4294293.003500] [] xfs_end_bio_delalloc+0x18/0x24 [4294293.003500] [] run_workqueue+0xeb/0x20c [4294293.003500] [] worker_thread+0xe5/0xf6 [4294293.003500] [] ? autoremove_wake_function+0x0/0x38 [4294293.003500] [] ? worker_thread+0x0/0xf6 [4294293.003500] [] kthread+0x49/0x77 [4294293.003500] [] child_rip+0xa/0x12 [4294293.003500] [] ? restore_args+0x0/0x30 [4294293.003500] [] ? kthread+0x0/0x77 [4294293.003500] [] ? child_rip+0x0/0x12 [4294293.003500] [4294293.003500] xfsdatad/1 D ffffffff8032085b 0 250 2 [4294293.003500] ffff81007bd0dd70 0000000000000046 0000000000000002 0000000000000000 [4294293.003500] ffff81007839c0d0 ffff81007bd0dd20 ffffffff8024660e ffffffff80625dc0 [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 [4294293.003500] Call Trace: [4294293.003500] [] ? lock_hrtimer_base+0x25/0x4b [4294293.003500] [] ? xfs_end_bio_delalloc+0x0/0x24 [4294293.003500] [] __down_write_nested+0x91/0xab [4294293.003500] [] __down_write+0xb/0xd [4294293.003500] [] down_write_nested+0x2b/0x2f [4294293.003500] [] xfs_ilock+0x5b/0x79 [4294293.003500] [] xfs_setfilesize+0x36/0x9d [4294293.003500] [] ? run_workqueue+0xa0/0x20c [4294293.003500] [] xfs_end_bio_delalloc+0x18/0x24 [4294293.003500] [] run_workqueue+0xeb/0x20c [4294293.003500] [] worker_thread+0xe5/0xf6 [4294293.003500] [] ? autoremove_wake_function+0x0/0x38 [4294293.003500] [] ? worker_thread+0x0/0xf6 [4294293.003500] [] kthread+0x49/0x77 [4294293.003500] [] child_rip+0xa/0x12 [4294293.003500] [] ? restore_args+0x0/0x30 [4294293.003500] [] ? kthread+0x0/0x77 [4294293.003500] [] ? child_rip+0x0/0x12 [4294293.003500] [4294293.003500] cat D 0000000000001000 0 2627 2426 [4294293.003500] ffff81007862d878 0000000000000046 0000000000000002 0000000000000000 [4294293.003500] ffff81007839c0d0 ffff81007862d828 ffff81007862d7e8 ffffffff80625dc0 [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 [4294293.003500] Call Trace: [4294293.003500] [] __down_write_nested+0x91/0xab [4294293.003500] [] __down_write+0xb/0xd [4294293.003500] [] down_write_nested+0x2b/0x2f [4294293.003500] [] xfs_ilock+0x5b/0x79 [4294293.003500] [] xfs_iomap+0x8b/0x27f [4294293.003500] [] ? up_read+0x26/0x2a [4294293.003500] [] __xfs_get_blocks+0x5b/0x144 [4294293.003500] [] xfs_get_blocks+0x12/0x14 [4294293.003500] [] __block_prepare_write+0x1d9/0x3c5 [4294293.003500] [] ? xfs_get_blocks+0x0/0x14 [4294293.003500] [] block_write_begin+0x7d/0xcd [4294293.003500] [] xfs_vm_write_begin+0x25/0x27 [4294293.003500] [] ? xfs_get_blocks+0x0/0x14 [4294293.003500] [] generic_file_buffered_write+0x155/0x676 [4294293.003500] [] ? xfs_log_move_tail+0x14d/0x159 [4294293.003500] [] xfs_write+0x507/0x6fe [4294293.003500] [] ? hrtimer_start+0x12d/0x14f [4294293.003500] [] xfs_file_aio_write+0x53/0x55 [4294293.003500] [] do_sync_write+0xeb/0x132 [4294293.003500] [] ? autoremove_wake_function+0x0/0x38 [4294293.003500] [] vfs_write+0xae/0x137 [4294293.003500] [] sys_write+0x47/0x70 [4294293.003500] [] system_call_after_swapgs+0x7b/0x80 [4294293.003500] [4294293.003500] Sched Debug Version: v0.07, 2.6.26-rc2-damocles #2 [4294293.003500] now at 278245.105796 msecs [4294293.003500] .sysctl_sched_latency : 40.000000 [4294293.003500] .sysctl_sched_min_granularity : 8.000000 [4294293.003500] .sysctl_sched_wakeup_granularity : 20.000000 [4294293.003500] .sysctl_sched_child_runs_first : 0.000001 [4294293.003500] .sysctl_sched_features : 895 [4294293.003500] [4294293.003500] cpu#0, 2996.999 MHz [4294293.003500] .nr_running : 3 [4294293.003500] .load : 5169 [4294293.003500] .nr_switches : 157419 [4294293.003500] .nr_load_updates : 39187 [4294293.003500] .nr_uninterruptible : -2 [4294293.003500] .jiffies : 4294945538 [4294293.003500] .next_balance : 4294.945508 [4294293.003500] .curr->pid : 0 [4294293.003500] .clock : 278241.306172 [4294293.003500] .cpu_load[0] : 0 [4294293.003500] .cpu_load[1] : 0 [4294293.003500] .cpu_load[2] : 24 [4294293.003500] .cpu_load[3] : 80 [4294293.003500] .cpu_load[4] : 113 [4294293.003500] [4294293.003500] cfs_rq[0]: [4294293.003500] .exec_clock : 20036.790571 [4294293.003500] .MIN_vruntime : 75667.048697 [4294293.003500] .min_vruntime : 75908.962744 [4294293.003500] .max_vruntime : 75868.968201 [4294293.003500] .spread : 201.919504 [4294293.003500] .spread0 : 0.000000 [4294293.003500] .nr_running : 3 [4294293.003500] .load : 5169 [4294293.003500] .bkl_count : 496 [4294293.003500] .nr_spread_over : 3817 [4294293.003500] [4294293.003500] runnable tasks: [4294293.003500] task PID tree-key switches prio exec-runtime sum-exec sum-sleep [4294293.003500] ---------------------------------------------------------------------------------------------------------- [4294293.003500] events/0 7 75868.968201 3499 115 75868.968201 368.209941 277355.845917 [4294293.003500] klogd 2005 75667.048697 506 120 75667.048697 12.759793 243588.378665 [4294293.003500] hald-addon-inpu 2229 75868.962745 1308 120 75868.962745 89.199855 234248.040806 [4294293.003500] [4294293.003500] cpu#1, 2996.999 MHz [4294293.003500] .nr_running : 0 [4294293.003500] .load : 0 [4294293.003500] .nr_switches : 139883 [4294293.003500] .nr_load_updates : 39037 [4294293.003500] .nr_uninterruptible : 6 [4294293.003500] .jiffies : 4294945538 [4294293.003500] .next_balance : 4294.945692 [4294293.003500] .curr->pid : 0 [4294293.003500] .clock : 278231.672543 [4294293.003500] .cpu_load[0] : 0 [4294293.003500] .cpu_load[1] : 0 [4294293.003500] .cpu_load[2] : 9 [4294293.003500] .cpu_load[3] : 46 [4294293.003500] .cpu_load[4] : 87 [4294293.003500] [4294293.003500] cfs_rq[1]: [4294293.003500] .exec_clock : 13515.188155 [4294293.003500] .MIN_vruntime : 0.000001 [4294293.003500] .min_vruntime : 61656.996671 [4294293.003500] .max_vruntime : 0.000001 [4294293.003500] .spread : 0.000000 [4294293.003500] .spread0 : -14251.966073 [4294293.003500] .nr_running : 0 [4294293.003500] .load : 0 [4294293.003500] .bkl_count : 789 [4294293.003500] .nr_spread_over : 4637 [4294293.003500] [4294293.003500] runnable tasks: [4294293.003500] task PID tree-key switches prio exec-runtime sum-exec sum-sleep [4294293.003500] ---------------------------------------------------------------------------------------------------------- [4294293.003500] -- Cheers, Alistair. 137/1 Warrender Park Road, Edinburgh, UK. From owner-xfs@oss.sgi.com Sat May 17 14:17:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 14:17:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HLH7as032510 for ; Sat, 17 May 2008 14:17:07 -0700 X-ASG-Debug-ID: 1211059074-786e02bb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.linux-foundation.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2713D16E0927 for ; Sat, 17 May 2008 14:17:54 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id L03NrrriZ5fkuB6G for ; Sat, 17 May 2008 14:17:54 -0700 (PDT) Received: from imap1.linux-foundation.org (imap1.linux-foundation.org [140.211.169.55]) by smtp1.linux-foundation.org (8.14.2/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HLHf9A028958 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 17 May 2008 14:17:43 -0700 Received: from localhost (localhost [127.0.0.1]) by imap1.linux-foundation.org (8.13.5.20060308/8.13.5/Debian-3ubuntu1.1) with ESMTP id m4HLHbvZ016661; Sat, 17 May 2008 14:17:38 -0700 Date: Sat, 17 May 2008 14:17:37 -0700 (PDT) From: Linus Torvalds To: Alistair John Strachan cc: Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) In-Reply-To: <200805172109.59244.alistair@devzero.co.uk> Message-ID: References: <200805171922.56272.alistair@devzero.co.uk> <200805172109.59244.alistair@devzero.co.uk> User-Agent: Alpine 1.10 (LFD 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-MIMEDefang-Filter: lf$Revision: 1.188 $ X-Scanned-By: MIMEDefang 2.63 on 140.211.169.13 X-Barracuda-Connect: smtp1.linux-foundation.org[140.211.169.13] X-Barracuda-Start-Time: 1211059076 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.1, rules version 3.1.50651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15964 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: torvalds@linux-foundation.org Precedence: bulk X-list: xfs On Sat, 17 May 2008, Alistair John Strachan wrote: > > I actually had the opposite problem, too little was showing. I guess this is > because the log level the "SysRq : Show Blocked State" bit goes out on is > higher than the level of the actual result, so it was being trapped by sysklogd. Ahh, yeah, I hate how all the distro's hide the default messages. Bad, bad. > Regardless, I managed to get a log. Thanks for the help Linus.. > > Both XFS and md are showing up: Ok, looks like block device breakage, possibly MD-related. > [4294293.003500] SysRq : Show Blocked State > [4294293.003500] task PC stack pid father > [4294293.003500] pdflush D 0000000000000002 0 191 2 > [4294293.003500] ffff81007cee1660 0000000000000046 0000000000000082 0000000000000001 > [4294293.003500] 0000000000000001 ffff81007cee1610 ffff81007cee15e0 ffffffff80625dc0 > [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 > [4294293.003500] Call Trace: > [4294293.003500] [] ? raid5_unplug_device+0xdd/0xe6 > [4294293.003500] [] io_schedule+0x28/0x33 > [4294293.003500] [] sync_page+0x3f/0x43 > [4294293.003500] [] __wait_on_bit+0x45/0x77 > [4294293.003500] [] ? sync_page+0x0/0x43 > [4294293.003500] [] wait_on_page_bit+0x6f/0x76 Looks like something is waiting for IO to complete, and it never does. Which indicates the block layer. And yes, likely some race in unplugging. And while it is waiting, it is holding the XFS locks, because this was brought on by a low-memory situation: > [4294293.003500] [] __kmalloc+0x3e/0xe6 > [4294293.003500] [] ? xfs_iflush_int+0x272/0x2fb > [4294293.003500] [] kmem_alloc+0x6a/0xd1 > [4294293.003500] [] xfs_iflush_cluster+0x4b/0x33f > [4294293.003500] [] ? xfs_iflush_int+0x294/0x2fb > [4294293.003500] [] xfs_iflush+0x1bb/0x29d > [4294293.003500] [] xfs_inode_flush+0xb8/0xdd > [4294293.003500] [] xfs_fs_write_inode+0x30/0x4c And as a result, all the XFS stuff is then waiting for that lock which is held by pdflush above: > [4294293.003500] xfsdatad/0 D ffffffff8032085b 0 249 2 > [4294293.003500] ffff81007bd0bd70 0000000000000046 0000000000000002 0000000000000000 > [4294293.003500] ffff81007839c0d0 ffff81007bd0bd20 ffffffff8024660e ffffffff80625dc0 > [4294293.003500] ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 ffffffff80625dc0 > [4294293.003500] Call Trace: > [4294293.003500] [] __down_write_nested+0x91/0xab > [4294293.003500] [] __down_write+0xb/0xd > [4294293.003500] [] down_write_nested+0x2b/0x2f > [4294293.003500] [] xfs_ilock+0x5b/0x79 Jens, there's been a *lot* of breakage in the block layer. The DMA bounce buffer crap, and this looks like the atomic bit setting was broken too. Alistair, does the problem go away if you revert both the patch from Neil and the original patch that caused the need for that patch to begin with (ie commit 75ad23bc0fcb4f992a5d06982bf0857ab1738e9e "block: make queue flags non-atomic"). Jens, Nick, I think that whole series just needs to be undone. Linus From owner-xfs@oss.sgi.com Sat May 17 16:11:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 16:11:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HNBIKc009269 for ; Sat, 17 May 2008 16:11:20 -0700 X-ASG-Debug-ID: 1211065926-2e9a00fa0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.betherenow.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 5CC231B95D94 for ; Sat, 17 May 2008 16:12:06 -0700 (PDT) Received: from smtp1.betherenow.co.uk (smtp1.betherenow.co.uk [87.194.0.68]) by cuda.sgi.com with SMTP id ngQzSXDaY5o25fFr for ; Sat, 17 May 2008 16:12:06 -0700 (PDT) Received: from damocles.lan (87-194-153-38.bethere.co.uk [87.194.153.38]) by smtp1.betherenow.co.uk (Postfix) with ESMTP id A03C19802E; Sun, 18 May 2008 00:12:05 +0100 (BST) From: Alistair John Strachan To: Linus Torvalds X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Date: Sun, 18 May 2008 00:12:04 +0100 User-Agent: KMail/1.9.9 Cc: Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org References: <200805172109.59244.alistair@devzero.co.uk> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805180012.05011.alistair@devzero.co.uk> X-Barracuda-Connect: smtp1.betherenow.co.uk[87.194.0.68] X-Barracuda-Start-Time: 1211065927 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0038 1.0000 -1.9960 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.50 X-Barracuda-Spam-Status: No, SCORE=-1.50 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.1, rules version 3.1.50659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15965 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alistair@devzero.co.uk Precedence: bulk X-list: xfs On Saturday 17 May 2008 22:17:37 Linus Torvalds wrote: [snip] > Jens, there's been a *lot* of breakage in the block layer. The DMA bounce > buffer crap, and this looks like the atomic bit setting was broken too. > > Alistair, does the problem go away if you revert both the patch from Neil > and the original patch that caused the need for that patch to begin with > (ie commit 75ad23bc0fcb4f992a5d06982bf0857ab1738e9e "block: make queue > flags non-atomic"). I did a git revert on this and manually fixed up the conflicts; I also reverted Neil's patch. Unfortunately (though the WARNING is still gone) it doesn't fix the hang. > Jens, Nick, I think that whole series just needs to be undone. > > Linus -- Cheers, Alistair. 137/1 Warrender Park Road, Edinburgh, UK. From owner-xfs@oss.sgi.com Sat May 17 16:18:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 16:18:03 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HNI0F0010391 for ; Sat, 17 May 2008 16:18:01 -0700 X-ASG-Debug-ID: 1211066329-7f8800f80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F159A790449 for ; Sat, 17 May 2008 16:18:49 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id jT42TZS1RcpE7zkz for ; Sat, 17 May 2008 16:18:49 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 74AD4AC08DE; Sat, 17 May 2008 18:18:48 -0500 (CDT) Message-ID: <482F67D9.70400@sandeen.net> Date: Sat, 17 May 2008 18:18:49 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Greaves CC: David Chinner , LinuxRaid , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> In-Reply-To: <482EF6A7.2020909@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: 1211066329 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.1, rules version 3.1.50659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15966 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > I'll see if I have a little time today to track down the problem. Does this patch fix it for you? Does for me though I can't yet explain why ;) http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html -Eric From owner-xfs@oss.sgi.com Sat May 17 16:38:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 16:38:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4HNcQoW016615 for ; Sat, 17 May 2008 16:38:28 -0700 X-ASG-Debug-ID: 1211067554-7fa8015d0000-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 31E847904CC; Sat, 17 May 2008 16:39:14 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id bsWEt9Q7aEhydM1H; Sat, 17 May 2008 16:39:14 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JxVzY-0003yf-O9; Sat, 17 May 2008 23:39:08 +0000 Date: Sat, 17 May 2008 19:39:08 -0400 From: Christoph Hellwig To: Linus Torvalds Cc: Alistair John Strachan , Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org, dgc@sgi.com X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Message-ID: <20080517233908.GA15279@infradead.org> References: <200805171922.56272.alistair@devzero.co.uk> <200805172109.59244.alistair@devzero.co.uk> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="IJpNTDwzlM2Ie8A6" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211067555 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.1, rules version 3.1.50659 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15967 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs --IJpNTDwzlM2Ie8A6 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Sat, May 17, 2008 at 02:17:37PM -0700, Linus Torvalds wrote: > > [4294293.003500] [] __kmalloc+0x3e/0xe6 > > [4294293.003500] [] ? xfs_iflush_int+0x272/0x2fb > > [4294293.003500] [] kmem_alloc+0x6a/0xd1 > > [4294293.003500] [] xfs_iflush_cluster+0x4b/0x33f > > [4294293.003500] [] ? xfs_iflush_int+0x294/0x2fb > > [4294293.003500] [] xfs_iflush+0x1bb/0x29d > > [4294293.003500] [] xfs_inode_flush+0xb8/0xdd > > [4294293.003500] [] xfs_fs_write_inode+0x30/0x4c > > And as a result, all the XFS stuff is then waiting for that lock which is > held by pdflush above: Btw, just that function has a missing GFP_NOFS and a too large allocation which were fixed by Dave Chinner but aren't in mainline yet. Can you check whether it still happens with the patch below? --IJpNTDwzlM2Ie8A6 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=xfs-icluster-add-nofs On Thu, May 01, 2008 at 09:15:21AM -0400, Christoph Hellwig wrote: > On Thu, May 01, 2008 at 10:26:11PM +1000, David Chinner wrote: > > Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c > > =================================================================== > > --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 > > +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-01 20:04:55.151880341 +1000 > > @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( > > ASSERT(pag->pag_ici_init); > > > > ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); > > - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); > > + ilist = kmem_alloc(ilist_size, KM_NOFS); > > if (!ilist) > > return 0; > > This should be KM_MAYFAIL | KM_NOFS, because KM_NOFS doesn't imply that > the allocation may fail. Yes, right you are - I only looked at the effect of __GFP_FS, not what kmem_alloc does. i.e. kmem_flags_convert() doesn't do anything with KM_MAYFAIL, forgetting that it's kmem_alloc() that uses it... New patch below. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group --- Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-04-28 16:35:23.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-02 08:03:30.071824780 +1000 @@ -2986,7 +2986,7 @@ xfs_iflush_cluster( ASSERT(pag->pag_ici_init); ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); - ilist = kmem_alloc(ilist_size, KM_MAYFAIL); + ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); if (!ilist) return 0; --IJpNTDwzlM2Ie8A6 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=xfs-fix-icluster-alloc-size We only need to allocate space for the number of inodes in the cluster when writing back inodes, not every byte in the inode cluster. This reduces the amount of memory needing to be allocated to 256 bytes instead of 64k. Somebody pass me the brown paper bag, please. Signed-off-by: Dave Chinner --- fs/xfs/xfs_inode.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c =================================================================== --- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c 2008-05-16 19:43:55.000000000 +1000 +++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c 2008-05-16 19:47:47.778141722 +1000 @@ -2913,6 +2913,7 @@ xfs_iflush_cluster( xfs_mount_t *mp = ip->i_mount; xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); unsigned long first_index, mask; + unsigned long inodes_per_cluster; int ilist_size; xfs_inode_t **ilist; xfs_inode_t *iq; @@ -2924,7 +2925,8 @@ xfs_iflush_cluster( ASSERT(pag->pagi_inodeok); ASSERT(pag->pag_ici_init); - ilist_size = XFS_INODE_CLUSTER_SIZE(mp) * sizeof(xfs_inode_t *); + inodes_per_cluster = XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog; + ilist_size = inodes_per_cluster * sizeof(xfs_inode_t *); ilist = kmem_alloc(ilist_size, KM_MAYFAIL|KM_NOFS); if (!ilist) return 0; @@ -2934,8 +2936,7 @@ xfs_iflush_cluster( read_lock(&pag->pag_ici_lock); /* really need a gang lookup range call here */ nr_found = radix_tree_gang_lookup(&pag->pag_ici_root, (void**)ilist, - first_index, - XFS_INODE_CLUSTER_SIZE(mp)); + first_index, inodes_per_cluster); if (nr_found == 0) goto out_free; --IJpNTDwzlM2Ie8A6-- From owner-xfs@oss.sgi.com Sat May 17 22:22:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 17 May 2008 22:22:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4I5MbYj013022 for ; Sat, 17 May 2008 22:22:37 -0700 X-ASG-Debug-ID: 1211088205-397a02f20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 71CB0B82875 for ; Sat, 17 May 2008 22:23:25 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id k608SHpCV2uTixHC for ; Sat, 17 May 2008 22:23:25 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id CF27EAC08DE; Sun, 18 May 2008 00:23:23 -0500 (CDT) Message-ID: <482FBD4C.20608@sandeen.net> Date: Sun, 18 May 2008 00:23:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Greaves CC: David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> In-Reply-To: <482F67D9.70400@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: 1211088206 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.1, rules version 3.1.50684 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15968 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: > >> I'll see if I have a little time today to track down the problem. > > > Does this patch fix it for you? Does for me though I can't yet explain > why ;) > > http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html > > -Eric So what's happening is that xfs is trying to read a page-sized IO from the last sector of the log... which goes off the end of the device. This looks like another regression introduced by a9759f2de38a3443d5107bddde03b4f3f550060e, but fixed by Christoph's patch in the URL above, which should be headed towards -stable. (aside: it seems that this breaks any external log setup where the log consists of the entire device... but I'd have expected the xfsqa suite to catch this...?) The patch avoids the problem by looking for some extra locking but it seems to me that the root cause is that the buffer being read at this point doesn't have it's b_offset, the offset in it's page, set. Might be another little buglet but harmless it seems. -Eric From owner-xfs@oss.sgi.com Sun May 18 01:25:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 01:25:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4I8PW6J000469 for ; Sun, 18 May 2008 01:25:32 -0700 X-ASG-Debug-ID: 1211099179-4599020a0000-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 8E117183C94; Sun, 18 May 2008 01:26:19 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id qBrKxwUIGwZHxPd5; Sun, 18 May 2008 01:26:19 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JxeDi-0001XT-GI; Sun, 18 May 2008 08:26:18 +0000 Date: Sun, 18 May 2008 04:26:18 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-masters@oss.sgi.com, xfs , linux-mm X-ASG-Orig-Subj: Re: [xfs-masters] lockdep report (2.6.26-rc2) Subject: Re: [xfs-masters] lockdep report (2.6.26-rc2) Message-ID: <20080518082618.GA27923@infradead.org> References: <1210858590.3900.1.camel@johannes.berg> <20080515220757.GS155679365@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515220757.GS155679365@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211099181 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.1, rules version 3.1.50696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15969 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 08:07:57AM +1000, David Chinner wrote: > Fundamentally - if a filesystem takes the same lock in > ->file_aio_read as it does in ->release, then this will happen. > The lock outside the filesystem (the mmap lock) is can be taken > before we enter the filesystem or while we are inside a filesystem > method reading or writing data. > > In this case, XFS uses the iolock to serialise I/O vs truncate. > We hold the iolock shared over read I/O, and exclusive when we > do a truncate. The truncate in this case is a truncate of blocks > past EOF on ->release. > > Whether this can deadlock depends on whether these two things can > happen on the same mmap->sem and same inode at the same time. > I know they can happen onteh same inode at the same time, but > can this happen on the same mmap->sem? VM gurus? I think it can. Think of a process with two threads, and two open file instances of the same inode. thread 1: in read() fauling in from the inode via file 1 thread 2: at the same time dropping the last reference to a file via munmap. Getting this right would mean not doing any fputs from under the mmap_seem in munmap. From owner-xfs@oss.sgi.com Sun May 18 01:47:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 01:47:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4I8lkDN002393 for ; Sun, 18 May 2008 01:47:48 -0700 X-ASG-Debug-ID: 1211100514-459d02e70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BD659183C9F for ; Sun, 18 May 2008 01:48:35 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id kcZHhwIQ0aJV1TRa for ; Sun, 18 May 2008 01:48:35 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 142F3DEC97; Sun, 18 May 2008 09:53:09 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id IkBY9pGvvpg0; Sun, 18 May 2008 09:15:48 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id D1269DEC1D; Sun, 18 May 2008 09:53:08 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1JxeZF-0001TK-EH; Sun, 18 May 2008 09:48:33 +0100 Message-ID: <482FED60.7060405@dgreaves.com> Date: Sun, 18 May 2008 09:48:32 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Eric Sandeen CC: David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , LinuxRaid X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> In-Reply-To: <482FBD4C.20608@sandeen.net> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1211100515 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.1, rules version 3.1.50698 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15970 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> Eric Sandeen wrote: >> >>> I'll see if I have a little time today to track down the problem. >> >> Does this patch fix it for you? Does for me though I can't yet explain >> why ;) >> >> http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html >> >> -Eric Yes, this fixes it for me - thanks :) > So what's happening is that xfs is trying to read a page-sized IO from > the last sector of the log... which goes off the end of the device. > This looks like another regression introduced by > a9759f2de38a3443d5107bddde03b4f3f550060e, but fixed by Christoph's patch > in the URL above, which should be headed towards -stable. Damn, I guess I misread my bisect readings when things crashed then. Still, I said 'around' :) > (aside: it seems that this breaks any external log setup where the log > consists of the entire device... but I'd have expected the xfsqa suite > to catch this...?) > > The patch avoids the problem by looking for some extra locking but it > seems to me that the root cause is that the buffer being read at this > point doesn't have it's b_offset, the offset in it's page, set. Might > be another little buglet but harmless it seems. mmmm 'little buglets' in the filesystem holding a few Tb of data... mmmm Anything I can do to help find that? I suspect not if you can reproduce it. Anyhow - thanks again. David PS I'll be back soon, back in 2.6.23 I was hitting a hibernate/xfs bug which I've been avoiding by powering down. Well, it's still there in 2.6.25.3... From owner-xfs@oss.sgi.com Sun May 18 03:26:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 03:26:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IAQUVd011170 for ; Sun, 18 May 2008 03:26:31 -0700 X-ASG-Debug-ID: 1211106437-385302270000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C6203B84367 for ; Sun, 18 May 2008 03:27:18 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id In0aOfU0nYr6TLbt for ; Sun, 18 May 2008 03:27:18 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4IARAF3017670 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 18 May 2008 12:27:10 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4IARAqS017668 for xfs@oss.sgi.com; Sun, 18 May 2008 12:27:10 +0200 Date: Sun, 18 May 2008 12:27:10 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: take messages Subject: take messages Message-ID: <20080518102710.GA17618@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211106439 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1829 1.0000 -0.9191 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= X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15971 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs folks, any chance to get take messages sent to the list, please? Kust saw the tree is merged up to 2.6.25 (why not .26-rc, btw?) and there's been no take message sent to the list again.. From owner-xfs@oss.sgi.com Sun May 18 05:44:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 05:44:55 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_00,MISSING_HEADERS, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4ICiqTO028188 for ; Sun, 18 May 2008 05:44:53 -0700 X-ASG-Debug-ID: 1211114739-66cf03970000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7BB8A16E9E0F for ; Sun, 18 May 2008 05:45:39 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id R4865lasW7HGbQu6 for ; Sun, 18 May 2008 05:45:39 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id 883D83227F3 for ; Sun, 18 May 2008 14:45:38 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 47F28322821 for ; Sun, 18 May 2008 14:45:38 +0200 (CEST) Date: Sun, 18 May 2008 14:45:30 +0200 From: Emmanuel Florac Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080518144530.78989768@galadriel.home> In-Reply-To: <20080516222755.3e557c00@galadriel.home> References: <20080516222755.3e557c00@galadriel.home> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1211114741 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0013 1.0000 -2.0128 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MISSING_HEADERS X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50712 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.19 MISSING_HEADERS Missing To: header X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4ICirTO028193 X-archive-position: 15972 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Fri, 16 May 2008 22:27:55 +0200 vous écriviez: > History : this filesystem was extended (xfs_growfs) from 16TB to 24. > One important thing I forgot to mention : some time before I have extended the FS from 16 to 24 TB, the FS got filled up commpletely (186MB free!!!). I've asked the user to make some room to avoid problems, so they freed 1.6 TB in a couple of days before growing up the FS. Is it possible that something got wrong with the filesystem being too filled? -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Sun May 18 06:04:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 06:04:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_61 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4ID4Wpr029975 for ; Sun, 18 May 2008 06:04:33 -0700 X-ASG-Debug-ID: 1211115918-6ae702450000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ADE5312B6C9A for ; Sun, 18 May 2008 06:05:19 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id eGTHby1GhvbacLuF for ; Sun, 18 May 2008 06:05:19 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4ID5BF3028666 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 18 May 2008 15:05:11 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4ID5BS7028664 for xfs@oss.sgi.com; Sun, 18 May 2008 15:05:11 +0200 Date: Sun, 18 May 2008 15:05:11 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] streamline init/exit path Subject: [PATCH] streamline init/exit path Message-ID: <20080518130511.GA28501@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211115920 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50715 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15973 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Currently the xfs module init/exit code is a mess. It's farmed out over a lot of function with very little error checking. This patch merges xfs_init_zones and xfs_init into init_xfs_fs, and makes sure we propagate all initialization failures properly and clean up after them. Various runtime initializations are replaced with compile-time initializations where possible to make this easier. The exit path is similarly consolidated. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_stats.c 2008-05-16 16:02:43.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.c 2008-05-16 16:08:20.000000000 +0200 @@ -98,12 +98,21 @@ xfs_read_xfsstats( return len; } -void +int xfs_init_procfs(void) { if (!proc_mkdir("fs/xfs", NULL)) - return; - create_proc_read_entry("fs/xfs/stat", 0, NULL, xfs_read_xfsstats, NULL); + goto out; + + if (!create_proc_read_entry("fs/xfs/stat", 0, NULL, + xfs_read_xfsstats, NULL)) + goto out_remove_entry; + return 0; + + out_remove_entry: + remove_proc_entry("fs/xfs", NULL); + out: + return -ENOMEM; } void Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_stats.h 2008-05-16 16:04:05.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.h 2008-05-16 16:04:27.000000000 +0200 @@ -134,7 +134,7 @@ DECLARE_PER_CPU(struct xfsstats, xfsstat #define XFS_STATS_DEC(v) (per_cpu(xfsstats, current_cpu()).v--) #define XFS_STATS_ADD(v, inc) (per_cpu(xfsstats, current_cpu()).v += (inc)) -extern void xfs_init_procfs(void); +extern int xfs_init_procfs(void); extern void xfs_cleanup_procfs(void); @@ -144,8 +144,13 @@ extern void xfs_cleanup_procfs(void); # define XFS_STATS_DEC(count) # define XFS_STATS_ADD(count, inc) -static inline void xfs_init_procfs(void) { }; -static inline void xfs_cleanup_procfs(void) { }; +static inline int xfs_init_procfs(void) +{ + return 0 +}; +static inline void xfs_cleanup_procfs(void) +{ +}; #endif /* !CONFIG_PROC_FS */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-16 15:26:32.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-16 16:10:47.000000000 +0200 @@ -54,6 +54,12 @@ #include "xfs_trans_priv.h" #include "xfs_filestream.h" +#include "xfs_da_btree.h" +#include "xfs_dir2_trace.h" +#include "xfs_extfree_item.h" +#include "xfs_mru_cache.h" +#include "xfs_inode_item.h" + #include #include #include @@ -876,42 +882,6 @@ xfs_fs_inode_init_once( inode_init_once(vn_to_inode((bhv_vnode_t *)vnode)); } -STATIC int __init -xfs_init_zones(void) -{ - xfs_vnode_zone = kmem_zone_init_flags(sizeof(bhv_vnode_t), "xfs_vnode", - KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | - KM_ZONE_SPREAD, - xfs_fs_inode_init_once); - if (!xfs_vnode_zone) - goto out; - - xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend"); - if (!xfs_ioend_zone) - goto out_destroy_vnode_zone; - - xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE, - xfs_ioend_zone); - if (!xfs_ioend_pool) - goto out_free_ioend_zone; - return 0; - - out_free_ioend_zone: - kmem_zone_destroy(xfs_ioend_zone); - out_destroy_vnode_zone: - kmem_zone_destroy(xfs_vnode_zone); - out: - return -ENOMEM; -} - -STATIC void -xfs_destroy_zones(void) -{ - mempool_destroy(xfs_ioend_pool); - kmem_zone_destroy(xfs_vnode_zone); - kmem_zone_destroy(xfs_ioend_zone); -} - /* * Attempt to flush the inode, this will actually fail * if the inode is pinned, but we dirty the inode again @@ -1831,7 +1801,7 @@ EXPORT_SYMBOL(xfs_fs_type); STATIC int __init -init_xfs_fs( void ) +init_xfs_fs(void) { int error; static char message[] __initdata = KERN_INFO \ @@ -1840,31 +1810,201 @@ init_xfs_fs( void ) printk(message); ktrace_init(64); + vn_init(); + xfs_dir_startup(); - error = xfs_init_zones(); - if (error < 0) - goto undo_zones; + error = -ENOMEM; + xfs_vnode_zone = kmem_zone_init_flags(sizeof(bhv_vnode_t), "xfs_vnode", + KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | + KM_ZONE_SPREAD, + xfs_fs_inode_init_once); + if (!xfs_vnode_zone) + goto out; + + xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend"); + if (!xfs_ioend_zone) + goto out_destroy_vnode_zone; + + xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE, + xfs_ioend_zone); + if (!xfs_ioend_pool) + goto out_destroy_ioend_zone; + + xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), + "xfs_log_ticket"); + if (!xfs_log_ticket_zone) + goto out_destroy_ioend_pool; + + xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), + "xfs_bmap_free_item"); + if (!xfs_bmap_free_item_zone) + goto out_destroy_log_ticket_zone; + xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), + "xfs_btree_cur"); + if (!xfs_btree_cur_zone) + goto out_destroy_bmap_free_item_zone; + + xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), + "xfs_da_state"); + if (!xfs_da_state_zone) + goto out_destroy_btree_cur_zone; + + xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); + if (!xfs_dabuf_zone) + goto out_destroy_da_state_zone; + + xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); + if (!xfs_ifork_zone) + goto out_destroy_dabuf_zone; + + xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); + if (!xfs_trans_zone) + goto out_destroy_ifork_zone; + + /* + * The size of the zone allocated buf log item is the maximum + * size possible under XFS. This wastes a little bit of memory, + * but it is much faster. + */ + xfs_buf_item_zone = kmem_zone_init((sizeof(xfs_buf_log_item_t) + + (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / + NBWORD) * sizeof(int))), "xfs_buf_item"); + if (!xfs_buf_item_zone) + goto out_destroy_trans_zone; + + xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) + + ((XFS_EFD_MAX_FAST_EXTENTS - 1) * + sizeof(xfs_extent_t))), "xfs_efd_item"); + if (!xfs_efd_zone) + goto out_destroy_buf_item_zone; + + xfs_efi_zone = kmem_zone_init((sizeof(xfs_efi_log_item_t) + + ((XFS_EFI_MAX_FAST_EXTENTS - 1) * + sizeof(xfs_extent_t))), "xfs_efi_item"); + if (!xfs_efi_zone) + goto out_destroy_efd_zone; + + xfs_inode_zone = + kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode", + KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | + KM_ZONE_SPREAD, NULL); + if (!xfs_inode_zone) + goto out_destroy_efi_zone; + + xfs_ili_zone = + kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", + KM_ZONE_SPREAD, NULL); + if (!xfs_ili_zone) + goto out_destroy_inode_zone; + +#ifdef CONFIG_XFS_POSIX_ACL + xfs_acl_zone = kmem_zone_init(sizeof(xfs_acl_t), "xfs_acl"); + if (!xfs_acl_zone) + goto out_destroy_ili_zone; +#endif + +#ifdef XFS_ALLOC_TRACE + xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_SLEEP); +#endif +#ifdef XFS_BMAP_TRACE + xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_SLEEP); +#endif +#ifdef XFS_BMBT_TRACE + xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_SLEEP); +#endif +#ifdef XFS_ATTR_TRACE + xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_SLEEP); +#endif +#ifdef XFS_DIR2_TRACE + xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_SLEEP); +#endif + + error = xfs_mru_cache_init(); + if (error) + goto out_free_trace_buffers; + + error = xfs_filestream_init(); + if (error) + goto out_mru_cache_uninit; error = xfs_buf_init(); if (error < 0) - goto undo_buffers; + goto out_filestream_uninit; - vn_init(); - xfs_init(); - uuid_init(); + error = xfs_init_procfs(); + if (error < 0) + goto out_buf_terminate; + + error = xfs_sysctl_register(); + if (error < 0) + goto out_cleanup_procfs; error = register_filesystem(&xfs_fs_type); if (error) - goto undo_register; + goto out_sysctl_unregister; return 0; -undo_register: + out_sysctl_unregister: + xfs_sysctl_unregister(); + out_cleanup_procfs: + xfs_cleanup_procfs(); + out_buf_terminate: xfs_buf_terminate(); + out_filestream_uninit: + xfs_filestream_uninit(); + out_mru_cache_uninit: + xfs_mru_cache_uninit(); + out_free_trace_buffers: +#ifdef XFS_DIR2_TRACE + ktrace_free(xfs_dir2_trace_buf); +#endif +#ifdef XFS_ATTR_TRACE + ktrace_free(xfs_attr_trace_buf); +#endif +#ifdef XFS_BMBT_TRACE + ktrace_free(xfs_bmbt_trace_buf); +#endif +#ifdef XFS_BMAP_TRACE + ktrace_free(xfs_bmap_trace_buf); +#endif +#ifdef XFS_ALLOC_TRACE + ktrace_free(xfs_alloc_trace_buf); +#endif -undo_buffers: - xfs_destroy_zones(); - -undo_zones: +#ifdef CONFIG_XFS_POSIX_ACL + kmem_zone_destroy(xfs_acl_zone); + out_destroy_ili_zone: +#endif + kmem_zone_destroy(xfs_ili_zone); + out_destroy_inode_zone: + kmem_zone_destroy(xfs_inode_zone); + out_destroy_efi_zone: + kmem_zone_destroy(xfs_efi_zone); + out_destroy_efd_zone: + kmem_zone_destroy(xfs_efd_zone); + out_destroy_buf_item_zone: + kmem_zone_destroy(xfs_buf_item_zone); + out_destroy_trans_zone: + kmem_zone_destroy(xfs_trans_zone); + out_destroy_ifork_zone: + kmem_zone_destroy(xfs_ifork_zone); + out_destroy_dabuf_zone: + kmem_zone_destroy(xfs_dabuf_zone); + out_destroy_da_state_zone: + kmem_zone_destroy(xfs_da_state_zone); + out_destroy_btree_cur_zone: + kmem_zone_destroy(xfs_btree_cur_zone); + out_destroy_bmap_free_item_zone: + kmem_zone_destroy(xfs_bmap_free_item_zone); + out_destroy_log_ticket_zone: + kmem_zone_destroy(xfs_log_ticket_zone); + out_destroy_ioend_pool: + mempool_destroy(xfs_ioend_pool); + out_destroy_ioend_zone: + kmem_zone_destroy(xfs_ioend_zone); + out_destroy_vnode_zone: + kmem_zone_destroy(xfs_vnode_zone); + out: return error; } @@ -1872,9 +2012,47 @@ STATIC void __exit exit_xfs_fs( void ) { unregister_filesystem(&xfs_fs_type); - xfs_cleanup(); + xfs_sysctl_unregister(); + xfs_cleanup_procfs(); xfs_buf_terminate(); - xfs_destroy_zones(); + xfs_filestream_uninit(); + xfs_mru_cache_uninit(); + +#ifdef XFS_DIR2_TRACE + ktrace_free(xfs_dir2_trace_buf); +#endif +#ifdef XFS_ATTR_TRACE + ktrace_free(xfs_attr_trace_buf); +#endif +#ifdef XFS_BMBT_TRACE + ktrace_free(xfs_bmbt_trace_buf); +#endif +#ifdef XFS_BMAP_TRACE + ktrace_free(xfs_bmap_trace_buf); +#endif +#ifdef XFS_ALLOC_TRACE + ktrace_free(xfs_alloc_trace_buf); +#endif + +#ifdef CONFIG_XFS_POSIX_ACL + kmem_zone_destroy(xfs_acl_zone); +#endif + kmem_zone_destroy(xfs_ili_zone); + kmem_zone_destroy(xfs_inode_zone); + kmem_zone_destroy(xfs_efi_zone); + kmem_zone_destroy(xfs_efd_zone); + kmem_zone_destroy(xfs_buf_item_zone); + kmem_zone_destroy(xfs_trans_zone); + kmem_zone_destroy(xfs_ifork_zone); + kmem_zone_destroy(xfs_dabuf_zone); + kmem_zone_destroy(xfs_da_state_zone); + kmem_zone_destroy(xfs_btree_cur_zone); + kmem_zone_destroy(xfs_bmap_free_item_zone); + kmem_zone_destroy(xfs_log_ticket_zone); + mempool_destroy(xfs_ioend_pool); + kmem_zone_destroy(xfs_ioend_zone); + kmem_zone_destroy(xfs_vnode_zone); + ktrace_uninit(); } Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_sysctl.c 2008-05-16 16:05:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.c 2008-05-16 16:05:31.000000000 +0200 @@ -259,15 +259,17 @@ static ctl_table xfs_root_table[] = { {} }; -void +int xfs_sysctl_register(void) { xfs_table_header = register_sysctl_table(xfs_root_table); + if (!xfs_table_header) + return -ENOMEM; + return 0; } void xfs_sysctl_unregister(void) { - if (xfs_table_header) - unregister_sysctl_table(xfs_table_header); + unregister_sysctl_table(xfs_table_header); } Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_sysctl.h 2008-05-16 16:05:32.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.h 2008-05-16 16:05:43.000000000 +0200 @@ -93,10 +93,10 @@ enum { extern xfs_param_t xfs_params; #ifdef CONFIG_SYSCTL -extern void xfs_sysctl_register(void); +extern int xfs_sysctl_register(void); extern void xfs_sysctl_unregister(void); #else -# define xfs_sysctl_register() do { } while (0) +# define xfs_sysctl_register() (0) # define xfs_sysctl_unregister() do { } while (0) #endif /* CONFIG_SYSCTL */ Index: linux-2.6-xfs/fs/xfs/support/uuid.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/support/uuid.c 2008-05-16 15:35:07.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/support/uuid.c 2008-05-16 15:35:23.000000000 +0200 @@ -17,7 +17,7 @@ */ #include -static mutex_t uuid_monitor; +static DEFINE_MUTEX(uuid_monitor); static int uuid_table_size; static uuid_t *uuid_table; @@ -132,9 +132,3 @@ uuid_table_remove(uuid_t *uuid) ASSERT(i < uuid_table_size); mutex_unlock(&uuid_monitor); } - -void __init -uuid_init(void) -{ - mutex_init(&uuid_monitor); -} Index: linux-2.6-xfs/fs/xfs/support/uuid.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/support/uuid.h 2008-05-16 15:35:24.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/support/uuid.h 2008-05-16 15:35:27.000000000 +0200 @@ -22,7 +22,6 @@ typedef struct { unsigned char __u_bits[16]; } uuid_t; -extern void uuid_init(void); extern void uuid_create_nil(uuid_t *uuid); extern int uuid_is_nil(uuid_t *uuid); extern int uuid_equal(uuid_t *uuid1, uuid_t *uuid2); Index: linux-2.6-xfs/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_da_btree.c 2008-05-16 15:36:34.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_da_btree.c 2008-05-16 15:36:50.000000000 +0200 @@ -2218,7 +2218,7 @@ xfs_da_state_free(xfs_da_state_t *state) #ifdef XFS_DABUF_DEBUG xfs_dabuf_t *xfs_dabuf_global_list; -spinlock_t xfs_dabuf_global_lock; +static DEFINE_SPINLOCK(xfs_dabuf_global_lock); #endif /* Index: linux-2.6-xfs/fs/xfs/xfs_error.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.c 2008-05-16 15:54:00.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.c 2008-05-16 15:54:08.000000000 +0200 @@ -66,14 +66,6 @@ int xfs_etest[XFS_NUM_INJECT_ERROR]; int64_t xfs_etest_fsid[XFS_NUM_INJECT_ERROR]; char * xfs_etest_fsname[XFS_NUM_INJECT_ERROR]; -void -xfs_error_test_init(void) -{ - memset(xfs_etest, 0, sizeof(xfs_etest)); - memset(xfs_etest_fsid, 0, sizeof(xfs_etest_fsid)); - memset(xfs_etest_fsname, 0, sizeof(xfs_etest_fsname)); -} - int xfs_error_test(int error_tag, int *fsidp, char *expression, int line, char *file, unsigned long randfactor) Index: linux-2.6-xfs/fs/xfs/xfs_error.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.h 2008-05-16 15:54:09.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.h 2008-05-16 15:54:11.000000000 +0200 @@ -127,7 +127,6 @@ extern void xfs_corruption_error(char *t #if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) extern int xfs_error_test(int, int *, char *, int, char *, unsigned long); -extern void xfs_error_test_init(void); #define XFS_NUM_INJECT_ERROR 10 Index: linux-2.6-xfs/fs/xfs/xfs_filestream.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_filestream.c 2008-05-16 15:59:36.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_filestream.c 2008-05-16 16:00:19.000000000 +0200 @@ -397,10 +397,12 @@ int xfs_filestream_init(void) { item_zone = kmem_zone_init(sizeof(fstrm_item_t), "fstrm_item"); + if (!item_zone) + return -ENOMEM; #ifdef XFS_FILESTREAMS_TRACE xfs_filestreams_trace_buf = ktrace_alloc(XFS_FSTRM_KTRACE_SIZE, KM_SLEEP); #endif - return item_zone ? 0 : -ENOMEM; + return 0; } /* Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-16 15:26:16.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-16 15:26:22.000000000 +0200 @@ -543,9 +543,6 @@ extern void xfs_qmops_put(struct xfs_mou extern struct xfs_dmops xfs_dmcore_xfs; -extern int xfs_init(void); -extern void xfs_cleanup(void); - #endif /* __KERNEL__ */ #endif /* __XFS_MOUNT_H__ */ Index: linux-2.6-xfs/fs/xfs/xfs_mru_cache.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mru_cache.c 2008-05-16 15:54:38.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mru_cache.c 2008-05-16 15:56:27.000000000 +0200 @@ -307,15 +307,18 @@ xfs_mru_cache_init(void) xfs_mru_elem_zone = kmem_zone_init(sizeof(xfs_mru_cache_elem_t), "xfs_mru_cache_elem"); if (!xfs_mru_elem_zone) - return ENOMEM; + goto out; xfs_mru_reap_wq = create_singlethread_workqueue("xfs_mru_cache"); - if (!xfs_mru_reap_wq) { - kmem_zone_destroy(xfs_mru_elem_zone); - return ENOMEM; - } + if (!xfs_mru_reap_wq) + goto out_destroy_mru_elem_zone; return 0; + + out_destroy_mru_elem_zone: + kmem_zone_destroy(xfs_mru_elem_zone); + out: + return -ENOMEM; } void Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-16 15:26:32.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-16 15:26:59.000000000 +0200 @@ -58,137 +58,6 @@ #include "xfs_utils.h" -int __init -xfs_init(void) -{ -#ifdef XFS_DABUF_DEBUG - extern spinlock_t xfs_dabuf_global_lock; - spin_lock_init(&xfs_dabuf_global_lock); -#endif - - /* - * Initialize all of the zone allocators we use. - */ - xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), - "xfs_log_ticket"); - xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), - "xfs_bmap_free_item"); - xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), - "xfs_btree_cur"); - xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), - "xfs_da_state"); - xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); - xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); - xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); - xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); - xfs_mru_cache_init(); - xfs_filestream_init(); - - /* - * The size of the zone allocated buf log item is the maximum - * size possible under XFS. This wastes a little bit of memory, - * but it is much faster. - */ - xfs_buf_item_zone = - kmem_zone_init((sizeof(xfs_buf_log_item_t) + - (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / - NBWORD) * sizeof(int))), - "xfs_buf_item"); - xfs_efd_zone = - kmem_zone_init((sizeof(xfs_efd_log_item_t) + - ((XFS_EFD_MAX_FAST_EXTENTS - 1) * - sizeof(xfs_extent_t))), - "xfs_efd_item"); - xfs_efi_zone = - kmem_zone_init((sizeof(xfs_efi_log_item_t) + - ((XFS_EFI_MAX_FAST_EXTENTS - 1) * - sizeof(xfs_extent_t))), - "xfs_efi_item"); - - /* - * These zones warrant special memory allocator hints - */ - xfs_inode_zone = - kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode", - KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | - KM_ZONE_SPREAD, NULL); - xfs_ili_zone = - kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", - KM_ZONE_SPREAD, NULL); - - /* - * Allocate global trace buffers. - */ -#ifdef XFS_ALLOC_TRACE - xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_BMAP_TRACE - xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_BMBT_TRACE - xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_ATTR_TRACE - xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_DIR2_TRACE - xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_SLEEP); -#endif - - xfs_dir_startup(); - -#if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) - xfs_error_test_init(); -#endif /* DEBUG || INDUCE_IO_ERROR */ - - xfs_init_procfs(); - xfs_sysctl_register(); - return 0; -} - -void __exit -xfs_cleanup(void) -{ - extern kmem_zone_t *xfs_inode_zone; - extern kmem_zone_t *xfs_efd_zone; - extern kmem_zone_t *xfs_efi_zone; - - xfs_cleanup_procfs(); - xfs_sysctl_unregister(); - xfs_filestream_uninit(); - xfs_mru_cache_uninit(); - xfs_acl_zone_destroy(xfs_acl_zone); - -#ifdef XFS_DIR2_TRACE - ktrace_free(xfs_dir2_trace_buf); -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); -#endif -#ifdef XFS_BMBT_TRACE - ktrace_free(xfs_bmbt_trace_buf); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); -#endif - - kmem_zone_destroy(xfs_bmap_free_item_zone); - kmem_zone_destroy(xfs_btree_cur_zone); - kmem_zone_destroy(xfs_inode_zone); - kmem_zone_destroy(xfs_trans_zone); - kmem_zone_destroy(xfs_da_state_zone); - kmem_zone_destroy(xfs_dabuf_zone); - kmem_zone_destroy(xfs_buf_item_zone); - kmem_zone_destroy(xfs_efd_zone); - kmem_zone_destroy(xfs_efi_zone); - kmem_zone_destroy(xfs_ifork_zone); - kmem_zone_destroy(xfs_ili_zone); - kmem_zone_destroy(xfs_log_ticket_zone); -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) From owner-xfs@oss.sgi.com Sun May 18 06:06:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 06:06:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4ID6SYq030430 for ; Sun, 18 May 2008 06:06:28 -0700 X-ASG-Debug-ID: 1211116036-642900a50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EDB731847E9 for ; Sun, 18 May 2008 06:07:16 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id Zf2V9QRDPdMpy4QA for ; Sun, 18 May 2008 06:07:16 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4ID77F3028769 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 18 May 2008 15:07:07 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4ID774u028767 for xfs@oss.sgi.com; Sun, 18 May 2008 15:07:07 +0200 Date: Sun, 18 May 2008 15:07:07 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] don't update i_size for directories and special files Subject: [PATCH] don't update i_size for directories and special files Message-ID: <20080518130707.GB28501@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211116037 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.1, rules version 3.1.50714 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15974 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs The core kernel uses vfs_getattr to look at the inode size and similar attributes, so there is no need to keep i_size uptodate for directories or special files. This means we can remove xfs_validate_fields because the I/O path already keeps i_size uptodate for regular files. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-16 17:01:36.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-16 17:07:40.000000000 +0200 @@ -188,23 +188,6 @@ xfs_ichgtime_fast( mark_inode_dirty_sync(inode); } - -/* - * Pull the link count and size up from the xfs inode to the linux inode - */ -STATIC void -xfs_validate_fields( - struct inode *inode) -{ - struct xfs_inode *ip = XFS_I(inode); - loff_t size; - - /* we're under i_sem so i_size can't change under us */ - size = XFS_ISIZE(ip); - if (i_size_read(inode) != size) - i_size_write(inode, size); -} - /* * Hook in SELinux. This is not quite correct yet, what we really need * here (as we do for default ACLs) is a mechanism by which creation of @@ -338,10 +321,7 @@ xfs_vn_mknod( } - if (S_ISDIR(mode)) - xfs_validate_fields(inode); d_instantiate(dentry, inode); - xfs_validate_fields(dir); return -error; out_cleanup_inode: @@ -417,7 +397,6 @@ xfs_vn_link( } xfs_iflags_set(XFS_I(dir), XFS_IMODIFIED); - xfs_validate_fields(inode); d_instantiate(dentry, inode); return 0; } @@ -427,19 +406,11 @@ xfs_vn_unlink( struct inode *dir, struct dentry *dentry) { - struct inode *inode; + struct inode *inode = dentry->d_inode; struct xfs_name name; - int error; - inode = dentry->d_inode; xfs_dentry_to_name(&name, dentry); - - error = xfs_remove(XFS_I(dir), &name, XFS_I(inode)); - if (likely(!error)) { - xfs_validate_fields(dir); /* size needs update */ - xfs_validate_fields(inode); - } - return -error; + return -xfs_remove(XFS_I(dir), &name, XFS_I(inode)); } STATIC int @@ -469,8 +440,6 @@ xfs_vn_symlink( goto out_cleanup_inode; d_instantiate(dentry, inode); - xfs_validate_fields(dir); - xfs_validate_fields(inode); return 0; out_cleanup_inode: @@ -489,22 +458,13 @@ xfs_vn_rename( struct inode *new_inode = ndentry->d_inode; struct xfs_name oname; struct xfs_name nname; - int error; xfs_dentry_to_name(&oname, odentry); xfs_dentry_to_name(&nname, ndentry); - error = xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), + return -xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), XFS_I(ndir), &nname, new_inode ? XFS_I(new_inode) : NULL); - if (likely(!error)) { - if (new_inode) - xfs_validate_fields(new_inode); - xfs_validate_fields(odir); - if (ndir != odir) - xfs_validate_fields(ndir); - } - return -error; } /* From owner-xfs@oss.sgi.com Sun May 18 06:18:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 06:18:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IDI7nh031853 for ; Sun, 18 May 2008 06:18:09 -0700 X-ASG-Debug-ID: 1211116735-34ed039a0000-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 75F07184B67 for ; Sun, 18 May 2008 06:18:56 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4FOxnIFsWmOMuf4s for ; Sun, 18 May 2008 06:18:56 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jximt-0001Yj-Jr; Sun, 18 May 2008 13:18:55 +0000 Date: Sun, 18 May 2008 09:18:55 -0400 From: Christoph Hellwig To: Emmanuel Florac Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080518131855.GA1383@infradead.org> References: <20080516222755.3e557c00@galadriel.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080516222755.3e557c00@galadriel.home> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211116736 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.1, rules version 3.1.50716 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15975 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 10:27:55PM +0200, Emmanuel Florac wrote: > cluster1:/proc/sys/fs# xfs_db -r -c 'freesp -s -a 0' /dev/vg0/lv0 > from to extents blocks pct > 1 1 5 5 71.43 > 2 3 1 2 28.57 > total free extents 6 > total free blocks 7 > average free extent size 1.16667 > > 7 blocks free? But there are 9 TB of free space! The -a 0 means you're only looking at the first AG, which given the history of the filesystem has a fair chance to be full. To get the summary for all AG do a xfs_db -r -c 'freesp -s' /dev/vg0/lv0 No idea yet on what could cause your problem, sorry. > The only significant thing I see is that the FS is really close to 16 > TB of allocated data (15.7TB). I tried mounting it with "inode64" > option with no more loving. Did you remount it with that option as in mount -o remount or did you completely unmount it and mount it again? Unfortunately none of the xfs-specific mount options can be reset with remount yet, and it doesn't return an error either (both are added to my todo list now) From owner-xfs@oss.sgi.com Sun May 18 06:20:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 06:20:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IDKcRc032372 for ; Sun, 18 May 2008 06:20:40 -0700 X-ASG-Debug-ID: 1211116887-6427014d0000-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 14D947902A1 for ; Sun, 18 May 2008 06:21:27 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id O8364EZOnIWew2YQ for ; Sun, 18 May 2008 06:21:27 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JxipL-0006OX-HC; Sun, 18 May 2008 13:21:27 +0000 Date: Sun, 18 May 2008 09:21:27 -0400 From: Christoph Hellwig To: Emmanuel Florac Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080518132127.GA19006@infradead.org> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080518131855.GA1383@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211116888 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.1, rules version 3.1.50716 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15976 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sun, May 18, 2008 at 09:18:55AM -0400, Christoph Hellwig wrote: > > The only significant thing I see is that the FS is really close to 16 > > TB of allocated data (15.7TB). I tried mounting it with "inode64" > > option with no more loving. > > Did you remount it with that option as in mount -o remount or did you > completely unmount it and mount it again? Unfortunately none of the > xfs-specific mount options can be reset with remount yet, and it doesn't > return an error either (both are added to my todo list now) Oh, and please post the output of /proc/self/mounts to see if all expected mount options are actualy seen by the filesystem. From owner-xfs@oss.sgi.com Sun May 18 06:41:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 06:41:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IDfb1s001981 for ; Sun, 18 May 2008 06:41:37 -0700 X-ASG-Debug-ID: 1211118145-0d44003e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 81A6A790405 for ; Sun, 18 May 2008 06:42:25 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id tI99b3k4vHjEq3VP for ; Sun, 18 May 2008 06:42:25 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id 4D272322818; Sun, 18 May 2008 15:42:25 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 021A3322812; Sun, 18 May 2008 15:42:24 +0200 (CEST) Date: Sun, 18 May 2008 15:42:08 +0200 From: Emmanuel Florac To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080518154208.77b6be3e@galadriel.home> In-Reply-To: <20080518132127.GA19006@infradead.org> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1211118146 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.1, rules version 3.1.50716 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4IDfb1s001983 X-archive-position: 15977 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Sun, 18 May 2008 09:21:27 -0400 vous écriviez: > > Did you remount it with that option as in mount -o remount or did > > you completely unmount it and mount it again? Unfortunately none > > of the xfs-specific mount options can be reset with remount yet, > > and it doesn't return an error either (both are added to my todo > > list now) > IIRC I tried both, however I'll double check monday... > Oh, and please post the output of /proc/self/mounts to see if all > expected mount options are actualy seen by the filesystem. OK, thanks. -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Sun May 18 07:12:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 07:12:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IEC0Ci004830 for ; Sun, 18 May 2008 07:12:01 -0700 X-ASG-Debug-ID: 1211119968-25e400700000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.betherenow.co.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id D36CD184D38 for ; Sun, 18 May 2008 07:12:49 -0700 (PDT) Received: from smtp1.betherenow.co.uk (smtp1.betherenow.co.uk [87.194.0.68]) by cuda.sgi.com with SMTP id OmBFL0uQQ3jBMY54 for ; Sun, 18 May 2008 07:12:49 -0700 (PDT) Received: from damocles.lan (87-194-153-38.bethere.co.uk [87.194.153.38]) by smtp1.betherenow.co.uk (Postfix) with ESMTP id 9624FB0001; Sun, 18 May 2008 15:12:43 +0100 (BST) From: Alistair John Strachan To: Christoph Hellwig X-ASG-Orig-Subj: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Subject: Re: XFS/md/blkdev warning (was Re: Linux 2.6.26-rc2) Date: Sun, 18 May 2008 15:12:42 +0100 User-Agent: KMail/1.9.9 Cc: Linus Torvalds , Jens Axboe , xfs@oss.sgi.com, Neil Brown , Nick Piggin , linux-kernel@vger.kernel.org, dgc@sgi.com References: <20080517233908.GA15279@infradead.org> In-Reply-To: <20080517233908.GA15279@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805181512.42921.alistair@devzero.co.uk> X-Barracuda-Connect: smtp1.betherenow.co.uk[87.194.0.68] X-Barracuda-Start-Time: 1211119969 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.1, rules version 3.1.50718 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15978 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alistair@devzero.co.uk Precedence: bulk X-list: xfs On Sunday 18 May 2008 00:39:08 Christoph Hellwig wrote: > On Sat, May 17, 2008 at 02:17:37PM -0700, Linus Torvalds wrote: > > > [4294293.003500] [] __kmalloc+0x3e/0xe6 > > > [4294293.003500] [] ? xfs_iflush_int+0x272/0x2fb > > > [4294293.003500] [] kmem_alloc+0x6a/0xd1 > > > [4294293.003500] [] xfs_iflush_cluster+0x4b/0x33f > > > [4294293.003500] [] ? xfs_iflush_int+0x294/0x2fb > > > [4294293.003500] [] xfs_iflush+0x1bb/0x29d > > > [4294293.003500] [] xfs_inode_flush+0xb8/0xdd > > > [4294293.003500] [] xfs_fs_write_inode+0x30/0x4c > > > > And as a result, all the XFS stuff is then waiting for that lock which is > > held by pdflush above: > > Btw, just that function has a missing GFP_NOFS and a too large > allocation which were fixed by Dave Chinner but aren't in mainline > yet. Can you check whether it still happens with the patch below? These patches fix the problem. Thanks Christoph. -- Cheers, Alistair. 137/1 Warrender Park Road, Edinburgh, UK. From owner-xfs@oss.sgi.com Sun May 18 08:34:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 08:35:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IFYwua015560 for ; Sun, 18 May 2008 08:34:59 -0700 X-ASG-Debug-ID: 1211124946-57f901750000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ABA7F16E9FB4 for ; Sun, 18 May 2008 08:35:46 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8CwshVhoHRSOiJGc for ; Sun, 18 May 2008 08:35:46 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4IFZdF3005561 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 18 May 2008 17:35:39 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4IFZd86005559 for xfs@oss.sgi.com; Sun, 18 May 2008 17:35:39 +0200 Date: Sun, 18 May 2008 17:35:39 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] fix mount option parsing in remount Subject: [PATCH] fix mount option parsing in remount Message-ID: <20080518153539.GA5218@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211124947 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.1, rules version 3.1.50724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15979 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Remount currently happily accept any option thrown at it, although the only filesystem specific option it actually handles is barrier/nobarrier. And it actually doesn't handle these correctly either because it only uses the value it parsed when we're doing a ro->rw transition. In addition to that there's also a bad bug in xfs_parseargs which doesn't touch the actual option in the mount point except for a single one, XFS_MOUNT_SMALL_INUMS and thus forced any filesystem that's every remounted in some way to not support 64bit inodes with no way to recover unless unmounted. This patch changes xfs_fs_remount to use it's own linux/parser.h based options parse instead of xfs_parseargs and reject all options except for barrier/nobarrier and to the right thing in general. Eventually I'd like to have a single big option table used for mount aswell but that can wait for a while. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-18 15:22:23.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-18 15:59:32.000000000 +0200 @@ -67,6 +67,7 @@ #include #include #include +#include static struct quotactl_ops xfs_quotactl_operations; static struct super_operations xfs_super_operations; @@ -1255,6 +1256,19 @@ xfs_fs_statfs( return 0; } +/* + * Eventually we should extend this table and use it for mount, too. + */ +enum { + Opt_barrier, Opt_nobarrier, Opt_err +}; + +static match_table_t tokens = { + {Opt_barrier, "barrier"}, + {Opt_nobarrier, "nobarrier"}, + {Opt_err, NULL} +}; + STATIC int xfs_fs_remount( struct super_block *sb, @@ -1262,36 +1276,54 @@ xfs_fs_remount( char *options) { struct xfs_mount *mp = XFS_M(sb); - struct xfs_mount_args *args; - int error; + substring_t args[MAX_OPT_ARGS]; + char *p; - args = xfs_args_allocate(sb, 0); - if (!args) - return -ENOMEM; + while ((p = strsep(&options, ",")) != NULL) { + int token; - error = xfs_parseargs(mp, options, args, 1); - if (error) - goto out_free_args; + if (!*p) + continue; - if (!(*flags & MS_RDONLY)) { /* rw/ro -> rw */ - if (mp->m_flags & XFS_MOUNT_RDONLY) - mp->m_flags &= ~XFS_MOUNT_RDONLY; - if (args->flags & XFSMNT_BARRIER) { + token = match_token(p, tokens, args); + switch (token) { + case Opt_barrier: mp->m_flags |= XFS_MOUNT_BARRIER; - xfs_mountfs_check_barriers(mp); - } else { + + /* + * Test if barriers are actually working if we can, + * else delay this check until the filesystem is + * marked writeable. + */ + if (!(mp->m_flags & XFS_MOUNT_RDONLY)) + xfs_mountfs_check_barriers(mp); + break; + case Opt_nobarrier: mp->m_flags &= ~XFS_MOUNT_BARRIER; + break; + default: + printk(KERN_INFO + "XFS: mount option \"%s\" not support for remount\n", p); + return -EINVAL; } - } else if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { /* rw -> ro */ + } + + /* rw/ro -> rw */ + if ((mp->m_flags & XFS_MOUNT_RDONLY) && !(*flags & MS_RDONLY)) { + mp->m_flags &= ~XFS_MOUNT_RDONLY; + if (mp->m_flags & XFS_MOUNT_BARRIER) + xfs_mountfs_check_barriers(mp); + } + + /* rw -> ro */ + if (!(mp->m_flags & XFS_MOUNT_RDONLY) && (*flags & MS_RDONLY)) { xfs_filestream_flush(mp); xfs_sync(mp, SYNC_DATA_QUIESCE); xfs_attr_quiesce(mp); mp->m_flags |= XFS_MOUNT_RDONLY; } - out_free_args: - kfree(args); - return -error; + return 0; } /* From owner-xfs@oss.sgi.com Sun May 18 08:37:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 08:37:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4IFbguJ016021 for ; Sun, 18 May 2008 08:37:42 -0700 X-ASG-Debug-ID: 1211125111-45ed028e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7F3EF16E9FCD for ; Sun, 18 May 2008 08:38:31 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 20rkGOzv0P1znD8u for ; Sun, 18 May 2008 08:38: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 sandeen.net (Postfix) with ESMTP id B2BC0AC3590; Sun, 18 May 2008 10:38:30 -0500 (CDT) Message-ID: <48304D77.1090803@sandeen.net> Date: Sun, 18 May 2008 10:38:31 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: David Greaves CC: David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , LinuxRaid X-ASG-Orig-Subj: Re: Regression- XFS won't mount on partitioned md array Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> <482FED60.7060405@dgreaves.com> In-Reply-To: <482FED60.7060405@dgreaves.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: 1211125111 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.1, rules version 3.1.50724 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15980 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs David Greaves wrote: > Eric Sandeen wrote: > mmmm > 'little buglets' in the filesystem holding a few Tb of data... > mmmm > Anything I can do to help find that? I suspect not if you can reproduce it. Nah. I'll ask the sgi guys about it, it just seems a little inconsistent but maybe by design... -Eric > Anyhow - thanks again. > > David > PS I'll be back soon, back in 2.6.23 I was hitting a hibernate/xfs bug which > I've been avoiding by powering down. Well, it's still there in 2.6.25.3... > From owner-xfs@oss.sgi.com Sun May 18 17:29:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 17:30:03 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J0TsLB026035 for ; Sun, 18 May 2008 17:29:56 -0700 Received: from [134.14.55.13] (dhcp13.melbourne.sgi.com [134.14.55.13]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA21996; Mon, 19 May 2008 10:30:36 +1000 Message-ID: <4830CA28.9060805@sgi.com> Date: Mon, 19 May 2008 10:30:32 +1000 From: Mark Goodwin Reply-To: markgw@sgi.com Organization: SGI Engineering User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: take messages References: <20080518102710.GA17618@lst.de> In-Reply-To: <20080518102710.GA17618@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15981 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: markgw@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > folks, any chance to get take messages sent to the list, please? do you mean for any checkin, or just oss pushes? > Kust > saw the tree is merged up to 2.6.25 (why not .26-rc, btw?) and there's > been no take message sent to the list again.. > Lachlan was held up with QA failures on updating the internal dev tree, which was in turn holding up .26-rc I think. Lachlan, what's the status with this? Thanks -- Mark Goodwin markgw@sgi.com Engineering Manager for XFS and PCP Phone: +61-3-99631937 SGI Australian Software Group Cell: +61-4-18969583 ------------------------------------------------------------- From owner-xfs@oss.sgi.com Sun May 18 18:39:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 18:39:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J1dihh030185 for ; Sun, 18 May 2008 18:39:45 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22992; Mon, 19 May 2008 11:40:29 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 3685258C4C29; Mon, 19 May 2008 11:40:29 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981558 - Add configurable xattr copy support Message-Id: <20080519014029.3685258C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 11:40:29 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15982 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs The current attribute copying functions attr_copy_file and attr_copy_fd is a static list of exceptions for attributes that need special treatment. The list of those attributes tends to change (slowly) with kernel versions. We replaced the static list with a config file a while ago; this is the patch used. Date: Mon May 19 11:39:49 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: agruen@suse.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31181a attr/libattr/attr_copy_action.c - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/libattr/attr_copy_action.c attr/libattr/Makefile - 1.17 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/libattr/Makefile.diff?r1=text&tr1=1.17&r2=text&tr2=1.16&f=h attr/include/libattr.h - 1.3 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/include/libattr.h.diff?r1=text&tr1=1.3&r2=text&tr2=1.2&f=h attr/libattr/attr_copy_fd.c - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/libattr/attr_copy_fd.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h attr/libattr/attr_copy_file.c - 1.8 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/libattr/attr_copy_file.c.diff?r1=text&tr1=1.8&r2=text&tr2=1.7&f=h attr/libattr/attr_copy_check.c - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/attr/libattr/attr_copy_check.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h - Add configurable xattr copy From owner-xfs@oss.sgi.com Sun May 18 18:45:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 18:45:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J1j6sr030830 for ; Sun, 18 May 2008 18:45:11 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA23162; Mon, 19 May 2008 11:45:38 +1000 Message-ID: <4830DBC1.1060501@sgi.com> Date: Mon, 19 May 2008 11:45:37 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: David Chinner , xfs@oss.sgi.com Subject: Re: [PATCH] don't run test 167 if killall is not installed References: <20080515053918.GA16530@lst.de> <482BDAC1.7070407@sgi.com> <20080515071338.GA26247@lst.de> <20080515073605.GR155679365@sgi.com> <20080515073837.GA28530@lst.de> In-Reply-To: <20080515073837.GA28530@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15983 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Thu, May 15, 2008 at 05:36:05PM +1000, David Chinner wrote: >>> Dave already commited the original version, but I'll send an update >>> to use set_prog_path later today. >> Sorry, didn't see that Tim replied as well. set_prog_path is fine >> by me too, but stopping every test from running because killall is >> not present is a bit of overkill, isn't it? > > My plan was to use it in 167 not common.config. But I don't really care > either way. Yeah, I was just meaning for 167 too. --Tim From owner-xfs@oss.sgi.com Sun May 18 20:46:34 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 20:46:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J3kTe1010654 for ; Sun, 18 May 2008 20:46:32 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA24899; Mon, 19 May 2008 13:46:57 +1000 Message-ID: <4830F831.40102@sgi.com> Date: Mon, 19 May 2008 13:46:57 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Eric Sandeen CC: David Greaves , David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , asg-qa Subject: Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> In-Reply-To: <482FBD4C.20608@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15984 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> Eric Sandeen wrote: >> >>> I'll see if I have a little time today to track down the problem. >> >> Does this patch fix it for you? Does for me though I can't yet explain >> why ;) >> >> http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html >> >> -Eric > > So what's happening is that xfs is trying to read a page-sized IO from > the last sector of the log... which goes off the end of the device. > This looks like another regression introduced by > a9759f2de38a3443d5107bddde03b4f3f550060e, but fixed by Christoph's patch > in the URL above, which should be headed towards -stable. > > (aside: it seems that this breaks any external log setup where the log > consists of the entire device... but I'd have expected the xfsqa suite > to catch this...?) > The only way I can see that we'd catch this (by testing external logs) in the current qa setup is if one sets up SCRATCH_LOGDEV and/or TEST_LOGDEV and USE_EXTERNAL. There are no specific tests to test out external logs (there is 044 but it requires the env vars set anyway) such as using a loop back device for the log. Perhaps we should do this. I should check that our QA group are setting the vars in some runs. --Tim From owner-xfs@oss.sgi.com Sun May 18 22:11:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 22:11:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4J5BUbQ016778 for ; Sun, 18 May 2008 22:11:32 -0700 X-ASG-Debug-ID: 1211173933-2e2601190000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51A29B876C0 for ; Sun, 18 May 2008 22:12:13 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id UnUP1zqWG4THzqMG for ; Sun, 18 May 2008 22:12:13 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 5BB15A9C509 for ; Mon, 19 May 2008 00:12:10 -0500 (CDT) Message-ID: <48310C29.2040500@sandeen.net> Date: Mon, 19 May 2008 00:12:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: QA test for mounting with external log Subject: QA test for mounting with external log 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: 1211173938 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.1, rules version 3.1.50779 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15985 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs This could probably use some cleanup but something like this would have caught that recent regression. Thanks, -Eric #! /bin/sh # FS QA Test No. 188 # # Test mounting with a device-sized external log # #----------------------------------------------------------------------- # Copyright (c) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. #----------------------------------------------------------------------- # # creator owner=sandeen-xfs@sandeen.net 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.* losetup -d /dev/loop2 } # get standard environment, filters and checks . ./common.rc . ./common.filter rm -f $seq.full # real QA test starts here # Modify as appropriate. _require_scratch _supported_fs xfs _supported_os Linux # (for losetup) export MKFS_OPTIONS="" export MOUNT_OPTIONS="" dd if=/dev/zero bs=1M count=16 of=$tmp.logfile >/dev/null losetup /dev/loop2 $tmp.logfile _scratch_mkfs -llogdev=/dev/loop2 >/dev/null 2>&1 _scratch_mount -o logdev=/dev/loop2 umount $SCRATCH_DEV # success, all done status=0 exit From owner-xfs@oss.sgi.com Sun May 18 22:59:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 22:59:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4J5xfOu020585 for ; Sun, 18 May 2008 22:59:43 -0700 X-ASG-Debug-ID: 1211176829-525a00d60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EC849157E3EF; Sun, 18 May 2008 23:00:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id YPTa6fYd6Jmuf8Xn; Sun, 18 May 2008 23:00:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4J60MF3015728 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Mon, 19 May 2008 08:00:22 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4J60MvF015726; Mon, 19 May 2008 08:00:22 +0200 Date: Mon, 19 May 2008 08:00:22 +0200 From: Christoph Hellwig To: Mark Goodwin Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: take messages Subject: Re: take messages Message-ID: <20080519060022.GA15529@lst.de> References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4830CA28.9060805@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211176830 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2551 1.0000 -0.5507 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.55 X-Barracuda-Spam-Status: No, SCORE=-0.55 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.1, rules version 3.1.50782 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15986 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Mon, May 19, 2008 at 10:30:32AM +1000, Mark Goodwin wrote: > Christoph Hellwig wrote: > >folks, any chance to get take messages sent to the list, please? > > do you mean for any checkin, or just oss pushes? Well, the oss pushes are automatic, so it should be sent with the actual commit. Even better would be migrating XFS to a proper git tree with a commit trigger so that people can't accidentally forget it.. From owner-xfs@oss.sgi.com Sun May 18 23:58:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 18 May 2008 23:58:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J6wMr4024927 for ; Sun, 18 May 2008 23:58:23 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA27802; Mon, 19 May 2008 16:59:06 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 1C9C058C4C29; Mon, 19 May 2008 16:59:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981949 - Fix inode list allocation size in writeback. Message-Id: <20080519065906.1C9C058C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 16:59:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15987 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Fix inode list allocation size in writeback. We only need to allocate space for the number of inodes in the cluster when writing back inodes, not every byte in the inode cluster. This reduces the amount of memory needing to be allocated to 256 bytes instead of 64k. Date: Mon May 19 16:58:49 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31182a fs/xfs/xfs_inode.c - 1.503 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.503&r2=text&tr2=1.502&f=h - Only allocate enough memory for the pointer list in inode cluster writeback. From owner-xfs@oss.sgi.com Mon May 19 00:02:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 00:02:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J72HR9027678 for ; Mon, 19 May 2008 00:02:19 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA27979; Mon, 19 May 2008 17:03:02 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 5686958C4C29; Mon, 19 May 2008 17:03:02 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981950 - Update valid fields in xfs_mount_log_sb Message-Id: <20080519070302.5686958C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 17:03:02 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15988 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Update valid fields in xfs_mount_log_sb() Recent changes to update the version number during mount (attr2 stuff) failed to change the assert that checked for calid flags being changed on mount. Clearly this path hasn't been exercised by the test code.... Date: Mon May 19 17:02:46 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31183a fs/xfs/xfs_mount.c - 1.432 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.432&r2=text&tr2=1.431&f=h - Update valid fields in xfs_mount_log_sb. From owner-xfs@oss.sgi.com Mon May 19 00:16:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 00:16:26 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J7GLFl029174 for ; Mon, 19 May 2008 00:16:23 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA28244; Mon, 19 May 2008 17:17:07 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id CE7DE58C4C29; Mon, 19 May 2008 17:17:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - kill xfs_uuid_unmount Message-Id: <20080519071706.CE7DE58C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 17:17:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15989 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs kill xfs_uuid_unmount Quite useless wrapper that doesn't help making the code more readable. Signed-off-by: Christoph Hellwig Date: Mon May 19 17:16:42 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31184a fs/xfs/xfs_mount.c - 1.433 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.433&r2=text&tr2=1.432&f=h - kill xfs_uuid_unmount wrapper. From owner-xfs@oss.sgi.com Mon May 19 00:19:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 00:19:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J7JbnW001630 for ; Mon, 19 May 2008 00:19:38 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA28330; Mon, 19 May 2008 17:20:21 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 2085558C4C29; Mon, 19 May 2008 17:20:21 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - merge xfs_mntupdate into xfs_fs_remount Message-Id: <20080519072021.2085558C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 17:20:21 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15990 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs merge xfs_mntupdate into xfs_fs_remount xfs_mntupdate already is completely Linux specific due to the VFS flags passed in, so it might aswell be merged into xfs_fs_remount. Signed-off-by: Christoph Hellwig Date: Mon May 19 17:19:59 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31185a fs/xfs/xfs_vfsops.c - 1.565 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.565&r2=text&tr2=1.564&f=h - merge xfs_mntupdate into xfs_fs_remount. fs/xfs/linux-2.6/xfs_super.c - 1.418 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.418&r2=text&tr2=1.417&f=h - merge xfs_mntupdate into xfs_fs_remount. fs/xfs/xfs_vfsops.h - 1.9 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.h.diff?r1=text&tr1=1.9&r2=text&tr2=1.8&f=h - merge xfs_mntupdate into xfs_fs_remount. From owner-xfs@oss.sgi.com Mon May 19 00:23:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 00:23:56 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4J7NnLX002172 for ; Mon, 19 May 2008 00:23:51 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA28412; Mon, 19 May 2008 17:24:35 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 7CFBA58C4C29; Mon, 19 May 2008 17:24:35 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981498 - kill xfs_igrow_start and xfs_igrow_finish Message-Id: <20080519072435.7CFBA58C4C29@chook.melbourne.sgi.com> Date: Mon, 19 May 2008 17:24:35 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15991 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs kill xfs_igrow_start and xfs_igrow_finish xfs_igrow_start just expands to xfs_zero_eof with two asserts that are useless in the context of the only caller and some rather confusing comments. xfs_igrow_finish is just a few lines of code decorated again with useless asserts and confusing comments. Just kill those two and merge them into xfs_setattr. Signed-off-by: Christoph Hellwig Date: Mon May 19 17:24:15 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31186a fs/xfs/xfs_vnodeops.c - 1.759 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.759&r2=text&tr2=1.758&f=h - kill xfs_igrow_start and xfs_igrow_finish. fs/xfs/xfs_inode.c - 1.504 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.504&r2=text&tr2=1.503&f=h - kill xfs_igrow_start and xfs_igrow_finish. fs/xfs/xfs_inode.h - 1.246 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.h.diff?r1=text&tr1=1.246&r2=text&tr2=1.245&f=h - kill xfs_igrow_start and xfs_igrow_finish. fs/xfs/linux-2.6/xfs_ksyms.c - 1.84 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ksyms.c.diff?r1=text&tr1=1.84&r2=text&tr2=1.83&f=h - kill xfs_igrow_start and xfs_igrow_finish. From owner-xfs@oss.sgi.com Mon May 19 04:30:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 04:30:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4JBUWGg025900 for ; Mon, 19 May 2008 04:30:33 -0700 X-ASG-Debug-ID: 1211196679-4dfd01760000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from yw-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 53FA8187497 for ; Mon, 19 May 2008 04:31:20 -0700 (PDT) Received: from yw-out-1718.google.com (yw-out-1718.google.com [74.125.46.155]) by cuda.sgi.com with ESMTP id mI19WZSyEFEz6zJI for ; Mon, 19 May 2008 04:31:20 -0700 (PDT) Received: by yw-out-1718.google.com with SMTP id 5so1122341ywm.32 for ; Mon, 19 May 2008 04:31:19 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=9zxB7p+qmk2DJ0dTLJGHq5rgnIj/z9NCyRlxLG0tQlw=; b=RC1Br0wJtu/HCPaE1PsHMhmByUR0iik7uF/AheIHeYqyEa/n+RcFScdBvT5CtbvVyE9VyU+QGZc1dkkF3dWOA2S9oxF2iHS2yOU3d0mXQi2h26VV9TMrVLxwD4twAscSoB0fDU8BhwgZHFz9GSoUBbjw72b1tqyTrK0HaLOFbhU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=RS2jX4W40JhJ1apSMS2yL4hximZDwflQllEiyAu6Bdh79nfk/9v9c16OQZGBHbP92n8878MI6Rsj2kbhQTQi15iuq6iJFQvwTClGcNkjpm7x8FxJSVAarLBrXCtyHud1WXeesefbsOrFnThpfcEyu3vWOVDoRLc/ePNSgZWCK/I= Received: by 10.151.156.17 with SMTP id i17mr6086336ybo.234.1211196679512; Mon, 19 May 2008 04:31:19 -0700 (PDT) Received: by 10.150.218.14 with HTTP; Mon, 19 May 2008 04:31:19 -0700 (PDT) Message-ID: <1a4a774c0805190431j31a182bdu61030bbfcc80f41@mail.gmail.com> Date: Mon, 19 May 2008 13:31:19 +0200 From: "=?ISO-8859-1?Q?Christian_R=F8snes?=" To: "Emmanuel Florac" X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Cc: xfs@oss.sgi.com In-Reply-To: <20080516222755.3e557c00@galadriel.home> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20080516222755.3e557c00@galadriel.home> X-Barracuda-Connect: yw-out-1718.google.com[74.125.46.155] X-Barracuda-Start-Time: 1211196682 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.1, rules version 3.1.50804 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15992 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: christian.rosnes@gmail.com Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 10:27 PM, Emmanuel Florac wrote: > > I have a 64 bits (x86_64) machine running Linux 2.6.22.19 with a 24TB > XFS filesystem. There are some 15TB of data on it. All is well, no > error except that I can't create a single file (touch foo : no space > left on device). I don't understand what can be going wrong... > > History : this filesystem was extended (xfs_growfs) from 16TB to 24. > > > Here is the output from xfs_info /dev/vg0/lv0 > > meta-data=/dev/vg0/lv0 isize=256 agcount=47, > agsize=137245616 blks = sectsz=512 attr=0 > data = bsize=4096 blocks=6344964096, > imaxpct=25 = sunit=16 swidth=32 blks, > unwritten=1 naming =version 2 bsize=4096 > log =internal bsize=4096 blocks=32768, version=1 > = sectsz=512 sunit=0 blks > realtime =none extsz=131072 blocks=0, rtextents=0 > > I fail to see nothing special there however. > > The only significant thing I see is that the FS is really close to 16 > TB of allocated data (15.7TB). I tried mounting it with "inode64" > option with no more loving. > On my system I get "no space left on device" when I reach 99% full with about 20GB free space left on 2TB partitions. I also use sunit and swidth for the data section of the xfs filesystem, and it could be that the XFS system cannot allocate space according to these parameters ? You seem to be around the original 16TB limit, and maybe it tries to allocate from this original disk layout ? (I'm no XFS expert, so please take my "theories" with a grain of salt) I recently had two "identical" partitions: A and B, where A was the master and B was the rsync copy. These had been written to for several years, and during that period they both have had the role as master. I suppose the disk usage layout was different. All of a sudden partition B reported "no space left on device", even though partition A contained the same data without any "no space left on device". What I did to get the B to copy the missing data from partition A was to: Temporarily move some data away from partition B, then run xfs_fsr on partition B, then move the data back. It brought the fragmentation down on partition B, and I could copy the missing data from partition B. Christian From owner-xfs@oss.sgi.com Mon May 19 04:47:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 04:47:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4JBlEBn027352 for ; Mon, 19 May 2008 04:47:16 -0700 X-ASG-Debug-ID: 1211197682-517502230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from yw-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 82CD4B8DE7F for ; Mon, 19 May 2008 04:48:02 -0700 (PDT) Received: from yw-out-1718.google.com (yw-out-1718.google.com [74.125.46.155]) by cuda.sgi.com with ESMTP id Clv0a0GWNEOt52QO for ; Mon, 19 May 2008 04:48:02 -0700 (PDT) Received: by yw-out-1718.google.com with SMTP id 5so1125094ywm.32 for ; Mon, 19 May 2008 04:48:01 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=8HZ3XGo+xbBT32usupFBdkaL03IgYrb9+JnbXE6plEA=; b=V39ZsCMjDc9ioleLjGLas8XDL+w3x6nZRwfLyiohhMM9lQDg9j08q414CvhVFPDQMBGOqnl4XcbMpP9STIAKYmsXAqv013c6EqP5JU+S9vQjfjmBnXPEPYzqzd6/rzsOFgrTYdiTkY2ZMA7eJI7PYjUGXUeoPt+Xc4DtDlVx9Ww= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=Ub0+hG6hz9zOlVX9NXCqP0h1WxARdf67LrY3/rLEItzFrCAZWwEx/LYfduucMW9JSGgTycdyOpN/P3/HseCwQNplt2QmvO8LDlS5qUwUuvbju8MlWqGuaYHj0NondNT6HaCwbmj8kEf3eWV1dBA41YL/76kHbdWGBXmyyd2Ic5Q= Received: by 10.150.191.10 with SMTP id o10mr6163908ybf.56.1211197681797; Mon, 19 May 2008 04:48:01 -0700 (PDT) Received: by 10.150.218.14 with HTTP; Mon, 19 May 2008 04:48:01 -0700 (PDT) Message-ID: <1a4a774c0805190448q5e38b893mfaa0122e8d2c1e5f@mail.gmail.com> Date: Mon, 19 May 2008 13:48:01 +0200 From: "=?ISO-8859-1?Q?Christian_R=F8snes?=" To: "Emmanuel Florac" X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Cc: xfs@oss.sgi.com In-Reply-To: <1a4a774c0805190431j31a182bdu61030bbfcc80f41@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Disposition: inline References: <20080516222755.3e557c00@galadriel.home> <1a4a774c0805190431j31a182bdu61030bbfcc80f41@mail.gmail.com> X-Barracuda-Connect: yw-out-1718.google.com[74.125.46.155] X-Barracuda-Start-Time: 1211197683 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.1, rules version 3.1.50805 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4JBlGBn027358 X-archive-position: 15993 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: christian.rosnes@gmail.com Precedence: bulk X-list: xfs On Mon, May 19, 2008 at 1:31 PM, Christian Røsnes wrote: > On Fri, May 16, 2008 at 10:27 PM, Emmanuel Florac > wrote: >> >> I have a 64 bits (x86_64) machine running Linux 2.6.22.19 with a 24TB >> XFS filesystem. There are some 15TB of data on it. All is well, no >> error except that I can't create a single file (touch foo : no space >> left on device). I don't understand what can be going wrong... >> >> History : this filesystem was extended (xfs_growfs) from 16TB to 24. >> >> >> Here is the output from xfs_info /dev/vg0/lv0 >> >> meta-data=/dev/vg0/lv0 isize=256 agcount=47, >> agsize=137245616 blks = sectsz=512 attr=0 >> data = bsize=4096 blocks=6344964096, >> imaxpct=25 = sunit=16 swidth=32 blks, >> unwritten=1 naming =version 2 bsize=4096 >> log =internal bsize=4096 blocks=32768, version=1 >> = sectsz=512 sunit=0 blks >> realtime =none extsz=131072 blocks=0, rtextents=0 >> >> I fail to see nothing special there however. >> >> The only significant thing I see is that the FS is really close to 16 >> TB of allocated data (15.7TB). I tried mounting it with "inode64" >> option with no more loving. >> > > On my system I get "no space left on device" when I reach 99% full > with about 20GB free space left on 2TB partitions. > I also use sunit and swidth for the data section of the xfs > filesystem, and it could be that the XFS system cannot allocate > space according to these parameters ? You seem to be around the > original 16TB limit, and maybe it tries to allocate > from this original disk layout ? (I'm no XFS expert, so please take my > "theories" with a grain of salt) > > I recently had two "identical" partitions: A and B, where A was the > master and B was the rsync copy. Both these 2TB partitions (A and B) were 99% full. > These had been > written to for several years, and during that period they both have > had the role as master. I suppose the disk usage layout > was different. All of a sudden partition B reported "no space left on > device", even though partition A contained the > same data without any "no space left on device". What I did to get the > B to copy the missing data from partition A was to: > Temporarily move some data away from partition B, then run xfs_fsr on > partition B, then move the data back. > It brought the fragmentation down on partition B, and I could copy the > missing data from partition B. > Correction to last sentence: ... and I could copy the missing data _to_ partition B. Christian From owner-xfs@oss.sgi.com Mon May 19 13:18:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 13:18:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4JKI2x8007513 for ; Mon, 19 May 2008 13:18:03 -0700 X-ASG-Debug-ID: 1211228330-754902130000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8D21316F2D80 for ; Mon, 19 May 2008 13:18:51 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id qYfdIiliKQe7CJeF for ; Mon, 19 May 2008 13:18:51 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id D8ACC322AD0; Mon, 19 May 2008 22:18:49 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 95507322E7B; Mon, 19 May 2008 22:12:14 +0200 (CEST) Date: Mon, 19 May 2008 22:10:57 +0200 From: Emmanuel Florac To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080519221057.75e0a775@galadriel.home> In-Reply-To: <20080518154208.77b6be3e@galadriel.home> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> <20080518154208.77b6be3e@galadriel.home> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1211228331 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0007 1.0000 -2.0164 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.1, rules version 3.1.50838 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4JKI3x8007515 X-archive-position: 15994 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Sun, 18 May 2008 15:42:08 +0200 vous écriviez: > IIRC I tried both, however I'll double check monday... Well obviously I didn't try both, because it worked as expected when using "inode64". However there'ssomething slightly weird in the data layout: /dev/dm-0: AG Inodes IUsed IFree Use% 0 4288 4277 11 99% 1 0 0 0 0% 2 0 0 0 0% 3 0 0 0 0% 4 0 0 0 0% 5 0 0 0 0% 6 0 0 0 0% 7 0 0 0 0% 8 0 0 0 0% 9 0 0 0 0% 10 0 0 0 0% 11 0 0 0 0% 12 0 0 0 0% 13 0 0 0 0% 14 0 0 0 0% 15 0 0 0 0% 16 0 0 0 0% 17 0 0 0 0% 18 0 0 0 0% 19 0 0 0 0% 20 0 0 0 0% 21 0 0 0 0% 22 0 0 0 0% 23 0 0 0 0% 24 0 0 0 0% 25 0 0 0 0% 26 0 0 0 0% 27 0 0 0 0% 28 0 0 0 0% 29 0 0 0 0% 30 0 0 0 0% 31 0 0 0 0% 32 0 0 0 0% 33 0 0 0 0% 34 0 0 0 0% 35 0 0 0 0% 36 0 0 0 0% 37 0 0 0 0% 38 0 0 0 0% 39 0 0 0 0% 40 0 0 0 0% 41 0 0 0 0% 42 0 0 0 0% 43 0 0 0 0% 44 0 0 0 0% 45 0 0 0 0% 46 0 0 0 0% ALL 4288 4277 11 99% See how all inodes are in the same vg? is it OK? -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Mon May 19 13:39:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 13:39:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4JKdn1L008910 for ; Mon, 19 May 2008 13:39:50 -0700 X-ASG-Debug-ID: 1211229638-36ae03030000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 674A318B218 for ; Mon, 19 May 2008 13:40:38 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id m0DA9dZCqEYMWE2B for ; Mon, 19 May 2008 13:40:38 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id D072A322809; Mon, 19 May 2008 22:40:37 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id 4AAD0322848; Mon, 19 May 2008 22:40:37 +0200 (CEST) Date: Mon, 19 May 2008 22:39:15 +0200 From: Emmanuel Florac To: "Christian =?ISO-8859-1?Q?R=F8snes?=" Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080519223915.4c88859c@galadriel.home> In-Reply-To: <1a4a774c0805190448q5e38b893mfaa0122e8d2c1e5f@mail.gmail.com> References: <20080516222755.3e557c00@galadriel.home> <1a4a774c0805190431j31a182bdu61030bbfcc80f41@mail.gmail.com> <1a4a774c0805190448q5e38b893mfaa0122e8d2c1e5f@mail.gmail.com> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1211229639 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.1, rules version 3.1.50840 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4JKdo1L008912 X-archive-position: 15995 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Mon, 19 May 2008 13:48:01 +0200 vous écriviez: > Correction to last sentence: ... and I could copy the missing data > _to_ partition B. Another reminder that we should always keep our disks less than 95ù full :) -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Mon May 19 17:43:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 17:43:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K0hIF6027704 for ; Mon, 19 May 2008 17:43:20 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA20530; Tue, 20 May 2008 10:44:01 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 35C0958C4C29; Tue, 20 May 2008 10:44:01 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super Message-Id: <20080520004401.35C0958C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 10:44:01 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15996 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super xfs_unmount is small and already pretty Linux specific, so merge it into the callers. The real unmount path is simplified a little by doing a WARN_ON on the xfs_unmount_flush retval directly instead of propagating the error back to the caller, and the mout failure case in simplified significantly by removing the forced shutdown case and all the dmapi events that shouldn't be sent because the dmapi mount event hasn't been sent by that time either. Signed-off-by: Christoph Hellwig Date: Tue May 20 10:43:13 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31188a fs/xfs/xfs_vfsops.c - 1.566 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.566&r2=text&tr2=1.565&f=h - merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super fs/xfs/linux-2.6/xfs_super.c - 1.419 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.419&r2=text&tr2=1.418&f=h - merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super fs/xfs/xfs_vfsops.h - 1.10 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.h.diff?r1=text&tr1=1.10&r2=text&tr2=1.9&f=h - merge xfs_unmount into xfs_fs_put_super / xfs_fs_fill_super From owner-xfs@oss.sgi.com Mon May 19 17:47:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 17:47:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K0lKv1028238 for ; Mon, 19 May 2008 17:47:21 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA20728; Tue, 20 May 2008 10:48:05 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id C069758C4C29; Tue, 20 May 2008 10:48:05 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - merge xfs_mount into xfs_fs_fill_super Message-Id: <20080520004805.C069758C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 10:48:05 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15997 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs merge xfs_mount into xfs_fs_fill_super xfs_mount is already pretty linux-specific so merge it into xfs_fs_fill_super to allow for a more structured mount code in the next patches. xfs_start_flags and xfs_finish_flags also move to xfs_super.c. Signed-off-by: Christoph Hellwig Date: Tue May 20 10:46:35 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31189a fs/xfs/xfs_vfsops.c - 1.567 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.567&r2=text&tr2=1.566&f=h - merge xfs_mount into xfs_fs_fill_super. fs/xfs/linux-2.6/xfs_super.c - 1.420 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.420&r2=text&tr2=1.419&f=h - merge xfs_mount into xfs_fs_fill_super. fs/xfs/xfs_vfsops.h - 1.11 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h - merge xfs_mount into xfs_fs_fill_super. From owner-xfs@oss.sgi.com Mon May 19 18:14:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:14:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1ERPP030285 for ; Mon, 19 May 2008 18:14:29 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21238; Tue, 20 May 2008 11:15:13 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id E515558C4C29; Tue, 20 May 2008 11:15:12 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - don't call xfs_freesb from xfs_mountfs failure case Message-Id: <20080520011512.E515558C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:15:12 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15998 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs don't call xfs_freesb from xfs_mountfs failure case Freeing of the superblock is already handled in the caller, and that is more symmetric with the mount path, too. Signed-off-by: Christoph Hellwig Date: Tue May 20 11:14:47 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31192a fs/xfs/xfs_mount.c - 1.434 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.434&r2=text&tr2=1.433&f=h - don't call xfs_freesb from xfs_mountfs failure case From owner-xfs@oss.sgi.com Mon May 19 18:23:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:24:01 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1NrDf031180 for ; Mon, 19 May 2008 18:23:56 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21459; Tue, 20 May 2008 11:24:39 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 28F6558C4C29; Tue, 20 May 2008 11:24:39 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - sort out opening and closing of the block devices Message-Id: <20080520012439.28F6558C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:24:39 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 15999 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs sort out opening and closing of the block devices Currently closing the rt/log block device is done in the wrong spot, and far too early. So revampt it: - xfs_blkdev_put moved out of xfs_free_buftarg into the caller so that it is done after tearing down the buftarg completely. - call to xfs_unmountfs_close moved from xfs_mountfs into caller so that it's done after tearing down the filesystem completely. - xfs_unmountfs_close is renamed to xfs_close_devices and made static in xfs_super.c - opening of the block devices is split into a helper xfs_open_devices that is symetric in use to xfs_close_devices - xfs_unmountfs can now lose struct cred - error handling around device opening sanitized in xfs_fs_fill_super Signed-off-by: Christoph Hellwig Date: Tue May 20 11:24:15 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31193a fs/xfs/xfs_mount.h - 1.267 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.267&r2=text&tr2=1.266&f=h - sort out opening and closing of the block devices fs/xfs/xfs_mount.c - 1.435 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.435&r2=text&tr2=1.434&f=h - sort out opening and closing of the block devices fs/xfs/linux-2.6/xfs_super.h - 1.78 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.h.diff?r1=text&tr1=1.78&r2=text&tr2=1.77&f=h - sort out opening and closing of the block devices fs/xfs/linux-2.6/xfs_super.c - 1.421 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.421&r2=text&tr2=1.420&f=h - sort out opening and closing of the block devices fs/xfs/linux-2.6/xfs_buf.h - 1.126 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.h.diff?r1=text&tr1=1.126&r2=text&tr2=1.125&f=h - sort out opening and closing of the block devices fs/xfs/linux-2.6/xfs_buf.c - 1.257 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_buf.c.diff?r1=text&tr1=1.257&r2=text&tr2=1.256&f=h - sort out opening and closing of the block devices From owner-xfs@oss.sgi.com Mon May 19 18:26:24 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:26:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1QKI1031639 for ; Mon, 19 May 2008 18:26:22 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21519; Tue, 20 May 2008 11:27:06 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 45EEF58C4C29; Tue, 20 May 2008 11:27:06 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - add xfs_setup_devices helper Message-Id: <20080520012706.45EEF58C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:27:06 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16000 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs add xfs_setup_devices helper Split setting the block and sector size out of xfs_fs_fill_super into a small helper to make xfs_fs_fill_super more readable. Signed-off-by: Christoph Hellwig Date: Tue May 20 11:26:47 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31194a fs/xfs/linux-2.6/xfs_super.c - 1.422 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.422&r2=text&tr2=1.421&f=h - add xfs_setup_devices helper. From owner-xfs@oss.sgi.com Mon May 19 18:28:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:28:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1ShDg032067 for ; Mon, 19 May 2008 18:28:44 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21566; Tue, 20 May 2008 11:29:28 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 8BFB258C4C29; Tue, 20 May 2008 11:29:28 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - allow xfs_args_allocate to fail Message-Id: <20080520012928.8BFB258C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:29:28 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16001 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs allow xfs_args_allocate to fail Switch xfs_args_allocate to kzalloc and handle failures. Signed-off-by: Christoph Hellwig Date: Tue May 20 11:29:10 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31195a fs/xfs/linux-2.6/xfs_super.c - 1.423 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.423&r2=text&tr2=1.422&f=h - allow xfs_args_allocate to fail. From owner-xfs@oss.sgi.com Mon May 19 18:42:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:42:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1gPId000770 for ; Mon, 19 May 2008 18:42:27 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21800; Tue, 20 May 2008 11:42:59 +1000 Message-ID: <48322D15.3050201@sgi.com> Date: Tue, 20 May 2008 11:44:53 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: markgw@sgi.com CC: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: take messages References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> In-Reply-To: <4830CA28.9060805@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16002 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Mark Goodwin wrote: > > > Christoph Hellwig wrote: >> folks, any chance to get take messages sent to the list, please? > > do you mean for any checkin, or just oss pushes? > >> Kust >> saw the tree is merged up to 2.6.25 (why not .26-rc, btw?) and there's >> been no take message sent to the list again.. >> > > Lachlan was held up with QA failures on updating the internal dev tree, > which was in turn holding up .26-rc I think. > > Lachlan, what's the status with this? It was a big TAKE message so it was probably dropped on the floor somewhere. Updates to the internal dev tree are dependent on the kdb patches and at the time they were only available for 2.6.26-rc1. 2.6.25 was a more stable choice. We usually wait until -rc3 for an update so as soon as the kdb patches are available I'll do another merge. From owner-xfs@oss.sgi.com Mon May 19 18:44:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:44:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1i83A001184 for ; Mon, 19 May 2008 18:44:09 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA21885; Tue, 20 May 2008 11:44:53 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id EF4A758C4C29; Tue, 20 May 2008 11:44:52 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - kill xfs_mount_init Message-Id: <20080520014452.EF4A758C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:44:52 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16003 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs kill xfs_mount_init xfs_mount_init is inlined into xfs_fs_fill_super and allocation switched to kzalloc. Plug a leak of the mount structure for most early mount failures. Move xfs_icsb_init_counters to as late as possible in the mount path and make sure to undo it so that no stale hotplug cpu notifiers are left around on mount failures. Signed-off-by: Christoph Hellwig Date: Tue May 20 11:44:36 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31196a fs/xfs/xfs_mount.h - 1.268 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.268&r2=text&tr2=1.267&f=h - kill xfs_mount_init. fs/xfs/xfs_mount.c - 1.436 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.c.diff?r1=text&tr1=1.436&r2=text&tr2=1.435&f=h - kill xfs_mount_init. fs/xfs/linux-2.6/xfs_super.c - 1.424 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.424&r2=text&tr2=1.423&f=h - kill xfs_mount_init. fs/xfs/linux-2.6/xfs_ksyms.c - 1.85 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_ksyms.c.diff?r1=text&tr1=1.85&r2=text&tr2=1.84&f=h - kill xfs_mount_init. From owner-xfs@oss.sgi.com Mon May 19 18:46:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:46:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1kOXK001635 for ; Mon, 19 May 2008 18:46:26 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22131; Tue, 20 May 2008 11:47:09 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id D7AE058C4C29; Tue, 20 May 2008 11:47:09 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - kill calls to xfs_binval in the mount error path Message-Id: <20080520014709.D7AE058C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:47:09 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16004 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs kill calls to xfs_binval in the mount error path xfs_binval aka xfs_flush_buftarg is the first thing done in xfs_free_buftarg, so there is no need to have duplicated calls just before xfs_free_buftarg in the mount failure path. Signed-off-by: Christoph Hellwig Date: Tue May 20 11:46:53 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31197a fs/xfs/linux-2.6/xfs_super.c - 1.425 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.425&r2=text&tr2=1.424&f=h - kill calls to xfs_binval in the mount error path From owner-xfs@oss.sgi.com Mon May 19 18:47:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:47:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1leEI002028 for ; Mon, 19 May 2008 18:47:41 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22176; Tue, 20 May 2008 11:48:21 +1000 Message-ID: <48322E58.8060009@sgi.com> Date: Tue, 20 May 2008 11:50:16 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: Mark Goodwin , xfs@oss.sgi.com Subject: Re: take messages References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> <20080519060022.GA15529@lst.de> In-Reply-To: <20080519060022.GA15529@lst.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16005 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Mon, May 19, 2008 at 10:30:32AM +1000, Mark Goodwin wrote: >> Christoph Hellwig wrote: >>> folks, any chance to get take messages sent to the list, please? >> do you mean for any checkin, or just oss pushes? > > Well, the oss pushes are automatic, so it should be sent with the > actual commit. Even better would be migrating XFS to a proper git > tree with a commit trigger so that people can't accidentally forget it.. oss pushes automatic? They could be but aren't. Yes, migrating XFS to a git tree is a great idea - one we have been talking about for far too long... From owner-xfs@oss.sgi.com Mon May 19 18:49:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:49:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1mtnJ002426 for ; Mon, 19 May 2008 18:49:32 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22221; Tue, 20 May 2008 11:49:41 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id 920A158C4C29; Tue, 20 May 2008 11:49:41 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: PARTIAL TAKE 981951 - rename error2 goto label in xfs_fs_fill_super Message-Id: <20080520014941.920A158C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:49:41 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16006 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs rename error2 goto label in xfs_fs_fill_super Signed-off-by: Christoph Hellwig Date: Tue May 20 11:49:23 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31198a fs/xfs/linux-2.6/xfs_super.c - 1.426 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.426&r2=text&tr2=1.425&f=h - rename error2 goto label in xfs_fs_fill_super. From owner-xfs@oss.sgi.com Mon May 19 18:51:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 18:51:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K1pBA6002890 for ; Mon, 19 May 2008 18:51:16 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA22294; Tue, 20 May 2008 11:51:57 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16346) id E79B258C4C29; Tue, 20 May 2008 11:51:56 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981951 - add missing call to xfs_filestream_unmount on xfs_mountfs failure Message-Id: <20080520015156.E79B258C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 11:51:56 +1000 (EST) From: dgc@sgi.com (David Chinner) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16007 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs add missing call to xfs_filestream_unmount on xfs_mountfs failure Signed-off-by: Christoph Hellwig Date: Tue May 20 11:51:38 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31199a fs/xfs/linux-2.6/xfs_super.c - 1.427 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.427&r2=text&tr2=1.426&f=h - add missing call to xfs_filestream_unmount on xfs_mountfs failure. From owner-xfs@oss.sgi.com Mon May 19 19:04:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 19:04:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K2432k004072 for ; Mon, 19 May 2008 19:04:03 -0700 X-ASG-Debug-ID: 1211249092-21ab005c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D9BBA17001B6 for ; Mon, 19 May 2008 19:04:52 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id cQlh66bd0T4MXJGH for ; Mon, 19 May 2008 19:04:52 -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 sandeen.net (Postfix) with ESMTP id 49230AC08CA for ; Mon, 19 May 2008 21:04:51 -0500 (CDT) Message-ID: <483231C2.9010504@sandeen.net> Date: Mon, 19 May 2008 21:04:50 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] de-duplicate calls to xfs_attr_trace_enter Subject: Re: [PATCH] de-duplicate calls to xfs_attr_trace_enter References: <480024CC.8040407@sandeen.net> In-Reply-To: <480024CC.8040407@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: 1211249092 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.1, rules version 3.1.50862 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16008 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Eric Sandeen wrote: > Every call to xfs_attr_trace_enter() shares the exact > same 16 args in the middle... just send in the context > pointer and let the next level down split it into the > ktrace. Ping? worth doing? Thanks, -Eric From owner-xfs@oss.sgi.com Mon May 19 19:23:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 19:23:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K2NfLI005980 for ; Mon, 19 May 2008 19:23:42 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA22923; Tue, 20 May 2008 12:24:15 +1000 Date: Tue, 20 May 2008 12:24:57 +1000 To: "Anton Altaparmakov" Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache From: "Barry Naujok" Organization: SGI Cc: "Christoph Hellwig" , xfs@oss.sgi.com, linux-fsdevel Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4K2NiLI005993 X-archive-position: 16009 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Thu, 15 May 2008 23:43:44 +1000, Anton Altaparmakov wrote: > Hi, > > On 15 May 2008, at 06:14, Barry Naujok wrote: >> On Thu, 15 May 2008 14:57:00 +1000, Christoph Hellwig > > wrote: >>> On Wed, May 14, 2008 at 05:55:45PM +1000, Barry Naujok wrote: >>>> Not quite sure if this is the right test, but I did 1000 creates on >>>> a brand new filesystem with and without ci on my SATA drive, both >>>> sustained almost 600 creates per second. >>>> >>>> I believe creates would be the worst case scenario for not adding >>>> negative dentries? >>> >>> No, negative dentries shouldn't have any effect on that. negative >>> entries help to optimize away lookups. E.g. thing of the PATH variable >>> and say your shell is not in the first directory listed there. Having >>> a negative dentry for it means that you don't have to do a lookup in >>> the first directories everytime someone wants to use the shell. >> >> Ah, that makes more sense. I did a test of a million lookups to a >> non-existant file in a short-form directory (dual 1.6G opteron): >> >> CI = 4.6s >> non-CI = 3.7s >> >> And a directory with 10000 files: >> >> CI = 10.3s >> non-CI = 3.9s > > > Yes, and you can get the performance back if you allow negative dentries > to be created. You just have to make sure that every time a directory > entry is created in directory X, all negative dentries which are > children of directory X are thrown away. > > Failure to do so will result in lookups returning ENOENT even though a > file now exists that matches case insensitively. This happens because > the VFS will find the negative dentry and return ENOENT without calling > the file system lookup method thus the file system does not get a chance > to discover the new matching directory entry... Ok, with the following snippet of code, it now takes 2.9s for shortform CI loop and 2.7s with 10000 files. Don't know why it's quicker, but, anyway, no slowdown with CI anymore. +/** + * d_drop_neg_children - drop negative child dentries + * @parent: parent dentry + * + * Searches the children of the @parent dentry for negative dentries and + * drops them as they are found. + * + * This is primarily useful for case-insensitive filesystems to drop these + * entries when a new entry is created in the parent. The new entry must + * be instantiated before calling this function. + */ + +void d_drop_neg_children(struct dentry *parent) +{ + struct dentry *dentry; + + spin_lock(&dcache_lock); + list_for_each_entry(dentry, &parent->d_subdirs, d_u.d_child) { + if (!dentry->d_inode) { + spin_lock(&dentry->d_lock); + __d_drop(dentry); + spin_unlock(&dentry->d_lock); + cond_resched_lock(&dcache_lock); + } + } + spin_unlock(&dcache_lock); + +} From owner-xfs@oss.sgi.com Mon May 19 20:56:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 20:56:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K3uX9f017376 for ; Mon, 19 May 2008 20:56:33 -0700 X-ASG-Debug-ID: 1211255842-6a0900ac0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sca-es-mail-1.sun.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3FA25B9EB5A for ; Mon, 19 May 2008 20:57:22 -0700 (PDT) Received: from sca-es-mail-1.sun.com (sca-es-mail-1.Sun.COM [192.18.43.132]) by cuda.sgi.com with ESMTP id Gy9rvEUVtBnkMgSC for ; Mon, 19 May 2008 20:57:22 -0700 (PDT) Received: from fe-sfbay-10.sun.com ([192.18.43.129]) by sca-es-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id m4K3vLGb005690 for ; Mon, 19 May 2008 20:57:22 -0700 (PDT) Received: from conversion-daemon.fe-sfbay-10.sun.com by fe-sfbay-10.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007)) id <0K1500901EW6PY00@fe-sfbay-10.sun.com> (original mail from adilger@sun.com) for xfs@oss.sgi.com; Mon, 19 May 2008 20:57:21 -0700 (PDT) Received: from webber.adilger.int ([68.147.167.155]) by fe-sfbay-10.sun.com (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007)) with ESMTPSA id <0K1500AKHEZDSX90@fe-sfbay-10.sun.com>; Mon, 19 May 2008 20:57:21 -0700 (PDT) Date: Mon, 19 May 2008 21:57:12 -0600 From: Andreas Dilger X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature In-reply-to: <20080514170625t-sato@mail.jp.nec.com> To: Takashi Sato Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" Message-id: <20080520035712.GA7252@webber.adilger.int> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Content-disposition: inline X-GPG-Key: 1024D/0D35BED6 X-GPG-Fingerprint: 7A37 5D79 BF1B CECA D44F 8A29 A488 39F5 0D35 BED6 References: <20080514170625t-sato@mail.jp.nec.com> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: sca-es-mail-1.Sun.COM[192.18.43.132] X-Barracuda-Start-Time: 1211255843 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=MARKETING_SUBJECT, UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16010 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: adilger@sun.com Precedence: bulk X-list: xfs On May 14, 2008 17:06 +0900, Takashi Sato wrote: > +static int ioctl_freeze(struct file *filp) > +{ > + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; > + > + if (!capable(CAP_SYS_ADMIN)) > + return -EPERM; > + > + /* If filesystem doesn't support freeze feature, return. */ > + if (sb->s_op->write_super_lockfs == NULL) > + return -EINVAL; Should this be EINVAL, or EOPNOTSUPP? Usually EINVAL means there is something wrong with the passed ioctl parameters (e.g. bad value), while EOPNOTSUPP is "operation not supported" and makes more sense. Cheers, Andreas -- Andreas Dilger Sr. Staff Engineer, Lustre Group Sun Microsystems of Canada, Inc. From owner-xfs@oss.sgi.com Mon May 19 21:25:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 21:25:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K4OxqP019760 for ; Mon, 19 May 2008 21:25:02 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA25330; Tue, 20 May 2008 14:25:43 +1000 Message-ID: <483252C7.5050108@sgi.com> Date: Tue, 20 May 2008 14:25:43 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Eric Sandeen CC: xfs-oss Subject: Re: [PATCH] de-duplicate calls to xfs_attr_trace_enter References: <480024CC.8040407@sandeen.net> <483231C2.9010504@sandeen.net> In-Reply-To: <483231C2.9010504@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16011 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Eric Sandeen wrote: > Eric Sandeen wrote: >> Every call to xfs_attr_trace_enter() shares the exact >> same 16 args in the middle... just send in the context >> pointer and let the next level down split it into the >> ktrace. > > Ping? worth doing? > Yeah, that sounded reasonable as it was pretty messy. I'll take it... --Tim From owner-xfs@oss.sgi.com Mon May 19 21:35:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 21:35:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K4Z6H7020762 for ; Mon, 19 May 2008 21:35:08 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA25564; Tue, 20 May 2008 14:35:51 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 16403) id 7512B58C4C29; Tue, 20 May 2008 14:35:51 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: PARTIAL TAKE 976035 - de-duplicate calls to xfs_attr_trace_enter] Message-Id: <20080520043551.7512B58C4C29@chook.melbourne.sgi.com> Date: Tue, 20 May 2008 14:35:51 +1000 (EST) From: xaiki@sgi.com (Niv Sardi-Altivanik) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16012 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs de-duplicate calls to xfs_attr_trace_enter Every call to xfs_attr_trace_enter() shares the exact same 16 args in the middle... just send in the context pointer and let the next level down split it into the ktrace. Compile tested only. Signed-off-by: Eric Sandeen Signed-off-by: Niv Sardi Date: Tue May 20 14:30:00 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/xaiki/isms/2.6-xfs Inspected by: jeffpc,esandeen,xaiki The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31200a fs/xfs/xfs_attr_sf.h - 1.24 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr_sf.h.diff?r1=text&tr1=1.24&r2=text&tr2=1.23&f=h fs/xfs/xfs_attr.c - 1.150 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.150&r2=text&tr2=1.149&f=h From owner-xfs@oss.sgi.com Mon May 19 23:08:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:08:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K682bR027125 for ; Mon, 19 May 2008 23:08:02 -0700 X-ASG-Debug-ID: 1211263729-259901680000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 17D9318D2D4 for ; Mon, 19 May 2008 23:08:49 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id CXPoIkRSulRP0ypF for ; Mon, 19 May 2008 23:08:49 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K68cF3007180 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Tue, 20 May 2008 08:08:38 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K68cGU007174; Tue, 20 May 2008 08:08:38 +0200 Date: Tue, 20 May 2008 08:08:38 +0200 From: Christoph Hellwig To: viro@ZenIV.linux.org.uk Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: [PATCH] always set a/c/mtime through ->setattr Subject: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080520060838.GA6436@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211263731 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.1, rules version 3.1.50878 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16013 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Currently touch_atime and file_update_time directly update a/c/mtime in the inode and just mark the inode dirty afterwards. This is pretty bad for some more complex filesystems that have various different types of dirtying an inode and/or need to store the data in another place for example for a buffer to be logged. This patch changes touch_atime and file_update_time to not update the inode directly but rather call through ->setattr into the filessystem. There is a new ATTR_UPDTIMES flag for these two calls so filesystems know it's just a timestampts update. This allows some optimizations and also allow to kill the IS_NOCMTIME we curretly have for networked filesystem by letting them simpliy ignore these kind of updates. There is also a new ATTR_VERSION flag sent from file_update_time that tells the filesystem to update i_version because this update has the same issues as the timestamp updates. As a side-effect of the optimiation to not perfrom redundant timestamp updates has been moved from touch_atime and file_update_time to notify_change and thus applies to explicit utimes calls, too. Also in this patch are the changes to XFS that clean up all the mess that was caused by the previous behaviour. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/attr.c =================================================================== --- linux-2.6.orig/fs/attr.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/attr.c 2008-05-20 08:06:29.000000000 +0200 @@ -94,8 +94,11 @@ int inode_setattr(struct inode * inode, mode &= ~S_ISGID; inode->i_mode = mode; } - mark_inode_dirty(inode); + if ((ia_valid & ATTR_VERSION)) + inode_inc_iversion(inode); + + mark_inode_dirty(inode); return 0; } EXPORT_SYMBOL(inode_setattr); @@ -104,13 +107,29 @@ int notify_change(struct dentry * dentry { struct inode *inode = dentry->d_inode; mode_t mode = inode->i_mode; + struct timespec now = current_fs_time(inode->i_sb); + unsigned int ia_valid; int error; - struct timespec now; - unsigned int ia_valid = attr->ia_valid; - now = current_fs_time(inode->i_sb); + /* + * Only tell the filesystem to update the timestamps if they + * actually change. + */ + if (attr->ia_valid & (ATTR_ATIME|ATTR_CTIME|ATTR_MTIME)) { + if (timespec_equal(&inode->i_atime, &now)) + attr->ia_valid &= ~ATTR_ATIME; + if (timespec_equal(&inode->i_ctime, &now)) + attr->ia_valid &= ~ATTR_CTIME; + if (timespec_equal(&inode->i_mtime, &now)) + attr->ia_valid &= ~ATTR_MTIME; + + if ((attr->ia_valid & ~ATTR_UPDTIMES) == 0) + return 0; + } + ia_valid = attr->ia_valid; attr->ia_ctime = now; + if (!(ia_valid & ATTR_ATIME_SET)) attr->ia_atime = now; if (!(ia_valid & ATTR_MTIME_SET)) Index: linux-2.6/fs/inode.c =================================================================== --- linux-2.6.orig/fs/inode.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/inode.c 2008-05-20 08:06:22.000000000 +0200 @@ -1190,7 +1190,7 @@ EXPORT_SYMBOL(bmap); void touch_atime(struct vfsmount *mnt, struct dentry *dentry) { struct inode *inode = dentry->d_inode; - struct timespec now; + struct iattr attr; if (mnt_want_write(mnt)) return; @@ -1215,12 +1215,8 @@ void touch_atime(struct vfsmount *mnt, s goto out; } - now = current_fs_time(inode->i_sb); - if (timespec_equal(&inode->i_atime, &now)) - goto out; - - inode->i_atime = now; - mark_inode_dirty_sync(inode); + attr.ia_valid = ATTR_ATIME|ATTR_UPDTIMES; + notify_change(dentry, &attr); out: mnt_drop_write(mnt); } @@ -1241,8 +1237,7 @@ EXPORT_SYMBOL(touch_atime); void file_update_time(struct file *file) { struct inode *inode = file->f_path.dentry->d_inode; - struct timespec now; - int sync_it = 0; + struct iattr attr; int err; if (IS_NOCMTIME(inode)) @@ -1252,27 +1247,13 @@ void file_update_time(struct file *file) if (err) return; - now = current_fs_time(inode->i_sb); - if (!timespec_equal(&inode->i_mtime, &now)) { - inode->i_mtime = now; - sync_it = 1; - } - - if (!timespec_equal(&inode->i_ctime, &now)) { - inode->i_ctime = now; - sync_it = 1; - } - - if (IS_I_VERSION(inode)) { - inode_inc_iversion(inode); - sync_it = 1; - } + attr.ia_valid = ATTR_MTIME|ATTR_CTIME|ATTR_UPDTIMES; + if (IS_I_VERSION(inode)) + attr.ia_valid |= ATTR_VERSION; + notify_change(file->f_path.dentry, &attr); - if (sync_it) - mark_inode_dirty_sync(inode); mnt_drop_write(file->f_path.mnt); } - EXPORT_SYMBOL(file_update_time); int inode_needs_sync(struct inode *inode) Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.c 2008-05-19 15:47:00.000000000 +0200 @@ -55,22 +55,6 @@ #include /* - * Bring the atime in the XFS inode uptodate. - * Used before logging the inode to disk or when the Linux inode goes away. - */ -void -xfs_synchronize_atime( - xfs_inode_t *ip) -{ - struct inode *inode = ip->i_vnode; - - if (inode) { - ip->i_d.di_atime.t_sec = (__int32_t)inode->i_atime.tv_sec; - ip->i_d.di_atime.t_nsec = (__int32_t)inode->i_atime.tv_nsec; - } -} - -/* * If the linux inode exists, mark it dirty. * Used when commiting a dirty inode into a transaction so that * the inode will get written back by the linux code @@ -136,34 +120,33 @@ xfs_ichgtime( mark_inode_dirty_sync(inode); } -/* - * Variant on the above which avoids querying the system clock - * in situations where we know the Linux inode timestamps have - * just been updated (and so we can update our inode cheaply). - */ -void -xfs_ichgtime_fast( - xfs_inode_t *ip, - struct inode *inode, - int flags) +STATIC int +xfs_uptdate_timestamps( + struct inode *inode, + struct iattr *attr) { - timespec_t *tvp; + struct xfs_inode *ip = XFS_I(inode); + unsigned int ia_valid = attr->ia_valid; - /* - * Atime updates for read() & friends are handled lazily now, and - * explicit updates must go through xfs_ichgtime() - */ - ASSERT((flags & XFS_ICHGTIME_ACC) == 0); + ASSERT(!(ia_valid & ~(ATTR_ATIME|ATTR_CTIME|ATTR_MTIME|ATTR_UPDTIMES))); + ASSERT(!IS_RDONLY(inode)); - if (flags & XFS_ICHGTIME_MOD) { - tvp = &inode->i_mtime; - ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec; - ip->i_d.di_mtime.t_nsec = (__int32_t)tvp->tv_nsec; + if (ia_valid & ATTR_ATIME) { + inode->i_atime = attr->ia_atime; + ip->i_d.di_atime.t_sec = attr->ia_atime.tv_sec; + ip->i_d.di_atime.t_nsec = attr->ia_atime.tv_nsec; } - if (flags & XFS_ICHGTIME_CHG) { - tvp = &inode->i_ctime; - ip->i_d.di_ctime.t_sec = (__int32_t)tvp->tv_sec; - ip->i_d.di_ctime.t_nsec = (__int32_t)tvp->tv_nsec; + + if (ia_valid & ATTR_MTIME) { + inode->i_mtime = attr->ia_mtime; + ip->i_d.di_mtime.t_sec = attr->ia_mtime.tv_sec; + ip->i_d.di_mtime.t_nsec = attr->ia_mtime.tv_nsec; + } + + if (ia_valid & ATTR_CTIME) { + inode->i_ctime = attr->ia_ctime; + ip->i_d.di_ctime.t_sec = attr->ia_ctime.tv_sec; + ip->i_d.di_ctime.t_nsec = attr->ia_ctime.tv_nsec; } /* @@ -174,13 +157,18 @@ xfs_ichgtime_fast( * while doing this. We use the SYNCHRONIZE macro to * ensure that the compiler does not reorder the update * of i_update_core above the timestamp updates above. + * + * Note that we do lazy atime updates, so we only mark + * the inode dirty for c/mtime updates. */ - SYNCHRONIZE(); - ip->i_update_core = 1; - if (!(inode->i_state & I_NEW)) + if (ia_valid & (ATTR_CTIME|ATTR_MTIME)) { + SYNCHRONIZE(); + ip->i_update_core = 1; mark_inode_dirty_sync(inode); -} + } + return 0; +} /* * Pull the link count and size up from the xfs inode to the linux inode @@ -668,6 +656,13 @@ xfs_vn_setattr( int flags = 0; int error; + /* + * Timestamps do not need to be logged and hence do not + * need to be done within a transaction. + */ + if (ia_valid & ATTR_UPDTIMES) + return xfs_uptdate_timestamps(inode, attr); + if (ia_valid & ATTR_UID) { vattr.va_mask |= XFS_AT_UID; vattr.va_uid = attr->ia_uid; Index: linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-19 15:42:23.000000000 +0200 @@ -111,9 +111,6 @@ typedef struct bhv_vattr { #define XFS_AT_NBLOCKS 0x00002000 #define XFS_AT_VCODE 0x00004000 #define XFS_AT_MAC 0x00008000 -#define XFS_AT_UPDATIME 0x00010000 -#define XFS_AT_UPDMTIME 0x00020000 -#define XFS_AT_UPDCTIME 0x00040000 #define XFS_AT_ACL 0x00080000 #define XFS_AT_CAP 0x00100000 #define XFS_AT_INF 0x00200000 @@ -139,8 +136,6 @@ typedef struct bhv_vattr { #define XFS_AT_TIMES (XFS_AT_ATIME|XFS_AT_MTIME|XFS_AT_CTIME) -#define XFS_AT_UPDTIMES (XFS_AT_UPDATIME|XFS_AT_UPDMTIME|XFS_AT_UPDCTIME) - #define XFS_AT_NOSET (XFS_AT_NLINK|XFS_AT_RDEV|XFS_AT_FSID|XFS_AT_NODEID|\ XFS_AT_TYPE|XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|\ XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_GENCOUNT) @@ -193,25 +188,6 @@ static inline int VN_BAD(bhv_vnode_t *vp } /* - * Extracting atime values in various formats - */ -static inline void vn_atime_to_bstime(bhv_vnode_t *vp, xfs_bstime_t *bs_atime) -{ - bs_atime->tv_sec = vp->i_atime.tv_sec; - bs_atime->tv_nsec = vp->i_atime.tv_nsec; -} - -static inline void vn_atime_to_timespec(bhv_vnode_t *vp, struct timespec *ts) -{ - *ts = vp->i_atime; -} - -static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt) -{ - *tt = vp->i_atime.tv_sec; -} - -/* * Some useful predicates. */ #define VN_MAPPED(vp) mapping_mapped(vn_to_inode(vp)->i_mapping) Index: linux-2.6/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode.c 2008-05-19 15:42:23.000000000 +0200 @@ -3330,11 +3330,6 @@ xfs_iflush_int( ip->i_update_core = 0; SYNCHRONIZE(); - /* - * Make sure to get the latest atime from the Linux inode. - */ - xfs_synchronize_atime(ip); - if (XFS_TEST_ERROR(be16_to_cpu(dip->di_core.di_magic) != XFS_DINODE_MAGIC, mp, XFS_ERRTAG_IFLUSH_1, XFS_RANDOM_IFLUSH_1)) { xfs_cmn_err(XFS_PTAG_IFLUSH, CE_ALERT, mp, Index: linux-2.6/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.h 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode.h 2008-05-19 15:42:23.000000000 +0200 @@ -526,7 +526,6 @@ 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_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); xfs_bmbt_rec_host_t *xfs_iext_get_ext(xfs_ifork_t *, xfs_extnum_t); Index: linux-2.6/fs/xfs/xfs_inode_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode_item.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode_item.c 2008-05-19 15:42:23.000000000 +0200 @@ -271,11 +271,6 @@ xfs_inode_item_format( ip->i_update_size = 0; /* - * Make sure to get the latest atime from the Linux inode. - */ - xfs_synchronize_atime(ip); - - /* * make sure the linux inode is dirty */ xfs_mark_inode_dirty_sync(ip); Index: linux-2.6/fs/xfs/xfs_itable.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_itable.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_itable.c 2008-05-19 15:42:23.000000000 +0200 @@ -85,7 +85,8 @@ xfs_bulkstat_one_iget( buf->bs_uid = dic->di_uid; buf->bs_gid = dic->di_gid; buf->bs_size = dic->di_size; - vn_atime_to_bstime(vp, &buf->bs_atime); + buf->bs_atime.tv_sec = dic->di_atime.t_sec; + buf->bs_atime.tv_nsec = dic->di_atime.t_nsec; buf->bs_mtime.tv_sec = dic->di_mtime.t_sec; buf->bs_mtime.tv_nsec = dic->di_mtime.t_nsec; buf->bs_ctime.tv_sec = dic->di_ctime.t_sec; Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2008-05-19 15:42:23.000000000 +0200 @@ -115,19 +115,6 @@ xfs_setattr( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - /* - * Timestamps do not need to be logged and hence do not - * need to be done within a transaction. - */ - if (mask & XFS_AT_UPDTIMES) { - ASSERT((mask & ~XFS_AT_UPDTIMES) == 0); - timeflags = ((mask & XFS_AT_UPDATIME) ? XFS_ICHGTIME_ACC : 0) | - ((mask & XFS_AT_UPDCTIME) ? XFS_ICHGTIME_CHG : 0) | - ((mask & XFS_AT_UPDMTIME) ? XFS_ICHGTIME_MOD : 0); - xfs_ichgtime(ip, timeflags); - return 0; - } - olddquot1 = olddquot2 = NULL; udqp = gdqp = NULL; @@ -3226,12 +3213,6 @@ xfs_reclaim( ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0); /* - * Make sure the atime in the XFS inode is correct before freeing the - * Linux inode. - */ - xfs_synchronize_atime(ip); - - /* * If we have nothing to flush with this inode then complete the * teardown now, otherwise break the link between the xfs inode and the * linux inode and clean up the xfs inode later. This avoids flushing Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.h 2008-05-19 15:42:23.000000000 +0200 @@ -29,7 +29,6 @@ extern const struct file_operations xfs_ struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); -extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int); #define xfs_vtoi(vp) \ ((struct xfs_inode *)vn_to_inode(vp)->i_private) Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.c 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c 2008-05-19 15:42:45.000000000 +0200 @@ -668,17 +668,8 @@ start: if (new_size > xip->i_size) xip->i_new_size = new_size; - /* - * We're not supposed to change timestamps in readonly-mounted - * filesystems. Throw it away if anyone asks us. - */ - if (likely(!(ioflags & IO_INVIS) && - !mnt_want_write(file->f_path.mnt))) { + if (likely(!(ioflags & IO_INVIS))) file_update_time(file); - xfs_ichgtime_fast(xip, inode, - XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); - mnt_drop_write(file->f_path.mnt); - } /* * If the offset is beyond the size of the file, we have a couple Index: linux-2.6/include/linux/fs.h =================================================================== --- linux-2.6.orig/include/linux/fs.h 2008-05-19 15:41:46.000000000 +0200 +++ linux-2.6/include/linux/fs.h 2008-05-19 15:42:23.000000000 +0200 @@ -333,6 +333,9 @@ typedef void (dio_iodone_t)(struct kiocb #define ATTR_FILE 8192 #define ATTR_KILL_PRIV 16384 #define ATTR_OPEN 32768 /* Truncating from open(O_TRUNC) */ +#define ATTR_VERSION 65536 /* increment i_version */ +#define ATTR_UPDTIMES 131072 /* timestamp updates are side-effect of + read/write operations */ /* * This is the Inode Attributes structure, used for notify_change(). It From owner-xfs@oss.sgi.com Mon May 19 23:10:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:10:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4K6A9um027534 for ; Mon, 19 May 2008 23:10:13 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA27371; Tue, 20 May 2008 16:10:51 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4K6AnsT172868178; Tue, 20 May 2008 16:10:50 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4K6AlIf173168073; Tue, 20 May 2008 16:10:47 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Tue, 20 May 2008 16:10:47 +1000 From: David Chinner To: Emmanuel Florac Cc: Christoph Hellwig , xfs@oss.sgi.com Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080520061047.GP103491721@sgi.com> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> <20080518154208.77b6be3e@galadriel.home> <20080519221057.75e0a775@galadriel.home> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080519221057.75e0a775@galadriel.home> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16014 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Mon, May 19, 2008 at 10:10:57PM +0200, Emmanuel Florac wrote: > Le Sun, 18 May 2008 15:42:08 +0200 vous écriviez: > > > IIRC I tried both, however I'll double check monday... > > Well obviously I didn't try both, because it worked as expected when > using "inode64". However there'ssomething slightly weird in the data > layout: > > /dev/dm-0: > AG Inodes IUsed IFree Use% > 0 4288 4277 11 99% > 1 0 0 0 0% > 2 0 0 0 0% ..... If there's no free space in AGs > 0 when you enable inode64, then you will still get enospc... > See how all inodes are in the same vg? is it OK? ^^ AG This is typical of inode32 allocation... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Mon May 19 23:18:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:18:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6Imnn028636 for ; Mon, 19 May 2008 23:18:51 -0700 X-ASG-Debug-ID: 1211264376-259901be0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mgw-mx06.nokia.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B4E4118D1F8 for ; Mon, 19 May 2008 23:19:36 -0700 (PDT) Received: from mgw-mx06.nokia.com (smtp.nokia.com [192.100.122.233]) by cuda.sgi.com with ESMTP id Y6p17GP7EdbY6Fxt for ; Mon, 19 May 2008 23:19:36 -0700 (PDT) Received: from esebh106.NOE.Nokia.com (esebh106.ntc.nokia.com [172.21.138.213]) by mgw-mx06.nokia.com (Switch-3.2.6/Switch-3.2.6) with ESMTP id m4K6J6mW026422; Tue, 20 May 2008 09:19:27 +0300 Received: from esebh102.NOE.Nokia.com ([172.21.138.183]) by esebh106.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 20 May 2008 09:18:48 +0300 Received: from [172.21.41.56] ([172.21.41.56]) by esebh102.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 20 May 2008 09:18:48 +0300 Message-ID: <48326D66.8000106@nokia.com> Date: Tue, 20 May 2008 09:19:18 +0300 From: Artem Bityutskiy Reply-To: Artem.Bityutskiy@nokia.com Organization: Nokia OYJ User-Agent: Thunderbird 2.0.0.14 (X11/20080501) MIME-Version: 1.0 To: Christoph Hellwig CC: viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr References: <20080520060838.GA6436@lst.de> In-Reply-To: <20080520060838.GA6436@lst.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-OriginalArrivalTime: 20 May 2008 06:18:48.0617 (UTC) FILETIME=[5D9B7990:01C8BA41] X-Nokia-AV: Clean X-Barracuda-Connect: smtp.nokia.com[192.100.122.233] X-Barracuda-Start-Time: 1211264377 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.1, rules version 3.1.50880 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16015 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Artem.Bityutskiy@nokia.com Precedence: bulk X-list: xfs Christoph, Christoph Hellwig wrote: > Currently touch_atime and file_update_time directly update a/c/mtime > in the inode and just mark the inode dirty afterwards. This is pretty > bad for some more complex filesystems that have various different types > of dirtying an inode and/or need to store the data in another place > for example for a buffer to be logged. > > This patch changes touch_atime and file_update_time to not update the > inode directly but rather call through ->setattr into the filessystem. This patch would make our (UBIFS develpers') life easier, thank you! Could we go a further and allow the file-system returning error if it for some reasons cannot change the time? For example, the FS could return -EIO or -ENOSPC up and VFS would have to free resources and propagate this error to user-space. Is this possible? -- Best Regards, Artem Bityutskiy (Ðртём Битюцкий) From owner-xfs@oss.sgi.com Mon May 19 23:27:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:27:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6RbiC030193 for ; Mon, 19 May 2008 23:27:37 -0700 X-ASG-Debug-ID: 1211264906-3a04035f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 825A911900DA for ; Mon, 19 May 2008 23:28:26 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id CGKT2T0g3By21ufA for ; Mon, 19 May 2008 23:28:26 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K6SGF3008402 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Tue, 20 May 2008 08:28:16 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K6SGF0008400; Tue, 20 May 2008 08:28:16 +0200 Date: Tue, 20 May 2008 08:28:15 +0200 From: Christoph Hellwig To: Artem Bityutskiy Cc: Christoph Hellwig , viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080520062815.GA8324@lst.de> References: <20080520060838.GA6436@lst.de> <48326D66.8000106@nokia.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48326D66.8000106@nokia.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211264907 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0199 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.1, rules version 3.1.50879 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16016 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Tue, May 20, 2008 at 09:19:18AM +0300, Artem Bityutskiy wrote: > Could we go a further and allow the file-system returning error if it > for some reasons cannot change the time? For example, the FS could > return -EIO or -ENOSPC up and VFS would have to free resources and > propagate this error to user-space. Is this possible? ->setattr and notify_change already return errors, so we just need to propagate them one level further. Feel free to send a patch. From owner-xfs@oss.sgi.com Mon May 19 23:35:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:35:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_62 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6ZgIG031387 for ; Mon, 19 May 2008 23:35:43 -0700 X-ASG-Debug-ID: 1211265389-39c303d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 60BEF118768A for ; Mon, 19 May 2008 23:36:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id gyNWAXZGJZaZ49u4 for ; Mon, 19 May 2008 23:36:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K6aMF3008910 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 20 May 2008 08:36:22 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K6aMhn008908 for xfs@oss.sgi.com; Tue, 20 May 2008 08:36:22 +0200 Date: Tue, 20 May 2008 08:36:22 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] sanitize xfs_initialize_vnode Subject: Re: [PATCH] sanitize xfs_initialize_vnode Message-ID: <20080520063622.GA8869@lst.de> References: <20080502105215.GA17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080502105215.GA17870@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211265391 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.1, rules version 3.1.50881 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16017 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? On Fri, May 02, 2008 at 12:52:15PM +0200, Christoph Hellwig wrote: > Sanitize setting up the Linux indode. > > Setting up the xfs_inode <-> inode link is opencoded in xfs_iget_core > now because that's the only place it needs to be done, > xfs_initialize_vnode is renamed to xfs_setup_inode and loses all > superflous paramaters. The check for I_NEW is removed because it always > is true and the di_mode check moves into xfs_iget_core because it's only > needed there. > > xfs_set_inodeops and xfs_revalidate_inode are merged into > xfs_setup_inode and the whole things is moved into xfs_iops.c where it > belongs. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:51:46.000000000 +0200 > @@ -777,7 +777,7 @@ out_error: > return error; > } > > -const struct inode_operations xfs_inode_operations = { > +static const struct inode_operations xfs_inode_operations = { > .permission = xfs_vn_permission, > .truncate = xfs_vn_truncate, > .getattr = xfs_vn_getattr, > @@ -789,7 +789,7 @@ const struct inode_operations xfs_inode_ > .fallocate = xfs_vn_fallocate, > }; > > -const struct inode_operations xfs_dir_inode_operations = { > +static const struct inode_operations xfs_dir_inode_operations = { > .create = xfs_vn_create, > .lookup = xfs_vn_lookup, > .link = xfs_vn_link, > @@ -808,7 +808,7 @@ const struct inode_operations xfs_dir_in > .listxattr = xfs_vn_listxattr, > }; > > -const struct inode_operations xfs_symlink_inode_operations = { > +static const struct inode_operations xfs_symlink_inode_operations = { > .readlink = generic_readlink, > .follow_link = xfs_vn_follow_link, > .put_link = xfs_vn_put_link, > @@ -820,3 +820,95 @@ const struct inode_operations xfs_symlin > .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > }; > + > +STATIC void > +xfs_diflags_to_iflags( > + struct inode *inode, > + struct xfs_inode *ip) > +{ > + if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) > + inode->i_flags |= S_IMMUTABLE; > + else > + inode->i_flags &= ~S_IMMUTABLE; > + if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) > + inode->i_flags |= S_APPEND; > + else > + inode->i_flags &= ~S_APPEND; > + if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) > + inode->i_flags |= S_SYNC; > + else > + inode->i_flags &= ~S_SYNC; > + if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) > + inode->i_flags |= S_NOATIME; > + else > + inode->i_flags &= ~S_NOATIME; > +} > + > +/* > + * Initialize the Linux inode, set up the operation vectors and > + * unlock the inode. > + * > + * When reading existing inodes from disk this is called directly > + * from xfs_iget, when creating a new inode it is called from > + * xfs_ialloc after setting up the inode. > + */ > +void > +xfs_setup_inode( > + struct xfs_inode *ip) > +{ > + struct inode *inode = ip->i_vnode; > + > + inode->i_mode = ip->i_d.di_mode; > + inode->i_nlink = ip->i_d.di_nlink; > + inode->i_uid = ip->i_d.di_uid; > + inode->i_gid = ip->i_d.di_gid; > + > + switch (inode->i_mode & S_IFMT) { > + case S_IFBLK: > + case S_IFCHR: > + inode->i_rdev = > + MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, > + sysv_minor(ip->i_df.if_u2.if_rdev)); > + break; > + default: > + inode->i_rdev = 0; > + break; > + } > + > + inode->i_generation = ip->i_d.di_gen; > + i_size_write(inode, ip->i_d.di_size); > + inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; > + inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; > + inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; > + inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; > + inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; > + inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; > + xfs_diflags_to_iflags(inode, ip); > + xfs_iflags_clear(ip, XFS_IMODIFIED); > + > + switch (inode->i_mode & S_IFMT) { > + case S_IFREG: > + inode->i_op = &xfs_inode_operations; > + inode->i_fop = &xfs_file_operations; > + inode->i_mapping->a_ops = &xfs_address_space_operations; > + break; > + case S_IFDIR: > + inode->i_op = &xfs_dir_inode_operations; > + inode->i_fop = &xfs_dir_file_operations; > + break; > + case S_IFLNK: > + inode->i_op = &xfs_symlink_inode_operations; > + if (!(ip->i_df.if_flags & XFS_IFINLINE)) > + inode->i_mapping->a_ops = &xfs_address_space_operations; > + break; > + default: > + inode->i_op = &xfs_inode_operations; > + init_special_inode(inode, inode->i_mode, inode->i_rdev); > + break; > + } > + > + xfs_iflags_clear(ip, XFS_INEW); > + barrier(); > + > + unlock_new_inode(inode); > +} > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-02 08:41:35.000000000 +0200 > @@ -18,9 +18,7 @@ > #ifndef __XFS_IOPS_H__ > #define __XFS_IOPS_H__ > > -extern const struct inode_operations xfs_inode_operations; > -extern const struct inode_operations xfs_dir_inode_operations; > -extern const struct inode_operations xfs_symlink_inode_operations; > +struct xfs_inode; > > extern const struct file_operations xfs_file_operations; > extern const struct file_operations xfs_dir_file_operations; > @@ -28,10 +26,11 @@ extern const struct file_operations xfs_ > > extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); > > -struct xfs_inode; > extern void xfs_ichgtime(struct xfs_inode *, int); > extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int); > > +extern void xfs_setup_inode(struct xfs_inode *); > + > #define xfs_vtoi(vp) \ > ((struct xfs_inode *)vn_to_inode(vp)->i_private) > > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-02 08:41:35.000000000 +0200 > @@ -155,12 +155,9 @@ EXPORT_SYMBOL(kmem_zone_free); > EXPORT_SYMBOL(kmem_zone_init); > EXPORT_SYMBOL(kmem_zone_zalloc); > EXPORT_SYMBOL(xfs_address_space_operations); > -EXPORT_SYMBOL(xfs_dir_inode_operations); > EXPORT_SYMBOL(xfs_dir_file_operations); > -EXPORT_SYMBOL(xfs_inode_operations); > EXPORT_SYMBOL(xfs_file_operations); > EXPORT_SYMBOL(xfs_invis_file_operations); > -EXPORT_SYMBOL(xfs_symlink_inode_operations); > EXPORT_SYMBOL(xfs_buf_delwri_dequeue); > EXPORT_SYMBOL(_xfs_buf_find); > EXPORT_SYMBOL(xfs_buf_iostart); > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-02 08:41:34.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-02 08:51:43.000000000 +0200 > @@ -558,115 +558,6 @@ xfs_max_file_offset( > return (((__uint64_t)pagefactor) << bitshift) - 1; > } > > -STATIC_INLINE void > -xfs_set_inodeops( > - struct inode *inode) > -{ > - switch (inode->i_mode & S_IFMT) { > - case S_IFREG: > - inode->i_op = &xfs_inode_operations; > - inode->i_fop = &xfs_file_operations; > - inode->i_mapping->a_ops = &xfs_address_space_operations; > - break; > - case S_IFDIR: > - inode->i_op = &xfs_dir_inode_operations; > - inode->i_fop = &xfs_dir_file_operations; > - break; > - case S_IFLNK: > - inode->i_op = &xfs_symlink_inode_operations; > - if (!(XFS_I(inode)->i_df.if_flags & XFS_IFINLINE)) > - inode->i_mapping->a_ops = &xfs_address_space_operations; > - break; > - default: > - inode->i_op = &xfs_inode_operations; > - init_special_inode(inode, inode->i_mode, inode->i_rdev); > - break; > - } > -} > - > -STATIC_INLINE void > -xfs_revalidate_inode( > - xfs_mount_t *mp, > - bhv_vnode_t *vp, > - xfs_inode_t *ip) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - inode->i_mode = ip->i_d.di_mode; > - inode->i_nlink = ip->i_d.di_nlink; > - inode->i_uid = ip->i_d.di_uid; > - inode->i_gid = ip->i_d.di_gid; > - > - switch (inode->i_mode & S_IFMT) { > - case S_IFBLK: > - case S_IFCHR: > - inode->i_rdev = > - MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, > - sysv_minor(ip->i_df.if_u2.if_rdev)); > - break; > - default: > - inode->i_rdev = 0; > - break; > - } > - > - inode->i_generation = ip->i_d.di_gen; > - i_size_write(inode, ip->i_d.di_size); > - inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; > - inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; > - inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; > - inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; > - inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; > - inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; > - if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) > - inode->i_flags |= S_IMMUTABLE; > - else > - inode->i_flags &= ~S_IMMUTABLE; > - if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) > - inode->i_flags |= S_APPEND; > - else > - inode->i_flags &= ~S_APPEND; > - if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) > - inode->i_flags |= S_SYNC; > - else > - inode->i_flags &= ~S_SYNC; > - if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) > - inode->i_flags |= S_NOATIME; > - else > - inode->i_flags &= ~S_NOATIME; > - xfs_iflags_clear(ip, XFS_IMODIFIED); > -} > - > -void > -xfs_initialize_vnode( > - struct xfs_mount *mp, > - bhv_vnode_t *vp, > - struct xfs_inode *ip) > -{ > - struct inode *inode = vn_to_inode(vp); > - > - if (!ip->i_vnode) { > - ip->i_vnode = vp; > - inode->i_private = ip; > - } > - > - /* > - * We need to set the ops vectors, and unlock the inode, but if > - * we have been called during the new inode create process, it is > - * too early to fill in the Linux inode. We will get called a > - * second time once the inode is properly set up, and then we can > - * finish our work. > - */ > - if (ip->i_d.di_mode != 0 && (inode->i_state & I_NEW)) { > - xfs_revalidate_inode(mp, vp, ip); > - xfs_set_inodeops(inode); > - > - xfs_iflags_clear(ip, XFS_INEW); > - barrier(); > - > - unlock_new_inode(inode); > - } > -} > - > int > xfs_blkdev_get( > xfs_mount_t *mp, > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-02 08:41:35.000000000 +0200 > @@ -72,9 +72,6 @@ struct block_device; > > extern __uint64_t xfs_max_file_offset(unsigned int); > > -extern void xfs_initialize_vnode(struct xfs_mount *mp, bhv_vnode_t *vp, > - struct xfs_inode *ip); > - > extern void xfs_flush_inode(struct xfs_inode *); > extern void xfs_flush_device(struct xfs_inode *); > > Index: linux-2.6-xfs/fs/xfs/xfs_iget.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_iget.c 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_iget.c 2008-05-02 08:53:18.000000000 +0200 > @@ -288,10 +288,17 @@ finish_inode: > *ipp = ip; > > /* > + * Set up the Linux with the Linux inode. > + */ > + ip->i_vnode = inode; > + inode->i_private = ip; > + > + /* > * If we have a real type for an on-disk inode, we can set ops(&unlock) > * now. If it's a new inode being created, xfs_ialloc will handle it. > */ > - xfs_initialize_vnode(mp, inode, ip); > + if (ip->i_d.di_mode != 0) > + xfs_setup_inode(ip); > return 0; > } > > Index: linux-2.6-xfs/fs/xfs/xfs_inode.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-05-02 08:41:27.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-05-02 08:41:35.000000000 +0200 > @@ -1046,7 +1046,6 @@ xfs_ialloc( > { > xfs_ino_t ino; > xfs_inode_t *ip; > - bhv_vnode_t *vp; > uint flags; > int error; > > @@ -1077,7 +1076,6 @@ xfs_ialloc( > } > ASSERT(ip != NULL); > > - vp = XFS_ITOV(ip); > ip->i_d.di_mode = (__uint16_t)mode; > ip->i_d.di_onlink = 0; > ip->i_d.di_nlink = nlink; > @@ -1220,7 +1218,7 @@ xfs_ialloc( > xfs_trans_log_inode(tp, ip, flags); > > /* now that we have an i_mode we can setup inode ops and unlock */ > - xfs_initialize_vnode(tp->t_mountp, vp, ip); > + xfs_setup_inode(ip); > > *ipp = ip; > return 0; ---end quoted text--- From owner-xfs@oss.sgi.com Mon May 19 23:35:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:36:03 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6Zwr1031525 for ; Mon, 19 May 2008 23:35:58 -0700 X-ASG-Debug-ID: 1211265406-199703040000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 21E1B18D2D2 for ; Mon, 19 May 2008 23:36:47 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 2HnVGaEz6wuHHMeu for ; Mon, 19 May 2008 23:36:47 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K6adF3008954 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 20 May 2008 08:36:39 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K6adwN008952 for xfs@oss.sgi.com; Tue, 20 May 2008 08:36:39 +0200 Date: Tue, 20 May 2008 08:36:39 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/2] kill xfs_lock_dir_and_entry Subject: Re: [PATCH 2/2] kill xfs_lock_dir_and_entry Message-ID: <20080520063639.GC8869@lst.de> References: <20080502105803.GC17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080502105803.GC17870@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211265408 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.1, rules version 3.1.50880 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16019 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? On Fri, May 02, 2008 at 12:58:03PM +0200, Christoph Hellwig wrote: > When multiple inodes are locked in XFS it happens in order of the inode > number, with the everything but the first inode trylocked if any of > the previous inodes is in the AIL. > > Except for the sorting of the inodes this logic is implemented in > xfs_lock_inodes, but also partially duplicated in xfs_lock_dir_and_entry > in a particularly stupid way adds a lock roundtrip if the inode ordering > is not optimal. > > This patch adds a new helper xfs_lock_two_inodes that takes two inodes > and locks them in the most optimal way according to the above locking > protocol and uses it for all places that want to lock two inodes. > > The only caller of xfs_lock_inodes is xfs_rename which might lock up to > four inodes. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:24.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:30.000000000 +0200 > @@ -1897,111 +1897,6 @@ std_return: > } > > #ifdef DEBUG > -/* > - * Some counters to see if (and how often) we are hitting some deadlock > - * prevention code paths. > - */ > - > -int xfs_rm_locks; > -int xfs_rm_lock_delays; > -int xfs_rm_attempts; > -#endif > - > -/* > - * The following routine will lock the inodes associated with the > - * directory and the named entry in the directory. The locks are > - * acquired in increasing inode number. > - * > - * If the entry is "..", then only the directory is locked. The > - * vnode ref count will still include that from the .. entry in > - * this case. > - * > - * There is a deadlock we need to worry about. If the locked directory is > - * in the AIL, it might be blocking up the log. The next inode we lock > - * could be already locked by another thread waiting for log space (e.g > - * a permanent log reservation with a long running transaction (see > - * xfs_itruncate_finish)). To solve this, we must check if the directory > - * is in the ail and use lock_nowait. If we can't lock, we need to > - * drop the inode lock on the directory and try again. xfs_iunlock will > - * potentially push the tail if we were holding up the log. > - */ > -STATIC int > -xfs_lock_dir_and_entry( > - xfs_inode_t *dp, > - xfs_inode_t *ip) /* inode of entry 'name' */ > -{ > - int attempts; > - xfs_ino_t e_inum; > - xfs_inode_t *ips[2]; > - xfs_log_item_t *lp; > - > -#ifdef DEBUG > - xfs_rm_locks++; > -#endif > - attempts = 0; > - > -again: > - xfs_ilock(dp, XFS_ILOCK_EXCL | XFS_ILOCK_PARENT); > - > - e_inum = ip->i_ino; > - > - xfs_itrace_ref(ip); > - > - /* > - * We want to lock in increasing inum. Since we've already > - * acquired the lock on the directory, we may need to release > - * if if the inum of the entry turns out to be less. > - */ > - if (e_inum > dp->i_ino) { > - /* > - * We are already in the right order, so just > - * lock on the inode of the entry. > - * We need to use nowait if dp is in the AIL. > - */ > - > - lp = (xfs_log_item_t *)dp->i_itemp; > - if (lp && (lp->li_flags & XFS_LI_IN_AIL)) { > - if (!xfs_ilock_nowait(ip, XFS_ILOCK_EXCL)) { > - attempts++; > -#ifdef DEBUG > - xfs_rm_attempts++; > -#endif > - > - /* > - * Unlock dp and try again. > - * xfs_iunlock will try to push the tail > - * if the inode is in the AIL. > - */ > - > - xfs_iunlock(dp, XFS_ILOCK_EXCL); > - > - if ((attempts % 5) == 0) { > - delay(1); /* Don't just spin the CPU */ > -#ifdef DEBUG > - xfs_rm_lock_delays++; > -#endif > - } > - goto again; > - } > - } else { > - xfs_ilock(ip, XFS_ILOCK_EXCL); > - } > - } else if (e_inum < dp->i_ino) { > - xfs_iunlock(dp, XFS_ILOCK_EXCL); > - > - ips[0] = ip; > - ips[1] = dp; > - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); > - } > - /* else e_inum == dp->i_ino */ > - /* This can happen if we're asked to lock /x/.. > - * the entry is "..", which is also the parent directory. > - */ > - > - return 0; > -} > - > -#ifdef DEBUG > int xfs_locked_n; > int xfs_small_retries; > int xfs_middle_retries; > @@ -2135,6 +2030,45 @@ again: > #endif > } > > +void > +xfs_lock_two_inodes( > + xfs_inode_t *ip0, > + xfs_inode_t *ip1, > + uint lock_mode) > +{ > + xfs_inode_t *temp; > + int attempts = 0; > + xfs_log_item_t *lp; > + > + ASSERT(ip0->i_ino != ip1->i_ino); > + > + if (ip0->i_ino > ip1->i_ino) { > + temp = ip0; > + ip0 = ip1; > + ip1 = temp; > + } > + > + again: > + xfs_ilock(ip0, xfs_lock_inumorder(lock_mode, 0)); > + > + /* > + * If the first lock we have locked is in the AIL, we must TRY to get > + * the second lock. If we can't get it, we must release the first one > + * and try again. > + */ > + lp = (xfs_log_item_t *)ip0->i_itemp; > + if (lp && (lp->li_flags & XFS_LI_IN_AIL)) { > + if (!xfs_ilock_nowait(ip1, xfs_lock_inumorder(lock_mode, 1))) { > + xfs_iunlock(ip0, lock_mode); > + if ((++attempts % 5) == 0) > + delay(1); /* Don't just spin the CPU */ > + goto again; > + } > + } else { > + xfs_ilock(ip1, xfs_lock_inumorder(lock_mode, 1)); > + } > +} > + > int > xfs_remove( > xfs_inode_t *dp, > @@ -2210,9 +2144,7 @@ xfs_remove( > goto out_trans_cancel; > } > > - error = xfs_lock_dir_and_entry(dp, ip); > - if (error) > - goto out_trans_cancel; > + xfs_lock_two_inodes(dp, ip, XFS_ILOCK_EXCL); > > /* > * At this point, we've gotten both the directory and the entry > @@ -2239,9 +2171,6 @@ xfs_remove( > } > } > > - /* > - * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. > - */ > XFS_BMAP_INIT(&free_list, &first_block); > error = xfs_dir_removename(tp, dp, name, ip->i_ino, > &first_block, &free_list, resblks); > @@ -2347,7 +2276,6 @@ xfs_link( > { > xfs_mount_t *mp = tdp->i_mount; > xfs_trans_t *tp; > - xfs_inode_t *ips[2]; > int error; > xfs_bmap_free_t free_list; > xfs_fsblock_t first_block; > @@ -2395,15 +2323,7 @@ xfs_link( > goto error_return; > } > > - if (sip->i_ino < tdp->i_ino) { > - ips[0] = sip; > - ips[1] = tdp; > - } else { > - ips[0] = tdp; > - ips[1] = sip; > - } > - > - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); > + xfs_lock_two_inodes(sip, tdp, XFS_ILOCK_EXCL); > > /* > * Increment vnode ref counts since xfs_trans_commit & > Index: linux-2.6-xfs/fs/xfs/xfs_dfrag.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_dfrag.c 2008-04-26 17:43:14.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_dfrag.c 2008-05-02 08:30:30.000000000 +0200 > @@ -128,7 +128,6 @@ xfs_swap_extents( > xfs_swapext_t *sxp) > { > xfs_mount_t *mp; > - xfs_inode_t *ips[2]; > xfs_trans_t *tp; > xfs_bstat_t *sbp = &sxp->sx_stat; > bhv_vnode_t *vp, *tvp; > @@ -153,16 +152,7 @@ xfs_swap_extents( > vp = XFS_ITOV(ip); > tvp = XFS_ITOV(tip); > > - /* Lock in i_ino order */ > - if (ip->i_ino < tip->i_ino) { > - ips[0] = ip; > - ips[1] = tip; > - } else { > - ips[0] = tip; > - ips[1] = ip; > - } > - > - xfs_lock_inodes(ips, 2, lock_flags); > + xfs_lock_two_inodes(ip, tip, lock_flags); > locked = 1; > > /* Verify that both files have the same format */ > @@ -265,7 +255,7 @@ xfs_swap_extents( > locked = 0; > goto error0; > } > - xfs_lock_inodes(ips, 2, XFS_ILOCK_EXCL); > + xfs_lock_two_inodes(ip, tip, XFS_ILOCK_EXCL); > > /* > * Count the number of extended attribute blocks > Index: linux-2.6-xfs/fs/xfs/xfs_inode.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.h 2008-05-01 22:56:57.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_inode.h 2008-05-02 08:30:30.000000000 +0200 > @@ -522,6 +522,7 @@ void xfs_iflush_all(struct xfs_mount *) > 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); > > void xfs_synchronize_atime(xfs_inode_t *); > void xfs_mark_inode_dirty_sync(xfs_inode_t *); ---end quoted text--- From owner-xfs@oss.sgi.com Mon May 19 23:35:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:35:55 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6Zq7U031452 for ; Mon, 19 May 2008 23:35:52 -0700 X-ASG-Debug-ID: 1211265398-0e8101bf0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0880A16EC0C7 for ; Mon, 19 May 2008 23:36:38 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id WbABXO0waqeoduBb for ; Mon, 19 May 2008 23:36:38 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K6aVF3008926 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 20 May 2008 08:36:31 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K6aV6h008924 for xfs@oss.sgi.com; Tue, 20 May 2008 08:36:31 +0200 Date: Tue, 20 May 2008 08:36:31 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] merge xfs_rmdir into xfs_remove Subject: Re: [PATCH 1/2] merge xfs_rmdir into xfs_remove Message-ID: <20080520063631.GB8869@lst.de> References: <20080502105757.GB17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080502105757.GB17870@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211265401 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.1, rules version 3.1.50880 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16018 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? On Fri, May 02, 2008 at 12:57:57PM +0200, Christoph Hellwig wrote: > xfs_remove and xfs_rmdir are almost the same with a little more work > performed in xfs_rmdir due to the . and .. entries. This patch merges > xfs_rmdir into xfs_remove and performs these actions conditionally. > > Also clean up the error handling which was a nightmare in both versions > before. > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-05-01 22:56:57.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-05-02 08:30:24.000000000 +0200 > @@ -2135,13 +2135,6 @@ again: > #endif > } > > -#ifdef DEBUG > -#define REMOVE_DEBUG_TRACE(x) {remove_which_error_return = (x);} > -int remove_which_error_return = 0; > -#else /* ! DEBUG */ > -#define REMOVE_DEBUG_TRACE(x) > -#endif /* ! DEBUG */ > - > int > xfs_remove( > xfs_inode_t *dp, > @@ -2150,6 +2143,7 @@ xfs_remove( > { > xfs_mount_t *mp = dp->i_mount; > xfs_trans_t *tp = NULL; > + int is_dir = S_ISDIR(ip->i_d.di_mode); > int error = 0; > xfs_bmap_free_t free_list; > xfs_fsblock_t first_block; > @@ -2157,8 +2151,11 @@ xfs_remove( > int committed; > int link_zero; > uint resblks; > + uint trans; > + uint log_count; > > xfs_itrace_entry(dp); > + xfs_itrace_entry(ip); > > if (XFS_FORCED_SHUTDOWN(mp)) > return XFS_ERROR(EIO); > @@ -2171,19 +2168,25 @@ xfs_remove( > return error; > } > > - xfs_itrace_entry(ip); > - xfs_itrace_ref(ip); > - > error = XFS_QM_DQATTACH(mp, dp, 0); > - if (!error) > - error = XFS_QM_DQATTACH(mp, ip, 0); > - if (error) { > - REMOVE_DEBUG_TRACE(__LINE__); > + if (error) > + goto std_return; > + > + error = XFS_QM_DQATTACH(mp, ip, 0); > + if (error) > goto std_return; > + > + if (is_dir) { > + trans = XFS_TRANS_RMDIR; > + log_count = XFS_DEFAULT_LOG_COUNT; > + } else { > + trans = XFS_TRANS_REMOVE; > + log_count = XFS_REMOVE_LOG_COUNT; > } > > - tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE); > + tp = xfs_trans_alloc(mp, trans); > cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > + > /* > * We try to get the real space reservation first, > * allowing for directory btree deletion(s) implying > @@ -2195,25 +2198,21 @@ xfs_remove( > */ > resblks = XFS_REMOVE_SPACE_RES(mp); > error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, > - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); > + XFS_TRANS_PERM_LOG_RES, log_count); > if (error == ENOSPC) { > resblks = 0; > error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, > - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); > + XFS_TRANS_PERM_LOG_RES, log_count); > } > if (error) { > ASSERT(error != ENOSPC); > - REMOVE_DEBUG_TRACE(__LINE__); > - xfs_trans_cancel(tp, 0); > - return error; > + cancel_flags = 0; > + goto out_trans_cancel; > } > > error = xfs_lock_dir_and_entry(dp, ip); > - if (error) { > - REMOVE_DEBUG_TRACE(__LINE__); > - xfs_trans_cancel(tp, cancel_flags); > - goto std_return; > - } > + if (error) > + goto out_trans_cancel; > > /* > * At this point, we've gotten both the directory and the entry > @@ -2226,6 +2225,21 @@ xfs_remove( > xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); > > /* > + * If we're removing a directory perform some additional validation. > + */ > + if (is_dir) { > + ASSERT(ip->i_d.di_nlink >= 2); > + if (ip->i_d.di_nlink != 2) { > + error = XFS_ERROR(ENOTEMPTY); > + goto out_trans_cancel; > + } > + if (!xfs_dir_isempty(ip)) { > + error = XFS_ERROR(ENOTEMPTY); > + goto out_trans_cancel; > + } > + } > + > + /* > * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. > */ > XFS_BMAP_INIT(&free_list, &first_block); > @@ -2233,39 +2247,64 @@ xfs_remove( > &first_block, &free_list, resblks); > if (error) { > ASSERT(error != ENOENT); > - REMOVE_DEBUG_TRACE(__LINE__); > - goto error1; > + goto out_bmap_cancel; > } > xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > > + /* > + * Bump the in memory generation count on the parent > + * directory so that other can know that it has changed. > + */ > dp->i_gen++; > xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); > > - error = xfs_droplink(tp, ip); > - if (error) { > - REMOVE_DEBUG_TRACE(__LINE__); > - goto error1; > + if (is_dir) { > + /* > + * Drop the link from ip's "..". > + */ > + error = xfs_droplink(tp, dp); > + if (error) > + goto out_bmap_cancel; > + > + /* > + * Drop the link from dp to ip. > + */ > + error = xfs_droplink(tp, ip); > + if (error) > + goto out_bmap_cancel; > + } else { > + /* > + * When removing a non-directory we need to log the parent > + * inode here for the i_gen update. For a directory this is > + * done implicitly by the xfs_droplink call for the ".." entry. > + */ > + xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); > } > > - /* Determine if this is the last link while > + /* > + * Drop the "." link from ip to self. > + */ > + error = xfs_droplink(tp, ip); > + if (error) > + goto out_bmap_cancel; > + > + /* > + * Determine if this is the last link while > * we are in the transaction. > */ > - link_zero = (ip)->i_d.di_nlink==0; > + link_zero = (ip->i_d.di_nlink == 0); > > /* > * If this is a synchronous mount, make sure that the > * remove transaction goes to disk before returning to > * the user. > */ > - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { > + if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) > xfs_trans_set_sync(tp); > - } > > error = xfs_bmap_finish(&tp, &free_list, &committed); > - if (error) { > - REMOVE_DEBUG_TRACE(__LINE__); > - goto error_rele; > - } > + if (error) > + goto out_bmap_cancel; > > error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); > if (error) > @@ -2277,39 +2316,27 @@ xfs_remove( > * will get killed on last close in xfs_close() so we don't > * have to worry about that. > */ > - if (link_zero && xfs_inode_is_filestream(ip)) > + if (!is_dir && link_zero && xfs_inode_is_filestream(ip)) > xfs_filestream_deassociate(ip); > > xfs_itrace_exit(ip); > + xfs_itrace_exit(dp); > > -/* Fall through to std_return with error = 0 */ > std_return: > if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { > - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, > - dp, DM_RIGHT_NULL, > - NULL, DM_RIGHT_NULL, > - name->name, NULL, ip->i_d.di_mode, error, 0); > + XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, > + NULL, DM_RIGHT_NULL, name->name, NULL, > + ip->i_d.di_mode, error, 0); > } > + > return error; > > - error1: > + out_bmap_cancel: > xfs_bmap_cancel(&free_list); > cancel_flags |= XFS_TRANS_ABORT; > + out_trans_cancel: > xfs_trans_cancel(tp, cancel_flags); > goto std_return; > - > - error_rele: > - /* > - * In this case make sure to not release the inode until after > - * the current transaction is aborted. Releasing it beforehand > - * can cause us to go to xfs_inactive and start a recursive > - * transaction which can easily deadlock with the current one. > - */ > - xfs_bmap_cancel(&free_list); > - cancel_flags |= XFS_TRANS_ABORT; > - xfs_trans_cancel(tp, cancel_flags); > - > - goto std_return; > } > > int > @@ -2675,186 +2702,6 @@ std_return: > } > > int > -xfs_rmdir( > - xfs_inode_t *dp, > - struct xfs_name *name, > - xfs_inode_t *cdp) > -{ > - xfs_mount_t *mp = dp->i_mount; > - xfs_trans_t *tp; > - int error; > - xfs_bmap_free_t free_list; > - xfs_fsblock_t first_block; > - int cancel_flags; > - int committed; > - int last_cdp_link; > - uint resblks; > - > - xfs_itrace_entry(dp); > - > - if (XFS_FORCED_SHUTDOWN(mp)) > - return XFS_ERROR(EIO); > - > - if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { > - error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, > - dp, DM_RIGHT_NULL, > - NULL, DM_RIGHT_NULL, name->name, > - NULL, cdp->i_d.di_mode, 0, 0); > - if (error) > - return XFS_ERROR(error); > - } > - > - /* > - * Get the dquots for the inodes. > - */ > - error = XFS_QM_DQATTACH(mp, dp, 0); > - if (!error) > - error = XFS_QM_DQATTACH(mp, cdp, 0); > - if (error) { > - REMOVE_DEBUG_TRACE(__LINE__); > - goto std_return; > - } > - > - tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR); > - cancel_flags = XFS_TRANS_RELEASE_LOG_RES; > - /* > - * We try to get the real space reservation first, > - * allowing for directory btree deletion(s) implying > - * possible bmap insert(s). If we can't get the space > - * reservation then we use 0 instead, and avoid the bmap > - * btree insert(s) in the directory code by, if the bmap > - * insert tries to happen, instead trimming the LAST > - * block from the directory. > - */ > - resblks = XFS_REMOVE_SPACE_RES(mp); > - error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, > - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); > - if (error == ENOSPC) { > - resblks = 0; > - error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, > - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); > - } > - if (error) { > - ASSERT(error != ENOSPC); > - cancel_flags = 0; > - goto error_return; > - } > - XFS_BMAP_INIT(&free_list, &first_block); > - > - /* > - * Now lock the child directory inode and the parent directory > - * inode in the proper order. This will take care of validating > - * that the directory entry for the child directory inode has > - * not changed while we were obtaining a log reservation. > - */ > - error = xfs_lock_dir_and_entry(dp, cdp); > - if (error) { > - xfs_trans_cancel(tp, cancel_flags); > - goto std_return; > - } > - > - IHOLD(dp); > - xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); > - > - IHOLD(cdp); > - xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL); > - > - ASSERT(cdp->i_d.di_nlink >= 2); > - if (cdp->i_d.di_nlink != 2) { > - error = XFS_ERROR(ENOTEMPTY); > - goto error_return; > - } > - if (!xfs_dir_isempty(cdp)) { > - error = XFS_ERROR(ENOTEMPTY); > - goto error_return; > - } > - > - error = xfs_dir_removename(tp, dp, name, cdp->i_ino, > - &first_block, &free_list, resblks); > - if (error) > - goto error1; > - > - xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); > - > - /* > - * Bump the in memory generation count on the parent > - * directory so that other can know that it has changed. > - */ > - dp->i_gen++; > - > - /* > - * Drop the link from cdp's "..". > - */ > - error = xfs_droplink(tp, dp); > - if (error) { > - goto error1; > - } > - > - /* > - * Drop the link from dp to cdp. > - */ > - error = xfs_droplink(tp, cdp); > - if (error) { > - goto error1; > - } > - > - /* > - * Drop the "." link from cdp to self. > - */ > - error = xfs_droplink(tp, cdp); > - if (error) { > - goto error1; > - } > - > - /* Determine these before committing transaction */ > - last_cdp_link = (cdp)->i_d.di_nlink==0; > - > - /* > - * If this is a synchronous mount, make sure that the > - * rmdir transaction goes to disk before returning to > - * the user. > - */ > - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { > - xfs_trans_set_sync(tp); > - } > - > - error = xfs_bmap_finish (&tp, &free_list, &committed); > - if (error) { > - xfs_bmap_cancel(&free_list); > - xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES | > - XFS_TRANS_ABORT)); > - goto std_return; > - } > - > - error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); > - if (error) { > - goto std_return; > - } > - > - > - /* Fall through to std_return with error = 0 or the errno > - * from xfs_trans_commit. */ > - std_return: > - if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { > - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, > - dp, DM_RIGHT_NULL, > - NULL, DM_RIGHT_NULL, > - name->name, NULL, cdp->i_d.di_mode, > - error, 0); > - } > - return error; > - > - error1: > - xfs_bmap_cancel(&free_list); > - cancel_flags |= XFS_TRANS_ABORT; > - /* FALLTHROUGH */ > - > - error_return: > - xfs_trans_cancel(tp, cancel_flags); > - goto std_return; > -} > - > -int > xfs_symlink( > xfs_inode_t *dp, > struct xfs_name *link_name, > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 00:09:32.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-02 08:30:24.000000000 +0200 > @@ -252,8 +252,7 @@ STATIC void > xfs_cleanup_inode( > struct inode *dir, > struct inode *inode, > - struct dentry *dentry, > - int mode) > + struct dentry *dentry) > { > struct xfs_name teardown; > > @@ -264,10 +263,7 @@ xfs_cleanup_inode( > */ > xfs_dentry_to_name(&teardown, dentry); > > - if (S_ISDIR(mode)) > - xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); > - else > - xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); > + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); > iput(inode); > } > > @@ -349,7 +345,7 @@ xfs_vn_mknod( > return -error; > > out_cleanup_inode: > - xfs_cleanup_inode(dir, inode, dentry, mode); > + xfs_cleanup_inode(dir, inode, dentry); > out_free_acl: > if (default_acl) > _ACL_FREE(default_acl); > @@ -478,31 +474,12 @@ xfs_vn_symlink( > return 0; > > out_cleanup_inode: > - xfs_cleanup_inode(dir, inode, dentry, 0); > + xfs_cleanup_inode(dir, inode, dentry); > out: > return -error; > } > > STATIC int > -xfs_vn_rmdir( > - struct inode *dir, > - struct dentry *dentry) > -{ > - struct inode *inode = dentry->d_inode; > - struct xfs_name name; > - int error; > - > - xfs_dentry_to_name(&name, dentry); > - > - error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); > - if (likely(!error)) { > - xfs_validate_fields(inode); > - xfs_validate_fields(dir); > - } > - return -error; > -} > - > -STATIC int > xfs_vn_rename( > struct inode *odir, > struct dentry *odentry, > @@ -796,7 +773,13 @@ static const struct inode_operations xfs > .unlink = xfs_vn_unlink, > .symlink = xfs_vn_symlink, > .mkdir = xfs_vn_mkdir, > - .rmdir = xfs_vn_rmdir, > + /* > + * Yes, XFS uses the same method for rmdir and unlink. > + * > + * There are some subtile differences deeper in the code, > + * but we use S_ISDIR to check for those. > + */ > + .rmdir = xfs_vn_unlink, > .mknod = xfs_vn_mknod, > .rename = xfs_vn_rename, > .permission = xfs_vn_permission, > Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.h 2008-04-26 20:05:39.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.h 2008-05-02 08:30:24.000000000 +0200 > @@ -32,8 +32,6 @@ int xfs_link(struct xfs_inode *tdp, stru > struct xfs_name *target_name); > int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, > mode_t mode, struct xfs_inode **ipp, struct cred *credp); > -int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, > - struct xfs_inode *cdp); > int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, > xfs_off_t *offset, filldir_t filldir); > int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, ---end quoted text--- From owner-xfs@oss.sgi.com Mon May 19 23:43:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 19 May 2008 23:43:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K6hBmH000430 for ; Mon, 19 May 2008 23:43:13 -0700 X-ASG-Debug-ID: 1211265837-1998034d0000-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 34087186D8E; Mon, 19 May 2008 23:43:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id WKsc4WIomosK4CuU; Mon, 19 May 2008 23:43:57 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JyLZk-00040B-PI; Tue, 20 May 2008 06:43:56 +0000 Date: Tue, 20 May 2008 02:43:56 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Subject: Re: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() Message-ID: <20080520064356.GA8711@infradead.org> References: <20080516045732.F12DC58C4C29@chook.melbourne.sgi.com> <20080516051048.GB5035@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080516051048.GB5035@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211265841 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.1, rules version 3.1.50880 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16020 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 16, 2008 at 01:10:48AM -0400, Christoph Hellwig wrote: > On Fri, May 16, 2008 at 02:57:32PM +1000, Lachlan McIlroy wrote: > > xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() > > > > We need a vfsmount pointer in xfs_dm_rdwr() but we are not > > provided with one and there's no way to get to it. So add > > a m_vfsmount field to the xfs_mount structure and set it > > up at mount time. We can then access it through the xfs > > inode. > > Stong NACK for this crap, and double NACK for pushing this towards > mainline. No reply yet. Folks, you realize this is an instant oops if you perform dmapi operations after one fs instance has been unmounted? From owner-xfs@oss.sgi.com Tue May 20 00:40:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 00:40:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K7eNjL016344 for ; Tue, 20 May 2008 00:40:24 -0700 X-ASG-Debug-ID: 1211269270-4897024a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pomaz-ex.szeredi.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CAF07166D5E3 for ; Tue, 20 May 2008 00:41:11 -0700 (PDT) Received: from pomaz-ex.szeredi.hu (fxip-0047f.externet.hu [88.209.222.127]) by cuda.sgi.com with ESMTP id L0REeGWOfP1ctt1R for ; Tue, 20 May 2008 00:41:11 -0700 (PDT) Received: from miko by pomaz-ex.szeredi.hu with local (Exim 4.63) (envelope-from ) id 1JyMSu-0001au-96; Tue, 20 May 2008 09:40:56 +0200 To: hch@lst.de CC: viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com In-reply-to: <20080520060838.GA6436@lst.de> (message from Christoph Hellwig on Tue, 20 May 2008 08:08:38 +0200) X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr References: <20080520060838.GA6436@lst.de> Message-Id: From: Miklos Szeredi Date: Tue, 20 May 2008 09:40:56 +0200 X-Barracuda-Connect: fxip-0047f.externet.hu[88.209.222.127] X-Barracuda-Start-Time: 1211269271 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.1, rules version 3.1.50884 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16021 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miklos@szeredi.hu Precedence: bulk X-list: xfs > Currently touch_atime and file_update_time directly update a/c/mtime > in the inode and just mark the inode dirty afterwards. This is pretty > bad for some more complex filesystems that have various different types > of dirtying an inode and/or need to store the data in another place > for example for a buffer to be logged. > > This patch changes touch_atime and file_update_time to not update the > inode directly but rather call through ->setattr into the filessystem. Do we know what effect this will have on read/write performance? I can imagine that some ->setattr() implementations are orders of magnitude slower than just dirtying the inode. > There is a new ATTR_UPDTIMES flag for these two calls so filesystems > know it's just a timestampts update. This allows some optimizations > and also allow to kill the IS_NOCMTIME we curretly have for networked > filesystem by letting them simpliy ignore these kind of updates. > > There is also a new ATTR_VERSION flag sent from file_update_time > that tells the filesystem to update i_version because this update > has the same issues as the timestamp updates. > > As a side-effect of the optimiation to not perfrom redundant timestamp > updates has been moved from touch_atime and file_update_time to > notify_change and thus applies to explicit utimes calls, too. This optimization is fishy. Remember, inode->i_*time are just cached values, and the actual times on the (remote) filesystem itself can differ. Which means that we will now optimize out a "touch" because we happened to have the current time cached in the inode. Not that this would be a likely event, but still... So at least this check should be made dependent on ATTR_UPDTIMES, and explicit time updates left alone. Miklos From owner-xfs@oss.sgi.com Tue May 20 01:33:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 01:33:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4K8XD2S020954 for ; Tue, 20 May 2008 01:33:14 -0700 X-ASG-Debug-ID: 1211272442-3db301290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 51873170123A for ; Tue, 20 May 2008 01:34:02 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id PN8Rw3XSS0SoHFYS for ; Tue, 20 May 2008 01:34:02 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4K8XpF3016702 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Tue, 20 May 2008 10:33:52 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4K8Xp4p016700; Tue, 20 May 2008 10:33:51 +0200 Date: Tue, 20 May 2008 10:33:51 +0200 From: Christoph Hellwig To: Miklos Szeredi Cc: hch@lst.de, viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080520083351.GA14826@lst.de> References: <20080520060838.GA6436@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211272443 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.1, rules version 3.1.50888 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16022 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Tue, May 20, 2008 at 09:40:56AM +0200, Miklos Szeredi wrote: > > Currently touch_atime and file_update_time directly update a/c/mtime > > in the inode and just mark the inode dirty afterwards. This is pretty > > bad for some more complex filesystems that have various different types > > of dirtying an inode and/or need to store the data in another place > > for example for a buffer to be logged. > > > > This patch changes touch_atime and file_update_time to not update the > > inode directly but rather call through ->setattr into the filessystem. > > Do we know what effect this will have on read/write performance? I > can imagine that some ->setattr() implementations are orders of > magnitude slower than just dirtying the inode. All major disk or in-memory filesystems except for XFS just pass down ATTR_*TIME requests to inode_setattr which is not more than just dirtying the inode. NFS and CIFS set S_NOCMTIME so they're not affected by this at all. > This optimization is fishy. Remember, inode->i_*time are just cached > values, and the actual times on the (remote) filesystem itself can > differ. Which means that we will now optimize out a "touch" because > we happened to have the current time cached in the inode. Not that > this would be a likely event, but still... > > So at least this check should be made dependent on ATTR_UPDTIMES, and > explicit time updates left alone. Good catch. I'll fix by either/or moving the check into ->setattr and making it conditional on ATTR_UPDTIMES. From owner-xfs@oss.sgi.com Tue May 20 03:16:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 03:16:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KAGfP8028862 for ; Tue, 20 May 2008 03:16:43 -0700 X-ASG-Debug-ID: 1211278650-423500970000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8B9EABA084F for ; Tue, 20 May 2008 03:17:31 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id wOIXvfhOwxTrCnsP for ; Tue, 20 May 2008 03:17:31 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 58F4017F51C; Tue, 20 May 2008 12:17:30 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 0A51917F53C; Tue, 20 May 2008 12:17:29 +0200 (CEST) Date: Tue, 20 May 2008 12:17:33 +0200 From: Emmanuel Florac To: David Chinner Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080520121733.4b528256@harpe.intellique.com> In-Reply-To: <20080520061047.GP103491721@sgi.com> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> <20080518154208.77b6be3e@galadriel.home> <20080519221057.75e0a775@galadriel.home> <20080520061047.GP103491721@sgi.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1211278651 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0004 1.0000 -2.0187 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.1, rules version 3.1.50895 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4KAGhP8028867 X-archive-position: 16023 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Tue, 20 May 2008 16:10:47 +1000 David Chinner écrivait: > If there's no free space in AGs > 0 when you enable inode64, then > you will still get enospc... > > > See how all inodes are in the same vg? is it OK? > ^^ AG > > This is typical of inode32 allocation... OK. I've mounted it "inode64" and apparently it worked fine. I started copying 6 more TB of data, I'll check how it goes this afternoon. -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Tue May 20 03:18:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 03:18:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KAIUhQ029109 for ; Tue, 20 May 2008 03:18:32 -0700 X-ASG-Debug-ID: 1211278759-3dc001190000-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 3BE53BA0929 for ; Tue, 20 May 2008 03:19:19 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 66dyOcifpQMGXoze for ; Tue, 20 May 2008 03:19:19 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JyOwA-000307-SC; Tue, 20 May 2008 10:19:18 +0000 Date: Tue, 20 May 2008 06:19:18 -0400 From: Christoph Hellwig To: Emmanuel Florac Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080520101918.GA24579@infradead.org> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> <20080518154208.77b6be3e@galadriel.home> <20080519221057.75e0a775@galadriel.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080519221057.75e0a775@galadriel.home> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211278760 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.1, rules version 3.1.50895 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16024 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Mon, May 19, 2008 at 10:10:57PM +0200, Emmanuel Florac wrote: > Le Sun, 18 May 2008 15:42:08 +0200 vous ?criviez: > > > IIRC I tried both, however I'll double check monday... > > Well obviously I didn't try both, because it worked as expected when > using "inode64". I've submitted a patch that should give back an error when remounting with an option not supported in remount, that should fix this little oversight in the future. Thanks for the report! From owner-xfs@oss.sgi.com Tue May 20 03:19:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 03:19:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KAJP7N029419 for ; Tue, 20 May 2008 03:19:26 -0700 X-ASG-Debug-ID: 1211278812-26ed015c0000-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 5A48A17016A5; Tue, 20 May 2008 03:20:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Sj7tahU73dZp6XpF; Tue, 20 May 2008 03:20:13 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JyOx2-0005cX-AD; Tue, 20 May 2008 10:20:12 +0000 Date: Tue, 20 May 2008 06:20:12 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: Christoph Hellwig , Mark Goodwin , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: take messages Subject: Re: take messages Message-ID: <20080520102012.GB24579@infradead.org> References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> <20080519060022.GA15529@lst.de> <48322E58.8060009@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48322E58.8060009@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211278814 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.1, rules version 3.1.50896 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16025 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 20, 2008 at 11:50:16AM +1000, Lachlan McIlroy wrote: > oss pushes automatic? They could be but aren't. They aren't? Back in the days the CVS tree on OSS was updated from ptools once a day. From owner-xfs@oss.sgi.com Tue May 20 04:38:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 04:38:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4KBcs2R011784 for ; Tue, 20 May 2008 04:38:56 -0700 Received: from [134.15.251.1] (melb-sw-corp-251-1.corp.sgi.com [134.15.251.1]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id VAA04061; Tue, 20 May 2008 21:39:27 +1000 Message-ID: <4832B868.7050001@sgi.com> Date: Tue, 20 May 2008 21:39:20 +1000 From: Mark Goodwin Reply-To: markgw@sgi.com Organization: SGI Engineering User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) MIME-Version: 1.0 To: Christoph Hellwig CC: Lachlan McIlroy , Christoph Hellwig , xfs@oss.sgi.com Subject: Re: take messages References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> <20080519060022.GA15529@lst.de> <48322E58.8060009@sgi.com> <20080520102012.GB24579@infradead.org> In-Reply-To: <20080520102012.GB24579@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16026 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: markgw@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Tue, May 20, 2008 at 11:50:16AM +1000, Lachlan McIlroy wrote: >> oss pushes automatic? They could be but aren't. > > They aren't? Back in the days the CVS tree on OSS was updated from > ptools once a day. > The ptools->cvs push is automatic. The git updates are not. We have a plan to fix that ... just catching our breath a bit at the moment. Cheers -- Mark Goodwin markgw@sgi.com Engineering Manager for XFS and PCP Phone: +61-3-99631937 SGI Australian Software Group Cell: +61-4-18969583 ------------------------------------------------------------- From owner-xfs@oss.sgi.com Tue May 20 05:38:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 05:38:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KCcENV015654 for ; Tue, 20 May 2008 05:38:14 -0700 X-ASG-Debug-ID: 1211287143-3dcc03cb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 49A051192612 for ; Tue, 20 May 2008 05:39:03 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id If5H5aavY7e7gXJR for ; Tue, 20 May 2008 05:39:03 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 950CE17F510; Tue, 20 May 2008 14:39:02 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 54B0817F557; Tue, 20 May 2008 14:39:02 +0200 (CEST) Date: Tue, 20 May 2008 14:39:06 +0200 From: Emmanuel Florac To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS filesystem reports as full though it isn't Subject: Re: XFS filesystem reports as full though it isn't Message-ID: <20080520143906.4e96426c@harpe.intellique.com> In-Reply-To: <20080520101918.GA24579@infradead.org> References: <20080516222755.3e557c00@galadriel.home> <20080518131855.GA1383@infradead.org> <20080518132127.GA19006@infradead.org> <20080518154208.77b6be3e@galadriel.home> <20080519221057.75e0a775@galadriel.home> <20080520101918.GA24579@infradead.org> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1211287144 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.1, rules version 3.1.50905 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4KCcENV015656 X-archive-position: 16027 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Tue, 20 May 2008 06:19:18 -0400 Christoph Hellwig écrivait: > I've submitted a patch that should give back an error when remounting > with an option not supported in remount, that should fix this little > oversight in the future. Thanks for the report! Thanks for the patch :) -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Tue May 20 05:53:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 05:53:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_63 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KCrc52017126 for ; Tue, 20 May 2008 05:53:38 -0700 X-ASG-Debug-ID: 1211288065-207300190000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rbox3.erasmusmc.nl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D271512B78DE for ; Tue, 20 May 2008 05:54:25 -0700 (PDT) Received: from rbox3.erasmusmc.nl (rbox3.erasmusmc.nl [156.83.10.13]) by cuda.sgi.com with ESMTP id EHZufdUgL3RHziWj for ; Tue, 20 May 2008 05:54:25 -0700 (PDT) Received: from localhost (localhost.erasmusmc.nl [127.0.0.1]) by rbox3.erasmusmc.nl (Postfix) with ESMTP id 72EDDEB0EB4 for ; Tue, 20 May 2008 14:54:24 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: amavisd-new at erasmusmc.nl Received: from rbox3.erasmusmc.nl ([127.0.0.1]) by localhost (rbox3.erasmusmc.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id yFBpkST63K+i for ; Tue, 20 May 2008 14:54:24 +0200 (CEST) Received: from bioinf-mir.erasmusmc.nl (bioinf-mir.erasmusmc.nl [10.92.2.192]) by rbox3.erasmusmc.nl (Postfix) with ESMTP id 3B587EB0EAC for ; Tue, 20 May 2008 14:54:24 +0200 (CEST) Message-ID: <4832C9DD.6090700@erasmusmc.nl> Date: Tue, 20 May 2008 14:53:49 +0200 From: Mirjam van den Hout - van Vroonhoven Reply-To: m.vandenhout@erasmusmc.nl User-Agent: Thunderbird 2.0.0.6 (X11/20070728) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Adapted specfile to make kernel-module-xfs rpm build for a RHEL4 largesmp kernel Subject: Adapted specfile to make kernel-module-xfs rpm build for a RHEL4 largesmp kernel X-Enigmail-Version: 0.95.6 Content-Type: multipart/mixed; boundary="------------040207080205040308050205" X-Barracuda-Connect: rbox3.erasmusmc.nl[156.83.10.13] X-Barracuda-Start-Time: 1211288066 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4970 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.1, rules version 3.1.50905 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 16028 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: m.vandenhout@erasmusmc.nl Precedence: bulk X-list: xfs This is a multi-part message in MIME format. --------------040207080205040308050205 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hello XFS team, In order to make XFS work on Redhat Enterprise Linux 4, using the stock RH largesmp kernel (our server has 16 CPU's) I had to adapt the spec file for the kernel-module-xfs source rpm you offer for download at ftp://oss.sgi.com/projects/xfs/download/testing/RHEL4/kernel-module-xfs-2.6.9-22.EL-0.1-1.src.rpm The issue is that largesmp was not recognized as a kernel type, and with the original specfile an RPM was build with a dependency "requires kernel-smp = 2.6.9-67.0.1.ELlarge" where the dependency should have been "requires kernel-largesmp = 2.6.9-67.0.1". The fix was to add "largesmp" to the list of defined kernel_type at the top of the .spec file. I also fixed a typo in this list (default instead of deault). The new fixed spec file (kernel-module-xfs.spec), the original spec file (kernel-module-xfs.spec.orig) and a diff between the two (kernel-module-xfs.spec.patch are attached to this email. For other users, it might be useful to include this in the next release. Kind regards, Mirjam van den Hout -- Dr. Mirjam van den Hout - van Vroonhoven system administrator/programmer, dept. of Bioinformatics Erasmus Medical Center, Rotterdam, The Netherlands Room Number Ee 15.32, phone +31-10-703 81 11 Web: http://www.erasmusmc.nl/bioinformatics/ E-mail: m.vandenhout@erasmusmc.nl --------------040207080205040308050205 Content-Type: text/plain; name="kernel-module-xfs.spec" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kernel-module-xfs.spec" # Spec file for xfs linux-2.6 kernel modules %define module_name xfs # Make a kernel-modules-xfs-source package to go with kernel-source? # XXX ERS maybe a -devel package makes more sense for RH %define build_source_pkg 0 # Work out kernel uname, version, release, type, etc for provides/requires %define kernel_uname %(grep -s UTS_RELEASE %{kernel_topdir}/include/linux/version.h | awk '{print $3}' | sed s/\\"//g) # kernel_type is everything else at the end of the uname %define kernel_type %(echo %{kernel_uname} | grep -o "default$\\|smp$\\|bigsmp$\\|bigmem$\\|debug$\\|hugemem$\\|largesmp$\\|sn2$") # kernel_type, IF it exists, has leading "-" in the kernel rpm name %define rpm_kernel_type %(test ! -z "%{kernel_type}" && echo -%{kernel_type}) %define kernel_ver %(echo %{kernel_uname} | awk -F - '{print $1}') %define kernel_rel %(echo %{kernel_uname} | awk -F - '{print $2}' | sed -e "s/%{kernel_type}$//") Summary : XFS filesystem kernel modules Name : kernel-module-%{module_name}-%{kernel_uname} Version : 0.1 Release : 1 Vendor : Silicon Graphics, Inc. Packager : Silicon Graphics, Inc. License : GPL Group : System Environment/Kernel URL : http://oss.sgi.com/projects/xfs BuildRoot : %{_tmppath}/%{name}-%{version}-%{release}-buildroot Provides : kernel-module Provides : kernel-module-%{module_name} = %{version}-%{release} Requires : kernel%{rpm_kernel_type} = %{kernel_ver}-%{kernel_rel} Requires : /sbin/depmod # different name here Source0 : %{module_name}-kern.tar.gz Source1 : config.xfs # Allow the code to build as an out-of-tree module Patch0 : %{module_name}_ootbuild.patch # This patchset is for making the xfs codebase in sles9 work # with an RHEL4 kernel. Patch1 : xfs_qsort.patch Patch2 : xfs_proc_args.patch Patch3 : xfs_export_ops.patch Patch4 : xfs_write_inode_return.patch Patch5 : xfs_dmapi_address_space.patch Patch6 : xfs_direct_io_locking.patch # suppress debuginfo packages for now %define debug_package %{nil} %description The XFS(tm) Filesystem from Silicon Graphics, Inc. XFS is a highly scalable, high-performance journaling filesystem that provides rapid recovery from system crashes. %if %{build_source_pkg} %package -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source Summary : The source code for the XFS filesystem kernel module. Group : Development/System Requires : kernel-source = %{kernel_ver}-%{kernel_rel} %description -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source The %{module_name}-modules-source package contains the source code files for the XFS filesystem. When installed, this will populate the fs/%{module_name} subdirectory of the matching kernel-source RPM. %endif %prep %setup -n %{module_name} %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 cp %{SOURCE1} . %build make TOPDIR=%{kernel_topdir} modules %install make TOPDIR=%{kernel_topdir} DMAPI_TOPDIR=%{dmapi_topdir} INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install # Make clean & copy files over for source package %if %{build_source_pkg} make TOPDIR=%{kernel_topdir} clean mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} cp -aR * $RPM_BUILD_ROOT/usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} %endif %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT ] %files %defattr(644,root,root,755) /lib/modules/%{kernel_uname}/extra %if %{build_source_pkg} %ifarch i386 ia64 x86_64 %files -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source %defattr(644,root,root,755) /usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} %endif %endif # Note, this mkinitrd command is unique to RH I believe %post if [ -e /boot/System.map-%{kernel_uname} ]; then /sbin/depmod -ae -F /boot/System.map-%{kernel_uname} %{kernel_uname} fi if (stat -f / | grep -q 0x58465342) || (stat -f / | grep -q XFS); then echo "It appears that your root filesytem is on XFS." echo "Creating a new initrd /boot/initrd-%{kernel_uname}.img" echo "for kernel %{kernel_uname} with command:" echo " /sbin/mkinitrd -f /boot/initrd-%{kernel_uname}.img %{kernel_uname}" echo "If you use lilo, you should re-run the lilo command." /sbin/mkinitrd -f /boot/initrd-%{kernel_uname}.img %{kernel_uname} fi echo "#################################################################" echo "# #" echo "# NOTICE #" echo "# This xfs module rpm has been provided for testing purposes #" echo "# only. It is believed to be functional, but it has not been #" echo "# heavily tested. In particular, you may have issues with the #" echo "# 4KSTACKS option on RHEL4 ia32 kernels, depending on your IO #" echo "# hardware, layering, nfs usage, etc. #" echo "# #" echo "# Please do NOT report any problems with this module, or with #" echo "# the kernel when this module is loaded, to Red Hat. #" echo "# You may report issues to the linux-xfs@oss.sgi.com list. #" echo "# (Please also report successes!) #" echo "# #" echo "#################################################################" # Could do an "are you sure? y/n" thing but that might get annoying. %preun if (stat -f / | grep -q 0x58465342) || (stat -f / | grep -q XFS); then echo "It appears that your root filesystem is on XFS." echo "Note that kernel %{kernel_uname} might not" echo "boot without this package." fi %postun if [ -e /boot/System.map-%{kernel_uname} ]; then /sbin/depmod -ae -F /boot/System.map-%{kernel_uname} %{kernel_uname} fi --------------040207080205040308050205 Content-Type: text/plain; name="kernel-module-xfs.spec.orig" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kernel-module-xfs.spec.orig" # Spec file for xfs linux-2.6 kernel modules %define module_name xfs # Make a kernel-modules-xfs-source package to go with kernel-source? # XXX ERS maybe a -devel package makes more sense for RH %define build_source_pkg 0 # Work out kernel uname, version, release, type, etc for provides/requires %define kernel_uname %(grep -s UTS_RELEASE %{kernel_topdir}/include/linux/version.h | awk '{print $3}' | sed s/\\"//g) # kernel_type is everything else at the end of the uname %define kernel_type %(echo %{kernel_uname} | grep -o "deault$\\|smp$\\|bigsmp$\\|bigmem$\\|debug$\\|hugemem$\\|sn2$") # kernel_type, IF it exists, has leading "-" in the kernel rpm name %define rpm_kernel_type %(test ! -z "%{kernel_type}" && echo -%{kernel_type}) %define kernel_ver %(echo %{kernel_uname} | awk -F - '{print $1}') %define kernel_rel %(echo %{kernel_uname} | awk -F - '{print $2}' | sed -e "s/%{kernel_type}$//") Summary : XFS filesystem kernel modules Name : kernel-module-%{module_name}-%{kernel_uname} Version : 0.1 Release : 1 Vendor : Silicon Graphics, Inc. Packager : Silicon Graphics, Inc. License : GPL Group : System Environment/Kernel URL : http://oss.sgi.com/projects/xfs BuildRoot : %{_tmppath}/%{name}-%{version}-%{release}-buildroot Provides : kernel-module Provides : kernel-module-%{module_name} = %{version}-%{release} Requires : kernel%{rpm_kernel_type} = %{kernel_ver}-%{kernel_rel} Requires : /sbin/depmod # different name here Source0 : %{module_name}-kern.tar.gz Source1 : config.xfs # Allow the code to build as an out-of-tree module Patch0 : %{module_name}_ootbuild.patch # This patchset is for making the xfs codebase in sles9 work # with an RHEL4 kernel. Patch1 : xfs_qsort.patch Patch2 : xfs_proc_args.patch Patch3 : xfs_export_ops.patch Patch4 : xfs_write_inode_return.patch Patch5 : xfs_dmapi_address_space.patch Patch6 : xfs_direct_io_locking.patch # suppress debuginfo packages for now %define debug_package %{nil} %description The XFS(tm) Filesystem from Silicon Graphics, Inc. XFS is a highly scalable, high-performance journaling filesystem that provides rapid recovery from system crashes. %if %{build_source_pkg} %package -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source Summary : The source code for the XFS filesystem kernel module. Group : Development/System Requires : kernel-source = %{kernel_ver}-%{kernel_rel} %description -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source The %{module_name}-modules-source package contains the source code files for the XFS filesystem. When installed, this will populate the fs/%{module_name} subdirectory of the matching kernel-source RPM. %endif %prep %setup -n %{module_name} %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 cp %{SOURCE1} . %build make TOPDIR=%{kernel_topdir} modules %install make TOPDIR=%{kernel_topdir} DMAPI_TOPDIR=%{dmapi_topdir} INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install # Make clean & copy files over for source package %if %{build_source_pkg} make TOPDIR=%{kernel_topdir} clean mkdir -p $RPM_BUILD_ROOT/usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} cp -aR * $RPM_BUILD_ROOT/usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} %endif %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT ] %files %defattr(644,root,root,755) /lib/modules/%{kernel_uname}/extra %if %{build_source_pkg} %ifarch i386 ia64 x86_64 %files -n kernel-module-%{module_name}-%{kernel_ver}-%{kernel_rel}-source %defattr(644,root,root,755) /usr/src/linux-%{kernel_ver}-%{kernel_rel}/fs/%{module_name} %endif %endif # Note, this mkinitrd command is unique to RH I believe %post if [ -e /boot/System.map-%{kernel_uname} ]; then /sbin/depmod -ae -F /boot/System.map-%{kernel_uname} %{kernel_uname} fi if (stat -f / | grep -q 0x58465342) || (stat -f / | grep -q XFS); then echo "It appears that your root filesytem is on XFS." echo "Creating a new initrd /boot/initrd-%{kernel_uname}.img" echo "for kernel %{kernel_uname} with command:" echo " /sbin/mkinitrd -f /boot/initrd-%{kernel_uname}.img %{kernel_uname}" echo "If you use lilo, you should re-run the lilo command." /sbin/mkinitrd -f /boot/initrd-%{kernel_uname}.img %{kernel_uname} fi echo "#################################################################" echo "# #" echo "# NOTICE #" echo "# This xfs module rpm has been provided for testing purposes #" echo "# only. It is believed to be functional, but it has not been #" echo "# heavily tested. In particular, you may have issues with the #" echo "# 4KSTACKS option on RHEL4 ia32 kernels, depending on your IO #" echo "# hardware, layering, nfs usage, etc. #" echo "# #" echo "# Please do NOT report any problems with this module, or with #" echo "# the kernel when this module is loaded, to Red Hat. #" echo "# You may report issues to the linux-xfs@oss.sgi.com list. #" echo "# (Please also report successes!) #" echo "# #" echo "#################################################################" # Could do an "are you sure? y/n" thing but that might get annoying. %preun if (stat -f / | grep -q 0x58465342) || (stat -f / | grep -q XFS); then echo "It appears that your root filesystem is on XFS." echo "Note that kernel %{kernel_uname} might not" echo "boot without this package." fi %postun if [ -e /boot/System.map-%{kernel_uname} ]; then /sbin/depmod -ae -F /boot/System.map-%{kernel_uname} %{kernel_uname} fi --------------040207080205040308050205 Content-Type: text/x-patch; name="kernel-module-xfs.spec.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kernel-module-xfs.spec.patch" 14c14 < %define kernel_type %(echo %{kernel_uname} | grep -o "deault$\\|smp$\\|bigsmp$\\|bigmem$\\|debug$\\|hugemem$\\|sn2$") --- > %define kernel_type %(echo %{kernel_uname} | grep -o "default$\\|smp$\\|bigsmp$\\|bigmem$\\|debug$\\|hugemem$\\|largesmp$\\|sn2$") --------------040207080205040308050205-- From owner-xfs@oss.sgi.com Tue May 20 06:45:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 06:45:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KDjCX2022397 for ; Tue, 20 May 2008 06:45:12 -0700 X-ASG-Debug-ID: 1211291160-78ff02640000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9DF7F18FBF2 for ; Tue, 20 May 2008 06:46:01 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 5F5QVrhzyrwMSbVD for ; Tue, 20 May 2008 06:46:01 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id E044FAC08CA; Tue, 20 May 2008 08:45:59 -0500 (CDT) Message-ID: <4832D617.3030005@sandeen.net> Date: Tue, 20 May 2008 08:45:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: m.vandenhout@erasmusmc.nl CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Adapted specfile to make kernel-module-xfs rpm build for a RHEL4 largesmp kernel Subject: Re: Adapted specfile to make kernel-module-xfs rpm build for a RHEL4 largesmp kernel References: <4832C9DD.6090700@erasmusmc.nl> In-Reply-To: <4832C9DD.6090700@erasmusmc.nl> 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: 1211291161 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0195 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.1, rules version 3.1.50908 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16029 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Mirjam van den Hout - van Vroonhoven wrote: > Hello XFS team, > > In order to make XFS work on Redhat Enterprise Linux 4, using the stock > RH largesmp kernel (our server has 16 CPU's) I had to adapt the spec > file for the kernel-module-xfs source rpm you offer for download at > ftp://oss.sgi.com/projects/xfs/download/testing/RHEL4/kernel-module-xfs-2.6.9-22.EL-0.1-1.src.rpm > > The issue is that largesmp was not recognized as a kernel type, and with > the original specfile an RPM was build with a dependency > "requires kernel-smp = 2.6.9-67.0.1.ELlarge" where the dependency should > have been "requires kernel-largesmp = 2.6.9-67.0.1". > > The fix was to add "largesmp" to the list of defined kernel_type at the > top of the .spec file. I also fixed a typo in this list (default instead > of deault). The new fixed spec file (kernel-module-xfs.spec), the > original spec file (kernel-module-xfs.spec.orig) and a diff between the > two (kernel-module-xfs.spec.patch are attached to this email. > > For other users, it might be useful to include this in the next release. SGI doesn't really maintain those; the xfs kernel modules in the centosplus repository (http://mirror.centos.org/centos/4/centosplus/Readme.txt) are probably a better place to start, as they have some active users and a bit of maintenance. (IMHO a fair amount of stuff on the xfs ftp site is so outdated it should be removed....) -Eric > > Kind regards, > > Mirjam van den Hout > From owner-xfs@oss.sgi.com Tue May 20 11:22:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 11:22:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KIMRjS015165 for ; Tue, 20 May 2008 11:22:30 -0700 X-ASG-Debug-ID: 1211307795-150900b10000-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 47DBB1705880; Tue, 20 May 2008 11:23:15 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HKkjzyLLXLjN6AC2; Tue, 20 May 2008 11:23:15 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JyWUV-0004dz-8W; Tue, 20 May 2008 18:23:15 +0000 Date: Tue, 20 May 2008 14:23:15 -0400 From: Christoph Hellwig To: Barry Naujok Cc: Anton Altaparmakov , Christoph Hellwig , xfs@oss.sgi.com, linux-fsdevel X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Message-ID: <20080520182315.GA8456@infradead.org> References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211307797 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.1, rules version 3.1.50928 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16030 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Tue, May 20, 2008 at 12:24:57PM +1000, Barry Naujok wrote: > +/** > + * d_drop_neg_children - drop negative child dentries > + * @parent: parent dentry > + * > + * Searches the children of the @parent dentry for negative dentries and > + * drops them as they are found. > + * > + * This is primarily useful for case-insensitive filesystems to drop these > + * entries when a new entry is created in the parent. The new entry must > + * be instantiated before calling this function. > + */ > + > +void d_drop_neg_children(struct dentry *parent) please spell out the negative :) also no empty line between the kerneldoc sand the actual function please. > +{ > + struct dentry *dentry; > + > + spin_lock(&dcache_lock); > + list_for_each_entry(dentry, &parent->d_subdirs, d_u.d_child) { > + if (!dentry->d_inode) { > + spin_lock(&dentry->d_lock); > + __d_drop(dentry); > + spin_unlock(&dentry->d_lock); > + cond_resched_lock(&dcache_lock); The cond_resched_lock here is not safe here, because the pointer you are going to dereference in list_for_each_entry might not be valid anymore. This should look more like: void d_drop_negative_children(struct dentry *parent) { struct dentry *dentry; again: spin_lock(&dcache_lock); list_for_each_entry(dentry, &parent->d_subdirs, d_u.d_child) { if !dentry->d_inode) continue; spin_lock(&dentry->d_lock); __d_drop(dentry); spin_unlock(&dentry->d_lock); if (need_resched()) { spin_unlock(&dcache_lock); cond_resched(); goto again; } } spin_unlock(&dcache_lock); } Btw, any reason you haven't commited patches 1 and 2 yet? Also maybe splitting 3 and 4 differently with one patch for the two new functions in dcache.c and one for the full XFS ascii CI support might be best. From owner-xfs@oss.sgi.com Tue May 20 12:29:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 12:29:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KJTOHu025405 for ; Tue, 20 May 2008 12:29:25 -0700 X-ASG-Debug-ID: 1211311812-09d100730000-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 70227BA34F2; Tue, 20 May 2008 12:30:13 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id boVmaWzISeF2DqcX; Tue, 20 May 2008 12:30:13 -0700 (PDT) Received: from Russell-Cattelans-MacBook.local (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.0/8.13.8) with ESMTP id m4KJToYG047834; Tue, 20 May 2008 14:29:51 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <483326AE.3040902@thebarn.com> Date: Tue, 20 May 2008 14:29:50 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: markgw@sgi.com CC: Christoph Hellwig , Lachlan McIlroy , Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: take messages Subject: Re: take messages References: <20080518102710.GA17618@lst.de> <4830CA28.9060805@sgi.com> <20080519060022.GA15529@lst.de> <48322E58.8060009@sgi.com> <20080520102012.GB24579@infradead.org> <4832B868.7050001@sgi.com> In-Reply-To: <4832B868.7050001@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: ClamAV 0.91.2/7182/Tue May 20 11:09:32 2008 on slurp.thebarn.com X-Virus-Status: Clean X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1211311814 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.1, rules version 3.1.50931 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-archive-position: 16031 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cattelan@thebarn.com Precedence: bulk X-list: xfs Mark Goodwin wrote: > > > Christoph Hellwig wrote: >> On Tue, May 20, 2008 at 11:50:16AM +1000, Lachlan McIlroy wrote: >>> oss pushes automatic? They could be but aren't. >> >> They aren't? Back in the days the CVS tree on OSS was updated from >> ptools once a day. >> > > The ptools->cvs push is automatic. The git updates are not. > We have a plan to fix that ... just catching our breath a bit > at the moment. ptools to oss cvs is done once every hour. Which is probably a bit silly now given updates come from the CA ptools server and most XFS commits probably originate at the AU server. If I recall correctly the AU <-> CA ptools sync is only once a day. There is also the xfs git and the dmapi git trees that are auto synced with the cvs tree once a day. (minus the autoversion stuff) > > Cheers > From owner-xfs@oss.sgi.com Tue May 20 13:49:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 13:49:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4KKnOUf002313 for ; Tue, 20 May 2008 13:49:24 -0700 X-ASG-Debug-ID: 1211316613-54e203540000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from agminet01.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5E532170C5C3; Tue, 20 May 2008 13:50:13 -0700 (PDT) Received: from agminet01.oracle.com (agminet01.oracle.com [141.146.126.228]) by cuda.sgi.com with ESMTP id no9wMtm1se5kL3Ou; Tue, 20 May 2008 13:50:13 -0700 (PDT) Received: from agmgw2.us.oracle.com (agmgw2.us.oracle.com [152.68.180.213]) by agminet01.oracle.com (Switch-3.2.4/Switch-3.1.7) with ESMTP id m4KKo6tX001061; Tue, 20 May 2008 15:50:06 -0500 Received: from acsmt356.oracle.com (acsmt356.oracle.com [141.146.40.156]) by agmgw2.us.oracle.com (Switch-3.2.0/Switch-3.2.0) with ESMTP id m4KJSluL025323; Tue, 20 May 2008 14:50:06 -0600 Received: from smushran-pc1.us.oracle.com by acsmt358.oracle.com with ESMTP id 9754782751211316604; Tue, 20 May 2008 15:50:04 -0500 Message-ID: <4833397B.2000109@oracle.com> Date: Tue, 20 May 2008 13:50:03 -0700 From: Sunil Mushran User-Agent: Thunderbird 1.5.0.14ubu (X11/20080505) MIME-Version: 1.0 To: Christoph Hellwig CC: Barry Naujok , Anton Altaparmakov , xfs@oss.sgi.com, linux-fsdevel X-ASG-Orig-Subj: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache Subject: Re: [PATCH 3/4] XFS: Return case-insensitive match for dentry cache References: <20080513075749.477238845@chook.melbourne.sgi.com> <20080513080152.911303131@chook.melbourne.sgi.com> <20080513085724.GC21919@infradead.org> <20080515045700.GA4328@infradead.org> <20080520182315.GA8456@infradead.org> In-Reply-To: <20080520182315.GA8456@infradead.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAQAAAAI= X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE X-Whitelist: TRUE X-Barracuda-Connect: agminet01.oracle.com[141.146.126.228] X-Barracuda-Start-Time: 1211316614 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.1, rules version 3.1.50938 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16032 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Sunil.Mushran@oracle.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > The cond_resched_lock here is not safe here, because the pointer you > are going to dereference in list_for_each_entry might not be valid > anymore. This should look more like: > > void d_drop_negative_children(struct dentry *parent) > { > struct dentry *dentry; > > again: > spin_lock(&dcache_lock); > list_for_each_entry(dentry, &parent->d_subdirs, d_u.d_child) { > if !(dentry->d_inode) > continue; > > spin_lock(&dentry->d_lock); > __d_drop(dentry); > spin_unlock(&dentry->d_lock); > > if (need_resched()) { > spin_unlock(&dcache_lock); > cond_resched(); > goto again; > } > } > spin_unlock(&dcache_lock); > } > Yes, we have been bitten by the same issue. Instead of need_resched(), it may be better if you do: if (cond_resched_lock(&dcache_lock)) goto again; From owner-xfs@oss.sgi.com Tue May 20 17:40:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 17:40:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L0eQgQ027700 for ; Tue, 20 May 2008 17:40:27 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id BCA2930406D; Tue, 20 May 2008 17:41:13 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4L0f8jm1336559; Wed, 21 May 2008 10:41:09 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] streamline init/exit path References: <20080518130511.GA28501@lst.de> Date: Wed, 21 May 2008 10:41:12 +1000 In-Reply-To: <20080518130511.GA28501@lst.de> (Christoph Hellwig's message of "Sun, 18 May 2008 15:05:11 +0200") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16033 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > Currently the xfs module init/exit code is a mess. It's farmed out > over a lot of function with very little error checking. This patch > merges xfs_init_zones and xfs_init into init_xfs_fs, and makes sure > we propagate all initialization failures properly and clean up after > them. Various runtime initializations are replaced with compile-time > initializations where possible to make this easier. The exit path > is similarly consolidated. Looks good, appart from the fact that I don't see the point of merging xfs_{init,destroy}_zones into xfs_{init,exit}, appart from clobbering it and making it less readeable. could be: error = xfs_init_zones(); if (error) goto out; and all the other error cases will end with xfs_destroy_zones(); That would look much more like the rest of the calls in these functions. -- Niv Sardi From owner-xfs@oss.sgi.com Tue May 20 18:22:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 18:22:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, STOX_REPLY_TYPE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L1MbFi031124 for ; Tue, 20 May 2008 18:22:38 -0700 X-ASG-Debug-ID: 1211333005-65bf00980000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A67C51B2F1AD for ; Tue, 20 May 2008 18:23:26 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id ShMNxFRxAaBqlDYl for ; Tue, 20 May 2008 18:23:26 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53F.nec.co.jp [10.7.69.162]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4L1NOff028657; Wed, 21 May 2008 10:23:24 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4L1NOb10587; Wed, 21 May 2008 10:23:24 +0900 (JST) Received: from yonosuke.jp.nec.com (yonosuke.jp.nec.com [10.26.220.15]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4L1NN2j020091; Wed, 21 May 2008 10:23:23 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Wed, 21 May 2008 10:23:23 +0900 Message-Id: <1AE3C150C90A4C1A8C024C3D6079C948@nsl.ad.nec.co.jp> From: "Takashi Sato" To: "Andreas Dilger" Cc: , , , , References: <20080514170625t-sato@mail.jp.nec.com> <20080520035712.GA7252@webber.adilger.int> In-Reply-To: <20080520035712.GA7252@webber.adilger.int> X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Date: Wed, 21 May 2008 10:23:23 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1211333007 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50956 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16034 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, Andreas Dilger wrote: >> +static int ioctl_freeze(struct file *filp) >> +{ >> + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; >> + >> + if (!capable(CAP_SYS_ADMIN)) >> + return -EPERM; >> + >> + /* If filesystem doesn't support freeze feature, return. */ >> + if (sb->s_op->write_super_lockfs == NULL) >> + return -EINVAL; > > Should this be EINVAL, or EOPNOTSUPP? Usually EINVAL means there is > something wrong with the passed ioctl parameters (e.g. bad value), > while EOPNOTSUPP is "operation not supported" and makes more sense. Sounds good. I will send new patch-set which is rebased to 2.6.26-rc3 and includes this fix, in this weekend. Cheers, Takashi From owner-xfs@oss.sgi.com Tue May 20 19:33:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 19:33:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L2X2XT004776 for ; Tue, 20 May 2008 19:33:04 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA25245; Wed, 21 May 2008 12:33:47 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id A945858C4C29; Wed, 21 May 2008 12:33:47 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981519 - Add name operation vector for directory operations Message-Id: <20080521023347.A945858C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 12:33:47 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16035 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Name operation vector for hash and compare Adds two pieces of functionality for the basis of case-insensitive support in XFS: 1. A comparison result enumerated type: xfs_dacmp. It represents an exact match, case-insensitive match or no match at all. This patch only implements different and exact results. 2. xfs_nameops vector for specifying how to perform the hash generation of filenames and comparision methods. In this patch the hash vector points to the existing xfs_da_hashname function and the comparison method does a length compare, and if the same, does a memcmp and return the xfs_dacmp result. All filename functions that use the hash (create, lookup remove, rename, etc) now use the xfs_nameops.hashname function and all directory lookup functions also use the xfs_nameops.compname function. The lookup functions also handle case-insensitive results even though the default comparison function cannot return that. And important aspect of the lookup functions is that an exact match always has precedence over a case-insensitive. So while a case-insensitive match is found, we have to keep looking just in case there is an exact match. In the meantime, the info for the first case-insensitive match is retained if no exact match is found. Signed-off-by: Barry Naujok Date: Wed May 21 12:32:41 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31205a fs/xfs/xfs_da_btree.c - 1.178 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.c.diff?r1=text&tr1=1.178&r2=text&tr2=1.177&f=h - Default nameops vector fs/xfs/xfs_da_btree.h - 1.68 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.h.diff?r1=text&tr1=1.68&r2=text&tr2=1.67&f=h - Definitions of compare result and nameops vector fs/xfs/xfs_dir2_block.c - 1.60 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_block.c.diff?r1=text&tr1=1.60&r2=text&tr2=1.59&f=h - Handle CI lookup in block form directories fs/xfs/xfs_dir2_sf.c - 1.52 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_sf.c.diff?r1=text&tr1=1.52&r2=text&tr2=1.51&f=h - Handle CI lookup in shortform directories fs/xfs/xfs_mount.h - 1.269 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.269&r2=text&tr2=1.268&f=h - Add nameops vector to mount structure fs/xfs/xfs_dir2_data.c - 1.40 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_data.c.diff?r1=text&tr1=1.40&r2=text&tr2=1.39&f=h - Use nameops hash routine fs/xfs/xfs_dir2_leaf.c - 1.62 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_leaf.c.diff?r1=text&tr1=1.62&r2=text&tr2=1.61&f=h - Handle CI lookup in leaf form directories fs/xfs/xfs_dir2_node.c - 1.62 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_node.c.diff?r1=text&tr1=1.62&r2=text&tr2=1.61&f=h - Handle CI lookup in node form directories fs/xfs/xfs_dir2.c - 1.65 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.65&r2=text&tr2=1.64&f=h - Call nameops hash routine From owner-xfs@oss.sgi.com Tue May 20 19:39:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 19:39:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L2d2Vd005642 for ; Tue, 20 May 2008 19:39:03 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA25351; Wed, 21 May 2008 12:39:48 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 7FF1D58C4C29; Wed, 21 May 2008 12:39:48 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981520 - Add op_flags field to xfs_da_args Message-Id: <20080521023948.7FF1D58C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 12:39:48 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16036 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Add op_flags field to xfs_da_args The end of the xfs_da_args structure has 4 unsigned char fields for true/false information on directory and attr operations using the xfs_da_args structure. The following converts these 4 into a op_flags field that uses the first 4 bits for these fields and allows expansion for future operation information (eg. case-insensitive lookup request). Signed-off-by: Barry Naujok Date: Wed May 21 12:39:19 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31206a fs/xfs/xfsidbg.c - 1.350 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfsidbg.c.diff?r1=text&tr1=1.350&r2=text&tr2=1.349&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_da_btree.c - 1.179 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.c.diff?r1=text&tr1=1.179&r2=text&tr2=1.178&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_da_btree.h - 1.69 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.h.diff?r1=text&tr1=1.69&r2=text&tr2=1.68&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2_block.c - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_block.c.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2_sf.c - 1.53 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_sf.c.diff?r1=text&tr1=1.53&r2=text&tr2=1.52&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2_trace.c - 1.25 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_trace.c.diff?r1=text&tr1=1.25&r2=text&tr2=1.24&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2_leaf.c - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_leaf.c.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_attr_leaf.c - 1.112 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr_leaf.c.diff?r1=text&tr1=1.112&r2=text&tr2=1.111&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2_node.c - 1.63 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_node.c.diff?r1=text&tr1=1.63&r2=text&tr2=1.62&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_attr.c - 1.151 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.151&r2=text&tr2=1.150&f=h - Convert discrete xfs_da_args flags into flag bits fs/xfs/xfs_dir2.c - 1.66 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.66&r2=text&tr2=1.65&f=h - Convert discrete xfs_da_args flags into flag bits From owner-xfs@oss.sgi.com Tue May 20 20:44:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 20:44:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L3i4tU017611 for ; Tue, 20 May 2008 20:44:06 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA27399; Wed, 21 May 2008 13:44:49 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 67F4758C4C29; Wed, 21 May 2008 13:44:49 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981521 - Return actual name for CI match for dentry cache Message-Id: <20080521034449.67F4758C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 13:44:49 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16037 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Return case-insensitive match for dentry cache This implements the code to store the actual filename found during a lookup in the dentry cache and to avoid multiple entries in the dcache pointing to the same inode. To avoid polluting the dcache, we implement a new directory inode operations for lookup. xfs_vn_ci_lookup() stores the correct case name in the dcache. The "actual name" is only allocated and returned for a case- insensitive match and not an actual match. Another unusual interaction with the dcache is not storing negative dentries like other filesystems doing a d_add(dentry, NULL) when an ENOENT is returned. During the VFS lookup, if a dentry returned has no inode, dput is called and ENOENT is returned. By not doing a d_add, this actually removes it completely from the dcache to be reused. create/rename have to be modified to support unhashed dentries being passed in. Signed-off-by: Barry Naujok Date: Wed May 21 13:44:00 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31208a fs/xfs/xfs_da_btree.h - 1.70 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.h.diff?r1=text&tr1=1.70&r2=text&tr2=1.69&f=h - Add a CI_LOOKUP args flag fs/xfs/xfs_vnodeops.c - 1.760 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.c.diff?r1=text&tr1=1.760&r2=text&tr2=1.759&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2_block.c - 1.62 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_block.c.diff?r1=text&tr1=1.62&r2=text&tr2=1.61&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2_sf.c - 1.54 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_sf.c.diff?r1=text&tr1=1.54&r2=text&tr2=1.53&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2_leaf.c - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_leaf.c.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2_node.c - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2_node.c.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2.h - 1.23 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.h.diff?r1=text&tr1=1.23&r2=text&tr2=1.22&f=h - Add lookup support for returning actual case-preserved name fs/xfs/xfs_dir2.c - 1.67 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.67&r2=text&tr2=1.66&f=h - Add lookup support for returning actual case-preserved name fs/xfs/linux-2.6/xfs_iops.c - 1.286 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.286&r2=text&tr2=1.285&f=h - Add xfs_vn_ci_lookup function for CI mode fs/xfs/linux-2.6/xfs_iops.h - 1.33 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.h.diff?r1=text&tr1=1.33&r2=text&tr2=1.32&f=h - Export CI inode ops vector fs/xfs/linux-2.6/xfs_export.c - 1.24 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_export.c.diff?r1=text&tr1=1.24&r2=text&tr2=1.23&f=h - Add aextra xfs_lookup paramater (NULL) fs/xfs/xfs_vnodeops.h - 1.17 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vnodeops.h.diff?r1=text&tr1=1.17&r2=text&tr2=1.16&f=h - Add lookup support for returning actual case-preserved name From owner-xfs@oss.sgi.com Tue May 20 20:48:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 20:48:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, J_CHICKENPOX_72 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L3m4Ds018210 for ; Tue, 20 May 2008 20:48:05 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA27649; Wed, 21 May 2008 13:48:51 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 1708D58C4C29; Wed, 21 May 2008 13:48:51 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981516 - ASCII case-insensitive support Message-Id: <20080521034851.1708D58C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 13:48:51 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16038 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs XFS: ASCII case-insensitive support Implement ASCII case-insensitive support. It's primary purpose is for supporting existing filesystems that already use this case-insensitive mode migrated from IRIX. But, if you only need ASCII-only case-insensitive support (ie. English only) and will never use another language, then this mode is perfectly adequate. ASCII-CI is implemented by generating hashes based on lower-case letters and doing lower-case compares. It implements a new xfs_nameops vector for doing the hashes and comparisons for all filename operations. To create a filesystem with this CI mode, use: # mkfs.xfs -n version=ci Signed-off-by: Barry Naujok Date: Wed May 21 13:48:31 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31209a fs/xfs/xfs_sb.h - 1.74 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_sb.h.diff?r1=text&tr1=1.74&r2=text&tr2=1.73&f=h - Add ASCII CI flag and support to superblock fs/xfs/xfs_fs.h - 1.37 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_fs.h.diff?r1=text&tr1=1.37&r2=text&tr2=1.36&f=h - Add geometry flag for ASCII CI fs/xfs/xfs_fsops.c - 1.135 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_fsops.c.diff?r1=text&tr1=1.135&r2=text&tr2=1.134&f=h - Update fs_geometry ioctl implementation for ASCII CI flag fs/xfs/xfs_dir2.c - 1.68 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_dir2.c.diff?r1=text&tr1=1.68&r2=text&tr2=1.67&f=h - Add ASCII CI nameops routines fs/xfs/linux-2.6/xfs_linux.h - 1.166 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_linux.h.diff?r1=text&tr1=1.166&r2=text&tr2=1.165&f=h - Include ctype.h for tolower function fs/xfs/linux-2.6/xfs_super.c - 1.428 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.428&r2=text&tr2=1.427&f=h - Setup inode ops based on CI mode From owner-xfs@oss.sgi.com Tue May 20 23:00:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 23:00:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L60MuV026396 for ; Tue, 20 May 2008 23:00:22 -0700 X-ASG-Debug-ID: 1211349671-5b8b026e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 379071B2FB4E; Tue, 20 May 2008 23:01:11 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id otB5bo8ah5qcfoXw; Tue, 20 May 2008 23:01:11 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L613F3025093 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Wed, 21 May 2008 08:01:04 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L613VE025091; Wed, 21 May 2008 08:01:03 +0200 Date: Wed, 21 May 2008 08:01:03 +0200 From: Christoph Hellwig To: Niv Sardi Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] streamline init/exit path Subject: Re: [PATCH] streamline init/exit path Message-ID: <20080521060103.GA25003@lst.de> References: <20080518130511.GA28501@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211349672 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.1, rules version 3.1.50974 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16039 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Wed, May 21, 2008 at 10:41:12AM +1000, Niv Sardi wrote: > Looks good, appart from the fact that I don't see the point of merging > xfs_{init,destroy}_zones into xfs_{init,exit}, appart from clobbering it > and making it less readeable. > > could be: > error = xfs_init_zones(); > if (error) > goto out; > > and all the other error cases will end with > xfs_destroy_zones(); > > That would look much more like the rest of the calls in these functions. I don't really see the point for splitting this up, it's not like it makes the initialization much simpler. But hey, if that's the only objection I can changed it. At least someone is looking at my xfs patches :) From owner-xfs@oss.sgi.com Tue May 20 23:57:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 23:58:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L6vvCM030016 for ; Tue, 20 May 2008 23:57:58 -0700 X-ASG-Debug-ID: 1211353126-044402410000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 39A62BAF48C for ; Tue, 20 May 2008 23:58:46 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 1r9uulB3CTNJNaYT for ; Tue, 20 May 2008 23:58:46 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L6wXF3027881 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Wed, 21 May 2008 08:58:33 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L6wWYO027879; Wed, 21 May 2008 08:58:32 +0200 Date: Wed, 21 May 2008 08:58:32 +0200 From: Christoph Hellwig To: viro@ZenIV.linux.org.uk Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: [PATCH 1/2] optimize inode_setattr a little Subject: [PATCH 1/2] optimize inode_setattr a little Message-ID: <20080521065832.GA27545@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211353128 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.1, rules version 3.1.50977 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16040 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Only mark the inode dirty if any field was actually changed. Currently this can't happen but it will with the next patch. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/attr.c =================================================================== --- linux-2.6.orig/fs/attr.c 2008-05-20 20:37:46.000000000 +0200 +++ linux-2.6/fs/attr.c 2008-05-20 20:39:05.000000000 +0200 @@ -66,36 +66,50 @@ EXPORT_SYMBOL(inode_change_ok); int inode_setattr(struct inode * inode, struct iattr * attr) { unsigned int ia_valid = attr->ia_valid; + int sync_it = 0; if (ia_valid & ATTR_SIZE && attr->ia_size != i_size_read(inode)) { int error = vmtruncate(inode, attr->ia_size); if (error) return error; + sync_it = 1; } - if (ia_valid & ATTR_UID) + if (ia_valid & ATTR_UID) { inode->i_uid = attr->ia_uid; - if (ia_valid & ATTR_GID) + sync_it = 1; + } + if (ia_valid & ATTR_GID) { inode->i_gid = attr->ia_gid; - if (ia_valid & ATTR_ATIME) + sync_it = 1; + } + if (ia_valid & ATTR_ATIME) { inode->i_atime = timespec_trunc(attr->ia_atime, inode->i_sb->s_time_gran); - if (ia_valid & ATTR_MTIME) + sync_it = 1; + } + if (ia_valid & ATTR_MTIME) { inode->i_mtime = timespec_trunc(attr->ia_mtime, inode->i_sb->s_time_gran); - if (ia_valid & ATTR_CTIME) + sync_it = 1; + } + if (ia_valid & ATTR_CTIME) { inode->i_ctime = timespec_trunc(attr->ia_ctime, inode->i_sb->s_time_gran); + sync_it = 1; + } if (ia_valid & ATTR_MODE) { umode_t mode = attr->ia_mode; if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) mode &= ~S_ISGID; inode->i_mode = mode; + sync_it = 1; } - mark_inode_dirty(inode); + if (sync_it) + mark_inode_dirty(inode); return 0; } EXPORT_SYMBOL(inode_setattr); From owner-xfs@oss.sgi.com Tue May 20 23:58:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 20 May 2008 23:58:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L6wEvS030100 for ; Tue, 20 May 2008 23:58:14 -0700 X-ASG-Debug-ID: 1211353142-674d00ce0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 24197198A91 for ; Tue, 20 May 2008 23:59:02 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id iGipZnSTkUngX6ts for ; Tue, 20 May 2008 23:59:02 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L6wnF3027909 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Wed, 21 May 2008 08:58:49 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L6wnsv027907; Wed, 21 May 2008 08:58:49 +0200 Date: Wed, 21 May 2008 08:58:49 +0200 From: Christoph Hellwig To: viro@ZenIV.linux.org.uk Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: [PATCH 2/2] always set a/c/mtime through ->setattr Subject: [PATCH 2/2] always set a/c/mtime through ->setattr Message-ID: <20080521065849.GB27545@lst.de> References: <20080520060838.GA6436@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080520060838.GA6436@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211353144 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.1, rules version 3.1.50978 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16041 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Currently touch_atime and file_update_time directly update a/c/mtime in the inode and just mark the inode dirty afterwards. This is pretty bad for some more complex filesystems that have various different types of dirtying an inode and/or need to store the data in another place for example for a buffer to be logged. This patch changes touch_atime and file_update_time to not update the inode directly but rather call through ->setattr into the filessystem. There is a new ATTR_UPDTIMES flag for these two calls so filesystems know it's just a timestampts update. This allows some optimizations and also allow to kill the IS_NOCMTIME we curretly have for networked filesystem by letting them simpliy ignore these kind of updates. There is also a new ATTR_VERSION flag sent from file_update_time that tells the filesystem to update i_version because this update has the same issues as the timestamp updates. The optimiztion to avoid redundant timestamp updates in touch_atime and file_update_time is moved into ->setattr and made conditional on the ATTR_UPDTIMES flag. Also in this patch are the changes to XFS that clean up all the mess that was caused by the previous behaviour. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/attr.c =================================================================== --- linux-2.6.orig/fs/attr.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/attr.c 2008-05-20 20:48:14.000000000 +0200 @@ -68,6 +68,26 @@ int inode_setattr(struct inode * inode, unsigned int ia_valid = attr->ia_valid; int sync_it = 0; + /* + * Optimize away timestamp updates that happen as side-effect + * of data I/O if the new timestamp equals to the one saved + * in the inode. + * + * This optimization is not safe for networked filesystems + * that update their timestamps on the server and might not + * have the right cached values in the the client inode. But + * those network filesystems also turn off client-side timestamp + * updates completely, so we don't care about them here. + */ + if (ia_valid & ATTR_UPDTIMES) { + if (timespec_equal(&inode->i_atime, &attr->ia_atime)) + ia_valid &= ~ATTR_ATIME; + if (timespec_equal(&inode->i_ctime, &attr->ia_ctime)) + ia_valid &= ~ATTR_CTIME; + if (timespec_equal(&inode->i_mtime, &attr->ia_mtime)) + ia_valid &= ~ATTR_MTIME; + } + if (ia_valid & ATTR_SIZE && attr->ia_size != i_size_read(inode)) { int error = vmtruncate(inode, attr->ia_size); @@ -107,6 +127,10 @@ int inode_setattr(struct inode * inode, inode->i_mode = mode; sync_it = 1; } + if (ia_valid & ATTR_VERSION) { + inode_inc_iversion(inode); + sync_it = 1; + } if (sync_it) mark_inode_dirty(inode); Index: linux-2.6/fs/inode.c =================================================================== --- linux-2.6.orig/fs/inode.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/inode.c 2008-05-20 20:44:38.000000000 +0200 @@ -1190,7 +1190,7 @@ EXPORT_SYMBOL(bmap); void touch_atime(struct vfsmount *mnt, struct dentry *dentry) { struct inode *inode = dentry->d_inode; - struct timespec now; + struct iattr attr; if (mnt_want_write(mnt)) return; @@ -1215,12 +1215,8 @@ void touch_atime(struct vfsmount *mnt, s goto out; } - now = current_fs_time(inode->i_sb); - if (timespec_equal(&inode->i_atime, &now)) - goto out; - - inode->i_atime = now; - mark_inode_dirty_sync(inode); + attr.ia_valid = ATTR_ATIME|ATTR_UPDTIMES; + notify_change(dentry, &attr); out: mnt_drop_write(mnt); } @@ -1241,8 +1237,7 @@ EXPORT_SYMBOL(touch_atime); void file_update_time(struct file *file) { struct inode *inode = file->f_path.dentry->d_inode; - struct timespec now; - int sync_it = 0; + struct iattr attr; int err; if (IS_NOCMTIME(inode)) @@ -1252,27 +1247,13 @@ void file_update_time(struct file *file) if (err) return; - now = current_fs_time(inode->i_sb); - if (!timespec_equal(&inode->i_mtime, &now)) { - inode->i_mtime = now; - sync_it = 1; - } - - if (!timespec_equal(&inode->i_ctime, &now)) { - inode->i_ctime = now; - sync_it = 1; - } - - if (IS_I_VERSION(inode)) { - inode_inc_iversion(inode); - sync_it = 1; - } + attr.ia_valid = ATTR_MTIME|ATTR_CTIME|ATTR_UPDTIMES; + if (IS_I_VERSION(inode)) + attr.ia_valid |= ATTR_VERSION; + notify_change(file->f_path.dentry, &attr); - if (sync_it) - mark_inode_dirty_sync(inode); mnt_drop_write(file->f_path.mnt); } - EXPORT_SYMBOL(file_update_time); int inode_needs_sync(struct inode *inode) Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.c 2008-05-20 20:56:42.000000000 +0200 @@ -55,22 +55,6 @@ #include /* - * Bring the atime in the XFS inode uptodate. - * Used before logging the inode to disk or when the Linux inode goes away. - */ -void -xfs_synchronize_atime( - xfs_inode_t *ip) -{ - struct inode *inode = ip->i_vnode; - - if (inode) { - ip->i_d.di_atime.t_sec = (__int32_t)inode->i_atime.tv_sec; - ip->i_d.di_atime.t_nsec = (__int32_t)inode->i_atime.tv_nsec; - } -} - -/* * If the linux inode exists, mark it dirty. * Used when commiting a dirty inode into a transaction so that * the inode will get written back by the linux code @@ -136,34 +120,43 @@ xfs_ichgtime( mark_inode_dirty_sync(inode); } -/* - * Variant on the above which avoids querying the system clock - * in situations where we know the Linux inode timestamps have - * just been updated (and so we can update our inode cheaply). - */ -void -xfs_ichgtime_fast( - xfs_inode_t *ip, - struct inode *inode, - int flags) +STATIC int +xfs_update_timestamps( + struct inode *inode, + struct iattr *attr) { - timespec_t *tvp; + struct xfs_inode *ip = XFS_I(inode); + unsigned int ia_valid = attr->ia_valid; + int sync_it = 0; - /* - * Atime updates for read() & friends are handled lazily now, and - * explicit updates must go through xfs_ichgtime() - */ - ASSERT((flags & XFS_ICHGTIME_ACC) == 0); + ASSERT(!(ia_valid & ~(ATTR_ATIME|ATTR_CTIME|ATTR_MTIME|ATTR_UPDTIMES))); + ASSERT(!IS_RDONLY(inode)); - if (flags & XFS_ICHGTIME_MOD) { - tvp = &inode->i_mtime; - ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec; - ip->i_d.di_mtime.t_nsec = (__int32_t)tvp->tv_nsec; - } - if (flags & XFS_ICHGTIME_CHG) { - tvp = &inode->i_ctime; - ip->i_d.di_ctime.t_sec = (__int32_t)tvp->tv_sec; - ip->i_d.di_ctime.t_nsec = (__int32_t)tvp->tv_nsec; + if ((ia_valid & ATTR_ATIME) && + !timespec_equal(&inode->i_atime, &attr->ia_atime)) { + inode->i_atime = attr->ia_atime; + ip->i_d.di_atime.t_sec = attr->ia_atime.tv_sec; + ip->i_d.di_atime.t_nsec = attr->ia_atime.tv_nsec; + /* + * The atime is updated lazily, so we don't mark + * the inode dirty here. + */ + } + + if ((ia_valid & ATTR_MTIME) && + !timespec_equal(&inode->i_mtime, &attr->ia_mtime)) { + inode->i_mtime = attr->ia_mtime; + ip->i_d.di_mtime.t_sec = attr->ia_mtime.tv_sec; + ip->i_d.di_mtime.t_nsec = attr->ia_mtime.tv_nsec; + sync_it = 1; + } + + if ((ia_valid & ATTR_CTIME) && + !timespec_equal(&inode->i_ctime, &attr->ia_ctime)) { + inode->i_ctime = attr->ia_ctime; + ip->i_d.di_ctime.t_sec = attr->ia_ctime.tv_sec; + ip->i_d.di_ctime.t_nsec = attr->ia_ctime.tv_nsec; + sync_it = 1; } /* @@ -175,12 +168,14 @@ xfs_ichgtime_fast( * ensure that the compiler does not reorder the update * of i_update_core above the timestamp updates above. */ - SYNCHRONIZE(); - ip->i_update_core = 1; - if (!(inode->i_state & I_NEW)) + if (sync_it) { + SYNCHRONIZE(); + ip->i_update_core = 1; mark_inode_dirty_sync(inode); -} + } + return 0; +} /* * Pull the link count and size up from the xfs inode to the linux inode @@ -668,6 +663,13 @@ xfs_vn_setattr( int flags = 0; int error; + /* + * Timestamps do not need to be logged and hence do not + * need to be done within a transaction. + */ + if (ia_valid & ATTR_UPDTIMES) + return xfs_update_timestamps(inode, attr); + if (ia_valid & ATTR_UID) { vattr.va_mask |= XFS_AT_UID; vattr.va_uid = attr->ia_uid; Index: linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_vnode.h 2008-05-20 20:44:38.000000000 +0200 @@ -111,9 +111,6 @@ typedef struct bhv_vattr { #define XFS_AT_NBLOCKS 0x00002000 #define XFS_AT_VCODE 0x00004000 #define XFS_AT_MAC 0x00008000 -#define XFS_AT_UPDATIME 0x00010000 -#define XFS_AT_UPDMTIME 0x00020000 -#define XFS_AT_UPDCTIME 0x00040000 #define XFS_AT_ACL 0x00080000 #define XFS_AT_CAP 0x00100000 #define XFS_AT_INF 0x00200000 @@ -139,8 +136,6 @@ typedef struct bhv_vattr { #define XFS_AT_TIMES (XFS_AT_ATIME|XFS_AT_MTIME|XFS_AT_CTIME) -#define XFS_AT_UPDTIMES (XFS_AT_UPDATIME|XFS_AT_UPDMTIME|XFS_AT_UPDCTIME) - #define XFS_AT_NOSET (XFS_AT_NLINK|XFS_AT_RDEV|XFS_AT_FSID|XFS_AT_NODEID|\ XFS_AT_TYPE|XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|\ XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_GENCOUNT) @@ -193,25 +188,6 @@ static inline int VN_BAD(bhv_vnode_t *vp } /* - * Extracting atime values in various formats - */ -static inline void vn_atime_to_bstime(bhv_vnode_t *vp, xfs_bstime_t *bs_atime) -{ - bs_atime->tv_sec = vp->i_atime.tv_sec; - bs_atime->tv_nsec = vp->i_atime.tv_nsec; -} - -static inline void vn_atime_to_timespec(bhv_vnode_t *vp, struct timespec *ts) -{ - *ts = vp->i_atime; -} - -static inline void vn_atime_to_time_t(bhv_vnode_t *vp, time_t *tt) -{ - *tt = vp->i_atime.tv_sec; -} - -/* * Some useful predicates. */ #define VN_MAPPED(vp) mapping_mapped(vn_to_inode(vp)->i_mapping) Index: linux-2.6/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode.c 2008-05-20 20:44:38.000000000 +0200 @@ -3330,11 +3330,6 @@ xfs_iflush_int( ip->i_update_core = 0; SYNCHRONIZE(); - /* - * Make sure to get the latest atime from the Linux inode. - */ - xfs_synchronize_atime(ip); - if (XFS_TEST_ERROR(be16_to_cpu(dip->di_core.di_magic) != XFS_DINODE_MAGIC, mp, XFS_ERRTAG_IFLUSH_1, XFS_RANDOM_IFLUSH_1)) { xfs_cmn_err(XFS_PTAG_IFLUSH, CE_ALERT, mp, Index: linux-2.6/fs/xfs/xfs_inode.h =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode.h 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode.h 2008-05-20 20:44:38.000000000 +0200 @@ -526,7 +526,6 @@ 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_synchronize_atime(xfs_inode_t *); void xfs_mark_inode_dirty_sync(xfs_inode_t *); xfs_bmbt_rec_host_t *xfs_iext_get_ext(xfs_ifork_t *, xfs_extnum_t); Index: linux-2.6/fs/xfs/xfs_inode_item.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_inode_item.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_inode_item.c 2008-05-20 20:44:38.000000000 +0200 @@ -271,11 +271,6 @@ xfs_inode_item_format( ip->i_update_size = 0; /* - * Make sure to get the latest atime from the Linux inode. - */ - xfs_synchronize_atime(ip); - - /* * make sure the linux inode is dirty */ xfs_mark_inode_dirty_sync(ip); Index: linux-2.6/fs/xfs/xfs_itable.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_itable.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_itable.c 2008-05-20 20:44:38.000000000 +0200 @@ -85,7 +85,8 @@ xfs_bulkstat_one_iget( buf->bs_uid = dic->di_uid; buf->bs_gid = dic->di_gid; buf->bs_size = dic->di_size; - vn_atime_to_bstime(vp, &buf->bs_atime); + buf->bs_atime.tv_sec = dic->di_atime.t_sec; + buf->bs_atime.tv_nsec = dic->di_atime.t_nsec; buf->bs_mtime.tv_sec = dic->di_mtime.t_sec; buf->bs_mtime.tv_nsec = dic->di_mtime.t_nsec; buf->bs_ctime.tv_sec = dic->di_ctime.t_sec; Index: linux-2.6/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_vnodeops.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/xfs_vnodeops.c 2008-05-20 20:44:38.000000000 +0200 @@ -115,19 +115,6 @@ xfs_setattr( if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); - /* - * Timestamps do not need to be logged and hence do not - * need to be done within a transaction. - */ - if (mask & XFS_AT_UPDTIMES) { - ASSERT((mask & ~XFS_AT_UPDTIMES) == 0); - timeflags = ((mask & XFS_AT_UPDATIME) ? XFS_ICHGTIME_ACC : 0) | - ((mask & XFS_AT_UPDCTIME) ? XFS_ICHGTIME_CHG : 0) | - ((mask & XFS_AT_UPDMTIME) ? XFS_ICHGTIME_MOD : 0); - xfs_ichgtime(ip, timeflags); - return 0; - } - olddquot1 = olddquot2 = NULL; udqp = gdqp = NULL; @@ -3226,12 +3213,6 @@ xfs_reclaim( ASSERT(XFS_FORCED_SHUTDOWN(ip->i_mount) || ip->i_delayed_blks == 0); /* - * Make sure the atime in the XFS inode is correct before freeing the - * Linux inode. - */ - xfs_synchronize_atime(ip); - - /* * If we have nothing to flush with this inode then complete the * teardown now, otherwise break the link between the xfs inode and the * linux inode and clean up the xfs inode later. This avoids flushing Index: linux-2.6/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_iops.h 2008-05-20 20:44:38.000000000 +0200 @@ -29,7 +29,6 @@ extern const struct file_operations xfs_ struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); -extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int); #define xfs_vtoi(vp) \ ((struct xfs_inode *)vn_to_inode(vp)->i_private) Index: linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_lrw.c 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_lrw.c 2008-05-20 20:44:38.000000000 +0200 @@ -668,17 +668,8 @@ start: if (new_size > xip->i_size) xip->i_new_size = new_size; - /* - * We're not supposed to change timestamps in readonly-mounted - * filesystems. Throw it away if anyone asks us. - */ - if (likely(!(ioflags & IO_INVIS) && - !mnt_want_write(file->f_path.mnt))) { + if (likely(!(ioflags & IO_INVIS))) file_update_time(file); - xfs_ichgtime_fast(xip, inode, - XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); - mnt_drop_write(file->f_path.mnt); - } /* * If the offset is beyond the size of the file, we have a couple Index: linux-2.6/include/linux/fs.h =================================================================== --- linux-2.6.orig/include/linux/fs.h 2008-05-20 20:44:12.000000000 +0200 +++ linux-2.6/include/linux/fs.h 2008-05-20 20:44:38.000000000 +0200 @@ -333,6 +333,9 @@ typedef void (dio_iodone_t)(struct kiocb #define ATTR_FILE 8192 #define ATTR_KILL_PRIV 16384 #define ATTR_OPEN 32768 /* Truncating from open(O_TRUNC) */ +#define ATTR_VERSION 65536 /* increment i_version */ +#define ATTR_UPDTIMES 131072 /* timestamp updates are side-effect of + read/write operations */ /* * This is the Inode Attributes structure, used for notify_change(). It From owner-xfs@oss.sgi.com Wed May 21 00:01:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 00:01:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L7153F000606 for ; Wed, 21 May 2008 00:01:06 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id BBDB7908C0; Wed, 21 May 2008 00:01:52 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4L71ljm1352964; Wed, 21 May 2008 17:01:48 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: Re: [PATCH] streamline init/exit path References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> Date: Wed, 21 May 2008 17:01:51 +1000 In-Reply-To: <20080521060103.GA25003@lst.de> (Christoph Hellwig's message of "Wed, 21 May 2008 08:01:03 +0200") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16042 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Wed, May 21, 2008 at 10:41:12AM +1000, Niv Sardi wrote: >> Looks good, appart from the fact that I don't see the point of merging >> xfs_{init,destroy}_zones into xfs_{init,exit}, appart from clobbering it >> and making it less readeable. >> >> could be: >> error = xfs_init_zones(); >> if (error) >> goto out; >> >> and all the other error cases will end with >> xfs_destroy_zones(); >> >> That would look much more like the rest of the calls in these functions. > > I don't really see the point for splitting this up, it's not like it > makes the initialization much simpler. But hey, if that's the only > objection I can changed it. it's not splitting it up, just leaving it split up like it was, reduces the function length, reduces the out: gotos, and makes it nicely fit in one editor window =) > At least someone is looking at my xfs patches :) Cheers =) -- Niv Sardi From owner-xfs@oss.sgi.com Wed May 21 00:23:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 00:23:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_61 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L7NkkS019621 for ; Wed, 21 May 2008 00:23:47 -0700 X-ASG-Debug-ID: 1211354673-63e302a10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BA6E9198E5A; Wed, 21 May 2008 00:24:33 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id B9vIfJWMsOY9eqXw; Wed, 21 May 2008 00:24:33 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L7OPF3030280 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Wed, 21 May 2008 09:24:25 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L7OPk7030273; Wed, 21 May 2008 09:24:25 +0200 Date: Wed, 21 May 2008 09:24:25 +0200 From: Christoph Hellwig To: Niv Sardi Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] streamline init/exit path Subject: Re: [PATCH] streamline init/exit path Message-ID: <20080521072425.GA29889@lst.de> References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211354675 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50980 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16043 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Updated patch below. There's now split out function to create/destroy the kmem zones and alloc/free the trace buffers. I've also changed the ktrace allocations to KM_MAYFAIL and handled errors resulting from that. And yes, we really should replace the XFS_*_TRACE ifdefs with a single XFS_TRACE.. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_stats.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.c 2008-05-20 07:55:35.000000000 +0200 @@ -98,12 +98,21 @@ xfs_read_xfsstats( return len; } -void +int xfs_init_procfs(void) { if (!proc_mkdir("fs/xfs", NULL)) - return; - create_proc_read_entry("fs/xfs/stat", 0, NULL, xfs_read_xfsstats, NULL); + goto out; + + if (!create_proc_read_entry("fs/xfs/stat", 0, NULL, + xfs_read_xfsstats, NULL)) + goto out_remove_entry; + return 0; + + out_remove_entry: + remove_proc_entry("fs/xfs", NULL); + out: + return -ENOMEM; } void Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_stats.h 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_stats.h 2008-05-20 07:55:35.000000000 +0200 @@ -134,7 +134,7 @@ DECLARE_PER_CPU(struct xfsstats, xfsstat #define XFS_STATS_DEC(v) (per_cpu(xfsstats, current_cpu()).v--) #define XFS_STATS_ADD(v, inc) (per_cpu(xfsstats, current_cpu()).v += (inc)) -extern void xfs_init_procfs(void); +extern int xfs_init_procfs(void); extern void xfs_cleanup_procfs(void); @@ -144,8 +144,13 @@ extern void xfs_cleanup_procfs(void); # define XFS_STATS_DEC(count) # define XFS_STATS_ADD(count, inc) -static inline void xfs_init_procfs(void) { }; -static inline void xfs_cleanup_procfs(void) { }; +static inline int xfs_init_procfs(void) +{ + return 0 +}; +static inline void xfs_cleanup_procfs(void) +{ +}; #endif /* !CONFIG_PROC_FS */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-20 07:54:45.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 08:20:21.000000000 +0200 @@ -53,6 +53,11 @@ #include "xfs_log_priv.h" #include "xfs_trans_priv.h" #include "xfs_filestream.h" +#include "xfs_da_btree.h" +#include "xfs_dir2_trace.h" +#include "xfs_extfree_item.h" +#include "xfs_mru_cache.h" +#include "xfs_inode_item.h" #include #include @@ -876,42 +881,6 @@ xfs_fs_inode_init_once( inode_init_once(vn_to_inode((bhv_vnode_t *)vnode)); } -STATIC int __init -xfs_init_zones(void) -{ - xfs_vnode_zone = kmem_zone_init_flags(sizeof(bhv_vnode_t), "xfs_vnode", - KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | - KM_ZONE_SPREAD, - xfs_fs_inode_init_once); - if (!xfs_vnode_zone) - goto out; - - xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend"); - if (!xfs_ioend_zone) - goto out_destroy_vnode_zone; - - xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE, - xfs_ioend_zone); - if (!xfs_ioend_pool) - goto out_free_ioend_zone; - return 0; - - out_free_ioend_zone: - kmem_zone_destroy(xfs_ioend_zone); - out_destroy_vnode_zone: - kmem_zone_destroy(xfs_vnode_zone); - out: - return -ENOMEM; -} - -STATIC void -xfs_destroy_zones(void) -{ - mempool_destroy(xfs_ioend_pool); - kmem_zone_destroy(xfs_vnode_zone); - kmem_zone_destroy(xfs_ioend_zone); -} - /* * Attempt to flush the inode, this will actually fail * if the inode is pinned, but we dirty the inode again @@ -1838,9 +1807,235 @@ struct file_system_type xfs_fs_type = { }; EXPORT_SYMBOL(xfs_fs_type); +STATIC int __init +xfs_alloc_trace_bufs(void) +{ +#ifdef XFS_ALLOC_TRACE + xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_MAYFAIL); + if (!xfs_alloc_trace_buf) + goto out; +#endif +#ifdef XFS_BMAP_TRACE + xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_MAYFAIL); + if (!xfs_bmap_trace_buf) + goto out_free_alloc_trace; +#endif +#ifdef XFS_BMBT_TRACE + xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_MAYFAIL); + if (!xfs_bmbt_trace_buf) + goto out_free_bmap_trace; +#endif +#ifdef XFS_ATTR_TRACE + xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_MAYFAIL); + if (!xfs_attr_trace_buf) + goto out_free_bmbt_trace; +#endif +#ifdef XFS_DIR2_TRACE + xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_MAYFAIL); + if (!xfs_dir2_trace_buf) + goto out_free_attr_trace; +#endif + + return 0; + +#ifdef XFS_DIR2_TRACE + out_free_attr_trace: +#endif +#ifdef XFS_ATTR_TRACE + ktrace_free(xfs_attr_trace_buf); + out_free_bmbt_trace: +#endif +#ifdef XFS_BMBT_TRACE + ktrace_free(xfs_bmbt_trace_buf); + out_free_bmap_trace: +#endif +#ifdef XFS_BMAP_TRACE + ktrace_free(xfs_bmap_trace_buf); + out_free_alloc_trace: +#endif +#ifdef XFS_ALLOC_TRACE + ktrace_free(xfs_alloc_trace_buf); + out: +#endif + return -ENOMEM; +} + +STATIC void +xfs_free_trace_bufs(void) +{ +#ifdef XFS_DIR2_TRACE + ktrace_free(xfs_dir2_trace_buf); +#endif +#ifdef XFS_ATTR_TRACE + ktrace_free(xfs_attr_trace_buf); +#endif +#ifdef XFS_BMBT_TRACE + ktrace_free(xfs_bmbt_trace_buf); +#endif +#ifdef XFS_BMAP_TRACE + ktrace_free(xfs_bmap_trace_buf); +#endif +#ifdef XFS_ALLOC_TRACE + ktrace_free(xfs_alloc_trace_buf); +#endif +} STATIC int __init -init_xfs_fs( void ) +xfs_init_zones(void) +{ + xfs_vnode_zone = kmem_zone_init_flags(sizeof(bhv_vnode_t), "xfs_vnode", + KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | + KM_ZONE_SPREAD, + xfs_fs_inode_init_once); + if (!xfs_vnode_zone) + goto out; + + xfs_ioend_zone = kmem_zone_init(sizeof(xfs_ioend_t), "xfs_ioend"); + if (!xfs_ioend_zone) + goto out_destroy_vnode_zone; + + xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE, + xfs_ioend_zone); + if (!xfs_ioend_pool) + goto out_destroy_ioend_zone; + + xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), + "xfs_log_ticket"); + if (!xfs_log_ticket_zone) + goto out_destroy_ioend_pool; + + xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), + "xfs_bmap_free_item"); + if (!xfs_bmap_free_item_zone) + goto out_destroy_log_ticket_zone; + xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), + "xfs_btree_cur"); + if (!xfs_btree_cur_zone) + goto out_destroy_bmap_free_item_zone; + + xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), + "xfs_da_state"); + if (!xfs_da_state_zone) + goto out_destroy_btree_cur_zone; + + xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); + if (!xfs_dabuf_zone) + goto out_destroy_da_state_zone; + + xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); + if (!xfs_ifork_zone) + goto out_destroy_dabuf_zone; + + xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); + if (!xfs_trans_zone) + goto out_destroy_ifork_zone; + + /* + * The size of the zone allocated buf log item is the maximum + * size possible under XFS. This wastes a little bit of memory, + * but it is much faster. + */ + xfs_buf_item_zone = kmem_zone_init((sizeof(xfs_buf_log_item_t) + + (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / + NBWORD) * sizeof(int))), "xfs_buf_item"); + if (!xfs_buf_item_zone) + goto out_destroy_trans_zone; + + xfs_efd_zone = kmem_zone_init((sizeof(xfs_efd_log_item_t) + + ((XFS_EFD_MAX_FAST_EXTENTS - 1) * + sizeof(xfs_extent_t))), "xfs_efd_item"); + if (!xfs_efd_zone) + goto out_destroy_buf_item_zone; + + xfs_efi_zone = kmem_zone_init((sizeof(xfs_efi_log_item_t) + + ((XFS_EFI_MAX_FAST_EXTENTS - 1) * + sizeof(xfs_extent_t))), "xfs_efi_item"); + if (!xfs_efi_zone) + goto out_destroy_efd_zone; + + xfs_inode_zone = + kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode", + KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | + KM_ZONE_SPREAD, NULL); + if (!xfs_inode_zone) + goto out_destroy_efi_zone; + + xfs_ili_zone = + kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", + KM_ZONE_SPREAD, NULL); + if (!xfs_ili_zone) + goto out_destroy_inode_zone; + +#ifdef CONFIG_XFS_POSIX_ACL + xfs_acl_zone = kmem_zone_init(sizeof(xfs_acl_t), "xfs_acl"); + if (!xfs_acl_zone) + goto out_destroy_ili_zone; +#endif + + return 0; + +#ifdef CONFIG_XFS_POSIX_ACL + out_destroy_ili_zone: +#endif + kmem_zone_destroy(xfs_ili_zone); + out_destroy_inode_zone: + kmem_zone_destroy(xfs_inode_zone); + out_destroy_efi_zone: + kmem_zone_destroy(xfs_efi_zone); + out_destroy_efd_zone: + kmem_zone_destroy(xfs_efd_zone); + out_destroy_buf_item_zone: + kmem_zone_destroy(xfs_buf_item_zone); + out_destroy_trans_zone: + kmem_zone_destroy(xfs_trans_zone); + out_destroy_ifork_zone: + kmem_zone_destroy(xfs_ifork_zone); + out_destroy_dabuf_zone: + kmem_zone_destroy(xfs_dabuf_zone); + out_destroy_da_state_zone: + kmem_zone_destroy(xfs_da_state_zone); + out_destroy_btree_cur_zone: + kmem_zone_destroy(xfs_btree_cur_zone); + out_destroy_bmap_free_item_zone: + kmem_zone_destroy(xfs_bmap_free_item_zone); + out_destroy_log_ticket_zone: + kmem_zone_destroy(xfs_log_ticket_zone); + out_destroy_ioend_pool: + mempool_destroy(xfs_ioend_pool); + out_destroy_ioend_zone: + kmem_zone_destroy(xfs_ioend_zone); + out_destroy_vnode_zone: + kmem_zone_destroy(xfs_vnode_zone); + out: + return -ENOMEM; +} + +STATIC void +xfs_destroy_zones(void) +{ +#ifdef CONFIG_XFS_POSIX_ACL + kmem_zone_destroy(xfs_acl_zone); +#endif + kmem_zone_destroy(xfs_ili_zone); + kmem_zone_destroy(xfs_inode_zone); + kmem_zone_destroy(xfs_efi_zone); + kmem_zone_destroy(xfs_efd_zone); + kmem_zone_destroy(xfs_buf_item_zone); + kmem_zone_destroy(xfs_trans_zone); + kmem_zone_destroy(xfs_ifork_zone); + kmem_zone_destroy(xfs_dabuf_zone); + kmem_zone_destroy(xfs_da_state_zone); + kmem_zone_destroy(xfs_btree_cur_zone); + kmem_zone_destroy(xfs_bmap_free_item_zone); + kmem_zone_destroy(xfs_log_ticket_zone); + mempool_destroy(xfs_ioend_pool); + kmem_zone_destroy(xfs_ioend_zone); + kmem_zone_destroy(xfs_vnode_zone); + +} + +STATIC int __init +init_xfs_fs(void) { int error; static char message[] __initdata = KERN_INFO \ @@ -1849,40 +2044,70 @@ init_xfs_fs( void ) printk(message); ktrace_init(64); + vn_init(); + xfs_dir_startup(); error = xfs_init_zones(); - if (error < 0) - goto undo_zones; + if (error) + goto out; + + error = xfs_alloc_trace_bufs(); + if (error) + goto out_destroy_zones; + + error = xfs_mru_cache_init(); + if (error) + goto out_free_trace_buffers; + + error = xfs_filestream_init(); + if (error) + goto out_mru_cache_uninit; error = xfs_buf_init(); - if (error < 0) - goto undo_buffers; + if (error) + goto out_filestream_uninit; - vn_init(); - xfs_init(); - uuid_init(); + error = xfs_init_procfs(); + if (error) + goto out_buf_terminate; + + error = xfs_sysctl_register(); + if (error) + goto out_cleanup_procfs; error = register_filesystem(&xfs_fs_type); if (error) - goto undo_register; + goto out_sysctl_unregister; return 0; -undo_register: + out_sysctl_unregister: + xfs_sysctl_unregister(); + out_cleanup_procfs: + xfs_cleanup_procfs(); + out_buf_terminate: xfs_buf_terminate(); - -undo_buffers: + out_filestream_uninit: + xfs_filestream_uninit(); + out_mru_cache_uninit: + xfs_mru_cache_uninit(); + out_free_trace_buffers: + xfs_free_trace_bufs(); + out_destroy_zones: xfs_destroy_zones(); - -undo_zones: + out: return error; } STATIC void __exit -exit_xfs_fs( void ) +exit_xfs_fs(void) { unregister_filesystem(&xfs_fs_type); - xfs_cleanup(); + xfs_sysctl_unregister(); + xfs_cleanup_procfs(); xfs_buf_terminate(); + xfs_filestream_uninit(); + xfs_mru_cache_uninit(); + xfs_free_trace_bufs(); xfs_destroy_zones(); ktrace_uninit(); } Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_sysctl.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.c 2008-05-20 07:55:35.000000000 +0200 @@ -259,15 +259,17 @@ static ctl_table xfs_root_table[] = { {} }; -void +int xfs_sysctl_register(void) { xfs_table_header = register_sysctl_table(xfs_root_table); + if (!xfs_table_header) + return -ENOMEM; + return 0; } void xfs_sysctl_unregister(void) { - if (xfs_table_header) - unregister_sysctl_table(xfs_table_header); + unregister_sysctl_table(xfs_table_header); } Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_sysctl.h 2008-05-20 07:42:41.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_sysctl.h 2008-05-20 07:55:35.000000000 +0200 @@ -93,10 +93,10 @@ enum { extern xfs_param_t xfs_params; #ifdef CONFIG_SYSCTL -extern void xfs_sysctl_register(void); +extern int xfs_sysctl_register(void); extern void xfs_sysctl_unregister(void); #else -# define xfs_sysctl_register() do { } while (0) +# define xfs_sysctl_register() (0) # define xfs_sysctl_unregister() do { } while (0) #endif /* CONFIG_SYSCTL */ Index: linux-2.6-xfs/fs/xfs/support/uuid.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/support/uuid.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/support/uuid.c 2008-05-20 07:55:35.000000000 +0200 @@ -17,7 +17,7 @@ */ #include -static mutex_t uuid_monitor; +static DEFINE_MUTEX(uuid_monitor); static int uuid_table_size; static uuid_t *uuid_table; @@ -132,9 +132,3 @@ uuid_table_remove(uuid_t *uuid) ASSERT(i < uuid_table_size); mutex_unlock(&uuid_monitor); } - -void __init -uuid_init(void) -{ - mutex_init(&uuid_monitor); -} Index: linux-2.6-xfs/fs/xfs/support/uuid.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/support/uuid.h 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/support/uuid.h 2008-05-20 07:55:35.000000000 +0200 @@ -22,7 +22,6 @@ typedef struct { unsigned char __u_bits[16]; } uuid_t; -extern void uuid_init(void); extern void uuid_create_nil(uuid_t *uuid); extern int uuid_is_nil(uuid_t *uuid); extern int uuid_equal(uuid_t *uuid1, uuid_t *uuid2); Index: linux-2.6-xfs/fs/xfs/xfs_da_btree.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_da_btree.c 2008-05-20 07:42:41.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_da_btree.c 2008-05-20 07:55:35.000000000 +0200 @@ -2218,7 +2218,7 @@ xfs_da_state_free(xfs_da_state_t *state) #ifdef XFS_DABUF_DEBUG xfs_dabuf_t *xfs_dabuf_global_list; -spinlock_t xfs_dabuf_global_lock; +static DEFINE_SPINLOCK(xfs_dabuf_global_lock); #endif /* Index: linux-2.6-xfs/fs/xfs/xfs_error.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.c 2008-05-20 07:55:35.000000000 +0200 @@ -66,14 +66,6 @@ int xfs_etest[XFS_NUM_INJECT_ERROR]; int64_t xfs_etest_fsid[XFS_NUM_INJECT_ERROR]; char * xfs_etest_fsname[XFS_NUM_INJECT_ERROR]; -void -xfs_error_test_init(void) -{ - memset(xfs_etest, 0, sizeof(xfs_etest)); - memset(xfs_etest_fsid, 0, sizeof(xfs_etest_fsid)); - memset(xfs_etest_fsname, 0, sizeof(xfs_etest_fsname)); -} - int xfs_error_test(int error_tag, int *fsidp, char *expression, int line, char *file, unsigned long randfactor) Index: linux-2.6-xfs/fs/xfs/xfs_error.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.h 2008-05-20 07:42:41.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.h 2008-05-20 07:55:35.000000000 +0200 @@ -127,7 +127,6 @@ extern void xfs_corruption_error(char *t #if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) extern int xfs_error_test(int, int *, char *, int, char *, unsigned long); -extern void xfs_error_test_init(void); #define XFS_NUM_INJECT_ERROR 10 Index: linux-2.6-xfs/fs/xfs/xfs_filestream.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_filestream.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_filestream.c 2008-05-20 07:55:35.000000000 +0200 @@ -397,10 +397,12 @@ int xfs_filestream_init(void) { item_zone = kmem_zone_init(sizeof(fstrm_item_t), "fstrm_item"); + if (!item_zone) + return -ENOMEM; #ifdef XFS_FILESTREAMS_TRACE xfs_filestreams_trace_buf = ktrace_alloc(XFS_FSTRM_KTRACE_SIZE, KM_SLEEP); #endif - return item_zone ? 0 : -ENOMEM; + return 0; } /* Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-20 07:47:55.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-20 07:55:35.000000000 +0200 @@ -545,9 +545,6 @@ extern void xfs_qmops_put(struct xfs_mou extern struct xfs_dmops xfs_dmcore_xfs; -extern int xfs_init(void); -extern void xfs_cleanup(void); - #endif /* __KERNEL__ */ #endif /* __XFS_MOUNT_H__ */ Index: linux-2.6-xfs/fs/xfs/xfs_mru_cache.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mru_cache.c 2008-05-20 07:42:40.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mru_cache.c 2008-05-20 07:55:35.000000000 +0200 @@ -307,15 +307,18 @@ xfs_mru_cache_init(void) xfs_mru_elem_zone = kmem_zone_init(sizeof(xfs_mru_cache_elem_t), "xfs_mru_cache_elem"); if (!xfs_mru_elem_zone) - return ENOMEM; + goto out; xfs_mru_reap_wq = create_singlethread_workqueue("xfs_mru_cache"); - if (!xfs_mru_reap_wq) { - kmem_zone_destroy(xfs_mru_elem_zone); - return ENOMEM; - } + if (!xfs_mru_reap_wq) + goto out_destroy_mru_elem_zone; return 0; + + out_destroy_mru_elem_zone: + kmem_zone_destroy(xfs_mru_elem_zone); + out: + return -ENOMEM; } void Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-20 07:47:55.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-20 07:55:35.000000000 +0200 @@ -58,137 +58,6 @@ #include "xfs_utils.h" -int __init -xfs_init(void) -{ -#ifdef XFS_DABUF_DEBUG - extern spinlock_t xfs_dabuf_global_lock; - spin_lock_init(&xfs_dabuf_global_lock); -#endif - - /* - * Initialize all of the zone allocators we use. - */ - xfs_log_ticket_zone = kmem_zone_init(sizeof(xlog_ticket_t), - "xfs_log_ticket"); - xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), - "xfs_bmap_free_item"); - xfs_btree_cur_zone = kmem_zone_init(sizeof(xfs_btree_cur_t), - "xfs_btree_cur"); - xfs_da_state_zone = kmem_zone_init(sizeof(xfs_da_state_t), - "xfs_da_state"); - xfs_dabuf_zone = kmem_zone_init(sizeof(xfs_dabuf_t), "xfs_dabuf"); - xfs_ifork_zone = kmem_zone_init(sizeof(xfs_ifork_t), "xfs_ifork"); - xfs_trans_zone = kmem_zone_init(sizeof(xfs_trans_t), "xfs_trans"); - xfs_acl_zone_init(xfs_acl_zone, "xfs_acl"); - xfs_mru_cache_init(); - xfs_filestream_init(); - - /* - * The size of the zone allocated buf log item is the maximum - * size possible under XFS. This wastes a little bit of memory, - * but it is much faster. - */ - xfs_buf_item_zone = - kmem_zone_init((sizeof(xfs_buf_log_item_t) + - (((XFS_MAX_BLOCKSIZE / XFS_BLI_CHUNK) / - NBWORD) * sizeof(int))), - "xfs_buf_item"); - xfs_efd_zone = - kmem_zone_init((sizeof(xfs_efd_log_item_t) + - ((XFS_EFD_MAX_FAST_EXTENTS - 1) * - sizeof(xfs_extent_t))), - "xfs_efd_item"); - xfs_efi_zone = - kmem_zone_init((sizeof(xfs_efi_log_item_t) + - ((XFS_EFI_MAX_FAST_EXTENTS - 1) * - sizeof(xfs_extent_t))), - "xfs_efi_item"); - - /* - * These zones warrant special memory allocator hints - */ - xfs_inode_zone = - kmem_zone_init_flags(sizeof(xfs_inode_t), "xfs_inode", - KM_ZONE_HWALIGN | KM_ZONE_RECLAIM | - KM_ZONE_SPREAD, NULL); - xfs_ili_zone = - kmem_zone_init_flags(sizeof(xfs_inode_log_item_t), "xfs_ili", - KM_ZONE_SPREAD, NULL); - - /* - * Allocate global trace buffers. - */ -#ifdef XFS_ALLOC_TRACE - xfs_alloc_trace_buf = ktrace_alloc(XFS_ALLOC_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_BMAP_TRACE - xfs_bmap_trace_buf = ktrace_alloc(XFS_BMAP_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_BMBT_TRACE - xfs_bmbt_trace_buf = ktrace_alloc(XFS_BMBT_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_ATTR_TRACE - xfs_attr_trace_buf = ktrace_alloc(XFS_ATTR_TRACE_SIZE, KM_SLEEP); -#endif -#ifdef XFS_DIR2_TRACE - xfs_dir2_trace_buf = ktrace_alloc(XFS_DIR2_GTRACE_SIZE, KM_SLEEP); -#endif - - xfs_dir_startup(); - -#if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) - xfs_error_test_init(); -#endif /* DEBUG || INDUCE_IO_ERROR */ - - xfs_init_procfs(); - xfs_sysctl_register(); - return 0; -} - -void __exit -xfs_cleanup(void) -{ - extern kmem_zone_t *xfs_inode_zone; - extern kmem_zone_t *xfs_efd_zone; - extern kmem_zone_t *xfs_efi_zone; - - xfs_cleanup_procfs(); - xfs_sysctl_unregister(); - xfs_filestream_uninit(); - xfs_mru_cache_uninit(); - xfs_acl_zone_destroy(xfs_acl_zone); - -#ifdef XFS_DIR2_TRACE - ktrace_free(xfs_dir2_trace_buf); -#endif -#ifdef XFS_ATTR_TRACE - ktrace_free(xfs_attr_trace_buf); -#endif -#ifdef XFS_BMBT_TRACE - ktrace_free(xfs_bmbt_trace_buf); -#endif -#ifdef XFS_BMAP_TRACE - ktrace_free(xfs_bmap_trace_buf); -#endif -#ifdef XFS_ALLOC_TRACE - ktrace_free(xfs_alloc_trace_buf); -#endif - - kmem_zone_destroy(xfs_bmap_free_item_zone); - kmem_zone_destroy(xfs_btree_cur_zone); - kmem_zone_destroy(xfs_inode_zone); - kmem_zone_destroy(xfs_trans_zone); - kmem_zone_destroy(xfs_da_state_zone); - kmem_zone_destroy(xfs_dabuf_zone); - kmem_zone_destroy(xfs_buf_item_zone); - kmem_zone_destroy(xfs_efd_zone); - kmem_zone_destroy(xfs_efi_zone); - kmem_zone_destroy(xfs_ifork_zone); - kmem_zone_destroy(xfs_ili_zone); - kmem_zone_destroy(xfs_log_ticket_zone); -} - STATIC void xfs_quiesce_fs( xfs_mount_t *mp) From owner-xfs@oss.sgi.com Wed May 21 00:35:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 00:35:46 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L7ZeBd026574 for ; Wed, 21 May 2008 00:35:40 -0700 X-ASG-Debug-ID: 1211355386-62fd01a90000-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 D26601B30562; Wed, 21 May 2008 00:36:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id qwjVSF7eMcCcrdIy; Wed, 21 May 2008 00:36:26 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1Jyis5-0006xi-WA; Wed, 21 May 2008 07:36:26 +0000 Date: Wed, 21 May 2008 03:36:25 -0400 From: Christoph Hellwig To: Barry Naujok Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE 981521 - Return actual name for CI match for dentry cache Subject: Re: TAKE 981521 - Return actual name for CI match for dentry cache Message-ID: <20080521073625.GA26580@infradead.org> References: <20080521034449.67F4758C4C29@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080521034449.67F4758C4C29@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211355389 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.1, rules version 3.1.50980 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16044 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Wed, May 21, 2008 at 01:44:49PM +1000, Barry Naujok wrote: > Return case-insensitive match for dentry cache > > This implements the code to store the actual filename found > during a lookup in the dentry cache and to avoid multiple entries > in the dcache pointing to the same inode. > > To avoid polluting the dcache, we implement a new directory inode > operations for lookup. xfs_vn_ci_lookup() stores the correct case > name in the dcache. > > The "actual name" is only allocated and returned for a case- > insensitive match and not an actual match. > > Another unusual interaction with the dcache is not storing > negative dentries like other filesystems doing a d_add(dentry, NULL) > when an ENOENT is returned. During the VFS lookup, if a dentry > returned has no inode, dput is called and ENOENT is returned. > By not doing a d_add, this actually removes it completely from > the dcache to be reused. create/rename have to be modified to > support unhashed dentries being passed in. This requires the d_add_ci helper which doesn't exist in the CVS on oss. From owner-xfs@oss.sgi.com Wed May 21 00:38:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 00:38:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L7cFep027032 for ; Wed, 21 May 2008 00:38:18 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA02562; Wed, 21 May 2008 17:38:56 +1000 To: "Christoph Hellwig" Subject: Re: TAKE 981521 - Return actual name for CI match for dentry cache From: "Barry Naujok" Organization: SGI Cc: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080521034449.67F4758C4C29@chook.melbourne.sgi.com> <20080521073625.GA26580@infradead.org> Content-Transfer-Encoding: 7bit Date: Wed, 21 May 2008 17:40:56 +1000 Message-ID: In-Reply-To: <20080521073625.GA26580@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16045 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 21 May 2008 17:36:25 +1000, Christoph Hellwig wrote: > On Wed, May 21, 2008 at 01:44:49PM +1000, Barry Naujok wrote: >> Return case-insensitive match for dentry cache >> >> This implements the code to store the actual filename found >> during a lookup in the dentry cache and to avoid multiple entries >> in the dcache pointing to the same inode. >> >> To avoid polluting the dcache, we implement a new directory inode >> operations for lookup. xfs_vn_ci_lookup() stores the correct case >> name in the dcache. >> >> The "actual name" is only allocated and returned for a case- >> insensitive match and not an actual match. >> >> Another unusual interaction with the dcache is not storing >> negative dentries like other filesystems doing a d_add(dentry, NULL) >> when an ENOENT is returned. During the VFS lookup, if a dentry >> returned has no inode, dput is called and ENOENT is returned. >> By not doing a d_add, this actually removes it completely from >> the dcache to be reused. create/rename have to be modified to >> support unhashed dentries being passed in. > > This requires the d_add_ci helper which doesn't exist in the CVS on oss. I have pushed all patches to oss master git tree now. I'm not sure how CVS can get updated. Barry. From owner-xfs@oss.sgi.com Wed May 21 01:03:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:03:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L83hmH031452 for ; Wed, 21 May 2008 01:03:44 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA03196; Wed, 21 May 2008 18:04:30 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id BFE2458C4C29; Wed, 21 May 2008 18:04:29 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981520 - Remove build warnings with debug compile Message-Id: <20080521080429.BFE2458C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 18:04:29 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16046 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Remove build warnings with debug compile Date: Wed May 21 18:03:42 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: lachlan@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31211a fs/xfs/xfsidbg.c - 1.351 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfsidbg.c.diff?r1=text&tr1=1.351&r2=text&tr2=1.350&f=h - Remove build warnings in debug compile From owner-xfs@oss.sgi.com Wed May 21 01:05:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:05:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L85j9u031827 for ; Wed, 21 May 2008 01:05:45 -0700 X-ASG-Debug-ID: 1211357194-68bc03230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5A5BE1B30712 for ; Wed, 21 May 2008 01:06:34 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id sIkWZvnx4zox1D9h for ; Wed, 21 May 2008 01:06:34 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L86RF3001774 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:06:27 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L86R15001772 for xfs@oss.sgi.com; Wed, 21 May 2008 10:06:27 +0200 Date: Wed, 21 May 2008 10:06:27 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] mark kmem_free / kmem_realloc argument as const Subject: [PATCH] mark kmem_free / kmem_realloc argument as const Message-ID: <20080521080627.GA1605@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211357195 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.1, rules version 3.1.50982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16047 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Otherwise we get warnings when trying to free const pointers, as done in the CI code. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/kmem.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/kmem.h 2008-05-21 10:00:42.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/kmem.h 2008-05-21 10:02:17.000000000 +0200 @@ -57,8 +57,8 @@ kmem_flags_convert(unsigned int __nocast extern void *kmem_alloc(size_t, unsigned int __nocast); extern void *kmem_zalloc(size_t, unsigned int __nocast); extern void *kmem_zalloc_greedy(size_t *, size_t, size_t, unsigned int __nocast); -extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); -extern void kmem_free(void *); +extern void *kmem_realloc(const void *, size_t, size_t, unsigned int __nocast); +extern void kmem_free(const void *); /* * Zone interfaces Index: linux-2.6-xfs/fs/xfs/linux-2.6/kmem.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/kmem.c 2008-05-21 10:02:21.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/kmem.c 2008-05-21 10:02:33.000000000 +0200 @@ -90,7 +90,7 @@ kmem_zalloc_greedy(size_t *size, size_t } void -kmem_free(void *ptr) +kmem_free(const void *ptr) { if (((unsigned long)ptr < VMALLOC_START) || ((unsigned long)ptr >= VMALLOC_END)) { @@ -101,7 +101,7 @@ kmem_free(void *ptr) } void * -kmem_realloc(void *ptr, size_t newsize, size_t oldsize, +kmem_realloc(const void *ptr, size_t newsize, size_t oldsize, unsigned int __nocast flags) { void *new; From owner-xfs@oss.sgi.com Wed May 21 01:07:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:07:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L87AAZ032282 for ; Wed, 21 May 2008 01:07:11 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA03334 for ; Wed, 21 May 2008 18:08:00 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Remove kmem_free build warnings From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080521080648.82DCF58C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 18:10:08 +1000 Message-ID: In-Reply-To: <20080521080648.82DCF58C4C29@chook.melbourne.sgi.com> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Base64 to 8bit by oss.sgi.com id m4L87DAZ032284 X-archive-position: 16048 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs =========================================================================== fs/xfs/linux-2.6/kmem.c =========================================================================== --- a/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:06:48.000000000 +1000 +++ b/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:04:44.400231547 +1000 @@ -90,7 +90,7 @@ kmem_zalloc_greedy(size_t *size, size_t } void -kmem_free(void *ptr) +kmem_free(const void *ptr) { if (((unsigned long)ptr < VMALLOC_START) || ((unsigned long)ptr >= VMALLOC_END)) { =========================================================================== fs/xfs/linux-2.6/kmem.h =========================================================================== --- a/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:06:48.000000000 +1000 +++ b/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:05:33.673925302 +1000 @@ -58,7 +58,7 @@ extern void *kmem_alloc(size_t, unsigned extern void *kmem_zalloc(size_t, unsigned int __nocast); extern void *kmem_zalloc_greedy(size_t *, size_t, size_t, unsigned int __nocast); extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); -extern void kmem_free(void *); +extern void kmem_free(const void *); /* * Zone interfaces From owner-xfs@oss.sgi.com Wed May 21 01:10:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:10:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8AbPL000380 for ; Wed, 21 May 2008 01:10:37 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 881CA304085; Wed, 21 May 2008 01:11:24 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4L8BJjm1352199; Wed, 21 May 2008 18:11:21 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: xfs@oss.sgi.com Subject: TAKE streamline init/exit path References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> <20080521072425.GA29889@lst.de> Date: Wed, 21 May 2008 18:11:23 +1000 In-Reply-To: <20080521072425.GA29889@lst.de> (Christoph Hellwig's message of "Wed, 21 May 2008 09:24:25 +0200") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16049 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > Updated patch below. There's now split out function to create/destroy > the kmem zones and alloc/free the trace buffers. I've also changed the > ktrace allocations to KM_MAYFAIL and handled errors resulting from that. > > And yes, we really should replace the XFS_*_TRACE ifdefs with a single > XFS_TRACE.. Thanks, it's in, forgot to send the TAKE message to oss, here it comes: Subject: TAKE 976035 - streamline init/exit path Date: Wed, 21 May 2008 18:02:18 +1000 Workarea: chook.melbourne.sgi.com:/build/xaiki/isms/mangrove-1.3 Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31210a streamline init/exit path Currently the xfs module init/exit code is a mess. It's farmed out over a lot of function with very little error checking. This patch makes sure we propagate all initialization failures properly and clean up after them. Various runtime initializations are replaced with compile-time initializations where possible to make this easier. The exit path is similarly consolidated. There's now split out function to create/destroy the kmem zones and alloc/free the trace buffers. I've also changed the ktrace allocations to KM_MAYFAIL and handled errors resulting from that. And yes, we really should replace the XFS_*_TRACE ifdefs with a single XFS_TRACE.. Signed-off-by: Christoph Hellwig Signed-off-by: Niv Sardi fs/xfs/linux-2.6/xfs_stats.c - 1.24 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_stats.c.diff?r1=text&tr1=1.24&r2=text&tr2=1.23&f=h fs/xfs/linux-2.6/xfs_stats.h - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_stats.h.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h fs/xfs/linux-2.6/xfs_super.c - 1.429 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.429&r2=text&tr2=1.428&f=h fs/xfs/linux-2.6/xfs_sysctl.c - 1.44 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_sysctl.c.diff?r1=text&tr1=1.44&r2=text&tr2=1.43&f=h fs/xfs/linux-2.6/xfs_sysctl.h - 1.29 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_sysctl.h.diff?r1=text&tr1=1.29&r2=text&tr2=1.28&f=h fs/xfs/support/uuid.c - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/support/uuid.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h fs/xfs/support/uuid.h - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/support/uuid.h.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h fs/xfs/xfs_da_btree.c - 1.180 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_da_btree.c.diff?r1=text&tr1=1.180&r2=text&tr2=1.179&f=h fs/xfs/xfs_error.c - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_error.c.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h fs/xfs/xfs_error.h - 1.50 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_error.h.diff?r1=text&tr1=1.50&r2=text&tr2=1.49&f=h fs/xfs/xfs_filestream.c - 1.6 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_filestream.c.diff?r1=text&tr1=1.6&r2=text&tr2=1.5&f=h fs/xfs/xfs_mount.h - 1.270 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mount.h.diff?r1=text&tr1=1.270&r2=text&tr2=1.269&f=h fs/xfs/xfs_mru_cache.c - 1.7 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_mru_cache.c.diff?r1=text&tr1=1.7&r2=text&tr2=1.6&f=h fs/xfs/xfs_vfsops.c - 1.568 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_vfsops.c.diff?r1=text&tr1=1.568&r2=text&tr2=1.567&f=h -- Niv Sardi From owner-xfs@oss.sgi.com Wed May 21 01:14:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:15:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8Ewen001234 for ; Wed, 21 May 2008 01:14:59 -0700 X-ASG-Debug-ID: 1211357747-68bd03430000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BB97A1B964B3 for ; Wed, 21 May 2008 01:15:48 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id J2IIVot95MQS0G3Z for ; Wed, 21 May 2008 01:15:48 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L8FeF3002598 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:15:41 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L8FeXV002594 for xfs@oss.sgi.com; Wed, 21 May 2008 10:15:40 +0200 Date: Wed, 21 May 2008 10:15:40 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] fix reiserfs case in 032 Subject: Re: [PATCH] fix reiserfs case in 032 Message-ID: <20080521081540.GA2398@lst.de> References: <20080515170505.GA8949@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515170505.GA8949@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211357748 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.1, rules version 3.1.50982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16050 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? On Thu, May 15, 2008 at 07:05:05PM +0200, Christoph Hellwig wrote: > mkfs.reiserfs refuses to create a filesystem on full devices without > partitions unless it's given -f in addition to the already required Y > input to confirm the fs creation, so give the argument to it. > > While we're at it also write the full command line used to create the > filesystem into the log to ease future debugging. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests/032 > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/032,v > retrieving revision 1.13 > diff -u -p -r1.13 032 > --- xfstests/032 9 Nov 2005 02:49:08 -0000 1.13 > +++ xfstests/032 15 May 2008 17:02:08 -0000 > @@ -43,7 +43,7 @@ do > [ $fs = vfat ] && postargs=2000 > # these folks prompt before writing > [ $fs = jfs ] && preop="echo Y |" > - [ $fs = reiserfs ] && preop="echo y |" > + [ $fs = reiserfs ] && preop="echo y |" && preargs="-f" > # cramfs mkfs requires a directory argument > [ $fs = cramfs ] && preargs=/proc/fs/xfs > > @@ -52,7 +52,7 @@ do > > # create a filesystem of this type > echo "=== Creating $fs filesystem..." >>$seq.full > - echo " ( mkfs -t $fs $SCRATCH_DEV )" >>$seq.full > + echo " ( $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs )" >>$seq.full > eval $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs >>$seq.full 2>&1 > > # next, ensure we don't overwrite it ---end quoted text--- From owner-xfs@oss.sgi.com Wed May 21 01:15:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:15:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8FB0W001392 for ; Wed, 21 May 2008 01:15:11 -0700 X-ASG-Debug-ID: 1211357759-33bd014f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7317B1992F2 for ; Wed, 21 May 2008 01:16:00 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id uIwOgVzUrD5SLyeU for ; Wed, 21 May 2008 01:16:00 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L8FrF3002615 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:15:53 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L8Fqqm002613 for xfs@oss.sgi.com; Wed, 21 May 2008 10:15:52 +0200 Date: Wed, 21 May 2008 10:15:52 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] scale down 074 on lower end machines Subject: Re: [PATCH] scale down 074 on lower end machines Message-ID: <20080521081552.GB2398@lst.de> References: <20080515173913.GA11494@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515173913.GA11494@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211357761 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.1, rules version 3.1.50982 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16051 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs ping? On Thu, May 15, 2008 at 07:39:13PM +0200, Christoph Hellwig wrote: > 074 takes ages to complete on my kvm test VM, but scaling it back to the > level used on IRIX makes it complete in slightly under 10 minutes. > > I'm not sure if checking for UP vs SMP is the right way to go into slow > mode, but I couldn't think of anything better. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests/074 > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/074,v > retrieving revision 1.7 > diff -u -p -r1.7 074 > --- xfstests/074 9 Nov 2005 02:49:08 -0000 1.7 > +++ xfstests/074 15 May 2008 17:37:03 -0000 > @@ -120,10 +120,17 @@ if [ $HOSTOS == "IRIX" ]; then > param_type="IRIX nondebug" > fi > elif [ $HOSTOS == "Linux" ]; then > - numloops=10 > - numfiles=5 > - numchildren=3 > - param_type="Linux" > + if uname -a | grep -q SMP; then > + numloops=10 > + numfiles=5 > + numchildren=3 > + param_type="Linux SMP" > + else > + numloops=2 > + numfiles=3 > + numchildren=3 > + param_type="Linux UP" > + fi > else > numloops=1 > numfiles=1 ---end quoted text--- From owner-xfs@oss.sgi.com Wed May 21 01:16:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:16:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_61 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8GHPf001992 for ; Wed, 21 May 2008 01:16:17 -0700 X-ASG-Debug-ID: 1211357825-59ec022f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 961D6BAF5BE for ; Wed, 21 May 2008 01:17:05 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id LAYLG1vh2j8YpEQw for ; Wed, 21 May 2008 01:17:05 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L8GuF3002750 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:16:57 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L8Gu3M002746 for xfs@oss.sgi.com; Wed, 21 May 2008 10:16:56 +0200 Date: Wed, 21 May 2008 10:16:56 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] use generic_*xattr routines Subject: Re: [PATCH] use generic_*xattr routines Message-ID: <20080521081656.GA2638@lst.de> References: <20080430112217.GB16966@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080430112217.GB16966@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211357826 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.50983 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16052 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Wed, Apr 30, 2008 at 01:22:17PM +0200, Christoph Hellwig wrote: > Use the generic set, get and removexattr methods and supply the s_xattr > array with fine-grained handlers. All XFS/Linux highlevel attr handling is > rewritten from scratch and placed into fs/xfs/linux-2.6/xfs_xattr.c so > that it's separated from the generic low-level code. > > The code size reduction is not as big as I had hoped, but it's still a > worthwile cleanup. > > I didn't managed to get rid of struct attrnames yet, as it's still used > to hack the Linux string prefixes into the output inside the lowest > level xattr code. I have some plans to clean that bit up aswell, but > that will have to wait for a while. Updated on top of the case-insensitive filename changes: Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/Makefile =================================================================== --- linux-2.6-xfs.orig/fs/xfs/Makefile 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/Makefile 2008-05-21 10:06:38.000000000 +0200 @@ -97,6 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ xfs_lrw.o \ xfs_super.o \ xfs_vnode.o \ + xfs_xattr.o \ xfs_ksyms.o) # Objects in support/ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:14:54.000000000 +0200 @@ -282,7 +282,7 @@ xfs_vn_mknod( struct xfs_inode *ip = NULL; xfs_acl_t *default_acl = NULL; struct xfs_name name; - attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; + int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; int error; /* @@ -771,98 +771,6 @@ xfs_vn_truncate( WARN_ON(error); } -STATIC int -xfs_vn_setxattr( - struct dentry *dentry, - const char *name, - const void *data, - size_t size, - int flags) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - /* Convert Linux syscall to XFS internal ATTR flags */ - if (flags & XATTR_CREATE) - xflags |= ATTR_CREATE; - if (flags & XATTR_REPLACE) - xflags |= ATTR_REPLACE; - xflags |= namesp->attr_flag; - return namesp->attr_set(vp, attr, (void *)data, size, xflags); -} - -STATIC ssize_t -xfs_vn_getxattr( - struct dentry *dentry, - const char *name, - void *data, - size_t size) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - /* Convert Linux syscall to XFS internal ATTR flags */ - if (!size) { - xflags |= ATTR_KERNOVAL; - data = NULL; - } - xflags |= namesp->attr_flag; - return namesp->attr_get(vp, attr, (void *)data, size, xflags); -} - -STATIC ssize_t -xfs_vn_listxattr( - struct dentry *dentry, - char *data, - size_t size) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - int error, xflags = ATTR_KERNAMELS; - ssize_t result; - - if (!size) - xflags |= ATTR_KERNOVAL; - xflags |= capable(CAP_SYS_ADMIN) ? ATTR_KERNFULLS : ATTR_KERNORMALS; - - error = attr_generic_list(vp, data, size, xflags, &result); - if (error < 0) - return error; - return result; -} - -STATIC int -xfs_vn_removexattr( - struct dentry *dentry, - const char *name) -{ - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); - char *attr = (char *)name; - attrnames_t *namesp; - int xflags = 0; - - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); - if (!namesp) - return -EOPNOTSUPP; - attr += namesp->attr_namelen; - - xflags |= namesp->attr_flag; - return namesp->attr_remove(vp, attr, xflags); -} - STATIC long xfs_vn_fallocate( struct inode *inode, @@ -910,10 +818,10 @@ const struct inode_operations xfs_inode_ .truncate = xfs_vn_truncate, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, .fallocate = xfs_vn_fallocate, }; @@ -930,10 +838,10 @@ const struct inode_operations xfs_dir_in .permission = xfs_vn_permission, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, }; const struct inode_operations xfs_dir_ci_inode_operations = { @@ -949,10 +857,10 @@ const struct inode_operations xfs_dir_ci .permission = xfs_vn_permission, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, }; const struct inode_operations xfs_symlink_inode_operations = { @@ -962,8 +870,8 @@ const struct inode_operations xfs_symlin .permission = xfs_vn_permission, .getattr = xfs_vn_getattr, .setattr = xfs_vn_setattr, - .setxattr = xfs_vn_setxattr, - .getxattr = xfs_vn_getxattr, + .setxattr = generic_setxattr, + .getxattr = generic_getxattr, + .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, - .removexattr = xfs_vn_removexattr, }; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c 2008-05-21 10:06:38.000000000 +0200 @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2008 Christoph Hellwig. + * Released under GPL v2. + */ + +#include "xfs.h" +#include "xfs_attr.h" +#include "xfs_acl.h" +#include "xfs_vnodeops.h" + +#include +#include + + +/* + * ACL handling. Should eventually be moved into xfs_acl.c + */ + +static int +xfs_decode_acl(const char *name) +{ + if (strcmp(name, "posix_acl_access") == 0) + return _ACL_TYPE_ACCESS; + else if (strcmp(name, "posix_acl_default") == 0) + return _ACL_TYPE_DEFAULT; + return -EINVAL; +} + +static int +xfs_xattr_system_get(struct inode *inode, const char *name, + void *buffer, size_t size) +{ + int acl; + + acl = xfs_decode_acl(name); + if (acl < 0) + return acl; + + return xfs_acl_vget(inode, buffer, size, acl); +} + +static int +xfs_xattr_system_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + int error, acl; + + acl = xfs_decode_acl(name); + if (acl < 0) + return acl; + if (flags & XATTR_CREATE) + return -EINVAL; + + if (!value) + return xfs_acl_vremove(inode, acl); + + error = xfs_acl_vset(inode, (void *)value, size, acl); + if (!error) + vn_revalidate(inode); + return error; +} + +static struct xattr_handler xfs_xattr_system_handler = { + .prefix = XATTR_SYSTEM_PREFIX, + .get = xfs_xattr_system_get, + .set = xfs_xattr_system_set, +}; + + +/* + * Real xattr handling. The only difference between the namespaces is + * a flag passed to the low-level attr code. + */ + +static int +__xfs_xattr_get(struct inode *inode, const char *name, + void *value, size_t size, int xflags) +{ + struct xfs_inode *ip = XFS_I(inode); + int error, asize = size; + + if (strcmp(name, "") == 0) + return -EINVAL; + + /* Convert Linux syscall to XFS internal ATTR flags */ + if (!size) { + xflags |= ATTR_KERNOVAL; + value = NULL; + } + + error = -xfs_attr_get(ip, name, value, &asize, xflags); + if (error) + return error; + return asize; +} + +static int +__xfs_xattr_set(struct inode *inode, const char *name, const void *value, + size_t size, int flags, int xflags) +{ + struct xfs_inode *ip = XFS_I(inode); + + if (strcmp(name, "") == 0) + return -EINVAL; + + /* Convert Linux syscall to XFS internal ATTR flags */ + if (flags & XATTR_CREATE) + xflags |= ATTR_CREATE; + if (flags & XATTR_REPLACE) + xflags |= ATTR_REPLACE; + + if (!value) + return -xfs_attr_remove(ip, name, xflags); + return -xfs_attr_set(ip, name, (void *)value, size, xflags); +} + +static int +xfs_xattr_user_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, 0); +} + +static int +xfs_xattr_user_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, 0); +} + +struct attrnames attr_user = { + .attr_name = "user.", + .attr_namelen = sizeof("user.") - 1, +}; + +static struct xattr_handler xfs_xattr_user_handler = { + .prefix = XATTR_USER_PREFIX, + .get = xfs_xattr_user_get, + .set = xfs_xattr_user_set, +}; + + +static int +xfs_xattr_trusted_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, ATTR_ROOT); +} + +static int +xfs_xattr_trusted_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_ROOT); +} + +struct attrnames attr_trusted = { + .attr_name = "trusted.", + .attr_namelen = sizeof("trusted.") - 1, +}; + +static struct xattr_handler xfs_xattr_trusted_handler = { + .prefix = XATTR_TRUSTED_PREFIX, + .get = xfs_xattr_trusted_get, + .set = xfs_xattr_trusted_set, +}; + + +static int +xfs_xattr_secure_get(struct inode *inode, const char *name, + void *value, size_t size) +{ + return __xfs_xattr_get(inode, name, value, size, ATTR_SECURE); +} + +static int +xfs_xattr_secure_set(struct inode *inode, const char *name, + const void *value, size_t size, int flags) +{ + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_SECURE); +} + +struct attrnames attr_secure = { + .attr_name = "security.", + .attr_namelen = sizeof("security.") - 1, +}; + +static struct xattr_handler xfs_xattr_security_handler = { + .prefix = XATTR_SECURITY_PREFIX, + .get = xfs_xattr_secure_get, + .set = xfs_xattr_secure_set, +}; + + +struct xattr_handler *xfs_xattr_handlers[] = { + &xfs_xattr_user_handler, + &xfs_xattr_trusted_handler, + &xfs_xattr_security_handler, + &xfs_xattr_system_handler, + NULL +}; + +static int +list_one_attr(const char *name, const size_t len, void *data, + size_t size, ssize_t *result) +{ + char *p = data + *result; + + *result += len; + if (!size) + return 0; + if (*result > size) + return -ERANGE; + + strcpy(p, name); + p += len; + return 0; +} + +ssize_t +xfs_vn_listxattr(struct dentry *dentry, char *data, size_t size) +{ + struct inode *inode = dentry->d_inode; + struct xfs_inode *ip = XFS_I(inode); + attrlist_cursor_kern_t cursor = { 0 }; + int error, xflags; + ssize_t result; + + xflags = ATTR_KERNAMELS; + if (!size) + xflags |= ATTR_KERNOVAL; + + if (capable(CAP_SYS_ADMIN)) + xflags |= ATTR_KERNFULLS; + else + xflags |= ATTR_KERNORMALS; + + + /* + * First read the regular on-disk attributes. + */ + result = -xfs_attr_list(ip, data, size, xflags, &cursor); + if (result < 0) + return result; + + /* + * Then add the two synthetic ACL attributes. + */ + if (xfs_acl_vhasacl_access(inode)) { + error = list_one_attr(POSIX_ACL_XATTR_ACCESS, + strlen(POSIX_ACL_XATTR_ACCESS) + 1, + data, size, &result); + if (error) + return error; + } + + if (xfs_acl_vhasacl_default(inode)) { + error = list_one_attr(POSIX_ACL_XATTR_DEFAULT, + strlen(POSIX_ACL_XATTR_DEFAULT) + 1, + data, size, &result); + if (error) + return error; + } + + return result; +} Index: linux-2.6-xfs/fs/xfs/xfs_attr.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-05-21 10:06:38.000000000 +0200 @@ -57,11 +57,6 @@ * Provide the external interfaces to manage attribute lists. */ -#define ATTR_SYSCOUNT 2 -static struct attrnames posix_acl_access; -static struct attrnames posix_acl_default; -static struct attrnames *attr_system_names[ATTR_SYSCOUNT]; - /*======================================================================== * Function prototypes for the kernel. *========================================================================*/ @@ -2378,270 +2373,3 @@ xfs_attr_trace_enter(int type, char *whe (void *)a13, (void *)a14, (void *)a15); } #endif /* XFS_ATTR_TRACE */ - - -/*======================================================================== - * System (pseudo) namespace attribute interface routines. - *========================================================================*/ - -STATIC int -posix_acl_access_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vset(vp, data, size, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return xfs_acl_vremove(vp, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vget(vp, data, size, _ACL_TYPE_ACCESS); -} - -STATIC int -posix_acl_access_exists( - bhv_vnode_t *vp) -{ - return xfs_acl_vhasacl_access(vp); -} - -STATIC int -posix_acl_default_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vset(vp, data, size, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return xfs_acl_vget(vp, data, size, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return xfs_acl_vremove(vp, _ACL_TYPE_DEFAULT); -} - -STATIC int -posix_acl_default_exists( - bhv_vnode_t *vp) -{ - return xfs_acl_vhasacl_default(vp); -} - -static struct attrnames posix_acl_access = { - .attr_name = "posix_acl_access", - .attr_namelen = sizeof("posix_acl_access") - 1, - .attr_get = posix_acl_access_get, - .attr_set = posix_acl_access_set, - .attr_remove = posix_acl_access_remove, - .attr_exists = posix_acl_access_exists, -}; - -static struct attrnames posix_acl_default = { - .attr_name = "posix_acl_default", - .attr_namelen = sizeof("posix_acl_default") - 1, - .attr_get = posix_acl_default_get, - .attr_set = posix_acl_default_set, - .attr_remove = posix_acl_default_remove, - .attr_exists = posix_acl_default_exists, -}; - -static struct attrnames *attr_system_names[] = - { &posix_acl_access, &posix_acl_default }; - - -/*======================================================================== - * Namespace-prefix-style attribute name interface routines. - *========================================================================*/ - -STATIC int -attr_generic_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - return -xfs_attr_set(xfs_vtoi(vp), name, data, size, xflags); -} - -STATIC int -attr_generic_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - int error, asize = size; - - error = xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); - if (!error) - return asize; - return -error; -} - -STATIC int -attr_generic_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - return -xfs_attr_remove(xfs_vtoi(vp), name, xflags); -} - -STATIC int -attr_generic_listadd( - attrnames_t *prefix, - attrnames_t *namesp, - void *data, - size_t size, - ssize_t *result) -{ - char *p = data + *result; - - *result += prefix->attr_namelen; - *result += namesp->attr_namelen + 1; - if (!size) - return 0; - if (*result > size) - return -ERANGE; - strcpy(p, prefix->attr_name); - p += prefix->attr_namelen; - strcpy(p, namesp->attr_name); - p += namesp->attr_namelen + 1; - return 0; -} - -STATIC int -attr_system_list( - bhv_vnode_t *vp, - void *data, - size_t size, - ssize_t *result) -{ - attrnames_t *namesp; - int i, error = 0; - - for (i = 0; i < ATTR_SYSCOUNT; i++) { - namesp = attr_system_names[i]; - if (!namesp->attr_exists || !namesp->attr_exists(vp)) - continue; - error = attr_generic_listadd(&attr_system, namesp, - data, size, result); - if (error) - break; - } - return error; -} - -int -attr_generic_list( - bhv_vnode_t *vp, void *data, size_t size, int xflags, ssize_t *result) -{ - attrlist_cursor_kern_t cursor = { 0 }; - int error; - - error = xfs_attr_list(xfs_vtoi(vp), data, size, xflags, &cursor); - if (error > 0) - return -error; - *result = -error; - return attr_system_list(vp, data, size, result); -} - -attrnames_t * -attr_lookup_namespace( - char *name, - struct attrnames **names, - int nnames) -{ - int i; - - for (i = 0; i < nnames; i++) - if (!strncmp(name, names[i]->attr_name, names[i]->attr_namelen)) - return names[i]; - return NULL; -} - -STATIC int -attr_system_set( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - attrnames_t *namesp; - int error; - - if (xflags & ATTR_CREATE) - return -EINVAL; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - error = namesp->attr_set(vp, name, data, size, xflags); - if (!error) - error = vn_revalidate(vp); - return error; -} - -STATIC int -attr_system_get( - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) -{ - attrnames_t *namesp; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - return namesp->attr_get(vp, name, data, size, xflags); -} - -STATIC int -attr_system_remove( - bhv_vnode_t *vp, char *name, int xflags) -{ - attrnames_t *namesp; - - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); - if (!namesp) - return -EOPNOTSUPP; - return namesp->attr_remove(vp, name, xflags); -} - -struct attrnames attr_system = { - .attr_name = "system.", - .attr_namelen = sizeof("system.") - 1, - .attr_flag = ATTR_SYSTEM, - .attr_get = attr_system_get, - .attr_set = attr_system_set, - .attr_remove = attr_system_remove, -}; - -struct attrnames attr_trusted = { - .attr_name = "trusted.", - .attr_namelen = sizeof("trusted.") - 1, - .attr_flag = ATTR_ROOT, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames attr_secure = { - .attr_name = "security.", - .attr_namelen = sizeof("security.") - 1, - .attr_flag = ATTR_SECURE, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames attr_user = { - .attr_name = "user.", - .attr_namelen = sizeof("user.") - 1, - .attr_get = attr_generic_get, - .attr_set = attr_generic_set, - .attr_remove = attr_generic_remove, -}; - -struct attrnames *attr_namespaces[] = - { &attr_system, &attr_trusted, &attr_secure, &attr_user }; Index: linux-2.6-xfs/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-05-21 10:06:38.000000000 +0200 @@ -38,30 +38,14 @@ struct cred; struct xfs_attr_list_context; -typedef int (*attrset_t)(bhv_vnode_t *, char *, void *, size_t, int); -typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); -typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); -typedef int (*attrexists_t)(bhv_vnode_t *); - typedef struct attrnames { char * attr_name; unsigned int attr_namelen; - unsigned int attr_flag; - attrget_t attr_get; - attrset_t attr_set; - attrremove_t attr_remove; - attrexists_t attr_exists; } attrnames_t; -#define ATTR_NAMECOUNT 4 extern struct attrnames attr_user; extern struct attrnames attr_secure; -extern struct attrnames attr_system; extern struct attrnames attr_trusted; -extern struct attrnames *attr_namespaces[ATTR_NAMECOUNT]; - -extern attrnames_t *attr_lookup_namespace(char *, attrnames_t **, int); -extern int attr_generic_list(bhv_vnode_t *, void *, size_t, int, ssize_t *); #define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */ #define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */ @@ -69,7 +53,6 @@ extern int attr_generic_list(bhv_vnode_t #define ATTR_SECURE 0x0008 /* use attrs in security namespace */ #define ATTR_CREATE 0x0010 /* pure create: fail if attr already exists */ #define ATTR_REPLACE 0x0020 /* pure set: fail if attr does not exist */ -#define ATTR_SYSTEM 0x0100 /* use attrs in system (pseudo) namespace */ #define ATTR_KERNACCESS 0x0400 /* [kernel] iaccess, inode held io-locked */ #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 10:14:20.000000000 +0200 @@ -27,6 +27,7 @@ extern const struct file_operations xfs_ extern const struct file_operations xfs_dir_file_operations; extern const struct file_operations xfs_invis_file_operations; +extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 10:14:20.000000000 +0200 @@ -1767,6 +1767,7 @@ xfs_fs_fill_super( goto out_free_mp; sb_min_blocksize(sb, BBSIZE); + sb->s_xattr = xfs_xattr_handlers; sb->s_export_op = &xfs_export_operations; sb->s_qcop = &xfs_quotactl_operations; sb->s_op = &xfs_super_operations; Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 09:59:53.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 10:14:20.000000000 +0200 @@ -81,6 +81,7 @@ extern void xfs_flush_device(struct xfs_ extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); extern const struct export_operations xfs_export_operations; +extern struct xattr_handler *xfs_xattr_handlers[]; #define XFS_M(sb) ((struct xfs_mount *)((sb)->s_fs_info)) From owner-xfs@oss.sgi.com Wed May 21 01:18:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:18:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8InSB002509 for ; Wed, 21 May 2008 01:18:49 -0700 X-ASG-Debug-ID: 1211357979-5a6302180000-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 A6638EE3AAA; Wed, 21 May 2008 01:19:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id khXVAaITjPEz5sDK; Wed, 21 May 2008 01:19:39 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JyjXv-0005V3-1Z; Wed, 21 May 2008 08:19:39 +0000 Date: Wed, 21 May 2008 04:19:39 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Remove kmem_free build warnings Subject: Re: REVIEW: Remove kmem_free build warnings Message-ID: <20080521081939.GA15771@infradead.org> References: <20080521080648.82DCF58C4C29@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211357979 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.1, rules version 3.1.50983 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16053 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs Looks good, although you might want to pick up realloc as in my patch while you're at it :) On Wed, May 21, 2008 at 06:10:08PM +1000, Barry Naujok wrote: > > > =========================================================================== > fs/xfs/linux-2.6/kmem.c > =========================================================================== > > --- a/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:06:48.000000000 +1000 > +++ b/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:04:44.400231547 +1000 > @@ -90,7 +90,7 @@ kmem_zalloc_greedy(size_t *size, size_t > } > > void > -kmem_free(void *ptr) > +kmem_free(const void *ptr) > { > if (((unsigned long)ptr < VMALLOC_START) || > ((unsigned long)ptr >= VMALLOC_END)) { > > =========================================================================== > fs/xfs/linux-2.6/kmem.h > =========================================================================== > > --- a/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:06:48.000000000 +1000 > +++ b/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:05:33.673925302 +1000 > @@ -58,7 +58,7 @@ extern void *kmem_alloc(size_t, unsigned > extern void *kmem_zalloc(size_t, unsigned int __nocast); > extern void *kmem_zalloc_greedy(size_t *, size_t, size_t, unsigned int > __nocast); > extern void *kmem_realloc(void *, size_t, size_t, unsigned int __nocast); > -extern void kmem_free(void *); > +extern void kmem_free(const void *); > > /* > * Zone interfaces > > > ---end quoted text--- From owner-xfs@oss.sgi.com Wed May 21 01:20:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:20:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_62, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8KfSf002959 for ; Wed, 21 May 2008 01:20:42 -0700 X-ASG-Debug-ID: 1211358089-41ef001d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AC2EF1B9651D for ; Wed, 21 May 2008 01:21:29 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 8WxNC14QIb072q7T for ; Wed, 21 May 2008 01:21:29 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L8LLF3003461 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:21:21 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L8LLB7003459 for xfs@oss.sgi.com; Wed, 21 May 2008 10:21:21 +0200 Date: Wed, 21 May 2008 10:21:21 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] sanitize xfs_initialize_vnode Subject: Re: [PATCH] sanitize xfs_initialize_vnode Message-ID: <20080521082121.GA3215@lst.de> References: <20080502105215.GA17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080502105215.GA17870@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211358090 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.1, rules version 3.1.50984 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16054 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:52:15PM +0200, Christoph Hellwig wrote: > Sanitize setting up the Linux indode. > > Setting up the xfs_inode <-> inode link is opencoded in xfs_iget_core > now because that's the only place it needs to be done, > xfs_initialize_vnode is renamed to xfs_setup_inode and loses all > superflous paramaters. The check for I_NEW is removed because it always > is true and the di_mode check moves into xfs_iget_core because it's only > needed there. > > xfs_set_inodeops and xfs_revalidate_inode are merged into > xfs_setup_inode and the whole things is moved into xfs_iops.c where it > belongs. Updated to apply ontop of the case-insensitive filename changes. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:14:54.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:17:36.000000000 +0200 @@ -813,7 +813,7 @@ out_error: return error; } -const struct inode_operations xfs_inode_operations = { +static const struct inode_operations xfs_inode_operations = { .permission = xfs_vn_permission, .truncate = xfs_vn_truncate, .getattr = xfs_vn_getattr, @@ -825,7 +825,7 @@ const struct inode_operations xfs_inode_ .fallocate = xfs_vn_fallocate, }; -const struct inode_operations xfs_dir_inode_operations = { +static const struct inode_operations xfs_dir_inode_operations = { .create = xfs_vn_create, .lookup = xfs_vn_lookup, .link = xfs_vn_link, @@ -844,7 +844,7 @@ const struct inode_operations xfs_dir_in .listxattr = xfs_vn_listxattr, }; -const struct inode_operations xfs_dir_ci_inode_operations = { +static const struct inode_operations xfs_dir_ci_inode_operations = { .create = xfs_vn_create, .lookup = xfs_vn_ci_lookup, .link = xfs_vn_link, @@ -863,7 +863,7 @@ const struct inode_operations xfs_dir_ci .listxattr = xfs_vn_listxattr, }; -const struct inode_operations xfs_symlink_inode_operations = { +static const struct inode_operations xfs_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = xfs_vn_follow_link, .put_link = xfs_vn_put_link, @@ -875,3 +875,98 @@ const struct inode_operations xfs_symlin .removexattr = generic_removexattr, .listxattr = xfs_vn_listxattr, }; + +STATIC void +xfs_diflags_to_iflags( + struct inode *inode, + struct xfs_inode *ip) +{ + if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) + inode->i_flags |= S_IMMUTABLE; + else + inode->i_flags &= ~S_IMMUTABLE; + if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) + inode->i_flags |= S_APPEND; + else + inode->i_flags &= ~S_APPEND; + if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) + inode->i_flags |= S_SYNC; + else + inode->i_flags &= ~S_SYNC; + if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) + inode->i_flags |= S_NOATIME; + else + inode->i_flags &= ~S_NOATIME; +} + +/* + * Initialize the Linux inode, set up the operation vectors and + * unlock the inode. + * + * When reading existing inodes from disk this is called directly + * from xfs_iget, when creating a new inode it is called from + * xfs_ialloc after setting up the inode. + */ +void +xfs_setup_inode( + struct xfs_inode *ip) +{ + struct inode *inode = ip->i_vnode; + + inode->i_mode = ip->i_d.di_mode; + inode->i_nlink = ip->i_d.di_nlink; + inode->i_uid = ip->i_d.di_uid; + inode->i_gid = ip->i_d.di_gid; + + switch (inode->i_mode & S_IFMT) { + case S_IFBLK: + case S_IFCHR: + inode->i_rdev = + MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, + sysv_minor(ip->i_df.if_u2.if_rdev)); + break; + default: + inode->i_rdev = 0; + break; + } + + inode->i_generation = ip->i_d.di_gen; + i_size_write(inode, ip->i_d.di_size); + inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; + inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; + inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; + inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; + inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; + inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; + xfs_diflags_to_iflags(inode, ip); + xfs_iflags_clear(ip, XFS_IMODIFIED); + + switch (inode->i_mode & S_IFMT) { + case S_IFREG: + inode->i_op = &xfs_inode_operations; + inode->i_fop = &xfs_file_operations; + inode->i_mapping->a_ops = &xfs_address_space_operations; + break; + case S_IFDIR: + if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb)) + inode->i_op = &xfs_dir_ci_inode_operations; + else + inode->i_op = &xfs_dir_inode_operations; + inode->i_fop = &xfs_dir_file_operations; + break; + case S_IFLNK: + inode->i_op = &xfs_symlink_inode_operations; + if (!(ip->i_df.if_flags & XFS_IFINLINE)) + inode->i_mapping->a_ops = &xfs_address_space_operations; + break; + default: + inode->i_op = &xfs_inode_operations; + init_special_inode(inode, inode->i_mode, inode->i_rdev); + break; + } + + xfs_iflags_clear(ip, XFS_INEW); + barrier(); + + unlock_new_inode(inode); +} Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 10:17:26.000000000 +0200 @@ -18,21 +18,17 @@ #ifndef __XFS_IOPS_H__ #define __XFS_IOPS_H__ -extern const struct inode_operations xfs_inode_operations; -extern const struct inode_operations xfs_dir_inode_operations; -extern const struct inode_operations xfs_dir_ci_inode_operations; -extern const struct inode_operations xfs_symlink_inode_operations; - extern const struct file_operations xfs_file_operations; extern const struct file_operations xfs_dir_file_operations; extern const struct file_operations xfs_invis_file_operations; extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); -struct xfs_inode; extern void xfs_ichgtime(struct xfs_inode *, int); extern void xfs_ichgtime_fast(struct xfs_inode *, struct inode *, int); +extern void xfs_setup_inode(struct xfs_inode *); + #define xfs_vtoi(vp) \ ((struct xfs_inode *)vn_to_inode(vp)->i_private) Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-21 10:17:26.000000000 +0200 @@ -155,12 +155,9 @@ EXPORT_SYMBOL(kmem_zone_free); EXPORT_SYMBOL(kmem_zone_init); EXPORT_SYMBOL(kmem_zone_zalloc); EXPORT_SYMBOL(xfs_address_space_operations); -EXPORT_SYMBOL(xfs_dir_inode_operations); EXPORT_SYMBOL(xfs_dir_file_operations); -EXPORT_SYMBOL(xfs_inode_operations); EXPORT_SYMBOL(xfs_file_operations); EXPORT_SYMBOL(xfs_invis_file_operations); -EXPORT_SYMBOL(xfs_symlink_inode_operations); EXPORT_SYMBOL(xfs_buf_delwri_dequeue); EXPORT_SYMBOL(_xfs_buf_find); EXPORT_SYMBOL(xfs_buf_iostart); Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 10:17:26.000000000 +0200 @@ -558,118 +558,6 @@ xfs_max_file_offset( return (((__uint64_t)pagefactor) << bitshift) - 1; } -STATIC_INLINE void -xfs_set_inodeops( - struct inode *inode) -{ - switch (inode->i_mode & S_IFMT) { - case S_IFREG: - inode->i_op = &xfs_inode_operations; - inode->i_fop = &xfs_file_operations; - inode->i_mapping->a_ops = &xfs_address_space_operations; - break; - case S_IFDIR: - if (xfs_sb_version_hasasciici(&XFS_M(inode->i_sb)->m_sb)) - inode->i_op = &xfs_dir_ci_inode_operations; - else - inode->i_op = &xfs_dir_inode_operations; - inode->i_fop = &xfs_dir_file_operations; - break; - case S_IFLNK: - inode->i_op = &xfs_symlink_inode_operations; - if (!(XFS_I(inode)->i_df.if_flags & XFS_IFINLINE)) - inode->i_mapping->a_ops = &xfs_address_space_operations; - break; - default: - inode->i_op = &xfs_inode_operations; - init_special_inode(inode, inode->i_mode, inode->i_rdev); - break; - } -} - -STATIC_INLINE void -xfs_revalidate_inode( - xfs_mount_t *mp, - bhv_vnode_t *vp, - xfs_inode_t *ip) -{ - struct inode *inode = vn_to_inode(vp); - - inode->i_mode = ip->i_d.di_mode; - inode->i_nlink = ip->i_d.di_nlink; - inode->i_uid = ip->i_d.di_uid; - inode->i_gid = ip->i_d.di_gid; - - switch (inode->i_mode & S_IFMT) { - case S_IFBLK: - case S_IFCHR: - inode->i_rdev = - MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff, - sysv_minor(ip->i_df.if_u2.if_rdev)); - break; - default: - inode->i_rdev = 0; - break; - } - - inode->i_generation = ip->i_d.di_gen; - i_size_write(inode, ip->i_d.di_size); - inode->i_atime.tv_sec = ip->i_d.di_atime.t_sec; - inode->i_atime.tv_nsec = ip->i_d.di_atime.t_nsec; - inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec; - inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec; - inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec; - inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec; - if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE) - inode->i_flags |= S_IMMUTABLE; - else - inode->i_flags &= ~S_IMMUTABLE; - if (ip->i_d.di_flags & XFS_DIFLAG_APPEND) - inode->i_flags |= S_APPEND; - else - inode->i_flags &= ~S_APPEND; - if (ip->i_d.di_flags & XFS_DIFLAG_SYNC) - inode->i_flags |= S_SYNC; - else - inode->i_flags &= ~S_SYNC; - if (ip->i_d.di_flags & XFS_DIFLAG_NOATIME) - inode->i_flags |= S_NOATIME; - else - inode->i_flags &= ~S_NOATIME; - xfs_iflags_clear(ip, XFS_IMODIFIED); -} - -void -xfs_initialize_vnode( - struct xfs_mount *mp, - bhv_vnode_t *vp, - struct xfs_inode *ip) -{ - struct inode *inode = vn_to_inode(vp); - - if (!ip->i_vnode) { - ip->i_vnode = vp; - inode->i_private = ip; - } - - /* - * We need to set the ops vectors, and unlock the inode, but if - * we have been called during the new inode create process, it is - * too early to fill in the Linux inode. We will get called a - * second time once the inode is properly set up, and then we can - * finish our work. - */ - if (ip->i_d.di_mode != 0 && (inode->i_state & I_NEW)) { - xfs_revalidate_inode(mp, vp, ip); - xfs_set_inodeops(inode); - - xfs_iflags_clear(ip, XFS_INEW); - barrier(); - - unlock_new_inode(inode); - } -} - int xfs_blkdev_get( xfs_mount_t *mp, Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 10:17:26.000000000 +0200 @@ -72,9 +72,6 @@ struct block_device; extern __uint64_t xfs_max_file_offset(unsigned int); -extern void xfs_initialize_vnode(struct xfs_mount *mp, bhv_vnode_t *vp, - struct xfs_inode *ip); - extern void xfs_flush_inode(struct xfs_inode *); extern void xfs_flush_device(struct xfs_inode *); Index: linux-2.6-xfs/fs/xfs/xfs_iget.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_iget.c 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_iget.c 2008-05-21 10:17:26.000000000 +0200 @@ -288,10 +288,17 @@ finish_inode: *ipp = ip; /* + * Set up the Linux with the Linux inode. + */ + ip->i_vnode = inode; + inode->i_private = ip; + + /* * If we have a real type for an on-disk inode, we can set ops(&unlock) * now. If it's a new inode being created, xfs_ialloc will handle it. */ - xfs_initialize_vnode(mp, inode, ip); + if (ip->i_d.di_mode != 0) + xfs_setup_inode(ip); return 0; } Index: linux-2.6-xfs/fs/xfs/xfs_inode.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_inode.c 2008-05-21 10:14:20.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_inode.c 2008-05-21 10:17:26.000000000 +0200 @@ -1046,7 +1046,6 @@ xfs_ialloc( { xfs_ino_t ino; xfs_inode_t *ip; - bhv_vnode_t *vp; uint flags; int error; @@ -1077,7 +1076,6 @@ xfs_ialloc( } ASSERT(ip != NULL); - vp = XFS_ITOV(ip); ip->i_d.di_mode = (__uint16_t)mode; ip->i_d.di_onlink = 0; ip->i_d.di_nlink = nlink; @@ -1220,7 +1218,7 @@ xfs_ialloc( xfs_trans_log_inode(tp, ip, flags); /* now that we have an i_mode we can setup inode ops and unlock */ - xfs_initialize_vnode(tp->t_mountp, vp, ip); + xfs_setup_inode(ip); *ipp = ip; return 0; From owner-xfs@oss.sgi.com Wed May 21 01:25:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:25:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_65 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4L8P8HG003520 for ; Wed, 21 May 2008 01:25:08 -0700 X-ASG-Debug-ID: 1211358356-328902240000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0082F1991DD for ; Wed, 21 May 2008 01:25:56 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id C4SgwCL8le9iRCCa for ; Wed, 21 May 2008 01:25:56 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4L8PmF3004363 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 21 May 2008 10:25:48 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4L8Pm9d004360 for xfs@oss.sgi.com; Wed, 21 May 2008 10:25:48 +0200 Date: Wed, 21 May 2008 10:25:48 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] merge xfs_rmdir into xfs_remove Subject: Re: [PATCH 1/2] merge xfs_rmdir into xfs_remove Message-ID: <20080521082548.GB3215@lst.de> References: <20080502105757.GB17870@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080502105757.GB17870@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211358358 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.1, rules version 3.1.50983 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16055 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 02, 2008 at 12:57:57PM +0200, Christoph Hellwig wrote: > xfs_remove and xfs_rmdir are almost the same with a little more work > performed in xfs_rmdir due to the . and .. entries. This patch merges > xfs_rmdir into xfs_remove and performs these actions conditionally. > > Also clean up the error handling which was a nightmare in both versions > before. Updated for the case-insensitive filename changes. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.c 2008-05-21 10:10:30.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.c 2008-05-21 10:21:31.000000000 +0200 @@ -2116,13 +2116,6 @@ again: #endif } -#ifdef DEBUG -#define REMOVE_DEBUG_TRACE(x) {remove_which_error_return = (x);} -int remove_which_error_return = 0; -#else /* ! DEBUG */ -#define REMOVE_DEBUG_TRACE(x) -#endif /* ! DEBUG */ - int xfs_remove( xfs_inode_t *dp, @@ -2131,6 +2124,7 @@ xfs_remove( { xfs_mount_t *mp = dp->i_mount; xfs_trans_t *tp = NULL; + int is_dir = S_ISDIR(ip->i_d.di_mode); int error = 0; xfs_bmap_free_t free_list; xfs_fsblock_t first_block; @@ -2138,8 +2132,11 @@ xfs_remove( int committed; int link_zero; uint resblks; + uint trans; + uint log_count; xfs_itrace_entry(dp); + xfs_itrace_entry(ip); if (XFS_FORCED_SHUTDOWN(mp)) return XFS_ERROR(EIO); @@ -2152,19 +2149,25 @@ xfs_remove( return error; } - xfs_itrace_entry(ip); - xfs_itrace_ref(ip); - error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error) - error = XFS_QM_DQATTACH(mp, ip, 0); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); + if (error) + goto std_return; + + error = XFS_QM_DQATTACH(mp, ip, 0); + if (error) goto std_return; + + if (is_dir) { + trans = XFS_TRANS_RMDIR; + log_count = XFS_DEFAULT_LOG_COUNT; + } else { + trans = XFS_TRANS_REMOVE; + log_count = XFS_REMOVE_LOG_COUNT; } - tp = xfs_trans_alloc(mp, XFS_TRANS_REMOVE); + tp = xfs_trans_alloc(mp, trans); cancel_flags = XFS_TRANS_RELEASE_LOG_RES; + /* * We try to get the real space reservation first, * allowing for directory btree deletion(s) implying @@ -2176,25 +2179,21 @@ xfs_remove( */ resblks = XFS_REMOVE_SPACE_RES(mp); error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + XFS_TRANS_PERM_LOG_RES, log_count); if (error == ENOSPC) { resblks = 0; error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_REMOVE_LOG_COUNT); + XFS_TRANS_PERM_LOG_RES, log_count); } if (error) { ASSERT(error != ENOSPC); - REMOVE_DEBUG_TRACE(__LINE__); - xfs_trans_cancel(tp, 0); - return error; + cancel_flags = 0; + goto out_trans_cancel; } error = xfs_lock_dir_and_entry(dp, ip); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - xfs_trans_cancel(tp, cancel_flags); - goto std_return; - } + if (error) + goto out_trans_cancel; /* * At this point, we've gotten both the directory and the entry @@ -2207,6 +2206,21 @@ xfs_remove( xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); /* + * If we're removing a directory perform some additional validation. + */ + if (is_dir) { + ASSERT(ip->i_d.di_nlink >= 2); + if (ip->i_d.di_nlink != 2) { + error = XFS_ERROR(ENOTEMPTY); + goto out_trans_cancel; + } + if (!xfs_dir_isempty(ip)) { + error = XFS_ERROR(ENOTEMPTY); + goto out_trans_cancel; + } + } + + /* * Entry must exist since we did a lookup in xfs_lock_dir_and_entry. */ XFS_BMAP_INIT(&free_list, &first_block); @@ -2214,39 +2228,64 @@ xfs_remove( &first_block, &free_list, resblks); if (error) { ASSERT(error != ENOENT); - REMOVE_DEBUG_TRACE(__LINE__); - goto error1; + goto out_bmap_cancel; } xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); + /* + * Bump the in memory generation count on the parent + * directory so that other can know that it has changed. + */ dp->i_gen++; xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); - error = xfs_droplink(tp, ip); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto error1; + if (is_dir) { + /* + * Drop the link from ip's "..". + */ + error = xfs_droplink(tp, dp); + if (error) + goto out_bmap_cancel; + + /* + * Drop the link from dp to ip. + */ + error = xfs_droplink(tp, ip); + if (error) + goto out_bmap_cancel; + } else { + /* + * When removing a non-directory we need to log the parent + * inode here for the i_gen update. For a directory this is + * done implicitly by the xfs_droplink call for the ".." entry. + */ + xfs_trans_log_inode(tp, dp, XFS_ILOG_CORE); } - /* Determine if this is the last link while + /* + * Drop the "." link from ip to self. + */ + error = xfs_droplink(tp, ip); + if (error) + goto out_bmap_cancel; + + /* + * Determine if this is the last link while * we are in the transaction. */ - link_zero = (ip)->i_d.di_nlink==0; + link_zero = (ip->i_d.di_nlink == 0); /* * If this is a synchronous mount, make sure that the * remove transaction goes to disk before returning to * the user. */ - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { + if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) xfs_trans_set_sync(tp); - } error = xfs_bmap_finish(&tp, &free_list, &committed); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto error_rele; - } + if (error) + goto out_bmap_cancel; error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); if (error) @@ -2258,39 +2297,27 @@ xfs_remove( * will get killed on last close in xfs_close() so we don't * have to worry about that. */ - if (link_zero && xfs_inode_is_filestream(ip)) + if (!is_dir && link_zero && xfs_inode_is_filestream(ip)) xfs_filestream_deassociate(ip); xfs_itrace_exit(ip); + xfs_itrace_exit(dp); -/* Fall through to std_return with error = 0 */ std_return: if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name->name, NULL, ip->i_d.di_mode, error, 0); + XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, dp, DM_RIGHT_NULL, + NULL, DM_RIGHT_NULL, name->name, NULL, + ip->i_d.di_mode, error, 0); } + return error; - error1: + out_bmap_cancel: xfs_bmap_cancel(&free_list); cancel_flags |= XFS_TRANS_ABORT; + out_trans_cancel: xfs_trans_cancel(tp, cancel_flags); goto std_return; - - error_rele: - /* - * In this case make sure to not release the inode until after - * the current transaction is aborted. Releasing it beforehand - * can cause us to go to xfs_inactive and start a recursive - * transaction which can easily deadlock with the current one. - */ - xfs_bmap_cancel(&free_list); - cancel_flags |= XFS_TRANS_ABORT; - xfs_trans_cancel(tp, cancel_flags); - - goto std_return; } int @@ -2656,186 +2683,6 @@ std_return: } int -xfs_rmdir( - xfs_inode_t *dp, - struct xfs_name *name, - xfs_inode_t *cdp) -{ - xfs_mount_t *mp = dp->i_mount; - xfs_trans_t *tp; - int error; - xfs_bmap_free_t free_list; - xfs_fsblock_t first_block; - int cancel_flags; - int committed; - int last_cdp_link; - uint resblks; - - xfs_itrace_entry(dp); - - if (XFS_FORCED_SHUTDOWN(mp)) - return XFS_ERROR(EIO); - - if (DM_EVENT_ENABLED(dp, DM_EVENT_REMOVE)) { - error = XFS_SEND_NAMESP(mp, DM_EVENT_REMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, name->name, - NULL, cdp->i_d.di_mode, 0, 0); - if (error) - return XFS_ERROR(error); - } - - /* - * Get the dquots for the inodes. - */ - error = XFS_QM_DQATTACH(mp, dp, 0); - if (!error) - error = XFS_QM_DQATTACH(mp, cdp, 0); - if (error) { - REMOVE_DEBUG_TRACE(__LINE__); - goto std_return; - } - - tp = xfs_trans_alloc(mp, XFS_TRANS_RMDIR); - cancel_flags = XFS_TRANS_RELEASE_LOG_RES; - /* - * We try to get the real space reservation first, - * allowing for directory btree deletion(s) implying - * possible bmap insert(s). If we can't get the space - * reservation then we use 0 instead, and avoid the bmap - * btree insert(s) in the directory code by, if the bmap - * insert tries to happen, instead trimming the LAST - * block from the directory. - */ - resblks = XFS_REMOVE_SPACE_RES(mp); - error = xfs_trans_reserve(tp, resblks, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); - if (error == ENOSPC) { - resblks = 0; - error = xfs_trans_reserve(tp, 0, XFS_REMOVE_LOG_RES(mp), 0, - XFS_TRANS_PERM_LOG_RES, XFS_DEFAULT_LOG_COUNT); - } - if (error) { - ASSERT(error != ENOSPC); - cancel_flags = 0; - goto error_return; - } - XFS_BMAP_INIT(&free_list, &first_block); - - /* - * Now lock the child directory inode and the parent directory - * inode in the proper order. This will take care of validating - * that the directory entry for the child directory inode has - * not changed while we were obtaining a log reservation. - */ - error = xfs_lock_dir_and_entry(dp, cdp); - if (error) { - xfs_trans_cancel(tp, cancel_flags); - goto std_return; - } - - IHOLD(dp); - xfs_trans_ijoin(tp, dp, XFS_ILOCK_EXCL); - - IHOLD(cdp); - xfs_trans_ijoin(tp, cdp, XFS_ILOCK_EXCL); - - ASSERT(cdp->i_d.di_nlink >= 2); - if (cdp->i_d.di_nlink != 2) { - error = XFS_ERROR(ENOTEMPTY); - goto error_return; - } - if (!xfs_dir_isempty(cdp)) { - error = XFS_ERROR(ENOTEMPTY); - goto error_return; - } - - error = xfs_dir_removename(tp, dp, name, cdp->i_ino, - &first_block, &free_list, resblks); - if (error) - goto error1; - - xfs_ichgtime(dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); - - /* - * Bump the in memory generation count on the parent - * directory so that other can know that it has changed. - */ - dp->i_gen++; - - /* - * Drop the link from cdp's "..". - */ - error = xfs_droplink(tp, dp); - if (error) { - goto error1; - } - - /* - * Drop the link from dp to cdp. - */ - error = xfs_droplink(tp, cdp); - if (error) { - goto error1; - } - - /* - * Drop the "." link from cdp to self. - */ - error = xfs_droplink(tp, cdp); - if (error) { - goto error1; - } - - /* Determine these before committing transaction */ - last_cdp_link = (cdp)->i_d.di_nlink==0; - - /* - * If this is a synchronous mount, make sure that the - * rmdir transaction goes to disk before returning to - * the user. - */ - if (mp->m_flags & (XFS_MOUNT_WSYNC|XFS_MOUNT_DIRSYNC)) { - xfs_trans_set_sync(tp); - } - - error = xfs_bmap_finish (&tp, &free_list, &committed); - if (error) { - xfs_bmap_cancel(&free_list); - xfs_trans_cancel(tp, (XFS_TRANS_RELEASE_LOG_RES | - XFS_TRANS_ABORT)); - goto std_return; - } - - error = xfs_trans_commit(tp, XFS_TRANS_RELEASE_LOG_RES); - if (error) { - goto std_return; - } - - - /* Fall through to std_return with error = 0 or the errno - * from xfs_trans_commit. */ - std_return: - if (DM_EVENT_ENABLED(dp, DM_EVENT_POSTREMOVE)) { - (void) XFS_SEND_NAMESP(mp, DM_EVENT_POSTREMOVE, - dp, DM_RIGHT_NULL, - NULL, DM_RIGHT_NULL, - name->name, NULL, cdp->i_d.di_mode, - error, 0); - } - return error; - - error1: - xfs_bmap_cancel(&free_list); - cancel_flags |= XFS_TRANS_ABORT; - /* FALLTHROUGH */ - - error_return: - xfs_trans_cancel(tp, cancel_flags); - goto std_return; -} - -int xfs_symlink( xfs_inode_t *dp, struct xfs_name *link_name, Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:17:36.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:21:53.000000000 +0200 @@ -252,8 +252,7 @@ STATIC void xfs_cleanup_inode( struct inode *dir, struct inode *inode, - struct dentry *dentry, - int mode) + struct dentry *dentry) { struct xfs_name teardown; @@ -264,10 +263,7 @@ xfs_cleanup_inode( */ xfs_dentry_to_name(&teardown, dentry); - if (S_ISDIR(mode)) - xfs_rmdir(XFS_I(dir), &teardown, XFS_I(inode)); - else - xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); + xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); iput(inode); } @@ -349,7 +345,7 @@ xfs_vn_mknod( return -error; out_cleanup_inode: - xfs_cleanup_inode(dir, inode, dentry, mode); + xfs_cleanup_inode(dir, inode, dentry); out_free_acl: if (default_acl) _ACL_FREE(default_acl); @@ -514,31 +510,12 @@ xfs_vn_symlink( return 0; out_cleanup_inode: - xfs_cleanup_inode(dir, inode, dentry, 0); + xfs_cleanup_inode(dir, inode, dentry); out: return -error; } STATIC int -xfs_vn_rmdir( - struct inode *dir, - struct dentry *dentry) -{ - struct inode *inode = dentry->d_inode; - struct xfs_name name; - int error; - - xfs_dentry_to_name(&name, dentry); - - error = xfs_rmdir(XFS_I(dir), &name, XFS_I(inode)); - if (likely(!error)) { - xfs_validate_fields(inode); - xfs_validate_fields(dir); - } - return -error; -} - -STATIC int xfs_vn_rename( struct inode *odir, struct dentry *odentry, @@ -832,7 +809,13 @@ static const struct inode_operations xfs .unlink = xfs_vn_unlink, .symlink = xfs_vn_symlink, .mkdir = xfs_vn_mkdir, - .rmdir = xfs_vn_rmdir, + /* + * Yes, XFS uses the same method for rmdir and unlink. + * + * There are some subtile differences deeper in the code, + * but we use S_ISDIR to check for those. + */ + .rmdir = xfs_vn_unlink, .mknod = xfs_vn_mknod, .rename = xfs_vn_rename, .permission = xfs_vn_permission, @@ -851,7 +834,13 @@ static const struct inode_operations xfs .unlink = xfs_vn_unlink, .symlink = xfs_vn_symlink, .mkdir = xfs_vn_mkdir, - .rmdir = xfs_vn_rmdir, + /* + * Yes, XFS uses the same method for rmdir and unlink. + * + * There are some subtile differences deeper in the code, + * but we use S_ISDIR to check for those. + */ + .rmdir = xfs_vn_unlink, .mknod = xfs_vn_mknod, .rename = xfs_vn_rename, .permission = xfs_vn_permission, Index: linux-2.6-xfs/fs/xfs/xfs_vnodeops.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vnodeops.h 2008-05-21 10:10:30.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vnodeops.h 2008-05-21 10:21:31.000000000 +0200 @@ -31,8 +31,6 @@ int xfs_link(struct xfs_inode *tdp, stru struct xfs_name *target_name); int xfs_mkdir(struct xfs_inode *dp, struct xfs_name *dir_name, mode_t mode, struct xfs_inode **ipp, struct cred *credp); -int xfs_rmdir(struct xfs_inode *dp, struct xfs_name *name, - struct xfs_inode *cdp); int xfs_readdir(struct xfs_inode *dp, void *dirent, size_t bufsize, xfs_off_t *offset, filldir_t filldir); int xfs_symlink(struct xfs_inode *dp, struct xfs_name *link_name, From owner-xfs@oss.sgi.com Wed May 21 01:37:00 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:37:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L8avbE004567 for ; Wed, 21 May 2008 01:36:59 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA04099; Wed, 21 May 2008 18:37:43 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 0909158C4C29; Wed, 21 May 2008 18:37:42 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981498 - kmem_free/realloc should use const void * Message-Id: <20080521083743.0909158C4C29@chook.melbourne.sgi.com> Date: Wed, 21 May 2008 18:37:42 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16056 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs kmem_free and kmem_realloc to use const void * Date: Wed May 21 18:37:13 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: hch@infradead.org The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31212a fs/xfs/linux-2.6/kmem.h - 1.47 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/kmem.h.diff?r1=text&tr1=1.47&r2=text&tr2=1.46&f=h - kmem_free and kmem_realloc to use const void * fs/xfs/linux-2.6/kmem.c - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/kmem.c.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h - kmem_free and kmem_realloc to use const void * From owner-xfs@oss.sgi.com Wed May 21 01:38:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 01:38:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4L8csM1004979 for ; Wed, 21 May 2008 01:38:56 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA04157; Wed, 21 May 2008 18:39:37 +1000 To: "Christoph Hellwig" Subject: Re: REVIEW: Remove kmem_free build warnings From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080521080648.82DCF58C4C29@chook.melbourne.sgi.com> <20080521081939.GA15771@infradead.org> Date: Wed, 21 May 2008 18:41:52 +1000 Message-ID: In-Reply-To: <20080521081939.GA15771@infradead.org> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Base64 to 8bit by oss.sgi.com id m4L8cvM1004996 X-archive-position: 16057 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 21 May 2008 18:19:39 +1000, Christoph Hellwig wrote: > Looks good, although you might want to pick up realloc as in my patch > while you're at it :) Done and pushed to oss. > On Wed, May 21, 2008 at 06:10:08PM +1000, Barry Naujok wrote: >> >> >> =========================================================================== >> fs/xfs/linux-2.6/kmem.c >> =========================================================================== >> >> --- a/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:06:48.000000000 +1000 >> +++ b/fs/xfs/linux-2.6/kmem.c 2008-05-21 18:04:44.400231547 +1000 >> @@ -90,7 +90,7 @@ kmem_zalloc_greedy(size_t *size, size_t >> } >> >> void >> -kmem_free(void *ptr) >> +kmem_free(const void *ptr) >> { >> if (((unsigned long)ptr < VMALLOC_START) || >> ((unsigned long)ptr >= VMALLOC_END)) { >> >> =========================================================================== >> fs/xfs/linux-2.6/kmem.h >> =========================================================================== >> >> --- a/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:06:48.000000000 +1000 >> +++ b/fs/xfs/linux-2.6/kmem.h 2008-05-21 18:05:33.673925302 +1000 >> @@ -58,7 +58,7 @@ extern void *kmem_alloc(size_t, unsigned >> extern void *kmem_zalloc(size_t, unsigned int __nocast); >> extern void *kmem_zalloc_greedy(size_t *, size_t, size_t, unsigned int >> __nocast); >> extern void *kmem_realloc(void *, size_t, size_t, unsigned int >> __nocast); >> -extern void kmem_free(void *); >> +extern void kmem_free(const void *); >> >> /* >> * Zone interfaces >> >> >> > ---end quoted text--- > > From owner-xfs@oss.sgi.com Wed May 21 10:14:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 10:14:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_50 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4LHEQ6a011317 for ; Wed, 21 May 2008 10:14:28 -0700 X-ASG-Debug-ID: 1211390106-151502d40000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc3-s20.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B0CE6B8E6DF for ; Wed, 21 May 2008 10:15:06 -0700 (PDT) Received: from bay0-omc3-s20.bay0.hotmail.com (bay0-omc3-s20.bay0.hotmail.com [65.54.246.220]) by cuda.sgi.com with ESMTP id f5AWkBhBm64n70AY for ; Wed, 21 May 2008 10:15:06 -0700 (PDT) Received: from hotmail.com ([64.4.39.12]) by bay0-omc3-s20.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Wed, 21 May 2008 10:15:06 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 21 May 2008 10:15:05 -0700 Message-ID: Received: from 65.55.160.246 by BAY140-DAV2.phx.gbl with DAV; Wed, 21 May 2008 17:15:04 +0000 X-Originating-IP: [65.55.160.246] X-Originating-Email: [sihomageryk46@hotmail.com] X-Sender: sihomageryk46@hotmail.com thread-index: Aci7ZjWbFBlnTwcLTjCZtoXds93wDA== Thread-Topic: You will not find a better watch copy for less From: "sihomageryk46" To: , , , , Cc: X-ASG-Orig-Subj: You will not find a better watch copy for less Subject: You will not find a better watch copy for less Date: Wed, 21 May 2008 13:15:04 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.3959 X-OriginalArrivalTime: 21 May 2008 17:15:05.0820 (UTC) FILETIME=[36A991C0:01C8BB66] X-Barracuda-Connect: bay0-omc3-s20.bay0.hotmail.com[65.54.246.220] X-Barracuda-Start-Time: 1211390106 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2105 1.0000 -0.7727 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.77 X-Barracuda-Spam-Status: No, SCORE=-0.77 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51018 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16058 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sihomageryk46@hotmail.com Precedence: bulk X-list: xfs We have the best watch copies on the web All the best brands http://vesiguvyzyf73.blogspot.com From owner-xfs@oss.sgi.com Wed May 21 17:14:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 17:14:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M0EPa4019889 for ; Wed, 21 May 2008 17:14:27 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA24393; Thu, 22 May 2008 10:15:15 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 6F3A558C4C29; Thu, 22 May 2008 10:15:15 +1000 (EST) Date: Thu, 22 May 2008 10:15:15 +1000 To: xfs-dev@sgi.com, xfs@oss.sgi.com Subject: REVIEW: Forgot to remove d_add call when taking out drop_negative_children code User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080522001515.6F3A558C4C29@chook.melbourne.sgi.com> From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16059 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs --- a/fs/xfs/linux-2.6/xfs_iops.c 2008-05-22 10:15:15.000000000 +1000 +++ b/fs/xfs/linux-2.6/xfs_iops.c 2008-05-22 10:12:29.961204467 +1000 @@ -420,7 +420,11 @@ xfs_vn_ci_lookup( if (unlikely(error)) { if (unlikely(error != ENOENT)) return ERR_PTR(-error); - d_add(dentry, NULL); + /* + * call d_add(dentry, NULL) here when d_drop_negative_children + * is called in xfs_vn_mknod (ie. allow negative dentries + * with CI filesystems). + */ return NULL; } From owner-xfs@oss.sgi.com Wed May 21 20:40:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 20:40:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M3dxst006456 for ; Wed, 21 May 2008 20:40:01 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id NAA28276; Thu, 22 May 2008 13:40:46 +1000 Message-ID: <4834EBB7.5010200@sgi.com> Date: Thu, 22 May 2008 13:42:47 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] make inode reclaim wait for log I/O to complete References: <482A77A9.5040806@sgi.com> <20080514064451.GF155679365@sgi.com> In-Reply-To: <20080514064451.GF155679365@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16060 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Wed, May 14, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: >> An xfs inode can be destroyed before log I/O involving that inode >> is complete. We need to wait for the inode to be unpinned before >> tearing it down. >> >> Lachlan >> >> --- fs/xfs/xfs_inode.c_1.501 2008-05-12 14:45:17.000000000 +1000 >> +++ fs/xfs/xfs_inode.c 2008-05-12 12:23:48.000000000 +1000 >> @@ -2787,7 +2787,7 @@ __xfs_iunpin_wait( >> wait_event(ip->i_ipin_wait, (atomic_read(&ip->i_pincount) == >> 0)); >> } >> >> -static inline void >> +inline void >> xfs_iunpin_wait( >> xfs_inode_t *ip) >> { > > You want to kill the inline on this. Done. > >> --- fs/xfs/xfs_inode.h_1.245 2008-05-12 14:45:20.000000000 +1000 >> +++ fs/xfs/xfs_inode.h 2008-05-12 12:31:37.000000000 +1000 >> @@ -481,6 +481,7 @@ void xfs_ifunlock(xfs_inode_t *); >> void xfs_ireclaim(xfs_inode_t *); >> int xfs_finish_reclaim(xfs_inode_t *, int, int); >> int xfs_finish_reclaim_all(struct xfs_mount *, int); >> +void xfs_iunpin_wait(xfs_inode_t *); >> >> /* >> * xfs_inode.c prototypes. >> --- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 >> +++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 >> @@ -3324,6 +3324,7 @@ xfs_finish_reclaim( >> * because we're gonna reclaim the inode anyway. >> */ >> if (error) { >> + xfs_iunpin_wait(ip); >> xfs_iunlock(ip, XFS_ILOCK_EXCL); >> goto reclaim; >> } > > We can't get an error from xfs_iflush() from here that hasn't > already passed through xfs_iunpin_wait() in xfs_iflush(). > Hence we should never see a pinned inode through this path. Okay, good point. I'll remove that one. I thought about removing the XFS_FORCED_SHUTDOWN() and dirty inode checks from xfs_finish_reclaim() and calling xfs_iflush() anyway. It will abort if it's a clean inode or it will do the unpin and then abort if it's a forced shutdown. It would make the code in xfs_finish_reclaim() a bit cleaner. I also wouldn't need to export xfs_iunpin_wait(). Thoughts? > >> @@ -3336,6 +3337,7 @@ xfs_finish_reclaim( >> } >> >> xfs_ifunlock(ip); >> + xfs_iunpin_wait(ip); > > If we are not shutting down the filesystem, how do we get a pinned > inode here? A pinned inode is a dirty inode and should be caught by > the above code. Is the crash occurring when a force shutdown is in > progress? Yes, sorry, forgot to mention this was during a forced shutdown. From owner-xfs@oss.sgi.com Wed May 21 21:31:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 21:31:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M4V20k009402 for ; Wed, 21 May 2008 21:31:03 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA29485; Thu, 22 May 2008 14:31:51 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M4VpsT175192019; Thu, 22 May 2008 14:31:51 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M4Vo2N176624474; Thu, 22 May 2008 14:31:50 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 14:31:50 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] make inode reclaim wait for log I/O to complete Message-ID: <20080522043150.GM173056135@sgi.com> References: <482A77A9.5040806@sgi.com> <20080514064451.GF155679365@sgi.com> <4834EBB7.5010200@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4834EBB7.5010200@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16061 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 01:42:47PM +1000, Lachlan McIlroy wrote: > David Chinner wrote: > >On Wed, May 14, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: > >>An xfs inode can be destroyed before log I/O involving that inode > >>is complete. We need to wait for the inode to be unpinned before > >>tearing it down. ..... > >>--- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 > >>+++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 > >>@@ -3324,6 +3324,7 @@ xfs_finish_reclaim( > >> * because we're gonna reclaim the inode anyway. > >> */ > >> if (error) { > >>+ xfs_iunpin_wait(ip); > >> xfs_iunlock(ip, XFS_ILOCK_EXCL); > >> goto reclaim; > >> } > > > >We can't get an error from xfs_iflush() from here that hasn't > >already passed through xfs_iunpin_wait() in xfs_iflush(). > >Hence we should never see a pinned inode through this path. > > Okay, good point. I'll remove that one. I thought about removing > the XFS_FORCED_SHUTDOWN() and dirty inode checks from xfs_finish_reclaim() > and calling xfs_iflush() anyway. It will abort if it's a clean inode > or it will do the unpin and then abort if it's a forced shutdown. > It would make the code in xfs_finish_reclaim() a bit cleaner. I also > wouldn't need to export xfs_iunpin_wait(). Thoughts? Sounds like a fine plan. Please comment it appropriately, though. Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Wed May 21 23:11:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:11:42 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_29 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M6Bca6018598 for ; Wed, 21 May 2008 23:11:39 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01173; Thu, 22 May 2008 16:12:24 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6CNsT176501936; Thu, 22 May 2008 16:12:24 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6CMbS172947386; Thu, 22 May 2008 16:12:22 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:12:22 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] allow mkfs to make larger logs Message-ID: <20080522061222.GQ173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16064 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Increase the maximum log size supported by mkfs. The log size can be increased easily in mkfs by changing a few defines and a couple of types to allow the log size to increase to just under 2GB. Theoretically, the log size can be made much, much larger than this (up to 2^32 sectors), but going beyond 2^31 *bytes* causes integer overflow issues in the kernel log code. We use a maximum size of just under 2GB as exactly 2GB will cause overflow issues on the first transaction reservation. Maximum log size is now reached at a fs size of ~4TB. Signed-off-by: Dave Chinner --- xfsprogs/include/xfs_fs.h | 11 +++++++---- xfsprogs/mkfs/xfs_mkfs.c | 14 +++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) Index: xfs-cmds/xfsprogs/include/xfs_fs.h =================================================================== --- xfs-cmds.orig/xfsprogs/include/xfs_fs.h 2008-05-15 16:32:52.929462025 +1000 +++ xfs-cmds/xfsprogs/include/xfs_fs.h 2008-05-15 18:50:19.494520368 +1000 @@ -248,10 +248,13 @@ typedef struct xfs_fsop_resblks { * Minimum and maximum sizes need for growth checks */ #define XFS_MIN_AG_BLOCKS 64 -#define XFS_MIN_LOG_BLOCKS 512 -#define XFS_MAX_LOG_BLOCKS (64 * 1024) -#define XFS_MIN_LOG_BYTES (256 * 1024) -#define XFS_MAX_LOG_BYTES (128 * 1024 * 1024) +#define XFS_MIN_LOG_BLOCKS 512ULL +#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL) +#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL) + +/* keep the maximum size under 2^31 by a small amount */ +#define XFS_MAX_LOG_BYTES \ + ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES) /* * Structures for XFS_IOC_FSGROWFSDATA, XFS_IOC_FSGROWFSLOG & XFS_IOC_FSGROWFSRT Index: xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c =================================================================== --- xfs-cmds.orig/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 16:32:53.013451121 +1000 +++ xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c 2008-05-15 18:47:54.093343349 +1000 @@ -362,13 +362,13 @@ validate_log_size(__uint64_t logblocks, } if (logblocks > XFS_MAX_LOG_BLOCKS) { fprintf(stderr, - _("log size %lld blocks too large, maximum size is %d blocks\n"), + _("log size %lld blocks too large, maximum size is %lld blocks\n"), (long long)logblocks, XFS_MAX_LOG_BLOCKS); usage(); } if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) { fprintf(stderr, - _("log size %lld bytes too large, maximum size is %d bytes\n"), + _("log size %lld bytes too large, maximum size is %lld bytes\n"), (long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES); usage(); } @@ -1724,7 +1724,7 @@ reported by the device (%u).\n"), min_logblocks = max_tr_res * XFS_MIN_LOG_FACTOR; min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks); if (!logsize && dblocks >= (1024*1024*1024) >> blocklog) - min_logblocks = MAX(min_logblocks, (10*1024*1024)>>blocklog); + min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BYTES>>blocklog); if (logsize && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) { fprintf(stderr, _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"), @@ -1744,10 +1744,10 @@ _("size %s specified for log subvolume i logblocks = 0; } else if (loginternal && !logsize) { /* - * logblocks grows from min_logblocks to XFS_MAX_LOG_BLOCKS - * at 128GB - * - * 2048 = 128GB / MAX_LOG_BYTES + * With a 2GB max log size, default to maximum size + * at 4TB. This keeps the same ratio from the older + * max log size of 128M at 256GB fs size. IOWs, + * the ratio of fs size to log size is 2048:1. */ logblocks = (dblocks << blocklog) / 2048; logblocks = logblocks >> blocklog; From owner-xfs@oss.sgi.com Wed May 21 23:10:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:10:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M6AZLm018207 for ; Wed, 21 May 2008 23:10:36 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01128; Thu, 22 May 2008 16:11:22 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6BLsT176581142; Thu, 22 May 2008 16:11:22 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6BKuI176505219; Thu, 22 May 2008 16:11:20 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:11:20 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa 078 - use rmdir to remove directories Message-ID: <20080522061120.GP173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16063 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs If test 078 fails and you try to run it again immediately, it will execute a 'rm -f' on a directory which will fail. This should be a rmdir.... Signed-off-by: Dave Chinner --- xfstests/078 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) Index: xfs-cmds/xfstests/078 =================================================================== --- xfs-cmds.orig/xfstests/078 2008-03-20 09:10:02.000000000 +1100 +++ xfs-cmds/xfstests/078 2008-05-15 23:21:58.192413673 +1000 @@ -50,8 +50,8 @@ _filter_io() # real QA test starts here echo "*** create loop mount point" -rm -f $LOOP_MNT 2>/dev/null -mkdir $LOOP_MNT || _fail "cannot create loopback mount point" +rmdir $LOOP_MNT 2>/dev/null +mkdir -p $LOOP_MNT || _fail "cannot create loopback mount point" _grow_loop() { From owner-xfs@oss.sgi.com Wed May 21 23:09:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:09:55 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M69jL3018053 for ; Wed, 21 May 2008 23:09:47 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01106; Thu, 22 May 2008 16:10:31 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6AUsT176470279; Thu, 22 May 2008 16:10:31 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6ATIo176642367; Thu, 22 May 2008 16:10:29 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:10:29 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] rudimetary fallocate support for xfs_io Message-ID: <20080522061029.GO173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16062 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs Rudimentary fallocate support for xfs_io. Supports the two known methods that fallocate currently implements. When glibc support for the syscall comes around this should be changed to use that interface. Signed-off-by: Dave Chinner --- xfsprogs/io/prealloc.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) Index: xfs-cmds/xfsprogs/io/prealloc.c =================================================================== --- xfs-cmds.orig/xfsprogs/io/prealloc.c 2007-10-30 15:00:49.338718381 +1100 +++ xfs-cmds/xfsprogs/io/prealloc.c 2007-11-08 11:45:56.538926493 +1100 @@ -26,6 +26,8 @@ static cmdinfo_t allocsp_cmd; static cmdinfo_t freesp_cmd; static cmdinfo_t resvsp_cmd; static cmdinfo_t unresvsp_cmd; +static cmdinfo_t falloc_allocsp_cmd; +static cmdinfo_t falloc_resvsp_cmd; static int offset_length( @@ -119,6 +121,66 @@ unresvsp_f( return 0; } +/* + * someday there'll be a real header file in user space. + * (kernel is include/linux/falloc.h). In the mean time.... + */ +#define FALLOC_FL_KEEP_SIZE 0x01 +#define FALLOC_ALLOCATE 0x0 +#define FALLOC_RESV_SPACE FALLOC_FL_KEEP_SIZE + +#if defined(__i386__) +#define __NR_fallocate 324 +#elif defined(__x86_64__) +#define __NR_fallocate 285 +#elif defined(__ia64__) +#define __NR_fallocate 1303 +#endif + +static int +fallocate(int fd, int cmd, off64_t start, off64_t len) +{ + return syscall(__NR_fallocate, fd, cmd, start, len); +} + +static int +fallocate_allocsp_f( + int argc, + char **argv) +{ + xfs_flock64_t segment; + + if (!offset_length(argv[1], argv[2], &segment)) + return 0; + + /* syscall(__NR_fallocate, ...) */ + if (fallocate(file->fd, FALLOC_ALLOCATE, + segment.l_start, segment.l_len)) { + perror("FALLOC_ALLOCATE"); + return 0; + } + return 0; +} + +static int +fallocate_resvsp_f( + int argc, + char **argv) +{ + xfs_flock64_t segment; + + if (!offset_length(argv[1], argv[2], &segment)) + return 0; + + /* syscall(__NR_fallocate, ...) */ + if (fallocate(file->fd, FALLOC_RESV_SPACE, + segment.l_start, segment.l_len)) { + perror("FALLOC_RESVSP"); + return 0; + } + return 0; +} + void prealloc_init(void) { @@ -156,8 +218,28 @@ prealloc_init(void) unresvsp_cmd.oneline = _("frees reserved space associated with part of a file"); + falloc_allocsp_cmd.name = _("falloc_allocsp"); + falloc_allocsp_cmd.cfunc = fallocate_allocsp_f; + falloc_allocsp_cmd.argmin = 2; + falloc_allocsp_cmd.argmax = 2; + falloc_allocsp_cmd.flags = CMD_NOMAP_OK; + falloc_allocsp_cmd.args = _("off len"); + falloc_allocsp_cmd.oneline = + _("allocates space associated with part of a file via fallocate"); + + falloc_resvsp_cmd.name = _("falloc_resvsp"); + falloc_resvsp_cmd.cfunc = fallocate_resvsp_f; + falloc_resvsp_cmd.argmin = 2; + falloc_resvsp_cmd.argmax = 2; + falloc_resvsp_cmd.flags = CMD_NOMAP_OK; + falloc_resvsp_cmd.args = _("off len"); + falloc_resvsp_cmd.oneline = + _("reserves space associated with part of a file via fallocate"); + add_command(&allocsp_cmd); add_command(&freesp_cmd); add_command(&resvsp_cmd); add_command(&unresvsp_cmd); + add_command(&falloc_allocsp_cmd); + add_command(&falloc_resvsp_cmd); } From owner-xfs@oss.sgi.com Wed May 21 23:12:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:12:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M6CG9d019003 for ; Wed, 21 May 2008 23:12:17 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01209; Thu, 22 May 2008 16:13:01 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6CwsT176508255; Thu, 22 May 2008 16:13:00 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6CvHG176601542; Thu, 22 May 2008 16:12:57 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:12:57 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] xfsqa test to check log size scaling Message-ID: <20080522061257.GR173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16065 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs XFS-QA test to check that log size scaling works correctly for old and new maximum log sizes. Signed-off-by: Dave Chinner --- xfstests/188 | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ xfstests/188.out | 16 ++++++++++ xfstests/group | 1 3 files changed, 105 insertions(+) Index: xfs-cmds/xfstests/188 =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfs-cmds/xfstests/188 2008-05-15 22:39:08.741203552 +1000 @@ -0,0 +1,88 @@ +#! /bin/sh +# FS QA Test No. 188 +# +# large log size mkfs test - ensure the log size scaling works +# +#----------------------------------------------------------------------- +# Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. +#----------------------------------------------------------------------- +# +# 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 100t" $LOOP_DEV + +#make loopback mount dir +mkdir $LOOP_MNT + +# test if large logs are supported +LARGE_LOG= +$MKFS_XFS_PROG -f -l size=256m -d name=$LOOP_DEV,size=10g > /dev/null 2>&1 +if [ $? -eq 0 ]; then + LARGE_LOG=true +fi + +# walk over standard sizes (up to 256GB) +_do_mkfs 1 2 4 8 16 32 64 128 256 + +if [ -n "$LARGE_LOG" ]; then + # walk over larger sizes + _do_mkfs 512 1024 2048 4096 8192 16384 +else + # just cut'n'paste from the golden output for the remaining sizes + cat << EOF +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=16384g log =internal log bsize=4096 blocks=521728, version=2 +EOF +fi + +status=0 +exit Index: xfs-cmds/xfstests/188.out =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfs-cmds/xfstests/188.out 2008-05-15 22:39:26.254922874 +1000 @@ -0,0 +1,16 @@ +QA output created by 188 +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 +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=16384g log =internal log bsize=4096 blocks=521728, version=2 Index: xfs-cmds/xfstests/group =================================================================== --- xfs-cmds.orig/xfstests/group 2008-05-15 16:32:52.489519140 +1000 +++ xfs-cmds/xfstests/group 2008-05-15 22:38:32.000000000 +1000 @@ -275,3 +275,4 @@ filestreams dgc@sgi.com 185 dmapi auto 186 attr auto 187 attr auto +188 log metadata auto From owner-xfs@oss.sgi.com Wed May 21 23:13:19 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:13:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64, J_CHICKENPOX_65,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M6DHG7019490 for ; Wed, 21 May 2008 23:13:18 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01275; Thu, 22 May 2008 16:14:04 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6E3sT174627782; Thu, 22 May 2008 16:14:04 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6E23G176529626; Thu, 22 May 2008 16:14:02 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:14:02 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [patch] remove xattr buffer size dependency on page size in xfsdump Message-ID: <20080522061402.GS173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16066 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs The extended attr buffer size used by xfsdump is based on page size. The maximum buffer size the kernel will accept is 64k. On a 64k page machine, the default buffer size will be rejected by the kernel, thereby breaking dump and restore. Limit the buffer size to XATTR_LIST_MAX in dump, restore and libhandle so the kernel won't reject otherwise valid requests. Signed-off-by: Dave Chinner --- xfsdump/dump/content.c | 2 +- xfsprogs/libhandle/handle.c | 5 ++++- xfsprogs/libhandle/jdm.c | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) Index: xfs-cmds/xfsdump/dump/content.c =================================================================== --- xfs-cmds.orig/xfsdump/dump/content.c 2007-02-03 01:26:21.000000000 +1100 +++ xfs-cmds/xfsdump/dump/content.c 2008-05-13 08:46:04.673298673 +1000 @@ -210,7 +210,7 @@ typedef struct extent_group_context exte /* minimum sizes for extended attributes buffers */ -#define EXTATTR_LISTBUF_SZ ( 4 * pgsz ) +#define EXTATTR_LISTBUF_SZ ( XATTR_LIST_MAX ) #define EXTATTR_RTRVARRAY_LEN ( 1 * pgsz ) #define EXTATTR_DUMPBUF_SZ ( 4 * pgsz ) Index: xfs-cmds/xfsprogs/libhandle/handle.c =================================================================== --- xfs-cmds.orig/xfsprogs/libhandle/handle.c 2006-11-15 19:00:31.000000000 +1100 +++ xfs-cmds/xfsprogs/libhandle/handle.c 2008-05-13 08:52:07.150983837 +1000 @@ -360,8 +360,11 @@ attr_list_by_handle( memcpy(&alhreq.pos, cursor, sizeof(alhreq.pos)); alhreq.flags = flags; - alhreq.buflen = bufsize; alhreq.buffer = buf; + alhreq.buflen = bufsize; + /* prevent needless EINVAL from the kernel */ + if (alhreq.buflen > XATTR_LIST_MAX) + alhreq.buflen = XATTR_LIST_MAX; error = xfsctl(path, fd, XFS_IOC_ATTRLIST_BY_HANDLE, &alhreq); Index: xfs-cmds/xfsprogs/libhandle/jdm.c =================================================================== --- xfs-cmds.orig/xfsprogs/libhandle/jdm.c 2008-04-16 13:04:05.000000000 +1000 +++ xfs-cmds/xfsprogs/libhandle/jdm.c 2008-05-13 08:51:23.344565394 +1000 @@ -166,6 +166,10 @@ jdm_attr_list( jdm_fshandle_t *fshp, filehandle_t filehandle; int rval; + /* prevent needless EINVAL from the kernel */ + if (bufsz > XATTR_LIST_MAX) + bufsz = XATTR_LIST_MAX; + jdm_fill_filehandle( &filehandle, fshandlep, statp ); rval = attr_list_by_handle (( void * )&filehandle, sizeof( filehandle ), From owner-xfs@oss.sgi.com Wed May 21 23:14:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:14:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,FUZZY_VPILL autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M6EYWT019964 for ; Wed, 21 May 2008 23:14:38 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA01397; Thu, 22 May 2008 16:15:21 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4M6FKsT174505692; Thu, 22 May 2008 16:15:21 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4M6FJE8176606277; Thu, 22 May 2008 16:15:19 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Thu, 22 May 2008 16:15:19 +1000 From: David Chinner To: xfs-dev Cc: xfs-oss Subject: [hack] allow xfsrestore to run on 64k page size machines Message-ID: <20080522061519.GT173056135@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16067 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs xfsrestore has assumptions about page size built into the inode hunk size in the dump format. Seems to be a stupid thing to do - this patch simply comments out the asserts to allow it to work on 64k page size machine, but probably subtly breaks the code. Nasty hack, really, but allows xfsqa tests to pass. Not-Signed-off-by: Dave Chinner --- xfsdump/restore/inomap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) Index: xfs-cmds/xfsdump/restore/inomap.c =================================================================== --- xfs-cmds.orig/xfsdump/restore/inomap.c 2006-11-14 19:57:32.000000000 +1100 +++ xfs-cmds/xfsdump/restore/inomap.c 2008-05-13 10:34:05.963909158 +1000 @@ -197,8 +197,8 @@ inomap_restore_pers( drive_t *drivep, */ ASSERT( INOPERSEG == ( sizeof( (( seg_t * )0 )->lobits ) * NBBY )); ASSERT( sizeof( hnk_t ) == HNKSZ ); - ASSERT( HNKSZ >= pgsz ); - ASSERT( ! ( HNKSZ % pgsz )); + //ASSERT( HNKSZ >= pgsz ); + //ASSERT( ! ( HNKSZ % pgsz )); ASSERT( sizeof( pers_t ) <= PERSSZ ); /* get inomap info from media hdr @@ -224,8 +224,8 @@ inomap_restore_pers( drive_t *drivep, /* mmap the persistent hdr and space for the map */ - ASSERT( sizeof( hnk_t ) * ( size_t )hnkcnt >= pgsz ); - ASSERT( ! ( sizeof( hnk_t ) * ( size_t )hnkcnt % pgsz )); + //ASSERT( sizeof( hnk_t ) * ( size_t )hnkcnt >= pgsz ); + //ASSERT( ! ( sizeof( hnk_t ) * ( size_t )hnkcnt % pgsz )); persp = ( pers_t * ) mmap_autogrow( PERSSZ + @@ -355,8 +355,8 @@ inomap_sync_pers( char *hkdir ) /* sanity checks */ ASSERT( sizeof( hnk_t ) == HNKSZ ); - ASSERT( HNKSZ >= pgsz ); - ASSERT( ! ( HNKSZ % pgsz )); + //ASSERT( HNKSZ >= pgsz ); + //ASSERT( ! ( HNKSZ % pgsz )); /* only needed once per session */ From owner-xfs@oss.sgi.com Wed May 21 23:38:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 21 May 2008 23:38:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4M6cCsc021735 for ; Wed, 21 May 2008 23:38:12 -0700 X-ASG-Debug-ID: 1211438342-69fe02f60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from postoffice2.aconex.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 52757BC02C7 for ; Wed, 21 May 2008 23:39:02 -0700 (PDT) Received: from postoffice2.aconex.com (prod.aconex.com [203.89.192.138]) by cuda.sgi.com with ESMTP id pBHwxY21a2ACCrSq for ; Wed, 21 May 2008 23:39:02 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 92F5DAA776; Thu, 22 May 2008 16:39:01 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.3.1]) by postoffice2.aconex.com with ESMTP id o4BA9z1vlqP4za6J; Thu, 22 May 2008 16:39:01 +1000 (EST) Received: from [192.168.5.76] (unknown [203.89.192.141]) by postoffice.aconex.com (Postfix) with ESMTP id 8184292C316; Thu, 22 May 2008 16:39:01 +1000 (EST) X-ASG-Orig-Subj: Re: [patch] rudimetary fallocate support for xfs_io Subject: Re: [patch] rudimetary fallocate support for xfs_io From: Nathan Scott Reply-To: nscott@aconex.com To: David Chinner Cc: xfs-dev , xfs-oss In-Reply-To: <20080522061029.GO173056135@sgi.com> References: <20080522061029.GO173056135@sgi.com> Content-Type: text/plain Organization: Aconex Date: Thu, 22 May 2008 16:39:01 +1000 Message-Id: <1211438341.25294.506.camel@edge.scott.net.au> Mime-Version: 1.0 X-Mailer: Evolution 2.22.1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: prod.aconex.com[203.89.192.138] X-Barracuda-Start-Time: 1211438343 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.1, rules version 3.1.51072 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16068 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: nscott@aconex.com Precedence: bulk X-list: xfs On Thu, 2008-05-22 at 16:10 +1000, David Chinner wrote: > > +#if defined(__i386__) > +#define __NR_fallocate 324 > +#elif defined(__x86_64__) > +#define __NR_fallocate 285 > +#elif defined(__ia64__) > +#define __NR_fallocate 1303 > +#endif > + > +static int > +fallocate(int fd, int cmd, off64_t start, off64_t len) > +{ > + return syscall(__NR_fallocate, fd, cmd, start, len); > +} This will cause xfsprogs build breakage on any architecture other than the above three; check out the approach taken in xfs-cmds/attr/libattr/syscalls.c to avoid this (give ENOSYS for the unknown archs). cheers. -- Nathan From owner-xfs@oss.sgi.com Thu May 22 00:16:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 00:16:45 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_61 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M7GaqB028796 for ; Thu, 22 May 2008 00:16:38 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA02837; Thu, 22 May 2008 17:17:16 +1000 Message-ID: <48351DFC.9080404@sgi.com> Date: Thu, 22 May 2008 17:17:16 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH] use generic_*xattr routines References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> In-Reply-To: <20080521081656.GA2638@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16069 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Looking at this now and will reply tomorrow. --Tim Christoph Hellwig wrote: > On Wed, Apr 30, 2008 at 01:22:17PM +0200, Christoph Hellwig wrote: >> Use the generic set, get and removexattr methods and supply the s_xattr >> array with fine-grained handlers. All XFS/Linux highlevel attr handling is >> rewritten from scratch and placed into fs/xfs/linux-2.6/xfs_xattr.c so >> that it's separated from the generic low-level code. >> >> The code size reduction is not as big as I had hoped, but it's still a >> worthwile cleanup. >> >> I didn't managed to get rid of struct attrnames yet, as it's still used >> to hack the Linux string prefixes into the output inside the lowest >> level xattr code. I have some plans to clean that bit up aswell, but >> that will have to wait for a while. > > Updated on top of the case-insensitive filename changes: > > > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/Makefile > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/Makefile 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/Makefile 2008-05-21 10:06:38.000000000 +0200 > @@ -97,6 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ > xfs_lrw.o \ > xfs_super.o \ > xfs_vnode.o \ > + xfs_xattr.o \ > xfs_ksyms.o) > > # Objects in support/ > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:14:54.000000000 +0200 > @@ -282,7 +282,7 @@ xfs_vn_mknod( > struct xfs_inode *ip = NULL; > xfs_acl_t *default_acl = NULL; > struct xfs_name name; > - attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; > + int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; > int error; > > /* > @@ -771,98 +771,6 @@ xfs_vn_truncate( > WARN_ON(error); > } > > -STATIC int > -xfs_vn_setxattr( > - struct dentry *dentry, > - const char *name, > - const void *data, > - size_t size, > - int flags) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - /* Convert Linux syscall to XFS internal ATTR flags */ > - if (flags & XATTR_CREATE) > - xflags |= ATTR_CREATE; > - if (flags & XATTR_REPLACE) > - xflags |= ATTR_REPLACE; > - xflags |= namesp->attr_flag; > - return namesp->attr_set(vp, attr, (void *)data, size, xflags); > -} > - > -STATIC ssize_t > -xfs_vn_getxattr( > - struct dentry *dentry, > - const char *name, > - void *data, > - size_t size) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - /* Convert Linux syscall to XFS internal ATTR flags */ > - if (!size) { > - xflags |= ATTR_KERNOVAL; > - data = NULL; > - } > - xflags |= namesp->attr_flag; > - return namesp->attr_get(vp, attr, (void *)data, size, xflags); > -} > - > -STATIC ssize_t > -xfs_vn_listxattr( > - struct dentry *dentry, > - char *data, > - size_t size) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - int error, xflags = ATTR_KERNAMELS; > - ssize_t result; > - > - if (!size) > - xflags |= ATTR_KERNOVAL; > - xflags |= capable(CAP_SYS_ADMIN) ? ATTR_KERNFULLS : ATTR_KERNORMALS; > - > - error = attr_generic_list(vp, data, size, xflags, &result); > - if (error < 0) > - return error; > - return result; > -} > - > -STATIC int > -xfs_vn_removexattr( > - struct dentry *dentry, > - const char *name) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - xflags |= namesp->attr_flag; > - return namesp->attr_remove(vp, attr, xflags); > -} > - > STATIC long > xfs_vn_fallocate( > struct inode *inode, > @@ -910,10 +818,10 @@ const struct inode_operations xfs_inode_ > .truncate = xfs_vn_truncate, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > .fallocate = xfs_vn_fallocate, > }; > > @@ -930,10 +838,10 @@ const struct inode_operations xfs_dir_in > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > > const struct inode_operations xfs_dir_ci_inode_operations = { > @@ -949,10 +857,10 @@ const struct inode_operations xfs_dir_ci > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > > const struct inode_operations xfs_symlink_inode_operations = { > @@ -962,8 +870,8 @@ const struct inode_operations xfs_symlin > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c 2008-05-21 10:06:38.000000000 +0200 > @@ -0,0 +1,266 @@ > +/* > + * Copyright (C) 2008 Christoph Hellwig. > + * Released under GPL v2. > + */ > + > +#include "xfs.h" > +#include "xfs_attr.h" > +#include "xfs_acl.h" > +#include "xfs_vnodeops.h" > + > +#include > +#include > + > + > +/* > + * ACL handling. Should eventually be moved into xfs_acl.c > + */ > + > +static int > +xfs_decode_acl(const char *name) > +{ > + if (strcmp(name, "posix_acl_access") == 0) > + return _ACL_TYPE_ACCESS; > + else if (strcmp(name, "posix_acl_default") == 0) > + return _ACL_TYPE_DEFAULT; > + return -EINVAL; > +} > + > +static int > +xfs_xattr_system_get(struct inode *inode, const char *name, > + void *buffer, size_t size) > +{ > + int acl; > + > + acl = xfs_decode_acl(name); > + if (acl < 0) > + return acl; > + > + return xfs_acl_vget(inode, buffer, size, acl); > +} > + > +static int > +xfs_xattr_system_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + int error, acl; > + > + acl = xfs_decode_acl(name); > + if (acl < 0) > + return acl; > + if (flags & XATTR_CREATE) > + return -EINVAL; > + > + if (!value) > + return xfs_acl_vremove(inode, acl); > + > + error = xfs_acl_vset(inode, (void *)value, size, acl); > + if (!error) > + vn_revalidate(inode); > + return error; > +} > + > +static struct xattr_handler xfs_xattr_system_handler = { > + .prefix = XATTR_SYSTEM_PREFIX, > + .get = xfs_xattr_system_get, > + .set = xfs_xattr_system_set, > +}; > + > + > +/* > + * Real xattr handling. The only difference between the namespaces is > + * a flag passed to the low-level attr code. > + */ > + > +static int > +__xfs_xattr_get(struct inode *inode, const char *name, > + void *value, size_t size, int xflags) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + int error, asize = size; > + > + if (strcmp(name, "") == 0) > + return -EINVAL; > + > + /* Convert Linux syscall to XFS internal ATTR flags */ > + if (!size) { > + xflags |= ATTR_KERNOVAL; > + value = NULL; > + } > + > + error = -xfs_attr_get(ip, name, value, &asize, xflags); > + if (error) > + return error; > + return asize; > +} > + > +static int > +__xfs_xattr_set(struct inode *inode, const char *name, const void *value, > + size_t size, int flags, int xflags) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + > + if (strcmp(name, "") == 0) > + return -EINVAL; > + > + /* Convert Linux syscall to XFS internal ATTR flags */ > + if (flags & XATTR_CREATE) > + xflags |= ATTR_CREATE; > + if (flags & XATTR_REPLACE) > + xflags |= ATTR_REPLACE; > + > + if (!value) > + return -xfs_attr_remove(ip, name, xflags); > + return -xfs_attr_set(ip, name, (void *)value, size, xflags); > +} > + > +static int > +xfs_xattr_user_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, 0); > +} > + > +static int > +xfs_xattr_user_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, 0); > +} > + > +struct attrnames attr_user = { > + .attr_name = "user.", > + .attr_namelen = sizeof("user.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_user_handler = { > + .prefix = XATTR_USER_PREFIX, > + .get = xfs_xattr_user_get, > + .set = xfs_xattr_user_set, > +}; > + > + > +static int > +xfs_xattr_trusted_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, ATTR_ROOT); > +} > + > +static int > +xfs_xattr_trusted_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_ROOT); > +} > + > +struct attrnames attr_trusted = { > + .attr_name = "trusted.", > + .attr_namelen = sizeof("trusted.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_trusted_handler = { > + .prefix = XATTR_TRUSTED_PREFIX, > + .get = xfs_xattr_trusted_get, > + .set = xfs_xattr_trusted_set, > +}; > + > + > +static int > +xfs_xattr_secure_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, ATTR_SECURE); > +} > + > +static int > +xfs_xattr_secure_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_SECURE); > +} > + > +struct attrnames attr_secure = { > + .attr_name = "security.", > + .attr_namelen = sizeof("security.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_security_handler = { > + .prefix = XATTR_SECURITY_PREFIX, > + .get = xfs_xattr_secure_get, > + .set = xfs_xattr_secure_set, > +}; > + > + > +struct xattr_handler *xfs_xattr_handlers[] = { > + &xfs_xattr_user_handler, > + &xfs_xattr_trusted_handler, > + &xfs_xattr_security_handler, > + &xfs_xattr_system_handler, > + NULL > +}; > + > +static int > +list_one_attr(const char *name, const size_t len, void *data, > + size_t size, ssize_t *result) > +{ > + char *p = data + *result; > + > + *result += len; > + if (!size) > + return 0; > + if (*result > size) > + return -ERANGE; > + > + strcpy(p, name); > + p += len; > + return 0; > +} > + > +ssize_t > +xfs_vn_listxattr(struct dentry *dentry, char *data, size_t size) > +{ > + struct inode *inode = dentry->d_inode; > + struct xfs_inode *ip = XFS_I(inode); > + attrlist_cursor_kern_t cursor = { 0 }; > + int error, xflags; > + ssize_t result; > + > + xflags = ATTR_KERNAMELS; > + if (!size) > + xflags |= ATTR_KERNOVAL; > + > + if (capable(CAP_SYS_ADMIN)) > + xflags |= ATTR_KERNFULLS; > + else > + xflags |= ATTR_KERNORMALS; > + > + > + /* > + * First read the regular on-disk attributes. > + */ > + result = -xfs_attr_list(ip, data, size, xflags, &cursor); > + if (result < 0) > + return result; > + > + /* > + * Then add the two synthetic ACL attributes. > + */ > + if (xfs_acl_vhasacl_access(inode)) { > + error = list_one_attr(POSIX_ACL_XATTR_ACCESS, > + strlen(POSIX_ACL_XATTR_ACCESS) + 1, > + data, size, &result); > + if (error) > + return error; > + } > + > + if (xfs_acl_vhasacl_default(inode)) { > + error = list_one_attr(POSIX_ACL_XATTR_DEFAULT, > + strlen(POSIX_ACL_XATTR_DEFAULT) + 1, > + data, size, &result); > + if (error) > + return error; > + } > + > + return result; > +} > Index: linux-2.6-xfs/fs/xfs/xfs_attr.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-05-21 10:06:38.000000000 +0200 > @@ -57,11 +57,6 @@ > * Provide the external interfaces to manage attribute lists. > */ > > -#define ATTR_SYSCOUNT 2 > -static struct attrnames posix_acl_access; > -static struct attrnames posix_acl_default; > -static struct attrnames *attr_system_names[ATTR_SYSCOUNT]; > - > /*======================================================================== > * Function prototypes for the kernel. > *========================================================================*/ > @@ -2378,270 +2373,3 @@ xfs_attr_trace_enter(int type, char *whe > (void *)a13, (void *)a14, (void *)a15); > } > #endif /* XFS_ATTR_TRACE */ > - > - > -/*======================================================================== > - * System (pseudo) namespace attribute interface routines. > - *========================================================================*/ > - > -STATIC int > -posix_acl_access_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vset(vp, data, size, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return xfs_acl_vremove(vp, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vget(vp, data, size, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_exists( > - bhv_vnode_t *vp) > -{ > - return xfs_acl_vhasacl_access(vp); > -} > - > -STATIC int > -posix_acl_default_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vset(vp, data, size, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vget(vp, data, size, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return xfs_acl_vremove(vp, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_exists( > - bhv_vnode_t *vp) > -{ > - return xfs_acl_vhasacl_default(vp); > -} > - > -static struct attrnames posix_acl_access = { > - .attr_name = "posix_acl_access", > - .attr_namelen = sizeof("posix_acl_access") - 1, > - .attr_get = posix_acl_access_get, > - .attr_set = posix_acl_access_set, > - .attr_remove = posix_acl_access_remove, > - .attr_exists = posix_acl_access_exists, > -}; > - > -static struct attrnames posix_acl_default = { > - .attr_name = "posix_acl_default", > - .attr_namelen = sizeof("posix_acl_default") - 1, > - .attr_get = posix_acl_default_get, > - .attr_set = posix_acl_default_set, > - .attr_remove = posix_acl_default_remove, > - .attr_exists = posix_acl_default_exists, > -}; > - > -static struct attrnames *attr_system_names[] = > - { &posix_acl_access, &posix_acl_default }; > - > - > -/*======================================================================== > - * Namespace-prefix-style attribute name interface routines. > - *========================================================================*/ > - > -STATIC int > -attr_generic_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return -xfs_attr_set(xfs_vtoi(vp), name, data, size, xflags); > -} > - > -STATIC int > -attr_generic_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - int error, asize = size; > - > - error = xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); > - if (!error) > - return asize; > - return -error; > -} > - > -STATIC int > -attr_generic_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return -xfs_attr_remove(xfs_vtoi(vp), name, xflags); > -} > - > -STATIC int > -attr_generic_listadd( > - attrnames_t *prefix, > - attrnames_t *namesp, > - void *data, > - size_t size, > - ssize_t *result) > -{ > - char *p = data + *result; > - > - *result += prefix->attr_namelen; > - *result += namesp->attr_namelen + 1; > - if (!size) > - return 0; > - if (*result > size) > - return -ERANGE; > - strcpy(p, prefix->attr_name); > - p += prefix->attr_namelen; > - strcpy(p, namesp->attr_name); > - p += namesp->attr_namelen + 1; > - return 0; > -} > - > -STATIC int > -attr_system_list( > - bhv_vnode_t *vp, > - void *data, > - size_t size, > - ssize_t *result) > -{ > - attrnames_t *namesp; > - int i, error = 0; > - > - for (i = 0; i < ATTR_SYSCOUNT; i++) { > - namesp = attr_system_names[i]; > - if (!namesp->attr_exists || !namesp->attr_exists(vp)) > - continue; > - error = attr_generic_listadd(&attr_system, namesp, > - data, size, result); > - if (error) > - break; > - } > - return error; > -} > - > -int > -attr_generic_list( > - bhv_vnode_t *vp, void *data, size_t size, int xflags, ssize_t *result) > -{ > - attrlist_cursor_kern_t cursor = { 0 }; > - int error; > - > - error = xfs_attr_list(xfs_vtoi(vp), data, size, xflags, &cursor); > - if (error > 0) > - return -error; > - *result = -error; > - return attr_system_list(vp, data, size, result); > -} > - > -attrnames_t * > -attr_lookup_namespace( > - char *name, > - struct attrnames **names, > - int nnames) > -{ > - int i; > - > - for (i = 0; i < nnames; i++) > - if (!strncmp(name, names[i]->attr_name, names[i]->attr_namelen)) > - return names[i]; > - return NULL; > -} > - > -STATIC int > -attr_system_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - attrnames_t *namesp; > - int error; > - > - if (xflags & ATTR_CREATE) > - return -EINVAL; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - error = namesp->attr_set(vp, name, data, size, xflags); > - if (!error) > - error = vn_revalidate(vp); > - return error; > -} > - > -STATIC int > -attr_system_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - attrnames_t *namesp; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - return namesp->attr_get(vp, name, data, size, xflags); > -} > - > -STATIC int > -attr_system_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - attrnames_t *namesp; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - return namesp->attr_remove(vp, name, xflags); > -} > - > -struct attrnames attr_system = { > - .attr_name = "system.", > - .attr_namelen = sizeof("system.") - 1, > - .attr_flag = ATTR_SYSTEM, > - .attr_get = attr_system_get, > - .attr_set = attr_system_set, > - .attr_remove = attr_system_remove, > -}; > - > -struct attrnames attr_trusted = { > - .attr_name = "trusted.", > - .attr_namelen = sizeof("trusted.") - 1, > - .attr_flag = ATTR_ROOT, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames attr_secure = { > - .attr_name = "security.", > - .attr_namelen = sizeof("security.") - 1, > - .attr_flag = ATTR_SECURE, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames attr_user = { > - .attr_name = "user.", > - .attr_namelen = sizeof("user.") - 1, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames *attr_namespaces[] = > - { &attr_system, &attr_trusted, &attr_secure, &attr_user }; > Index: linux-2.6-xfs/fs/xfs/xfs_attr.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-05-21 10:06:38.000000000 +0200 > @@ -38,30 +38,14 @@ > struct cred; > struct xfs_attr_list_context; > > -typedef int (*attrset_t)(bhv_vnode_t *, char *, void *, size_t, int); > -typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); > -typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); > -typedef int (*attrexists_t)(bhv_vnode_t *); > - > typedef struct attrnames { > char * attr_name; > unsigned int attr_namelen; > - unsigned int attr_flag; > - attrget_t attr_get; > - attrset_t attr_set; > - attrremove_t attr_remove; > - attrexists_t attr_exists; > } attrnames_t; > > -#define ATTR_NAMECOUNT 4 > extern struct attrnames attr_user; > extern struct attrnames attr_secure; > -extern struct attrnames attr_system; > extern struct attrnames attr_trusted; > -extern struct attrnames *attr_namespaces[ATTR_NAMECOUNT]; > - > -extern attrnames_t *attr_lookup_namespace(char *, attrnames_t **, int); > -extern int attr_generic_list(bhv_vnode_t *, void *, size_t, int, ssize_t *); > > #define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */ > #define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */ > @@ -69,7 +53,6 @@ extern int attr_generic_list(bhv_vnode_t > #define ATTR_SECURE 0x0008 /* use attrs in security namespace */ > #define ATTR_CREATE 0x0010 /* pure create: fail if attr already exists */ > #define ATTR_REPLACE 0x0020 /* pure set: fail if attr does not exist */ > -#define ATTR_SYSTEM 0x0100 /* use attrs in system (pseudo) namespace */ > > #define ATTR_KERNACCESS 0x0400 /* [kernel] iaccess, inode held io-locked */ > #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 10:14:20.000000000 +0200 > @@ -27,6 +27,7 @@ extern const struct file_operations xfs_ > extern const struct file_operations xfs_dir_file_operations; > extern const struct file_operations xfs_invis_file_operations; > > +extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); > > struct xfs_inode; > extern void xfs_ichgtime(struct xfs_inode *, int); > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 10:14:20.000000000 +0200 > @@ -1767,6 +1767,7 @@ xfs_fs_fill_super( > goto out_free_mp; > > sb_min_blocksize(sb, BBSIZE); > + sb->s_xattr = xfs_xattr_handlers; > sb->s_export_op = &xfs_export_operations; > sb->s_qcop = &xfs_quotactl_operations; > sb->s_op = &xfs_super_operations; > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 10:14:20.000000000 +0200 > @@ -81,6 +81,7 @@ extern void xfs_flush_device(struct xfs_ > extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); > > extern const struct export_operations xfs_export_operations; > +extern struct xattr_handler *xfs_xattr_handlers[]; > > #define XFS_M(sb) ((struct xfs_mount *)((sb)->s_fs_info)) > > From owner-xfs@oss.sgi.com Thu May 22 00:19:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 00:19:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M7JI20001231 for ; Thu, 22 May 2008 00:19:19 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA02879; Thu, 22 May 2008 17:20:05 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id EA21458C4C29; Thu, 22 May 2008 17:20:04 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981521 - Remove d_add call for an ENOENT CI lookup return code Message-Id: <20080522072004.EA21458C4C29@chook.melbourne.sgi.com> Date: Thu, 22 May 2008 17:20:04 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16070 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Remove d_add call for an ENOENT CI lookup return code Date: Thu May 22 17:18:57 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/2.6.x-xfs Inspected by: dgc@sgi.com The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31214a fs/xfs/linux-2.6/xfs_iops.c - 1.287 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.287&r2=text&tr2=1.286&f=h - Remove d_add call for an ENOENT lookup return code From owner-xfs@oss.sgi.com Thu May 22 01:20:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 01:20:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4M8Kpc2006623 for ; Thu, 22 May 2008 01:20:53 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA03950; Thu, 22 May 2008 18:21:38 +1000 Message-ID: <48352D8C.8090505@sgi.com> Date: Thu, 22 May 2008 18:23:40 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: David Chinner CC: xfs-dev , xfs-oss Subject: Re: [PATCH] make inode reclaim wait for log I/O to complete References: <482A77A9.5040806@sgi.com> <20080514064451.GF155679365@sgi.com> <4834EBB7.5010200@sgi.com> <20080522043150.GM173056135@sgi.com> In-Reply-To: <20080522043150.GM173056135@sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16071 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs David Chinner wrote: > On Thu, May 22, 2008 at 01:42:47PM +1000, Lachlan McIlroy wrote: >> David Chinner wrote: >>> On Wed, May 14, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: >>>> An xfs inode can be destroyed before log I/O involving that inode >>>> is complete. We need to wait for the inode to be unpinned before >>>> tearing it down. > ..... >>>> --- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 >>>> +++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 >>>> @@ -3324,6 +3324,7 @@ xfs_finish_reclaim( >>>> * because we're gonna reclaim the inode anyway. >>>> */ >>>> if (error) { >>>> + xfs_iunpin_wait(ip); >>>> xfs_iunlock(ip, XFS_ILOCK_EXCL); >>>> goto reclaim; >>>> } >>> We can't get an error from xfs_iflush() from here that hasn't >>> already passed through xfs_iunpin_wait() in xfs_iflush(). >>> Hence we should never see a pinned inode through this path. >> Okay, good point. I'll remove that one. I thought about removing >> the XFS_FORCED_SHUTDOWN() and dirty inode checks from xfs_finish_reclaim() >> and calling xfs_iflush() anyway. It will abort if it's a clean inode >> or it will do the unpin and then abort if it's a forced shutdown. >> It would make the code in xfs_finish_reclaim() a bit cleaner. I also >> wouldn't need to export xfs_iunpin_wait(). Thoughts? > > Sounds like a fine plan. Please comment it appropriately, though. Sounded too easy. Hit this assert with an inode that's still in the AIL on a forced shutdown. /* * If the inode isn't dirty, then just release the inode * flush lock and do nothing. */ if (xfs_inode_clean(ip)) { ASSERT((iip != NULL) ? !(iip->ili_item.li_flags & XFS_LI_IN_AIL) : 1); xfs_ifunlock(ip); return 0; } From owner-xfs@oss.sgi.com Thu May 22 01:48:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 01:48:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4M8meqn008830 for ; Thu, 22 May 2008 01:48:41 -0700 X-ASG-Debug-ID: 1211446168-7595024f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1616ABC1058 for ; Thu, 22 May 2008 01:49:28 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id oWRKH2xphTe8O5Ey for ; Thu, 22 May 2008 01:49:28 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54B.nec.co.jp [10.7.69.195]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8nQS8022540; Thu, 22 May 2008 17:49:26 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4M8nQc29539; Thu, 22 May 2008 17:49:26 +0900 (JST) Received: from yonosuke.jp.nec.com (yonosuke.jp.nec.com [10.26.220.15]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8nPeC008526; Thu, 22 May 2008 17:49:25 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Thu, 22 May 2008 17:49:25 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 0/3] freeze feature ver 1.4 Subject: [RFC PATCH 0/3] freeze feature ver 1.4 Message-Id: <20080522174924t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Thu, 22 May 2008 17:49:24 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1211446171 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.1, rules version 3.1.51080 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16072 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, The freeze feature can suspend accesses to the filesystem keeping the filesystem's consistency. We can take the consistent backup with it cooperating with the backup software. I've modified [PATCH 1/3] to set the suitable error number (EOPNOTSUPP) in case the filesystem doesn't support the freeze feature. This was pointed out by Andreas Dilger. In addition, the patches are re-based from linux-2.6.26-rc2 to linux-2.6.26-rc3. The patch-set consists of the following three patches. [PATCH 1/3] Implement generic freeze feature I have modified to set the suitable error number (EOPNOTSUPP) in case the filesystem doesn't support the freeze feature. The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 [PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. [PATCH 3/3] Add timeout feature The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period This is useful for the application to set the timeval more accurately. For example, the freezer resets the timeval to 10 seconds every 5 seconds. In this approach, even if the freezer causes a deadlock by accessing the frozen filesystem, it will be solved by the timeout in 10 seconds and the freezer can recognize that at the next reset of timeval. int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Any comments are very welcome. Cheers, Takashi From owner-xfs@oss.sgi.com Thu May 22 01:50:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 01:50:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4M8o4JE009237 for ; Thu, 22 May 2008 01:50:04 -0700 X-ASG-Debug-ID: 1211446253-36e302c00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5AF8119FBA1 for ; Thu, 22 May 2008 01:50:53 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id shjiYNsip3BPuD0v for ; Thu, 22 May 2008 01:50:53 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.193]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8oqe0018296; Thu, 22 May 2008 17:50:52 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4M8oqi06889; Thu, 22 May 2008 17:50:52 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8oqBG020649; Thu, 22 May 2008 17:50:52 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Thu, 22 May 2008 17:50:20 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 1/3] Implement generic freeze feature Subject: [RFC PATCH 1/3] Implement generic freeze feature Message-Id: <20080522175020t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Thu, 22 May 2008 17:50:20 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1211446254 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51081 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16073 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs I have modified to set the suitable error number (EOPNOTSUPP) in case the filesystem doesn't support the freeze feature. This was pointed out by Andreas Dilger. The ioctls for the generic freeze feature are below. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, arg) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 o Unfreeze the filesystem int ioctl(int fd, int FITHAW, arg) fd: The file descriptor of the mountpoint FITHAW: request code for unfreeze arg: Ignored Return value: 0 if the operation succeeds. Otherwise, -1 Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- fs/buffer.c | 30 ++++++++++++++++++++++++ fs/ioctl.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ fs/super.c | 32 +++++++++++++++++++++++++- include/linux/buffer_head.h | 2 - include/linux/fs.h | 14 +++++++++++ 5 files changed, 128 insertions(+), 3 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3.org/fs/buffer.c linux-2.6.26-rc3-freeze/fs/buffer.c --- linux-2.6.26-rc3.org/fs/buffer.c 2008-05-19 06:36:41.000000000 +0900 +++ linux-2.6.26-rc3-freeze/fs/buffer.c 2008-05-19 21:03:29.000000000 +0900 @@ -201,6 +201,21 @@ struct super_block *freeze_bdev(struct b { struct super_block *sb; + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) + return ERR_PTR(-EBUSY); + + sb = get_super_without_lock(bdev); + + /* If super_block has been already frozen, return. */ + if (sb && sb->s_frozen != SB_UNFROZEN) { + put_super(sb); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return sb; + } + + if (sb) + put_super(sb); + down(&bdev->bd_mount_sem); sb = get_super(bdev); if (sb && !(sb->s_flags & MS_RDONLY)) { @@ -219,6 +234,8 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ } EXPORT_SYMBOL(freeze_bdev); @@ -230,8 +247,17 @@ EXPORT_SYMBOL(freeze_bdev); * * Unlocks the filesystem and marks it writeable again after freeze_bdev(). */ -void thaw_bdev(struct block_device *bdev, struct super_block *sb) +int thaw_bdev(struct block_device *bdev, struct super_block *sb) { + + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) + return -EBUSY; + + if (sb && sb->s_frozen == SB_UNFROZEN) { + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return 0; + } + if (sb) { BUG_ON(sb->s_bdev != bdev); @@ -244,6 +270,8 @@ void thaw_bdev(struct block_device *bdev } up(&bdev->bd_mount_sem); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); + return 0; } EXPORT_SYMBOL(thaw_bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3.org/fs/ioctl.c linux-2.6.26-rc3-freeze/fs/ioctl.c --- linux-2.6.26-rc3.org/fs/ioctl.c 2008-05-19 06:36:41.000000000 +0900 +++ linux-2.6.26-rc3-freeze/fs/ioctl.c 2008-05-21 11:43:39.000000000 +0900 @@ -13,6 +13,7 @@ #include #include #include +#include #include @@ -141,6 +142,49 @@ static int ioctl_fioasync(unsigned int f } /* + * ioctl_freeze - Freeze the filesystem. + * + * @filp: target file + * + * Call freeze_bdev() to freeze the filesystem. + */ +static int ioctl_freeze(struct file *filp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* If filesystem doesn't support freeze feature, return. */ + if (sb->s_op->write_super_lockfs == NULL) + return -EOPNOTSUPP; + + /* Freeze */ + sb = freeze_bdev(sb->s_bdev); + if (IS_ERR(sb)) + return PTR_ERR(sb); + return 0; +} + +/* + * ioctl_thaw - Thaw the filesystem. + * + * @filp: target file + * + * Call thaw_bdev() to thaw the filesystem. + */ +static int ioctl_thaw(struct file *filp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* Thaw */ + return thaw_bdev(sb->s_bdev, sb); +} + +/* * When you add any new common ioctls to the switches above and below * please update compat_sys_ioctl() too. * @@ -181,6 +225,15 @@ int do_vfs_ioctl(struct file *filp, unsi } else error = -ENOTTY; break; + + case FIFREEZE: + error = ioctl_freeze(filp); + break; + + case FITHAW: + error = ioctl_thaw(filp); + break; + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3.org/fs/super.c linux-2.6.26-rc3-freeze/fs/super.c --- linux-2.6.26-rc3.org/fs/super.c 2008-05-19 06:36:41.000000000 +0900 +++ linux-2.6.26-rc3-freeze/fs/super.c 2008-05-19 21:03:29.000000000 +0900 @@ -156,7 +156,7 @@ int __put_super_and_need_restart(struct * Drops a temporary reference, frees superblock if there's no * references left. */ -static void put_super(struct super_block *sb) +void put_super(struct super_block *sb) { spin_lock(&sb_lock); __put_super(sb); @@ -509,6 +509,36 @@ rescan: EXPORT_SYMBOL(get_super); +/* + * get_super_without_lock - Get super_block from block_device without lock. + * @bdev: block device struct + * + * Scan the superblock list and finds the superblock of the file system + * mounted on the block device given. This doesn't lock anyone. + * %NULL is returned if no match is found. + */ +struct super_block *get_super_without_lock(struct block_device *bdev) +{ + struct super_block *sb; + + if (!bdev) + return NULL; + + spin_lock(&sb_lock); + list_for_each_entry(sb, &super_blocks, s_list) { + if (sb->s_bdev == bdev) { + if (sb->s_root) { + sb->s_count++; + spin_unlock(&sb_lock); + return sb; + } + } + } + spin_unlock(&sb_lock); + return NULL; +} +EXPORT_SYMBOL(get_super_without_lock); + struct super_block * user_get_super(dev_t dev) { struct super_block *sb; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3.org/include/linux/buffer_head.h linux-2.6.26-rc3-fre eze/include/linux/buffer_head.h --- linux-2.6.26-rc3.org/include/linux/buffer_head.h 2008-05-19 06:36:41.000000000 +0900 +++ linux-2.6.26-rc3-freeze/include/linux/buffer_head.h 2008-05-19 21:03:29.000000000 +0900 @@ -171,7 +171,7 @@ void __wait_on_buffer(struct buffer_head wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); struct super_block *freeze_bdev(struct block_device *); -void thaw_bdev(struct block_device *, struct super_block *); +int thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block, diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3.org/include/linux/fs.h linux-2.6.26-rc3-freeze/inclu de/linux/fs.h --- linux-2.6.26-rc3.org/include/linux/fs.h 2008-05-19 06:36:41.000000000 +0900 +++ linux-2.6.26-rc3-freeze/include/linux/fs.h 2008-05-19 21:03:29.000000000 +0900 @@ -223,6 +223,8 @@ extern int dir_notify_enable; #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ +#define FIFREEZE _IOWR('X', 119, int) /* Freeze */ +#define FITHAW _IOWR('X', 120, int) /* Thaw */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -494,6 +496,13 @@ int pagecache_write_end(struct file *, s loff_t pos, unsigned len, unsigned copied, struct page *page, void *fsdata); +/* + * Bits in block_device.bd_state. + */ +enum bd_state { + BD_FREEZE_OP /* In freeze operation */ +}; + struct backing_dev_info; struct address_space { struct inode *host; /* owner: inode, block_device */ @@ -547,6 +556,9 @@ struct block_device { * care to not mess up bd_private for that case. */ unsigned long bd_private; + + /* State of the block device. (Used by freeze feature) */ + unsigned long bd_state; }; /* @@ -1964,7 +1976,9 @@ extern int do_vfs_ioctl(struct file *fil extern void get_filesystem(struct file_system_type *fs); extern void put_filesystem(struct file_system_type *fs); extern struct file_system_type *get_fs_type(const char *name); +extern void put_super(struct super_block *sb); extern struct super_block *get_super(struct block_device *); +extern struct super_block *get_super_without_lock(struct block_device *); extern struct super_block *user_get_super(dev_t); extern void drop_super(struct super_block *sb); From owner-xfs@oss.sgi.com Thu May 22 01:50:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 01:50:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4M8oBID009285 for ; Thu, 22 May 2008 01:50:11 -0700 X-ASG-Debug-ID: 1211446260-1f9f00c90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo201.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 962EEBC137F for ; Thu, 22 May 2008 01:51:00 -0700 (PDT) Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [202.32.8.193]) by cuda.sgi.com with ESMTP id yQwebgoYxWVX8SFe for ; Thu, 22 May 2008 01:51:00 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate53F.nec.co.jp [10.7.69.162]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8p0Ei023954; Thu, 22 May 2008 17:51:00 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4M8p0G13474; Thu, 22 May 2008 17:51:00 +0900 (JST) Received: from kuichi.jp.nec.com (kuichi.jp.nec.com [10.26.220.17]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8oxUe020749; Thu, 22 May 2008 17:50:59 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Thu, 22 May 2008 17:50:59 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Subject: [RFC PATCH 2/3] Remove XFS specific ioctl interfaces for freeze feature Message-Id: <20080522175058t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Thu, 22 May 2008 17:50:58 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO201.gate.nec.co.jp[202.32.8.193] X-Barracuda-Start-Time: 1211446261 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.1, rules version 3.1.51080 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16074 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs It removes XFS specific ioctl interfaces and request codes for freeze feature. This patch has been supplied by David Chinner. Signed-off-by: Dave Chinner Signed-off-by: Takashi Sato --- linux-2.6/xfs_ioctl.c | 15 --------------- linux-2.6/xfs_ioctl32.c | 2 -- xfs_fs.h | 4 ++-- 3 files changed, 2 insertions(+), 19 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-freeze/fs/xfs/linux-2.6/xfs_ioctl.c linux-2.6.26-rc3 -xfs/fs/xfs/linux-2.6/xfs_ioctl.c --- linux-2.6.26-rc3-freeze/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-19 21:02:30.000000000 +0900 +++ linux-2.6.26-rc3-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-19 21:04:22.000000000 +0900 @@ -1233,21 +1233,6 @@ xfs_ioctl( return -error; } - case XFS_IOC_FREEZE: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - - if (inode->i_sb->s_frozen == SB_UNFROZEN) - freeze_bdev(inode->i_sb->s_bdev); - return 0; - - case XFS_IOC_THAW: - if (!capable(CAP_SYS_ADMIN)) - return -EPERM; - if (inode->i_sb->s_frozen != SB_UNFROZEN) - thaw_bdev(inode->i_sb->s_bdev, inode->i_sb); - return 0; - case XFS_IOC_GOINGDOWN: { __uint32_t in; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c linux-2.6.26-r c3-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c --- linux-2.6.26-rc3-freeze/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-05-19 21:02:30.000000000 +0900 +++ linux-2.6.26-rc3-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c 2008-05-19 21:04:22.000000000 +0900 @@ -398,8 +398,6 @@ xfs_compat_ioctl( case XFS_IOC_FSGROWFSDATA: case XFS_IOC_FSGROWFSLOG: case XFS_IOC_FSGROWFSRT: - case XFS_IOC_FREEZE: - case XFS_IOC_THAW: case XFS_IOC_GOINGDOWN: case XFS_IOC_ERROR_INJECTION: case XFS_IOC_ERROR_CLEARALL: diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-freeze/fs/xfs/xfs_fs.h linux-2.6.26-rc3-xfs/fs/xfs/x fs_fs.h --- linux-2.6.26-rc3-freeze/fs/xfs/xfs_fs.h 2008-05-19 21:02:30.000000000 +0900 +++ linux-2.6.26-rc3-xfs/fs/xfs/xfs_fs.h 2008-05-19 21:04:22.000000000 +0900 @@ -473,8 +473,8 @@ typedef struct xfs_handle { #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection) /* XFS_IOC_ATTRCTL_BY_HANDLE -- deprecated 118 */ -#define XFS_IOC_FREEZE _IOWR('X', 119, int) -#define XFS_IOC_THAW _IOWR('X', 120, int) +/* XFS_IOC_FREEZE -- FIFREEZE 119 */ +/* XFS_IOC_THAW -- FITHAW 120 */ #define XFS_IOC_FSSETDM_BY_HANDLE _IOW ('X', 121, struct xfs_fsop_setdm_handlereq) #define XFS_IOC_ATTRLIST_BY_HANDLE _IOW ('X', 122, struct xfs_fsop_attrlist_handlereq) #define XFS_IOC_ATTRMULTI_BY_HANDLE _IOW ('X', 123, struct xfs_fsop_attrmulti_handlereq) From owner-xfs@oss.sgi.com Thu May 22 01:51:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 01:51:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24, J_CHICKENPOX_53 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4M8pqYl009988 for ; Thu, 22 May 2008 01:51:52 -0700 X-ASG-Debug-ID: 1211446361-1f9f00d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B6850BC1365 for ; Thu, 22 May 2008 01:52:42 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id EKAPKBZYBRMBj2tH for ; Thu, 22 May 2008 01:52:42 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.195]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8qfPN025326; Thu, 22 May 2008 17:52:41 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4M8qfh04212; Thu, 22 May 2008 17:52:41 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv4.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4M8qeuZ025238; Thu, 22 May 2008 17:52:40 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Thu, 22 May 2008 17:52:29 +0900 To: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" Cc: "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: [RFC PATCH 3/3] Add timeout feature Subject: [RFC PATCH 3/3] Add timeout feature Message-Id: <20080522175229t-sato@mail.jp.nec.com> Mime-Version: 1.0 X-Mailer: WeMail32[2.51] ID:1K0086 From: Takashi Sato Date: Thu, 22 May 2008 17:52:29 +0900 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1211446362 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.1, rules version 3.1.51080 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16075 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs The timeout feature is added to freeze ioctl. And new ioctl to reset the timeout period is added. o Freeze the filesystem int ioctl(int fd, int FIFREEZE, long *timeval) fd: The file descriptor of the mountpoint FIFREEZE: request code for the freeze timeval: the timeout period in seconds If it's 0 or 1, the timeout isn't set. This special case of "1" is implemented to keep the compatibility with XFS applications. Return value: 0 if the operation succeeds. Otherwise, -1 o Reset the timeout period int ioctl(int fd, int FIFREEZE_RESET_TIMEOUT, long *timeval) fd:file descriptor of mountpoint FIFREEZE_RESET_TIMEOUT: request code for reset of timeout period timeval: new timeout period in seconds Return value: 0 if the operation succeeds. Otherwise, -1 Error number: If the filesystem has already been unfrozen, errno is set to EINVAL. Signed-off-by: Takashi Sato Signed-off-by: Masayuki Hamaguchi --- drivers/md/dm.c | 2 - fs/block_dev.c | 2 + fs/buffer.c | 14 ++++++- fs/ioctl.c | 78 ++++++++++++++++++++++++++++++++++++++++++-- fs/super.c | 51 ++++++++++++++++++++++++++++ fs/xfs/xfs_fsops.c | 2 - include/linux/buffer_head.h | 2 - include/linux/fs.h | 8 ++++ 8 files changed, 151 insertions(+), 8 deletions(-) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/drivers/md/dm.c linux-2.6.26-rc3-timeout/drivers /md/dm.c --- linux-2.6.26-rc3-xfs/drivers/md/dm.c 2008-05-19 21:03:48.000000000 +0900 +++ linux-2.6.26-rc3-timeout/drivers/md/dm.c 2008-05-19 21:05:46.000000000 +0900 @@ -1407,7 +1407,7 @@ static int lock_fs(struct mapped_device WARN_ON(md->frozen_sb); - md->frozen_sb = freeze_bdev(md->suspended_bdev); + md->frozen_sb = freeze_bdev(md->suspended_bdev, 0); if (IS_ERR(md->frozen_sb)) { r = PTR_ERR(md->frozen_sb); md->frozen_sb = NULL; diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/fs/block_dev.c linux-2.6.26-rc3-timeout/fs/block _dev.c --- linux-2.6.26-rc3-xfs/fs/block_dev.c 2008-05-19 21:04:00.000000000 +0900 +++ linux-2.6.26-rc3-timeout/fs/block_dev.c 2008-05-19 21:05:46.000000000 +0900 @@ -284,6 +284,8 @@ static void init_once(struct kmem_cache INIT_LIST_HEAD(&bdev->bd_holder_list); #endif inode_init_once(&ei->vfs_inode); + /* Setup freeze timeout function. */ + INIT_DELAYED_WORK(&bdev->bd_freeze_timeout, freeze_timeout); } static inline void __bd_forget(struct inode *inode) diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/fs/buffer.c linux-2.6.26-rc3-timeout/fs/buffer.c --- linux-2.6.26-rc3-xfs/fs/buffer.c 2008-05-19 21:03:59.000000000 +0900 +++ linux-2.6.26-rc3-timeout/fs/buffer.c 2008-05-19 21:05:46.000000000 +0900 @@ -190,14 +190,17 @@ int fsync_bdev(struct block_device *bdev /** * freeze_bdev -- lock a filesystem and force it into a consistent state - * @bdev: blockdevice to lock + * @bdev: blockdevice to lock + * @timeout_msec: timeout period * * This takes the block device bd_mount_sem to make sure no new mounts * happen on bdev until thaw_bdev() is called. * If a superblock is found on this device, we take the s_umount semaphore * on it to make sure nobody unmounts until the snapshot creation is done. + * If timeout_msec is bigger than 0, this registers the delayed work for + * timeout of the freeze feature. */ -struct super_block *freeze_bdev(struct block_device *bdev) +struct super_block *freeze_bdev(struct block_device *bdev, long timeout_msec) { struct super_block *sb; @@ -234,6 +237,10 @@ struct super_block *freeze_bdev(struct b } sync_blockdev(bdev); + /* Setup unfreeze timer. */ + if (timeout_msec > 0) + add_freeze_timeout(bdev, timeout_msec); + clear_bit(BD_FREEZE_OP, &bdev->bd_state); return sb; /* thaw_bdev releases s->s_umount and bd_mount_sem */ @@ -258,6 +265,9 @@ int thaw_bdev(struct block_device *bdev, return 0; } + /* Delete unfreeze timer. */ + del_freeze_timeout(bdev); + if (sb) { BUG_ON(sb->s_bdev != bdev); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/fs/ioctl.c linux-2.6.26-rc3-timeout/fs/ioctl.c --- linux-2.6.26-rc3-xfs/fs/ioctl.c 2008-05-21 11:44:51.000000000 +0900 +++ linux-2.6.26-rc3-timeout/fs/ioctl.c 2008-05-21 11:45:29.000000000 +0900 @@ -145,12 +145,16 @@ static int ioctl_fioasync(unsigned int f * ioctl_freeze - Freeze the filesystem. * * @filp: target file + * @argp: timeout value(sec) * * Call freeze_bdev() to freeze the filesystem. */ -static int ioctl_freeze(struct file *filp) +static int ioctl_freeze(struct file *filp, unsigned long arg) { + long timeout_sec; + long timeout_msec; struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + int error; if (!capable(CAP_SYS_ADMIN)) return -EPERM; @@ -159,8 +163,27 @@ static int ioctl_freeze(struct file *fil if (sb->s_op->write_super_lockfs == NULL) return -EOPNOTSUPP; + /* arg(sec) to tick value. */ + error = get_user(timeout_sec, (long __user *) arg); + if (error != 0) + return error; + /* + * If 1 is specified as the timeout period, + * it will be changed into 0 to keep the compatibility + * of XFS application(xfs_freeze). + */ + if (timeout_sec < 0) + return -EINVAL; + else if (timeout_sec < 2) + timeout_sec = 0; + + timeout_msec = timeout_sec * 1000; + /* overflow case */ + if (timeout_msec < 0) + return -EINVAL; + /* Freeze */ - sb = freeze_bdev(sb->s_bdev); + sb = freeze_bdev(sb->s_bdev, timeout_msec); if (IS_ERR(sb)) return PTR_ERR(sb); return 0; @@ -185,6 +208,51 @@ static int ioctl_thaw(struct file *filp) } /* + * ioctl_freeze_reset_timeout - Reset timeout for freeze. + * + * @filp: target file + * @argp: timeout value(sec) + * + * Rest timeout for freeze. + */ +static int +ioctl_freeze_reset_timeout(struct file *filp, unsigned long arg) +{ + long timeout_sec; + long timeout_msec; + struct super_block *sb + = filp->f_path.dentry->d_inode->i_sb; + int error; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + /* arg(sec) to tick value */ + error = get_user(timeout_sec, (long __user *) arg); + if (error) + return error; + timeout_msec = timeout_sec * 1000; + if (timeout_msec < 0) + return -EINVAL; + + if (sb) { + if (test_and_set_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state)) + return -EBUSY; + if (sb->s_frozen == SB_UNFROZEN) { + clear_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state); + return -EINVAL; + } + /* setup unfreeze timer */ + if (timeout_msec > 0) + add_freeze_timeout(sb->s_bdev, + timeout_msec); + clear_bit(BD_FREEZE_OP, &sb->s_bdev->bd_state); + } + + return 0; +} + +/* * When you add any new common ioctls to the switches above and below * please update compat_sys_ioctl() too. * @@ -227,13 +295,17 @@ int do_vfs_ioctl(struct file *filp, unsi break; case FIFREEZE: - error = ioctl_freeze(filp); + error = ioctl_freeze(filp, arg); break; case FITHAW: error = ioctl_thaw(filp); break; + case FIFREEZE_RESET_TIMEOUT: + error = ioctl_freeze_reset_timeout(filp, arg); + break; + default: if (S_ISREG(filp->f_path.dentry->d_inode->i_mode)) error = file_ioctl(filp, cmd, arg); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/fs/super.c linux-2.6.26-rc3-timeout/fs/super.c --- linux-2.6.26-rc3-xfs/fs/super.c 2008-05-19 21:04:00.000000000 +0900 +++ linux-2.6.26-rc3-timeout/fs/super.c 2008-05-19 21:05:46.000000000 +0900 @@ -1010,3 +1010,54 @@ struct vfsmount *kern_mount_data(struct } EXPORT_SYMBOL_GPL(kern_mount_data); + +/* + * freeze_timeout - Thaw the filesystem. + * + * @work: work queue (delayed_work.work) + * + * Called by the delayed work when elapsing the timeout period. + * Thaw the filesystem. + */ +void freeze_timeout(struct work_struct *work) +{ + struct block_device *bd = container_of(work, + struct block_device, bd_freeze_timeout.work); + struct super_block *sb = get_super_without_lock(bd); + + thaw_bdev(bd, sb); + + if (sb) + put_super(sb); +} +EXPORT_SYMBOL_GPL(freeze_timeout); + +/* + * add_freeze_timeout - Add timeout for freeze. + * + * @bdev: block device struct + * @timeout_msec: timeout period + * + * Add the delayed work for freeze timeout to the delayed work queue. + */ +void add_freeze_timeout(struct block_device *bdev, long timeout_msec) +{ + s64 timeout_jiffies = msecs_to_jiffies(timeout_msec); + + /* Set delayed work queue */ + cancel_delayed_work(&bdev->bd_freeze_timeout); + schedule_delayed_work(&bdev->bd_freeze_timeout, timeout_jiffies); +} + +/* + * del_freeze_timeout - Delete timeout for freeze. + * + * @bdev: block device struct + * + * Delete the delayed work for freeze timeout from the delayed work queue. + */ +void del_freeze_timeout(struct block_device *bdev) +{ + if (delayed_work_pending(&bdev->bd_freeze_timeout)) + cancel_delayed_work(&bdev->bd_freeze_timeout); +} diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/fs/xfs/xfs_fsops.c linux-2.6.26-rc3-timeout/fs/x fs/xfs_fsops.c --- linux-2.6.26-rc3-xfs/fs/xfs/xfs_fsops.c 2008-05-19 21:04:00.000000000 +0900 +++ linux-2.6.26-rc3-timeout/fs/xfs/xfs_fsops.c 2008-05-19 21:05:46.000000000 +0900 @@ -619,7 +619,7 @@ xfs_fs_goingdown( { switch (inflags) { case XFS_FSOP_GOING_FLAGS_DEFAULT: { - struct super_block *sb = freeze_bdev(mp->m_super->s_bdev); + struct super_block *sb = freeze_bdev(mp->m_super->s_bdev, 0); if (sb && !IS_ERR(sb)) { xfs_force_shutdown(mp, SHUTDOWN_FORCE_UMOUNT); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/include/linux/buffer_head.h linux-2.6.26-rc3-tim eout/include/linux/buffer_head.h --- linux-2.6.26-rc3-xfs/include/linux/buffer_head.h 2008-05-19 21:04:00.000000000 +0900 +++ linux-2.6.26-rc3-timeout/include/linux/buffer_head.h 2008-05-19 21:05:46.000000000 +0900 @@ -170,7 +170,7 @@ int sync_blockdev(struct block_device *b void __wait_on_buffer(struct buffer_head *); wait_queue_head_t *bh_waitq_head(struct buffer_head *bh); int fsync_bdev(struct block_device *); -struct super_block *freeze_bdev(struct block_device *); +struct super_block *freeze_bdev(struct block_device *, long timeout_msec); int thaw_bdev(struct block_device *, struct super_block *); int fsync_super(struct super_block *); int fsync_no_super(struct block_device *); diff -uprN -X /home/sho/pub/MC/freeze-set/dontdiff linux-2.6.26-rc3-xfs/include/linux/fs.h linux-2.6.26-rc3-timeout/incl ude/linux/fs.h --- linux-2.6.26-rc3-xfs/include/linux/fs.h 2008-05-19 21:04:00.000000000 +0900 +++ linux-2.6.26-rc3-timeout/include/linux/fs.h 2008-05-19 21:05:46.000000000 +0900 @@ -8,6 +8,7 @@ #include #include +#include /* * It's silly to have NR_OPEN bigger than NR_FILE, but you can change @@ -225,6 +226,7 @@ extern int dir_notify_enable; #define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */ #define FIFREEZE _IOWR('X', 119, int) /* Freeze */ #define FITHAW _IOWR('X', 120, int) /* Thaw */ +#define FIFREEZE_RESET_TIMEOUT _IO(0x00, 3) /* Reset freeze timeout */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -559,6 +561,8 @@ struct block_device { /* State of the block device. (Used by freeze feature) */ unsigned long bd_state; + /* Delayed work for freeze */ + struct delayed_work bd_freeze_timeout; }; /* @@ -2146,5 +2150,9 @@ int proc_nr_files(struct ctl_table *tabl int get_filesystem_list(char * buf); +extern void add_freeze_timeout(struct block_device *bdev, long timeout_msec); +extern void del_freeze_timeout(struct block_device *bdev); +extern void freeze_timeout(struct work_struct *work); + #endif /* __KERNEL__ */ #endif /* _LINUX_FS_H */ From owner-xfs@oss.sgi.com Thu May 22 06:22:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 06:22:46 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MDMiDS003252 for ; Thu, 22 May 2008 06:22:44 -0700 X-ASG-Debug-ID: 1211462614-04a402c10000-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 F2D391718AD3; Thu, 22 May 2008 06:23:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id qyygVZiSdweq5Nvg; Thu, 22 May 2008 06:23:34 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzAla-0006rm-0B; Thu, 22 May 2008 13:23:34 +0000 Date: Thu, 22 May 2008 09:23:33 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] allow mkfs to make larger logs Subject: Re: [patch] allow mkfs to make larger logs Message-ID: <20080522132333.GB4972@infradead.org> References: <20080522061222.GQ173056135@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522061222.GQ173056135@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211462614 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.1, rules version 3.1.51099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16077 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 04:12:22PM +1000, David Chinner wrote: > =================================================================== > --- xfs-cmds.orig/xfsprogs/include/xfs_fs.h 2008-05-15 16:32:52.929462025 +1000 > +++ xfs-cmds/xfsprogs/include/xfs_fs.h 2008-05-15 18:50:19.494520368 +1000 > @@ -248,10 +248,13 @@ typedef struct xfs_fsop_resblks { > * Minimum and maximum sizes need for growth checks > */ > #define XFS_MIN_AG_BLOCKS 64 > -#define XFS_MIN_LOG_BLOCKS 512 > -#define XFS_MAX_LOG_BLOCKS (64 * 1024) > -#define XFS_MIN_LOG_BYTES (256 * 1024) > -#define XFS_MAX_LOG_BYTES (128 * 1024 * 1024) > +#define XFS_MIN_LOG_BLOCKS 512ULL > +#define XFS_MAX_LOG_BLOCKS (1024 * 1024ULL) > +#define XFS_MIN_LOG_BYTES (10 * 1024 * 1024ULL) > + > +/* keep the maximum size under 2^31 by a small amount */ > +#define XFS_MAX_LOG_BYTES \ > + ((2 * 1024 * 1024 * 1024ULL) - XFS_MIN_LOG_BYTES) This file is a copy for the kernel, so please update it there aswell, once we get changes to these files in both xfs-cmds and the kernel tree merging will become a complete nightmare. Except for that the patch looks good to me. From owner-xfs@oss.sgi.com Thu May 22 06:21:18 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 06:21:20 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MDLGAD003007 for ; Thu, 22 May 2008 06:21:17 -0700 X-ASG-Debug-ID: 1211462526-3bbe02a90000-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 C81CFBC39EF; Thu, 22 May 2008 06:22:06 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 3QJ3Gu60GNMdK4LU; Thu, 22 May 2008 06:22:06 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzAk9-0006pF-6P; Thu, 22 May 2008 13:22:05 +0000 Date: Thu, 22 May 2008 09:22:05 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa 078 - use rmdir to remove directories Subject: Re: [patch] xfsqa 078 - use rmdir to remove directories Message-ID: <20080522132205.GA4972@infradead.org> References: <20080522061120.GP173056135@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522061120.GP173056135@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211462526 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.1, rules version 3.1.51098 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16076 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 04:11:20PM +1000, David Chinner wrote: > > If test 078 fails and you try to run it again immediately, it > will execute a 'rm -f' on a directory which will fail. This should > be a rmdir.... Looks good. rm -rf woul also do it, although slightly more dangerous :) From owner-xfs@oss.sgi.com Thu May 22 06:24:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 06:25:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MDOqfB003859 for ; Thu, 22 May 2008 06:24:53 -0700 X-ASG-Debug-ID: 1211462742-049c031a0000-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 E0B641718C94; Thu, 22 May 2008 06:25:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id rK7dWEY46I8DOj6d; Thu, 22 May 2008 06:25:42 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzAne-0007Cp-8b; Thu, 22 May 2008 13:25:42 +0000 Date: Thu, 22 May 2008 09:25:42 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa test to check log size scaling Subject: Re: [patch] xfsqa test to check log size scaling Message-ID: <20080522132542.GC4972@infradead.org> References: <20080522061257.GR173056135@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522061257.GR173056135@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211462742 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.1, rules version 3.1.51099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16078 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 04:12:57PM +1000, David Chinner wrote: > XFS-QA test to check that log size scaling works correctly > for old and new maximum log sizes. Am I missing somethign or would this fail if the partitions used for xfsqa are smaller than 256GB? I don't even have that much total storage on my laptop :) From owner-xfs@oss.sgi.com Thu May 22 06:27:53 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 06:28:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MDRqir004466 for ; Thu, 22 May 2008 06:27:52 -0700 X-ASG-Debug-ID: 1211462922-1c0702e90000-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 1B2F01A0C8D; Thu, 22 May 2008 06:28:42 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id W9jEeLEhayGHR51F; Thu, 22 May 2008 06:28:42 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzAqX-0007HV-UD; Thu, 22 May 2008 13:28:41 +0000 Date: Thu, 22 May 2008 09:28:41 -0400 From: Christoph Hellwig To: David Chinner Cc: xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] remove xattr buffer size dependency on page size in xfsdump Subject: Re: [patch] remove xattr buffer size dependency on page size in xfsdump Message-ID: <20080522132841.GD4972@infradead.org> References: <20080522061402.GS173056135@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522061402.GS173056135@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211462923 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.1, rules version 3.1.51099 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16079 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 04:14:02PM +1000, David Chinner wrote: > > The extended attr buffer size used by xfsdump is based on page size. > The maximum buffer size the kernel will accept is 64k. On a 64k page > machine, the default buffer size will be rejected by the kernel, thereby > breaking dump and restore. > > Limit the buffer size to XATTR_LIST_MAX in dump, restore and libhandle > so the kernel won't reject otherwise valid requests. I suspect this will break on non-linux platforms because XATTR_LIST_MAX is only in the Linux headers. With a precaution, e.g. by keeping the old behaviour when XATTR_LIST_MAX is not defined this looks good. From owner-xfs@oss.sgi.com Thu May 22 08:55:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 08:55:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MFtaax021405 for ; Thu, 22 May 2008 08:55:37 -0700 X-ASG-Debug-ID: 1211471785-763b00290000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BEFBD165BCE7; Thu, 22 May 2008 08:56:25 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id DBmfvaTK3Yy9fcCg; Thu, 22 May 2008 08:56:25 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4MFuHF3007838 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Thu, 22 May 2008 17:56:17 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4MFuGCq007835; Thu, 22 May 2008 17:56:16 +0200 Date: Thu, 22 May 2008 17:56:16 +0200 From: Christoph Hellwig To: Niv Sardi Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE streamline init/exit path Subject: Re: TAKE streamline init/exit path Message-ID: <20080522155616.GA7682@lst.de> References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> <20080521072425.GA29889@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211471786 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.1, rules version 3.1.51109 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16080 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Wed, May 21, 2008 at 06:11:23PM +1000, Niv Sardi wrote: > > Christoph Hellwig writes: > > > Updated patch below. There's now split out function to create/destroy > > the kmem zones and alloc/free the trace buffers. I've also changed the > > ktrace allocations to KM_MAYFAIL and handled errors resulting from that. > > > > And yes, we really should replace the XFS_*_TRACE ifdefs with a single > > XFS_TRACE.. > > Thanks, > > it's in, forgot to send the TAKE message to oss, here it comes: > > Subject: TAKE 976035 - streamline init/exit path > > Date: Wed, 21 May 2008 18:02:18 +1000 > Workarea: chook.melbourne.sgi.com:/build/xaiki/isms/mangrove-1.3 > Inspected by: hch Well, mangrove was the sles10 NAS tree if I remember correctly. And it indeed hasn't made it to either the CVS or git tree on oss.sgi.com yet. From owner-xfs@oss.sgi.com Thu May 22 09:25:16 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 09:25:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MGPFsD024231 for ; Thu, 22 May 2008 09:25:16 -0700 X-ASG-Debug-ID: 1211473565-582402b10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7531C1713612 for ; Thu, 22 May 2008 09:26:05 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id sNjYRsA58GZrf3Pn for ; Thu, 22 May 2008 09:26:05 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4MGPwF3011108 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 22 May 2008 18:25:58 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4MGPwG1011106 for xfs@oss.sgi.com; Thu, 22 May 2008 18:25:58 +0200 Date: Thu, 22 May 2008 18:25:58 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_open Subject: xfs_open Message-ID: <20080522162558.GA11036@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211473566 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.1, rules version 3.1.51111 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16081 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Currently xfs_open is only called for regular files, but the only non-trivial code in there is for directories. We probably should wire up an ->open that does the XFS_FORCED_SHUTDOWN check for directories anyway, but should we bring back the directory readahead? Anyone on this list bored enough to benchmark it? From owner-xfs@oss.sgi.com Thu May 22 11:10:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 11:10:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4MIAAWu031962 for ; Thu, 22 May 2008 11:10:13 -0700 X-ASG-Debug-ID: 1211479858-527e03cd0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pomaz-ex.szeredi.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0BE63171D499 for ; Thu, 22 May 2008 11:10:58 -0700 (PDT) Received: from pomaz-ex.szeredi.hu (fxip-0047f.externet.hu [88.209.222.127]) by cuda.sgi.com with ESMTP id ChQnIHlBvWcUcrr2 for ; Thu, 22 May 2008 11:10:58 -0700 (PDT) Received: from miko by pomaz-ex.szeredi.hu with local (Exim 4.63) (envelope-from ) id 1JzFFa-0008VR-9B; Thu, 22 May 2008 20:10:50 +0200 To: hch@lst.de CC: miklos@szeredi.hu, hch@lst.de, viro@ZenIV.linux.org.uk, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com In-reply-to: <20080520083351.GA14826@lst.de> (message from Christoph Hellwig on Tue, 20 May 2008 10:33:51 +0200) X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr References: <20080520060838.GA6436@lst.de> <20080520083351.GA14826@lst.de> Message-Id: From: Miklos Szeredi Date: Thu, 22 May 2008 20:10:50 +0200 X-Barracuda-Connect: fxip-0047f.externet.hu[88.209.222.127] X-Barracuda-Start-Time: 1211479861 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.1, rules version 3.1.51117 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16082 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: miklos@szeredi.hu Precedence: bulk X-list: xfs > All major disk or in-memory filesystems except for XFS just pass down > ATTR_*TIME requests to inode_setattr which is not more than just > dirtying the inode. NFS and CIFS set S_NOCMTIME so they're not affected > by this at all. I've checked, and relatively few filesystems set S_NOCMTIME: cifs, fuse, nfs But there are quite a few others which don't call inode_setattr (which means that the unchanged time optimization is lost), or which do something possibly slow in their ->setattr(): adfs, 9p, afs, coda, gfs2 ... just to name a few at the start of the alphabet. So it looks to me as this could cause some unintended performance regressions in these filesystems. Miklos From owner-xfs@oss.sgi.com Thu May 22 15:12:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 15:12:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4MMCAOe022826 for ; Thu, 22 May 2008 15:12:12 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id IAA21439; Fri, 23 May 2008 08:12:54 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4MMCrsT177796362; Fri, 23 May 2008 08:12:54 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4MMCqPf177147951; Fri, 23 May 2008 08:12:52 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 23 May 2008 08:12:52 +1000 From: David Chinner To: Christoph Hellwig Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [patch] xfsqa test to check log size scaling Message-ID: <20080522221252.GV173056135@sgi.com> References: <20080522061257.GR173056135@sgi.com> <20080522132542.GC4972@infradead.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522132542.GC4972@infradead.org> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16083 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 09:25:42AM -0400, Christoph Hellwig wrote: > On Thu, May 22, 2008 at 04:12:57PM +1000, David Chinner wrote: > > XFS-QA test to check that log size scaling works correctly > > for old and new maximum log sizes. > > Am I missing somethign or would this fail if the partitions used for > xfsqa are smaller than 256GB? I don't even have that much total storage > on my laptop :) Uses loop devices and sparse files - should work just fine on any partition a bit over 2GB (the log gets zeroed during mkfs). I know it passses on a 14GB scratch filesystem.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 22 16:54:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 16:54:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4MNsBFg011647 for ; Thu, 22 May 2008 16:54:28 -0700 Received: from snort.melbourne.sgi.com (snort.melbourne.sgi.com [134.14.54.149]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA23442; Fri, 23 May 2008 09:55:02 +1000 Received: from snort.melbourne.sgi.com (localhost [127.0.0.1]) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4MNt1sT177723783; Fri, 23 May 2008 09:55:01 +1000 (AEST) Received: (from dgc@localhost) by snort.melbourne.sgi.com (SGI-8.12.5/8.12.5/Submit) id m4MNt0Fn177639737; Fri, 23 May 2008 09:55:00 +1000 (AEST) X-Authentication-Warning: snort.melbourne.sgi.com: dgc set sender to dgc@sgi.com using -f Date: Fri, 23 May 2008 09:55:00 +1000 From: David Chinner To: Lachlan McIlroy Cc: David Chinner , xfs-dev , xfs-oss Subject: Re: [PATCH] make inode reclaim wait for log I/O to complete Message-ID: <20080522235500.GE173056135@sgi.com> References: <482A77A9.5040806@sgi.com> <20080514064451.GF155679365@sgi.com> <4834EBB7.5010200@sgi.com> <20080522043150.GM173056135@sgi.com> <48352D8C.8090505@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48352D8C.8090505@sgi.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16084 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: dgc@sgi.com Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 06:23:40PM +1000, Lachlan McIlroy wrote: > David Chinner wrote: > >On Thu, May 22, 2008 at 01:42:47PM +1000, Lachlan McIlroy wrote: > >>David Chinner wrote: > >>>On Wed, May 14, 2008 at 03:24:57PM +1000, Lachlan McIlroy wrote: > >>>>An xfs inode can be destroyed before log I/O involving that inode > >>>>is complete. We need to wait for the inode to be unpinned before > >>>>tearing it down. > >..... > >>>>--- fs/xfs/xfs_vnodeops.c_1.757 2008-05-12 12:02:45.000000000 +1000 > >>>>+++ fs/xfs/xfs_vnodeops.c 2008-05-12 12:28:15.000000000 +1000 > >>>>@@ -3324,6 +3324,7 @@ xfs_finish_reclaim( > >>>> * because we're gonna reclaim the inode anyway. > >>>> */ > >>>> if (error) { > >>>>+ xfs_iunpin_wait(ip); > >>>> xfs_iunlock(ip, XFS_ILOCK_EXCL); > >>>> goto reclaim; > >>>> } > >>>We can't get an error from xfs_iflush() from here that hasn't > >>>already passed through xfs_iunpin_wait() in xfs_iflush(). > >>>Hence we should never see a pinned inode through this path. > >>Okay, good point. I'll remove that one. I thought about removing > >>the XFS_FORCED_SHUTDOWN() and dirty inode checks from xfs_finish_reclaim() > >>and calling xfs_iflush() anyway. It will abort if it's a clean inode > >>or it will do the unpin and then abort if it's a forced shutdown. > >>It would make the code in xfs_finish_reclaim() a bit cleaner. I also > >>wouldn't need to export xfs_iunpin_wait(). Thoughts? > > > >Sounds like a fine plan. Please comment it appropriately, though. > > Sounded too easy. Hit this assert with an inode that's still in > the AIL on a forced shutdown. > > /* > * If the inode isn't dirty, then just release the inode > * flush lock and do nothing. > */ > if (xfs_inode_clean(ip)) { > ASSERT((iip != NULL) ? > !(iip->ili_item.li_flags & XFS_LI_IN_AIL) : 1); > xfs_ifunlock(ip); > return 0; > } That's actually not a valid assert if xfs_iflush() is being called in the shutdown case. In all previous cases we've checked for shutdown before calling xfs_iflush(), so that assert would never fire. Now, if we are calling knowing we might be in the shutdown case, then this is an invalid assert. i.e. on shutdown the AIL list is no longer kept properly up to date - we remove inodes from the AIL in xfs_idestroy() in the shutdown case.... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group From owner-xfs@oss.sgi.com Thu May 22 17:25:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 17:25:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N0PhjF013846 for ; Thu, 22 May 2008 17:25:44 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA23933; Fri, 23 May 2008 10:26:22 +1000 Date: Fri, 23 May 2008 10:26:38 +1000 To: "Christoph Hellwig" , "Niv Sardi" Subject: Re: TAKE streamline init/exit path From: "Barry Naujok" Organization: SGI Cc: xfs@oss.sgi.com Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> <20080521072425.GA29889@lst.de> <20080522155616.GA7682@lst.de> Content-Transfer-Encoding: 7bit Message-ID: In-Reply-To: <20080522155616.GA7682@lst.de> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16085 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 23 May 2008 01:56:16 +1000, Christoph Hellwig wrote: > On Wed, May 21, 2008 at 06:11:23PM +1000, Niv Sardi wrote: >> >> Christoph Hellwig writes: >> >> > Updated patch below. There's now split out function to create/destroy >> > the kmem zones and alloc/free the trace buffers. I've also changed >> the >> > ktrace allocations to KM_MAYFAIL and handled errors resulting from >> that. >> > >> > And yes, we really should replace the XFS_*_TRACE ifdefs with a single >> > XFS_TRACE.. >> >> Thanks, >> >> it's in, forgot to send the TAKE message to oss, here it comes: >> >> Subject: TAKE 976035 - streamline init/exit path >> >> Date: Wed, 21 May 2008 18:02:18 +1000 >> Workarea: chook.melbourne.sgi.com:/build/xaiki/isms/mangrove-1.3 >> Inspected by: hch > > Well, mangrove was the sles10 NAS tree if I remember correctly. And it > indeed hasn't made it to either the CVS or git tree on oss.sgi.com yet. That's the name of the workarea (and why it's called that... I have no idea!!) But, the mod did go to the correct location: Modid: xfs-linux-melb:xfs-kern:31210a But there is a few hour gap going from Melbourne to the US repository and then to oss. Barry. From owner-xfs@oss.sgi.com Thu May 22 17:43:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 17:43:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N0hRN7015257 for ; Thu, 22 May 2008 17:43:27 -0700 X-ASG-Debug-ID: 1211503457-307e01f20000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ishtar.tlinx.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C6B491A65AC for ; Thu, 22 May 2008 17:44:17 -0700 (PDT) Received: from ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id IXOxEM2nilyDHjip for ; Thu, 22 May 2008 17:44:17 -0700 (PDT) Received: from [192.168.3.11] (Athena [192.168.3.11]) by ishtar.tlinx.org (8.14.1/8.12.10/SuSE Linux 0.7) with ESMTP id m4N0iDWs029253; Thu, 22 May 2008 17:44:13 -0700 Message-ID: <4836135D.9050409@tlinx.org> Date: Thu, 22 May 2008 17:44:13 -0700 From: Linda Walsh User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Martin Steigerwald , Linux-Xfs X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files References: <4820832B.3070903@dubielvitrum.pl> (sfid-20080506_185726_779300_46423265) <200805062055.36755.Martin@lichtvoll.de> In-Reply-To: <200805062055.36755.Martin@lichtvoll.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: ishtar.tlinx.org[64.81.245.74] X-Barracuda-Start-Time: 1211503457 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.1, rules version 3.1.51141 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16086 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xfs@tlinx.org Precedence: bulk X-list: xfs Martin Steigerwald wrote: > And there is quite some fragmentation on it: > > xfs_db> frag > actual 653519, ideal 587066, fragmentation factor 10.17% ---- Not to disturb you, but are you running xfs_fsr on a regular basis? I have a shell script that runs in my 'cron.daily' that has two lines: ---- #!/bin/bash ionice -c 3 /usr/sbin/xfs_fsr & ------- I've never noticed fragmentation above 1% on my disks...but your mileage may vary .... From owner-xfs@oss.sgi.com Thu May 22 18:57:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 18:57:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (relay2.corp.sgi.com [192.26.58.22]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N1v9aI019975 for ; Thu, 22 May 2008 18:57:10 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by relay2.corp.sgi.com (Postfix) with ESMTP id 645EA3040AB; Thu, 22 May 2008 18:57:57 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4N1vrjm1399391; Fri, 23 May 2008 11:57:54 +1000 (AEST) From: Niv Sardi To: "Barry Naujok" Cc: "Christoph Hellwig" , xfs@oss.sgi.com Subject: Re: TAKE streamline init/exit path References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> <20080521072425.GA29889@lst.de> <20080522155616.GA7682@lst.de> Date: Fri, 23 May 2008 11:57:57 +1000 In-Reply-To: (Barry Naujok's message of "Fri, 23 May 2008 10:26:38 +1000") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16087 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs "Barry Naujok" writes: > On Fri, 23 May 2008 01:56:16 +1000, Christoph Hellwig wrote: > >> On Wed, May 21, 2008 at 06:11:23PM +1000, Niv Sardi wrote: >>> >>> Christoph Hellwig writes: >>> >>> > Updated patch below. There's now split out function to create/destroy >>> > the kmem zones and alloc/free the trace buffers. I've also >>> changed the >>> > ktrace allocations to KM_MAYFAIL and handled errors resulting >>> from that. >>> > >>> > And yes, we really should replace the XFS_*_TRACE ifdefs with a single >>> > XFS_TRACE.. >>> >>> Thanks, >>> >>> it's in, forgot to send the TAKE message to oss, here it comes: >>> >>> Subject: TAKE 976035 - streamline init/exit path >>> >>> Date: Wed, 21 May 2008 18:02:18 +1000 >>> Workarea: chook.melbourne.sgi.com:/build/xaiki/isms/mangrove-1.3 >>> Inspected by: hch >> >> Well, mangrove was the sles10 NAS tree if I remember correctly. And it >> indeed hasn't made it to either the CVS or git tree on oss.sgi.com yet. > > That's the name of the workarea (and why it's called that... I have > no idea!!) > > But, the mod did go to the correct location: > > Modid: xfs-linux-melb:xfs-kern:31210a > > But there is a few hour gap going from Melbourne to the US repository > and then to oss. You really don't want to know how much kittens had to suffer for that TAKE message to be sent out =) Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Thu May 22 21:52:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 21:52:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N4qg5D004802 for ; Thu, 22 May 2008 21:52:46 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA28630; Fri, 23 May 2008 14:53:26 +1000 Message-ID: <48364E43.3030108@sgi.com> Date: Fri, 23 May 2008 14:55:31 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: xfs-dev , xfs-oss Subject: [PATCH V2] make inode reclaim wait for log I/O to complete Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16088 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs During a forced shutdown a xfs inode can be destroyed before log I/O involving that inode is complete. We need to wait for the inode to be unpinned before tearing it down. Version 2 cleans up the code a bit by relying on xfs_iflush() to do the unpinning and forced shutdown check. --- fs/xfs/xfs_inode.c_1.504 2008-05-23 11:19:21.000000000 +1000 +++ fs/xfs/xfs_inode.c 2008-05-23 11:21:14.000000000 +1000 @@ -3082,8 +3082,6 @@ xfs_iflush( * flush lock and do nothing. */ if (xfs_inode_clean(ip)) { - ASSERT((iip != NULL) ? - !(iip->ili_item.li_flags & XFS_LI_IN_AIL) : 1); xfs_ifunlock(ip); return 0; } --- fs/xfs/xfs_vnodeops.c_1.760 2008-05-22 16:01:09.000000000 +1000 +++ fs/xfs/xfs_vnodeops.c 2008-05-23 11:52:54.000000000 +1000 @@ -3260,7 +3260,6 @@ xfs_finish_reclaim( { xfs_perag_t *pag = xfs_get_perag(ip->i_mount, ip->i_ino); bhv_vnode_t *vp = XFS_ITOV_NULL(ip); - int error; if (vp && VN_BAD(vp)) goto reclaim; @@ -3303,29 +3302,16 @@ xfs_finish_reclaim( xfs_iflock(ip); } - if (!XFS_FORCED_SHUTDOWN(ip->i_mount)) { - if (ip->i_update_core || - ((ip->i_itemp != NULL) && - (ip->i_itemp->ili_format.ilf_fields != 0))) { - error = xfs_iflush(ip, sync_mode); - /* - * If we hit an error, typically because of filesystem - * shutdown, we don't need to let vn_reclaim to know - * because we're gonna reclaim the inode anyway. - */ - if (error) { - xfs_iunlock(ip, XFS_ILOCK_EXCL); - goto reclaim; - } - xfs_iflock(ip); /* synchronize with xfs_iflush_done */ - } - - ASSERT(ip->i_update_core == 0); - ASSERT(ip->i_itemp == NULL || - ip->i_itemp->ili_format.ilf_fields == 0); + /* + * In the case of a forced shutdown we rely on xfs_iflush() to + * wait for the inode to be unpinned before returning an error. + */ + if (xfs_iflush(ip, sync_mode) == 0) { + /* synchronize with xfs_iflush_done */ + xfs_iflock(ip); + xfs_ifunlock(ip); } - xfs_ifunlock(ip); xfs_iunlock(ip, XFS_ILOCK_EXCL); reclaim: From owner-xfs@oss.sgi.com Thu May 22 21:58:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 21:58:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N4wOrp005452 for ; Thu, 22 May 2008 21:58:27 -0700 X-ASG-Debug-ID: 1211518753-0cef00b80000-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 B54E8BD0DE4; Thu, 22 May 2008 21:59:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id BdDpuMZ707PKVNJi; Thu, 22 May 2008 21:59:13 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzPN3-00049O-0m; Fri, 23 May 2008 04:59:13 +0000 Date: Fri, 23 May 2008 00:59:13 -0400 From: Christoph Hellwig To: David Chinner Cc: Christoph Hellwig , xfs-dev , xfs-oss X-ASG-Orig-Subj: Re: [patch] xfsqa test to check log size scaling Subject: Re: [patch] xfsqa test to check log size scaling Message-ID: <20080523045912.GA12194@infradead.org> References: <20080522061257.GR173056135@sgi.com> <20080522132542.GC4972@infradead.org> <20080522221252.GV173056135@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522221252.GV173056135@sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211518755 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.1, rules version 3.1.51160 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16089 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Fri, May 23, 2008 at 08:12:52AM +1000, David Chinner wrote: > On Thu, May 22, 2008 at 09:25:42AM -0400, Christoph Hellwig wrote: > > On Thu, May 22, 2008 at 04:12:57PM +1000, David Chinner wrote: > > > XFS-QA test to check that log size scaling works correctly > > > for old and new maximum log sizes. > > > > Am I missing somethign or would this fail if the partitions used for > > xfsqa are smaller than 256GB? I don't even have that much total storage > > on my laptop :) > > Uses loop devices and sparse files - should work just fine on any partition a > bit over 2GB (the log gets zeroed during mkfs). I know it passses on a 14GB > scratch filesystem.... Okay for the patch then. From owner-xfs@oss.sgi.com Thu May 22 22:21:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 22:21:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_61 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N5LXrY007405 for ; Thu, 22 May 2008 22:21:34 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA29196; Fri, 23 May 2008 15:22:14 +1000 Message-ID: <48365486.3060503@sgi.com> Date: Fri, 23 May 2008 15:22:14 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com Subject: Re: [PATCH] use generic_*xattr routines References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> In-Reply-To: <20080521081656.GA2638@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16090 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi Christoph, Looks reasonable to me. In list_one_attr(), which looks based on attr_generic_listadd(), it does a final: > + p += len; which seems useless. An aside, I noticed in passing (which was in existing code), how we call vn_revalidate in xfs_xattr_system_set(). I presume this is because we call xfs_acl_setmode() in xfs_acl_vset() when we want to sync the mode bits to the ACL. If this is the case, then I think it would have been clearer to put vn_revalidate() in the vicinity of xfs_acl_setmode(). Or is there some other reason? I'll test it out. Thanks, Tim. Christoph Hellwig wrote: > On Wed, Apr 30, 2008 at 01:22:17PM +0200, Christoph Hellwig wrote: >> Use the generic set, get and removexattr methods and supply the s_xattr >> array with fine-grained handlers. All XFS/Linux highlevel attr handling is >> rewritten from scratch and placed into fs/xfs/linux-2.6/xfs_xattr.c so >> that it's separated from the generic low-level code. >> >> The code size reduction is not as big as I had hoped, but it's still a >> worthwile cleanup. >> >> I didn't managed to get rid of struct attrnames yet, as it's still used >> to hack the Linux string prefixes into the output inside the lowest >> level xattr code. I have some plans to clean that bit up aswell, but >> that will have to wait for a while. > > Updated on top of the case-insensitive filename changes: > > Just my notes (for my reference)... > Signed-off-by: Christoph Hellwig > > Index: linux-2.6-xfs/fs/xfs/Makefile > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/Makefile 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/Makefile 2008-05-21 10:06:38.000000000 +0200 > @@ -97,6 +97,7 @@ xfs-y += $(addprefix $(XFS_LINUX)/, \ > xfs_lrw.o \ > xfs_super.o \ > xfs_vnode.o \ > + xfs_xattr.o \ > xfs_ksyms.o) > Okay adding in a linux-2.6/xfs_xattr.c (slightly different name than xfs_attr.c) > # Objects in support/ > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.c 2008-05-21 10:14:54.000000000 +0200 > @@ -282,7 +282,7 @@ xfs_vn_mknod( > struct xfs_inode *ip = NULL; > xfs_acl_t *default_acl = NULL; > struct xfs_name name; > - attrexists_t test_default_acl = _ACL_DEFAULT_EXISTS; > + int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; > int error; > > /* > @@ -771,98 +771,6 @@ xfs_vn_truncate( > WARN_ON(error); > } > So you are removing xfs_vn_setxattr, xfs_vn_getxattr, and xfs_vn_removexattr and calling generic_xattr and retaining the code in xattr_handler's. You leave xfs_vn_listxattr alone. Just like ext3 does its own. Ok. > -STATIC int > -xfs_vn_setxattr( > - struct dentry *dentry, > - const char *name, > - const void *data, > - size_t size, > - int flags) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - /* Convert Linux syscall to XFS internal ATTR flags */ > - if (flags & XATTR_CREATE) > - xflags |= ATTR_CREATE; > - if (flags & XATTR_REPLACE) > - xflags |= ATTR_REPLACE; > - xflags |= namesp->attr_flag; > - return namesp->attr_set(vp, attr, (void *)data, size, xflags); > -} > - > -STATIC ssize_t > -xfs_vn_getxattr( > - struct dentry *dentry, > - const char *name, > - void *data, > - size_t size) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - /* Convert Linux syscall to XFS internal ATTR flags */ > - if (!size) { > - xflags |= ATTR_KERNOVAL; > - data = NULL; > - } > - xflags |= namesp->attr_flag; > - return namesp->attr_get(vp, attr, (void *)data, size, xflags); > -} > - > -STATIC ssize_t > -xfs_vn_listxattr( > - struct dentry *dentry, > - char *data, > - size_t size) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - int error, xflags = ATTR_KERNAMELS; > - ssize_t result; > - > - if (!size) > - xflags |= ATTR_KERNOVAL; > - xflags |= capable(CAP_SYS_ADMIN) ? ATTR_KERNFULLS : ATTR_KERNORMALS; > - > - error = attr_generic_list(vp, data, size, xflags, &result); > - if (error < 0) > - return error; > - return result; > -} > - > -STATIC int > -xfs_vn_removexattr( > - struct dentry *dentry, > - const char *name) > -{ > - bhv_vnode_t *vp = vn_from_inode(dentry->d_inode); > - char *attr = (char *)name; > - attrnames_t *namesp; > - int xflags = 0; > - > - namesp = attr_lookup_namespace(attr, attr_namespaces, ATTR_NAMECOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - attr += namesp->attr_namelen; > - > - xflags |= namesp->attr_flag; > - return namesp->attr_remove(vp, attr, xflags); > -} > - > STATIC long > xfs_vn_fallocate( > struct inode *inode, > @@ -910,10 +818,10 @@ const struct inode_operations xfs_inode_ > .truncate = xfs_vn_truncate, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > .fallocate = xfs_vn_fallocate, > }; > > @@ -930,10 +838,10 @@ const struct inode_operations xfs_dir_in > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > > const struct inode_operations xfs_dir_ci_inode_operations = { > @@ -949,10 +857,10 @@ const struct inode_operations xfs_dir_ci > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > > const struct inode_operations xfs_symlink_inode_operations = { > @@ -962,8 +870,8 @@ const struct inode_operations xfs_symlin > .permission = xfs_vn_permission, > .getattr = xfs_vn_getattr, > .setattr = xfs_vn_setattr, > - .setxattr = xfs_vn_setxattr, > - .getxattr = xfs_vn_getxattr, > + .setxattr = generic_setxattr, > + .getxattr = generic_getxattr, > + .removexattr = generic_removexattr, > .listxattr = xfs_vn_listxattr, > - .removexattr = xfs_vn_removexattr, > }; > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_xattr.c 2008-05-21 10:06:38.000000000 +0200 > @@ -0,0 +1,266 @@ > +/* > + * Copyright (C) 2008 Christoph Hellwig. > + * Released under GPL v2. > + */ > + > +#include "xfs.h" > +#include "xfs_attr.h" > +#include "xfs_acl.h" > +#include "xfs_vnodeops.h" > + > +#include > +#include > + > + > +/* > + * ACL handling. Should eventually be moved into xfs_acl.c > + */ > + > +static int > +xfs_decode_acl(const char *name) > +{ > + if (strcmp(name, "posix_acl_access") == 0) > + return _ACL_TYPE_ACCESS; > + else if (strcmp(name, "posix_acl_default") == 0) > + return _ACL_TYPE_DEFAULT; > + return -EINVAL; > +} > + Fine. > +static int > +xfs_xattr_system_get(struct inode *inode, const char *name, > + void *buffer, size_t size) > +{ > + int acl; > + > + acl = xfs_decode_acl(name); > + if (acl < 0) > + return acl; > + > + return xfs_acl_vget(inode, buffer, size, acl); > +} > + Fine. Seems a little funny as we are calling it a system EA but then directly calling the acl code. i.e. acknowledging, I guess, that we only have Posix ACLs as system EAs. Almost could call it xfs_xattr_acl_get(). It saves on one liner wrappers I guess. > +static int > +xfs_xattr_system_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + int error, acl; > + > + acl = xfs_decode_acl(name); > + if (acl < 0) > + return acl; > + if (flags & XATTR_CREATE) > + return -EINVAL; > + > + if (!value) > + return xfs_acl_vremove(inode, acl); > + > + error = xfs_acl_vset(inode, (void *)value, size, acl); > + if (!error) > + vn_revalidate(inode); > + return error; > +} > + Why the vn_revalidate? b/c we did that in xfs_attr.c/attr_system_set(). It updates the linux inode fields based on the xfs inode fields. I wonder why. Because we can modify an ACL which can cause mode changes? in the call to xfs_acl_setmode(vp, xfs_acl, &basicperms) I wonder why we do it at this point though as it doesn't look so obvious. > +static struct xattr_handler xfs_xattr_system_handler = { > + .prefix = XATTR_SYSTEM_PREFIX, > + .get = xfs_xattr_system_get, > + .set = xfs_xattr_system_set, > +}; > + > + > +/* > + * Real xattr handling. The only difference between the namespaces is > + * a flag passed to the low-level attr code. > + */ > + > +static int > +__xfs_xattr_get(struct inode *inode, const char *name, > + void *value, size_t size, int xflags) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + int error, asize = size; > + > + if (strcmp(name, "") == 0) > + return -EINVAL; > + > + /* Convert Linux syscall to XFS internal ATTR flags */ > + if (!size) { > + xflags |= ATTR_KERNOVAL; > + value = NULL; > + } > + > + error = -xfs_attr_get(ip, name, value, &asize, xflags); > + if (error) > + return error; > + return asize; > +} > + Ok. > +static int > +__xfs_xattr_set(struct inode *inode, const char *name, const void *value, > + size_t size, int flags, int xflags) > +{ > + struct xfs_inode *ip = XFS_I(inode); > + > + if (strcmp(name, "") == 0) > + return -EINVAL; > + > + /* Convert Linux syscall to XFS internal ATTR flags */ > + if (flags & XATTR_CREATE) > + xflags |= ATTR_CREATE; > + if (flags & XATTR_REPLACE) > + xflags |= ATTR_REPLACE; > + > + if (!value) > + return -xfs_attr_remove(ip, name, xflags); > + return -xfs_attr_set(ip, name, (void *)value, size, xflags); > +} > + Ok. > +static int > +xfs_xattr_user_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, 0); > +} > + > +static int > +xfs_xattr_user_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, 0); > +} > + > +struct attrnames attr_user = { > + .attr_name = "user.", > + .attr_namelen = sizeof("user.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_user_handler = { > + .prefix = XATTR_USER_PREFIX, > + .get = xfs_xattr_user_get, > + .set = xfs_xattr_user_set, > +}; > + Ok. > + > +static int > +xfs_xattr_trusted_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, ATTR_ROOT); > +} > + > +static int > +xfs_xattr_trusted_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_ROOT); > +} > + > +struct attrnames attr_trusted = { > + .attr_name = "trusted.", > + .attr_namelen = sizeof("trusted.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_trusted_handler = { > + .prefix = XATTR_TRUSTED_PREFIX, > + .get = xfs_xattr_trusted_get, > + .set = xfs_xattr_trusted_set, > +}; > + Ok. > + > +static int > +xfs_xattr_secure_get(struct inode *inode, const char *name, > + void *value, size_t size) > +{ > + return __xfs_xattr_get(inode, name, value, size, ATTR_SECURE); > +} > + > +static int > +xfs_xattr_secure_set(struct inode *inode, const char *name, > + const void *value, size_t size, int flags) > +{ > + return __xfs_xattr_set(inode, name, value, size, flags, ATTR_SECURE); > +} > + > +struct attrnames attr_secure = { > + .attr_name = "security.", > + .attr_namelen = sizeof("security.") - 1, > +}; > + > +static struct xattr_handler xfs_xattr_security_handler = { > + .prefix = XATTR_SECURITY_PREFIX, > + .get = xfs_xattr_secure_get, > + .set = xfs_xattr_secure_set, > +}; > + Ok. > + > +struct xattr_handler *xfs_xattr_handlers[] = { > + &xfs_xattr_user_handler, > + &xfs_xattr_trusted_handler, > + &xfs_xattr_security_handler, > + &xfs_xattr_system_handler, > + NULL > +}; > + So List code is done separately. Hmmmm... Oh, okay, ATTR_KERNAMELS (for attr_vn_listxattr) uses concatenated string arrays whereas for not ATTR_KERNAMELS, such as is used in xfs_attrlist_by_handle is uses list data in the form: > +static int > +list_one_attr(const char *name, const size_t len, void *data, > + size_t size, ssize_t *result) > +{ > + char *p = data + *result; > + > + *result += len; > + if (!size) > + return 0; > + if (*result > size) > + return -ERANGE; > + > + strcpy(p, name); > + p += len; Q: Why increment p? Ok, this code looks like it is coming from attr_generic_listadd(). > + return 0; > +} > + Previously, in attr_generic_list it did: -> xfs_attr_list -> attr_system_list So you've expanded out attr_system_list into xfs_vn_listxattr(). > +ssize_t > +xfs_vn_listxattr(struct dentry *dentry, char *data, size_t size) > +{ > + struct inode *inode = dentry->d_inode; > + struct xfs_inode *ip = XFS_I(inode); > + attrlist_cursor_kern_t cursor = { 0 }; > + int error, xflags; > + ssize_t result; > + > + xflags = ATTR_KERNAMELS; > + if (!size) > + xflags |= ATTR_KERNOVAL; > + > + if (capable(CAP_SYS_ADMIN)) > + xflags |= ATTR_KERNFULLS; > + else > + xflags |= ATTR_KERNORMALS; > + > + > + /* > + * First read the regular on-disk attributes. > + */ > + result = -xfs_attr_list(ip, data, size, xflags, &cursor); > + if (result < 0) > + return result; > + > + /* > + * Then add the two synthetic ACL attributes. > + */ > + if (xfs_acl_vhasacl_access(inode)) { > + error = list_one_attr(POSIX_ACL_XATTR_ACCESS, > + strlen(POSIX_ACL_XATTR_ACCESS) + 1, > + data, size, &result); > + if (error) > + return error; > + } > + > + if (xfs_acl_vhasacl_default(inode)) { > + error = list_one_attr(POSIX_ACL_XATTR_DEFAULT, > + strlen(POSIX_ACL_XATTR_DEFAULT) + 1, > + data, size, &result); > + if (error) > + return error; > + } > + > + return result; > +} Looks reasonable. > Index: linux-2.6-xfs/fs/xfs/xfs_attr.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.c 2008-05-21 10:06:38.000000000 +0200 > @@ -57,11 +57,6 @@ > * Provide the external interfaces to manage attribute lists. > */ > > -#define ATTR_SYSCOUNT 2 > -static struct attrnames posix_acl_access; > -static struct attrnames posix_acl_default; > -static struct attrnames *attr_system_names[ATTR_SYSCOUNT]; > - > /*======================================================================== > * Function prototypes for the kernel. > *========================================================================*/ > @@ -2378,270 +2373,3 @@ xfs_attr_trace_enter(int type, char *whe > (void *)a13, (void *)a14, (void *)a15); > } > #endif /* XFS_ATTR_TRACE */ > - > - > -/*======================================================================== > - * System (pseudo) namespace attribute interface routines. > - *========================================================================*/ > - > -STATIC int > -posix_acl_access_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vset(vp, data, size, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return xfs_acl_vremove(vp, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vget(vp, data, size, _ACL_TYPE_ACCESS); > -} > - > -STATIC int > -posix_acl_access_exists( > - bhv_vnode_t *vp) > -{ > - return xfs_acl_vhasacl_access(vp); > -} > - > -STATIC int > -posix_acl_default_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vset(vp, data, size, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return xfs_acl_vget(vp, data, size, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return xfs_acl_vremove(vp, _ACL_TYPE_DEFAULT); > -} > - > -STATIC int > -posix_acl_default_exists( > - bhv_vnode_t *vp) > -{ > - return xfs_acl_vhasacl_default(vp); > -} > - > -static struct attrnames posix_acl_access = { > - .attr_name = "posix_acl_access", > - .attr_namelen = sizeof("posix_acl_access") - 1, > - .attr_get = posix_acl_access_get, > - .attr_set = posix_acl_access_set, > - .attr_remove = posix_acl_access_remove, > - .attr_exists = posix_acl_access_exists, > -}; > - > -static struct attrnames posix_acl_default = { > - .attr_name = "posix_acl_default", > - .attr_namelen = sizeof("posix_acl_default") - 1, > - .attr_get = posix_acl_default_get, > - .attr_set = posix_acl_default_set, > - .attr_remove = posix_acl_default_remove, > - .attr_exists = posix_acl_default_exists, > -}; > - > -static struct attrnames *attr_system_names[] = > - { &posix_acl_access, &posix_acl_default }; > - > - > -/*======================================================================== > - * Namespace-prefix-style attribute name interface routines. > - *========================================================================*/ > - > -STATIC int > -attr_generic_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - return -xfs_attr_set(xfs_vtoi(vp), name, data, size, xflags); > -} > - > -STATIC int > -attr_generic_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - int error, asize = size; > - > - error = xfs_attr_get(xfs_vtoi(vp), name, data, &asize, xflags); > - if (!error) > - return asize; > - return -error; > -} > - > -STATIC int > -attr_generic_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - return -xfs_attr_remove(xfs_vtoi(vp), name, xflags); > -} > - > -STATIC int > -attr_generic_listadd( > - attrnames_t *prefix, > - attrnames_t *namesp, > - void *data, > - size_t size, > - ssize_t *result) > -{ > - char *p = data + *result; > - > - *result += prefix->attr_namelen; > - *result += namesp->attr_namelen + 1; > - if (!size) > - return 0; > - if (*result > size) > - return -ERANGE; > - strcpy(p, prefix->attr_name); > - p += prefix->attr_namelen; > - strcpy(p, namesp->attr_name); > - p += namesp->attr_namelen + 1; > - return 0; > -} > - > -STATIC int > -attr_system_list( > - bhv_vnode_t *vp, > - void *data, > - size_t size, > - ssize_t *result) > -{ > - attrnames_t *namesp; > - int i, error = 0; > - > - for (i = 0; i < ATTR_SYSCOUNT; i++) { > - namesp = attr_system_names[i]; > - if (!namesp->attr_exists || !namesp->attr_exists(vp)) > - continue; > - error = attr_generic_listadd(&attr_system, namesp, > - data, size, result); > - if (error) > - break; > - } > - return error; > -} > - > -int > -attr_generic_list( > - bhv_vnode_t *vp, void *data, size_t size, int xflags, ssize_t *result) > -{ > - attrlist_cursor_kern_t cursor = { 0 }; > - int error; > - > - error = xfs_attr_list(xfs_vtoi(vp), data, size, xflags, &cursor); > - if (error > 0) > - return -error; > - *result = -error; > - return attr_system_list(vp, data, size, result); > -} > - > -attrnames_t * > -attr_lookup_namespace( > - char *name, > - struct attrnames **names, > - int nnames) > -{ > - int i; > - > - for (i = 0; i < nnames; i++) > - if (!strncmp(name, names[i]->attr_name, names[i]->attr_namelen)) > - return names[i]; > - return NULL; > -} > - > -STATIC int > -attr_system_set( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - attrnames_t *namesp; > - int error; > - > - if (xflags & ATTR_CREATE) > - return -EINVAL; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - error = namesp->attr_set(vp, name, data, size, xflags); > - if (!error) > - error = vn_revalidate(vp); > - return error; > -} > - > -STATIC int > -attr_system_get( > - bhv_vnode_t *vp, char *name, void *data, size_t size, int xflags) > -{ > - attrnames_t *namesp; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - return namesp->attr_get(vp, name, data, size, xflags); > -} > - > -STATIC int > -attr_system_remove( > - bhv_vnode_t *vp, char *name, int xflags) > -{ > - attrnames_t *namesp; > - > - namesp = attr_lookup_namespace(name, attr_system_names, ATTR_SYSCOUNT); > - if (!namesp) > - return -EOPNOTSUPP; > - return namesp->attr_remove(vp, name, xflags); > -} > - > -struct attrnames attr_system = { > - .attr_name = "system.", > - .attr_namelen = sizeof("system.") - 1, > - .attr_flag = ATTR_SYSTEM, > - .attr_get = attr_system_get, > - .attr_set = attr_system_set, > - .attr_remove = attr_system_remove, > -}; > - > -struct attrnames attr_trusted = { > - .attr_name = "trusted.", > - .attr_namelen = sizeof("trusted.") - 1, > - .attr_flag = ATTR_ROOT, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames attr_secure = { > - .attr_name = "security.", > - .attr_namelen = sizeof("security.") - 1, > - .attr_flag = ATTR_SECURE, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames attr_user = { > - .attr_name = "user.", > - .attr_namelen = sizeof("user.") - 1, > - .attr_get = attr_generic_get, > - .attr_set = attr_generic_set, > - .attr_remove = attr_generic_remove, > -}; > - > -struct attrnames *attr_namespaces[] = > - { &attr_system, &attr_trusted, &attr_secure, &attr_user }; > Index: linux-2.6-xfs/fs/xfs/xfs_attr.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-05-21 10:06:38.000000000 +0200 > @@ -38,30 +38,14 @@ > struct cred; > struct xfs_attr_list_context; > > -typedef int (*attrset_t)(bhv_vnode_t *, char *, void *, size_t, int); > -typedef int (*attrget_t)(bhv_vnode_t *, char *, void *, size_t, int); > -typedef int (*attrremove_t)(bhv_vnode_t *, char *, int); > -typedef int (*attrexists_t)(bhv_vnode_t *); > - > typedef struct attrnames { > char * attr_name; > unsigned int attr_namelen; > - unsigned int attr_flag; > - attrget_t attr_get; > - attrset_t attr_set; > - attrremove_t attr_remove; > - attrexists_t attr_exists; > } attrnames_t; > > -#define ATTR_NAMECOUNT 4 > extern struct attrnames attr_user; > extern struct attrnames attr_secure; > -extern struct attrnames attr_system; > extern struct attrnames attr_trusted; > -extern struct attrnames *attr_namespaces[ATTR_NAMECOUNT]; > - > -extern attrnames_t *attr_lookup_namespace(char *, attrnames_t **, int); > -extern int attr_generic_list(bhv_vnode_t *, void *, size_t, int, ssize_t *); > > #define ATTR_DONTFOLLOW 0x0001 /* -- unused, from IRIX -- */ > #define ATTR_ROOT 0x0002 /* use attrs in root (trusted) namespace */ > @@ -69,7 +53,6 @@ extern int attr_generic_list(bhv_vnode_t > #define ATTR_SECURE 0x0008 /* use attrs in security namespace */ > #define ATTR_CREATE 0x0010 /* pure create: fail if attr already exists */ > #define ATTR_REPLACE 0x0020 /* pure set: fail if attr does not exist */ > -#define ATTR_SYSTEM 0x0100 /* use attrs in system (pseudo) namespace */ > > #define ATTR_KERNACCESS 0x0400 /* [kernel] iaccess, inode held io-locked */ > #define ATTR_KERNOTIME 0x1000 /* [kernel] don't update inode timestamps */ > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_iops.h 2008-05-21 10:14:20.000000000 +0200 > @@ -27,6 +27,7 @@ extern const struct file_operations xfs_ > extern const struct file_operations xfs_dir_file_operations; > extern const struct file_operations xfs_invis_file_operations; > > +extern ssize_t xfs_vn_listxattr(struct dentry *, char *data, size_t size); > > struct xfs_inode; > extern void xfs_ichgtime(struct xfs_inode *, int); > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-21 10:14:20.000000000 +0200 > @@ -1767,6 +1767,7 @@ xfs_fs_fill_super( > goto out_free_mp; > > sb_min_blocksize(sb, BBSIZE); > + sb->s_xattr = xfs_xattr_handlers; > sb->s_export_op = &xfs_export_operations; > sb->s_qcop = &xfs_quotactl_operations; > sb->s_op = &xfs_super_operations; > Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h > =================================================================== > --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 09:59:53.000000000 +0200 > +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.h 2008-05-21 10:14:20.000000000 +0200 > @@ -81,6 +81,7 @@ extern void xfs_flush_device(struct xfs_ > extern void xfs_blkdev_issue_flush(struct xfs_buftarg *); > > extern const struct export_operations xfs_export_operations; > +extern struct xattr_handler *xfs_xattr_handlers[]; > > #define XFS_M(sb) ((struct xfs_mount *)((sb)->s_fs_info)) > > From owner-xfs@oss.sgi.com Thu May 22 22:48:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 22:48:11 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N5m7IR008921 for ; Thu, 22 May 2008 22:48:07 -0700 X-ASG-Debug-ID: 1211521736-2cee01500000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8E835BD0D1B; Thu, 22 May 2008 22:48:56 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id AkXmKIHCNzNZz9Ab; Thu, 22 May 2008 22:48:56 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4N5mmF3030284 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 23 May 2008 07:48:49 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4N5mmQJ030282; Fri, 23 May 2008 07:48:48 +0200 Date: Fri, 23 May 2008 07:48:48 +0200 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] use generic_*xattr routines Subject: Re: [PATCH] use generic_*xattr routines Message-ID: <20080523054848.GA29507@lst.de> References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <48365486.3060503@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211521737 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.1, rules version 3.1.51164 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16091 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 23, 2008 at 03:22:14PM +1000, Timothy Shimmin wrote: > Hi Christoph, > > Looks reasonable to me. > > In list_one_attr(), which looks based on attr_generic_listadd(), > it does a final: > > + p += len; > which seems useless. Yeah, feel free to remove it when you commit the patch. Alternatively I'll send an incremental patch once commited. > An aside, I noticed in passing (which was in existing code), > how we call vn_revalidate > in xfs_xattr_system_set(). I presume this is because we > call xfs_acl_setmode() in xfs_acl_vset() when we want to sync > the mode bits to the ACL. > If this is the case, then I think it would have been clearer > to put vn_revalidate() in the vicinity of xfs_acl_setmode(). > Or is there some other reason? No real reason, I was just keeping what was there before. But getting rid of vn_revalidate complete is on my todo list. The timestamp updates in there are already not nessecary anymore, and the i_mode/i_uid/i_gid and i_flags updates can be done much better in the caller that change the values in the dinode. > > + xfs_xattr.o \ > > xfs_ksyms.o) > > > Okay adding in a linux-2.6/xfs_xattr.c > (slightly different name than xfs_attr.c) Yeah. For one xfs_attr.c is already taken in fs/xfs and second the xattr name makes it pretty clear these are the Linux xattr routines and not the lowlevel XFS attr code > So you are removing xfs_vn_setxattr, xfs_vn_getxattr, and > xfs_vn_removexattr and calling generic_xattr and retaining the > code in xattr_handler's. > > You leave xfs_vn_listxattr alone. Just like ext3 does its own. Ok. Yes, the generic listxattr doesn't buy us anything as we just traverse the attr btree and list all of them in their natural order. No point in traversing it N times for N different attribute handlers. > > +static int > > +xfs_decode_acl(const char *name) > > +{ > > + if (strcmp(name, "posix_acl_access") == 0) > > + return _ACL_TYPE_ACCESS; > > + else if (strcmp(name, "posix_acl_default") == 0) > > + return _ACL_TYPE_DEFAULT; > > + return -EINVAL; > > +} > > + > Fine. > > > +static int > > +xfs_xattr_system_get(struct inode *inode, const char *name, > > + void *buffer, size_t size) > > +{ > > + int acl; > > + > > + acl = xfs_decode_acl(name); > > + if (acl < 0) > > + return acl; > > + > > + return xfs_acl_vget(inode, buffer, size, acl); > > +} > > + > Fine. > Seems a little funny as we are calling it a system EA but > then directly calling the acl code. > i.e. acknowledging, I guess, that we only have Posix ACLs > as system EAs. > Almost could call it xfs_xattr_acl_get(). > It saves on one liner wrappers I guess. Probably worth adding a comment that we only have acls for now. The reason I did this is to avoid doing multiple memcpys on the xattr name for decoding it. It will probably need some revisiting if/when we support other system xattrs. > Why the vn_revalidate? > b/c we did that in xfs_attr.c/attr_system_set(). > It updates the linux inode fields based on the xfs inode fields. > I wonder why. > Because we can modify an ACL which can cause mode changes? > in the call to xfs_acl_setmode(vp, xfs_acl, &basicperms) > I wonder why we do it at this point though as it doesn't > look so obvious. Yeah, se the comment above. vn_revalidate will go away pretty soon at which point this is sorted out. > > +struct xattr_handler *xfs_xattr_handlers[] = { > > + &xfs_xattr_user_handler, > > + &xfs_xattr_trusted_handler, > > + &xfs_xattr_security_handler, > > + &xfs_xattr_system_handler, > > + NULL > > +}; > > + > > So List code is done separately. Hmmmm... > > Oh, okay, ATTR_KERNAMELS (for attr_vn_listxattr) uses > concatenated string arrays > whereas for not ATTR_KERNAMELS, such as is used in > xfs_attrlist_by_handle is uses list data in the form: > Yes, this is quite unfortunate. My plan is to refactor the low-level attr code so that is passes down a formatter ala filldir for directory reading. This should clean up the attr listing code a lot and also gets rid of the levtover struct attrnames bits. But that a different patch which still needs to be written. > Previously, in attr_generic_list it did: > -> xfs_attr_list > -> attr_system_list > > So you've expanded out attr_system_list into xfs_vn_listxattr(). Yes. And loop-unrolled it while we're at it because the loop over the system attrs didn't make much sense. From owner-xfs@oss.sgi.com Thu May 22 23:22:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 22 May 2008 23:22:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N6MfuE011998 for ; Thu, 22 May 2008 23:22:42 -0700 X-ASG-Debug-ID: 1211523811-13ce020a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8137E1721032 for ; Thu, 22 May 2008 23:23:31 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id mQq5xlJF8kZ5mITW for ; Thu, 22 May 2008 23:23:31 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4N6NNF3032714 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 23 May 2008 08:23:23 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4N6NNQX032707 for xfs@oss.sgi.com; Fri, 23 May 2008 08:23:23 +0200 Date: Fri, 23 May 2008 08:23:23 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] kill INDUCE_IO_ERROR Subject: [PATCH] kill INDUCE_IO_ERROR Message-ID: <20080523062323.GA32637@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211523812 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.1, rules version 3.1.51165 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16092 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs All the error injection is already enabled through ifdef DEBUG, so kill the never set second cpp symbol to activate it without the rest of the debugging infrastructure. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/xfs_error.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.c 2008-05-22 18:55:04.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.c 2008-05-22 18:55:16.000000000 +0200 @@ -58,9 +58,6 @@ xfs_error_trap(int e) } return e; } -#endif - -#if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) int xfs_etest[XFS_NUM_INJECT_ERROR]; int64_t xfs_etest_fsid[XFS_NUM_INJECT_ERROR]; @@ -154,7 +151,7 @@ xfs_errortag_clearall(xfs_mount_t *mp, i return 0; } -#endif /* DEBUG || INDUCE_IO_ERROR */ +#endif /* DEBUG */ static void xfs_fs_vcmn_err(int level, xfs_mount_t *mp, char *fmt, va_list ap) Index: linux-2.6-xfs/fs/xfs/xfs_error.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_error.h 2008-05-22 18:55:04.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_error.h 2008-05-22 18:55:16.000000000 +0200 @@ -125,22 +125,14 @@ extern void xfs_corruption_error(char *t #define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10) #define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT -#if (defined(DEBUG) || defined(INDUCE_IO_ERROR)) +#ifdef DEBUG extern int xfs_error_test(int, int *, char *, int, char *, unsigned long); #define XFS_NUM_INJECT_ERROR 10 - -#ifdef __ANSI_CPP__ -#define XFS_TEST_ERROR(expr, mp, tag, rf) \ - ((expr) || \ - xfs_error_test((tag), (mp)->m_fixedfsid, #expr, __LINE__, __FILE__, \ - (rf))) -#else #define XFS_TEST_ERROR(expr, mp, tag, rf) \ ((expr) || \ xfs_error_test((tag), (mp)->m_fixedfsid, "expr", __LINE__, __FILE__, \ (rf))) -#endif /* __ANSI_CPP__ */ extern int xfs_errortag_add(int error_tag, xfs_mount_t *mp); extern int xfs_errortag_clearall(xfs_mount_t *mp, int loud); @@ -148,7 +140,7 @@ extern int xfs_errortag_clearall(xfs_mou #define XFS_TEST_ERROR(expr, mp, tag, rf) (expr) #define xfs_errortag_add(tag, mp) (ENOSYS) #define xfs_errortag_clearall(mp, loud) (ENOSYS) -#endif /* (DEBUG || INDUCE_IO_ERROR) */ +#endif /* DEBUG */ /* * XFS panic tags -- allow a call to xfs_cmn_err() be turned into Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-22 18:55:05.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-23 08:11:46.000000000 +0200 @@ -1322,7 +1322,7 @@ xfs_unmountfs(xfs_mount_t *mp) if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0) uuid_table_remove(&mp->m_sb.sb_uuid); -#if defined(DEBUG) || defined(INDUCE_IO_ERROR) +#if defined(DEBUG) xfs_errortag_clearall(mp, 0); #endif xfs_mount_free(mp); From owner-xfs@oss.sgi.com Fri May 23 00:58:05 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 23 May 2008 00:58:08 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15, WEIRD_PORT autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N7w2MP000701 for ; Fri, 23 May 2008 00:58:03 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA02202; Fri, 23 May 2008 17:58:47 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id F1ECF58C4C29; Fri, 23 May 2008 17:58:46 +1000 (EST) Date: Fri, 23 May 2008 17:58:46 +1000 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.26-rc4 User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080523075846.F1ECF58C4C29@chook.melbourne.sgi.com> From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16093 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Please pull from the for-linus branch: git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus This will update the following files: fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_inode.c | 9 ++-- fs/xfs/xfs_vnodeops.c | 112 ++++++++++++++++-------------------------- fs/xfs/xfs_vnodeops.h | 3 +- 5 files changed, 59 insertions(+), 90 deletions(-) through these commits: commit c8f5f12e46f079a954d4f7163ba59dadee08ca26 Author: David Chinner Date: Tue May 20 11:30:15 2008 +1000 [XFS] Fix inode list allocation size in writeback. We only need to allocate space for the number of inodes in the cluster when writing back inodes, not every byte in the inode cluster. This reduces the amount of memory needing to be allocated to 256 bytes instead of 64k. SGI-PV: 981949 SGI-Modid: xfs-linux-melb:xfs-kern:31182a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 49383b0e98ad1f69ff4c816eb1961f703df12318 Author: David Chinner Date: Mon May 19 16:29:34 2008 +1000 [XFS] Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. SGI-PV: 981091 SGI-Modid: xfs-linux-melb:xfs-kern:31015a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 978b7237123d007b9fa983af6e0e2fa8f97f9934 Author: David Chinner Date: Mon May 19 16:29:46 2008 +1000 [XFS] Fix fsync() b0rkage. xfs_fsync() fails to wait for data I/O completion before checking if the inode is dirty or clean to decide whether to log the inode or not. This misses inode size updates when the data flushed by the fsync() is extending the file. Hence, like fdatasync(), we need to wait for I/o completion first, then check the inode for cleanliness. Doing so makes the behaviour of xfs_fsync() identical for fsync and fdatasync and we *always* use synchronous semantics if the inode is dirty. Therefore also kill the differences and remove the unused flags from the xfs_fsync function and callers. SGI-PV: 981296 SGI-Modid: xfs-linux-melb:xfs-kern:31033a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy From owner-xfs@oss.sgi.com Fri May 23 01:02:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 23 May 2008 01:02:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15, WEIRD_PORT autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4N82TLQ002789 for ; Fri, 23 May 2008 01:02:30 -0700 X-ASG-Debug-ID: 1211529799-4bf8008b0000-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 6B3F71A75DE; Fri, 23 May 2008 01:03:19 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id iM7b393Fs8hgmDqZ; Fri, 23 May 2008 01:03:19 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1JzSFC-0007cB-Uc; Fri, 23 May 2008 08:03:18 +0000 Date: Fri, 23 May 2008 04:03:18 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.26-rc4 Subject: Re: [GIT PULL] XFS update for 2.6.26-rc4 Message-ID: <20080523080318.GA19078@infradead.org> References: <20080523075846.F1ECF58C4C29@chook.melbourne.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080523075846.F1ECF58C4C29@chook.melbourne.sgi.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211529800 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.1, rules version 3.1.51173 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16094 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs This is missing the page locking fix in xfs_buf.c which causes regressions for people out there. On Fri, May 23, 2008 at 05:58:46PM +1000, Lachlan McIlroy wrote: > Please pull from the for-linus branch: > git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus > > This will update the following files: > > fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- > fs/xfs/linux-2.6/xfs_vnode.h | 8 --- > fs/xfs/xfs_inode.c | 9 ++-- > fs/xfs/xfs_vnodeops.c | 112 ++++++++++++++++-------------------------- > fs/xfs/xfs_vnodeops.h | 3 +- > 5 files changed, 59 insertions(+), 90 deletions(-) > > through these commits: > > commit c8f5f12e46f079a954d4f7163ba59dadee08ca26 > Author: David Chinner > Date: Tue May 20 11:30:15 2008 +1000 > > [XFS] Fix inode list allocation size in writeback. > > We only need to allocate space for the number of inodes in the cluster > when writing back inodes, not every byte in the inode cluster. This > reduces the amount of memory needing to be allocated to 256 bytes instead > of 64k. > > SGI-PV: 981949 > SGI-Modid: xfs-linux-melb:xfs-kern:31182a > > Signed-off-by: David Chinner > Signed-off-by: Christoph Hellwig > Signed-off-by: Lachlan McIlroy > > commit 49383b0e98ad1f69ff4c816eb1961f703df12318 > Author: David Chinner > Date: Mon May 19 16:29:34 2008 +1000 > > [XFS] Don't allow memory reclaim to wait on the filesystem in inode > writeback > > If we allow memory reclaim to wait on the pages under writeback in inode > cluster writeback we could deadlock because we are currently holding the > ILOCK on the initial writeback inode which is needed in data I/O > completion to change the file size or do unwritten extent conversion > before the pages are taken out of writeback state. > > SGI-PV: 981091 > SGI-Modid: xfs-linux-melb:xfs-kern:31015a > > Signed-off-by: David Chinner > Signed-off-by: Christoph Hellwig > Signed-off-by: Lachlan McIlroy > > commit 978b7237123d007b9fa983af6e0e2fa8f97f9934 > Author: David Chinner > Date: Mon May 19 16:29:46 2008 +1000 > > [XFS] Fix fsync() b0rkage. > > xfs_fsync() fails to wait for data I/O completion before checking if the > inode is dirty or clean to decide whether to log the inode or not. This > misses inode size updates when the data flushed by the fsync() is > extending the file. > > Hence, like fdatasync(), we need to wait for I/o completion first, then > check the inode for cleanliness. Doing so makes the behaviour of > xfs_fsync() identical for fsync and fdatasync and we *always* use > synchronous semantics if the inode is dirty. Therefore also kill the > differences and remove the unused flags from the xfs_fsync function and > callers. > > SGI-PV: 981296 > SGI-Modid: xfs-linux-melb:xfs-kern:31033a > > Signed-off-by: David Chinner > Signed-off-by: Christoph Hellwig > Signed-off-by: Lachlan McIlroy > > ---end quoted text--- From owner-xfs@oss.sgi.com Fri May 23 01:12:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 23 May 2008 01:12:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15, WEIRD_PORT autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N8CR71009353 for ; Fri, 23 May 2008 01:12:28 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA02513; Fri, 23 May 2008 18:13:11 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 44625) id D0E1258C4C29; Fri, 23 May 2008 18:13:10 +1000 (EST) Date: Fri, 23 May 2008 18:13:10 +1000 To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: [GIT PULL] XFS update for 2.6.26-rc4 (revised) User-Agent: nail 11.25 7/29/05 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20080523081310.D0E1258C4C29@chook.melbourne.sgi.com> From: lachlan@sgi.com (Lachlan McIlroy) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16095 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Please pull from the for-linus branch: git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus This will update the following files: fs/xfs/linux-2.6/xfs_buf.c | 24 ++++++++-- fs/xfs/linux-2.6/xfs_buf.h | 19 +++++++ fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- fs/xfs/linux-2.6/xfs_vnode.h | 8 --- fs/xfs/xfs_inode.c | 9 ++-- fs/xfs/xfs_vnodeops.c | 112 ++++++++++++++++-------------------------- fs/xfs/xfs_vnodeops.h | 3 +- 7 files changed, 98 insertions(+), 94 deletions(-) through these commits: commit 6ab455eeaff6893cd06da33843e840d888cdc04a Author: Christoph Hellwig Date: Mon May 19 16:34:42 2008 +1000 [XFS] Fix memory corruption with small buffer reads When we have multiple buffers in a single page for a blocksize == pagesize filesystem we might overwrite the page contents if two callers hit it shortly after each other. To prevent that we need to keep the page locked until I/O is completed and the page marked uptodate. Thanks to Eric Sandeen for triaging this bug and finding a reproducible testcase and Dave Chinner for additional advice. This should fix kernel.org bz #10421. Tested-by: Eric Sandeen SGI-PV: 981813 SGI-Modid: xfs-linux-melb:xfs-kern:31173a Signed-off-by: Christoph Hellwig Signed-off-by: David Chinner Signed-off-by: Lachlan McIlroy commit c8f5f12e46f079a954d4f7163ba59dadee08ca26 Author: David Chinner Date: Tue May 20 11:30:15 2008 +1000 [XFS] Fix inode list allocation size in writeback. We only need to allocate space for the number of inodes in the cluster when writing back inodes, not every byte in the inode cluster. This reduces the amount of memory needing to be allocated to 256 bytes instead of 64k. SGI-PV: 981949 SGI-Modid: xfs-linux-melb:xfs-kern:31182a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 49383b0e98ad1f69ff4c816eb1961f703df12318 Author: David Chinner Date: Mon May 19 16:29:34 2008 +1000 [XFS] Don't allow memory reclaim to wait on the filesystem in inode writeback If we allow memory reclaim to wait on the pages under writeback in inode cluster writeback we could deadlock because we are currently holding the ILOCK on the initial writeback inode which is needed in data I/O completion to change the file size or do unwritten extent conversion before the pages are taken out of writeback state. SGI-PV: 981091 SGI-Modid: xfs-linux-melb:xfs-kern:31015a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy commit 978b7237123d007b9fa983af6e0e2fa8f97f9934 Author: David Chinner Date: Mon May 19 16:29:46 2008 +1000 [XFS] Fix fsync() b0rkage. xfs_fsync() fails to wait for data I/O completion before checking if the inode is dirty or clean to decide whether to log the inode or not. This misses inode size updates when the data flushed by the fsync() is extending the file. Hence, like fdatasync(), we need to wait for I/o completion first, then check the inode for cleanliness. Doing so makes the behaviour of xfs_fsync() identical for fsync and fdatasync and we *always* use synchronous semantics if the inode is dirty. Therefore also kill the differences and remove the unused flags from the xfs_fsync function and callers. SGI-PV: 981296 SGI-Modid: xfs-linux-melb:xfs-kern:31033a Signed-off-by: David Chinner Signed-off-by: Christoph Hellwig Signed-off-by: Lachlan McIlroy From owner-xfs@oss.sgi.com Fri May 23 01:13:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 23 May 2008 01:13:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_15, WEIRD_PORT autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4N8DP4B009709 for ; Fri, 23 May 2008 01:13:27 -0700 Received: from [134.14.55.78] (redback.melbourne.sgi.com [134.14.55.78]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA02558; Fri, 23 May 2008 18:14:08 +1000 Message-ID: <48367D4D.8070802@sgi.com> Date: Fri, 23 May 2008 18:16:13 +1000 From: Lachlan McIlroy Reply-To: lachlan@sgi.com User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, xfs@oss.sgi.com, akpm@linux-foundation.org Subject: Re: [GIT PULL] XFS update for 2.6.26-rc4 References: <20080523075846.F1ECF58C4C29@chook.melbourne.sgi.com> <20080523080318.GA19078@infradead.org> In-Reply-To: <20080523080318.GA19078@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16096 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lachlan@sgi.com Precedence: bulk X-list: xfs Bugger! I thought there was another one. Just sent another revised pull request. Christoph Hellwig wrote: > This is missing the page locking fix in xfs_buf.c which causes > regressions for people out there. > > On Fri, May 23, 2008 at 05:58:46PM +1000, Lachlan McIlroy wrote: >> Please pull from the for-linus branch: >> git pull git://oss.sgi.com:8090/xfs/xfs-2.6.git for-linus >> >> This will update the following files: >> >> fs/xfs/linux-2.6/xfs_file.c | 17 ++++-- >> fs/xfs/linux-2.6/xfs_vnode.h | 8 --- >> fs/xfs/xfs_inode.c | 9 ++-- >> fs/xfs/xfs_vnodeops.c | 112 ++++++++++++++++-------------------------- >> fs/xfs/xfs_vnodeops.h | 3 +- >> 5 files changed, 59 insertions(+), 90 deletions(-) >> >> through these commits: >> >> commit c8f5f12e46f079a954d4f7163ba59dadee08ca26 >> Author: David Chinner >> Date: Tue May 20 11:30:15 2008 +1000 >> >> [XFS] Fix inode list allocation size in writeback. >> >> We only need to allocate space for the number of inodes in the cluster >> when writing back inodes, not every byte in the inode cluster. This >> reduces the amount of memory needing to be allocated to 256 bytes instead >> of 64k. >> >> SGI-PV: 981949 >> SGI-Modid: xfs-linux-melb:xfs-kern:31182a >> >> Signed-off-by: David Chinner >> Signed-off-by: Christoph Hellwig >> Signed-off-by: Lachlan McIlroy >> >> commit 49383b0e98ad1f69ff4c816eb1961f703df12318 >> Author: David Chinner >> Date: Mon May 19 16:29:34 2008 +1000 >> >> [XFS] Don't allow memory reclaim to wait on the filesystem in inode >> writeback >> >> If we allow memory reclaim to wait on the pages under writeback in inode >> cluster writeback we could deadlock because we are currently holding the >> ILOCK on the initial writeback inode which is needed in data I/O >> completion to change the file size or do unwritten extent conversion >> before the pages are taken out of writeback state. >> >> SGI-PV: 981091 >> SGI-Modid: xfs-linux-melb:xfs-kern:31015a >> >> Signed-off-by: David Chinner >> Signed-off-by: Christoph Hellwig >> Signed-off-by: Lachlan McIlroy >> >> commit 978b7237123d007b9fa983af6e0e2fa8f97f9934 >> Author: David Chinner >> Date: Mon May 19 16:29:46 2008 +1000 >> >> [XFS] Fix fsync() b0rkage. >> >> xfs_fsync() fails to wait for data I/O completion before checking if the >> inode is dirty or clean to decide whether to log the inode or not. This >> misses inode size updates when the data flushed by the fsync() is >> extending the file. >> >> Hence, like fdatasync(), we need to wait for I/o completion first, then >> check the inode for cleanliness. Doing so makes the behaviour of >> xfs_fsync() identical for fsync and fdatasync and we *always* use >> synchronous semantics if the inode is dirty. Therefore also kill the >> differences and remove the unused flags from the xfs_fsync function and >> callers. >> >> SGI-PV: 981296 >> SGI-Modid: xfs-linux-melb:xfs-kern:31033a >> >> Signed-off-by: David Chinner >> Signed-off-by: Christoph Hellwig >> Signed-off-by: Lachlan McIlroy >> >> > ---end quoted text--- > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > From owner-xfs@oss.sgi.com Fri May 23 03:21:57 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 23 May 2008 03:22:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4NALufF029103 for ; Fri, 23 May 2008 03:21:57 -0700 X-ASG-Debug-ID: 1211538166-274e007f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C1DA5BD2FA0 for ; Fri, 23 May 2008 03:22:46 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id doF5NPgRMHuFhrDs for ; Fri, 23 May 2008 03:22:46 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4NAMdF3018507 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Fri, 23 May 2008 12:22:39 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4NAMdSa018505 for xfs@oss.sgi.com; Fri, 23 May 2008 12:22:39 +0200 Date: Fri, 23 May 2008 12:22:39 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: locking in xfs_unmount_flush Subject: locking in xfs_unmount_flush Message-ID: <20080523102238.GA18456@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211538167 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.1, rules version 3.1.51182 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16097 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Does anybody have an idea why the ilock on the root inode is held over flushing and releasing of the rt and quota inodes in xfs_unmount_flush? I've looked through all that code and can't find any reason why we'd want it. From owner-xfs@oss.sgi.com Sat May 24 06:32:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 24 May 2008 06:32:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.6 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4ODWnrC026858 for ; Sat, 24 May 2008 06:32:49 -0700 X-ASG-Debug-ID: 1211636018-6aa502860000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.ukfsn.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8A7321AD0DC for ; Sat, 24 May 2008 06:33:39 -0700 (PDT) Received: from mail.ukfsn.org (mx1.ukfsn.org [77.75.108.10]) by cuda.sgi.com with ESMTP id Lwfk0W8VhfuYVHxv for ; Sat, 24 May 2008 06:33:39 -0700 (PDT) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 40F0CDECBF; Sat, 24 May 2008 14:38:50 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id yVQdlCmu5PqW; Sat, 24 May 2008 13:56:24 +0100 (BST) Received: from elm.dgreaves.com (78-32-229-233.no-dns-yet.enta.net [78.32.229.233]) by mail.ukfsn.org (Postfix) with ESMTP id 75F27DEE25; Sat, 24 May 2008 14:38:49 +0100 (BST) Received: from ash.dgreaves.com ([10.0.0.90]) by elm.dgreaves.com with esmtp (Exim 4.62) (envelope-from ) id 1JztsN-0003Mp-NV; Sat, 24 May 2008 14:33:35 +0100 Message-ID: <4838192F.3050004@dgreaves.com> Date: Sat, 24 May 2008 14:33:35 +0100 From: David Greaves User-Agent: Mozilla-Thunderbird 2.0.0.12 (X11/20080406) MIME-Version: 1.0 To: Greg KH CC: Eric Sandeen , David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , LinuxRaid X-ASG-Orig-Subj: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array Subject: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> <482FED60.7060405@dgreaves.com> In-Reply-To: <482FED60.7060405@dgreaves.com> X-Enigmail-Version: 0.95.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mx1.ukfsn.org[77.75.108.10] X-Barracuda-Start-Time: 1211636019 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.1, rules version 3.1.51289 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16098 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@dgreaves.com Precedence: bulk X-list: xfs Hi Greg Perusing: http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git doesn't show the patch referenced below as in the queue for 2.6.25.5 David David Greaves wrote: > Eric Sandeen wrote: >> Eric Sandeen wrote: >>> Eric Sandeen wrote: >>> >>>> I'll see if I have a little time today to track down the problem. >>> Does this patch fix it for you? Does for me though I can't yet explain >>> why ;) >>> >>> http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html >>> >>> -Eric > Yes, this fixes it for me - thanks :) > >> So what's happening is that xfs is trying to read a page-sized IO from >> the last sector of the log... which goes off the end of the device. >> This looks like another regression introduced by >> a9759f2de38a3443d5107bddde03b4f3f550060e, but fixed by Christoph's patch >> in the URL above, which should be headed towards -stable. > Damn, I guess I misread my bisect readings when things crashed then. > Still, I said 'around' :) > >> (aside: it seems that this breaks any external log setup where the log >> consists of the entire device... but I'd have expected the xfsqa suite >> to catch this...?) >> >> The patch avoids the problem by looking for some extra locking but it >> seems to me that the root cause is that the buffer being read at this >> point doesn't have it's b_offset, the offset in it's page, set. Might >> be another little buglet but harmless it seems. From owner-xfs@oss.sgi.com Sat May 24 06:58:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 24 May 2008 06:58:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.8 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4ODwmvm028735 for ; Sat, 24 May 2008 06:58:49 -0700 X-ASG-Debug-ID: 1211637577-429503cd0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from 1wt.eu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3D71E172A978 for ; Sat, 24 May 2008 06:59:37 -0700 (PDT) Received: from 1wt.eu (1wt.eu [62.212.114.60]) by cuda.sgi.com with ESMTP id 6bwFYmztLw697CAZ for ; Sat, 24 May 2008 06:59:37 -0700 (PDT) Date: Sat, 24 May 2008 15:52:58 +0200 From: Willy Tarreau To: David Greaves Cc: Greg KH , Eric Sandeen , David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , LinuxRaid , stable@kernel.org X-ASG-Orig-Subj: Re: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array Subject: Re: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array Message-ID: <20080524135258.GF6749@1wt.eu> References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> <482FED60.7060405@dgreaves.com> <4838192F.3050004@dgreaves.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4838192F.3050004@dgreaves.com> User-Agent: Mutt/1.5.11 X-Barracuda-Connect: 1wt.eu[62.212.114.60] X-Barracuda-Start-Time: 1211637579 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.1, rules version 3.1.51291 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16099 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: w@1wt.eu Precedence: bulk X-list: xfs Hi David, On Sat, May 24, 2008 at 02:33:35PM +0100, David Greaves wrote: > Hi Greg > Perusing: > http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git > doesn't show the patch referenced below as in the queue for 2.6.25.5 First, please avoid top-posting. > David Greaves wrote: > > Eric Sandeen wrote: > >> Eric Sandeen wrote: > >>> Eric Sandeen wrote: > >>> > >>>> I'll see if I have a little time today to track down the problem. > >>> Does this patch fix it for you? Does for me though I can't yet explain > >>> why ;) > >>> > >>> http://www.linux.sgi.com/archives/xfs/2008-05/msg00190.html > >>> > >>> -Eric > > Yes, this fixes it for me - thanks :) > > > >> So what's happening is that xfs is trying to read a page-sized IO from > >> the last sector of the log... which goes off the end of the device. > >> This looks like another regression introduced by > >> a9759f2de38a3443d5107bddde03b4f3f550060e, but fixed by Christoph's patch > >> in the URL above, which should be headed towards -stable. > > Damn, I guess I misread my bisect readings when things crashed then. > > Still, I said 'around' :) > > > >> (aside: it seems that this breaks any external log setup where the log > >> consists of the entire device... but I'd have expected the xfsqa suite > >> to catch this...?) > >> > >> The patch avoids the problem by looking for some extra locking but it > >> seems to me that the root cause is that the buffer being read at this > >> point doesn't have it's b_offset, the offset in it's page, set. Might > >> be another little buglet but harmless it seems. It would have helped to CC stable (fixed) and to give the mainline commit ID since the stable branch only holds already merged patches. Greg, the commit is 6ab455ee... Willy From owner-xfs@oss.sgi.com Sat May 24 08:38:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 24 May 2008 08:38:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, SUBJECT_FUZZY_TION,SUBJ_WON autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4OFckGK006442 for ; Sat, 24 May 2008 08:38:47 -0700 X-ASG-Debug-ID: 1211643577-570300e20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 091DE172AD0A for ; Sat, 24 May 2008 08:39:37 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id geUVH1LTjInhedUB for ; Sat, 24 May 2008 08:39: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 sandeen.net (Postfix) with ESMTP id 7B937AC08CA; Sat, 24 May 2008 10:39:35 -0500 (CDT) Message-ID: <483836B6.8030406@sandeen.net> Date: Sat, 24 May 2008 10:39:34 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Willy Tarreau CC: David Greaves , Greg KH , David Chinner , xfs@oss.sgi.com, "'linux-kernel@vger.kernel.org'" , Christoph Hellwig , LinuxRaid , stable@kernel.org X-ASG-Orig-Subj: Re: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array Subject: Re: RFI for 2.6.25.5 : Re: Regression- XFS won't mount on partitioned md array References: <482DC043.5000307@dgreaves.com> <482DD981.5070004@sandeen.net> <482EEFDA.50101@dgreaves.com> <482EF6A7.2020909@sandeen.net> <482F67D9.70400@sandeen.net> <482FBD4C.20608@sandeen.net> <482FED60.7060405@dgreaves.com> <4838192F.3050004@dgreaves.com> <20080524135258.GF6749@1wt.eu> In-Reply-To: <20080524135258.GF6749@1wt.eu> 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: 1211643578 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.1, rules version 3.1.51297 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16100 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Willy Tarreau wrote: > It would have helped to CC stable (fixed) and to give the mainline commit > ID since the stable branch only holds already merged patches. Greg, the > commit is 6ab455ee... > > Willy Yup I'll agree that this should probably go to -stable unless hch or dchinner disagree. FWIW I've already put it in the Fedora kernels. -Eric From owner-xfs@oss.sgi.com Sat May 24 09:18:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 24 May 2008 09:18:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4OGIDCq009090 for ; Sat, 24 May 2008 09:18:13 -0700 X-ASG-Debug-ID: 1211645942-571702b10000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E3261172AD06 for ; Sat, 24 May 2008 09:19:03 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id crBknegJrtWANVqB for ; Sat, 24 May 2008 09:19:03 -0700 (PDT) Received: from [10.0.0.21] (g228003010.adsl.alicedsl.de [92.228.3.10]) by mail.lichtvoll.de (Postfix) with ESMTP id DBC405AE24; Sat, 24 May 2008 18:18:58 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files Date: Sat, 24 May 2008 18:16:55 +0200 User-Agent: KMail/1.9.9 Cc: Linda Walsh References: <4820832B.3070903@dubielvitrum.pl> <200805062055.36755.Martin@lichtvoll.de> <4836135D.9050409@tlinx.org> (sfid-20080523_104048_864520_772E3EC8) In-Reply-To: <4836135D.9050409@tlinx.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <200805241816.56080.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1211645943 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.1, rules version 3.1.51299 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16101 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Hi Linda, Am Freitag 23 Mai 2008 schrieb Linda Walsh: > Martin Steigerwald wrote: > > And there is quite some fragmentation on it: > > > > xfs_db> frag > > actual 653519, ideal 587066, fragmentation factor 10.17% > > ---- > Not to disturb you, but are you running xfs_fsr on a > regular basis? No, not yet. I had those bad experiences with xfs_fsr on a ck patchset patched kernel and after this I didn't try again. Its pretty sure that my file content corruption issues was related to the ck patchset as I was not able to reproduce it with a CFS or mainline kernel. But still I have been reluctant. I think, I give it a try after I made my backups. > I have a shell script that runs in my 'cron.daily' that has two > lines: > ---- > #!/bin/bash > ionice -c 3 /usr/sbin/xfs_fsr & > ------- > > I've never noticed fragmentation above 1% on my disks...but your > mileage may vary .... Lets see ;-) Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Sat May 24 20:24:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 24 May 2008 20:24:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4P3OPFe032221 for ; Sat, 24 May 2008 20:24:26 -0700 X-ASG-Debug-ID: 1211685915-133b006a0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7EF8B1AE786 for ; Sat, 24 May 2008 20:25:15 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id yhZQABhIL4MXKHnn for ; Sat, 24 May 2008 20:25: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 sandeen.net (Postfix) with ESMTP id CF8E2A9C521; Sat, 24 May 2008 22:25:14 -0500 (CDT) Message-ID: <4838DC1A.5010206@sandeen.net> Date: Sat, 24 May 2008 22:25:14 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Martin Steigerwald CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files References: <4820832B.3070903@dubielvitrum.pl> (sfid-20080506_185726_779300_46423265) <200805062055.36755.Martin@lichtvoll.de> In-Reply-To: <200805062055.36755.Martin@lichtvoll.de> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1211685916 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.1, rules version 3.1.51344 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16102 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Martin Steigerwald wrote: > And there is quite some fragmentation on it: > > xfs_db> frag > actual 653519, ideal 587066, fragmentation factor 10.17% No, there's not. You have 653519 extents out of an "ideal" 587066. That is 653519/587066 = 1.113 extents per file. It is not "quite some" fragmentation, it is near perfect (although this is subjective, and also depends on the size of your files... if they are all 8k then 1.113 extents per file might be a bit high; if they average 1G then 1.113 extents on average is pretty darned good.) -Eric From owner-xfs@oss.sgi.com Sun May 25 04:38:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 04:38:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PBc2Rp015800 for ; Sun, 25 May 2008 04:38:02 -0700 X-ASG-Debug-ID: 1211715532-1d3600920000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 309B01226C60 for ; Sun, 25 May 2008 04:38:52 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id SFaTBE2YmCnW0jaH for ; Sun, 25 May 2008 04:38:52 -0700 (PDT) Received: from [10.0.0.21] (g228074001.adsl.alicedsl.de [92.228.74.1]) by mail.lichtvoll.de (Postfix) with ESMTP id 8D94A5AE29 for ; Sun, 25 May 2008 13:38:50 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files Date: Sun, 25 May 2008 13:38:48 +0200 User-Agent: KMail/1.9.9 References: <4820832B.3070903@dubielvitrum.pl> <200805062055.36755.Martin@lichtvoll.de> <4838DC1A.5010206@sandeen.net> (sfid-20080525_131427_063047_18AAAB7D) In-Reply-To: <4838DC1A.5010206@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805251338.48910.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1211715533 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0202 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.1, rules version 3.1.51373 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16103 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Am Sonntag 25 Mai 2008 schrieb Eric Sandeen: > Martin Steigerwald wrote: > > And there is quite some fragmentation on it: > > > > xfs_db> frag > > actual 653519, ideal 587066, fragmentation factor 10.17% > > No, there's not. OK, so there is or better was (see below) *some* fragmentation. > You have 653519 extents out of an "ideal" 587066. > > That is 653519/587066 = 1.113 extents per file. > > It is not "quite some" fragmentation, it is near perfect (although this > is subjective, and also depends on the size of your files... if they > are all 8k then 1.113 extents per file might be a bit high; if they > average 1G then 1.113 extents on average is pretty darned good.) They vary a lot. From KMail ~/Mail directory with hundred of thousands of mails in maildir format to a picture and movie collection from various digicams with 150KB over 2-4 MB to 50-200 MB in size and a music collection and kernel sources and and and... would need to run a tool on them to gather some statistic. Anyway, nothing that can't be optimized: shambala> xfs_db -r /dev/sda5 xfs_db> frag actual 683648, ideal 617593, fragmentation factor 9.66% xfs_db> quit shambala> xfs_fsr /dev/sda5 /home start inode=0 shambala> xfs_db -r /dev/sda5 xfs_db> frag actual 620316, ideal 617584, fragmentation factor 0.44% xfs_db> quit xfs_fsr copied over several gigabytes and the free space of the partition temporarily more than once was 4 GB less than the 20 GB of free space it had before and after invoking xfs_fsr ;) Not that I noticed a difference up to now however. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Sun May 25 08:38:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 08:38:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PFcoOU005647 for ; Sun, 25 May 2008 08:38:50 -0700 X-ASG-Debug-ID: 1211729980-314503dc0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 597F41AFC7A for ; Sun, 25 May 2008 08:39:40 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id JCPF4pyFnMz5XiHL for ; Sun, 25 May 2008 08:39:40 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id B5214A9BF52; Sun, 25 May 2008 10:39:37 -0500 (CDT) Message-ID: <48398839.6060304@sandeen.net> Date: Sun, 25 May 2008 10:39:37 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Martin Steigerwald CC: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS for lots of small files Subject: Re: XFS for lots of small files References: <4820832B.3070903@dubielvitrum.pl> <200805062055.36755.Martin@lichtvoll.de> <4838DC1A.5010206@sandeen.net> (sfid-20080525_131427_063047_18AAAB7D) <200805251338.48910.Martin@lichtvoll.de> In-Reply-To: <200805251338.48910.Martin@lichtvoll.de> Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1211729981 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.1, rules version 3.1.51388 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16104 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Martin Steigerwald wrote: > Am Sonntag 25 Mai 2008 schrieb Eric Sandeen: >> Martin Steigerwald wrote: >>> And there is quite some fragmentation on it: >>> >>> xfs_db> frag >>> actual 653519, ideal 587066, fragmentation factor 10.17% >> No, there's not. > > OK, so there is or better was (see below) *some* fragmentation. > >> You have 653519 extents out of an "ideal" 587066. >> >> That is 653519/587066 = 1.113 extents per file. >> >> It is not "quite some" fragmentation, it is near perfect (although this >> is subjective, and also depends on the size of your files... if they >> are all 8k then 1.113 extents per file might be a bit high; if they >> average 1G then 1.113 extents on average is pretty darned good.) > > They vary a lot. From KMail ~/Mail directory with hundred of thousands of > mails in maildir format to a picture and movie collection from various > digicams with 150KB over 2-4 MB to 50-200 MB in size and a music > collection and kernel sources and and and... would need to run a tool on > them to gather some statistic. > > Anyway, nothing that can't be optimized: Sure... I'd just argue that it's diminishing returns :) > shambala> xfs_db -r /dev/sda5 > xfs_db> frag > actual 683648, ideal 617593, fragmentation factor 9.66% > xfs_db> quit > > shambala> xfs_fsr /dev/sda5 > /home start inode=0 > > shambala> xfs_db -r /dev/sda5 > xfs_db> frag > actual 620316, ideal 617584, fragmentation factor 0.44% > xfs_db> quit > > xfs_fsr copied over several gigabytes and the free space of the partition > temporarily more than once was 4 GB less than the 20 GB of free space it > had before and after invoking xfs_fsr ;) fsr needs to preallocate space to "defragment into" so this is expected, temporarily. > Not that I noticed a difference up to now however. right, my original reply was meant to imply that fragmentation is not really a problem for you. :) And in the larger picture, I just wanted to point out that the "fragmentation factor" can be pretty misleading. It reports as (actual - ideal) / actual. Imagine a filesystem full of 8GB dvd iso images, each with 4 2GB extents. The fragmentation factor would be reported as (4X - 1X) / 4X = 75%. Which looks "bad," but really isn't. -Eric From owner-xfs@oss.sgi.com Sun May 25 12:06:56 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:06:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJ6s3t022212 for ; Sun, 25 May 2008 12:06:55 -0700 X-ASG-Debug-ID: 1211742464-3e8102370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F3BDB1B973DE for ; Sun, 25 May 2008 12:07:45 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 6DTXgFk594ODTRPY for ; Sun, 25 May 2008 12:07:45 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4PJ7bF3014083 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 25 May 2008 21:07:37 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4PJ7bOO014081 for xfs@oss.sgi.com; Sun, 25 May 2008 21:07:37 +0200 Date: Sun, 25 May 2008 21:07:37 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/4] don't leak m_fsname/m_rtname/m_logname Subject: [PATCH 1/4] don't leak m_fsname/m_rtname/m_logname Message-ID: <20080525190736.GA13372@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211742465 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.1, rules version 3.1.51402 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16105 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Add a helper to free the m_fsname/m_rtname/m_logname allocations and use it properly for all mount failure cases. Also switch the allocations for these to kstrdup while we're at it. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-22 19:30:25.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-22 19:30:44.000000000 +0200 @@ -1079,6 +1079,15 @@ xfssyncd( } STATIC void +xfs_free_fsname( + struct xfs_mount *mp) +{ + kfree(mp->m_fsname); + kfree(mp->m_rtname); + kfree(mp->m_logname); +} + +STATIC void xfs_fs_put_super( struct super_block *sb) { @@ -1139,6 +1148,7 @@ xfs_fs_put_super( xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); + xfs_free_fsname(mp); kfree(mp); } @@ -1408,6 +1418,8 @@ xfs_start_flags( struct xfs_mount_args *ap, struct xfs_mount *mp) { + int error; + /* Values are in BBs */ if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { /* @@ -1440,17 +1452,27 @@ xfs_start_flags( ap->logbufsize); return XFS_ERROR(EINVAL); } + + error = ENOMEM; + mp->m_logbsize = ap->logbufsize; mp->m_fsname_len = strlen(ap->fsname) + 1; - mp->m_fsname = kmem_alloc(mp->m_fsname_len, KM_SLEEP); - strcpy(mp->m_fsname, ap->fsname); + + mp->m_fsname = kstrdup(ap->fsname, GFP_KERNEL); + if (!mp->m_fsname) + goto out; + if (ap->rtname[0]) { - mp->m_rtname = kmem_alloc(strlen(ap->rtname) + 1, KM_SLEEP); - strcpy(mp->m_rtname, ap->rtname); + mp->m_rtname = kstrdup(ap->rtname, GFP_KERNEL); + if (!mp->m_rtname) + goto out_free_fsname; + } + if (ap->logname[0]) { - mp->m_logname = kmem_alloc(strlen(ap->logname) + 1, KM_SLEEP); - strcpy(mp->m_logname, ap->logname); + mp->m_logname = kstrdup(ap->logname, GFP_KERNEL); + if (!mp->m_logname) + goto out_free_rtname; } if (ap->flags & XFSMNT_WSYNC) @@ -1523,6 +1545,14 @@ xfs_start_flags( if (ap->flags & XFSMNT_DMAPI) mp->m_flags |= XFS_MOUNT_DMAPI; return 0; + + + out_free_rtname: + kfree(mp->m_rtname); + out_free_fsname: + kfree(mp->m_fsname); + out: + return error; } /* @@ -1683,10 +1713,10 @@ xfs_fs_fill_super( */ error = xfs_start_flags(args, mp); if (error) - goto out_destroy_counters; + goto out_free_fsname; error = xfs_readsb(mp, flags); if (error) - goto out_destroy_counters; + goto out_free_fsname; error = xfs_finish_flags(args, mp); if (error) goto out_free_sb; @@ -1748,7 +1778,8 @@ xfs_fs_fill_super( xfs_filestream_unmount(mp); out_free_sb: xfs_freesb(mp); - out_destroy_counters: + out_free_fsname: + xfs_free_fsname(mp); xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); out_put_qmops: @@ -1784,7 +1815,7 @@ xfs_fs_fill_super( IRELE(mp->m_rootip); xfs_unmountfs(mp); - goto out_destroy_counters; + goto out_free_fsname; } STATIC int Index: linux-2.6-xfs/fs/xfs/xfs_mount.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.c 2008-05-22 19:31:25.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.c 2008-05-22 19:31:29.000000000 +0200 @@ -146,13 +146,6 @@ xfs_mount_free( mutex_destroy(&mp->m_growlock); if (mp->m_quotainfo) XFS_QM_DONE(mp); - - if (mp->m_fsname != NULL) - kmem_free(mp->m_fsname); - if (mp->m_rtname != NULL) - kmem_free(mp->m_rtname); - if (mp->m_logname != NULL) - kmem_free(mp->m_logname); } /* From owner-xfs@oss.sgi.com Sun May 25 12:07:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:07:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJ77RR022269 for ; Sun, 25 May 2008 12:07:07 -0700 X-ASG-Debug-ID: 1211742477-748b00c30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EA0771B0673 for ; Sun, 25 May 2008 12:07:58 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id F4Rj9fs2CPNYZDPN for ; Sun, 25 May 2008 12:07:58 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4PJ7oF3014119 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 25 May 2008 21:07:50 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4PJ7oiM014117 for xfs@oss.sgi.com; Sun, 25 May 2008 21:07:50 +0200 Date: Sun, 25 May 2008 21:07:50 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 3/4] fix the noquota mount option Subject: [PATCH 3/4] fix the noquota mount option Message-ID: <20080525190750.GC13372@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211742478 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.1, rules version 3.1.51398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16107 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Noquota should clear all mount options, and not just user and group quota. Probably doesn't matter very much in real life. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 20:57:33.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 20:58:52.000000000 +0200 @@ -337,6 +337,7 @@ xfs_parseargs( } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { mp->m_qflags &= ~(XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE | XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | + XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_QUOTA) || !strcmp(this_char, MNTOPT_UQUOTA) || From owner-xfs@oss.sgi.com Sun May 25 12:07:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:07:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJ7B9j022310 for ; Sun, 25 May 2008 12:07:11 -0700 X-ASG-Debug-ID: 1211742481-463903bb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0F040BD9342 for ; Sun, 25 May 2008 12:08:02 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id pvXBFlcZp1AX4VHf for ; Sun, 25 May 2008 12:08:02 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4PJ7sF3014133 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 25 May 2008 21:07:54 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4PJ7sWr014131 for xfs@oss.sgi.com; Sun, 25 May 2008 21:07:54 +0200 Date: Sun, 25 May 2008 21:07:54 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 4/4] fix biosize option Subject: [PATCH 4/4] fix biosize option Message-ID: <20080525190754.GD13372@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211742483 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.1, rules version 3.1.51403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16108 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs iosizelog shouldn't be the same as iosize but the logarithm of it. Then again the current biosize option doesn't make much sense to me as it doesn't set the preferred I/O size as mentioned in the comment next to it but rather the allocation size and thus is identical to the allocsize option (except for the missing logarithm). It's also not documented in Documentation/filesystems/xfs.txt or the mount manpage. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 20:59:04.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 20:59:38.000000000 +0200 @@ -252,7 +252,7 @@ xfs_parseargs( return EINVAL; } iosize = simple_strtoul(value, &eov, 10); - iosizelog = (uint8_t) iosize; + iosizelog = ffs(iosize) - 1; } else if (!strcmp(this_char, MNTOPT_ALLOCSIZE)) { if (!value || !*value) { cmn_err(CE_WARN, From owner-xfs@oss.sgi.com Sun May 25 12:07:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:07:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_54, J_CHICKENPOX_75 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJ72vm022232 for ; Sun, 25 May 2008 12:07:02 -0700 X-ASG-Debug-ID: 1211742470-74c600ac0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B45251B066D for ; Sun, 25 May 2008 12:07:50 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id QVj1f9UfqI7aFatM for ; Sun, 25 May 2008 12:07:50 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4PJ7fF3014098 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sun, 25 May 2008 21:07:41 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4PJ7fLN014096 for xfs@oss.sgi.com; Sun, 25 May 2008 21:07:41 +0200 Date: Sun, 25 May 2008 21:07:41 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/4] kill struct xfs_mount_args Subject: [PATCH 2/4] kill struct xfs_mount_args Message-ID: <20080525190741.GB13372@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211742472 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.1, rules version 3.1.51398 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16106 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs No need to parse the mount option into a structure before applying it to struct xfs_mount. The content of xfs_start_flags gets merged into xfs_parseargs. Calls inbetween don't care and can use mount members instead of the args struct. This patch uncovered that the mount option for shared filesystems wasn't ever exposed on Linux. The code to handle it is #if 0'ed in this patch pending a decision on this feature. I'll send a writeup about it to the list soon. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 16:23:57.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_super.c 2008-05-25 20:57:16.000000000 +0200 @@ -18,7 +18,6 @@ #include "xfs.h" #include "xfs_bit.h" #include "xfs_log.h" -#include "xfs_clnt.h" #include "xfs_inum.h" #include "xfs_trans.h" #include "xfs_sb.h" @@ -74,32 +73,6 @@ static kmem_zone_t *xfs_vnode_zone; static kmem_zone_t *xfs_ioend_zone; mempool_t *xfs_ioend_pool; -STATIC struct xfs_mount_args * -xfs_args_allocate( - struct super_block *sb, - int silent) -{ - struct xfs_mount_args *args; - - args = kzalloc(sizeof(struct xfs_mount_args), GFP_KERNEL); - if (!args) - return NULL; - - args->logbufs = args->logbufsize = -1; - strncpy(args->fsname, sb->s_id, MAXNAMELEN); - - /* Copy the already-parsed mount(2) flags we're interested in */ - if (sb->s_flags & MS_DIRSYNC) - args->flags |= XFSMNT_DIRSYNC; - if (sb->s_flags & MS_SYNCHRONOUS) - args->flags |= XFSMNT_WSYNC; - if (silent) - args->flags |= XFSMNT_QUIET; - args->flags |= XFSMNT_32BITINODES; - - return args; -} - #define MNTOPT_LOGBUFS "logbufs" /* number of XFS log buffers */ #define MNTOPT_LOGBSIZE "logbsize" /* size of XFS log buffers */ #define MNTOPT_LOGDEV "logdev" /* log device */ @@ -171,26 +144,54 @@ suffix_strtoul(char *s, char **endp, uns return simple_strtoul((const char *)s, endp, base) << shift_left_factor; } +/* + * This function fills in xfs_mount_t fields based on mount args. + * Note: the superblock has _not_ yet been read in. + * + * Note that this function leaks the various device name allocations on + * failure. The caller takes care of them. + */ STATIC int xfs_parseargs( struct xfs_mount *mp, char *options, - struct xfs_mount_args *args, - int update) + char **mtpt) { + struct super_block *sb = mp->m_super; char *this_char, *value, *eov; - int dsunit, dswidth, vol_dsunit, vol_dswidth; - int iosize; + int dsunit = 0; + int dswidth = 0; + int iosize = 0; int dmapi_implies_ikeep = 1; + uchar_t iosizelog = 0; - args->flags |= XFSMNT_BARRIER; - args->flags2 |= XFSMNT2_COMPAT_IOSIZE; + /* + * Copy binary VFS mount flags we are interested in. + */ + if (sb->s_flags & MS_RDONLY) + mp->m_flags |= XFS_MOUNT_RDONLY; + if (sb->s_flags & MS_DIRSYNC) + mp->m_flags |= XFS_MOUNT_DIRSYNC; + if (sb->s_flags & MS_SYNCHRONOUS) + mp->m_flags |= XFS_MOUNT_WSYNC; + + /* + * Set some default flags that could be cleared by the mount option + * parsing. + */ + mp->m_flags |= XFS_MOUNT_BARRIER; + mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; + mp->m_flags |= XFS_MOUNT_SMALL_INUMS; + + /* + * These can be overridden by the mount option parsing. + */ + mp->m_logbufs = -1; + mp->m_logbsize = -1; if (!options) goto done; - iosize = dsunit = dswidth = vol_dsunit = vol_dswidth = 0; - while ((this_char = strsep(&options, ",")) != NULL) { if (!*this_char) continue; @@ -204,7 +205,7 @@ xfs_parseargs( this_char); return EINVAL; } - args->logbufs = simple_strtoul(value, &eov, 10); + mp->m_logbufs = simple_strtoul(value, &eov, 10); } else if (!strcmp(this_char, MNTOPT_LOGBSIZE)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -212,7 +213,7 @@ xfs_parseargs( this_char); return EINVAL; } - args->logbufsize = suffix_strtoul(value, &eov, 10); + mp->m_logbsize = suffix_strtoul(value, &eov, 10); } else if (!strcmp(this_char, MNTOPT_LOGDEV)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -220,7 +221,9 @@ xfs_parseargs( this_char); return EINVAL; } - strncpy(args->logname, value, MAXNAMELEN); + mp->m_logname = kstrndup(value, MAXNAMELEN, GFP_KERNEL); + if (!mp->m_logname) + return ENOMEM; } else if (!strcmp(this_char, MNTOPT_MTPT)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -228,7 +231,9 @@ xfs_parseargs( this_char); return EINVAL; } - strncpy(args->mtpt, value, MAXNAMELEN); + *mtpt = kstrndup(value, MAXNAMELEN, GFP_KERNEL); + if (!*mtpt) + return ENOMEM; } else if (!strcmp(this_char, MNTOPT_RTDEV)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -236,7 +241,9 @@ xfs_parseargs( this_char); return EINVAL; } - strncpy(args->rtname, value, MAXNAMELEN); + mp->m_rtname = kstrndup(value, MAXNAMELEN, GFP_KERNEL); + if (!mp->m_rtname) + return ENOMEM; } else if (!strcmp(this_char, MNTOPT_BIOSIZE)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -245,8 +252,7 @@ xfs_parseargs( return EINVAL; } iosize = simple_strtoul(value, &eov, 10); - args->flags |= XFSMNT_IOSIZE; - args->iosizelog = (uint8_t) iosize; + iosizelog = (uint8_t) iosize; } else if (!strcmp(this_char, MNTOPT_ALLOCSIZE)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -255,8 +261,7 @@ xfs_parseargs( return EINVAL; } iosize = suffix_strtoul(value, &eov, 10); - args->flags |= XFSMNT_IOSIZE; - args->iosizelog = ffs(iosize) - 1; + iosizelog = ffs(iosize) - 1; } else if (!strcmp(this_char, MNTOPT_GRPID) || !strcmp(this_char, MNTOPT_BSDGROUPS)) { mp->m_flags |= XFS_MOUNT_GRPID; @@ -264,23 +269,25 @@ xfs_parseargs( !strcmp(this_char, MNTOPT_SYSVGROUPS)) { mp->m_flags &= ~XFS_MOUNT_GRPID; } else if (!strcmp(this_char, MNTOPT_WSYNC)) { - args->flags |= XFSMNT_WSYNC; + mp->m_flags |= XFS_MOUNT_WSYNC; } else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) { - args->flags |= XFSMNT_OSYNCISOSYNC; + mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; } else if (!strcmp(this_char, MNTOPT_NORECOVERY)) { - args->flags |= XFSMNT_NORECOVERY; + mp->m_flags |= XFS_MOUNT_NORECOVERY; } else if (!strcmp(this_char, MNTOPT_INO64)) { - args->flags |= XFSMNT_INO64; -#if !XFS_BIG_INUMS +#if XFS_BIG_INUMS + mp->m_flags |= XFS_MOUNT_INO64; + mp->m_inoadd = XFS_INO64_OFFSET; +#else cmn_err(CE_WARN, "XFS: %s option not allowed on this system", this_char); return EINVAL; #endif } else if (!strcmp(this_char, MNTOPT_NOALIGN)) { - args->flags |= XFSMNT_NOALIGN; + mp->m_flags |= XFS_MOUNT_NOALIGN; } else if (!strcmp(this_char, MNTOPT_SWALLOC)) { - args->flags |= XFSMNT_SWALLOC; + mp->m_flags |= XFS_MOUNT_SWALLOC; } else if (!strcmp(this_char, MNTOPT_SUNIT)) { if (!value || !*value) { cmn_err(CE_WARN, @@ -298,7 +305,7 @@ xfs_parseargs( } dswidth = simple_strtoul(value, &eov, 10); } else if (!strcmp(this_char, MNTOPT_64BITINODE)) { - args->flags &= ~XFSMNT_32BITINODES; + mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS; #if !XFS_BIG_INUMS cmn_err(CE_WARN, "XFS: %s option not allowed on this system", @@ -306,56 +313,60 @@ xfs_parseargs( return EINVAL; #endif } else if (!strcmp(this_char, MNTOPT_NOUUID)) { - args->flags |= XFSMNT_NOUUID; + mp->m_flags |= XFS_MOUNT_NOUUID; } else if (!strcmp(this_char, MNTOPT_BARRIER)) { - args->flags |= XFSMNT_BARRIER; + mp->m_flags |= XFS_MOUNT_BARRIER; } else if (!strcmp(this_char, MNTOPT_NOBARRIER)) { - args->flags &= ~XFSMNT_BARRIER; + mp->m_flags &= ~XFS_MOUNT_BARRIER; } else if (!strcmp(this_char, MNTOPT_IKEEP)) { - args->flags |= XFSMNT_IKEEP; + mp->m_flags |= XFS_MOUNT_IKEEP; } else if (!strcmp(this_char, MNTOPT_NOIKEEP)) { dmapi_implies_ikeep = 0; - args->flags &= ~XFSMNT_IKEEP; + mp->m_flags &= ~XFS_MOUNT_IKEEP; } else if (!strcmp(this_char, MNTOPT_LARGEIO)) { - args->flags2 &= ~XFSMNT2_COMPAT_IOSIZE; + mp->m_flags &= ~XFS_MOUNT_COMPAT_IOSIZE; } else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) { - args->flags2 |= XFSMNT2_COMPAT_IOSIZE; + mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; } else if (!strcmp(this_char, MNTOPT_ATTR2)) { - args->flags |= XFSMNT_ATTR2; + mp->m_flags |= XFS_MOUNT_ATTR2; } else if (!strcmp(this_char, MNTOPT_NOATTR2)) { - args->flags &= ~XFSMNT_ATTR2; - args->flags |= XFSMNT_NOATTR2; + mp->m_flags &= ~XFS_MOUNT_ATTR2; + mp->m_flags |= XFS_MOUNT_NOATTR2; } else if (!strcmp(this_char, MNTOPT_FILESTREAM)) { - args->flags2 |= XFSMNT2_FILESTREAMS; + mp->m_flags |= XFS_MOUNT_FILESTREAMS; } else if (!strcmp(this_char, MNTOPT_NOQUOTA)) { - args->flags &= ~(XFSMNT_UQUOTAENF|XFSMNT_UQUOTA); - args->flags &= ~(XFSMNT_GQUOTAENF|XFSMNT_GQUOTA); + mp->m_qflags &= ~(XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE | + XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | + XFS_UQUOTA_ENFD | XFS_OQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_QUOTA) || !strcmp(this_char, MNTOPT_UQUOTA) || !strcmp(this_char, MNTOPT_USRQUOTA)) { - args->flags |= XFSMNT_UQUOTA | XFSMNT_UQUOTAENF; + mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE | + XFS_UQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_QUOTANOENF) || !strcmp(this_char, MNTOPT_UQUOTANOENF)) { - args->flags |= XFSMNT_UQUOTA; - args->flags &= ~XFSMNT_UQUOTAENF; + mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); + mp->m_qflags &= ~XFS_UQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_PQUOTA) || !strcmp(this_char, MNTOPT_PRJQUOTA)) { - args->flags |= XFSMNT_PQUOTA | XFSMNT_PQUOTAENF; + mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE | + XFS_OQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_PQUOTANOENF)) { - args->flags |= XFSMNT_PQUOTA; - args->flags &= ~XFSMNT_PQUOTAENF; + mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); + mp->m_qflags &= ~XFS_OQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_GQUOTA) || !strcmp(this_char, MNTOPT_GRPQUOTA)) { - args->flags |= XFSMNT_GQUOTA | XFSMNT_GQUOTAENF; + mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | + XFS_OQUOTA_ENFD); } else if (!strcmp(this_char, MNTOPT_GQUOTANOENF)) { - args->flags |= XFSMNT_GQUOTA; - args->flags &= ~XFSMNT_GQUOTAENF; + mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); + mp->m_qflags &= ~XFS_OQUOTA_ENFD; } else if (!strcmp(this_char, MNTOPT_DMAPI)) { - args->flags |= XFSMNT_DMAPI; + mp->m_flags |= XFS_MOUNT_DMAPI; } else if (!strcmp(this_char, MNTOPT_XDSM)) { - args->flags |= XFSMNT_DMAPI; + mp->m_flags |= XFS_MOUNT_DMAPI; } else if (!strcmp(this_char, MNTOPT_DMI)) { - args->flags |= XFSMNT_DMAPI; + mp->m_flags |= XFS_MOUNT_DMAPI; } else if (!strcmp(this_char, "ihashsize")) { cmn_err(CE_WARN, "XFS: ihashsize no longer used, option is deprecated."); @@ -373,27 +384,29 @@ xfs_parseargs( } } - if (args->flags & XFSMNT_NORECOVERY) { - if ((mp->m_flags & XFS_MOUNT_RDONLY) == 0) { - cmn_err(CE_WARN, - "XFS: no-recovery mounts must be read-only."); - return EINVAL; - } + /* + * no recovery flag requires a read-only mount + */ + if ((mp->m_flags & XFS_MOUNT_NORECOVERY) && + !(mp->m_flags & XFS_MOUNT_RDONLY)) { + cmn_err(CE_WARN, "XFS: no-recovery mounts must be read-only."); + return EINVAL; } - if ((args->flags & XFSMNT_NOALIGN) && (dsunit || dswidth)) { + if ((mp->m_flags & XFS_MOUNT_NOALIGN) && (dsunit || dswidth)) { cmn_err(CE_WARN, "XFS: sunit and swidth options incompatible with the noalign option"); return EINVAL; } - if ((args->flags & XFSMNT_GQUOTA) && (args->flags & XFSMNT_PQUOTA)) { + if ((mp->m_qflags & (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE)) && + (mp->m_qflags & (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE))) { cmn_err(CE_WARN, "XFS: cannot mount with both project and group quota"); return EINVAL; } - if ((args->flags & XFSMNT_DMAPI) && *args->mtpt == '\0') { + if ((mp->m_flags & XFS_MOUNT_DMAPI) && !mtpt) { printk("XFS: %s option needs the mount point option as well\n", MNTOPT_DMAPI); return EINVAL; @@ -421,27 +434,66 @@ xfs_parseargs( * Note that if "ikeep" or "noikeep" mount options are * supplied, then they are honored. */ - if ((args->flags & XFSMNT_DMAPI) && dmapi_implies_ikeep) - args->flags |= XFSMNT_IKEEP; + if ((mp->m_flags & XFS_MOUNT_DMAPI) && dmapi_implies_ikeep) + mp->m_flags |= XFS_MOUNT_IKEEP; - if ((args->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { +done: + if (!(mp->m_flags & XFS_MOUNT_NOALIGN)) { + /* + * At this point the superblock has not been read + * in, therefore we do not know the block size. + * Before the mount call ends we will convert + * these to FSBs. + */ if (dsunit) { - args->sunit = dsunit; - args->flags |= XFSMNT_RETERR; - } else { - args->sunit = vol_dsunit; + mp->m_dalign = dsunit; + mp->m_flags |= XFS_MOUNT_RETERR; } - dswidth ? (args->swidth = dswidth) : - (args->swidth = vol_dswidth); - } else { - args->sunit = args->swidth = 0; + + if (dswidth) + mp->m_swidth = dswidth; + } + + if (mp->m_logbufs != -1 && + mp->m_logbufs != 0 && + (mp->m_logbufs < XLOG_MIN_ICLOGS || + mp->m_logbufs > XLOG_MAX_ICLOGS)) { + cmn_err(CE_WARN, + "XFS: invalid logbufs value: %d [not %d-%d]", + mp->m_logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); + return XFS_ERROR(EINVAL); + } + if (mp->m_logbsize != -1 && + mp->m_logbsize != 0 && + (mp->m_logbsize < XLOG_MIN_RECORD_BSIZE || + mp->m_logbsize > XLOG_MAX_RECORD_BSIZE || + !is_power_of_2(mp->m_logbsize))) { + cmn_err(CE_WARN, + "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", + mp->m_logbsize); + return XFS_ERROR(EINVAL); + } + + mp->m_fsname = kstrndup(sb->s_id, MAXNAMELEN, GFP_KERNEL); + if (!mp->m_fsname) + return ENOMEM; + mp->m_fsname_len = strlen(mp->m_fsname) + 1; + + if (iosizelog) { + if (iosizelog > XFS_MAX_IO_LOG || + iosizelog < XFS_MIN_IO_LOG) { + cmn_err(CE_WARN, + "XFS: invalid log iosize: %d [not %d-%d]", + iosizelog, XFS_MIN_IO_LOG, + XFS_MAX_IO_LOG); + return XFS_ERROR(EINVAL); + } + + mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; + mp->m_readio_log = iosizelog; + mp->m_writeio_log = iosizelog; } -done: - if (args->flags & XFSMNT_32BITINODES) - mp->m_flags |= XFS_MOUNT_SMALL_INUMS; - if (args->flags2) - args->flags |= XFSMNT_FLAGS2; return 0; } @@ -693,8 +745,7 @@ xfs_close_devices( */ STATIC int xfs_open_devices( - struct xfs_mount *mp, - struct xfs_mount_args *args) + struct xfs_mount *mp) { struct block_device *ddev = mp->m_super->s_bdev; struct block_device *logdev = NULL, *rtdev = NULL; @@ -703,14 +754,14 @@ xfs_open_devices( /* * Open real time and log devices - order is important. */ - if (args->logname[0]) { - error = xfs_blkdev_get(mp, args->logname, &logdev); + if (mp->m_logname) { + error = xfs_blkdev_get(mp, mp->m_logname, &logdev); if (error) goto out; } - if (args->rtname[0]) { - error = xfs_blkdev_get(mp, args->rtname, &rtdev); + if (mp->m_rtname) { + error = xfs_blkdev_get(mp, mp->m_rtname, &rtdev); if (error) goto out_close_logdev; @@ -1411,175 +1462,28 @@ xfs_fs_setxquota( /* * This function fills in xfs_mount_t fields based on mount args. - * Note: the superblock has _not_ yet been read in. - */ -STATIC int -xfs_start_flags( - struct xfs_mount_args *ap, - struct xfs_mount *mp) -{ - int error; - - /* Values are in BBs */ - if ((ap->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) { - /* - * At this point the superblock has not been read - * in, therefore we do not know the block size. - * Before the mount call ends we will convert - * these to FSBs. - */ - mp->m_dalign = ap->sunit; - mp->m_swidth = ap->swidth; - } - - if (ap->logbufs != -1 && - ap->logbufs != 0 && - (ap->logbufs < XLOG_MIN_ICLOGS || - ap->logbufs > XLOG_MAX_ICLOGS)) { - cmn_err(CE_WARN, - "XFS: invalid logbufs value: %d [not %d-%d]", - ap->logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); - return XFS_ERROR(EINVAL); - } - mp->m_logbufs = ap->logbufs; - if (ap->logbufsize != -1 && - ap->logbufsize != 0 && - (ap->logbufsize < XLOG_MIN_RECORD_BSIZE || - ap->logbufsize > XLOG_MAX_RECORD_BSIZE || - !is_power_of_2(ap->logbufsize))) { - cmn_err(CE_WARN, - "XFS: invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", - ap->logbufsize); - return XFS_ERROR(EINVAL); - } - - error = ENOMEM; - - mp->m_logbsize = ap->logbufsize; - mp->m_fsname_len = strlen(ap->fsname) + 1; - - mp->m_fsname = kstrdup(ap->fsname, GFP_KERNEL); - if (!mp->m_fsname) - goto out; - - if (ap->rtname[0]) { - mp->m_rtname = kstrdup(ap->rtname, GFP_KERNEL); - if (!mp->m_rtname) - goto out_free_fsname; - - } - - if (ap->logname[0]) { - mp->m_logname = kstrdup(ap->logname, GFP_KERNEL); - if (!mp->m_logname) - goto out_free_rtname; - } - - if (ap->flags & XFSMNT_WSYNC) - mp->m_flags |= XFS_MOUNT_WSYNC; -#if XFS_BIG_INUMS - if (ap->flags & XFSMNT_INO64) { - mp->m_flags |= XFS_MOUNT_INO64; - mp->m_inoadd = XFS_INO64_OFFSET; - } -#endif - if (ap->flags & XFSMNT_RETERR) - mp->m_flags |= XFS_MOUNT_RETERR; - if (ap->flags & XFSMNT_NOALIGN) - mp->m_flags |= XFS_MOUNT_NOALIGN; - if (ap->flags & XFSMNT_SWALLOC) - mp->m_flags |= XFS_MOUNT_SWALLOC; - if (ap->flags & XFSMNT_OSYNCISOSYNC) - mp->m_flags |= XFS_MOUNT_OSYNCISOSYNC; - if (ap->flags & XFSMNT_32BITINODES) - mp->m_flags |= XFS_MOUNT_32BITINODES; - - if (ap->flags & XFSMNT_IOSIZE) { - if (ap->iosizelog > XFS_MAX_IO_LOG || - ap->iosizelog < XFS_MIN_IO_LOG) { - cmn_err(CE_WARN, - "XFS: invalid log iosize: %d [not %d-%d]", - ap->iosizelog, XFS_MIN_IO_LOG, - XFS_MAX_IO_LOG); - return XFS_ERROR(EINVAL); - } - - mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; - mp->m_readio_log = mp->m_writeio_log = ap->iosizelog; - } - - if (ap->flags & XFSMNT_IKEEP) - mp->m_flags |= XFS_MOUNT_IKEEP; - if (ap->flags & XFSMNT_DIRSYNC) - mp->m_flags |= XFS_MOUNT_DIRSYNC; - if (ap->flags & XFSMNT_ATTR2) - mp->m_flags |= XFS_MOUNT_ATTR2; - if (ap->flags & XFSMNT_NOATTR2) - mp->m_flags |= XFS_MOUNT_NOATTR2; - - if (ap->flags2 & XFSMNT2_COMPAT_IOSIZE) - mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE; - - /* - * no recovery flag requires a read-only mount - */ - if (ap->flags & XFSMNT_NORECOVERY) { - if (!(mp->m_flags & XFS_MOUNT_RDONLY)) { - cmn_err(CE_WARN, - "XFS: tried to mount a FS read-write without recovery!"); - return XFS_ERROR(EINVAL); - } - mp->m_flags |= XFS_MOUNT_NORECOVERY; - } - - if (ap->flags & XFSMNT_NOUUID) - mp->m_flags |= XFS_MOUNT_NOUUID; - if (ap->flags & XFSMNT_BARRIER) - mp->m_flags |= XFS_MOUNT_BARRIER; - else - mp->m_flags &= ~XFS_MOUNT_BARRIER; - - if (ap->flags2 & XFSMNT2_FILESTREAMS) - mp->m_flags |= XFS_MOUNT_FILESTREAMS; - - if (ap->flags & XFSMNT_DMAPI) - mp->m_flags |= XFS_MOUNT_DMAPI; - return 0; - - - out_free_rtname: - kfree(mp->m_rtname); - out_free_fsname: - kfree(mp->m_fsname); - out: - return error; -} - -/* - * This function fills in xfs_mount_t fields based on mount args. * Note: the superblock _has_ now been read in. */ STATIC int xfs_finish_flags( - struct xfs_mount_args *ap, struct xfs_mount *mp) { int ronly = (mp->m_flags & XFS_MOUNT_RDONLY); /* Fail a mount where the logbuf is smaller then the log stripe */ if (xfs_sb_version_haslogv2(&mp->m_sb)) { - if ((ap->logbufsize <= 0) && - (mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE)) { + if (mp->m_logbsize <= 0 && + mp->m_sb.sb_logsunit > XLOG_BIG_RECORD_BSIZE) { mp->m_logbsize = mp->m_sb.sb_logsunit; - } else if (ap->logbufsize > 0 && - ap->logbufsize < mp->m_sb.sb_logsunit) { + } else if (mp->m_logbsize > 0 && + mp->m_logbsize < mp->m_sb.sb_logsunit) { cmn_err(CE_WARN, "XFS: logbuf size must be greater than or equal to log stripe size"); return XFS_ERROR(EINVAL); } } else { /* Fail a mount if the logbuf is larger than 32K */ - if (ap->logbufsize > XLOG_BIG_RECORD_BSIZE) { + if (mp->m_logbsize > XLOG_BIG_RECORD_BSIZE) { cmn_err(CE_WARN, "XFS: logbuf size for version 1 logs must be 16K or 32K"); return XFS_ERROR(EINVAL); @@ -1591,7 +1495,7 @@ xfs_finish_flags( * told by noattr2 to turn it off */ if (xfs_sb_version_hasattr2(&mp->m_sb) && - !(ap->flags & XFSMNT_NOATTR2)) + !(mp->m_flags & XFS_MOUNT_NOATTR2)) mp->m_flags |= XFS_MOUNT_ATTR2; /* @@ -1603,6 +1507,7 @@ xfs_finish_flags( return XFS_ERROR(EROFS); } +#if 0 /* shared mounts were never supported on Linux */ /* * check for shared mount. */ @@ -1625,25 +1530,11 @@ xfs_finish_flags( /* * Shared XFS V0 can't deal with DMI. Return EINVAL. */ - if (mp->m_sb.sb_shared_vn == 0 && (ap->flags & XFSMNT_DMAPI)) + if (mp->m_sb.sb_shared_vn == 0 && + (mp->m_flags & XFS_MOUNT_DMAPI)) return XFS_ERROR(EINVAL); } - - if (ap->flags & XFSMNT_UQUOTA) { - mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE); - if (ap->flags & XFSMNT_UQUOTAENF) - mp->m_qflags |= XFS_UQUOTA_ENFD; - } - - if (ap->flags & XFSMNT_GQUOTA) { - mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE); - if (ap->flags & XFSMNT_GQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } else if (ap->flags & XFSMNT_PQUOTA) { - mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE); - if (ap->flags & XFSMNT_PQUOTAENF) - mp->m_qflags |= XFS_OQUOTA_ENFD; - } +#endif return 0; } @@ -1656,16 +1547,12 @@ xfs_fs_fill_super( { struct inode *root; struct xfs_mount *mp = NULL; - struct xfs_mount_args *args; int flags = 0, error = ENOMEM; - - args = xfs_args_allocate(sb, silent); - if (!args) - return -ENOMEM; + char *mtpt = NULL; mp = kzalloc(sizeof(struct xfs_mount), GFP_KERNEL); if (!mp) - goto out_free_args; + goto out; spin_lock_init(&mp->m_sb_lock); mutex_init(&mp->m_ilock); @@ -1678,12 +1565,9 @@ xfs_fs_fill_super( mp->m_super = sb; sb->s_fs_info = mp; - if (sb->s_flags & MS_RDONLY) - mp->m_flags |= XFS_MOUNT_RDONLY; - - error = xfs_parseargs(mp, (char *)data, args, 0); + error = xfs_parseargs(mp, (char *)data, &mtpt); if (error) - goto out_free_mp; + goto out_free_fsname; sb_min_blocksize(sb, BBSIZE); sb->s_xattr = xfs_xattr_handlers; @@ -1691,33 +1575,28 @@ xfs_fs_fill_super( sb->s_qcop = &xfs_quotactl_operations; sb->s_op = &xfs_super_operations; - error = xfs_dmops_get(mp, args); + error = xfs_dmops_get(mp); if (error) - goto out_free_mp; - error = xfs_qmops_get(mp, args); + goto out_free_fsname; + error = xfs_qmops_get(mp); if (error) goto out_put_dmops; - if (args->flags & XFSMNT_QUIET) + if (silent) flags |= XFS_MFSI_QUIET; - error = xfs_open_devices(mp, args); + error = xfs_open_devices(mp); if (error) goto out_put_qmops; if (xfs_icsb_init_counters(mp)) mp->m_flags |= XFS_MOUNT_NO_PERCPU_SB; - /* - * Setup flags based on mount(2) options and then the superblock - */ - error = xfs_start_flags(args, mp); - if (error) - goto out_free_fsname; error = xfs_readsb(mp, flags); if (error) - goto out_free_fsname; - error = xfs_finish_flags(args, mp); + goto out_destroy_counters; + + error = xfs_finish_flags(mp); if (error) goto out_free_sb; @@ -1736,7 +1615,7 @@ xfs_fs_fill_super( if (error) goto out_filestream_unmount; - XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, args->mtpt, args->fsname); + XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, mtpt, mp->m_fsname); sb->s_dirt = 1; sb->s_magic = XFS_SB_MAGIC; @@ -1769,27 +1648,27 @@ xfs_fs_fill_super( goto fail_vnrele; } - xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); + kfree(mtpt); - kfree(args); + xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); return 0; out_filestream_unmount: xfs_filestream_unmount(mp); out_free_sb: xfs_freesb(mp); - out_free_fsname: - xfs_free_fsname(mp); + out_destroy_counters: xfs_icsb_destroy_counters(mp); xfs_close_devices(mp); out_put_qmops: xfs_qmops_put(mp); out_put_dmops: xfs_dmops_put(mp); - out_free_mp: + out_free_fsname: + xfs_free_fsname(mp); + kfree(mtpt); kfree(mp); - out_free_args: - kfree(args); + out: return -error; fail_vnrele: Index: linux-2.6-xfs/fs/xfs/xfs_clnt.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_clnt.h 2008-05-25 16:23:44.000000000 +0200 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2000-2005 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 - */ -#ifndef __XFS_CLNT_H__ -#define __XFS_CLNT_H__ - -/* - * XFS arguments structure, constructed from the arguments we - * are passed via the mount system call. - * - * NOTE: The mount system call is handled differently between - * Linux and IRIX. In IRIX we worked work with a binary data - * structure coming in across the syscall interface from user - * space (the mount userspace knows about each filesystem type - * and the set of valid options for it, and converts the users - * argument string into a binary structure _before_ making the - * system call), and the ABI issues that this implies. - * - * In Linux, we are passed a comma separated set of options; - * ie. a NULL terminated string of characters. Userspace mount - * code does not have any knowledge of mount options expected by - * each filesystem type and so each filesystem parses its mount - * options in kernel space. - * - * For the Linux port, we kept this structure pretty much intact - * and use it internally (because the existing code groks it). - */ -struct xfs_mount_args { - int flags; /* flags -> see XFSMNT_... macros below */ - int flags2; /* flags -> see XFSMNT2_... macros below */ - int logbufs; /* Number of log buffers, -1 to default */ - int logbufsize; /* Size of log buffers, -1 to default */ - char fsname[MAXNAMELEN+1]; /* data device name */ - char rtname[MAXNAMELEN+1]; /* realtime device filename */ - char logname[MAXNAMELEN+1]; /* journal device filename */ - char mtpt[MAXNAMELEN+1]; /* filesystem mount point */ - int sunit; /* stripe unit (BBs) */ - int swidth; /* stripe width (BBs), multiple of sunit */ - uchar_t iosizelog; /* log2 of the preferred I/O size */ - int ihashsize; /* inode hash table size (buckets) */ -}; - -/* - * XFS mount option flags -- args->flags1 - */ -#define XFSMNT_ATTR2 0x00000001 /* allow ATTR2 EA format */ -#define XFSMNT_WSYNC 0x00000002 /* safe mode nfs mount - * compatible */ -#define XFSMNT_INO64 0x00000004 /* move inode numbers up - * past 2^32 */ -#define XFSMNT_UQUOTA 0x00000008 /* user quota accounting */ -#define XFSMNT_PQUOTA 0x00000010 /* IRIX prj quota accounting */ -#define XFSMNT_UQUOTAENF 0x00000020 /* user quota limit - * enforcement */ -#define XFSMNT_PQUOTAENF 0x00000040 /* IRIX project quota limit - * enforcement */ -#define XFSMNT_QUIET 0x00000080 /* don't report mount errors */ -#define XFSMNT_NOALIGN 0x00000200 /* don't allocate at - * stripe boundaries*/ -#define XFSMNT_RETERR 0x00000400 /* return error to user */ -#define XFSMNT_NORECOVERY 0x00000800 /* no recovery, implies - * read-only mount */ -#define XFSMNT_SHARED 0x00001000 /* shared XFS mount */ -#define XFSMNT_IOSIZE 0x00002000 /* optimize for I/O size */ -#define XFSMNT_OSYNCISOSYNC 0x00004000 /* o_sync is REALLY o_sync */ - /* (osyncisdsync is default) */ -#define XFSMNT_NOATTR2 0x00008000 /* turn off ATTR2 EA format */ -#define XFSMNT_32BITINODES 0x00200000 /* restrict inodes to 32 - * bits of address space */ -#define XFSMNT_GQUOTA 0x00400000 /* group quota accounting */ -#define XFSMNT_GQUOTAENF 0x00800000 /* group quota limit - * enforcement */ -#define XFSMNT_NOUUID 0x01000000 /* Ignore fs uuid */ -#define XFSMNT_DMAPI 0x02000000 /* enable dmapi/xdsm */ -#define XFSMNT_BARRIER 0x04000000 /* use write barriers */ -#define XFSMNT_IKEEP 0x08000000 /* inode cluster delete */ -#define XFSMNT_SWALLOC 0x10000000 /* turn on stripe width - * allocation */ -#define XFSMNT_DIRSYNC 0x40000000 /* sync creat,link,unlink,rename - * symlink,mkdir,rmdir,mknod */ -#define XFSMNT_FLAGS2 0x80000000 /* more flags set in flags2 */ - -/* - * XFS mount option flags -- args->flags2 - */ -#define XFSMNT2_COMPAT_IOSIZE 0x00000001 /* don't report large preferred - * I/O size in stat(2) */ -#define XFSMNT2_FILESTREAMS 0x00000002 /* enable the filestreams - * allocator */ - -#endif /* __XFS_CLNT_H__ */ Index: linux-2.6-xfs/fs/xfs/xfs_dmops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_dmops.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_dmops.c 2008-05-25 16:23:58.000000000 +0200 @@ -25,7 +25,6 @@ #include "xfs_inum.h" #include "xfs_ag.h" #include "xfs_mount.h" -#include "xfs_clnt.h" static struct xfs_dmops xfs_dmcore_stub = { @@ -38,9 +37,9 @@ static struct xfs_dmops xfs_dmcore_stub }; int -xfs_dmops_get(struct xfs_mount *mp, struct xfs_mount_args *args) +xfs_dmops_get(struct xfs_mount *mp) { - if (args->flags & XFSMNT_DMAPI) { + if (mp->m_flags & XFS_MOUNT_DMAPI) { struct xfs_dmops *ops; ops = symbol_get(xfs_dmcore_xfs); Index: linux-2.6-xfs/fs/xfs/xfs_mount.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_mount.h 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_mount.h 2008-05-25 16:23:58.000000000 +0200 @@ -540,9 +540,9 @@ extern void xfs_sb_from_disk(struct xfs_ extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t); extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t); -extern int xfs_dmops_get(struct xfs_mount *, struct xfs_mount_args *); +extern int xfs_dmops_get(struct xfs_mount *); extern void xfs_dmops_put(struct xfs_mount *); -extern int xfs_qmops_get(struct xfs_mount *, struct xfs_mount_args *); +extern int xfs_qmops_get(struct xfs_mount *); extern void xfs_qmops_put(struct xfs_mount *); extern struct xfs_dmops xfs_dmcore_xfs; Index: linux-2.6-xfs/fs/xfs/xfs_qmops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_qmops.c 2008-05-25 16:23:45.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_qmops.c 2008-05-25 16:23:58.000000000 +0200 @@ -28,7 +28,6 @@ #include "xfs_mount.h" #include "xfs_quota.h" #include "xfs_error.h" -#include "xfs_clnt.h" STATIC struct xfs_dquot * @@ -131,9 +130,11 @@ static struct xfs_qmops xfs_qmcore_stub }; int -xfs_qmops_get(struct xfs_mount *mp, struct xfs_mount_args *args) +xfs_qmops_get(struct xfs_mount *mp) { - if (args->flags & (XFSMNT_UQUOTA | XFSMNT_PQUOTA | XFSMNT_GQUOTA)) { + if (mp->m_qflags & (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE | + XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE | + XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE)) { struct xfs_qmops *ops; ops = symbol_get(xfs_qmcore_xfs); Index: linux-2.6-xfs/fs/xfs/xfs_vfsops.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_vfsops.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_vfsops.c 2008-05-25 16:23:58.000000000 +0200 @@ -49,7 +49,6 @@ #include "xfs_extfree_item.h" #include "xfs_acl.h" #include "xfs_attr.h" -#include "xfs_clnt.h" #include "xfs_mru_cache.h" #include "xfs_filestream.h" #include "xfs_fsops.h" Index: linux-2.6-xfs/fs/xfs/dmapi/xfs_dm.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/dmapi/xfs_dm.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/dmapi/xfs_dm.c 2008-05-25 16:23:58.000000000 +0200 @@ -21,7 +21,6 @@ #include "xfs_bit.h" #include "xfs_log.h" #include "xfs_inum.h" -#include "xfs_clnt.h" #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ksyms.c 2008-05-25 16:23:58.000000000 +0200 @@ -22,7 +22,6 @@ #include "xfs_log.h" #include "xfs_imap.h" #include "xfs_inum.h" -#include "xfs_clnt.h" #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" Index: linux-2.6-xfs/fs/xfs/quota/xfs_qm.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_qm.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_qm.c 2008-05-25 16:23:58.000000000 +0200 @@ -20,7 +20,6 @@ #include "xfs_bit.h" #include "xfs_log.h" #include "xfs_inum.h" -#include "xfs_clnt.h" #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" Index: linux-2.6-xfs/fs/xfs/quota/xfs_qm_bhv.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/quota/xfs_qm_bhv.c 2008-05-25 16:23:44.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/quota/xfs_qm_bhv.c 2008-05-25 16:23:58.000000000 +0200 @@ -20,7 +20,6 @@ #include "xfs_bit.h" #include "xfs_log.h" #include "xfs_inum.h" -#include "xfs_clnt.h" #include "xfs_trans.h" #include "xfs_sb.h" #include "xfs_ag.h" From owner-xfs@oss.sgi.com Sun May 25 12:09:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:09:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJ9pOv023588 for ; Sun, 25 May 2008 12:09:51 -0700 X-ASG-Debug-ID: 1211742641-48fb03c90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B1812BD9366; Sun, 25 May 2008 12:10:41 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id wmoTj6RxUGa9tZps; Sun, 25 May 2008 12:10:41 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4PJAYF3014336 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Sun, 25 May 2008 21:10:34 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4PJAXi0014334; Sun, 25 May 2008 21:10:33 +0200 Date: Sun, 25 May 2008 21:10:33 +0200 From: Christoph Hellwig To: Barry Naujok Cc: Christoph Hellwig , Niv Sardi , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: TAKE streamline init/exit path Subject: Re: TAKE streamline init/exit path Message-ID: <20080525191033.GA14139@lst.de> References: <20080518130511.GA28501@lst.de> <20080521060103.GA25003@lst.de> <20080521072425.GA29889@lst.de> <20080522155616.GA7682@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211742642 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.1, rules version 3.1.51403 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16109 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 23, 2008 at 10:26:38AM +1000, Barry Naujok wrote: > >Well, mangrove was the sles10 NAS tree if I remember correctly. And it > >indeed hasn't made it to either the CVS or git tree on oss.sgi.com yet. > > That's the name of the workarea (and why it's called that... I have > no idea!!) > > But, the mod did go to the correct location: > > Modid: xfs-linux-melb:xfs-kern:31210a > > But there is a few hour gap going from Melbourne to the US repository > and then to oss. Neither this nor your kmem_free commit have made it yet the CVS tree on oss.sgi.com. I guess the push is broken again for some reason. From owner-xfs@oss.sgi.com Sun May 25 12:31:25 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 12:31:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4PJVMHR030022 for ; Sun, 25 May 2008 12:31:25 -0700 X-ASG-Debug-ID: 1211743933-797f01830000-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 C9B7D1B0283 for ; Sun, 25 May 2008 12:32:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id AgkRqaNk3DBt7s8b for ; Sun, 25 May 2008 12:32:13 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1K0Lwx-0003Mq-8s; Sun, 25 May 2008 19:32:11 +0000 Date: Sun, 25 May 2008 15:32:11 -0400 From: Christoph Hellwig To: Takashi Sato Cc: "linux-ext4@vger.kernel.org" , "xfs@oss.sgi.com" , "dm-devel@redhat.com" , "linux-fsdevel@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Message-ID: <20080525193211.GA24328@infradead.org> References: <20080522175020t-sato@mail.jp.nec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080522175020t-sato@mail.jp.nec.com> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1211743933 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51404 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16110 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs > + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) > + return ERR_PTR(-EBUSY); > + > + sb = get_super_without_lock(bdev); > + > + /* If super_block has been already frozen, return. */ > + if (sb && sb->s_frozen != SB_UNFROZEN) { > + put_super(sb); > + clear_bit(BD_FREEZE_OP, &bdev->bd_state); > + return sb; > + } The BD_FREEZE_OP flag in the block_device already prevents multiple freezes for a singe block device, so there is no need for this additional check and the get_super_without_lock helper. > down(&bdev->bd_mount_sem); And with that flag bd_mount_sem is also obsolete for preventing the multiple freeze operations. We still need investigate what synchronization we need vs unmount which also takes bd_mount_sem without every having document what it exactly protects. From owner-xfs@oss.sgi.com Sun May 25 18:43:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 18:43:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4Q1gxMe025856 for ; Sun, 25 May 2008 18:43:00 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA27675; Mon, 26 May 2008 11:43:42 +1000 Message-ID: <483A15CE.9060409@sgi.com> Date: Mon, 26 May 2008 11:43:42 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss Subject: Re: [PATCH] use generic_*xattr routines References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> In-Reply-To: <20080523054848.GA29507@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16111 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Fri, May 23, 2008 at 03:22:14PM +1000, Timothy Shimmin wrote: >> Hi Christoph, >> >> Looks reasonable to me. >> >> In list_one_attr(), which looks based on attr_generic_listadd(), >> it does a final: >>> + p += len; >> which seems useless. > > Yeah, feel free to remove it when you commit the patch. Alternatively > I'll send an incremental patch once commited. > Yep, I'll remove it before checkin. >> An aside, I noticed in passing (which was in existing code), >> how we call vn_revalidate >> in xfs_xattr_system_set(). I presume this is because we >> call xfs_acl_setmode() in xfs_acl_vset() when we want to sync >> the mode bits to the ACL. >> If this is the case, then I think it would have been clearer >> to put vn_revalidate() in the vicinity of xfs_acl_setmode(). >> Or is there some other reason? > > No real reason, I was just keeping what was there before. But getting > rid of vn_revalidate complete is on my todo list. The timestamp updates > in there are already not nessecary anymore, and the i_mode/i_uid/i_gid > and i_flags updates can be done much better in the caller that change > the values in the dinode. > Okay, good to know. >> So you are removing xfs_vn_setxattr, xfs_vn_getxattr, and >> xfs_vn_removexattr and calling generic_xattr and retaining the >> code in xattr_handler's. >> >> You leave xfs_vn_listxattr alone. Just like ext3 does its own. Ok. > > Yes, the generic listxattr doesn't buy us anything as we just traverse > the attr btree and list all of them in their natural order. No point > in traversing it N times for N different attribute handlers. > Good point (I didn't really look). >>> +static int >>> +xfs_xattr_system_get(struct inode *inode, const char *name, >>> + void *buffer, size_t size) >>> +{ >>> + int acl; >>> + >>> + acl = xfs_decode_acl(name); >>> + if (acl < 0) >>> + return acl; >>> + >>> + return xfs_acl_vget(inode, buffer, size, acl); >>> +} >>> + >> Fine. >> Seems a little funny as we are calling it a system EA but >> then directly calling the acl code. >> i.e. acknowledging, I guess, that we only have Posix ACLs >> as system EAs. >> Almost could call it xfs_xattr_acl_get(). >> It saves on one liner wrappers I guess. > > Probably worth adding a comment that we only have acls for now. > The reason I did this is to avoid doing multiple memcpys on the xattr > name for decoding it. It will probably need some revisiting if/when > we support other system xattrs. Okay, I'll add a comment. > > Yeah, se the comment above. vn_revalidate will go away pretty soon at > which point this is sorted out. > >>> +struct xattr_handler *xfs_xattr_handlers[] = { >>> + &xfs_xattr_user_handler, >>> + &xfs_xattr_trusted_handler, >>> + &xfs_xattr_security_handler, >>> + &xfs_xattr_system_handler, >>> + NULL >>> +}; >>> + >> So List code is done separately. Hmmmm... >> >> Oh, okay, ATTR_KERNAMELS (for attr_vn_listxattr) uses >> concatenated string arrays >> whereas for not ATTR_KERNAMELS, such as is used in >> xfs_attrlist_by_handle is uses list data in the form: >> > > Yes, this is quite unfortunate. My plan is to refactor the low-level > attr code so that is passes down a formatter ala filldir for directory > reading. This should clean up the attr listing code a lot and also > gets rid of the levtover struct attrnames bits. But that a different > patch which still needs to be written. > I guess this is done to some extent by the put_listent() callback. Though, the context structure is probably a bit overused in different ways. The callback was also used for searching (for parent-ptr code) as well as for list formatting. I presume we are preserving the valuelen list format to keep the API for xfs_attrlist_by_handle used by xfsdump and probably for dmf. Thanks, --Tim From owner-xfs@oss.sgi.com Sun May 25 19:01:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 19:01:06 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4Q210Oj027165 for ; Sun, 25 May 2008 19:01:02 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA28079; Mon, 26 May 2008 12:01:47 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 9CF7558C4C29; Mon, 26 May 2008 12:01:47 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 981508 - ASCII case-insensitive support for xfsprogs Message-Id: <20080526020147.9CF7558C4C29@chook.melbourne.sgi.com> Date: Mon, 26 May 2008 12:01:47 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16112 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Mon May 26 12:01:26 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: hch The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31229a xfsprogs/db/sb.c - 1.24 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/db/sb.c.diff?r1=text&tr1=1.24&r2=text&tr2=1.23&f=h xfsprogs/db/check.c - 1.35 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/db/check.c.diff?r1=text&tr1=1.35&r2=text&tr2=1.34&f=h - ASCII case-insensitive support for xfsprogs xfsprogs/VERSION - 1.181 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/VERSION.diff?r1=text&tr1=1.181&r2=text&tr2=1.180&f=h - Bump to 2.10.0 xfsprogs/doc/CHANGES - 1.253 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/doc/CHANGES.diff?r1=text&tr1=1.253&r2=text&tr2=1.252&f=h xfsprogs/man/man8/mkfs.xfs.8 - 1.31 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/mkfs.xfs.8.diff?r1=text&tr1=1.31&r2=text&tr2=1.30&f=h xfsprogs/mkfs/xfs_mkfs.c - 1.90 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/mkfs/xfs_mkfs.c.diff?r1=text&tr1=1.90&r2=text&tr2=1.89&f=h xfsprogs/mkfs/xfs_mkfs.h - 1.15 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/mkfs/xfs_mkfs.h.diff?r1=text&tr1=1.15&r2=text&tr2=1.14&f=h xfsprogs/growfs/xfs_growfs.c - 1.30 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/growfs/xfs_growfs.c.diff?r1=text&tr1=1.30&r2=text&tr2=1.29&f=h xfsprogs/include/xfs_da_btree.h - 1.20 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/xfs_da_btree.h.diff?r1=text&tr1=1.20&r2=text&tr2=1.19&f=h xfsprogs/include/xfs_sb.h - 1.21 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/xfs_sb.h.diff?r1=text&tr1=1.21&r2=text&tr2=1.20&f=h xfsprogs/include/xfs_fs.h - 1.41 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/xfs_fs.h.diff?r1=text&tr1=1.41&r2=text&tr2=1.40&f=h xfsprogs/include/libxfs.h - 1.64 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/libxfs.h.diff?r1=text&tr1=1.64&r2=text&tr2=1.63&f=h xfsprogs/repair/phase6.c - 1.43 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/phase6.c.diff?r1=text&tr1=1.43&r2=text&tr2=1.42&f=h xfsprogs/libxfs/xfs_da_btree.c - 1.31 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/xfs_da_btree.c.diff?r1=text&tr1=1.31&r2=text&tr2=1.30&f=h xfsprogs/libxfs/xfs_dir2_block.c - 1.16 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/xfs_dir2_block.c.diff?r1=text&tr1=1.16&r2=text&tr2=1.15&f=h xfsprogs/libxfs/xfs_dir2_data.c - 1.12 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/xfs_dir2_data.c.diff?r1=text&tr1=1.12&r2=text&tr2=1.11&f=h xfsprogs/libxfs/xfs_dir2.c - 1.18 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/xfs_dir2.c.diff?r1=text&tr1=1.18&r2=text&tr2=1.17&f=h - ASCII case-insensitive support for xfsprogs From owner-xfs@oss.sgi.com Sun May 25 19:21:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 19:21:29 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53, J_CHICKENPOX_63,J_CHICKENPOX_66 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4Q2LNjV028884 for ; Sun, 25 May 2008 19:21:25 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id MAA28342; Mon, 26 May 2008 12:22:15 +1000 Date: Mon, 26 May 2008 12:23:00 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Update common.filter for CI output in mkfs From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4Q2LRjV028889 X-archive-position: 16113 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Just ignore the new part of directory naming mkfs output: --- a/xfstests/common.filter 2008-05-26 12:21:53.000000000 +1000 +++ b/xfstests/common.filter 2008-05-26 12:12:34.306024612 +1000 @@ -135,7 +135,7 @@ print STDERR "sunit=$1\nswidth=$2\nunwritten=1\n"; print STDOUT " = sunit=XXX swidth=XXX, unwritten=X\n"; } - if (/^naming\s+=version\s+(\d+)\s+bsize=(\d+)/) { + if (/^naming\s+=version\s+(\d+)\s+bsize=(\d+).*/) { print STDERR "dirversion=$1\ndirbsize=$2\n"; print STDOUT "naming =VERN bsize=XXX\n"; } From owner-xfs@oss.sgi.com Sun May 25 19:39:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 19:39:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q2dfbu030112 for ; Sun, 25 May 2008 19:39:42 -0700 X-ASG-Debug-ID: 1211769632-5a9301010000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from dqmail.dynamicquest.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 29EE9BD9980 for ; Sun, 25 May 2008 19:40:32 -0700 (PDT) Received: from dqmail.dynamicquest.com (dqmail.dynamicquest.com [74.202.150.200]) by cuda.sgi.com with ESMTP id n4iOfBngWJDY4tTs for ; Sun, 25 May 2008 19:40:32 -0700 (PDT) Received: from [172.20.0.10] (unknown [172.20.0.10]) by dqmail.dynamicquest.com (Postfix) with ESMTP id 0F3892708022 for ; Sun, 25 May 2008 22:40:32 -0400 (EDT) Message-ID: <483A231F.2030207@dynamicquest.com> Date: Sun, 25 May 2008 22:40:31 -0400 From: Javier Gomez User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Lost Superblock and need help recovering Subject: Lost Superblock and need help recovering Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: dqmail.dynamicquest.com[74.202.150.200] X-Barracuda-Start-Time: 1211769633 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0030 1.0000 -2.0015 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.51433 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16114 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gomez@dynamicquest.com Precedence: bulk X-list: xfs We are currently running a few Coraid AoE devices which we have formated using Raid-5 and XFS filesystem. The devices were shutdown abruptly causing what looks like a some data issues. We are running a Redhat 5 head unit connected to the disk array. When the devices came back up we were unable to remount them. Based on the tools to check the device we got the log information that the Superblock does not exist nor does the secondary. We have two devices, each with 13 TB of disk space each and both with what seems like the same issue. These devices were used as a backup storage device, so they are the backup. But this historical information is very critical to us. We attempted to run the "xfs_repair -nv /dev/etherd/e4.1p1" command to see if found the potential issues ( xfs_repair version 2.9.8 ). It came back with the comments noted below. Does any one have any suggestions for pulling this information off the drive and / or correcting this issue? What other tools should I run to get more information? Thanks for any support or suggestions you can provide. > xfs_repair -nv /dev/etherd/e4.1p1 --------------------------------------------------------------- Phase 1 - find and verify superblock... error reading superblock 4 -- seek to offset 1219003957248 failed couldn't verify primary superblock - bad magic number !!! attempting to find secondary superblock... ................................................................................................ ...................................................... .................. .................. ............Sorry, could not find valid secondary superblock Exiting now. --------------------------------------------------------------- From owner-xfs@oss.sgi.com Sun May 25 20:39:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 20:39:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q3dE3U006426 for ; Sun, 25 May 2008 20:39:14 -0700 X-ASG-Debug-ID: 1211773204-026e01a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7773712B890E for ; Sun, 25 May 2008 20:40:05 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id H3kMVMuA5I32VJlk for ; Sun, 25 May 2008 20:40:05 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 45E98A9C504; Sun, 25 May 2008 22:40:03 -0500 (CDT) Message-ID: <483A3112.4090502@sandeen.net> Date: Sun, 25 May 2008 22:40:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Javier Gomez CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> In-Reply-To: <483A231F.2030207@dynamicquest.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: 1211773205 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.1, rules version 3.1.51437 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16115 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Javier Gomez wrote: > > xfs_repair -nv /dev/etherd/e4.1p1 > --------------------------------------------------------------- > Phase 1 - find and verify superblock... > error reading superblock 4 -- seek to offset 1219003957248 failed > couldn't verify primary superblock - bad magic number !!! Looks to me like you still have storage problems. 1219003957248 is just over 1 terabyte... why can't repair seek to that location if it's a 13T device? What does /proc/partitions say about this block device (or do AoE devices go there?) -Eric > attempting to find secondary superblock... > ................................................................................................ > ...................................................... > .................. > .................. > ............Sorry, could not find valid secondary superblock > Exiting now. > --------------------------------------------------------------- > > From owner-xfs@oss.sgi.com Sun May 25 22:37:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 22:37:24 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q5bHRx013054 for ; Sun, 25 May 2008 22:37:17 -0700 X-ASG-Debug-ID: 1211780287-545c01fb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CACDCBD9CBB; Sun, 25 May 2008 22:38:07 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id gxD7fu4PXTuOFK1m; Sun, 25 May 2008 22:38:07 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4Q5c0F3018119 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Mon, 26 May 2008 07:38:00 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4Q5bx2e018117; Mon, 26 May 2008 07:37:59 +0200 Date: Mon, 26 May 2008 07:37:59 +0200 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] use generic_*xattr routines Subject: Re: [PATCH] use generic_*xattr routines Message-ID: <20080526053759.GA17825@lst.de> References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> <483A15CE.9060409@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <483A15CE.9060409@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211780288 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.1, rules version 3.1.51445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16116 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Mon, May 26, 2008 at 11:43:42AM +1000, Timothy Shimmin wrote: > I guess this is done to some extent by the put_listent() callback. > Though, the context structure is probably a bit overused in different > ways. > The callback was also used for searching (for parent-ptr code) as well > as for list formatting. > I presume we are preserving the valuelen list format to keep the API > for xfs_attrlist_by_handle used by xfsdump and probably for dmf. Yes, the idea is to change the put_listen callback for work more like filldir. Thas is: - the callback is supplied by the xfs_attr_list caller, not set based on options - there will be an opaque object supplied to xfs_attr_list that is to be used by put_listent so that we don't have to pass down implementation-specific arguments directly. I'd also like to move the attrlist_cursor_kern_t into this callback opaque context because it doesn't make sense for the normal xattr API, but I'll have to see if that's actually feasible. From owner-xfs@oss.sgi.com Sun May 25 23:01:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Sun, 25 May 2008 23:01:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from relay.sgi.com (netops-testserver-3.corp.sgi.com [192.26.57.72]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q61km1014658 for ; Sun, 25 May 2008 23:01:46 -0700 Received: from outhouse.melbourne.sgi.com (outhouse.melbourne.sgi.com [134.14.52.145]) by netops-testserver-3.corp.sgi.com (Postfix) with ESMTP id D4CC79088E; Sun, 25 May 2008 23:02:31 -0700 (PDT) Received: from itchy (xaiki@itchy.melbourne.sgi.com [134.14.55.96]) by outhouse.melbourne.sgi.com (SGI-8.12.5/8.12.5) with ESMTP id m4Q62Pjm1409090; Mon, 26 May 2008 16:02:26 +1000 (AEST) From: Niv Sardi To: Christoph Hellwig Cc: Lachlan McIlroy , sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: Re: TAKE 981875 - xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() References: <20080516045732.F12DC58C4C29@chook.melbourne.sgi.com> <20080516051048.GB5035@infradead.org> <20080520064356.GA8711@infradead.org> Date: Mon, 26 May 2008 16:02:29 +1000 In-Reply-To: <20080520064356.GA8711@infradead.org> (Christoph Hellwig's message of "Tue, 20 May 2008 02:43:56 -0400") Message-ID: User-Agent: Gnus/5.110009 (No Gnus v0.9) Emacs/23.0.60 (i486-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16117 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: xaiki@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig writes: > On Fri, May 16, 2008 at 01:10:48AM -0400, Christoph Hellwig wrote: >> On Fri, May 16, 2008 at 02:57:32PM +1000, Lachlan McIlroy wrote: >> > xfs_dm_rdwr() needs to pass a vfsmount to dentry_open() >> > >> > We need a vfsmount pointer in xfs_dm_rdwr() but we are not >> > provided with one and there's no way to get to it. So add >> > a m_vfsmount field to the xfs_mount structure and set it >> > up at mount time. We can then access it through the xfs >> > inode. >> >> Stong NACK for this crap, and double NACK for pushing this towards >> mainline. > > No reply yet. Folks, you realize this is an instant oops if you perform > dmapi operations after one fs instance has been unmounted? This is not going into mainline, but we need it in -dev to make sure we can still QA DMAPI. We (I should be but flooded with other stuff) are looking at other solutions to fix the issue the right way. Cheers, -- Niv Sardi From owner-xfs@oss.sgi.com Mon May 26 02:14:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 02:14:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.5 required=5.0 tests=AWL,BAYES_50,SUBJ_FORWARDED autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q9E1v5001199 for ; Mon, 26 May 2008 02:14:01 -0700 X-ASG-Debug-ID: 1211793291-75a702830001-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from trj-4f79 (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 43C0D1B1DC6 for ; Mon, 26 May 2008 02:14:52 -0700 (PDT) Received: from trj-4f79 (host-200-62-193-42.telmex.com.pe [200.62.193.42]) by cuda.sgi.com with SMTP id bRozzOpvMtTfsvyQ for ; Mon, 26 May 2008 02:14:52 -0700 (PDT) From: "Tula McBride" To: "Xfs" X-ASG-Orig-Subj: Fwd: your website Subject: Fwd: your website Date: Mon, 26 May 2008 04:14:56 -0500 Reply-To: "Tula McBride" Message-ID: <04244755.20080526041456@gmail.com> X-Priority: 5 (Low) MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" X-Barracuda-Connect: host-200-62-193-42.telmex.com.pe[200.62.193.42] X-Barracuda-Start-Time: 1211793293 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5000 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.10 X-Barracuda-Spam-Status: No, SCORE=0.10 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=RDNS_DYNAMIC X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51458 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 RDNS_DYNAMIC Delivered to trusted network by host with dynamic-looking rDNS X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4Q9E1v5001201 X-archive-position: 16118 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: TulaMcBride@gmail.com Precedence: bulk X-list: xfs Dear Xfs: We found your web site but we also found some key things you are missing that could really make a difference in your web traffic. With your permission, we'd like to give you a free site review and show you how a few small changes could greatly improve your online visibility. No fast talk or double speak. Email us now at TulaMcBride@gmail.com for your free analysis. Sincerely, ---Only valid forUSA websites--- Key Media Powered by: Yahoo!, America Online, MSN, AltaVista, Google If you wish to be removed from this list, please reply the word "REMOVE" in your subject line. From owner-xfs@oss.sgi.com Mon May 26 02:23:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 02:23:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4Q9NgUT002181 for ; Mon, 26 May 2008 02:23:42 -0700 X-ASG-Debug-ID: 1211793873-7251035b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ag-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5716E1B1E26 for ; Mon, 26 May 2008 02:24:33 -0700 (PDT) Received: from ag-out-0708.google.com (ag-out-0708.google.com [72.14.246.242]) by cuda.sgi.com with ESMTP id pwnmucNR0R1MsuMP for ; Mon, 26 May 2008 02:24:33 -0700 (PDT) Received: by ag-out-0708.google.com with SMTP id 31so1182610agc.5 for ; Mon, 26 May 2008 02:24:33 -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:subject:mime-version:content-type; bh=Rdcr0aYrz/+kd23r/+9c/dApegCoVKkylUb2iyMyJ3g=; b=GsQNNqSmqHjq0u51wJggrbmhdC9D+0taWK17Myd3s44xchRCcGfK0qnyGjwrgLZNik0qMQslPf/waltlvswCoDzkfDwqfWxnU7NvCkaKV2gb7WhoMWmmGiz1D5fN+WqI9VbgsA+zFpS1XvN0cKFdMM19Piwx61upfU5uv+4DLFQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:subject:mime-version:content-type; b=lL6Pwhyg3wYQn+y2LdXjJHKdFgCCeYnmexgDHKDjmf1lNkfWUdzvRd2jsVe53lNc/3GAOOE05d7mD6mcm0WDcQdBGRKOXGKHeF/yGApZHVmCWakDyLlxbx9Gawo1+IhTnoF5ZlM4XFNZrvdU28FUpxe8dAAutbP/mDdSP67tBB0= Received: by 10.90.65.14 with SMTP id n14mr740138aga.88.1211793834521; Mon, 26 May 2008 02:23:54 -0700 (PDT) Received: by 10.90.114.3 with HTTP; Mon, 26 May 2008 02:23:54 -0700 (PDT) Message-ID: <34284c5e0805260223g63a57e38qa1160a4a80cf1e03@mail.gmail.com> Date: Mon, 26 May 2008 11:23:54 +0200 From: "dave morgan" X-ASG-Orig-Subj: Greetings from David Morgan. Subject: Greetings from David Morgan. MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_16778_2832219.1211793834521" X-Barracuda-Connect: ag-out-0708.google.com[72.14.246.242] X-Barracuda-Start-Time: 1211793874 X-Barracuda-Bayes: INNOCENT GLOBAL 0.6013 1.0000 0.7557 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.36 X-Barracuda-Spam-Status: No, SCORE=1.36 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MAILTO_TO_SPAM_ADDR, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51458 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.19 MISSING_HEADERS Missing To: header 0.28 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message 0.13 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16119 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: davemorganfifteen@gmail.com Precedence: bulk X-list: xfs ------=_Part_16778_2832219.1211793834521 Content-Type: multipart/alternative; boundary="----=_Part_16779_31362117.1211793834521" ------=_Part_16779_31362117.1211793834521 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello Sir, Please find attached my message to you and get back to me via my private email address :davidmorgan65@hotmail.com for details. Thanks in anticipation. Best Regards, David Morgan. ------=_Part_16779_31362117.1211793834521 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello Sir,

Please find attached my message to you and get back to me via my private email address :davidmorgan65@hotmail.com for details.

Thanks in anticipation.

Best Regards,
David Morgan.
------=_Part_16779_31362117.1211793834521-- ------=_Part_16778_2832219.1211793834521 Content-Type: application/msword; name="Greetings from David Morgan..doc" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgouq4ky0 Content-Disposition: attachment; filename="Greetings from David Morgan..doc" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAB AAAAIwAAAAAAAAAAEAAAJQAAAAEAAAD+////AAAAACIAAAD///////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ///////////////////////spcEATSAJBAAA8BK/AAAAAAAAEAAAAAAABAAA ywcAAA4AYmpiauI94j0AAAAAAAAAAAAAAAAAAAAAAAAJBBYAIhIAAIBXAACA VwAAywMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAA AAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAGwAAAAAABQBAAAA AAAAFAEAABQBAAAAAAAAFAEAAAAAAAAUAQAAAAAAABQBAAAAAAAAFAEAABQA AAAAAAAAAAAAACgBAAAAAAAAKAEAAAAAAAAoAQAAAAAAACgBAAAAAAAAKAEA AAwAAAA0AQAADAAAACgBAAAAAAAArQIAALYAAABMAQAAFgAAAGIBAAAAAAAA YgEAAAAAAABiAQAAAAAAAGIBAAAAAAAAYgEAAAAAAABiAQAAAAAAAGIBAAAA AAAALAIAAAIAAAAuAgAAAAAAAC4CAAAAAAAALgIAAAAAAAAuAgAAAAAAAC4C AAAAAAAALgIAACQAAABjAwAAIAIAAIMFAABUAAAAUgIAABUAAAAAAAAAAAAA AAAAAAAAAAAAFAEAAAAAAABiAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAQAA AAAAAGIBAAAAAAAAYgEAAAAAAABiAQAAAAAAAFICAAAAAAAAYgEAAAAAAAAU AQAAAAAAABQBAAAAAAAAYgEAAAAAAAAAAAAAAAAAAGIBAAAAAAAAZwIAABYA AABiAQAAAAAAAGIBAAAAAAAAYgEAAAAAAABiAQAAAAAAABQBAAAAAAAAYgEA AAAAAAAUAQAAAAAAAGIBAAAAAAAALAIAAAAAAAAAAAAAAAAAAGIBAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAYgEAAAAAAAAsAgAAAAAAAGIBAADKAAAAYgEAAAAAAAAAAAAAAAAAACwC AAAAAAAAFAEAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAIAAAAAAABiAQAA AAAAAEABAAAMAAAAwJWyAwu/yAEoAQAAAAAAACgBAAAAAAAAYgEAAAAAAAAs AgAAAAAAAAAAAAAAAAAALAIAAAAAAAB9AgAAMAAAAK0CAAAAAAAALAIAAAAA AADXBQAAAAAAAGIBAAAAAAAA1wUAAAAAAAAsAgAAAAAAAGIBAAAAAAAAKAEA AAAAAAAoAQAAAAAAABQBAAAAAAAAFAEAAAAAAAAUAQAAAAAAABQBAAAAAAAA AgDZAAAAR29vZCBEYXkgLKCgoAtJJ20gRGF2aWQgTW9yZ2FuLCBJIHdvcmsg d2l0aCBBYnNhIEJhbmsgaGVyZSBpbiBTb3V0aCBBZnJpY2EuIEFsdGhvdWdo IHRoZSBpbnRlcm5ldCBpcyBhIHZlcnkgaGFyZCBwbGFjZSB0byBtZWV0IHBl b3BsZSBiZWNhdXNlIHlvdSBkb24ndCBrbm93IHdobyB0byB0cnVzdCwgd2hh dCB0byBiZWxpZXZlIGFuZCB3aGF0IG5vdCB0by6goKALSSBoYXZlIGEgYnVz aW5lc3Mgc3VnZ2VzdGlvbiBmb3IgeW91LiBUaGVyZSBpcyB0aGUgc3VtIG9m ICQxOSw1MDAsMDAwLjAwIGluIG15IGJhbmsgIkFic2EgQmFuayIgU291dGgg QWZyaWNhLiBUaGVyZSB3ZXJlIG5vIGJlbmVmaWNpYXJpZXMgc3RhdGVkIGNv bmNlcm5pbmcgdGhlc2UgZnVuZHMgd2hpY2ggbWVhbnMgbm8gb25lIHdvdWxk IGV2ZXIgY29tZSBmb3J3YXJkIHRvIGNsYWltIGl0LiBUaGF0IGlzIHdoeSBJ IGFzayB0aGF0IHdlIHdvcmsgdG9nZXRoZXIgc28gYXMgdG8gaGF2ZSB0aGUg c3VtIHRyYW5zZmVycmVkIG91dCBvZiBteSBiYW5rIGludG8geW91ciBhY2Nv dW50LqCgoAtQbGVhc2UgZG8gbm90IGJlIG9mZmVuZGVkIHdpdGggdGhlIG1h bm5lciBJIGNvbnRhY3RlZCB5b3UuIEl0IHdhcyBuZWNlc3NpdGF0ZWQgYnkg dGhlIHVyZ2VuY3kgYW5kIG5hdHVyZSBvZiB0aGlzIHRyYW5zYWN0aW9uLqCg oAtTaG91bGQgeW91IGJlIGludGVyZXN0ZWQgcGxlYXNlIHNlbmQgbWUgeW91 cjugoKALoKCgCzEuIEZ1bGwgbmFtZXOgoKALMi4gUHJpdmF0ZSBwaG9uZSBu dW1iZXKgoKALMy4gQ3VycmVudCByZXNpZGVudGlhbCBhZGRyZXNzoKCgC6Cg oAtZb3VyIGNhbiByZWFjaCBtZSBvbiBteSBwcml2YXRlIGVtYWlsOiATIEhZ UEVSTElOSyAibWFpbHRvOmRhdmlkbW9yZ2FuNjVAaG90bWFpbC5jb20iIFx0 ICJfYmxhbmsiIBRkYXZpZG1vcmdhbjY1QGhvdG1haWwuY29tFaCgoAugoKAL S2luZCBSZWdhcmRzLKCgoAtEYXZpZCBNb3JnYW6gDQ0AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAATQcAAE4HAACIBwAA iQcAAKIHAACjBwAAywcAAAD6APr3+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwShAAAAkDagAAAABVCAEA BwAEAADKBwAAywcAAPMAAAAAAAAAAAAAAADxAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALDwAOhHgA D4R4ABOkeABdhHgAXoR4AAACAAQAAMsHAAD9AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAABAQEgADGQaAEfsNAv ILDgPSGwCAcisAgHI5CgBSSQoAUlsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAABQAEQAKAAEAaQAPAAMAAAAAAAAAAAA4AABA8f8CADgADAAGAE4A bwByAG0AYQBsAAAAAgAAABgAQ0oYAF9IAQRhShgAbUgJBHNICQR0SAkEAAAA AAAAAAAAAAAAAAAAAAAAPABBQPL/oQA8AAwAFgBEAGUAZgBhAHUAbAB0ACAA UABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0AAAAAAAAAAAAAAAAADoAXmAB APIAOgAMAAwATgBvAHIAbQBhAGwAIAAoAFcAZQBiACkAAAAQAA8AE6RkABSk ZABbJAFcJAEAAC4AVWCiAAEBLgAMAAkASAB5AHAAZQByAGwAaQBuAGsAAAAM AD4qAUIqAnBoAAD/AAAAAADLAwAABAAAEgAAAAD/////AAQAAMsHAAAGAAAA AAQAAMsHAAAHAAAAAAQAAMsHAAAIAAAATQMAAIgDAACiAwAAywMAABNYlP8V jP//AgAAAAQAUABDADAAOQBcAEMAOgBcAEQAbwBjAHUAbQBlAG4AdABzACAA YQBuAGQAIABTAGUAdAB0AGkAbgBnAHMAXABEAG8AdgBhAG4AbwAgAEkAbgB0 AGUAcgBuAGUAdAAgAGMAYQBmAGUAXABNAHkAIABEAG8AYwB1AG0AZQBuAHQA cwBcAEcAcgBlAGUAdABpAG4AZwBzACAAZgByAG8AbQAgAEQAYQB2AGkAZAAg AE0AbwByAGcAYQBuAC4ALgBkAG8AYwD/QAMAAQAAAAAAywMAAHCEggABAAEA AAAAAAEAAAAAAAAAAAAAAAIQAAAAAAAAAMsDAABAAAAIAEAAAP//AQAAAAcA VQBuAGsAbgBvAHcAbgD//wEACAAAAAAAAAAAAAAA//8BAAAAAAD//wAAAgD/ /wAAAAD//wAAAgD//wAAAAADAAAARxaQAQAAAgIGAwUEBQIDBId6ACAAAACA CAAAAAAAAAD/AQAAAAAAAFQAaQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBu AAAANRaQAQIABQUBAgEHBgIFBwAAAAAAAAAQAAAAAAAAAAAAAACAAAAAAFMA eQBtAGIAbwBsAAAAMyaQAQAAAgsGBAICAgICBId6ACAAAACACAAAAAAAAAD/ AQAAAAAAAEEAcgBpAGEAbAAAACIABAAwCIgYAPDQAgAAaAEAAAAAndLFJqDS xSYAAAAAAQADAAAAjAAAACADAAABAAEAAAAEAAMQBgAAAAAAAAAAAAAAAQAB AAAAAQAAAAAAAABZAgDwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAIB6AFtAC0AIGBEjAAAAAAAAAAAAAAAAAAANYDAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAyg1EA8BAACAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//xIAAAAAAAAADQBHAG8AbwBkACAA RABhAHkAIAAsACAAIAAgAAAAAAAAAAQAUABDADAAOQAEAFAAQwAwADkAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCr kQgAKyez2TAAAABwAQAAEQAAAAEAAACQAAAAAgAAAJgAAAADAAAAsAAAAAQA AAC8AAAABQAAAMwAAAAGAAAA2AAAAAcAAADkAAAACAAAAPQAAAAJAAAABAEA ABIAAAAQAQAACgAAACwBAAAMAAAAOAEAAA0AAABEAQAADgAAAFABAAAPAAAA WAEAABAAAABgAQAAEwAAAGgBAAACAAAA5AQAAB4AAAAOAAAAR29vZCBEYXkg LCAgIABvAB4AAAABAAAAAG9vZB4AAAAFAAAAUEMwOQBEYXkeAAAAAQAAAABD MDkeAAAAAQAAAABDMDkeAAAABwAAAE5vcm1hbAB5HgAAAAUAAABQQzA5AGwA eR4AAAACAAAAMQAwOR4AAAATAAAATWljcm9zb2Z0IFdvcmQgOS4wAABAAAAA ANJJawAAAABAAAAAAG4IjAq/yAFAAAAAAEBS9wq/yAEDAAAAAQAAAAMAAACM AAAAAwAAACADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAA/v8AAAUBAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQ k5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rjgBAAD0AAAADAAAAAEAAABo AAAADwAAAHAAAAAFAAAAfAAAAAYAAACEAAAAEQAAAIwAAAAXAAAAlAAAAAsA AACcAAAAEAAAAKQAAAATAAAArAAAABYAAAC0AAAADQAAALwAAAAMAAAA1gAA AAIAAADkBAAAHgAAAAEAAAAAAG8AAwAAAAYAAAADAAAAAQAAAAMAAADWAwAA AwAAAO0OCQALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4QAAAB AAAADgAAAEdvb2QgRGF5ICwgICAADBAAAAIAAAAeAAAABgAAAFRpdGxlAAMA AAABAAAAxAAAAAMAAAAAAAAAIAAAAAEAAAA4AAAAAgAAAEAAAAABAAAAAgAA AAwAAABfUElEX0hMSU5LUwACAAAA5AQAAEEAAAB8AAAABgAAAAMAAABgAFgA AwAAAAAAAAADAAAAAAAAAAMAAAAFAAAAHwAAACEAAABtAGEAaQBsAHQAbwA6 AGQAYQB2AGkAZABtAG8AcgBnAGEAbgA2ADUAQABoAG8AdABtAGEAaQBsAC4A YwBvAG0AAAAAAB8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAA AP7///8LAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAA/v///xMAAAAUAAAA FQAAABYAAAAXAAAAGAAAABkAAAD+////GwAAABwAAAAdAAAAHgAAAB8AAAAg AAAAIQAAAP7////9////JAAAAP7////+/////v////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ////////////////////////////////////UgBvAG8AdAAgAEUAbgB0AHIA eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABYABQH//////////wMAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAA gJWSBAu/yAEmAAAAgAAAAAAAAAAxAFQAYQBiAGwAZQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgACAP// /////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAoAAAAAEAAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIBBQAAAP////// ////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIS AAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgECAAAABAAAAP////8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAABAAAAAAAAAF AEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEA dABpAG8AbgAAAAAAAAAAAAAAOAACAf///////////////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAEAAAAAAAAAEAQwBvAG0A cABPAGIAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAASAAIBAQAAAAYAAAD/////AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAAATwBiAGoAZQBjAHQAUABv AG8AbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAABYAAQD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAICVkgQL v8gBgJWSBAu/yAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEAAAD+//////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ////////////////////////////////////////////AQD+/wMKAAD///// BgkCAAAAAADAAAAAAAAARhgAAABNaWNyb3NvZnQgV29yZCBEb2N1bWVudAAK AAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50LjgA9DmycQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAA= ------=_Part_16778_2832219.1211793834521-- From owner-xfs@oss.sgi.com Mon May 26 03:34:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 03:34:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QAYBQ3007229 for ; Mon, 26 May 2008 03:34:12 -0700 X-ASG-Debug-ID: 1211798101-44f001e40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from dqmail.dynamicquest.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B8F3CBDB063 for ; Mon, 26 May 2008 03:35:02 -0700 (PDT) Received: from dqmail.dynamicquest.com (dqmail.dynamicquest.com [74.202.150.200]) by cuda.sgi.com with ESMTP id i83vp5dcNIXnUuKL for ; Mon, 26 May 2008 03:35:02 -0700 (PDT) Received: from [172.20.0.10] (unknown [172.20.0.10]) by dqmail.dynamicquest.com (Postfix) with ESMTP id 1774D2708056; Mon, 26 May 2008 06:35:01 -0400 (EDT) Message-ID: <483A9254.8010509@dynamicquest.com> Date: Mon, 26 May 2008 06:35:00 -0400 From: Javier Gomez User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> <483A3112.4090502@sandeen.net> In-Reply-To: <483A3112.4090502@sandeen.net> X-Barracuda-Connect: dqmail.dynamicquest.com[74.202.150.200] X-Barracuda-Start-Time: 1211798102 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=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51463 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 2816 X-archive-position: 16120 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gomez@dynamicquest.com Precedence: bulk X-list: xfs The two devices having issues are /dev/etherd/e5.1p1 and /dev/etherd/e4.1p1 You make a very valid point. Notice the main device shows the full size (one has 12.6 TB and the other is 9.5 TB). Each of these two devices contain a single complete partition on it taking up the full size of the device. It looks like both of these are short on the size for the actual partition "1p1". Note that for device /dev/etherd/e3.1 and /dev/etherd/e7.1 and /dev/etherd/e7.2 we formated the xfs filesystem directly on the device. The groups on the net had noted that it could be done either way, but it might be a little safer to do it with the xfs formated directly on the device (not sure if this is valid). In this case /dev/etherd/e3 and /dev/etherd/e7 both came up just fine after the hard shutdown while the /dev/etherd/e4 and /dev/etherd/e5 both have this superblock issue. Each of these devices are running the same stuff except that /dev/etherd/e5 is slightly smaller then the other ones in disk space. See this information below, do you have any suggestions to recover from it? Is there anyway to remap the partition description to fill the entire size correctly so that the xfs_repair can complete its job? Thanks again for any help... Javier [root@seer proc]# cat partitions major minor #blocks name 8 0 243163136 sda 8 1 104391 sda1 8 2 243055417 sda2 253 0 241008640 dm-0 253 1 2031616 dm-1 152 0 12697913278 etherd/e4.1 152 1 1960494281 etherd/e4.1p1 152 16 12697913278 etherd/e3.1 152 32 12697913278 etherd/e7.1 152 48 9523468862 etherd/e5.1 152 49 933533929 etherd/e5.1p1 152 64 976762558 etherd/e7.2 Eric Sandeen wrote: > Javier Gomez wrote: > > >> > xfs_repair -nv /dev/etherd/e4.1p1 >> --------------------------------------------------------------- >> Phase 1 - find and verify superblock... >> error reading superblock 4 -- seek to offset 1219003957248 failed >> couldn't verify primary superblock - bad magic number !!! >> > > Looks to me like you still have storage problems. > > 1219003957248 is just over 1 terabyte... why can't repair seek to that > location if it's a 13T device? > > What does /proc/partitions say about this block device (or do AoE > devices go there?) > > -Eric > > >> attempting to find secondary superblock... >> ................................................................................................ >> ...................................................... >> .................. >> .................. >> ............Sorry, could not find valid secondary superblock >> Exiting now. >> --------------------------------------------------------------- >> >> >> > > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon May 26 07:48:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 07:48:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QEmmVZ027583 for ; Mon, 26 May 2008 07:48:48 -0700 X-ASG-Debug-ID: 1211813379-176303c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 73DEA172FC20 for ; Mon, 26 May 2008 07:49:39 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id eJHoGz8orclqjwgq for ; Mon, 26 May 2008 07:49:39 -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 sandeen.net (Postfix) with ESMTP id 01F32A9C51D; Mon, 26 May 2008 09:49:36 -0500 (CDT) Message-ID: <483ACE00.4050701@sandeen.net> Date: Mon, 26 May 2008 09:49:36 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Javier Gomez CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> <483A3112.4090502@sandeen.net> <483A9254.8010509@dynamicquest.com> In-Reply-To: <483A9254.8010509@dynamicquest.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: 1211813379 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.82 X-Barracuda-Spam-Status: No, SCORE=-1.82 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51482 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16121 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Javier Gomez wrote: > > The two devices having issues are /dev/etherd/e5.1p1 and > /dev/etherd/e4.1p1 > > You make a very valid point. Notice the main device shows the full > size (one has 12.6 TB and the other is 9.5 TB). Each of these two > devices contain a single complete partition on it taking up the full > size of the device. It looks like both of these are short on the size > for the actual partition "1p1". Yep.... > Note that for device /dev/etherd/e3.1 > and /dev/etherd/e7.1 and /dev/etherd/e7.2 we formated the xfs > filesystem directly on the device. The groups on the net had noted that > it could be done either way, but it might be a little safer to do it > with the xfs formated directly on the device (not sure if this is > valid). From the xfs perspective, it does not really matter. > In this case /dev/etherd/e3 and /dev/etherd/e7 both came up > just fine after the hard shutdown while the /dev/etherd/e4 and > /dev/etherd/e5 both have this superblock issue. If we look at those devices in /proc/partitions: > 152 0 12697913278 etherd/e4.1 <-- 11.8GiB > 152 1 1960494281 etherd/e4.1p1 <-- 1.8GiB > 152 48 9523468862 etherd/e5.1 <-- 8.8GiB > 152 49 933533929 etherd/e5.1p1 <-- 0.9GiB you can see that the partitions don't actually seeem to span much of the device. I don't know how that happened, but it's unlikely to be an xfs problem.... perhaps if you can figure out what went wrong there, and get your partitions back to the right(?) size xfs will see a consistent filesystem. > Each of these devices > are running the same stuff except that /dev/etherd/e5 is slightly > smaller then the other ones in disk space. See this information below, > do you have any suggestions to recover from it? Is there anyway to > remap the partition description to fill the entire size correctly so > that the xfs_repair can complete its job? What sort of partition tables are on the devices? I'll hazard a guess that they're dos partition tables made with parted? Hmm yep from looking at the sizes of your devices and partitions, it does appear that the high bits of the size have been lost. If so then you've been bitten by a parted bug that lets you "create" dos partition tables larger than can actually be stored on-disk (2T IIRC), so that when you reboot, it appears to be truncated. However, the xfs data is still there, if so. Depending on how big the dos partition table is I think some people have successfully replaced it with a GPT table, which can handle these larger sizes. Doing that is a little tricky, and backing up the old table with dd is well-advised. -Eric From owner-xfs@oss.sgi.com Mon May 26 08:12:48 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 08:12:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QFChUF029015 for ; Mon, 26 May 2008 08:12:48 -0700 X-ASG-Debug-ID: 1211814814-48d5017d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from dqmail.dynamicquest.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 08C7C1B3135 for ; Mon, 26 May 2008 08:13:34 -0700 (PDT) Received: from dqmail.dynamicquest.com (dqmail.dynamicquest.com [74.202.150.200]) by cuda.sgi.com with ESMTP id BDTQhSGQWMGk4fGq for ; Mon, 26 May 2008 08:13:34 -0700 (PDT) Received: from [172.20.0.10] (unknown [172.20.0.10]) by dqmail.dynamicquest.com (Postfix) with ESMTP id 9E2612708056; Mon, 26 May 2008 11:13:33 -0400 (EDT) Message-ID: <483AD39C.8040201@dynamicquest.com> Date: Mon, 26 May 2008 11:13:32 -0400 From: Javier Gomez User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> <483A3112.4090502@sandeen.net> <483A9254.8010509@dynamicquest.com> <483ACE00.4050701@sandeen.net> In-Reply-To: <483ACE00.4050701@sandeen.net> X-Barracuda-Connect: dqmail.dynamicquest.com[74.202.150.200] X-Barracuda-Start-Time: 1211814815 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0017 1.0000 -2.0096 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.01 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.1, rules version 3.1.51482 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 3630 X-archive-position: 16122 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gomez@dynamicquest.com Precedence: bulk X-list: xfs Thanks for the feedback. Your right on the mark. We did use "parted" to create the partitions on this device. That would explain the issue we are having right now. Do you have any suggestions on what to do next to correct this issue. I have not seen any clear information on the net about this issue. The information on these devices is very important to us and very critical we get it up again prior to tomorrow (or reasonably soon after). How would you suggest we try to repair the partition table. Also given that its 13 TB a "dd" to backup the device will take a long time and I am also not sure what dd command to run that will grab the data correctly given the bad partition information currently in place. Javier Eric Sandeen wrote: > Javier Gomez wrote: > >> The two devices having issues are /dev/etherd/e5.1p1 and >> /dev/etherd/e4.1p1 >> >> You make a very valid point. Notice the main device shows the full >> size (one has 12.6 TB and the other is 9.5 TB). Each of these two >> devices contain a single complete partition on it taking up the full >> size of the device. It looks like both of these are short on the size >> for the actual partition "1p1". >> > > Yep.... > > >> Note that for device /dev/etherd/e3.1 >> and /dev/etherd/e7.1 and /dev/etherd/e7.2 we formated the xfs >> filesystem directly on the device. The groups on the net had noted that >> it could be done either way, but it might be a little safer to do it >> with the xfs formated directly on the device (not sure if this is >> valid). >> > > >From the xfs perspective, it does not really matter. > > >> In this case /dev/etherd/e3 and /dev/etherd/e7 both came up >> just fine after the hard shutdown while the /dev/etherd/e4 and >> /dev/etherd/e5 both have this superblock issue. >> > > If we look at those devices in /proc/partitions: > > >> 152 0 12697913278 etherd/e4.1 <-- 11.8GiB >> 152 1 1960494281 etherd/e4.1p1 <-- 1.8GiB >> 152 48 9523468862 etherd/e5.1 <-- 8.8GiB >> 152 49 933533929 etherd/e5.1p1 <-- 0.9GiB >> > > you can see that the partitions don't actually seeem to span much of the > device. I don't know how that happened, but it's unlikely to be an xfs > problem.... perhaps if you can figure out what went wrong there, and get > your partitions back to the right(?) size xfs will see a consistent > filesystem. > > >> Each of these devices >> are running the same stuff except that /dev/etherd/e5 is slightly >> smaller then the other ones in disk space. See this information below, >> do you have any suggestions to recover from it? Is there anyway to >> remap the partition description to fill the entire size correctly so >> that the xfs_repair can complete its job? >> > > What sort of partition tables are on the devices? I'll hazard a guess > that they're dos partition tables made with parted? Hmm yep from > looking at the sizes of your devices and partitions, it does appear that > the high bits of the size have been lost. > > If so then you've been bitten by a parted bug that lets you "create" dos > partition tables larger than can actually be stored on-disk (2T IIRC), > so that when you reboot, it appears to be truncated. However, the xfs > data is still there, if so. > > Depending on how big the dos partition table is I think some people have > successfully replaced it with a GPT table, which can handle these larger > sizes. Doing that is a little tricky, and backing up the old table with > dd is well-advised. > > -Eric > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon May 26 09:24:43 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 09:24:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QGOh1L005802 for ; Mon, 26 May 2008 09:24:43 -0700 X-ASG-Debug-ID: 1211819134-156801c00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ED70DBE30E9 for ; Mon, 26 May 2008 09:25:34 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id cG5hj19fOPgwzt5e for ; Mon, 26 May 2008 09:25:34 -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 sandeen.net (Postfix) with ESMTP id 6C69798D30A; Mon, 26 May 2008 11:25:32 -0500 (CDT) Message-ID: <483AE47B.20101@sandeen.net> Date: Mon, 26 May 2008 11:25:31 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Javier Gomez CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> <483A3112.4090502@sandeen.net> <483A9254.8010509@dynamicquest.com> <483ACE00.4050701@sandeen.net> <483AD39C.8040201@dynamicquest.com> In-Reply-To: <483AD39C.8040201@dynamicquest.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: 1211819134 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.1, rules version 3.1.51487 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16123 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Javier Gomez wrote: > > Thanks for the feedback. Your right on the mark. We did use > "parted" to create the partitions on this device. That would explain > the issue we are having right now. Do you have any suggestions on what > to do next to correct this issue. I have not seen any clear information > on the net about this issue. The information on these devices is very > important to us and very critical we get it up again prior to tomorrow > (or reasonably soon after). > > How would you suggest we try to repair the partition table. Also > given that its 13 TB a "dd" to backup the device will take a long time > and I am also not sure what dd command to run that will grab the data > correctly given the bad partition information currently in place. > Javier Basically, you want to replace the dos partition table with a GPT partition table, without overwriting any of your filesystem (on dos partition #1) I can give you a basic walkthough but, do your own thinking and don't assume that what I'm saying here is 100% perfect and infallible. This is the general idea. For the backup, I'm just recommending backing up the partition table. So I would use parted, and set the units to "sectors" : (parted) unit s print it out and you'll see where it starts: Number Start End Size Type File system Flags 1 63s XXXXXXs xxxxxxs primary ext3 So the original partition starts at sector #63; therefore I'd back up the first 64 sectors: dd if=/dev/etherd/e4.1 bs=512 count=64 of=e4.1.table.backup Actually if it were me I'd probably back up a bit more in case something goes wrong in the next steps, i.e. count=256 or so. That'll get the dos table and the first part of the fs, in case it were to get overwritten. Now you want to remove the dos partition table & add a gpt partition table, essentially what you have now: 1: [ dos table ][xfs filesystem data ... ] then remove the dos partition table with parted to get: 2: [ empty ][xfs filesystem data ... ] And add a new gpt table with parted, with the first partition at exactly the same start-point (63s) but this time extending to the end of the device: 3: [gpt][ empty ][xfs filesystem data ... ] but this requires 3 things: * the gpt table must fit in the first 63 sectors to not overwrite the xfs filesystem (IIRC it should fit). * the gpt table must point to a first-partition start point exactly the same as what the dos table pointed to (sector 63) (I assume this starts at 0 so sector 63 is the 64th sector; in any case you'd tell parted to start at "63s" AFAIK.) * the gpt table doesn't write anything to the *end* of the device, or if it does, it's not clobbering any of the filesystem. The last part is probably the trickiest; IIRC gpt can write backup tables at the end of the device; however it's possible that your filesystem doesn't actually extend that far. I suppose I would use dd to copy out the last few sectors of your pristine device as well, to keep a copy before you do this. Then I'd probably strace parted and save output to a file to see where it actually wrote data when I created the gpt table. Maybe this is all overkill but it'd be safest. After you've written the gpt table and convinced yourself that it didn't overwrite any of the filesystem, I'd probably try an xfs_repair -n to see if all looks well... -Eric (who thinks maybe this is a common enough problem that it warrants a faq, and maybe even automatic recovery script...) p.s. I suppose one other alternative, which is less involved but isn't a 100% fix, would be to simply delete and recreate the *dos* partition table with parted. This would get you back the whole partition size for this session, but it'd get lost on reboot. This works for the current session because parted actually pokes the too-large partition size directly into the kernel when it writes the table, even though it can't re-read it from disk on the next boot. From owner-xfs@oss.sgi.com Mon May 26 12:45:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 12:45:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QJjCVf022317 for ; Mon, 26 May 2008 12:45:12 -0700 X-ASG-Debug-ID: 1211831162-36fa01390000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from dqmail.dynamicquest.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9C9AB1B42A9 for ; Mon, 26 May 2008 12:46:02 -0700 (PDT) Received: from dqmail.dynamicquest.com (dqmail.dynamicquest.com [74.202.150.200]) by cuda.sgi.com with ESMTP id 5r0t573NTnM8FQob for ; Mon, 26 May 2008 12:46:02 -0700 (PDT) Received: from [172.20.0.10] (unknown [172.20.0.10]) by dqmail.dynamicquest.com (Postfix) with ESMTP id 999A82708051; Mon, 26 May 2008 15:46:01 -0400 (EDT) Message-ID: <483B137E.4010306@dynamicquest.com> Date: Mon, 26 May 2008 15:46:06 -0400 From: Javier Gomez User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Eric Sandeen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Lost Superblock and need help recovering Subject: Re: Lost Superblock and need help recovering References: <483A231F.2030207@dynamicquest.com> <483A3112.4090502@sandeen.net> <483A9254.8010509@dynamicquest.com> <483ACE00.4050701@sandeen.net> <483AD39C.8040201@dynamicquest.com> <483AE47B.20101@sandeen.net> In-Reply-To: <483AE47B.20101@sandeen.net> X-Barracuda-Connect: dqmail.dynamicquest.com[74.202.150.200] X-Barracuda-Start-Time: 1211831163 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.08 X-Barracuda-Spam-Status: No, SCORE=-1.08 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_10_20, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51499 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.94 HTML_10_20 BODY: Message is 10% to 20% HTML X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 4904 X-archive-position: 16124 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: gomez@dynamicquest.com Precedence: bulk X-list: xfs Thank you very much for the help on this one. As of right now we are back up and running. We actually followed your secondary suggestion to just "simply delete and recreate the *dos* partition table". This worked great for the initial drive e4.1, but we had a number of issues with the e5.1. With a lot of guess work, we finally got the e5.1 partition to come up as well but we also had to run the xfs_repair on the drive. Now that the devices are running we are going to move off all of the data to another device and then just reformat the entire unit again (without parted this time). Again, thank you very much for your suggestions on this issue. Javier Eric Sandeen wrote: > Javier Gomez wrote: > >> Thanks for the feedback. Your right on the mark. We did use >> "parted" to create the partitions on this device. That would explain >> the issue we are having right now. Do you have any suggestions on what >> to do next to correct this issue. I have not seen any clear information >> on the net about this issue. The information on these devices is very >> important to us and very critical we get it up again prior to tomorrow >> (or reasonably soon after). >> >> How would you suggest we try to repair the partition table. Also >> given that its 13 TB a "dd" to backup the device will take a long time >> and I am also not sure what dd command to run that will grab the data >> correctly given the bad partition information currently in place. >> Javier >> > > Basically, you want to replace the dos partition table with a GPT > partition table, without overwriting any of your filesystem (on dos > partition #1) I can give you a basic walkthough but, do your own > thinking and don't assume that what I'm saying here is 100% perfect and > infallible. This is the general idea. > > For the backup, I'm just recommending backing up the partition table. > > So I would use parted, and set the units to "sectors" : > > (parted) unit s > > print it out and you'll see where it starts: > > Number Start End Size Type File system Flags > 1 63s XXXXXXs xxxxxxs primary ext3 > > So the original partition starts at sector #63; therefore I'd back up > the first 64 sectors: > > dd if=/dev/etherd/e4.1 bs=512 count=64 of=e4.1.table.backup > > Actually if it were me I'd probably back up a bit more in case something > goes wrong in the next steps, i.e. count=256 or so. That'll get the dos > table and the first part of the fs, in case it were to get overwritten. > > Now you want to remove the dos partition table & add a gpt partition > table, essentially what you have now: > > 1: [ dos table ][xfs filesystem data ... ] > > then remove the dos partition table with parted to get: > > 2: [ empty ][xfs filesystem data ... ] > > And add a new gpt table with parted, with the first partition at exactly > the same start-point (63s) but this time extending to the end of the device: > > 3: [gpt][ empty ][xfs filesystem data ... ] > > but this requires 3 things: > > * the gpt table must fit in the first 63 sectors to not overwrite the > xfs filesystem (IIRC it should fit). > * the gpt table must point to a first-partition start point exactly the > same as what the dos table pointed to (sector 63) (I assume this starts > at 0 so sector 63 is the 64th sector; in any case you'd tell parted to > start at "63s" AFAIK.) > * the gpt table doesn't write anything to the *end* of the device, or if > it does, it's not clobbering any of the filesystem. > > The last part is probably the trickiest; IIRC gpt can write backup > tables at the end of the device; however it's possible that your > filesystem doesn't actually extend that far. I suppose I would use dd > to copy out the last few sectors of your pristine device as well, to > keep a copy before you do this. Then I'd probably strace parted and > save output to a file to see where it actually wrote data when I created > the gpt table. Maybe this is all overkill but it'd be safest. > > After you've written the gpt table and convinced yourself that it didn't > overwrite any of the filesystem, I'd probably try an xfs_repair -n to > see if all looks well... > > -Eric (who thinks maybe this is a common enough problem that it warrants > a faq, and maybe even automatic recovery script...) > > > p.s. > > I suppose one other alternative, which is less involved but isn't a 100% > fix, would be to simply delete and recreate the *dos* partition table > with parted. This would get you back the whole partition size for this > session, but it'd get lost on reboot. This works for the current > session because parted actually pokes the too-large partition size > directly into the kernel when it writes the table, even though it can't > re-read it from disk on the next boot. > [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon May 26 16:56:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 16:56:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.9 required=5.0 tests=BAYES_50,HTML_MESSAGE, URIBL_BLACK autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4QNu0Uu008962 for ; Mon, 26 May 2008 16:56:02 -0700 X-ASG-Debug-ID: 1211846202-76c202300000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx.globalserver.com.ar (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F3C701B4AA7 for ; Mon, 26 May 2008 16:56:42 -0700 (PDT) Received: from mx.globalserver.com.ar (mx.globalserver.com.ar [200.68.101.180]) by cuda.sgi.com with ESMTP id rWd4btgcAbFmLkpy for ; Mon, 26 May 2008 16:56:42 -0700 (PDT) Received: from www.ventana1.com (unknown [192.168.0.2]) by mx.globalserver.com.ar (Postfix) with ESMTP id 443DF4A7EC5 for ; Mon, 26 May 2008 20:28:41 -0300 (ART) Date: Mon, 26 May 2008 20:46:38 -0300 To: "linux-xfs@oss.sgi.com" From: Ventana 1 Reply-To: Ventana 1 X-ASG-Orig-Subj: Ventana Uno - Lanzamiento Mundial Subject: Ventana Uno - Lanzamiento Mundial Message-ID: <556e099390e164d3b4ceeb313f57b921@www.ventana1.com> X-Priority: 3 X-Mailer: PHPMailer [version 1.73] MIME-Version: 1.0 X-Barracuda-Connect: mx.globalserver.com.ar[200.68.101.180] X-Barracuda-Start-Time: 1211846203 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5364 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 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.1, rules version 3.1.51518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 384 X-archive-position: 16125 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Notificaciones@ventana1.com Precedence: bulk X-list: xfs VENTANA UNO lanza su sitio mundialmente!!! Crea y administra tus favoritos online GRATIS! www.ventana1.com Registrate gratis y comienza a disfrutar del placer de tener tus favoritos online como pagina de inicio y de manera gratuita!! Y puedes seguir utilizando Google tambien! _____________________________________ www.ventana1.com [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon May 26 17:00:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 17:00:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.9 required=5.0 tests=BAYES_50,HTML_MESSAGE, URIBL_BLACK autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4R00paO009573 for ; Mon, 26 May 2008 17:00:51 -0700 X-ASG-Debug-ID: 1211846501-376d00ad0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx.globalserver.com.ar (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B41DD1B4AC3 for ; Mon, 26 May 2008 17:01:42 -0700 (PDT) Received: from mx.globalserver.com.ar (mx.globalserver.com.ar [200.68.101.180]) by cuda.sgi.com with ESMTP id 6lz081HFzv92EWUs for ; Mon, 26 May 2008 17:01:42 -0700 (PDT) Received: from www.ventana1.com (unknown [192.168.0.2]) by mx.globalserver.com.ar (Postfix) with ESMTP id 56A3E4A7FED for ; Mon, 26 May 2008 20:33:41 -0300 (ART) Date: Mon, 26 May 2008 20:51:39 -0300 To: "linux-xfs@oss.sgi.com" From: Ventana 1 Reply-To: Ventana 1 X-ASG-Orig-Subj: Ventana Uno - Lanzamiento Mundial Subject: Ventana Uno - Lanzamiento Mundial Message-ID: X-Priority: 3 X-Mailer: PHPMailer [version 1.73] MIME-Version: 1.0 X-Barracuda-Connect: mx.globalserver.com.ar[200.68.101.180] X-Barracuda-Start-Time: 1211846502 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5364 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 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.1, rules version 3.1.51518 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 7bit Content-length: 384 X-archive-position: 16126 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Notificaciones@ventana1.com Precedence: bulk X-list: xfs VENTANA UNO lanza su sitio mundialmente!!! Crea y administra tus favoritos online GRATIS! www.ventana1.com Registrate gratis y comienza a disfrutar del placer de tener tus favoritos online como pagina de inicio y de manera gratuita!! Y puedes seguir utilizando Google tambien! _____________________________________ www.ventana1.com [[HTML alternate version deleted]] From owner-xfs@oss.sgi.com Mon May 26 21:37:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 21:37:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4R4bTT9032169 for ; Mon, 26 May 2008 21:37:31 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id OAA23021; Tue, 27 May 2008 14:38:16 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1116) id 4ADD558C4C3F; Tue, 27 May 2008 14:38:16 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com, xfs@oss.sgi.com Subject: TAKE 982343 - make xfs use generic set/get/remove xattr routines Message-Id: <20080527043816.4ADD558C4C3F@chook.melbourne.sgi.com> Date: Tue, 27 May 2008 14:38:16 +1000 (EST) From: tes@sgi.com (Tim Shimmin) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16127 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Use the generic xattr methods. Use the generic set, get and removexattr methods and supply the s_xattr array with fine-grained handlers. All XFS/Linux highlevel attr handling is rewritten from scratch and placed into fs/xfs/linux-2.6/xfs_xattr.c so that it's separated from the generic low-level code. Signed-off-by: Christoph Hellwig Date: Tue May 27 14:37:16 AEST 2008 Workarea: chook.melbourne.sgi.com:/build/tes/2.6.x-xfs-quilt Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb Modid: xfs-linux-melb:xfs-kern:31234a fs/xfs/linux-2.6/xfs_xattr.c - 1.1 - new http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_xattr.c - Use generic set/get/remove xattr methods. fs/xfs/Makefile - 1.61 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/Makefile.diff?r1=text&tr1=1.61&r2=text&tr2=1.60&f=h - Use generic set/get/remove xattr methods. fs/xfs/xfs_attr.c - 1.152 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.c.diff?r1=text&tr1=1.152&r2=text&tr2=1.151&f=h - Use generic set/get/remove xattr methods. fs/xfs/xfs_attr.h - 1.41 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_attr.h.diff?r1=text&tr1=1.41&r2=text&tr2=1.40&f=h - Use generic set/get/remove xattr methods. fs/xfs/linux-2.6/xfs_super.h - 1.79 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.h.diff?r1=text&tr1=1.79&r2=text&tr2=1.78&f=h - Use generic set/get/remove xattr methods. fs/xfs/linux-2.6/xfs_super.c - 1.430 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_super.c.diff?r1=text&tr1=1.430&r2=text&tr2=1.429&f=h - Use generic set/get/remove xattr methods. fs/xfs/linux-2.6/xfs_iops.c - 1.288 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.288&r2=text&tr2=1.287&f=h - Use generic set/get/remove xattr methods. fs/xfs/linux-2.6/xfs_iops.h - 1.34 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.h.diff?r1=text&tr1=1.34&r2=text&tr2=1.33&f=h - Use generic set/get/remove xattr methods. From owner-xfs@oss.sgi.com Mon May 26 23:28:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Mon, 26 May 2008 23:28:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=BAYES_99,J_CHICKENPOX_56, URIBL_GREY autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4R6S95c006292 for ; Mon, 26 May 2008 23:28:09 -0700 X-ASG-Debug-ID: 1211869739-3c1f03dc0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from me21507.mailengine1.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 92199119BCE9 for ; Mon, 26 May 2008 23:28:59 -0700 (PDT) Received: from me21507.mailengine1.com (me21507.mailengine1.com [66.59.24.112]) by cuda.sgi.com with ESMTP id 3WfNerWF1RIYEAKV for ; Mon, 26 May 2008 23:28:59 -0700 (PDT) Received: by me21507.mailengine1.com (PowerMTA(TM) v3.2r22) id h7el2o0cg8kn for ; Mon, 26 May 2008 23:28:51 -0700 (envelope-from ) Content-Type: multipart/alternative; boundary="_----------=_1073964459106330" MIME-Version: 1.0 X-Mailer: StreamSend - 3326 X-Report-Abuse-At: abuse@streamsend.com X-Report-Abuse-Info: It is important to please include full email headers in the report X-Campaign-ID: 43 X-Streamsendid: 3326+5+1234845+43+me21507.mailengine1.com Date: Mon, 26 May 2008 23:28:49 -0700 From: "CISSE Online E-Conference" To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: First Call for Papers: The 4th CISSE International Conference Subject: First Call for Papers: The 4th CISSE International Conference X-Barracuda-Connect: me21507.mailengine1.com[66.59.24.112] X-Barracuda-Start-Time: 1211869740 Message-Id: <20080527062859.92199119BCE9@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.5461 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.45 X-Barracuda-Spam-Status: No, SCORE=1.45 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51543 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16128 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cisse@cisse2008online.org Precedence: bulk X-list: xfs This is a multi-part message in MIME format. --_----------=_1073964459106330 Content-Transfer-Encoding: 7bit Content-Type: text/plain Dear Colleagues, If you received this email in error, please forward it to the appropriate department at your institution. If you wish to unsubscribe please follow the unsubscribe link at bottom of the email. Please do not reply to this message. If you need to contact us please email us at info@cisse2008online.org ********************************************************************* * The Fourth International Joint Conferences on Computer, * * Information, and Systems Sciences, and Engineering (CISSE 2008) * * * * * * * * http://www.cisse2008online.org * * * * * * * ********************************************************************* December 5-13, 2008 Technically Co-Sponsored by: Institute of Electrical & Electronics Engineers (IEEE); University of Bridgeport --------------------------------------------------------------------- CONFERENCE OVERVIEW --------------------------------------------------------------------- CISSE 2008 provides a virtual forum for presentation and discussion of the state-of the-art research on computers, information and systems sciences and engineering. CISSE 2008 is the fourth conference of the CISSE series of e-conferences. CISSE is the World's first Engineering/Computing and Systems Research E-Conference. CISSE 2005 was the first high-caliber Research Conference in the world to be completely conducted online in real-time via the internet. CISSE 2005 was the first high-caliber Research Conference in the world to be completely conducted online in real-time via the internet. CISSE 2005 received 255 research paper submissions and the final program included 140 accepted papers, from more than 45 countries. CISSE 2006 received 691 research paper submissions and the final program included 390 accepted papers, from more than 70 countries. CISSE 2007 received 750 research paper submissions and the final program included 406 accepted papers, from more than 80 countries. The virtual conference will be conducted through the Internet using web-conferencing tools, made available by the conference. Authors will be presenting their PowerPoint, audio or video presentations using web-conferencing tools without the need for travel. Conference sessions will be broadcast to all the conference participants, where session participants can interact with the presenter during the presentation and (or) during the Q&A slot that follows the presentation. This international conference will be held entirely on-line. The accepted and presented papers will be made available and sent to the authors after the conference both on a DVD (including all papers, powerpoint presentations and audio presentations) and as a book publication. Springer, the official publisher for CISSE, published the 2005 proceedings in 2 books and the CISSE 2006 and CISSE 2007 proceedings in four books. Conference participants - authors, presenters and attendees - only need an internet connection and sound available on their computers in order to be able to contribute and participate in this international ground-breaking conference. The on-line structure of this high-quality event will allow academic professionals and industry participants to contribute their work and attend world-class technical presentations based on rigorously refereed submissions, live, without the need for investing significant travel funds or time out of the office. The concept and format of CISSE is ground-breaking. The PowerPoint presentations, final paper manuscripts and time schedule for live presentations over the web had been available for weeks prior to the start of the conference for all registrants, so that the participants can choose the presentations they want to attend and think about questions that they might want to ask. The live audio presentations were also recorded and are part of the permanent CISSE on-line archive - accessible to all registrants- which also includes all the papers, PowerPoint and audio presentations. Potential non-author conference attendees who cannot make the on-line conference dates are encouraged to register, as the entire joint conferences will be archived for future viewing. The CISSE conference audio room provides superb audio even over low speed internet connections, the ability to display PowerPoint presentations, and cross-platform compatibility (the conferencing software runs on Windows, Mac, and any other operating system that supports Java). In addition, the conferencing system allowed for an unlimited number of participants, which in turn granted us the opportunity to allow all CISSE participants to attend all presentations, as opposed to limiting the number of available seats for each session. Prospective authors are invited to submit full papers electronically in Microsoft Word format through the website of the conference at http://www.cisse2008online.org. Accepted papers must be presented in the virtual conference by one of the authors. To submit your paper,please visit http://www.cisse2008online.org CISSE 2008 is composed of the following four conferences: International Conference on Systems, Computing Sciences and Software Engineering (SCSS 08) Topics: Grid Computing, Internet-based Computing Models, Resource Discovery, Programming Models and tools, e-Science and Virtual Instrumentation, Biometric Authentication, Computers for People of Special Needs, Human Computer Interaction, Information and Knowledge Engineering, Algorithms, Parallel and Distributed processing, Modeling and Simulation, Services and Applications, Embedded Systems and Applications, Databases, Programming Languages, Signal Processing Theory and Methods, Signal Processing for Communication, Signal Processing Architectures and Implementation, Information Processing, Geographical Information Systems,Object Based Software Engineering, Parallel and Distributed Computing, Real Time Systems, Multiprocessing, File Systems and I/O, Kernel and OS Structures. International Conference on Telecommunications and Networking (TeNe 08) Topics: Optical Networks and Switching, Computer Networks, Network architectures and Equipment, Access Technologies, Telecommunication Technology, Coding and Modulation technique, Modeling and Simulation, Spread Spectrum and CDMA Systems, OFDM technology, Space-time Coding, Ultra Wideband Communications, Medium Access Control, Spread Spectrum, Wireless LAN: IEEE 802.11, HIPERLAN, Bluetooth, Cellular Wireless Networks, Cordless Systems and Wireless Local Loop, Mobile Network Layer, Mobile Transport Layer, Support for Mobility, Conventional Encryption and Message Confidentiality, Block Ciphers Design Principles, Block Ciphers Modes of Operation, Public-Key Cryptography and Message Authentication, Authentication Application, Stenography, Electronic Mail Security, Web Security, IP Security, Firewalls, Computer Forensics. International Conference on Engineering Education, Instructional Technology, Assessment, and E-learning (EIAE 08) Topics: Instructional Design, Accreditation, Curriculum Design, Educational Tools, 2-2-2 Platforms, Teaching Capstone Design, Teaching Design at the Lower Levels, Design and Development of e-Learning tools, Assessment Methods in Engineering, Development and Implementation of E-learning tools, Ethics in Education, Economical and Social Impacts of E-learning. International Conference on Industrial Electronics, Technology & Automation (IETA 08) Topics: Advanced and Distributed Control Systems, Intelligent Control Systems (NN, FL, GA, .etc), Expert Systems, Man Machine Interaction, Data Fusion, Factory Automation, Robotics, Motion Control, Machine Vision, MEMS Sensors and Actuators, Sensors Fusion, Power Electronics, High Frequency Converters, Motors and Drives, Power Converters, Power Devices and Components, Electric Vehicles and Intelligent Transportation, Process Automation, Factory Communication, Manufacturing Information System Advances in Manufacturing Systems, Industrial Applications of Multi Media, Intelligent Systems Instrumentation, Industrial Instrumentation, Modeling and Simulation, Signal Processing, Image and Data Processing, VR and Parallel systems.. Paper Submission ================= Prospective authors are invited to submit full papers electronically in Microsoft Word format through the website of the conference at http://www.cisse2008online.org. Accepted papers must be presented in the virtual conference by one of the authors. To submit your paper, visit http://www.cisse2008online.org Paper submission Deadline: October 15th, 2008 Notification of Acceptance: November 9th, 2008 Final Manuscript and Registration: November 26th, 2008 ------------------------------------------------------------------------ Khaled Elleithy, Ph.D. CISSE 2008 General Co-Chair Associate Dean, School of Engineering University of Bridgeport e-mail:info@cisse2008online.org Bridgeport, CT 06604, U.S.A. http://www.cisse2008online.org ------------------------------------------------------------------------ Click here on http://server1.streamsend.com/streamsend/unsubscribe.php?cd=3326&md=43&ud=e9b22c2cbd6ff0f41f7b76ea0134c9bb to update your profile or Unsubscribe --_----------=_1073964459106330-- From owner-xfs@oss.sgi.com Tue May 27 03:19:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 03:19:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE, STOX_REPLY_TYPE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RAJTdT026405 for ; Tue, 27 May 2008 03:19:30 -0700 X-ASG-Debug-ID: 1211883619-526a03d10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from tyo202.gate.nec.co.jp (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 90B10173426F for ; Tue, 27 May 2008 03:20:19 -0700 (PDT) Received: from tyo202.gate.nec.co.jp (TYO202.gate.nec.co.jp [202.32.8.206]) by cuda.sgi.com with ESMTP id nlcE4dJPOARhPYEC for ; Tue, 27 May 2008 03:20:19 -0700 (PDT) Received: from mailgate3.nec.co.jp (mailgate54.nec.co.jp [10.7.69.193]) by tyo202.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4RAKCZP013965; Tue, 27 May 2008 19:20:12 +0900 (JST) Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) id m4RAKCm17702; Tue, 27 May 2008 19:20:12 +0900 (JST) Received: from kaishu.jp.nec.com (kaishu.jp.nec.com [10.26.220.5]) by mailsv3.nec.co.jp (8.13.8/8.13.4) with ESMTP id m4RAKCLk021419; Tue, 27 May 2008 19:20:12 +0900 (JST) Received: from TNESB07336 ([10.64.168.65] [10.64.168.65]) by mail.jp.nec.com with ESMTP; Tue, 27 May 2008 19:20:11 +0900 Message-Id: <7654D29B4EC648FD8E32AB331941F941@nsl.ad.nec.co.jp> From: "Takashi Sato" To: "Christoph Hellwig" Cc: , , , , References: <20080522175020t-sato@mail.jp.nec.com> <20080525193211.GA24328@infradead.org> In-Reply-To: <20080525193211.GA24328@infradead.org> X-ASG-Orig-Subj: Re: [RFC PATCH 1/3] Implement generic freeze feature Subject: Re: [RFC PATCH 1/3] Implement generic freeze feature Date: Tue, 27 May 2008 19:20:11 +0900 MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Windows Mail 6.0.6000.16480 X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6000.16545 X-Barracuda-Connect: TYO202.gate.nec.co.jp[202.32.8.206] X-Barracuda-Start-Time: 1211883621 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51560 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16129 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: t-sato@yk.jp.nec.com Precedence: bulk X-list: xfs Hi, >> + if (test_and_set_bit(BD_FREEZE_OP, &bdev->bd_state)) >> + return ERR_PTR(-EBUSY); >> + >> + sb = get_super_without_lock(bdev); >> + >> + /* If super_block has been already frozen, return. */ >> + if (sb && sb->s_frozen != SB_UNFROZEN) { >> + put_super(sb); >> + clear_bit(BD_FREEZE_OP, &bdev->bd_state); >> + return sb; >> + } > > The BD_FREEZE_OP flag in the block_device already prevents multiple > freezes for a singe block device, so there is no need for this > additional check and the get_super_without_lock helper. I think the above check is needed because BD_FREEZE_OP is used to guarantee that the following two operations are done atomically. 1. Check if the filesystem has already been frozen. (sb->s_frozen != SB_UNFROZEN) 2. Do the filesystem specific freeze operation (write_super_lockfs) The freeze operation can be done again for the frozen filesystem unless the filesystem is checked. And if write_super_lockfs doesn't consider that the filesystem has already been frozen, a problem might occur. >> down(&bdev->bd_mount_sem); > > And with that flag bd_mount_sem is also obsolete for preventing the > multiple freeze operations. bd_mount_sem is needed because it is used to guarantee that the freeze operation never run while mounting (get_sb_bdev()). > We still need investigate what > synchronization we need vs unmount which also takes bd_mount_sem without > every having document what it exactly protects. And s_umount (semaphore) is acquired in get_user() (called by freeze_bdev()) to guarantee that unmount never run while the filesystem is frozen. Cheers, Takashi From owner-xfs@oss.sgi.com Tue May 27 03:50:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 03:50:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4RAo42K028280 for ; Tue, 27 May 2008 03:50:07 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id UAA29603; Tue, 27 May 2008 20:50:48 +1000 Message-ID: <483BE788.4050504@sgi.com> Date: Tue, 27 May 2008 20:50:48 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss Subject: Re: [PATCH] use generic_*xattr routines References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> <483A15CE.9060409@sgi.com> <20080526053759.GA17825@lst.de> In-Reply-To: <20080526053759.GA17825@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16130 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Mon, May 26, 2008 at 11:43:42AM +1000, Timothy Shimmin wrote: >> I guess this is done to some extent by the put_listent() callback. >> Though, the context structure is probably a bit overused in different >> ways. >> The callback was also used for searching (for parent-ptr code) as well >> as for list formatting. >> I presume we are preserving the valuelen list format to keep the API >> for xfs_attrlist_by_handle used by xfsdump and probably for dmf. > > Yes, the idea is to change the put_listen callback for work more like > filldir. Thas is: > > - the callback is supplied by the xfs_attr_list caller, not set based > on options Oh, okay. For example, instead of setting the flags to ATTR_KERNOVAL such as in xfs_vn_listxattr when size is 0, one could just set the callback to xfs_attr_kern_list_sizes and pass it in etc... > - there will be an opaque object supplied to xfs_attr_list that is to > be used by put_listent so that we don't have to pass down > implementation-specific arguments directly. > Ok. So instead of overloading fields in xfs_attr_list_context_t, you'll pass down a void* argument or some such for callback specific data. > I'd also like to move the attrlist_cursor_kern_t into this callback > opaque context because it doesn't make sense for the normal xattr API, > but I'll have to see if that's actually feasible. BTW, the cursor stuff is a bit flawed. Like the dir1 code (I believe), if from userspace you use the cursor and modifications happen to the EAs (add or removal) between calls, we can end up repeating elements in the list or miss some. We don't preserve the position and we can compact the data etc. --Tim xfs_attr_list( xfs_inode_t *dp, char *buffer, int bufsize, int flags, attrlist_cursor_kern_t *cursor) { xfs_attr_list_context_t context; ... if (flags & ATTR_KERNAMELS) { context.bufsize = bufsize; context.firstu = context.bufsize; if (flags & ATTR_KERNOVAL) context.put_listent = xfs_attr_kern_list_sizes; else context.put_listent = xfs_attr_kern_list; } else { context.bufsize = (bufsize & ~(sizeof(int)-1)); /* align */ context.firstu = context.bufsize; context.alist->al_count = 0; context.alist->al_more = 0; context.alist->al_offset[0] = context.bufsize; context.put_listent = xfs_attr_put_listent; } ssize_t xfs_vn_listxattr(struct dentry *dentry, char *data, size_t size) { struct inode *inode = dentry->d_inode; struct xfs_inode *ip = XFS_I(inode); attrlist_cursor_kern_t cursor = { 0 }; int error, xflags; ssize_t result; xflags = ATTR_KERNAMELS; if (!size) xflags |= ATTR_KERNOVAL; if (capable(CAP_SYS_ADMIN)) xflags |= ATTR_KERNFULLS; else xflags |= ATTR_KERNORMALS; /* * First read the regular on-disk attributes. */ result = -xfs_attr_list(ip, data, size, xflags, &cursor); From owner-xfs@oss.sgi.com Tue May 27 05:53:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 05:53:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.1 required=5.0 tests=BAYES_50,HTML_FONT_SIZE_HUGE, HTML_MESSAGE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RCrcLQ007332 for ; Tue, 27 May 2008 05:53:40 -0700 X-ASG-Debug-ID: 1211892864-1f49021f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp1.tedata.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A0EC81B8013 for ; Tue, 27 May 2008 05:54:24 -0700 (PDT) Received: from smtp1.tedata.net (smtp1.tedata.net [212.103.160.59]) by cuda.sgi.com with ESMTP id sDt5XMov7r6CW9d3 for ; Tue, 27 May 2008 05:54:24 -0700 (PDT) Received: (qmail 8002 invoked from network); 27 May 2008 12:54:23 -0000 Received: by simscan 1.4.0 ppid: 7713, pid: 7721, t: 16.0161s scanners: regex: 1.4.0 clamav: 0.93/m:46 spam: 3.2.3 Received: from host-41.234.197.41.tedata.net (HELO SHARB) ([41.234.197.41]) (envelope-sender ) by smtp.tedata.net.eg (qmail-ldap-1.03) with AES256-SHA encrypted SMTP for ; 27 May 2008 12:54:07 -0000 From: "Mobisharb Furnishing S.A.E" To: xfs@oss.sgi.com X-ASG-Orig-Subj: About Furnex 2008 in Egypt Subject: About Furnex 2008 in Egypt Date: Tue, 27 May 2008 15:54:06 +0300 MIME-Version: 1.0 Message-ID: <1211894306368722a09baf57a27b39c0ba1f12b194@dataxprs.com.eg> Content-Type: multipart/related; boundary="--=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0" X-Barracuda-Connect: smtp1.tedata.net[212.103.160.59] X-Barracuda-Start-Time: 1211892867 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5535 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.21 X-Barracuda-Spam-Status: No, SCORE=1.21 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA038b, HTML_FONT_BIG, HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51570 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message 0.26 HTML_FONT_BIG BODY: HTML tag for a big font size 0.20 BSF_SC0_SA038b RAW: Custom Rule SA038b X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16131 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sharb-support@dataxprs.com.eg Precedence: bulk X-list: xfs This is a multi-part message in MIME format. ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0 Content-Type: multipart/alternative; boundary="--=_NextPart_00DAB167_4D3615F6_01C9F258.D84EF1C0" ----=_NextPart_00DAB167_4D3615F6_01C9F258.D84EF1C0 Content-Type: text/plain; charset="windows-1256" Content-Transfer-Encoding: 7bit Hello We are not participants in furnex this year, please let us know if you want to come to Egypt and we'll send delegates to Cairo to take you to the factory and return you to your hotel on the same day . We in the city of Alexandria away from Cairo about two hours by car We wish you successful visit. Awaiting your reply * About models us Code : KM-20-NK39 Size : W (170) * D (50) * H (93) cm Category: NEW CLASSIC Status : Available *All our products Hand-made Natural wood If you want to receive more updating models & information, please do not rebly to this email. For order click here. For more modes like this one, please click here. Please do not hesitate to contact us for any further information you may require. if you do not want to receive any more news letters, send me a message from the same mail address we've used and write "thanks" in the Subject field. Give us 48 hours and Be sure that we will not send any more. Best Regards Mobisharb Furnishing SAE Marketing Team Sherif Hefny (Mr.) To contact the marketing team To contact the export manager ----=_NextPart_00DAB167_4D3615F6_01C9F258.D84EF1C0 Content-Type: text/html; charset="windows-1256" Content-Transfer-Encoding: 8bit
  
 
Hello
We are not participants in furnex this year, please let us know if you want to come to Egypt and we'll send delegates to Cairo to take you to the factory and return you to your hotel on the same day .
We in the city of Alexandria away from Cairo about two hours by car
We wish you successful visit.
Awaiting your reply
 
* About models us

    

 

                                          Code : KM-20-NK39 

                                              Size : W (170) * D (50) * H (93) cm

                                                Category: NEW CLASSIC

                                                      Status : Available

                                                       *All our products

                                                          Hand-made

                                                         Natural wood     

 

                          

 

If you want to receive more updating models & information, please do not rebly to this email.

For order click here.

For more modes like this one, please click here.

Please do not hesitate to contact us for any further   information you may require.
 
if you do not want to receive any more news letters, send me a message from the same mail address we've used and write "thanks" in the Subject field.
Give us 48 hours and Be sure that we will not send any more.
 
             Best Regards
   Mobisharb Furnishing SAE
         Marketing Team
       Sherif Hefny (Mr.)  

 

To contact the marketing team                                                                      To contact the export manager 

 Skype Me™!                                                                                         

 

----=_NextPart_00DAB167_4D3615F6_01C9F258.D84EF1C0-- ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0 Content-Type: image/jpeg; name="logo.jpg" Content-Transfer-Encoding: base64 Content-ID: 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 iOL/AL1sn64fV0c5uR/207k/9bWt0/Jxuo4zcrFyLXUuJbLoa4Fp2va9jmbmuauW6sQzGoGO xrDWOHO2MFIh9lOVvd+l/r1epdX6f9IVn6tUdYrxDll/6rU0tx8cw0FrTufYWNb+d7nezYo8 WbjBJgYiIvrI/wCKkxlEgGYlfQR4frfE2X9b6oywsOK9750xmbzcW/S3e6r6fpfpf5rZ/g/5 xW+vHLx+nZQ9ZxBrIa8aHlrXDT6PtKzmdbrtz/201rTinB2/ZzdSHb3NZZ6X89v9X1G/Z3fo 9n+FV/q7TV9WrKnsbWW1tDGNmA0Fu2A73N2s/e/tpuI3xA5DM8RkOnDD9GPp/eZcmlDhEfTr /e+r/9DrrM/rAz7/ALP0t7gHEe6+oS0aNL2+5rd35vvWXldUx/tmT9p6Iz7VuZ9rjKbO7Yz0 vW9P2/zPprxBJRYd5fP1/m/7y+V0P20+1P6njOqYKOjVVv8A8E92QH8OO/2bmO91m/8AP/nv +GQ2ZuQLJr6fQSWkkF4+iG/pwNuQ32P9+/1N/wClXjKSnHFRr3OvzcH/AHSz7H2ezOfve49N pFcxs9VszEPcH+pu+n7vZ7E9mZmDI3XYFTwH/pK2vYHkhz/X/SVW7v0l3r/mbGWLxdJL1f1/ /G1PtT+q9O32f5DZv2M9T0sobtu1vo/zPu3en/N/nrT6b1TN+zf5P6JFG7WMpn0ob9L1ffu2 7V4EkmZPl/ynT5/lSN+j9D/tTrn/AJSH/wBiqv7kOrqfVxZbs6KS8u/SfrVUg/cvnxJQ/al9 f61m4r/rFRZn9NyKupM9MMpbkEtdO30XVOZW5jWM/wAL9nf6P/cxavUepv8Atrft/RXfaPSb s3ZQ2+nuft2+30N+/wBTft/Tf6T/AAa8LSTZbHbf9LZENz/3L7RkdRxHVgO6O9rdw1ryh4/n bWO/R/6T+QtO7qWccjDL+jEODLPszRk17S0+j6nDdnt/Q7V4IkhC6Py/4H7V0vr/AIT7d1Xq eEc4DO6NjN6nvqMjKo+0yC30A/YPX938v/Af8GtHM6n1Ccf7V0UA7z6E5VX0tjt+3T/Q79/8 heAJJ5/gju++ZPU8nZeL+i1Aei71z9qpn0YPqbtP5vYrNHVOs+mz0eiEs/MjKqj8i+ekkuvV T7NVZ+uObVjs+2zG4XdPnfP0m/q3pepuV/rOZ1ezEvZmdOdS1zINnrVuDRubLtjPpe5eFJKC G0vk+b/J/wDd/wBdfK7/AEtv093/2f/bAEMAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggM CgwMCwoLCw0OEhANDhEOCwsQFhARExQVFRUMDxcYFhQYEhQVFP/bAEMBAwQEBQQFCQUFCRQN Cw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/C ABEIAG0DHAMBIgACEQEDEQH/xAAcAAACAgMBAQAAAAAAAAAAAAAABgUHAQMEAgj/xAAaAQAD AQEBAQAAAAAAAAAAAAAAAQIDBAUG/9oADAMBAAIQAxAAAAH6T09aT5/S1iqY6tQqexNAuDTG LgDELuWMHpcr7abkPmvq9HL6KPnfwj6LKA9Q78zTPjN3Rmg9ei+gCi+APoMpXGbus+d7Thuo vHFowi8Awi8Awi8Awi9gGIXgGEXcgwi9qBmFnYDELuQYReAYRW9oZhewxiF7AMQvAMIvAMIv YBiF4BhF4BhF3A2MTu4GMXgGEXciYRcyNiFwExi6AxC6AxC4AxC9hjEL2AYxcAYhd8oZRVFT UKoEnSLMlPl+nkp1Sjozsyw5aVpP8h7vFOxnJoaYOtdmM2uz63JbLQzqHTKktfTGpyZFeAZ+ TghpGXRo6h46YrxS2zIvycsrzbbUltWZGH6615io0dS71hKcZCMYeqE2SMMsoN/NoAZAHOHR Xz7DohXeK6B9hr2NaKA+hvMT87ZZLT8uYhqMetoAOsgIAAAAAHIAHPSjB1a8qO2MkvrjLbEh 05PR9gNAhwL5baKpwRa5VusLWKpwFrlSzZT+AusjZKAwuqM6Jv4H6Tm2CZsvoPUvPn3Pz6oS 0Tx6pKW6JevF9PpLspbbzPUGsAFSCZK6zPFdy1jcKfuBpp2yo3dU6+WSp9MV322PF2LXNZar BA+2/qRX0u27Jdad1ixNJF02NsoRHPo1YU0CIyc1S4qcTHgReZlhim2ZUAQAAEXJqIm+Dm6h i7M6k/DTh0ozTUSIBXzLflfsnFg3eFCa6tUmP5j5709+nTvzvXt8bxecboypm7hqK0fb4+w5 vHVnVTmiWv1+d4mfXfrpX+iuY7z9ryhlazGfJWbKh/KlJ22JF47LHi0Zi4pbksGRV13sYu3T O65dL7fVpph+7qWsbU91VP8AN+hAXHVV09JCTlZt/s+dOrrDxRrVaW7JOOH0+tsi50bTIGmY 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 ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0 Content-Type: image/gif; name="image004.gif" Content-Transfer-Encoding: base64 Content-ID: <97de7667dfe6bc22> R0lGODlhoQEtAHcAMSH+GlNvZnR3YXJlOiBNaWNyb3NvZnQgT2ZmaWNlACH5BAEAAAAALAIA AgCeASoAhwAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBm ZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/MwD/ ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2Zm ZmZmmWZmzGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/ Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lm ZplmmZlmzJlm/5mZAJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/ Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xm ZsxmmcxmzMxm/8yZAMyZM8yZZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/ Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9m Zv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M/// Zv//mf//zP///wECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwEC AwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwECAwEC AwECAwECAwECAwECAwECAwECAwj/AAEIHEiwoMGDCBMqXMiwoUOGgfZYCfCwosWLGDM2LBWo lClWHzUCKCFS5IoVJReefJIyY4mVLzt2DJkQWimb0D52tCIxUIAVP4OiTKiHY6k9pXha0WPl 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 CuEfnz3uCeFjfYzu7N7u7n6l604QAQEAOw== ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0 Content-Type: image/jpeg; name="km-20-nk39.jpg" Content-Transfer-Encoding: base64 Content-ID: /9j/4AAQSkZJRgABAQEAtAC0AAD/4Rn/RXhpZgAATU0AKgAAAAgACwEPAAIAAAAJAAAAkgEQ AAIAAAANAAAAmwESAAMAAAABAAEAAAEaAAUAAAABAAAAqAEbAAUAAAABAAAAsAEoAAMAAAAB AAIAAAExAAIAAAAbAAAAuAEyAAIAAAAUAAAA0wITAAMAAAABAAIAAIKYAAIAAAALAAAA54dp AAQAAAABAAAA9AAAAsRGVUpJRklMTQBGaW5lUGl4UzFQcm8AAAAASAAAAAEAAABIAAAAAUFk b2JlIFBob3Rvc2hvcCBDUyBXaW5kb3dzADIwMDc6MTE6MjcgMTU6NDA6MDMAICAgICAgICAg IAAAAAAagp0ABQAAAAEAAAIyiCIAAwAAAAEAAQAAiCcAAwAAAAEBkAAAkAAABwAAAAQwMjEw kAMAAgAAABQAAAI6kAQAAgAAABQAAAJOkQEABwAAAAQBAgMAkQIABQAAAAEAAAJikgEACgAA AAEAAAJqkgIABQAAAAEAAAJykgMACgAAAAEAAAJ6kgQACgAAAAEAAAKCkgcAAwAAAAEAAgAA kgkAAwAAAAEAAQAAkgoABQAAAAEAAAKKoAAABwAAAAQwMTAwoAEAAwAAAAEAAQAAoAIABAAA AAEAAAfgoAMABAAAAAEAAAvgoAUABAAAAAEAAAKkog4ABQAAAAEAAAKSog8ABQAAAAEAAAKa ohAAAwAAAAEAAgAAohcAAwAAAAEAAgAAowAABwAAAAEDAAAAowEABwAAAAEBAAAAAAAAAAAA AqAAAABkMjAwNzowNzowMiAyMzoyMToxMwAyMDA3OjA3OjAyIDIzOjIxOjEzAAAAACAAAAAK AAAANAAAAAgAAABCAAAADAAAAfQAAABkAAAAhQAAAGQAAAAtAAAAAQAADQwAAAABAAANDAAA AAEAAAACAAEAAgAAAARSOTgAAAIABwAAAAQwMTAwAAAAAAAAAAYBAwADAAAAAQAGAAABGgAF AAAAAQAAAxIBGwAFAAAAAQAAAxoBKAADAAAAAQACAAACAQAEAAAAAQAAAyICAgAEAAAAAQAA FtUAAAAAAAAASAAAAAEAAABIAAAAAf/Y/+AAEEpGSUYAAQIBAEgASAAA/+0ADEFkb2JlX0NN AAH/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwM DAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4O FBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCACgAGoD ASIAAhEBAxEB/90ABAAH/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEB AQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWET InGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOE w9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQE AwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYW orKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm 9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwD0JJJJVWypJJJJSkkkklKSSSSUpJJJJSkkkklK SSSSU//Q9CSSSVVsqSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklP/0e/vvx8ap1+TbXRSz6dt r21sE/vWWFrFwf1k/wAamLjPdidAY3JuaXB+ZcD6Og9v2Wtrmvv9/wDhrdlX/B3MXS/Wvp2Z ndOrdg1i7IxrRZ6JZVaX1kRY2mnNa/H+0NeKrKn+y32WelZ+k9OzzOlmFk9PznZNVH22l7yb Ld4tLG+m3aytu2pvpOdkfQo/891qsCBqQ2eEy2KOj6/fXGuxz29Uc8udJZdXW9pB1+i6rbU3 +TWtrE/xsdaqj7dh4mU0DX0jZS/Tkl030/8AgS5T9kZV4dZg0221AkPNTXOaw6Oh9rA6pj9v +D9T1f8ASVqJwOpNBZbiWgPe17v0TuWT7fZH6H3fzW5O44HqPLqjgPY/R9Hw/wDGx0W0NGZg 5eK95DRs2Xtk8D6WPb/4EtvF+u/1TynbGdTqpf3Zkh+OQfCchjK//BF4899tVx9Vpxsmy77V UHtcIsl36LbDX/Zsj8yytv8AOfob/wDTKHrUt3tYzguLAQAGsdLm/wAlv2fIe9jH/wCFqfb/ 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 yOd3pI6ta+vdU7xQvIvRouAdOYAAAAGTxm988dNOhY2saVzc8raj7uc9q+b9u5R13PyxXe7r kny1zja2PuPpjQR1FfPUTCh99HDbZ3T4a50t7JafzdYeNCm1O5M99qNlX5N7N50464uY9wn5 9GdZbPL6XlcS678WfoC1njQBcgAAAAZ3z7W5d1dJmkfLoqbq+95+3vk3LU6ipqbmKaD5jRFf UXN7mx1nSSJ8i65so3Syr1+qml9Bz2erdeTyCLVefqjfR57K+ibV+2evk9Qj0Ma/NodytdKq O+01mt6XRb75AEAAAAAFexiKpJWC/PW06V8ZvcVOzpyzo2ePRoillmati9ONsxxD056VN8Mb o/eLNsX2FmV1M3zUqr9LB15UtjUaeT0V8vOdOVK91BrV2hdVSabK6rOF2WbjPSlGp33p82zA zAAAAAAEtWcVfTza9wn1Gdoy0uJYYpKnv1LfHrRnZ12eIp19lmSOslu8hd52v+n0qt1tyxC0 z+v3nMa7PN2aK19expKzXqrL9BzTtLK7RRSrr3B1x39xtL6N596N6vM0AkAAAAIhRSVOdPuK 0iHOi5rqpmFLhfN1bMI1I3rS8dWoyvFxd1Pc1fr6n15VJr1Dj3dZTRZLpi7Xm+NRTTqUp66C K50OUqaLnrKa7Ntt4T6ZM1zvL7bFbFMq4gjphzxBjc28879C9HBgAyAAAGb0mFaU2VtnO4tB nNHDbM2lOskTZPUN+Jjz6d0tEyZzdepdxqsWrB1QieImu1Y14VaVJdcWasmsNabXNY1FoMi2 78HuY1qnnt3lHcWdEE1RaWuzm2uc1RfqLbH2ely6Z70zCNvZ5fQwMAAAAw+4Vr53J1Fjt8eJ 7kVoOZNKcscusT2qu0wpc2MzY8VQR40xtJ3FlpJYuLwiNBLEueLKTSMqkS0utFWE9IxHpfo8 yb7218vpyv3S0/Rwy0f2Xzeit6Bk996OOdQeg4vNrL7cHDs4UNVPo4eiyZTV2AEAAAGRxfsS 63yl3Qjmu4/lZWkRDK80eY0ec1OjMliImlnvcWLMy95p51YksqumLFB0szuzey+r56R7BVL6 OKHYi1mrpMFrK00cke8+PO1Wo8npUeg+cb7vxbY/RpbM5eXReX02W2Tb+nhQ9O8a3GpsQMAA AAAKflnr/mTVFbZ50s3KzXluox7nxKStr3ZZrxUbInnyofIurs1RexRdM2KlfuWBRpk3PbOr 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 Dc2tI7doQrF6N/uBhq42tj8QN31rnfniUmUTNzrUblDgu7zbvUbWI1JeX/KrKjfjwpDwxOAX eKduP/ln/9oADAMBAAIAAwAAABD7774Db777777777777777777776T/AHlAD4+1++++++++ ++++++/292Ha4skHvYsZD9++++++++++IXlv4KyNrFlgQNscYT92+++++vyY+bzOy2jmkOsZ hTI/IaFc+++ODGOYzjb9Uq2Rn+3LqUEqm++++BB50F6N6K0h0z6FXcK7iM++++13dets7btK 6guTCtg7Na++++0rM8PH9KrNYfpxuYO5ep++++gED9TG1WnAHip//SvAHCw+++/oxDUwLmLz 0BwawJYVRSjG+++otKxlULG5P58p/n1UWPUyg+++TyTUxm3FY89oGcqdnsw3upY+++o55gak a4LaJi59lx60bHVs++++ccS9hZf+SN5AShZdmTb/ALNfvvp3iiNAkqqW5XcA/wCS4bJTWw/6 536y5ZUvRXm814sxke+jqRr777774ooCjL1KwY7qoUD7rZ4lX77775B7/MLl4S+KqrqcdSqy d377777777763VqF4ppzYuDDP7777777777777P8hwKwgDD56b777777777777776r177777 46Df7776B0+1gRdX77NX7777775h/wC+++u9Nvdu/H++K8++++++++++++++++++++++++++ +++++++++//EACgRAQACAgIBAwQCAwEAAAAAAAEAESExQVFhIHGBEJGhsTBAwdHxUP/aAAgB AwEBPxD0X/YEogRTqFDMT+nTiIeZ4fQq6mVvUFpSlvGhTmXtOf8AEEYBqVKf5AUVmYFjSAYY qWMwsMS/g8SgRdnE1L2S83piisIckUHzHG/tKvESpXX8NCiyiXFRjbKGVgxYwspiko1+IE0u ZgWYv7sX1cVY/Uxsc9f5lRQ3uHs+4FQNkFaMMqw7l3FRI1FrGYo36BpsiV1qYqu4LYPlg4X7 RAUXLGktfuIqBqotimIiQNRq6WATEq98PEddTFOrlVlcdTv3jIWO48XmXaNTePp1BuDNW4xz EFxuULuM09kA+36iYrpgWeJYy6Y2QgYuGJVq5wcDXUXHxLlfLKO2iImmoaoKD0gofMdj3fxG FrKr8E7eOZ4fvEG/vAmsEJ8IHD1HoNQLK3NGUz4kqwOzliz8sdq/dlLq0EovHq4ioBdDO/tA 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 EoHWgB/9FX/7v//Z ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0 Content-Type: image/gif; name="image011.gif" Content-Transfer-Encoding: base64 Content-ID: <0d3259631443ac4d> R0lGODlhfAA0AHcAMSH/C01TT0ZGSUNFOS4wDwAAAANzQklUCAgI2+FP4AAh/wtNU09GRklD RTkuMBgAAAAMbXNPUE1TT0ZGSUNFOS4w+Kzxr5QAIf8LTVNPRkZJQ0U5LjAVAAAACXBIWXMA AArwAAAK8AFCrDSYACH+FkNyZWF0aW9uIFRpbWU6IDgvMTgvMDUAIf4mU29mdHdhcmU6IE1h Y3JvbWVkaWEgRmlyZXdvcmtzIE1YIDIwMDQALAAAAAB8ADQAhwBmANjY2ACt5ACLt7TOtVqc Wj7A6CF6ISi35UKmxvH7/m/W9xN6Q4q5ioDD2B+TuA+68BF9WN30+xFxEVGWUabW5jS34zB+ MGbD3wCj13SndR6r0SG+71TG6szMzNjv9527npPF1CnB8QJoChGLggav5QhvIgCZzFez0JLU 6bDk9UqKS+Di48TYxVTM8j2LPvf39ymv1zu95Sl7Kn2xfdDS0yKhye/v8Bl0GQKn3Qa27juF PK/IsBGBawaInxi874a/0Q6SvAtsDCG992aZZn7L47HZ5rnNu6bT4RB0MfD28Dix1YHW8QC0 7dXm1Q+z5yi+7o6sowyEjsro8gCRvym11iCu20LK9ZDM3xCo2jHF9DfC7maZZiOdvhSh0BmO is3hzZTf9yuAKyFzIf///wpsFe/3+nquegin2szf5SOIbqXJpTqJO7/S2HzD2ZK2kyinyQCW xdzq3MLl7yi76d3d3YHY9JHR5RZ2Kmm500e22OXv5dzv9S+y14W1hYDG3Rl1Ixix4w+47gmc zguy56Xd7y/D8mOiYxCbvpPb8jGDMQKy6XOrcwis4AWk10GoyrLe7DKs06DS4Syew0PI8cvv +xCFYxFxFh+13A9uD9Pg1BBzQp3EnQaOsiaPfo67jgiUtSCWvLXTtRip2AaLrmuta2q/2xZ5 RymmzoLb90uTS+bm5iSs10nM9iF7KQKr4Cew3TG97xaUvYvI2wWVw8Xcxd7v3iGexfj8/d30 /JbO313R9Riu3+76/ke63zC13haUj+fw8hmaw7Pj8haCbUGz1EnI8LLc6g2ATZLY7ynD9DnH 9UKNQjWHNghrCCKkzX/H3e/v95O+k63Ordbv/2ymbCez4QiTv6fLp4/H2dPZ24DP6ESuzwWO uo/b9FzN8QhrIRZ3MCC25jGmzBFzJQ2ayhi467zMvhSs3Wu+2C675qDBoRiJgRGVwg+Gj87m 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 ----=_NextPart_00DAB165_4D228BCF_01C9F258.D84EF1C0-- From owner-xfs@oss.sgi.com Tue May 27 09:12:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 09:12:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RGCnkd021668 for ; Tue, 27 May 2008 09:12:50 -0700 X-ASG-Debug-ID: 1211904820-5a76012c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail07do.versatel.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 66B98119C341 for ; Tue, 27 May 2008 09:13:40 -0700 (PDT) Received: from mail07do.versatel.de (mail07do.versatel.de [89.245.129.27]) by cuda.sgi.com with ESMTP id HIi4BeuDWt23wnFa for ; Tue, 27 May 2008 09:13:40 -0700 (PDT) Received: (qmail 16295 invoked from network); 27 May 2008 16:13:39 -0000 Received: from webmail02.versatel-nord.de ([62.214.102.232]) (envelope-sender ) by mail07do.versatel.de (qmail-ldap-1.03) with SMTP for ; 27 May 2008 16:13:38 -0000 Received: from i59f4eed7.versanet.de (i59f4eed7.versanet.de [89.244.238.215]) by webmail.versatel.de (Horde MIME library) with HTTP; Tue, 27 May 2008 18:13:36 +0200 Message-ID: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> Date: Tue, 27 May 2008 18:13:36 +0200 From: Andre Nitschke To: xfs@oss.sgi.com X-ASG-Orig-Subj: Question for XFS (mounting and clean bit) Subject: Question for XFS (mounting and clean bit) MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 7bit User-Agent: Internet Messaging Program (IMP) H3 (4.0.3) X-Barracuda-Connect: mail07do.versatel.de[89.245.129.27] X-Barracuda-Start-Time: 1211904821 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0019 1.0000 -2.0088 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.51583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16132 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: andre.nitschke@versanet.de Precedence: bulk X-list: xfs Hello, i am a Linux User from Germany and chanched to xfs. I use Debian 4 and the installer creates lilo. Because of a wrong configuration i destroyed the lilo.conf and rebootet with a systemrescuecd. from here i mount the xfs partition and try to run lilo, but it fails. then i had a realy bad idea. i unmount the xfs partition and then mount it as root, but there exit a root file system. i type mount /dev/sda2 / no error appears. i could not access the partiton from the hdd, only see the tmpfs from the live-boot cd. hm i type mount and the mount command says: tmpfs on / as tmpfs (rw) ....(some entrys...) /dev/sda2 on / as xfs (rw) ok, both devices were mountet as / but i could only access the tmpfs system from the live cd. i try to reboot. the system sends the term and kill signal, then hang up. nothing happesn. i press reset. then linux startet normal and says ... XFS mounting filesystem sda2 Ending clean XFS mount for filesystem: sda2 so i think nothing should happens to the xfs. but i cant stop thinking, go to my testpc with linux and xfs and create the same situtation. everytime ... clean xfs. when i start writing data and then press reset comes this message: SGI XFS Quota Management subsystem XFS mounting filesystem hda2 Starting XFS recovery on filesystem: hda2 (logdev: internal) Ending XFS recovery on filesystem: hda2 (logdev: internal) i have two questions. first, is the xfs on my working-machine damaged by my bad idea mounting two devices as root and secound, is the clean bit removed when mounting a xfs or when i first write data on it? thanks andre From owner-xfs@oss.sgi.com Tue May 27 09:25:23 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 09:25:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RGPNrh022861 for ; Tue, 27 May 2008 09:25:23 -0700 X-ASG-Debug-ID: 1211905573-651d01250000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4B53CBEEB06 for ; Tue, 27 May 2008 09:26:14 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id RGPTyeWrf8i3ilUA for ; Tue, 27 May 2008 09:26:14 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4RGQ6Oc030432 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Tue, 27 May 2008 18:26:06 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4RGQ5jv030430 for xfs@oss.sgi.com; Tue, 27 May 2008 18:26:05 +0200 Date: Tue, 27 May 2008 18:26:05 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_check Subject: xfs_check Message-ID: <20080527162605.GA30344@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211905575 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.1, rules version 3.1.51583 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16133 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs In the past we had quite a few cases where we told people to run xfs_repair -n instead of xfs_check. I think that makes a lot of sense because xfs_repair -n generally gives output at least as useful as xfs_check if not more so and also is a lot faster. Is there any reason why we shouldn't simply kill xfs_check and replaced it with a wrapper around xfs_repair? From owner-xfs@oss.sgi.com Tue May 27 09:47:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 09:47:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RGlcbd024030 for ; Tue, 27 May 2008 09:47:38 -0700 X-ASG-Debug-ID: 1211906909-5a7803070000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C9917BEED9B for ; Tue, 27 May 2008 09:48:29 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id ztWTxCPsCnOn7Ouq for ; Tue, 27 May 2008 09:48:29 -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 sandeen.net (Postfix) with ESMTP id C55E498FE1E; Tue, 27 May 2008 11:48:28 -0500 (CDT) Message-ID: <483C3B5C.3040407@sandeen.net> Date: Tue, 27 May 2008 11:48:28 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check Subject: Re: xfs_check References: <20080527162605.GA30344@lst.de> In-Reply-To: <20080527162605.GA30344@lst.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: 1211906909 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.1, rules version 3.1.51585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16134 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Christoph Hellwig wrote: > In the past we had quite a few cases where we told people to run > xfs_repair -n instead of xfs_check. I think that makes a lot of sense > because xfs_repair -n generally gives output at least as useful as > xfs_check if not more so and also is a lot faster. Is there any reason > why we shouldn't simply kill xfs_check and replaced it with a wrapper > around xfs_repair? > > xfs_check checks... $SOMETHING that xfs_repair still does not, I think? But, if you can't run it on any fs of reasonable size due to memory piggishness, then... *shrug* -Eric From owner-xfs@oss.sgi.com Tue May 27 09:50:08 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 09:50:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RGo5fB024438 for ; Tue, 27 May 2008 09:50:08 -0700 X-ASG-Debug-ID: 1211907056-124500710000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from QMTA02.westchester.pa.mail.comcast.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4B927BEEDDB for ; Tue, 27 May 2008 09:50:56 -0700 (PDT) Received: from QMTA02.westchester.pa.mail.comcast.net (qmta02.westchester.pa.mail.comcast.net [76.96.62.24]) by cuda.sgi.com with ESMTP id UogrSkDi82zHJWtM for ; Tue, 27 May 2008 09:50:56 -0700 (PDT) Received: from OMTA12.westchester.pa.mail.comcast.net ([76.96.62.44]) by QMTA02.westchester.pa.mail.comcast.net with comcast id WfSb1Z03l0xGWP85203300; Tue, 27 May 2008 16:50:56 +0000 Received: from stupidest.org ([67.169.95.103]) by OMTA12.westchester.pa.mail.comcast.net with comcast id Wgqp1Z00L2DpGEz3Y00000; Tue, 27 May 2008 16:50:51 +0000 X-Authority-Analysis: v=1.0 c=1 a=BL1o_U30u378w9PYGkoA:9 a=R3EtA42WF2gA4PsyPmHvY_PknjgA:4 a=LY0hPdMaydYA:10 Received: by tuatara.stupidest.org (Postfix, from userid 10000) id 641F9284589D; Tue, 27 May 2008 09:50:49 -0700 (PDT) Date: Tue, 27 May 2008 09:50:49 -0700 From: Chris Wedgwood To: Eric Sandeen Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check Subject: Re: xfs_check Message-ID: <20080527165049.GA20666@puku.stupidest.org> References: <20080527162605.GA30344@lst.de> <483C3B5C.3040407@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <483C3B5C.3040407@sandeen.net> X-Barracuda-Connect: qmta02.westchester.pa.mail.comcast.net[76.96.62.24] X-Barracuda-Start-Time: 1211907057 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.1, rules version 3.1.51585 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16135 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: cw@f00f.org Precedence: bulk X-list: xfs On Tue, May 27, 2008 at 11:48:28AM -0500, Eric Sandeen wrote: > xfs_check checks... $SOMETHING that xfs_repair still does not, I > think? does that imply that that if $SOMETHING is bad it won't be seen then repaired then? From owner-xfs@oss.sgi.com Tue May 27 09:54:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 09:54:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RGsamo024897 for ; Tue, 27 May 2008 09:54:36 -0700 X-ASG-Debug-ID: 1211907326-0c0500c70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 199D0169F602 for ; Tue, 27 May 2008 09:55:26 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id DYQhvueYf6hhHF7Q for ; Tue, 27 May 2008 09:55: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 sandeen.net (Postfix) with ESMTP id 8F4E41699A7E; Tue, 27 May 2008 11:55:24 -0500 (CDT) Message-ID: <483C3CFC.8040201@sandeen.net> Date: Tue, 27 May 2008 11:55:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Chris Wedgwood CC: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check Subject: Re: xfs_check References: <20080527162605.GA30344@lst.de> <483C3B5C.3040407@sandeen.net> <20080527165049.GA20666@puku.stupidest.org> In-Reply-To: <20080527165049.GA20666@puku.stupidest.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: 1211907328 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.1, rules version 3.1.51586 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16136 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Chris Wedgwood wrote: > On Tue, May 27, 2008 at 11:48:28AM -0500, Eric Sandeen wrote: > >> xfs_check checks... $SOMETHING that xfs_repair still does not, I >> think? > > does that imply that that if $SOMETHING is bad it won't be seen then > repaired then? I can't remember what $SOMETHING is but I bet Barry knows :) -Eric From owner-xfs@oss.sgi.com Tue May 27 13:35:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 13:35:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RKZ2NN009971 for ; Tue, 27 May 2008 13:35:03 -0700 X-ASG-Debug-ID: 1211920553-630b01340000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wa-out-1112.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4150A173A0FE for ; Tue, 27 May 2008 13:35:53 -0700 (PDT) Received: from wa-out-1112.google.com (wa-out-1112.google.com [209.85.146.179]) by cuda.sgi.com with ESMTP id rJh3zAkpppXlYehV for ; Tue, 27 May 2008 13:35:53 -0700 (PDT) Received: by wa-out-1112.google.com with SMTP id j5so3219371wah.18 for ; Tue, 27 May 2008 13:35:53 -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:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=97+OL2u0uKXJ7Nii6HvgZe9Z2XnSH1iDD3M4fytzh9c=; b=x/hXdHtIPXUPskhsSoe/zz9EsUV03uHN3gjiwVRsEGQyLhdCpzzC6zBMwLMvNr6gZR3UEfkQ37aE/OUEvL7l8CR3PJcgjXahoGsf4FtWUoZRSo8h+cfHY/vTiUc+Pj8uDVGE4aq2p2knogiOp+EE5akkCVZYGyx6H4K2iB2etKg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=MPaRhZR5++snQSDS5vYHrUlVj+q3n36QDLNOwjpt+t+d6odQYu29PtGAqIqmEhfBmXCUav32jp1h9tosK4zf9X7VOv3F4GzYXgxgCdGmjCuMpLPi8qeSbT7GdsFfdlV8yFQkr7UNz+j/tk7Fampu1f1P34iRhDbQ6Ef7ml7WeIY= Received: by 10.114.197.1 with SMTP id u1mr786811waf.75.1211920553318; Tue, 27 May 2008 13:35:53 -0700 (PDT) Received: by 10.114.111.17 with HTTP; Tue, 27 May 2008 13:35:53 -0700 (PDT) Message-ID: Date: Tue, 27 May 2008 22:35:53 +0200 From: "Sebastian M" To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_repair getting stuck Subject: xfs_repair getting stuck MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Barracuda-Connect: wa-out-1112.google.com[209.85.146.179] X-Barracuda-Start-Time: 1211920554 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.1, rules version 3.1.51600 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16137 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sebcio@gmail.com Precedence: bulk X-list: xfs Hello I was a happy user of the XFS untill yesterday. I had to move data off the XFS partition to other storage. I exported it via NFS. After half a day of moving files a kernel panic appeared on nfs server. (sorry, but currently I don't have any logs). After reboot I wasn't able to mount XFS partition anymore (got random kernel panics). I've tried to xfs_repair, however it didn't work out. I had to use -L option. As for now I can mount the partition, but most of my folders are not accessible: ls -la / drwxrwxrwx 221 99 98 4096 V 23 14:37 . drwxrwxrwx 3 99 root 21 II 5 01:11 .. ?????????? ? ? ? ? ? 05 ?????????? ? ? ? ? ? 26 ?????????? ? ? ? ? ? 29 ?????????? ? ? ? ? ? 2A ?????????? ? ? ? ? ? 2B ?????????? ? ? ? ? ? 2C and so on. (few files went to the lost+found) When I try to run xfs_repair now it gets stuck every time on the same moment: kaszanka:~ # xfs_repair -P /dev/md0 Phase 1 - find and verify superblock... Phase 2 - using internal log - zero log... - scan filesystem freespace and inode maps... block (3,1055347) already used, state 2 block (3,1055348) already used, state 2 bad on-disk superblock 4 - bad magic number primary/secondary superblock 4 conflict - AG superblock geometry info conflicts with filesystem geometry bad magic # 0x8cb4f for agi 4 bad sequence # 576384 for agi 4 bad length # 66 for agi 4, should be 4883888 reset bad sb for ag 4 reset bad agi for ag 4 bad magic # 0x58443242 in inobt block 4/3 expected level 576591 got 2568 in inobt block 4/3 bad magic # 0x9c1ac711 in inobt block 4/2112 bad magic # 0x9cd4974b in inobt block 4/329816 bad magic # 0x8f1662e7 in inobt block 4/2160 bad magic # 0x75edc52e in inobt block 4/2184 bad magic # 0x58443242 in inobt block 4/2208 bad magic # 0x8632ebfd in inobt block 4/2232 expected level 576590 got 1 in inobt block 4/98 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x553c5125 in inobt block 4/58339 bad magic # 0x77db49b2 in inobt block 4/15 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x58443242 in inobt block 4/2 bad magic # 0xc9c0c923 in inobt block 4/344821 bad magic # 0x58443242 in inobt block 4/99 expected level 576590 got 1 in inobt block 4/98 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x85a7f11f in inobt block 4/51210 bad magic # 0x28d25805 in inobt block 4/13 bad magic # 0x58443242 in inobt block 4/1 bad magic # 0x58443242 in inobt block 4/2 bad magic # 0xb69f6a9c in inobt block 4/447057 bad magic # 0x58443242 in inobt block 4/99 expected level 576590 got 1 in inobt block 4/98 bad magic # 0x58443242 in inobt block 4/1 Strace shows following: strace -p write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 pread(4, "\205\247\361\37\306\235:\307U\327\265\0\3260\304\253ej\220\2050\216\2401\37|\373\221]p|\310"..., 4096, 80227377152) = 4096 write(2, "bad magic # 0x85a7f11f in inobt "..., 46) = 46 pread(4, "(\322X\5\265\301 s\33\\^\370\351\226}n+\375$8k\200\263f\256n*\254\246\313\375\2"..., 4096, 80017674240) = 4096 write(2, "bad magic # 0x28d25805 in inobt "..., 43) = 43 write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 pread(4, "\266\237j\234\2\222d\214\364\3540\5\0008\\\310\2272\177\246!F`\311o*\26\362\370\302\214\237"..., 4096, 81848766464) = 4096 write(2, "bad magic # 0xb69f6a9c in inobt "..., 47) = 47 write(2, "bad magic # 0x58443242 in inobt "..., 43) = 43 write(2, "expected level 576590 got 1 in i"..., 48) = 48 write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 futex(0xb80c88, FUTEX_WAIT, 2, NULL I've tried xfs_repair -P but the problem remains - it stuck on the same moment. My xfs partition (2.6TB) is created on the top of software raid 5 (10x 320gb) Right now Im using OpenSuse with 2.6.22.17-0.1-default x86_64 kernel. My box got 2 Gigs of ram. SATA disks are connected with SIL 3114 raid controllers. Im using XFSProgs version 2.9.7 Xfs_info: kaszanka:~ # xfs_info /dev/md0 meta-data=/dev/md0 isize=256 agcount=144, agsize=4883888 blks = sectsz=512 attr=0 data = bsize=4096 blocks=703279296, imaxpct=25 = sunit=16 swidth=48 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=196608 blocks=0, rtextents=0 Mounting and unmounting looks normal: May 27 17:25:23 kaszanka kernel: SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled May 27 17:25:23 kaszanka kernel: SGI XFS Quota Management subsystem May 27 17:25:23 kaszanka kernel: Filesystem "md0": Disabling barriers, not supported by the underlying device May 27 17:25:23 kaszanka kernel: XFS mounting filesystem md0 May 27 17:25:25 kaszanka kernel: Ending clean XFS mount for filesystem: md0 Is there any chance of repearing that partition ? I've made metadump of that partition - its quite big - more than 3GB. I can put it somewhere if any of developers is interested. Thanks, Sebastian From owner-xfs@oss.sgi.com Tue May 27 14:06:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 14:06:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00, RCVD_IN_SORBS_WEB autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RL6gLX012857 for ; Tue, 27 May 2008 14:06:42 -0700 X-ASG-Debug-ID: 1211922452-1fee00cd0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from a.mail.sonic.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 54E101BE8D7 for ; Tue, 27 May 2008 14:07:32 -0700 (PDT) Received: from a.mail.sonic.net (a.mail.sonic.net [64.142.16.245]) by cuda.sgi.com with ESMTP id ZH8125pL8JFhDIQZ for ; Tue, 27 May 2008 14:07:32 -0700 (PDT) Received: from [192.168.0.237] ([66.28.253.185]) (authenticated bits=0) by a.mail.sonic.net (8.13.8.Beta0-Sonic/8.13.7) with ESMTP id m4RL7NW6002896 for ; Tue, 27 May 2008 14:07:32 -0700 Message-ID: <483C78E2.4090000@sonic.net> Date: Tue, 27 May 2008 14:10:58 -0700 From: Gary Lowell User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: DMAPI JFS bug fixes Subject: DMAPI JFS bug fixes Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: a.mail.sonic.net[64.142.16.245] X-Barracuda-Start-Time: 1211922454 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.1, rules version 3.1.51602 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16138 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: glowell@sonic.net Precedence: bulk X-list: xfs Hi - The JFS version of DMAPI had a handful of bug fixes that don't seem to be in the current tree. I couldn't find anything in the list archive about them. Would there be any interest in applying those fixes or is DMAPI pretty much dead ? If there is interest, I've got a patch. Cheers, Gary From owner-xfs@oss.sgi.com Tue May 27 14:17:38 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 14:17:41 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RLHbdo014229 for ; Tue, 27 May 2008 14:17:37 -0700 X-ASG-Debug-ID: 1211923108-2c2b008e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy3.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 49E431BEAAB for ; Tue, 27 May 2008 14:18:28 -0700 (PDT) Received: from proxy3.bredband.net (proxy3.bredband.net [195.54.101.73]) by cuda.sgi.com with ESMTP id Yt8HJcCY0lfKnByG for ; Tue, 27 May 2008 14:18:28 -0700 (PDT) Received: from ironport2.bredband.com (195.54.101.122) by proxy3.bredband.net (7.3.127) id 481183EA009CE9EF for xfs@oss.sgi.com; Tue, 27 May 2008 23:18:26 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AsZFAGcXPEjVctjQPGdsb2JhbACBVYcFiVsBAQEBLQGcJg Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport2.bredband.com with ESMTP; 27 May 2008 23:18:26 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m4RLIJc8021495; Tue, 27 May 2008 23:18:25 +0200 Message-ID: <483C7A9B.1010401@stesmi.com> Date: Tue, 27 May 2008 23:18:19 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Sebastian M CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair getting stuck Subject: Re: xfs_repair getting stuck References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy3.bredband.net[195.54.101.73] X-Barracuda-Start-Time: 1211923109 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.1, rules version 3.1.51603 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16139 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Sebastian M wrote: > Hello > > I was a happy user of the XFS untill yesterday. I had to move data off > the XFS partition > to other storage. I exported it via NFS. > After half a day of moving files a kernel panic appeared on nfs server. > (sorry, but currently I don't have any logs). After reboot I wasn't able to > mount XFS partition anymore (got random kernel panics). I've tried to > xfs_repair, however it didn't work out. I had to use -L option. > As for now I can mount the partition, but most of my folders are not accessible: I'm guessing you've checked that the raid array is fit for fight? Just so that the problem doesn't end up being the array itself. // Stefan From owner-xfs@oss.sgi.com Tue May 27 14:49:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 14:49:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4RLnios016626 for ; Tue, 27 May 2008 14:49:45 -0700 Received: from [134.14.55.13] (dhcp13.melbourne.sgi.com [134.14.55.13]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id HAA14433; Wed, 28 May 2008 07:50:32 +1000 Message-ID: <483C8227.6090408@sgi.com> Date: Wed, 28 May 2008 07:50:31 +1000 From: Mark Goodwin Reply-To: markgw@sgi.com Organization: SGI Engineering User-Agent: Thunderbird 1.5.0.14 (Windows/20071210) MIME-Version: 1.0 To: Gary Lowell CC: xfs@oss.sgi.com Subject: Re: DMAPI JFS bug fixes References: <483C78E2.4090000@sonic.net> In-Reply-To: <483C78E2.4090000@sonic.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16140 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: markgw@sgi.com Precedence: bulk X-list: xfs Gary Lowell wrote: > Hi - > > The JFS version of DMAPI had a handful of bug fixes that don't seem to > be in the current tree. I couldn't find anything in the list archive > about them. Would there be any interest in applying those fixes or is > DMAPI pretty much dead ? no it's not dead :) > If there is interest, I've got a patch. yes please post it here, with due reference to the original author(s). Thanks > > Cheers, > Gary > > -- Mark Goodwin markgw@sgi.com Engineering Manager for XFS and PCP Phone: +61-3-99631937 SGI Australian Software Group Cell: +61-4-18969583 ------------------------------------------------------------- From owner-xfs@oss.sgi.com Tue May 27 16:20:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 16:20:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4RNKQ64026560 for ; Tue, 27 May 2008 16:20:28 -0700 X-ASG-Debug-ID: 1211930476-20c400ec0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail05.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 95A401C00CD for ; Tue, 27 May 2008 16:21:16 -0700 (PDT) Received: from ipmail05.adl2.internode.on.net (ipmail05.adl2.internode.on.net [203.16.214.145]) by cuda.sgi.com with ESMTP id 47xYwaX2gE1Nd9vU for ; Tue, 27 May 2008 16:21:16 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEAB4yPEh5LG9Y/2dsb2JhbACvBQ X-IronPort-AV: E=Sophos;i="4.27,550,1204464600"; d="scan'208";a="123777357" Received: from ppp121-44-111-88.lns10.syd6.internode.on.net (HELO disturbed) ([121.44.111.88]) by ipmail05.adl2.internode.on.net with ESMTP; 28 May 2008 08:51:12 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1K18Tf-0002Ng-8n; Wed, 28 May 2008 09:21:11 +1000 Date: Wed, 28 May 2008 09:21:11 +1000 From: Dave Chinner To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check Subject: Re: xfs_check Message-ID: <20080527232111.GB3819@disturbed> Mail-Followup-To: Christoph Hellwig , xfs@oss.sgi.com References: <20080527162605.GA30344@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080527162605.GA30344@lst.de> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: ipmail05.adl2.internode.on.net[203.16.214.145] X-Barracuda-Start-Time: 1211930478 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.1, rules version 3.1.51611 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16141 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@fromorbit.com Precedence: bulk X-list: xfs On Tue, May 27, 2008 at 06:26:05PM +0200, Christoph Hellwig wrote: > In the past we had quite a few cases where we told people to run > xfs_repair -n instead of xfs_check. I think that makes a lot of sense > because xfs_repair -n generally gives output at least as useful as > xfs_check if not more so and also is a lot faster. Is there any reason > why we shouldn't simply kill xfs_check and replaced it with a wrapper > around xfs_repair? xfs_repair doesn't yet check free space btrees - it simply blows them away and rebuilds htem from scratch. Hence errors in those btrees will go unreported. xfs_check will tell you about errors in those trees. Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Tue May 27 16:48:51 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 16:48:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4RNmmwq028687 for ; Tue, 27 May 2008 16:48:50 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA16817; Wed, 28 May 2008 09:49:34 +1000 To: "Christoph Hellwig" , xfs@oss.sgi.com Subject: Re: xfs_check From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080527162605.GA30344@lst.de> Content-Transfer-Encoding: 7bit Date: Wed, 28 May 2008 09:49:46 +1000 Message-ID: In-Reply-To: <20080527162605.GA30344@lst.de> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16142 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 28 May 2008 02:26:05 +1000, Christoph Hellwig wrote: > In the past we had quite a few cases where we told people to run > xfs_repair -n instead of xfs_check. I think that makes a lot of sense > because xfs_repair -n generally gives output at least as useful as > xfs_check if not more so and also is a lot faster. Is there any reason > why we shouldn't simply kill xfs_check and replaced it with a wrapper > around xfs_repair? It's on my "todo" list! Some stuff called case-insensitive support is delaying work like that :) From owner-xfs@oss.sgi.com Tue May 27 16:49:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 16:49:50 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4RNniXg028979 for ; Tue, 27 May 2008 16:49:45 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA16848; Wed, 28 May 2008 09:50:28 +1000 To: "Eric Sandeen" , "Chris Wedgwood" Subject: Re: xfs_check From: "Barry Naujok" Organization: SGI Cc: "Christoph Hellwig" , xfs@oss.sgi.com Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <20080527162605.GA30344@lst.de> <483C3B5C.3040407@sandeen.net> <20080527165049.GA20666@puku.stupidest.org> <483C3CFC.8040201@sandeen.net> Content-Transfer-Encoding: 7bit Date: Wed, 28 May 2008 09:50:40 +1000 Message-ID: In-Reply-To: <483C3CFC.8040201@sandeen.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16143 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 28 May 2008 02:55:24 +1000, Eric Sandeen wrote: > Chris Wedgwood wrote: >> On Tue, May 27, 2008 at 11:48:28AM -0500, Eric Sandeen wrote: >> >>> xfs_check checks... $SOMETHING that xfs_repair still does not, I >>> think? >> >> does that imply that that if $SOMETHING is bad it won't be seen then >> repaired then? > > I can't remember what $SOMETHING is but I bet Barry knows :) Free space btrees! But I would be enhancing xfs_repair -n to actually check them. From owner-xfs@oss.sgi.com Tue May 27 16:56:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Tue, 27 May 2008 16:56:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4RNu3UA029886 for ; Tue, 27 May 2008 16:56:04 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id JAA16952; Wed, 28 May 2008 09:56:48 +1000 Date: Wed, 28 May 2008 09:57:02 +1000 To: "Sebastian M" , xfs@oss.sgi.com Subject: Re: xfs_repair getting stuck From: "Barry Naujok" Organization: SGI Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by oss.sgi.com id m4RNu7UA029891 X-archive-position: 16144 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Wed, 28 May 2008 06:35:53 +1000, Sebastian M wrote: > Hello > > I was a happy user of the XFS untill yesterday. I had to move data off > the XFS partition > to other storage. I exported it via NFS. > After half a day of moving files a kernel panic appeared on nfs server. > (sorry, but currently I don't have any logs). After reboot I wasn't able > to > mount XFS partition anymore (got random kernel panics). I've tried to > xfs_repair, however it didn't work out. I had to use -L option. > As for now I can mount the partition, but most of my folders are not > accessible: > ls -la / > drwxrwxrwx 221 99 98 4096 V 23 14:37 . > drwxrwxrwx 3 99 root 21 II 5 01:11 .. > ?????????? ? ? ? ? ? 05 > ?????????? ? ? ? ? ? 26 > ?????????? ? ? ? ? ? 29 > ?????????? ? ? ? ? ? 2A > ?????????? ? ? ? ? ? 2B > ?????????? ? ? ? ? ? 2C > and so on. > (few files went to the lost+found) > > When I try to run xfs_repair now it gets stuck every time on the same > moment: > > kaszanka:~ # xfs_repair -P /dev/md0 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > block (3,1055347) already used, state 2 > block (3,1055348) already used, state 2 > bad on-disk superblock 4 - bad magic number > primary/secondary superblock 4 conflict - AG superblock geometry info > conflicts with filesystem geometry > bad magic # 0x8cb4f for agi 4 > bad sequence # 576384 for agi 4 > bad length # 66 for agi 4, should be 4883888 > reset bad sb for ag 4 > reset bad agi for ag 4 > bad magic # 0x58443242 in inobt block 4/3 > expected level 576591 got 2568 in inobt block 4/3 > bad magic # 0x9c1ac711 in inobt block 4/2112 > bad magic # 0x9cd4974b in inobt block 4/329816 > bad magic # 0x8f1662e7 in inobt block 4/2160 > bad magic # 0x75edc52e in inobt block 4/2184 > bad magic # 0x58443242 in inobt block 4/2208 > bad magic # 0x8632ebfd in inobt block 4/2232 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x553c5125 in inobt block 4/58339 > bad magic # 0x77db49b2 in inobt block 4/15 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/2 > bad magic # 0xc9c0c923 in inobt block 4/344821 > bad magic # 0x58443242 in inobt block 4/99 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x85a7f11f in inobt block 4/51210 > bad magic # 0x28d25805 in inobt block 4/13 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/2 > bad magic # 0xb69f6a9c in inobt block 4/447057 > bad magic # 0x58443242 in inobt block 4/99 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > > Strace shows following: > > strace -p > > write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 > write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 > pread(4, > "\205\247\361\37\306\235:\307U\327\265\0\3260\304\253ej\220\2050\216\2401\37|\373\221]p|\310"..., > 4096, 80227377152) = 4096 > write(2, "bad magic # 0x85a7f11f in inobt "..., 46) = 46 > pread(4, "(\322X\5\265\301 > s\33\\^\370\351\226}n+\375$8k\200\263f\256n*\254\246\313\375\2"..., > 4096, 80017674240) = 4096 > write(2, "bad magic # 0x28d25805 in inobt "..., 43) = 43 > write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 > write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 > pread(4, > "\266\237j\234\2\222d\214\364\3540\5\0008\\\310\2272\177\246!F`\311o*\26\362\370\302\214\237"..., > 4096, 81848766464) = 4096 > write(2, "bad magic # 0xb69f6a9c in inobt "..., 47) = 47 > write(2, "bad magic # 0x58443242 in inobt "..., 43) = 43 > write(2, "expected level 576590 got 1 in i"..., 48) = 48 > write(2, "bad magic # 0x58443242 in inobt "..., 42) = 42 > futex(0xb80c88, FUTEX_WAIT, 2, NULL > > I've tried xfs_repair -P but the problem remains - it stuck on the same > moment. > > My xfs partition (2.6TB) is created on the top of software raid 5 (10x > 320gb) > Right now Im using OpenSuse with 2.6.22.17-0.1-default x86_64 kernel. > My box got 2 Gigs of ram. > SATA disks are connected with SIL 3114 raid controllers. > > Im using XFSProgs version 2.9.7 > > Xfs_info: > > kaszanka:~ # xfs_info /dev/md0 > meta-data=/dev/md0 isize=256 agcount=144, > agsize=4883888 blks > = sectsz=512 attr=0 > data = bsize=4096 blocks=703279296, > imaxpct=25 > = sunit=16 swidth=48 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=196608 blocks=0, rtextents=0 > > Mounting and unmounting looks normal: > > May 27 17:25:23 kaszanka kernel: SGI XFS with ACLs, security > attributes, realtime, large block/inode numbers, no debug enabled > May 27 17:25:23 kaszanka kernel: SGI XFS Quota Management subsystem > May 27 17:25:23 kaszanka kernel: Filesystem "md0": Disabling barriers, > not supported by the underlying device > May 27 17:25:23 kaszanka kernel: XFS mounting filesystem md0 > May 27 17:25:25 kaszanka kernel: Ending clean XFS mount for filesystem: > md0 > > Is there any chance of repearing that partition ? > I've made metadump of that partition - its quite big - more than 3GB. I > can > put it somewhere if any of developers is interested. Hi Sebastian, If it freezes with -P, there must be two parts of repair trying to access the same block - in particular, block 0 most likely. I'm not sure if it's possible to get around the problem, but I will supply a patch to disable locking of block buffers which hopefully will fix it (locking of block buffers - xfs_buf_t's is in libxfs and normally beyond the control of xfs_repair). Barry. From owner-xfs@oss.sgi.com Wed May 28 01:10:36 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 01:10:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4S8AWR1008660 for ; Wed, 28 May 2008 01:10:33 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id SAA25962; Wed, 28 May 2008 18:11:18 +1000 Date: Wed, 28 May 2008 18:13:33 +1000 To: "Sebastian M" , xfs@oss.sgi.com Subject: Re: xfs_repair getting stuck From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------NL5luSBEEB9F8pOELPD1Rz MIME-Version: 1.0 References: Message-ID: In-Reply-To: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16145 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------NL5luSBEEB9F8pOELPD1Rz Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable On Wed, 28 May 2008 06:35:53 +1000, Sebastian M wrote: > Hello > > I was a happy user of the XFS untill yesterday. I had to move data off > the XFS partition > to other storage. I exported it via NFS. > After half a day of moving files a kernel panic appeared on nfs server. > (sorry, but currently I don't have any logs). After reboot I wasn't able= =20=20 > to > mount XFS partition anymore (got random kernel panics). I've tried to > xfs_repair, however it didn't work out. I had to use -L option. > As for now I can mount the partition, but most of my folders are not=20= =20 > accessible: > ls -la / > drwxrwxrwx 221 99 98 4096 V 23 14:37 . > drwxrwxrwx 3 99 root 21 II 5 01:11 .. > ?????????? ? ? ? ? ? 05 > ?????????? ? ? ? ? ? 26 > ?????????? ? ? ? ? ? 29 > ?????????? ? ? ? ? ? 2A > ?????????? ? ? ? ? ? 2B > ?????????? ? ? ? ? ? 2C > and so on. > (few files went to the lost+found) > > When I try to run xfs_repair now it gets stuck every time on the same=20= =20 > moment: > > kaszanka:~ # xfs_repair -P /dev/md0 > Phase 1 - find and verify superblock... > Phase 2 - using internal log > - zero log... > - scan filesystem freespace and inode maps... > block (3,1055347) already used, state 2 > block (3,1055348) already used, state 2 > bad on-disk superblock 4 - bad magic number > primary/secondary superblock 4 conflict - AG superblock geometry info > conflicts with filesystem geometry > bad magic # 0x8cb4f for agi 4 > bad sequence # 576384 for agi 4 > bad length # 66 for agi 4, should be 4883888 > reset bad sb for ag 4 > reset bad agi for ag 4 > bad magic # 0x58443242 in inobt block 4/3 > expected level 576591 got 2568 in inobt block 4/3 > bad magic # 0x9c1ac711 in inobt block 4/2112 > bad magic # 0x9cd4974b in inobt block 4/329816 > bad magic # 0x8f1662e7 in inobt block 4/2160 > bad magic # 0x75edc52e in inobt block 4/2184 > bad magic # 0x58443242 in inobt block 4/2208 > bad magic # 0x8632ebfd in inobt block 4/2232 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x553c5125 in inobt block 4/58339 > bad magic # 0x77db49b2 in inobt block 4/15 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/2 > bad magic # 0xc9c0c923 in inobt block 4/344821 > bad magic # 0x58443242 in inobt block 4/99 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x85a7f11f in inobt block 4/51210 > bad magic # 0x28d25805 in inobt block 4/13 > bad magic # 0x58443242 in inobt block 4/1 > bad magic # 0x58443242 in inobt block 4/2 > bad magic # 0xb69f6a9c in inobt block 4/447057 > bad magic # 0x58443242 in inobt block 4/99 > expected level 576590 got 1 in inobt block 4/98 > bad magic # 0x58443242 in inobt block 4/1 > > Strace shows following: > > strace -p > > write(2, "bad magic # 0x58443242 in inobt "..., 42) =3D 42 > write(2, "bad magic # 0x58443242 in inobt "..., 42) =3D 42 > pread(4,=20=20 > "\205\247\361\37\306\235:\307U\327\265\0\3260\304\253ej\220\2050\216\2401= \37|\373\221]p|\310"..., > 4096, 80227377152) =3D 4096 > write(2, "bad magic # 0x85a7f11f in inobt "..., 46) =3D 46 > pread(4, "(\322X\5\265\301 > s\33\\^\370\351\226}n+\375$8k\200\263f\256n*\254\246\313\375\2"..., > 4096, 80017674240) =3D 4096 > write(2, "bad magic # 0x28d25805 in inobt "..., 43) =3D 43 > write(2, "bad magic # 0x58443242 in inobt "..., 42) =3D 42 > write(2, "bad magic # 0x58443242 in inobt "..., 42) =3D 42 > pread(4,=20=20 > "\266\237j\234\2\222d\214\364\3540\5\0008\\\310\2272\177\246!F`\311o*\26\= 362\370\302\214\237"..., > 4096, 81848766464) =3D 4096 > write(2, "bad magic # 0xb69f6a9c in inobt "..., 47) =3D 47 > write(2, "bad magic # 0x58443242 in inobt "..., 43) =3D 43 > write(2, "expected level 576590 got 1 in i"..., 48) =3D 48 > write(2, "bad magic # 0x58443242 in inobt "..., 42) =3D 42 > futex(0xb80c88, FUTEX_WAIT, 2, NULL > > I've tried xfs_repair -P but the problem remains - it stuck on the same= =20=20 > moment. Can you try the attached patch to an xfsprogs 2.9.8 tarball (or 2.10.0 CVS version) and try it with the -P option? It should fix this problem. > My xfs partition (2.6TB) is created on the top of software raid 5 (10x=20= =20 > 320gb) > Right now Im using OpenSuse with 2.6.22.17-0.1-default x86_64 kernel. > My box got 2 Gigs of ram. > SATA disks are connected with SIL 3114 raid controllers. > > Im using XFSProgs version 2.9.7 > > Xfs_info: > > kaszanka:~ # xfs_info /dev/md0 > meta-data=3D/dev/md0 isize=3D256 agcount=3D144,=20=20 > agsize=3D4883888 blks > =3D sectsz=3D512 attr=3D0 > data =3D bsize=3D4096 blocks=3D703279296,=20= =20 > imaxpct=3D25 > =3D sunit=3D16 swidth=3D48 blks > naming =3Dversion 2 bsize=3D4096 > log =3Dinternal bsize=3D4096 blocks=3D32768, version= =3D2 > =3D sectsz=3D512 sunit=3D0 blks, lazy-cou= nt=3D0 > realtime =3Dnone extsz=3D196608 blocks=3D0, rtextents= =3D0 > > Mounting and unmounting looks normal: > > May 27 17:25:23 kaszanka kernel: SGI XFS with ACLs, security > attributes, realtime, large block/inode numbers, no debug enabled > May 27 17:25:23 kaszanka kernel: SGI XFS Quota Management subsystem > May 27 17:25:23 kaszanka kernel: Filesystem "md0": Disabling barriers, > not supported by the underlying device > May 27 17:25:23 kaszanka kernel: XFS mounting filesystem md0 > May 27 17:25:25 kaszanka kernel: Ending clean XFS mount for filesystem:= =20=20 > md0 > > Is there any chance of repearing that partition ? > I've made metadump of that partition - its quite big - more than 3GB. I= =20=20 > can > put it somewhere if any of developers is interested. > > Thanks, > Sebastian > > ------------NL5luSBEEB9F8pOELPD1Rz Content-Disposition: attachment; filename=no_xfs_buf_t_lock_repair.patch Content-Type: text/x-patch; name=no_xfs_buf_t_lock_repair.patch Content-Transfer-Encoding: Base64 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9pbmNs dWRlL2xpYnhmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK LS0tIGEveGZzcHJvZ3MvaW5jbHVkZS9saWJ4ZnMuaAkyMDA4LTA1LTI4IDE4 OjEwOjAzLjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9pbmNsdWRl L2xpYnhmcy5oCTIwMDgtMDUtMjggMTc6NDc6MTMuOTU2NTc2ODgzICsxMDAw CkBAIC02OSwxMSArNjksMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWNoYXIg ICAgICAgICAgICAqcnRuYW1lOyAgICAgICAgLyogcGF0aG5hbWUgb2YgcmVh bHRpbWUgInN1YnZvbHVtZSIgKi8KIAlpbnQgICAgICAgICAgICAgaXNyZWFk b25seTsgICAgIC8qIGZpbGVzeXN0ZW0gaXMgb25seSByZWFkIGluIGFwcGxp YyAqLwogCWludCAgICAgICAgICAgICBpc2RpcmVjdDsgICAgICAgLyogd2Ug Y2FuIGF0dGVtcHQgdG8gdXNlIGRpcmVjdCBJL08gKi8KLQlpbnQgICAgICAg ICAgICAgZGlzZmlsZTsgICAgICAgIC8qIGRhdGEgInN1YnZvbHVtZSIgaXMg YSByZWd1bGFyIGZpbGUgKi8gICAgICAgIGludCAgICAgICAgICAgICBkY3Jl YXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1YnZvbHVtZSAq LworCWludCAgICAgICAgICAgICBkaXNmaWxlOyAgICAgICAgLyogZGF0YSAi c3Vidm9sdW1lIiBpcyBhIHJlZ3VsYXIgZmlsZSAqLworCWludCAgICAgICAg ICAgICBkY3JlYXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1 YnZvbHVtZSAqLwogCWludCAgICAgICAgICAgICBsaXNmaWxlOyAgICAgICAg LyogbG9nICJzdWJ2b2x1bWUiIGlzIGEgcmVndWxhciBmaWxlICovCiAJaW50 ICAgICAgICAgICAgIGxjcmVhdDsgICAgICAgICAvKiB0cnkgdG8gY3JlYXRl IGxvZyBzdWJ2b2x1bWUgKi8KLQlpbnQgICAgICAgICAgICAgcmlzZmlsZTsg ICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1bWUiIGlzIGEgcmVnIGZpbGUg Ki8gICAgICAgIGludCAgICAgICAgICAgICByY3JlYXQ7ICAgICAgICAgLyog dHJ5IHRvIGNyZWF0ZSByZWFsdGltZSBzdWJ2b2x1bWUgKi8KKwlpbnQgICAg ICAgICAgICAgcmlzZmlsZTsgICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1 bWUiIGlzIGEgcmVnIGZpbGUgKi8KKwlpbnQgICAgICAgICAgICAgcmNyZWF0 OyAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgcmVhbHRpbWUgc3Vidm9sdW1l ICovCiAJaW50CQlzZXRibGtzaXplOwkvKiBhdHRlbXB0IHRvIHNldCBkZXZp Y2UgYmxrc2l6ZSAqLworCWludAkJbm9idWZsb2NrOwkvKiBkb24ndCBsb2Nr IHhmc19idWZfdCdzICovCiAJCQkJLyogb3V0cHV0IHJlc3VsdHMgKi8KIAlk ZXZfdCAgICAgICAgICAgZGRldjsgICAgICAgICAgIC8qIGRldmljZSBmb3Ig ZGF0YSBzdWJ2b2x1bWUgKi8KIAlkZXZfdCAgICAgICAgICAgbG9nZGV2OyAg ICAgICAgIC8qIGRldmljZSBmb3IgbG9nIHN1YnZvbHVtZSAqLwoKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cnhmc3Byb2dzL2xpYnhmcy9pbml0 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgotLS0gYS94ZnNw cm9ncy9saWJ4ZnMvaW5pdC5jCTIwMDgtMDUtMjggMTg6MTA6MDMuMDAwMDAw MDAwICsxMDAwCisrKyBiL3hmc3Byb2dzL2xpYnhmcy9pbml0LmMJMjAwOC0w NS0yOCAxNzo1MDo0OC4xMDUxOTU1MjcgKzEwMDAKQEAgLTI4LDYgKzI4LDgg QEAgaW50IGxpYnhmc19paGFzaF9zaXplOwkJLyogI2J1Y2tldHMgaW4gaQog c3RydWN0IGNhY2hlICpsaWJ4ZnNfYmNhY2hlOwkvKiBnbG9iYWwgYnVmZmVy IGNhY2hlICovCiBpbnQgbGlieGZzX2JoYXNoX3NpemU7CQkvKiAjYnVja2V0 cyBpbiBiY2FjaGUgKi8KIAoraW50CW5vX3hmc19idWZfbG9jazsJLyogZ2xv YmFsIGRvbid0IHVzZSB4ZnNfYnVmX3QgbG9jayBmbGFnICovCisKIHN0YXRp YyB2b2lkIG1hbmFnZV96b25lcyhpbnQpOwkvKiBzZXR1cCBnbG9iYWwgem9u ZXMgKi8KIAogLyoKQEAgLTMzNSw2ICszMzcsNyBAQCBsaWJ4ZnNfaW5pdChs aWJ4ZnNfaW5pdF90ICphKQogCWlmICghbGlieGZzX2JoYXNoX3NpemUpCiAJ CWxpYnhmc19iaGFzaF9zaXplID0gTElCWEZTX0JIQVNIU0laRShzYnApOwog CWxpYnhmc19iY2FjaGUgPSBjYWNoZV9pbml0KGxpYnhmc19iaGFzaF9zaXpl LCAmbGlieGZzX2JjYWNoZV9vcGVyYXRpb25zKTsKKwlub194ZnNfYnVmX2xv Y2sgPSBhLT5ub2J1ZmxvY2s7CiAJbWFuYWdlX3pvbmVzKDApOwogCXJ2YWwg PSAxOwogZG9uZToKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4 ZnNwcm9ncy9saWJ4ZnMvcmR3ci5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoKLS0tIGEveGZzcHJvZ3MvbGlieGZzL3Jkd3IuYwkyMDA4LTA1 LTI4IDE4OjEwOjAzLjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9s aWJ4ZnMvcmR3ci5jCTIwMDgtMDUtMjggMTg6MDE6MjkuNzM1MjI0ODY4ICsx MDAwCkBAIC0zNzUsNiArMzc1LDggQEAgc3RydWN0IGxpc3RfaGVhZAlsb2Nr X2J1Zl9saXN0ID0geyZsb2NrXwogaW50CQkJbG9ja19idWZfY291bnQgPSAw OwogI2VuZGlmCiAKK2V4dGVybiBpbnQgICAgIG5vX3hmc19idWZfbG9jazsK KwogeGZzX2J1Zl90ICoKIGxpYnhmc19nZXRidWYoZGV2X3QgZGV2aWNlLCB4 ZnNfZGFkZHJfdCBibGtubywgaW50IGxlbikKIHsKQEAgLTM4OCw3ICszOTAs OCBAQCBsaWJ4ZnNfZ2V0YnVmKGRldl90IGRldmljZSwgeGZzX2RhZGRyX3Qg CiAKIAltaXNzID0gY2FjaGVfbm9kZV9nZXQobGlieGZzX2JjYWNoZSwgJmtl eSwgKHN0cnVjdCBjYWNoZV9ub2RlICoqKSZicCk7CiAJaWYgKGJwKSB7Ci0J CXB0aHJlYWRfbXV0ZXhfbG9jaygmYnAtPmJfbG9jayk7CisJCWlmICghbm9f eGZzX2J1Zl9sb2NrKQorCQkJcHRocmVhZF9tdXRleF9sb2NrKCZicC0+Yl9s b2NrKTsKIAkJY2FjaGVfbm9kZV9zZXRfcHJpb3JpdHkobGlieGZzX2JjYWNo ZSwgKHN0cnVjdCBjYWNoZV9ub2RlICopYnAsCiAJCQljYWNoZV9ub2RlX2dl dF9wcmlvcml0eSgoc3RydWN0IGNhY2hlX25vZGUgKilicCkgLSA0KTsKICNp ZmRlZiBYRlNfQlVGX1RSQUNJTkcKQEAgLTQxNyw3ICs0MjAsOCBAQCBsaWJ4 ZnNfcHV0YnVmKHhmc19idWZfdCAqYnApCiAJbGlzdF9kZWxfaW5pdCgmYnAt PmJfbG9ja19saXN0KTsKIAlwdGhyZWFkX211dGV4X3VubG9jaygmbGlieGZz X2JjYWNoZS0+Y19tdXRleCk7CiAjZW5kaWYKLQlwdGhyZWFkX211dGV4X3Vu bG9jaygmYnAtPmJfbG9jayk7CisJaWYgKCFub194ZnNfYnVmX2xvY2spCisJ CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZicC0+Yl9sb2NrKTsKIAljYWNoZV9u b2RlX3B1dCgoc3RydWN0IGNhY2hlX25vZGUgKilicCk7CiB9CiAKCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9yZXBhaXIvaW5p dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLS0tIGEveGZz cHJvZ3MvcmVwYWlyL2luaXQuYwkyMDA4LTA1LTI4IDE4OjEwOjAzLjAwMDAw MDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9yZXBhaXIvaW5pdC5jCTIwMDgt MDUtMjggMTc6NTI6MjYuMDI0Njc0MDcyICsxMDAwCkBAIC0xMzUsNiArMTM1 LDcgQEAgeGZzX2luaXQobGlieGZzX2luaXRfdCAqYXJncykKIAkJLyogWFhY IGFzc3VtZSBkYXRhIGZpbGUgYWxzbyBtZWFucyBydCBmaWxlICovCiAJfQog CisJYXJncy0+bm9idWZsb2NrID0gIWRvX3ByZWZldGNoOwogCWFyZ3MtPnNl dGJsa3NpemUgPSAhZGFuZ2Vyb3VzbHk7CiAJYXJncy0+aXNkaXJlY3QgPSBM SUJYRlNfRElSRUNUOwogCWlmIChub19tb2RpZnkpCg== ------------NL5luSBEEB9F8pOELPD1Rz-- From owner-xfs@oss.sgi.com Wed May 28 01:23:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 01:23:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4S8N3Ye010327 for ; Wed, 28 May 2008 01:23:03 -0700 X-ASG-Debug-ID: 1211963033-125701f80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 922EEBF872D for ; Wed, 28 May 2008 01:23:53 -0700 (PDT) Received: from smtp7-g19.free.fr (smtp7-g19.free.fr [212.27.42.64]) by cuda.sgi.com with ESMTP id 6m98VQWy8agkRUOv for ; Wed, 28 May 2008 01:23:53 -0700 (PDT) Received: from smtp7-g19.free.fr (localhost [127.0.0.1]) by smtp7-g19.free.fr (Postfix) with ESMTP id B24F1322818; Wed, 28 May 2008 10:23:52 +0200 (CEST) Received: from galadriel.home (pla78-1-82-235-234-79.fbx.proxad.net [82.235.234.79]) by smtp7-g19.free.fr (Postfix) with ESMTP id A817C322875; Wed, 28 May 2008 10:23:51 +0200 (CEST) Date: Wed, 28 May 2008 10:20:38 +0200 From: Emmanuel Florac To: Christoph Hellwig Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_check Subject: Re: xfs_check Message-ID: <20080528102038.768dfd93@galadriel.home> In-Reply-To: <20080527162605.GA30344@lst.de> References: <20080527162605.GA30344@lst.de> Organization: Intellique X-Mailer: Claws Mail 2.9.1 (GTK+ 2.8.20; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp7-g19.free.fr[212.27.42.64] X-Barracuda-Start-Time: 1211963034 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.1, rules version 3.1.51647 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4S8N3Ye010329 X-archive-position: 16146 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Tue, 27 May 2008 18:26:05 +0200 vous écriviez: > Is there any reason > why we shouldn't simply kill xfs_check and replaced it with a wrapper > around xfs_repair? I may add that I hardly even had any filesystem recently small enough to fit xfs_check hunger for memory. All attempts to use xfs_check invariably ended with "out of memory" for 5 years or more. Actually IIRC I used xfs_check succesfully only on IRIX, back in the time of 9GB usrroot drives :) -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- From owner-xfs@oss.sgi.com Wed May 28 04:04:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 04:04:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SB4BOV019852 for ; Wed, 28 May 2008 04:04:12 -0700 X-ASG-Debug-ID: 1211972703-7fa001530000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ECEA8BF95E3 for ; Wed, 28 May 2008 04:05:03 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id Gbo0bUDjj61aLCx7 for ; Wed, 28 May 2008 04:05:03 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id DBE711C0019B1; Wed, 28 May 2008 07:05:02 -0400 (EDT) Date: Wed, 28 May 2008 07:05:02 -0400 (EDT) From: Justin Piszcz To: Peter Rabbitson cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) In-Reply-To: <483D39D3.4020906@rabbit.us> Message-ID: References: <483D39D3.4020906@rabbit.us> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1211972703 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.1, rules version 3.1.51657 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16147 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Wed, 28 May 2008, Peter Rabbitson wrote: > Justin Piszcz wrote: >> Hardware: >> >> 1. Utilized (6) 400 gigabyte sata hard drives. >> 2. Everything is on PCI-e (965 chipset & a 2port sata card) >> >> Used the following 'optimizations' for all tests. >> >> # Set read-ahead. >> echo "Setting read-ahead to 64 MiB for /dev/md3" >> blockdev --setra 65536 /dev/md3 > > That's actually 65k x 512byte blocks so 32MiB Ah whoops, thanks! > Results are meaningless without a crucial detail - what was the chunk size > used during array creation time? Otherwise interesting test :) Indeed, the chunk size used was 256 KiB for all tests. Justin. From owner-xfs@oss.sgi.com Wed May 28 06:37:21 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 06:37:27 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SDbKLN003249 for ; Wed, 28 May 2008 06:37:21 -0700 X-ASG-Debug-ID: 1211981890-64b100660000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 343921B984A3 for ; Wed, 28 May 2008 06:38:10 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id 2smgg1C9tRh3jY8C for ; Wed, 28 May 2008 06:38:10 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4SDc2Oc003183 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 28 May 2008 15:38:02 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4SDc2aX003181 for xfs@oss.sgi.com; Wed, 28 May 2008 15:38:02 +0200 Date: Wed, 28 May 2008 15:38:02 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] fix reiserfs case in 032 Subject: Re: [PATCH] fix reiserfs case in 032 Message-ID: <20080528133802.GA3124@lst.de> References: <20080515170505.GA8949@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080515170505.GA8949@lst.de> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1211981892 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.1, rules version 3.1.51668 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16148 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs Can we get a least a trivial testsuite fix like this reviewed an in? On Thu, May 15, 2008 at 07:05:05PM +0200, Christoph Hellwig wrote: > mkfs.reiserfs refuses to create a filesystem on full devices without > partitions unless it's given -f in addition to the already required Y > input to confirm the fs creation, so give the argument to it. > > While we're at it also write the full command line used to create the > filesystem into the log to ease future debugging. > > > Signed-off-by: Christoph Hellwig > > Index: xfstests/032 > =================================================================== > RCS file: /cvs/xfs-cmds/xfstests/032,v > retrieving revision 1.13 > diff -u -p -r1.13 032 > --- xfstests/032 9 Nov 2005 02:49:08 -0000 1.13 > +++ xfstests/032 15 May 2008 17:02:08 -0000 > @@ -43,7 +43,7 @@ do > [ $fs = vfat ] && postargs=2000 > # these folks prompt before writing > [ $fs = jfs ] && preop="echo Y |" > - [ $fs = reiserfs ] && preop="echo y |" > + [ $fs = reiserfs ] && preop="echo y |" && preargs="-f" > # cramfs mkfs requires a directory argument > [ $fs = cramfs ] && preargs=/proc/fs/xfs > > @@ -52,7 +52,7 @@ do > > # create a filesystem of this type > echo "=== Creating $fs filesystem..." >>$seq.full > - echo " ( mkfs -t $fs $SCRATCH_DEV )" >>$seq.full > + echo " ( $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs )" >>$seq.full > eval $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs >>$seq.full 2>&1 > > # next, ensure we don't overwrite it ---end quoted text--- From owner-xfs@oss.sgi.com Wed May 28 08:39:42 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 08:39:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-4.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SFdgcK019747 for ; Wed, 28 May 2008 08:39:42 -0700 X-ASG-Debug-ID: 1211989234-438902cb0000-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 C1EBBBFB6F1 for ; Wed, 28 May 2008 08:40:34 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id EEKZSd7EkuS4BdvA for ; Wed, 28 May 2008 08:40:34 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation 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 m4SFeWrr032259; Wed, 28 May 2008 11:40:32 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m4SFeV4Y002558; Wed, 28 May 2008 11:40:31 -0400 Received: from einstein.jnsq.org (vpn-10-59.bos.redhat.com [10.16.10.59]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m4SFeUx4013668; Wed, 28 May 2008 11:40:30 -0400 Message-ID: <483D7CE8.4000600@redhat.com> Date: Wed, 28 May 2008 11:40:24 -0400 From: Chris Snook User-Agent: Thunderbird 2.0.0.14 (X11/20080501) MIME-Version: 1.0 To: Justin Piszcz CC: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: 1211989234 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16149 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: csnook@redhat.com Precedence: bulk X-list: xfs Justin Piszcz wrote: > Hardware: > > 1. Utilized (6) 400 gigabyte sata hard drives. > 2. Everything is on PCI-e (965 chipset & a 2port sata card) > > Used the following 'optimizations' for all tests. > > # Set read-ahead. > echo "Setting read-ahead to 64 MiB for /dev/md3" > blockdev --setra 65536 /dev/md3 > > # Set stripe-cache_size for RAID5. > echo "Setting stripe_cache_size to 16 MiB for /dev/md3" > echo 16384 > /sys/block/md3/md/stripe_cache_size > > # Disable NCQ on all disks. > echo "Disabling NCQ on all disks..." > for i in $DISKS > do > echo "Disabling NCQ on $i" > echo 1 > /sys/block/"$i"/device/queue_depth > done Given that one of the greatest benefits of NCQ/TCQ is with parity RAID, I'd be fascinated to see how enabling NCQ changes your results. Of course, you'd want to use a single SATA controller with a known good NCQ implementation, and hard drives known to not do stupid things like disable readahead when NCQ is enabled. -- Chris From owner-xfs@oss.sgi.com Wed May 28 09:39:35 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 09:39:38 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SGdZEp024004 for ; Wed, 28 May 2008 09:39:35 -0700 X-ASG-Debug-ID: 1211992826-303700f40000-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 A2C56BFEC9E for ; Wed, 28 May 2008 09:40:26 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id eCxGEDGqHFWJZjti for ; Wed, 28 May 2008 09:40:26 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation 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 m4SGeNPc030436; Wed, 28 May 2008 12:40:23 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m4SGeH1P005128; Wed, 28 May 2008 12:40:18 -0400 Received: from einstein.jnsq.org (vpn-10-59.bos.redhat.com [10.16.10.59]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m4SGe65D025309; Wed, 28 May 2008 12:40:11 -0400 Message-ID: <483D8AE0.8090606@redhat.com> Date: Wed, 28 May 2008 12:40:00 -0400 From: Chris Snook User-Agent: Thunderbird 2.0.0.14 (X11/20080501) MIME-Version: 1.0 To: =?ISO-8859-1?Q?Jens_B=E4ckman?= CC: Justin Piszcz , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) References: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> In-Reply-To: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit 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: 1211992827 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16150 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: csnook@redhat.com Precedence: bulk X-list: xfs Jens Bäckman wrote: > On Wed, May 28, 2008 at 10:53 AM, Justin Piszcz wrote: >> Results: >> >> http://home.comcast.net/~jpiszcz/raid/20080528/raid-levels.html >> http://home.comcast.net/~jpiszcz/raid/20080528/raid-levels.txt > > Either the RAID 1 read speed must be wrong, or something is odd in the > Linux implementation. There's six drives that can be used for reading > at the same time, as they contain the very same data. 63MB/s > sequential looks like what you would get from a single drive. The test is a single thread reading one block at a time, so this is not surprising. If you get this doing multi-megabyte readahead, or with several threads, something is very wrong. -- Chris From owner-xfs@oss.sgi.com Wed May 28 09:45:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 09:45:30 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,MIME_8BIT_HEADER, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SGjRAW024647 for ; Wed, 28 May 2008 09:45:27 -0700 X-ASG-Debug-ID: 1211993178-552601e30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from atlantis.cc.ndsu.NoDak.edu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 330DE1747621 for ; Wed, 28 May 2008 09:46:18 -0700 (PDT) Received: from atlantis.cc.ndsu.NoDak.edu (atlantis.cc.ndsu.NoDak.edu [134.129.99.37]) by cuda.sgi.com with ESMTP id yaNQiERLryHPqWYz for ; Wed, 28 May 2008 09:46:18 -0700 (PDT) Received: from atlantis.cc.ndsu.NoDak.edu (localhost.localdomain [127.0.0.1]) by atlantis.cc.ndsu.NoDak.edu (8.14.2/8.14.2) with ESMTP id m4SGkGeb029826; Wed, 28 May 2008 11:46:16 -0500 Received: (from bmesich@localhost) by atlantis.cc.ndsu.NoDak.edu (8.14.2/8.14.1/Submit) id m4SGkGRb029825; Wed, 28 May 2008 11:46:16 -0500 Date: Wed, 28 May 2008 11:46:16 -0500 From: Bryan Mesich To: Jens =?iso-8859-1?Q?B=E4ckman?= Cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Message-ID: <20080528164616.GB29722@atlantis.cc.ndsu.NoDak.edu> Reply-To: Bryan Mesich Mail-Followup-To: Bryan Mesich , Jens =?iso-8859-1?Q?B=E4ckman?= , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com References: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> X-Operating-System: Fedora Release 8 User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: atlantis.cc.ndsu.NoDak.edu[134.129.99.37] X-Barracuda-Start-Time: 1211993179 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.1, rules version 3.1.51680 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16151 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bryan.mesich@ndsu.edu Precedence: bulk X-list: xfs On Wed, May 28, 2008 at 06:34:00PM +0200, Jens Bäckman wrote: > Either the RAID 1 read speed must be wrong, or something is odd in the > Linux implementation. There's six drives that can be used for reading > at the same time, as they contain the very same data. 63MB/s > sequential looks like what you would get from a single drive. The RAID 1 read speed metrics do not depict multithreaded processes reading from the array simutaneouly. I would suspect that the read performance metrics would look better if 2 bonnie simulations were ran together (for RAID 1 that is). Bryan From owner-xfs@oss.sgi.com Wed May 28 10:31:54 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 10:31:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SHVrVU027981 for ; Wed, 28 May 2008 10:31:53 -0700 X-ASG-Debug-ID: 1211995964-631b03460000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 67C821747517 for ; Wed, 28 May 2008 10:32:44 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id PkO5G838xwkAtQAz for ; Wed, 28 May 2008 10:32:44 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id C1E311C001AD7; Wed, 28 May 2008 13:32:44 -0400 (EDT) Date: Wed, 28 May 2008 13:32:44 -0400 (EDT) From: Justin Piszcz To: Chris Snook cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) In-Reply-To: <483D7CE8.4000600@redhat.com> Message-ID: References: <483D7CE8.4000600@redhat.com> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1211995965 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.1, rules version 3.1.51684 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16152 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Wed, 28 May 2008, Chris Snook wrote: > Justin Piszcz wrote: >> Hardware: >> >> 1. Utilized (6) 400 gigabyte sata hard drives. >> 2. Everything is on PCI-e (965 chipset & a 2port sata card) >> >> Used the following 'optimizations' for all tests. >> >> # Set read-ahead. >> echo "Setting read-ahead to 64 MiB for /dev/md3" >> blockdev --setra 65536 /dev/md3 >> >> # Set stripe-cache_size for RAID5. >> echo "Setting stripe_cache_size to 16 MiB for /dev/md3" >> echo 16384 > /sys/block/md3/md/stripe_cache_size >> >> # Disable NCQ on all disks. >> echo "Disabling NCQ on all disks..." >> for i in $DISKS >> do >> echo "Disabling NCQ on $i" >> echo 1 > /sys/block/"$i"/device/queue_depth >> done > > Given that one of the greatest benefits of NCQ/TCQ is with parity RAID, I'd > be fascinated to see how enabling NCQ changes your results. Of course, you'd > want to use a single SATA controller with a known good NCQ implementation, > and hard drives known to not do stupid things like disable readahead when NCQ > is enabled. Only/usually on multi-threaded jobs/tasks, yes? Also, I turn off NCQ on all of my hosts that has it enabled by default because there are many bugs that occur when NCQ is on, they are working on it in the libata layer but IMO it is not safe at all for running SATA disks w/NCQ as with it on I have seen drives drop out of the array (with it off, no problems). From owner-xfs@oss.sgi.com Wed May 28 12:04:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 12:04:58 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43, MIME_8BIT_HEADER,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SJ4t5E001436 for ; Wed, 28 May 2008 12:04:55 -0700 X-ASG-Debug-ID: 1212001546-1a8a00ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 640351728812 for ; Wed, 28 May 2008 12:05:46 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id StnhHkLvKHlBMXSQ for ; Wed, 28 May 2008 12:05:46 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 2D04C1C00027A; Wed, 28 May 2008 15:05:46 -0400 (EDT) Date: Wed, 28 May 2008 15:05:46 -0400 (EDT) From: Justin Piszcz To: =?ISO-8859-15?Q?Keld_J=F8rn_Simonsen?= cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) In-Reply-To: <20080528190242.GA5171@rap.rap.dk> Message-ID: References: <20080528190242.GA5171@rap.rap.dk> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1463747160-443333512-1212001546=:29755" X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1212001547 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.1, rules version 3.1.51690 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16153 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1463747160-443333512-1212001546=:29755 Content-Type: TEXT/PLAIN; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE On Wed, 28 May 2008, Keld J=F8rn Simonsen wrote: > I added this in the wiki performance section. Ok. > I think it would have been informative if also a test with one drive in > a non-raid setup was described. Since the performance of bonnie++ deals with single threads/a raid1 would p= robably closely match it but yeah I could do that sometime. > > Are there any particular findings you want to highlight? Not in particular, just I could never find this information provided anywhe= re that showed all of the raid variation/types in one location that was easy to read. > > Is there some way to estimate random read and writes from this test? The sequential input and output and re-write speeds are the most important. > > Are the XFS file systems completely new when running the tests? Yes, after the creation of each array, mkfs.xfs -f /dev/md3 was run to ensu= re a clean mount and cron was also off throughout all testing. > > Best regards > keld ---1463747160-443333512-1212001546=:29755-- From owner-xfs@oss.sgi.com Wed May 28 12:21:41 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 12:21:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SJLfoO007551 for ; Wed, 28 May 2008 12:21:41 -0700 X-ASG-Debug-ID: 1212002549-749a00450000-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 AD788119D7AB for ; Wed, 28 May 2008 12:22:32 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id KsT72ZZ5UZjyBMjl for ; Wed, 28 May 2008 12:22:32 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation 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 m4SJMRtZ004229; Wed, 28 May 2008 15:22:27 -0400 Received: from file.rdu.redhat.com (file.rdu.redhat.com [10.11.255.147]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m4SJMQrS020214; Wed, 28 May 2008 15:22:26 -0400 Received: from einstein.jnsq.org (vpn-10-59.bos.redhat.com [10.16.10.59]) by file.rdu.redhat.com (8.13.1/8.13.1) with ESMTP id m4SJMPf7024193; Wed, 28 May 2008 15:22:26 -0400 Message-ID: <483DB0EC.3090403@redhat.com> Date: Wed, 28 May 2008 15:22:20 -0400 From: Chris Snook User-Agent: Thunderbird 2.0.0.14 (X11/20080501) MIME-Version: 1.0 To: Justin Piszcz CC: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) References: <483D7CE8.4000600@redhat.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: 1212002553 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16154 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: csnook@redhat.com Precedence: bulk X-list: xfs Justin Piszcz wrote: > > > On Wed, 28 May 2008, Chris Snook wrote: > >> Justin Piszcz wrote: >>> Hardware: >>> >>> 1. Utilized (6) 400 gigabyte sata hard drives. >>> 2. Everything is on PCI-e (965 chipset & a 2port sata card) >>> >>> Used the following 'optimizations' for all tests. >>> >>> # Set read-ahead. >>> echo "Setting read-ahead to 64 MiB for /dev/md3" >>> blockdev --setra 65536 /dev/md3 >>> >>> # Set stripe-cache_size for RAID5. >>> echo "Setting stripe_cache_size to 16 MiB for /dev/md3" >>> echo 16384 > /sys/block/md3/md/stripe_cache_size >>> >>> # Disable NCQ on all disks. >>> echo "Disabling NCQ on all disks..." >>> for i in $DISKS >>> do >>> echo "Disabling NCQ on $i" >>> echo 1 > /sys/block/"$i"/device/queue_depth >>> done >> >> Given that one of the greatest benefits of NCQ/TCQ is with parity >> RAID, I'd be fascinated to see how enabling NCQ changes your results. >> Of course, you'd want to use a single SATA controller with a known >> good NCQ implementation, and hard drives known to not do stupid things >> like disable readahead when NCQ is enabled. > Only/usually on multi-threaded jobs/tasks, yes? Generally, yes, but there's caching and readahead at various layers in software that can expose the benefit on certain single-threaded workloads as well. > Also, I turn off NCQ on all of my hosts that has it enabled by default > because > there are many bugs that occur when NCQ is on, they are working on it in > the > libata layer but IMO it is not safe at all for running SATA disks w/NCQ as > with it on I have seen drives drop out of the array (with it off, no > problems). > Are you using SATA drives with RAID-optimized firmware? Most SATA manufacturers have variants of their drives for a few dollars more that have firmware that provides bounded latency for error recovery operations, for precisely this reason. -- Chris From owner-xfs@oss.sgi.com Wed May 28 12:27:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 12:27:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SJR7Y5008237 for ; Wed, 28 May 2008 12:27:07 -0700 X-ASG-Debug-ID: 1212002879-6dcb01740000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C02A8119E082 for ; Wed, 28 May 2008 12:27:59 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id AY8fIUESmsg5SLJ3 for ; Wed, 28 May 2008 12:27:59 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id D349B1C00009F; Wed, 28 May 2008 15:27:58 -0400 (EDT) Date: Wed, 28 May 2008 15:27:58 -0400 (EDT) From: Justin Piszcz To: Chris Snook cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) In-Reply-To: <483DB0EC.3090403@redhat.com> Message-ID: References: <483D7CE8.4000600@redhat.com> <483DB0EC.3090403@redhat.com> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1212002879 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.1, rules version 3.1.51691 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16155 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Wed, 28 May 2008, Chris Snook wrote: > Justin Piszcz wrote: >> >> >> On Wed, 28 May 2008, Chris Snook wrote: >> >>> Justin Piszcz wrote: >>>> Hardware: >>>> >>> Given that one of the greatest benefits of NCQ/TCQ is with parity RAID, >>> I'd be fascinated to see how enabling NCQ changes your results. Of >>> course, you'd want to use a single SATA controller with a known good NCQ >>> implementation, and hard drives known to not do stupid things like disable >>> readahead when NCQ is enabled. >> Only/usually on multi-threaded jobs/tasks, yes? > > Generally, yes, but there's caching and readahead at various layers in > software that can expose the benefit on certain single-threaded workloads as > well. > >> Also, I turn off NCQ on all of my hosts that has it enabled by default >> because >> there are many bugs that occur when NCQ is on, they are working on it in >> the >> libata layer but IMO it is not safe at all for running SATA disks w/NCQ as >> with it on I have seen drives drop out of the array (with it off, no >> problems). >> > > Are you using SATA drives with RAID-optimized firmware? Most SATA > manufacturers have variants of their drives for a few dollars more that have > firmware that provides bounded latency for error recovery operations, for > precisely this reason. I see--however, as I understood it there were bugs utilizing NCQ in libata? But FYI-- In this test, they were regular SATA drives, not special raid-ones (RE2,etc). Thanks for the info! Justin. From owner-xfs@oss.sgi.com Wed May 28 15:21:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 15:21:10 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4SML6cQ024930 for ; Wed, 28 May 2008 15:21:06 -0700 X-ASG-Debug-ID: 1212013315-51ac01730000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 871C61C7E15 for ; Wed, 28 May 2008 15:21:56 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id 7ozsPjGnsIPX9wZi for ; Wed, 28 May 2008 15:21:56 -0700 (PDT) Received: from [10.0.0.21] (g226140169.adsl.alicedsl.de [92.226.140.169]) by mail.lichtvoll.de (Postfix) with ESMTP id BF7D85AE0E for ; Thu, 29 May 2008 00:22:13 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Question for XFS (mounting and clean bit) Subject: Re: Question for XFS (mounting and clean bit) Date: Thu, 29 May 2008 00:21:52 +0200 User-Agent: KMail/1.9.9 References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> (sfid-20080527_213946_881555_0B129DA7) In-Reply-To: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805290021.53240.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1212013318 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.1, rules version 3.1.51703 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16156 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Hi Andre, Am Dienstag 27 Mai 2008 schrieb Andre Nitschke: > Hello, > i am a Linux User from Germany and chanched to xfs. I use Debian 4 and > the installer creates lilo. Because of a wrong configuration i > destroyed the lilo.conf and rebootet with a systemrescuecd. from here i > mount the xfs partition and try to run lilo, but it fails. > then i had a realy bad idea. i unmount the xfs partition and then mount > it as root, but there exit a root file system. [...] > i have two questions. first, is the xfs on my working-machine damaged > by my bad idea mounting two devices as root > and secound, is the clean bit removed when mounting a xfs or when i > first write data on it? Mounting two devices on / should not harm the XFS filesystem in itself. I even think that also new files created from within the already running part of the live distribution should go to the initially mounted root filesystem (if the live distro creates new files in there at all). But I am not completely sure on that. Anyway, there are two ways to check: xfs_check or xfs_repair -n I do not know an answer to you second question. But when atime updates are enabled you usually have your first write pretty soon. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Wed May 28 17:35:14 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 17:35:16 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.5 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, TVD_SPACE_RATIO autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T0ZEKu005496 for ; Wed, 28 May 2008 17:35:14 -0700 X-ASG-Debug-ID: 1212021366-690d01fb0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc2-s30.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 639EC1227C3A for ; Wed, 28 May 2008 17:36:06 -0700 (PDT) Received: from bay0-omc2-s30.bay0.hotmail.com (bay0-omc2-s30.bay0.hotmail.com [65.54.246.166]) by cuda.sgi.com with ESMTP id RYbUfpERHvSCsXF0 for ; Wed, 28 May 2008 17:36:06 -0700 (PDT) Received: from hotmail.com ([65.55.131.18]) by bay0-omc2-s30.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Wed, 28 May 2008 17:36:05 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Wed, 28 May 2008 17:36:05 -0700 Message-ID: Received: from 65.55.161.29 by BAY126-DAV8.phx.gbl with DAV; Thu, 29 May 2008 00:36:01 +0000 X-Originating-IP: [65.55.161.29] X-Originating-Email: [vwrlqg4493782@hotmail.com] X-Sender: vwrlqg4493782@hotmail.com thread-index: AcjBI/h+91LPjXD0S0e0in3qYidN2w== Thread-Topic: =?big5?B?pKOq4aRqv/rF/adBxdymfru0?= From: "gqxzq opoyur" To: , , , , , , , , , , , , , , , , Cc: X-ASG-Orig-Subj: =?big5?B?pKOq4aRqv/rF/adBxdymfru0?= Subject: =?big5?B?pKOq4aRqv/rF/adBxdymfru0?= Date: Wed, 28 May 2008 20:36:02 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: 8bit Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.3959 X-OriginalArrivalTime: 29 May 2008 00:36:05.0639 (UTC) FILETIME=[FAD5C970:01C8C123] X-Barracuda-Connect: bay0-omc2-s30.bay0.hotmail.com[65.54.246.166] X-Barracuda-Start-Time: 1212021366 X-Barracuda-Bayes: INNOCENT GLOBAL 0.7433 1.0000 1.7159 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.92 X-Barracuda-Spam-Status: No, SCORE=1.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BLANK_LINES_80_90, BSF_SC0_SA085, MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51713 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.11 BLANK_LINES_80_90 BODY: Message body has 80-90% blank lines 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay 0.10 BSF_SC0_SA085 Custom Rule SA085 X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16157 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vwrlqg4493782@hotmail.com Precedence: bulk X-list: xfs §O¦b²~²~ÅøÅø¤F³o­ÓÅý§AÅܬüÄR http://snipr.com/%20!flhffhrm#.jMlb3HbX7frktVAbFxcA47R3d4yY56r2MIWdBDn3UvykuLxMefhIY8ycQ9DFePrHxWffYiW7OrLCplGlNf9ZpzG9aQC2C463D39zIJEYTTtOnGWb5ztG5DjQltmCsZy8mwrtaWJ7PoVbxQ8dPfnfSJlEbbu1pUuJIBhdZu9bpu76UjUe2jn46qmLmaTlDKINRpZVPyCmPmcBXk0RbEmkAKBXvsOkCdY5qvOnGGpSnUu7Fy6mlAfyqJOciUXDww4FBT4mHIRNe2uCoyASBaM2FImKoTrTblHd6WVkccTLdSVhLGbFVW?DYpn?qrEmJeY1G6bxRkI8Ondt1NpvP0mnvRorUfaRF7KBJEGitELWa/ 50pFHX3J2VfFDOvoiYhzvvxPI8a1IsL3WRBF5YiIGR2VMEgouPwx0kJwyKLiFubAWUwH851biv5z3dxVHwMdDQJl2c3q9Mt/ From owner-xfs@oss.sgi.com Wed May 28 23:07:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 23:07:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4T674Xi029919 for ; Wed, 28 May 2008 23:07:06 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21313 for ; Thu, 29 May 2008 16:07:56 +1000 Date: Thu, 29 May 2008 16:09:41 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: fix up xfs_repair I/O size for filesystems with >= 16KB filesystem blocksize From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------qdbq859JlvQAf3J6ERfKN9 MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16158 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------qdbq859JlvQAf3J6ERfKN9 Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable For 4KB block size filesystems (the default), inode chunks are read and=20= =20 written in 8KB "clusters". With a 16KB block size (possible on ia64 boxes), the=20= =20 inode chunks are read/written in 16KB I/Os (matches the filesystem block size). This patch fixes up the I/Os for filesystems with a blocksize greater than= =20=20 8KB. Barry. =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/prefetch.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/prefetch.c 2008-05-29 16:00:34.000000000 +1000 +++ b/xfsprogs/repair/prefetch.c 2008-05-29 15:52:00.405480826 +1000 @@ -600,7 +600,6 @@ pf_queuing_worker( ino_tree_node_t *irec; ino_tree_node_t *cur_irec; int blks_per_cluster; - int inos_per_cluster; xfs_agblock_t bno; int i; int err; @@ -608,7 +607,6 @@ pf_queuing_worker( blks_per_cluster =3D XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_blocklog; if (blks_per_cluster =3D=3D 0) blks_per_cluster =3D 1; - inos_per_cluster =3D blks_per_cluster * mp->m_sb.sb_inopblock; for (i =3D 0; i < PF_THREAD_COUNT; i++) { err =3D pthread_create(&args->io_threads[i], NULL, @@ -661,7 +659,7 @@ pf_queuing_worker( (cur_irec->ino_isa_dir !=3D 0) ? B_DIR_INODE : B_INODE); bno +=3D blks_per_cluster; - num_inos +=3D inos_per_cluster; + num_inos +=3D inodes_per_cluster; } while (num_inos < XFS_IALLOC_INODES(mp)); } @@ -738,6 +736,7 @@ start_inode_prefetch( prefetch_args_t *prev_args) { prefetch_args_t *args; + long max_queue; if (!do_prefetch || agno >=3D mp->m_sb.sb_agcount) return NULL; @@ -757,8 +756,12 @@ start_inode_prefetch( * and not any other associated metadata like directories */ - sem_init(&args->ra_count, 0, libxfs_bcache->c_maxcount / thread_count / - (XFS_IALLOC_BLOCKS(mp) / (XFS_INODE_CLUSTER_SIZE(mp) >>=20=20 mp->m_sb.sb_blocklog)) / 8); + max_queue =3D libxfs_bcache->c_maxcount / thread_count / 8; + if (XFS_INODE_CLUSTER_SIZE(mp) > mp->m_sb.sb_blocksize) + max_queue =3D max_queue * (XFS_INODE_CLUSTER_SIZE(mp) >> + mp->m_sb.sb_blocklog) / XFS_IALLOC_BLOCKS(mp); + + sem_init(&args->ra_count, 0, max_queue); if (!prev_args) { if (!pf_create_prefetch_thread(args)) =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/xfs_repair.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/xfs_repair.c 2008-05-29 16:00:34.000000000 +1000 +++ b/xfsprogs/repair/xfs_repair.c 2008-05-29 15:49:06.100019069 +1000 @@ -572,7 +572,8 @@ main(int argc, char **argv) chunks_pblock =3D mp->m_sb.sb_inopblock / XFS_INODES_PER_CHUNK; max_symlink_blocks =3D howmany(MAXPATHLEN - 1, mp->m_sb.sb_blocksize); - inodes_per_cluster =3D XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog; + inodes_per_cluster =3D MAX(mp->m_sb.sb_inopblock, + XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog); if (ag_stride) { thread_count =3D (glob_agcount + ag_stride - 1) / ag_stride; ------------qdbq859JlvQAf3J6ERfKN9 Content-Disposition: attachment; filename=fix_16k_fsb_repair.patch Content-Type: text/x-patch; name=fix_16k_fsb_repair.patch Content-Transfer-Encoding: Quoted-Printable =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/prefetch.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/prefetch.c 2008-05-29 16:00:34.000000000 +1000 +++ b/xfsprogs/repair/prefetch.c 2008-05-29 15:52:00.405480826 +1000 @@ -600,7 +600,6 @@ pf_queuing_worker( ino_tree_node_t *irec; ino_tree_node_t *cur_irec; int blks_per_cluster; - int inos_per_cluster; xfs_agblock_t bno; int i; int err; @@ -608,7 +607,6 @@ pf_queuing_worker( blks_per_cluster =3D XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_blocklog; if (blks_per_cluster =3D=3D 0) blks_per_cluster =3D 1; - inos_per_cluster =3D blks_per_cluster * mp->m_sb.sb_inopblock; =20 for (i =3D 0; i < PF_THREAD_COUNT; i++) { err =3D pthread_create(&args->io_threads[i], NULL, @@ -661,7 +659,7 @@ pf_queuing_worker( (cur_irec->ino_isa_dir !=3D 0) ? B_DIR_INODE : B_INODE); bno +=3D blks_per_cluster; - num_inos +=3D inos_per_cluster; + num_inos +=3D inodes_per_cluster; } while (num_inos < XFS_IALLOC_INODES(mp)); } =20 @@ -738,6 +736,7 @@ start_inode_prefetch( prefetch_args_t *prev_args) { prefetch_args_t *args; + long max_queue; =20 if (!do_prefetch || agno >=3D mp->m_sb.sb_agcount) return NULL; @@ -757,8 +756,12 @@ start_inode_prefetch( * and not any other associated metadata like directories */ =20 - sem_init(&args->ra_count, 0, libxfs_bcache->c_maxcount / thread_count / - (XFS_IALLOC_BLOCKS(mp) / (XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_bloc= klog)) / 8); + max_queue =3D libxfs_bcache->c_maxcount / thread_count / 8; + if (XFS_INODE_CLUSTER_SIZE(mp) > mp->m_sb.sb_blocksize) + max_queue =3D max_queue * (XFS_INODE_CLUSTER_SIZE(mp) >> + mp->m_sb.sb_blocklog) / XFS_IALLOC_BLOCKS(mp); + + sem_init(&args->ra_count, 0, max_queue); =20 if (!prev_args) { if (!pf_create_prefetch_thread(args)) =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/xfs_repair.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/xfs_repair.c 2008-05-29 16:00:34.000000000 +1000 +++ b/xfsprogs/repair/xfs_repair.c 2008-05-29 15:49:06.100019069 +1000 @@ -572,7 +572,8 @@ main(int argc, char **argv) =20 chunks_pblock =3D mp->m_sb.sb_inopblock / XFS_INODES_PER_CHUNK; max_symlink_blocks =3D howmany(MAXPATHLEN - 1, mp->m_sb.sb_blocksize); - inodes_per_cluster =3D XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog; + inodes_per_cluster =3D MAX(mp->m_sb.sb_inopblock, + XFS_INODE_CLUSTER_SIZE(mp) >> mp->m_sb.sb_inodelog); =20 if (ag_stride) { thread_count =3D (glob_agcount + ag_stride - 1) / ag_stride; ------------qdbq859JlvQAf3J6ERfKN9-- From owner-xfs@oss.sgi.com Wed May 28 23:59:30 2008 Received: with ECARTIS (v1.0.0; list xfs); Wed, 28 May 2008 23:59:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4T6x5eB001043 for ; Wed, 28 May 2008 23:59:28 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA22353; Thu, 29 May 2008 16:59:46 +1000 Message-ID: <483E5462.1080604@sgi.com> Date: Thu, 29 May 2008 16:59:46 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Andre Nitschke CC: xfs@oss.sgi.com Subject: Re: Question for XFS (mounting and clean bit) References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> In-Reply-To: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16159 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Hi Andre, I didn't follow all of this, sorry. When you ask about the "clean bit", I assume that you are referring to "clean XFS mount for filesystem". We effectively mark it clean if we do a successful unmount. As part of unmount, we write an unmount record into the xfs log. On the next mount we look for the head of the log and then for the unmount record nearby. If we find the unmount record then we know we have had a clean unmount previously, otherwise we replay the log. So it's really a question of doing an unmount versus resetting the box beforehand or forcing a shutdown beforehand. I guess the other question would be if it is possible to mount the filesystem and try to do no write i/o such that the ondisk log is not touched at all since the last unmount. I believe so. You can use "xfs_logprint -t" to see if the head has moved and it is clean or not etc.. IIRC we did have an sb counters thing recently where in an idle state we were logging the super block counters - Dave (dgc) fixed this one. --Tim Andre Nitschke wrote: > Hello, > i am a Linux User from Germany and chanched to xfs. I use Debian 4 and the > installer creates lilo. Because of a wrong configuration i destroyed the > lilo.conf and rebootet with a systemrescuecd. from here i mount the xfs > partition and try to run lilo, but it fails. > then i had a realy bad idea. i unmount the xfs partition and then mount it as > root, but there exit a root file system. > i type > mount /dev/sda2 / > no error appears. i could not access the partiton from the hdd, only see the > tmpfs from the live-boot cd. hm > i type mount and the mount command says: > tmpfs on / as tmpfs (rw) > ....(some entrys...) > /dev/sda2 on / as xfs (rw) > ok, both devices were mountet as / > but i could only access the tmpfs system from the live cd. > i try to reboot. the system sends the term and kill signal, then hang up. > nothing happesn. > i press reset. > then linux startet normal and says ... > > XFS mounting filesystem sda2 > Ending clean XFS mount for filesystem: sda2 > > so i think nothing should happens to the xfs. > but i cant stop thinking, go to my testpc with linux and xfs and create the same > situtation. everytime ... clean xfs. > when i start writing data and then press reset comes this message: > > SGI XFS Quota Management subsystem > XFS mounting filesystem hda2 > Starting XFS recovery on filesystem: hda2 (logdev: internal) > Ending XFS recovery on filesystem: hda2 (logdev: internal) > > i have two questions. first, is the xfs on my working-machine damaged by my bad > idea mounting two devices as root > and secound, is the clean bit removed when mounting a xfs or when i first write > data on it? > > thanks > > andre > > From owner-xfs@oss.sgi.com Thu May 29 00:38:44 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 00:38:46 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4T7cehP011418 for ; Thu, 29 May 2008 00:38:42 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id RAA23305; Thu, 29 May 2008 17:39:26 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 5514158C4C3F; Thu, 29 May 2008 17:39:26 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 907752 - XFSQA: Fix reisefs case in 032 Message-Id: <20080529073926.5514158C4C3F@chook.melbourne.sgi.com> Date: Thu, 29 May 2008 17:39:26 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16160 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs mkfs.reiserfs refuses to create a filesystem on full devices without partitions unless it's given -f in addition to the already required Y input to confirm the fs creation, so give the argument to it. While we're at it also write the full command line used to create the filesystem into the log to ease future debugging. Signed-off-by: Christoph Hellwig Date: Thu May 29 17:38:35 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xcmds-clean Inspected by: hch@lst.de The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31250a xfstests/032 - 1.14 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfstests/032.diff?r1=text&tr1=1.14&r2=text&tr2=1.13&f=h - Execute bits changed from xxx to --- Fix up test with reiserfs From owner-xfs@oss.sgi.com Thu May 29 01:01:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 01:01:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T81RAS013140 for ; Thu, 29 May 2008 01:01:28 -0700 X-ASG-Debug-ID: 1212048137-6ee901b00000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 43AD71751694 for ; Thu, 29 May 2008 01:02:17 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id 5N3gr2Lj6naoyMST for ; Thu, 29 May 2008 01:02:17 -0700 (PDT) Received: from [10.0.0.21] (e179054170.adsl.alicedsl.de [85.179.54.170]) by mail.lichtvoll.de (Postfix) with ESMTP id 4D0375ADEF for ; Thu, 29 May 2008 10:02:34 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Question for XFS (mounting and clean bit) Subject: Re: Question for XFS (mounting and clean bit) Date: Thu, 29 May 2008 10:02:14 +0200 User-Agent: KMail/1.9.9 References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> (sfid-20080527_213946_881555_0B129DA7) In-Reply-To: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805291002.14665.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1212048139 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.1, rules version 3.1.51742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16161 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Am Dienstag 27 Mai 2008 schrieb Andre Nitschke: > Hello, > i am a Linux User from Germany and chanched to xfs. I use Debian 4 and > the installer creates lilo. Because of a wrong configuration i > destroyed the lilo.conf and rebootet with a systemrescuecd. from here i > mount the xfs partition and try to run lilo, but it fails. > then i had a realy bad idea. i unmount the xfs partition and then mount > it as root, but there exit a root file system. Hi Andre! Some additional hint on this: I think what you actually wanted to do was: mount /dev/sda1 /mnt chroot /mnt lilo Ctrl-D I.e. you use chroot to change a directory temporarily and only for all subsequent commands in the same console session to /. > i have two questions. first, is the xfs on my working-machine damaged > by my bad idea mounting two devices as root > and secound, is the clean bit removed when mounting a xfs or when i > first write data on it? Also here some clarification and confirmation on my previous statement: I believe that a new mount is only seen by process that enter the mount point directory after the mount has been done. I think that all the processes that are working already in that directory or a sub directory of it will still see the situation before the mount. Lets try this out: Shell 1: /mnt/zeit is on the / filesystem: martin@shambala:~ -> cd /mnt/zeit martin@shambala:/mnt/zeit -> ls -lid . 89142 drwxr-xr-x 2 root root 6 2008-01-28 14:35 . Shell 2: I mount a filesystem on top of it: root@shambala:~ -> mount /dev/shambala/lugcamp2008 /mnt/zeit root@shambala:~ -> cd /mnt/zeit root@shambala:/mnt/zeit -> ls -lid . 128 drwxrwxr-x 3 root martin 18 2008-05-04 00:32 . 128 appears to be the root inode (/) of the XFS filesystem in question. But see Shell 1 again: martin@shambala:/mnt/zeit -> ls -lid . 89142 drwxr-xr-x 2 root root 6 2008-01-28 14:35 . Get the picture? Shell 1 still sees the old inode. Shell 2: Lets create a file in there: root@shambala:/mnt/zeit -> touch fs1 And now shell 3: Mount another filesystem on top of the same directory: root@shambala:/mnt/zeit -> ls -lid . 128 drwxr-xr-x 24 root root 4096 2008-05-24 20:57 . root@shambala:/mnt/zeit -> LANG=EN stat fs1 stat: cannot stat `fs1': No such file or directory root@shambala:/mnt/zeit -> stat fs1 root@shambala:/mnt/zeit -> touch fs2 I get the same root inode number (since /dev/sda1 is a XFS filesystem as well which happens to use 128 as root inode number), but the file "fs1" is not there anymore, so this is clearly a different filesystem. Back to shell 2: It still sees fs1, but not fs2: root@shambala:/mnt/zeit -> LANG=EN stat fs2 stat: cannot stat `fs2': No such file or directory root@shambala:/mnt/zeit -> LANG=EN stat fs1 File: `fs1' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 184442 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-05-29 09:45:58.754469708 +0200 Modify: 2008-05-29 09:45:58.754469708 +0200 Change: 2008-05-29 09:45:58.754469708 +0200 Back to shell 1: It still sees neither fs1 or fs2, but the inode before the first mount has happened: martin@shambala:/mnt/zeit -> ls -lid . 89142 drwxr-xr-x 2 root root 6 2008-01-28 14:35 . martin@shambala:/mnt/zeit -> LANG=EN stat fs1 fs2 stat: cannot stat `fs1': No such file or directory stat: cannot stat `fs2': No such file or directory But now lets CD out of the directory and back in again: martin@shambala:/mnt/zeit -> ls -lid . 128 drwxr-xr-x 24 root root 4096 2008-05-29 09:47 . martin@shambala:/mnt/zeit -> LANG=EN stat fs1 fs2 stat: cannot stat `fs1': No such file or directory File: `fs2' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 75339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-05-29 09:47:58.090807158 +0200 Modify: 2008-05-29 09:47:58.090807158 +0200 Change: 2008-05-29 09:47:58.090807158 +0200 *Now* it sees the current situation of the second mount. Back to shell 2: While shell 2 still sees the situation of the first mount: root@shambala:/mnt/zeit -> LANG=EN stat fs1 fs2 File: `fs1' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 184442 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-05-29 09:45:58.754469708 +0200 Modify: 2008-05-29 09:45:58.754469708 +0200 Change: 2008-05-29 09:45:58.754469708 +0200 stat: cannot stat `fs2': No such file or directory Even when I start a new shell, it still sees the first mount cause it inherits the namespace from its parent process: root@shambala:/mnt/zeit -> bash root@shambala:/mnt/zeit -> LANG=EN stat fs1 fs2 File: `fs1' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 184442 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-05-29 09:45:58.754469708 +0200 Modify: 2008-05-29 09:45:58.754469708 +0200 Change: 2008-05-29 09:45:58.754469708 +0200 stat: cannot stat `fs2': No such file or directory Only a change out of the mount point directory updates the view of the process: root@shambala:/mnt -> cd zeit root@shambala:/mnt/zeit -> LANG=EN stat fs1 fs2 stat: cannot stat `fs1': No such file or directory File: `fs2' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 75339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-05-29 09:47:58.090807158 +0200 Modify: 2008-05-29 09:47:58.090807158 +0200 Change: 2008-05-29 09:47:58.090807158 +0200 Confused? ;-) Then I suggest playing around with this a bit. But with a different directory than / ;-) That shown I I think that only processes you started *after* your second mount will have seen the XFS fileystem you mounted. So the only thing I think that might have happened is that a process that you started in your shell *after* you did the mount has written something to the XFS filesystem. And in either case I am quite sure that nothing of all of this could actually have corrupted your XFS filesystem. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Thu May 29 01:03:55 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 01:03:59 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T83tQO013554 for ; Thu, 29 May 2008 01:03:55 -0700 X-ASG-Debug-ID: 1212048286-1a9703790000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B21331C99D8 for ; Thu, 29 May 2008 01:04:46 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id 9F2lE9AQMHmsKcbl for ; Thu, 29 May 2008 01:04:46 -0700 (PDT) Received: from [10.0.0.21] (e179054170.adsl.alicedsl.de [85.179.54.170]) by mail.lichtvoll.de (Postfix) with ESMTP id 36FCB5ADEF for ; Thu, 29 May 2008 10:05:04 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Question for XFS (mounting and clean bit) Subject: Re: Question for XFS (mounting and clean bit) Date: Thu, 29 May 2008 10:04:44 +0200 User-Agent: KMail/1.9.9 References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> <200805291002.14665.Martin@lichtvoll.de> (sfid-20080529_100337_093273_54B3C19A) In-Reply-To: <200805291002.14665.Martin@lichtvoll.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805291004.45116.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1212048287 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.1, rules version 3.1.51742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16162 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Am Donnerstag 29 Mai 2008 schrieb Martin Steigerwald: > Am Dienstag 27 Mai 2008 schrieb Andre Nitschke: > > Hello, > > i am a Linux User from Germany and chanched to xfs. I use Debian 4 > > and the installer creates lilo. Because of a wrong configuration i > > destroyed the lilo.conf and rebootet with a systemrescuecd. from here > > i mount the xfs partition and try to run lilo, but it fails. > > then i had a realy bad idea. i unmount the xfs partition and then > > mount it as root, but there exit a root file system. > > Hi Andre! > > Some additional hint on this: > > I think what you actually wanted to do was: > > mount /dev/sda1 /mnt mount /dev/sda2 /mnt but you get the picture. ;) > chroot /mnt > lilo > Ctrl-D -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Thu May 29 01:08:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 01:08:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T88kuh014091 for ; Thu, 29 May 2008 01:08:46 -0700 X-ASG-Debug-ID: 1212048578-6ee801d80000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.lichtvoll.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8AEE01B986AF for ; Thu, 29 May 2008 01:09:38 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id y1RNn1yzFqXyRwBU for ; Thu, 29 May 2008 01:09:38 -0700 (PDT) Received: from [10.0.0.21] (e179054170.adsl.alicedsl.de [85.179.54.170]) by mail.lichtvoll.de (Postfix) with ESMTP id D1B9B5ADEF for ; Thu, 29 May 2008 10:09:55 +0200 (CEST) From: Martin Steigerwald To: linux-xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Question for XFS (mounting and clean bit) Subject: Re: Question for XFS (mounting and clean bit) Date: Thu, 29 May 2008 10:09:35 +0200 User-Agent: KMail/1.9.9 References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> <483E5462.1080604@sgi.com> (sfid-20080529_093513_291114_64DAE2F5) In-Reply-To: <483E5462.1080604@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200805291009.36229.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1212048578 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.1, rules version 3.1.51742 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16163 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: Martin@lichtvoll.de Precedence: bulk X-list: xfs Am Donnerstag 29 Mai 2008 schrieb Timothy Shimmin: > Hi Andre, Hi Timothy, > I didn't follow all of this, sorry. > When you ask about the "clean bit", I assume that you are referring > to "clean XFS mount for filesystem". > We effectively mark it clean if we do a successful unmount. > As part of unmount, we write an unmount record into the xfs log. > On the next mount we look for the head of the log and then for the > unmount record nearby. If we find the unmount record then we know > we have had a clean unmount previously, otherwise we replay the log. > So it's really a question of doing an unmount versus resetting the > box beforehand or forcing a shutdown beforehand. But when is it dirtied? If the clean log entry is the actual "clean bit" I guess: When the first new entry is written in the log. Does XFS write a log entry on mounting it already or only on the first real write? Or in other words if I mount a XFS filesystem without writing to it and reset the machine, would it be marked clean or dirty then? Hmmm, I could test this ;-). If its only mounted read only, it shouldn't be marked dirty anyways. Ciao, -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From owner-xfs@oss.sgi.com Thu May 29 02:14:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 02:14:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T9E2Vn018341 for ; Thu, 29 May 2008 02:14:02 -0700 X-ASG-Debug-ID: 1212052493-408301050000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ag-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 860F81CA330 for ; Thu, 29 May 2008 02:14:53 -0700 (PDT) Received: from ag-out-0708.google.com (ag-out-0708.google.com [72.14.246.244]) by cuda.sgi.com with ESMTP id 4HiiHbf9fnkhD3l3 for ; Thu, 29 May 2008 02:14:53 -0700 (PDT) Received: by ag-out-0708.google.com with SMTP id 31so1057831agc.5 for ; Thu, 29 May 2008 02:14:53 -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:subject:mime-version:content-type; bh=LdF3cWxKSvN3ixxNNuo6q7EHN3HtkPxByy5hcxBiT/I=; b=iEPluiS6Jl+pnm1WkYVyfbsOTYNUP5vWXLBIs1Uy50xzdp7+u/x+tLt+Jla4svKmAhlE4bpQAHWR4wtb1g/IeiXmR7u3XllBosqiBgkEoI8RIEDyPUuDGGpsrG8uDe+M/axjqbk8hfNJU+711xYGu/ILPoxuOM37k0zmd2gB8Lw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:subject:mime-version:content-type; b=Z6cwGzLAEZpvLi5CiJP0e/iIAn4rbf6ynZHFJm6b0o6B6hhTH7OoYiLmzhxSVdpJd5D2Oewa6SBxUEe42oFkEFdVhS6bwaip32KULBq3C4bKPvgBza2nQQit3Ymd9tyDevfxY4qaFaN03qvV4A/xufOutB7CAQGBWklgnVMzCUg= Received: by 10.143.5.7 with SMTP id h7mr1465188wfi.319.1212052453465; Thu, 29 May 2008 02:14:13 -0700 (PDT) Received: by 10.143.165.17 with HTTP; Thu, 29 May 2008 02:14:12 -0700 (PDT) Message-ID: <7ac0722d0805290214w11547044qd5b80d70c802027@mail.gmail.com> Date: Thu, 29 May 2008 11:14:12 +0200 From: "dave morgan" X-ASG-Orig-Subj: Greetings from David Morgan. Subject: Greetings from David Morgan. MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_16386_13244656.1212052453443" X-Barracuda-Connect: ag-out-0708.google.com[72.14.246.244] X-Barracuda-Start-Time: 1212052494 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5494 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.35 X-Barracuda-Spam-Status: No, SCORE=1.35 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, MAILTO_TO_SPAM_ADDR, MISSING_HEADERS, TO_CC_NONE X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51746 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.19 MISSING_HEADERS Missing To: header 0.28 MAILTO_TO_SPAM_ADDR URI: Includes a link to a likely spammer email 0.00 HTML_MESSAGE BODY: HTML included in message 0.13 TO_CC_NONE No To: or Cc: header To: undisclosed-recipients:; X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16164 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: davemorgannineteen@gmail.com Precedence: bulk X-list: xfs ------=_Part_16386_13244656.1212052453443 Content-Type: multipart/alternative; boundary="----=_Part_16387_12353764.1212052453444" ------=_Part_16387_12353764.1212052453444 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, Please find attached my message to you and get back to me as soon as possible via my private email address :davidmorgan65@hotmail.com for details. Thanks in anticipation. Best Regards, David Morgan. ------=_Part_16387_12353764.1212052453444 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello,
Please find attached my message to you and get back to me as soon as possible via my private email address :davidmorgan65@hotmail.com for details.
Thanks in anticipation.
Best Regards,
David Morgan.
------=_Part_16387_12353764.1212052453444-- ------=_Part_16386_13244656.1212052453443 Content-Type: application/msword; name=Letter..doc Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgt4omhc0 Content-Disposition: attachment; filename=Letter..doc 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAB AAAAIwAAAAAAAAAAEAAAJQAAAAEAAAD+////AAAAACIAAAD///////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ///////////////////////spcEATSAJBAAA8BK/AAAAAAAAEAAAAAAABAAA 8gcAAA4AYmpiauI94j0AAAAAAAAAAAAAAAAAAAAAAAAJBBYAIhIAAIBXAACA VwAA8gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAAAAAA AAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAAGwAAAAAABQBAAAA AAAAFAEAABQBAAAAAAAAFAEAAAAAAAAUAQAAAAAAABQBAAAAAAAAFAEAABQA AAAAAAAAAAAAACgBAAAAAAAAKAEAAAAAAAAoAQAAAAAAACgBAAAAAAAAKAEA AAwAAAA0AQAADAAAACgBAAAAAAAAmwIAALYAAABMAQAAFgAAAGIBAAAAAAAA YgEAAAAAAABiAQAAAAAAAGIBAAAAAAAAYgEAAAAAAABiAQAAAAAAAGIBAAAA AAAAGgIAAAIAAAAcAgAAAAAAABwCAAAAAAAAHAIAAAAAAAAcAgAAAAAAABwC AAAAAAAAHAIAACQAAABRAwAAIAIAAHEFAABaAAAAQAIAABUAAAAAAAAAAAAA AAAAAAAAAAAAFAEAAAAAAABiAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAQAA AAAAAGIBAAAAAAAAYgEAAAAAAABiAQAAAAAAAEACAAAAAAAAiAEAAAAAAAAU AQAAAAAAABQBAAAAAAAAYgEAAAAAAAAAAAAAAAAAAGIBAAAAAAAAVQIAABYA AACIAQAAAAAAAIgBAAAAAAAAiAEAAAAAAABiAQAAFgAAABQBAAAAAAAAYgEA AAAAAAAUAQAAAAAAAGIBAAAAAAAAGgIAAAAAAAAAAAAAAAAAAIgBAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAYgEAAAAAAAAaAgAAAAAAAIgBAACSAAAAiAEAAAAAAAAAAAAAAAAAABoC AAAAAAAAFAEAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgIAAAAAAABiAQAA AAAAAEABAAAMAAAAMBsfK1zByAEoAQAAAAAAACgBAAAAAAAAeAEAABAAAAAa AgAAAAAAAAAAAAAAAAAAGgIAAAAAAABrAgAAMAAAAJsCAAAAAAAAGgIAAAAA AADLBQAAAAAAAIgBAAAAAAAAywUAAAAAAAAaAgAAAAAAAIgBAAAAAAAAKAEA AAAAAAAoAQAAAAAAABQBAAAAAAAAFAEAAAAAAAAUAQAAAAAAABQBAAAAAAAA AgDZAAAAR29vZCBEYXkgLKCgoKCgoAtJJ20gRGF2aWQgTW9yZ2FuLCBJIHdv cmsgd2l0aCBBYnNhIEJhbmsgaGVyZSBpbiBTb3V0aCBBZnJpY2EuIEFsdGhv dWdoIHRoZSBpbnRlcm5ldCBpcyBhIHZlcnkgaGFyZCBwbGFjZSB0byBtZWV0 IHBlb3BsZSBiZWNhdXNlIHlvdSBkb24ndCBrbm93IHdobyB0byB0cnVzdCwg d2hhdCB0byBiZWxpZXZlIGFuZCB3aGF0IG5vdCB0by6goKCgoKALSSBoYXZl IGEgYnVzaW5lc3Mgc3VnZ2VzdGlvbiBmb3IgeW91LiBUaGVyZSBpcyB0aGUg c3VtIG9mICQxOSw1MDAsMDAwLjAwIGluIG15IGJhbmsgIkFic2EgQmFuayIg U291dGggQWZyaWNhLiBUaGVyZSB3ZXJlIG5vIGJlbmVmaWNpYXJpZXMgc3Rh dGVkIGNvbmNlcm5pbmcgdGhlc2UgZnVuZHMgd2hpY2ggbWVhbnMgbm8gb25l IHdvdWxkIGV2ZXIgY29tZSBmb3J3YXJkIHRvIGNsYWltIGl0LiBUaGF0IGlz IHdoeSBJIGFzayB0aGF0IHdlIHdvcmsgdG9nZXRoZXIgc28gYXMgdG8gaGF2 ZSB0aGUgc3VtIHRyYW5zZmVycmVkIG91dCBvZiBteSBiYW5rIGludG8geW91 ciBhY2NvdW50LqCgoKCgoAtQbGVhc2UgZG8gbm90IGJlIG9mZmVuZGVkIHdp dGggdGhlIG1hbm5lciBJIGNvbnRhY3RlZCB5b3UuIEl0IHdhcyBuZWNlc3Np dGF0ZWQgYnkgdGhlIHVyZ2VuY3kgYW5kIG5hdHVyZSBvZiB0aGlzIHRyYW5z YWN0aW9uLqCgoKCgoAtTaG91bGQgeW91IGJlIGludGVyZXN0ZWQgcGxlYXNl IHNlbmQgbWUgeW91cjugoKCgoKALoKCgoKCgCzEuIEZ1bGwgbmFtZXOgoKCg oKALMi4gUHJpdmF0ZSBwaG9uZSBudW1iZXKgoKCgoKALMy4gQ3VycmVudCBy ZXNpZGVudGlhbCBhZGRyZXNzoKCgoKCgC6CgoKCgoAtZb3VyIGNhbiByZWFj aCBtZSBvbiBteSBwcml2YXRlIGVtYWlsOiATIEhZUEVSTElOSyAibWFpbHRv OmRhdmlkbW9yZ2FuNjVAaG90bWFpbC5jb20iIFx0ICJfYmxhbmsiIBRkYXZp ZG1vcmdhbjY1QGhvdG1haWwuY29tFaCgoKCgoAugoKCgoKALS2luZCBSZWdh cmRzLKCgoKCgoAtEYXZpZCBNb3JnYW6gDQ0AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAawcAAGwHAACmBwAA pwcAAMAHAADBBwAA8gcAAAD6APr3+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQwShAAAAkDagAAAABVCAEA BwAEAADxBwAA8gcAAPMAAAAAAAAAAAAAAADxAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAALDwAOhHgA D4R4ABOkeABdhHgAXoR4AAACAAQAAPIHAAD9AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAABAQEgADGQaAEfsNAv ILDgPSGwCAcisAgHI5CgBSSQoAUlsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAABQAEQAKAAEAaQAPAAMAAAAAAAAAAAA4AABA8f8CADgADAAGAE4A bwByAG0AYQBsAAAAAgAAABgAQ0oYAF9IAQRhShgAbUgJBHNICQR0SAkEAAAA AAAAAAAAAAAAAAAAAAAAPABBQPL/oQA8AAwAFgBEAGUAZgBhAHUAbAB0ACAA UABhAHIAYQBnAHIAYQBwAGgAIABGAG8AbgB0AAAAAAAAAAAAAAAAADoAXmAB APIAOgAMAAwATgBvAHIAbQBhAGwAIAAoAFcAZQBiACkAAAAQAA8AE6RkABSk ZABbJAFcJAEAAC4AVWCiAAEBLgAMAAkASAB5AHAAZQByAGwAaQBuAGsAAAAM AD4qAUIqAnBoAAD/AAAAAADyAwAABAAAEgAAAAD/////AAQAAPIHAAAGAAAA AAQAAPIHAAAHAAAAAAQAAPIHAAAIAAAAawMAAKYDAADAAwAA8gMAABNYlP8V jAAAAAAiAAAA8QMAAPQDAAAHAAMABwAAAAAA8QMAAPQDAAADAAcA//8CAAAA BABQAEMAMQAwAEAAQwA6AFwARABvAGMAdQBtAGUAbgB0AHMAIABhAG4AZAAg AFMAZQB0AHQAaQBuAGcAcwBcAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIA XABNAHkAIABEAG8AYwB1AG0AZQBuAHQAcwBcAEwAZQB0AHQAZQByAC4ALgBk AG8AYwD/QAMAAQAAAAAA8gMAACSJiQABAAEAAAAAAAEAAAAAAAAAAAAAAAIQ AAAAAAAAAPIDAABAAAAIAEAAAP//AQAAAAcAVQBuAGsAbgBvAHcAbgD//wEA CAAAAAAAAAAAAAAA//8BAAAAAAD//wAAAgD//wAAAAD//wAAAgD//wAAAAAD AAAARxaQAQAAAgIGAwUEBQIDBId6ACAAAACACAAAAAAAAAD/AQAAAAAAAFQA aQBtAGUAcwAgAE4AZQB3ACAAUgBvAG0AYQBuAAAANRaQAQIABQUBAgEHBgIF BwAAAAAAAAAQAAAAAAAAAAAAAACAAAAAAFMAeQBtAGIAbwBsAAAAMyaQAQAA AgsGBAICAgICBId6ACAAAACACAAAAAAAAAD/AQAAAAAAAEEAcgBpAGEAbAAA ACIABAAwCIgYAPDQAgAAaAEAAAAAUerFhlLqxYYAAAAAAQABAAAAkQAAAEAD AAABAAEAAAAEAAMQBgAAAAAAAAAAAAAAAQABAAAAAQAAAAAAAADRAgDwEAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIB6AF tAC0AIGBEjAAAAAAAAAAAAAAAAAAAP0DAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AgAAAAAAAAAAAAgyg1EA8BAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAD//xIAAAAAAAAAEABHAG8AbwBkACAARABhAHkAIAAsACAAIAAgACAA IAAgAAAAAAAAAAQAUABDADEAMAAEAFAAQwAxADAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAD+/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCr kQgAKyez2TAAAAB0AQAAEQAAAAEAAACQAAAAAgAAAJgAAAADAAAAtAAAAAQA AADAAAAABQAAANAAAAAGAAAA3AAAAAcAAADoAAAACAAAAPgAAAAJAAAACAEA ABIAAAAUAQAACgAAADABAAAMAAAAPAEAAA0AAABIAQAADgAAAFQBAAAPAAAA XAEAABAAAABkAQAAEwAAAGwBAAACAAAA5AQAAB4AAAARAAAAR29vZCBEYXkg LCAgICAgIAAAZAAeAAAAAQAAAABvb2QeAAAABQAAAFBDMTAARGF5HgAAAAEA AAAAQzEwHgAAAAEAAAAAQzEwHgAAAAcAAABOb3JtYWwAeR4AAAAFAAAAUEMx MABsAHkeAAAAAgAAADEAMTAeAAAAEwAAAE1pY3Jvc29mdCBXb3JkIDkuMAAA QAAAAABGwyMAAAAAQAAAAAD+WfxbwcgBQAAAAABEHSBcwcgBAwAAAAEAAAAD AAAAkQAAAAMAAABAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAA/v8AAAUBAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWcLhsQ k5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rjwBAAD4AAAADAAAAAEAAABo AAAADwAAAHAAAAAFAAAAfAAAAAYAAACEAAAAEQAAAIwAAAAXAAAAlAAAAAsA AACcAAAAEAAAAKQAAAATAAAArAAAABYAAAC0AAAADQAAALwAAAAMAAAA2QAA AAIAAADkBAAAHgAAAAEAAAAAAG8AAwAAAAYAAAADAAAAAQAAAAMAAAD9AwAA AwAAAO0OCQALAAAAAAAAAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAB4QAAAB AAAAEQAAAEdvb2QgRGF5ICwgICAgICAADBAAAAIAAAAeAAAABgAAAFRpdGxl AAMAAAABAAAAAMQAAAADAAAAAAAAACAAAAABAAAAOAAAAAIAAABAAAAAAQAA AAIAAAAMAAAAX1BJRF9ITElOS1MAAgAAAOQEAABBAAAAfAAAAAYAAAADAAAA YABYAAMAAAAAAAAAAwAAAAAAAAADAAAABQAAAB8AAAAhAAAAbQBhAGkAbAB0 AG8AOgBkAGEAdgBpAGQAbQBvAHIAZwBhAG4ANgA1AEAAaABvAHQAbQBhAGkA bAAuAGMAbwBtAAAAAAAfAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAA AP7///8LAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAA/v///xMAAAAUAAAA FQAAABYAAAAXAAAAGAAAABkAAAD+////GwAAABwAAAAdAAAAHgAAAB8AAAAg AAAAIQAAAP7////9////JAAAAP7////+/////v////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ////////////////////////////////////UgBvAG8AdAAgAEUAbgB0AHIA eQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABYABQH//////////wMAAAAGCQIAAAAAAMAAAAAAAABGAAAAAAAAAAAAAAAA gBxpK1zByAEmAAAAgAAAAAAAAAAxAFQAYQBiAGwAZQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgACAP// /////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAoAAAAAEAAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIBBQAAAP////// ////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIS AAAAAAAABQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgECAAAABAAAAP////8AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAABAAAAAAAAAF AEQAbwBjAHUAbQBlAG4AdABTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEA dABpAG8AbgAAAAAAAAAAAAAAOAACAf///////////////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAEAAAAAAAAAEAQwBvAG0A cABPAGIAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAASAAIBAQAAAAYAAAD/////AAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoAAAAAAAAATwBiAGoAZQBjAHQAUABv AG8AbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAABYAAQD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAIAcaStc wcgBgBxpK1zByAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEAAAD+//////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// ////////////////////////////////////////////AQD+/wMKAAD///// BgkCAAAAAADAAAAAAAAARhgAAABNaWNyb3NvZnQgV29yZCBEb2N1bWVudAAK AAAATVNXb3JkRG9jABAAAABXb3JkLkRvY3VtZW50LjgA9DmycQAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAA= ------=_Part_16386_13244656.1212052453443-- From owner-xfs@oss.sgi.com Thu May 29 02:58:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 02:58:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4T9wc66021352 for ; Thu, 29 May 2008 02:58:39 -0700 X-ASG-Debug-ID: 1212055169-1a9c01160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pasmtpB.tele.dk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 38B7D1751EDF for ; Thu, 29 May 2008 02:59:29 -0700 (PDT) Received: from pasmtpB.tele.dk (pasmtpb.tele.dk [80.160.77.98]) by cuda.sgi.com with ESMTP id 5RIn2wqlmV6fvHlq for ; Thu, 29 May 2008 02:59:29 -0700 (PDT) Received: from redeeman.kaspersandberg.com (kaspersandberg.com [80.164.32.14]) by pasmtpB.tele.dk (Postfix) with ESMTP id 9B315E30106; Thu, 29 May 2008 11:59:28 +0200 (CEST) X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) From: Kasper Sandberg To: Justin Piszcz Cc: Chris Snook , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com In-Reply-To: References: <483D7CE8.4000600@redhat.com> <483DB0EC.3090403@redhat.com> Content-Type: text/plain Date: Thu, 29 May 2008 11:57:30 +0200 Message-Id: <1212055050.25169.33.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.4.0 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: pasmtpb.tele.dk[80.160.77.98] X-Barracuda-Start-Time: 1212055170 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.1, rules version 3.1.51750 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16165 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: lkml@metanurb.dk Precedence: bulk X-list: xfs On Wed, 2008-05-28 at 15:27 -0400, Justin Piszcz wrote: > > On Wed, 28 May 2008, Chris Snook wrote: > > > Justin Piszcz wrote: > >> > >> > >> On Wed, 28 May 2008, Chris Snook wrote: > >> > >>> Justin Piszcz wrote: > >>>> Hardware: > >>>> > >>> Given that one of the greatest benefits of NCQ/TCQ is with parity RAID, > >>> I'd be fascinated to see how enabling NCQ changes your results. Of > >>> course, you'd want to use a single SATA controller with a known good NCQ > >>> implementation, and hard drives known to not do stupid things like disable > >>> readahead when NCQ is enabled. > >> Only/usually on multi-threaded jobs/tasks, yes? > > > > Generally, yes, but there's caching and readahead at various layers in > > software that can expose the benefit on certain single-threaded workloads as > > well. > > > >> Also, I turn off NCQ on all of my hosts that has it enabled by default > >> because > >> there are many bugs that occur when NCQ is on, they are working on it in > >> the > >> libata layer but IMO it is not safe at all for running SATA disks w/NCQ as > >> with it on I have seen drives drop out of the array (with it off, no > >> problems). > >> > > > > Are you using SATA drives with RAID-optimized firmware? Most SATA > > manufacturers have variants of their drives for a few dollars more that have > > firmware that provides bounded latency for error recovery operations, for > > precisely this reason. > I see--however, as I understood it there were bugs utilizing NCQ in libata? You wouldnt happen to have some more information about this? i havent personally had problems yet, but i havent used it for very long - but since it comes activated by DEFAULT, i would assume it to be relatively stable? > > But FYI-- > In this test, they were regular SATA drives, not special raid-ones (RE2,etc). > > Thanks for the info! > > Justin. > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ From owner-xfs@oss.sgi.com Thu May 29 03:20:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 03:20:21 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=AWL,BAYES_50,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TAKHs2022886 for ; Thu, 29 May 2008 03:20:17 -0700 X-ASG-Debug-ID: 1212056467-5164023b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server.dwo.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 73D6D1CA6D0 for ; Thu, 29 May 2008 03:21:07 -0700 (PDT) Received: from server.dwo.hu (server.dwo.hu [87.229.110.63]) by cuda.sgi.com with ESMTP id HlTfqxF6H0I8Dkba for ; Thu, 29 May 2008 03:21:07 -0700 (PDT) Received: from catv54033e89.pool.t-online.hu ([84.3.62.137] helo=HvDCorps) by server.dwo.hu with esmtpa (Exim 4.50) id 1K1fPM-000OBz-3t; Thu, 29 May 2008 12:30:56 +0200 From: =?iso-8859-2?Q?Husz=E1r_Viktor_D=E9nes?= To: "'Emmanuel Florac'" , X-ASG-Orig-Subj: RE: free space problem Subject: RE: free space problem Date: Thu, 29 May 2008 12:20:49 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" X-Mailer: Microsoft Office Outlook, Build 11.0.6353 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 Thread-Index: AciTBIKUEFLLtiLZSOCI0q2Yk5I6iAucKIcw In-Reply-To: <20080331093951.100ec125@galadriel.home> X-Barracuda-Connect: server.dwo.hu[87.229.110.63] X-Barracuda-Start-Time: 1212056468 Message-Id: <20080529102107.73D6D1CA6D0@cuda.sgi.com> 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.72 X-Barracuda-Spam-Status: No, SCORE=-0.72 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51751 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4TAKHs2022889 X-archive-position: 16166 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hvd@dwo.hu Precedence: bulk X-list: xfs Okay guys, we figured out what is the real problem with the xfs, I just need your help now. Currently our server has an 880448 number as icount, which we figured out like this: xfs_db -r -c sb -c p /dev/a/a | egrep icount\|ifree icount = 880448 ifree = 0 although df -i sates this: df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/md0 5.3M 301K 5.0M 6% / tmpfs 2.0M 5 2.0M 1% /lib/init/rw udev 2.0M 475 2.0M 1% /dev tmpfs 2.0M 1 2.0M 1% /dev/shm /dev/mapper/a-a 60M 860K 59M 2% /var/www/users If we delete a file ifree is going to be 1. if we delete 200 files, ifree becomes 200 so there is an obvious relationship here. If ifree is 0, we can not upload anymore. So the question is: how can we increase the icount without formatting the partition? Please help!! Thank you in advance, Viktor -----Original Message----- From: Emmanuel Florac [mailto:eflorac@intellique.com] Sent: Monday, March 31, 2008 9:40 AM To: Huszár Viktor Dénes; xfs@oss.sgi.com Subject: Re: free space problem Le Mon, 31 Mar 2008 02:31:16 +0200 vous écriviez: > There is nothing extraordinary in it, you can see umount-mount and > that it was mounted after all xfs activity (check, repair, db). Then maybe you simply ran out of inodes. It's common if you have lots of small files. There is a way to increase the number of inodes but I don't remember it right now. -- -------------------------------------------------- Emmanuel Florac www.intellique.com -------------------------------------------------- __________ Information from ESET NOD32 Antivirus, version of virus signature database 2986 (20080331) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3143 (20080529) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com From owner-xfs@oss.sgi.com Thu May 29 03:28:32 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 03:28:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TASWnm023502 for ; Thu, 29 May 2008 03:28:32 -0700 X-ASG-Debug-ID: 1212056964-4a0102f50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1D5AF1CA4E3 for ; Thu, 29 May 2008 03:29:24 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id D94twDmS2fZEobjn for ; Thu, 29 May 2008 03:29:24 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 7163817F565; Thu, 29 May 2008 12:29:23 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 32D9617F559; Thu, 29 May 2008 12:29:22 +0200 (CEST) Date: Thu, 29 May 2008 12:29:25 +0200 From: Emmanuel Florac To: =?ISO-8859-1?Q?Husz=E1r?= Viktor =?ISO-8859-1?Q?D=E9nes?= Cc: X-ASG-Orig-Subj: Re: free space problem Subject: Re: free space problem Message-ID: <20080529122925.159ddb34@harpe.intellique.com> In-Reply-To: <20080529102107.73D6D1CA6D0@cuda.sgi.com> References: <20080331093951.100ec125@galadriel.home> <20080529102107.73D6D1CA6D0@cuda.sgi.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1212056965 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51751 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4TASXnm023504 X-archive-position: 16167 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Thu, 29 May 2008 12:20:49 +0200 Huszár Viktor Dénes écrivait: > So the question is: how can we increase the icount without formatting > the partition? Is it mounted with the inode64 option? -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Thu May 29 03:54:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 03:54:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TAsFu8025111 for ; Thu, 29 May 2008 03:54:15 -0700 X-ASG-Debug-ID: 1212058506-625100380000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 91B7EC0907E for ; Thu, 29 May 2008 03:55:07 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id GrEN8kVb8u0XZeHR for ; Thu, 29 May 2008 03:55:07 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id 34FDE17F537; Thu, 29 May 2008 12:55:06 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id F03E717F52C; Thu, 29 May 2008 12:55:05 +0200 (CEST) Date: Thu, 29 May 2008 12:55:09 +0200 From: Emmanuel Florac To: Cc: =?ISO-8859-1?Q?Husz=E1r?= Viktor =?ISO-8859-1?Q?D=E9nes?= X-ASG-Orig-Subj: Re: free space problem Subject: Re: free space problem Message-ID: <20080529125509.136aa653@harpe.intellique.com> In-Reply-To: <20080529122925.159ddb34@harpe.intellique.com> References: <20080331093951.100ec125@galadriel.home> <20080529102107.73D6D1CA6D0@cuda.sgi.com> <20080529122925.159ddb34@harpe.intellique.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1212058507 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51753 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4TAsFu8025113 X-archive-position: 16168 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Thu, 29 May 2008 12:29:25 +0200 Emmanuel Florac écrivait: > Is it mounted with the inode64 option? You should try it then. You must unmount it and remount it for this to take effect. Either add "inode64" to the option line in /etc/fstab, or use mount -t xfs -o inode64 /some/device /some/mountpoint -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Thu May 29 04:35:49 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 04:35:54 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TBZkZ3001101 for ; Thu, 29 May 2008 04:35:49 -0700 X-ASG-Debug-ID: 1212060994-276a03c30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lxorguk.ukuu.org.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EEAC11B98682 for ; Thu, 29 May 2008 04:36:38 -0700 (PDT) Received: from lxorguk.ukuu.org.uk (earthlight.etchedpixels.co.uk [81.2.110.250]) by cuda.sgi.com with ESMTP id mEzQk6t9bHGHA2p3 for ; Thu, 29 May 2008 04:36:38 -0700 (PDT) Received: from core (localhost.localdomain [127.0.0.1]) by lxorguk.ukuu.org.uk (8.14.2/8.14.2) with ESMTP id m4TBMO4q009378; Thu, 29 May 2008 12:22:24 +0100 Date: Thu, 29 May 2008 12:22:23 +0100 From: Alan Cox To: Bill Davidsen Cc: Jens =?UTF-8?B?QsOkY2ttYW4=?= , Justin Piszcz , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Message-ID: <20080529122223.462bf396@core> In-Reply-To: <483DE40D.8090608@tmr.com> References: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> <20080528195752.0cdcbc6d@core> <483DE40D.8090608@tmr.com> X-Mailer: Claws Mail 3.3.1 (GTK+ 2.12.5; x86_64-redhat-linux-gnu) Organization: Red Hat UK Cyf., Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, Y Deyrnas Gyfunol. Cofrestrwyd yng Nghymru a Lloegr o'r rhif cofrestru 3798903 Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Barracuda-Connect: earthlight.etchedpixels.co.uk[81.2.110.250] X-Barracuda-Start-Time: 1212060998 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.1, rules version 3.1.51756 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16169 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: alan@lxorguk.ukuu.org.uk Precedence: bulk X-list: xfs > I really don't think that's any part of the issue, the same memory and > bridge went 4-5x faster in other read cases. The truth is that the > raid-1 performance is really bad, and it's the code causing it AFAIK. If > you track the actual io it seems to read one drive at a time, in order, > without overlap. Make sure the readahead is set to be a fair bit over the stripe size if you are doing bulk data tests for a single file. (Or indeed in the real world for that specific case ;)) From owner-xfs@oss.sgi.com Thu May 29 05:38:29 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 05:38:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TCcS4o004617 for ; Thu, 29 May 2008 05:38:29 -0700 X-ASG-Debug-ID: 1212064759-79f500f10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 47DC07912AB; Thu, 29 May 2008 05:39:19 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id bfoKG0AM75OjOdS4; Thu, 29 May 2008 05:39:19 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4TCdBOc032068 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Thu, 29 May 2008 14:39:11 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4TCdAf5032066; Thu, 29 May 2008 14:39:10 +0200 Date: Thu, 29 May 2008 14:39:10 +0200 From: Christoph Hellwig To: Timothy Shimmin Cc: Christoph Hellwig , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] use generic_*xattr routines Subject: Re: [PATCH] use generic_*xattr routines Message-ID: <20080529123910.GA30874@lst.de> References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> <483A15CE.9060409@sgi.com> <20080526053759.GA17825@lst.de> <483BE788.4050504@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <483BE788.4050504@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1212064761 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.1, rules version 3.1.51760 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16170 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Tue, May 27, 2008 at 08:50:48PM +1000, Timothy Shimmin wrote: > > - the callback is supplied by the xfs_attr_list caller, not set based > > on options > > Oh, okay. For example, instead of setting the flags to ATTR_KERNOVAL > such as in xfs_vn_listxattr when size is 0, one could just set the callback > to xfs_attr_kern_list_sizes and pass it in etc... Yes. I have an initial patch that goes directly to xfs_attr_list_int from xfs_xattr.c and kills most of the ATTR_KERN flags. It's a quite nice cleanup already. Next step will be to convert dmapi to use it's own callback aswell. This will be an even bigger cleanup as put_listent gets the xattr value aswell and we can kill the additional xfs_attr_get calls, making this code simpler and more efficient. > > - there will be an opaque object supplied to xfs_attr_list that is to > > be used by put_listent so that we don't have to pass down > > implementation-specific arguments directly. > > > > Ok. > So instead of overloading fields in xfs_attr_list_context_t, > you'll pass down a void* argument or some such for callback specific data. I've started looking at this and after some investigattion I think we should just pass the xfs_inode directly to all the functions and then a void parameter, yes. We'll need to find a solution for the seen_enough paramter, but I think this could be handled similar to filldir. There's also some functions directly touching the attr cursor which seems solveable, too. > > I'd also like to move the attrlist_cursor_kern_t into this callback > > opaque context because it doesn't make sense for the normal xattr API, > > but I'll have to see if that's actually feasible. > > BTW, the cursor stuff is a bit flawed. Like the dir1 code (I believe), > if from userspace you use the cursor and modifications happen to the EAs > (add or removal) between calls, > we can end up repeating elements in the list or miss some. > We don't preserve the position and we can compact the data etc. Yes, I think this whole cursor is a rather bad idea. But given that it's used by xfsdump we can't easily get rid of it. From owner-xfs@oss.sgi.com Thu May 29 06:25:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 06:25:37 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=AWL,BAYES_50,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TDPW56008049 for ; Thu, 29 May 2008 06:25:32 -0700 X-ASG-Debug-ID: 1212067584-08e300600000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server.dwo.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E3CDCC0D418 for ; Thu, 29 May 2008 06:26:24 -0700 (PDT) Received: from server.dwo.hu (server.dwo.hu [87.229.110.63]) by cuda.sgi.com with ESMTP id ci9g3ELOcUmWjRGF for ; Thu, 29 May 2008 06:26:24 -0700 (PDT) Received: from [87.229.110.93] (helo=HvDCorps) by server.dwo.hu with esmtpa (Exim 4.50) id 1K1iIm-0002k5-Hq; Thu, 29 May 2008 15:36:20 +0200 From: =?iso-8859-2?Q?Husz=E1r_Viktor_D=E9nes?= To: "'Emmanuel Florac'" , X-ASG-Orig-Subj: RE: free space problem Subject: RE: free space problem Date: Thu, 29 May 2008 15:26:16 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" X-Mailer: Microsoft Office Outlook, Build 11.0.6353 Thread-Index: AcjBe+D+ytoQ2OsrR+CeUIMbP8CKiQAE1lrA In-Reply-To: <20080529125509.136aa653@harpe.intellique.com> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-Barracuda-Connect: server.dwo.hu[87.229.110.63] X-Barracuda-Start-Time: 1212067584 Message-Id: <20080529132624.E3CDCC0D418@cuda.sgi.com> 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.72 X-Barracuda-Spam-Status: No, SCORE=-0.72 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51763 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4TDPX56008051 X-archive-position: 16171 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hvd@dwo.hu Precedence: bulk X-list: xfs YES! Finally the problem is solved! Thank you Emmanuel and everyone else! After adding inode64 to the mount option [only umount and mount worked, with remount it didn't] it works. Although the icount and ifree numbers have not changed, we can write to the disk. Hope this will help anyone who encounters this problem. In the xfs man and debian docs we could not find anything about this inode64, so thank you once again for the help!!!! Viktor -----Original Message----- From: Emmanuel Florac [mailto:eflorac@intellique.com] Sent: Thursday, May 29, 2008 12:55 PM To: xfs@oss.sgi.com Cc: Huszár Viktor Dénes Subject: Re: free space problem Le Thu, 29 May 2008 12:29:25 +0200 Emmanuel Florac écrivait: > Is it mounted with the inode64 option? You should try it then. You must unmount it and remount it for this to take effect. Either add "inode64" to the option line in /etc/fstab, or use mount -t xfs -o inode64 /some/device /some/mountpoint -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- __________ Information from ESET NOD32 Antivirus, version of virus signature database 3143 (20080529) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3143 (20080529) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com From owner-xfs@oss.sgi.com Thu May 29 06:29:22 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 06:29:25 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TDTMI8008591 for ; Thu, 29 May 2008 06:29:22 -0700 X-ASG-Debug-ID: 1212067812-3284005e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 641761751889 for ; Thu, 29 May 2008 06:30:12 -0700 (PDT) Received: from smtp8-g19.free.fr (smtp8-g19.free.fr [212.27.42.65]) by cuda.sgi.com with ESMTP id Nn3PGLUmdN1xg2HF for ; Thu, 29 May 2008 06:30:12 -0700 (PDT) Received: from smtp8-g19.free.fr (localhost [127.0.0.1]) by smtp8-g19.free.fr (Postfix) with ESMTP id AC8BA17F567; Thu, 29 May 2008 15:30:11 +0200 (CEST) Received: from harpe.intellique.com (labo.djinux.com [82.225.196.72]) by smtp8-g19.free.fr (Postfix) with ESMTP id 70F3417F51C; Thu, 29 May 2008 15:30:11 +0200 (CEST) Date: Thu, 29 May 2008 15:30:16 +0200 From: Emmanuel Florac To: =?ISO-8859-1?Q?Husz=E1r?= Viktor =?ISO-8859-1?Q?D=E9nes?= Cc: X-ASG-Orig-Subj: Re: free space problem Subject: Re: free space problem Message-ID: <20080529153016.1654a5d0@harpe.intellique.com> In-Reply-To: <20080529132624.19286105D9@mailwash5.pair.com> References: <20080529125509.136aa653@harpe.intellique.com> <20080529132624.19286105D9@mailwash5.pair.com> Organization: Intellique X-Mailer: Claws Mail 3.0.2 (GTK+ 2.12.9; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Barracuda-Connect: smtp8-g19.free.fr[212.27.42.65] X-Barracuda-Start-Time: 1212067814 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51764 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4TDTMI8008596 X-archive-position: 16172 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: eflorac@intellique.com Precedence: bulk X-list: xfs Le Thu, 29 May 2008 15:26:16 +0200 Huszár Viktor Dénes écrivait: > Hope this will help anyone who encounters this problem. In the xfs > man and debian docs we could not find anything about this inode64, so > thank you once again for the help!!!! I had this same problem 2 weeks ago, that's why I remember clearly what to do :) -- ---------------------------------------- Emmanuel Florac | Intellique ---------------------------------------- From owner-xfs@oss.sgi.com Thu May 29 06:47:52 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 06:47:55 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TDlpQQ010229 for ; Thu, 29 May 2008 06:47:52 -0700 X-ASG-Debug-ID: 1212068923-7a0c03480000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sargon.lncsa.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4C5171CB3E0 for ; Thu, 29 May 2008 06:48:43 -0700 (PDT) Received: from sargon.lncsa.com (sargon.lncsa.com [212.99.8.251]) by cuda.sgi.com with ESMTP id 6waRAXrv2sV2m8N1 for ; Thu, 29 May 2008 06:48:43 -0700 (PDT) Received: from localhost (localhost.localdomain [127.0.0.1]) by sargon.lncsa.com (Postfix) with ESMTP id 3A3693065E16 for ; Thu, 29 May 2008 15:48:42 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at lncsa.com Received: from sargon.lncsa.com ([127.0.0.1]) by localhost (sargon.lncsa.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TIQxwNQ0w30q for ; Thu, 29 May 2008 15:48:42 +0200 (CEST) Received: from zenon.apartia.fr (zenon.apartia.fr [10.0.3.1]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "zenon.apartia.fr", Issuer "ca.apartia.fr" (verified OK)) by sargon.lncsa.com (Postfix) with ESMTP id 0B40B302A203 for ; Thu, 29 May 2008 15:48:42 +0200 (CEST) Date: Thu, 29 May 2008 15:48:38 +0200 From: Louis-David Mitterrand To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS internal error XFS_WANT_CORRUPTED_GOTO Subject: XFS internal error XFS_WANT_CORRUPTED_GOTO Message-ID: <20080529134837.GA4241@apartia.fr> Mail-Followup-To: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: sargon.lncsa.com[212.99.8.251] X-Barracuda-Start-Time: 1212068924 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.1, rules version 3.1.51766 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 16173 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: vindex+lists-xfs@apartia.org Precedence: bulk X-list: xfs Hi, I found this in a server's dmesg: XFS internal error XFS_WANT_CORRUPTED_GOTO at line 4518 of file fs/xfs/xfs_bmap.c. Caller 0xffffffff803fc46b Pid: 28612, comm: rsync Not tainted 2.6.25.4-1-pyrrhus64 #1 Call Trace: [] xfs_iread_extents+0xac/0xc8 [] xfs_bmap_read_extents+0x328/0x34b [] xfs_iread_extents+0xac/0xc8 [] xfs_bmap_last_offset+0x91/0xd5 [] xfs_dir2_isblock+0x19/0x4a [] xfs_da_brelse+0x70/0x9d [] xfs_dir_lookup+0xb9/0x12b [] xfs_attr_leaf_get+0x76/0x99 [] __down_write_nested+0x12/0x93 [] xfs_dir_lookup_int+0x2c/0xc3 [] xfs_ilock+0x4c/0x70 [] xfs_lookup+0x44/0x70 [] xfs_vn_lookup+0x29/0x5f [] do_lookup+0xc5/0x1af [] __link_path_walk+0x874/0xd1e [] file_update_time+0x30/0xd4 [] path_walk+0x5d/0xba [] do_path_lookup+0x14c/0x16f [] getname+0x140/0x181 [] __user_walk_fd+0x37/0x53 [] vfs_lstat_fd+0x18/0x47 [] hrtick_set+0x88/0xf6 [] thread_return+0x68/0xac [] sys_newlstat+0x19/0x31 [] sys_write+0x45/0x6e [] system_call_after_swapgs+0x7b/0x80 From owner-xfs@oss.sgi.com Thu May 29 07:57:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 07:57:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TEvBNI015041 for ; Thu, 29 May 2008 07:57:12 -0700 X-ASG-Debug-ID: 1212073082-3287021a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ipmail04.adl2.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 804DC17533DD for ; Thu, 29 May 2008 07:58:02 -0700 (PDT) Received: from ipmail04.adl2.internode.on.net (ipmail04.adl2.internode.on.net [203.16.214.57]) by cuda.sgi.com with ESMTP id rC8A0cyraTyZjEyG for ; Thu, 29 May 2008 07:58:02 -0700 (PDT) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEADhgPkh5LFOM/2dsb2JhbACvdg X-IronPort-AV: E=Sophos;i="4.27,561,1204464600"; d="scan'208";a="122612551" Received: from ppp121-44-83-140.lns10.syd6.internode.on.net (HELO disturbed) ([121.44.83.140]) by ipmail04.adl2.internode.on.net with ESMTP; 30 May 2008 00:28:00 +0930 Received: from dave by disturbed with local (Exim 4.69) (envelope-from ) id 1K1jZn-0005f8-BZ; Fri, 30 May 2008 00:57:59 +1000 Date: Fri, 30 May 2008 00:57:59 +1000 From: Dave Chinner To: =?iso-8859-1?Q?Husz=E1r_Viktor_D=E9nes?= Cc: "'Emmanuel Florac'" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: free space problem Subject: Re: free space problem Message-ID: <20080529145759.GA5134@disturbed> Mail-Followup-To: =?iso-8859-1?Q?Husz=E1r_Viktor_D=E9nes?= , 'Emmanuel Florac' , xfs@oss.sgi.com References: <20080529125509.136aa653@harpe.intellique.com> <20080529132624.E3CDCC0D418@cuda.sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080529132624.E3CDCC0D418@cuda.sgi.com> User-Agent: Mutt/1.5.17+20080114 (2008-01-14) X-Barracuda-Connect: ipmail04.adl2.internode.on.net[203.16.214.57] X-Barracuda-Start-Time: 1212073083 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=MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51770 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16174 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: david@fromorbit.com Precedence: bulk X-list: xfs On Thu, May 29, 2008 at 03:26:16PM +0200, Huszár Viktor Dénes wrote: > YES! Finally the problem is solved! Thank you Emmanuel and everyone else! > After adding inode64 to the mount option [only umount and mount worked, with > remount it didn't] it works. Although the icount and ifree numbers have not > changed, we can write to the disk. > > Hope this will help anyone who encounters this problem. In the xfs man and > debian docs we could not find anything about this inode64, so thank you once > again for the help!!!! I can think of two places off the top of my head where it is documented: Documentation/filesystems/xfs.txt in your local kernel source tree: inode64 Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is provided for backwards compatibility, but causes problems for backup applications that cannot handle large inode numbers. $ man 8 mount inode64 Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is provided for backwards compatibility, but causes problems for backup applications that cannot handle large inode numbers. Cheers, Dave. -- Dave Chinner david@fromorbit.com From owner-xfs@oss.sgi.com Thu May 29 10:04:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 10:05:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TH4wpT027311 for ; Thu, 29 May 2008 10:04:59 -0700 X-ASG-Debug-ID: 1212080749-180600a00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from yx-out-1718.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 46D09C11E0F for ; Thu, 29 May 2008 10:05:49 -0700 (PDT) Received: from yx-out-1718.google.com (yx-out-1718.google.com [74.125.44.156]) by cuda.sgi.com with ESMTP id 8s9lNuDh3GMZPKDJ for ; Thu, 29 May 2008 10:05:49 -0700 (PDT) Received: by yx-out-1718.google.com with SMTP id 36so310197yxh.32 for ; Thu, 29 May 2008 10:05:49 -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:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=nMOFZZDSxsbmdEBFUQh2kHGyC2Km0nDRI3JUoDBOM+I=; b=B0cu1AssYICymEIFMflBIhwsvcTipu5u+L9Xl8MAG11jfM8QaSs3Zq1N7qbR76SKuXIhnBsWfp0Foz1yvdsuMg49KxHWh5lXVx8ojjLnc3Y4sCkRd92EhFGerIuiTGTg2CEVnGUCcKDz8nz4Aqd2UdPznFaPZLBab130RuEL29k= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=HjDmBRkuL00Y6EA9G1zJ+9IUkQks83/caMF83WOvMxWm+MFLJ9ImU8M5/Xdz2neRDsn4Bw1AvCThpOgx/NNfp+4fxA7RlfVqQmo8Y3kuIxmCY9W+PpAIG0+rlvS9xhC6euBx5vCzqsR8M1f/iZrTFTU7K4UTr5FWPQFaHFlDex4= Received: by 10.142.80.14 with SMTP id d14mr1694788wfb.62.1212080748713; Thu, 29 May 2008 10:05:48 -0700 (PDT) Received: by 10.142.103.1 with HTTP; Thu, 29 May 2008 10:05:48 -0700 (PDT) Message-ID: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> Date: Thu, 29 May 2008 13:05:48 -0400 From: "Spam Magnet" To: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS: SB validate failed Subject: XFS: SB validate failed MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Barracuda-Connect: yx-out-1718.google.com[74.125.44.156] X-Barracuda-Start-Time: 1212080750 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.1, rules version 3.1.51779 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16175 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs Hello there :) I have a Iomega Jaz cartrdige which seems to be formatted in xfs under Irix 6.5. When I insert the cartridge in a drive attached to an Octane machine (running IRIX 6.5) I get an error message saying that the drive could not be mounted: The file system on device: /dev/dsk/dks1d3s7 cannot be mounted I connected the Jaz drive to a Linux box using a SCSI-to-USB adapter. When I do a fdisk I get: $ sudo fdisk -l /dev/sdb Disk /dev/sdb (SGI disk label): 33 heads, 62 sectors, 1022 cylinders Units = cylinders of 2046 * 512 bytes ----- partitions ----- Pt# Device Info Start End Sectors Id System 8: /dev/sdb1 2 1021 2087936 a SGI xfs 9: /dev/sdb2 0 1 3072 0 SGI volhdr 11: /dev/sdb3 0 1021 2091008 6 SGI volume ----- Bootinfo ----- Bootfile: /unix ----- Directory Entries ----- 0: sgilabel sector 3 size 512 But trying to mount the device fails: $ sudo mount -t xfs /dev/sdb /mnt $ sudo mount -t xfs /dev/sdb8 /mnt $ sudo mount -t xfs /dev/sdb11 /mnt Checking the log messages, I get: [6815277.617579] XFS: bad magic number [6815277.617587] XFS: SB validate failed (I found similar problems reported here http://osdir.com/ml/security.forensics/2006-04/msg00025.html) # /usr/sysadm/privbin/getDiskParts -d dks1d3vol 7:10:3072:2087936;8:0:0:3072;10:6:0:2091008; I also tried to use xfs_check and xfs_repair. xfs_check crashes: /usr/sbin/xfs_check: line 28: 25216 Segmentation fault (core dumped) xfs_db$DBOPTS -i -p xfs_check -c "check$OPTS" $1 and xfs_repair reports that: bad primary superblock - bad magic number !!! attempting to find secondary superblock Sorry, could not find valid secondary superblock Exiting now. My questions: 1-Is this related to the information stated in FAQ regarding XLV support or v2 directories under Irix ? 2-Do I need to be concerned about byte ordering when it comes to how the partition table info are stored on my Jaz cartridge ? 3-If this is a corrupt partition problem, would you suggest that I attempt to fix it under Irix or the Linux xfs tools will be sufficient ? I'd really appreciate any input that can help me resolve this issue. thanks in advance. From owner-xfs@oss.sgi.com Thu May 29 10:19:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 10:19:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4THJ8Vc028908 for ; Thu, 29 May 2008 10:19:09 -0700 X-ASG-Debug-ID: 1212081600-366602110000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 260301754261 for ; Thu, 29 May 2008 10:20:00 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id QHGj6QIEKotriACA for ; Thu, 29 May 2008 10:20:00 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 0D55198D150; Thu, 29 May 2008 12:19:58 -0500 (CDT) Message-ID: <483EE5BD.8020407@sandeen.net> Date: Thu, 29 May 2008 12:19:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Spam Magnet CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> In-Reply-To: <3607657a0805291005k457791cej1c5f867da0f95965@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: 1212081601 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.1, rules version 3.1.51780 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16176 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Spam Magnet wrote: > Hello there :) > > I have a Iomega Jaz cartrdige which seems to be formatted in xfs under > Irix 6.5. > When I insert the cartridge in a drive attached to an Octane machine > (running IRIX 6.5) I get an error message saying that the drive could not > be mounted: > The file system on device: /dev/dsk/dks1d3s7 cannot be mounted > > I connected the Jaz drive to a Linux box using a SCSI-to-USB > adapter. When I do a fdisk I get: > > $ sudo fdisk -l /dev/sdb > > Disk /dev/sdb (SGI disk label): 33 heads, 62 sectors, 1022 cylinders > Units = cylinders of 2046 * 512 bytes > > ----- partitions ----- > Pt# Device Info Start End Sectors Id System > 8: /dev/sdb1 2 1021 2087936 a SGI xfs > 9: /dev/sdb2 0 1 3072 0 SGI volhdr > 11: /dev/sdb3 0 1021 2091008 6 SGI volume I can't remember how sgi disklabels work under linux; does this show up as /dev/sdb8 /dev/sdb9 /dev/sdb11 or as /dev/sdb1 /dev/sdb2 /dev/sdb3 in linux? Look at /proc/partitions... point file -s at /dev/sdb$WHATEVER see if any of them say "xfs" and try to mount that :) -Eric From owner-xfs@oss.sgi.com Thu May 29 10:36:46 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 10:36:48 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_20,MIME_8BIT_HEADER autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4THajng030116 for ; Thu, 29 May 2008 10:36:46 -0700 X-ASG-Debug-ID: 1212082657-1367020d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server.dwo.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E5DFE11A00C6 for ; Thu, 29 May 2008 10:37:37 -0700 (PDT) Received: from server.dwo.hu (server.dwo.hu [87.229.110.63]) by cuda.sgi.com with ESMTP id nLp8HUyjv63L7muY for ; Thu, 29 May 2008 10:37:37 -0700 (PDT) Received: from [87.229.110.93] (helo=HvDCorps) by server.dwo.hu with esmtpa (Exim 4.50) id 1K1mDh-00095X-C0; Thu, 29 May 2008 19:47:21 +0200 From: =?iso-8859-2?Q?Husz=E1r_Viktor_D=E9nes?= To: "'Dave Chinner'" Cc: "'Emmanuel Florac'" , X-ASG-Orig-Subj: RE: free space problem Subject: RE: free space problem Date: Thu, 29 May 2008 19:37:06 +0200 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-2" X-Mailer: Microsoft Office Outlook, Build 11.0.6353 In-Reply-To: <20080529145759.GA5134@disturbed> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 Thread-Index: AcjBnd6tHCgybJnBRiyreftwEHh7gwAFIkvg X-Barracuda-Connect: server.dwo.hu[87.229.110.63] X-Barracuda-Start-Time: 1212082657 Message-Id: <20080529173737.E5DFE11A00C6@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.0010 1.0000 -2.0146 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.71 X-Barracuda-Spam-Status: No, SCORE=-0.71 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MARKETING_SUBJECT, MSGID_FROM_MTA_ID X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51781 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.70 MSGID_FROM_MTA_ID Message-Id for external message added locally X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by oss.sgi.com id m4THakng030118 X-archive-position: 16177 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hvd@dwo.hu Precedence: bulk X-list: xfs Thank you, now I found it as well. I cant believe I missed this! Emmanuel :) we solved the problem temporarily by increasing the free space to 100 GB, however, we had no idea it has anything to do with the number of icount or ifree. Dave, thanks as well. Vic -----Original Message----- From: Dave Chinner [mailto:david@fromorbit.com] Sent: Thursday, May 29, 2008 4:58 PM To: Huszár Viktor Dénes Cc: 'Emmanuel Florac'; xfs@oss.sgi.com Subject: Re: free space problem On Thu, May 29, 2008 at 03:26:16PM +0200, Huszár Viktor Dénes wrote: > YES! Finally the problem is solved! Thank you Emmanuel and everyone else! > After adding inode64 to the mount option [only umount and mount worked, with > remount it didn't] it works. Although the icount and ifree numbers have not > changed, we can write to the disk. > > Hope this will help anyone who encounters this problem. In the xfs man and > debian docs we could not find anything about this inode64, so thank you once > again for the help!!!! I can think of two places off the top of my head where it is documented: Documentation/filesystems/xfs.txt in your local kernel source tree: inode64 Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is provided for backwards compatibility, but causes problems for backup applications that cannot handle large inode numbers. $ man 8 mount inode64 Indicates that XFS is allowed to create inodes at any location in the filesystem, including those which will result in inode numbers occupying more than 32 bits of significance. This is provided for backwards compatibility, but causes problems for backup applications that cannot handle large inode numbers. Cheers, Dave. -- Dave Chinner david@fromorbit.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3145 (20080529) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3145 (20080529) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com From owner-xfs@oss.sgi.com Thu May 29 12:55:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 12:55:18 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_34, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TJt8c9009954 for ; Thu, 29 May 2008 12:55:11 -0700 X-ASG-Debug-ID: 1212090960-7241039c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BC6001757DC7 for ; Thu, 29 May 2008 12:56:00 -0700 (PDT) Received: from rv-out-0708.google.com (rv-out-0708.google.com [209.85.198.242]) by cuda.sgi.com with ESMTP id LFAoOEng84efaXa6 for ; Thu, 29 May 2008 12:56:00 -0700 (PDT) Received: by rv-out-0708.google.com with SMTP id f25so3342969rvb.32 for ; Thu, 29 May 2008 12:55:59 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=fVa2XVQXY0XkopBEBjaIDKnDyQHVetqjwoSd2D4ka2s=; b=ci0QuXlJcLV3H7LukwnPZt5IrvMp6f9yzqYk8G+xUtJI56uFKe+b7FzGrdNsNwDEBjPzWP00xNEoxLY8//z7DcAypTQpWhTnLjDDXcaE9rIM6WmD0gzkvRwwJZOtDl0f16mXtBNweC4HYLbgfYIv9FqIcdNuavD/Wppco0LfF6A= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=hSP2mb07EgqfyY41J3A9YcwBm8xBnHVM1Y8fcrXOadFxUnl7IUKpIFCUcQkAEVzw0BCMsDOHmrzOMRmlp4qR6etyyz1Uiug05/Agd/LHKI7GSuPnxGZBHeL8GNaTgJ61JjFfrayWIuwOOFABhJc3q051ZZb5Op7tu5JNGeRZDH8= Received: by 10.141.153.16 with SMTP id f16mr2460957rvo.252.1212090959252; Thu, 29 May 2008 12:55:59 -0700 (PDT) Received: by 10.141.43.7 with HTTP; Thu, 29 May 2008 12:55:59 -0700 (PDT) Message-ID: <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> Date: Thu, 29 May 2008 15:55:59 -0400 From: "Spam Magnet" To: "Eric Sandeen" X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed Cc: xfs@oss.sgi.com In-Reply-To: <483EE5BD.8020407@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> X-Barracuda-Connect: rv-out-0708.google.com[209.85.198.242] X-Barracuda-Start-Time: 1212090960 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.1, rules version 3.1.51790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16178 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs On Thu, May 29, 2008 at 1:19 PM, Eric Sandeen wrote: > Spam Magnet wrote: >> Hello there :) >> >> I have a Iomega Jaz cartrdige which seems to be formatted in xfs under >> Irix 6.5. >> When I insert the cartridge in a drive attached to an Octane machine >> (running IRIX 6.5) I get an error message saying that the drive could not >> be mounted: >> The file system on device: /dev/dsk/dks1d3s7 cannot be mounted >> >> I connected the Jaz drive to a Linux box using a SCSI-to-USB >> adapter. When I do a fdisk I get: >> >> $ sudo fdisk -l /dev/sdb >> >> Disk /dev/sdb (SGI disk label): 33 heads, 62 sectors, 1022 cylinders >> Units = cylinders of 2046 * 512 bytes >> >> ----- partitions ----- >> Pt# Device Info Start End Sectors Id System >> 8: /dev/sdb1 2 1021 2087936 a SGI xfs >> 9: /dev/sdb2 0 1 3072 0 SGI volhdr >> 11: /dev/sdb3 0 1021 2091008 6 SGI volume > > I can't remember how sgi disklabels work under linux; does this show up > as /dev/sdb8 /dev/sdb9 /dev/sdb11 or as /dev/sdb1 /dev/sdb2 /dev/sdb3 > in linux? > > Look at /proc/partitions... > > point file -s at /dev/sdb$WHATEVER > > see if any of them say "xfs" > > and try to mount that :) Thanks for your response. Linux shows them as /dev/sdb8 /dev/sdb9 and /dev/sdb11 and none of them are mountable :( To narrow down the problem, I formatted a clean, error free disk under SGI(Irix 6.5). Its partition table looks like: # prtvtoc /dev/dsk/dks1d3vol * /dev/dsk/dks1d3vol (bootfile "/unix") * 512 bytes/sector Partition Type Fs Start: sec Size: sec Mount Directory 7 xfs yes 4096 3911504 8 volhdr 0 4096 10 volume 0 3915600 Now if I connect the same disk to Linux and run fdisk I get the similar info: Disk /dev/sdb (SGI disk label): 255 heads, 63 sectors, 0 cylinders Units = sectors of 1 * 512 bytes ----- partitions ----- Pt# Device Info Start End Sectors Id System 8: /dev/sdb1 4096 3915599 3911504 a SGI xfs 9: /dev/sdb2 0 4095 4096 0 SGI volhdr 11: /dev/sdb3 0 3915599 3915600 6 SGI volume ----- Bootinfo ----- Bootfile: /unix ----- Directory Entries ----- 0: sgilabel sector 2 size 512 Again mounting /dev/sdb1 or /dev/sdb8 gives error: mount: wrong fs type, bad option, bad superblock on /dev/sdb8 and system logs: XFS: bad magic number XFS: SB validate failed So can this be related to the byte ordering or any of the other issues mentioned in the FAQ regarding xfs under Linux ? How can I figure out if my disk is using XLV or is a v2 directory ? Thanks again From owner-xfs@oss.sgi.com Thu May 29 13:01:20 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 13:01:22 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TK1KBe010547 for ; Thu, 29 May 2008 13:01:20 -0700 X-ASG-Debug-ID: 1212091332-705501670000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 983271CE0BC for ; Thu, 29 May 2008 13:02:12 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 0NdrPMmvD2YQvz86 for ; Thu, 29 May 2008 13:02:12 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id BA83398D146; Thu, 29 May 2008 15:02:11 -0500 (CDT) Message-ID: <483F0BC3.2050901@sandeen.net> Date: Thu, 29 May 2008 15:02:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Spam Magnet CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> In-Reply-To: <3607657a0805291255i59fd006fi9d6836cf528d19a6@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: 1212091332 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.1, rules version 3.1.51790 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16179 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Spam Magnet wrote: > So can this be related to the byte ordering or any of the other > issues mentioned in the FAQ regarding xfs under Linux ? > How can I figure out if my disk is using XLV or is a v2 directory ? Byte ordering is only an issue for the log replay; you'd get a message about that if it were the issue. Does file -s /dev/sdb? say that any of those things even look like an xfs filesystem? If so point xfs_db at it like: xfs_db -r -c "sb 0" -c "p" /dev/sdb that'll tell you if it has v1 dirs I think. -Eric From owner-xfs@oss.sgi.com Thu May 29 13:59:27 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 13:59:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48, RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TKxQ4X013906 for ; Thu, 29 May 2008 13:59:26 -0700 X-ASG-Debug-ID: 1212094817-3b5c008e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 0B6EF175819B for ; Thu, 29 May 2008 14:00:17 -0700 (PDT) Received: from rv-out-0708.google.com (rv-out-0708.google.com [209.85.198.249]) by cuda.sgi.com with ESMTP id eNOXVfTilAFH8NiY for ; Thu, 29 May 2008 14:00:17 -0700 (PDT) Received: by rv-out-0708.google.com with SMTP id f25so3369508rvb.32 for ; Thu, 29 May 2008 14:00:16 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=FQOL3SGtDlUniD2IEz7yeIcFnKF/HdBprvRfxqC5yn0=; b=TJNKiY9hJTnPerfR5jYr28wvsLFDuyefKnqZ909YYMe+LHAp+5n4sM17K166ZxwQmwsHVb/K9xGEYxNbNV9KL4PkY9kpW/zPp/RHZ1e/ewQdTX1egu63scd40ikHcnUlhzUIUAhKqU4YslBfsdgwBL4aoCIY+UN+BNV4NGFvky0= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=dV4SIFIXWa32VjDuWf2odSq83KVbKJo9PTbm1CFhckl9SlEYaG/HyOjvc8n2dre/k6U5Krr5W87pkbwUjsiRpfZ6nulXvcUiU9PdHOje0o8+4DcCZU/+prnOd7O8KKXm16/3yZRRGxPqz9Stzq7Gb0V+QdAUSEso3OgNbEXanjQ= Received: by 10.141.129.14 with SMTP id g14mr1679324rvn.56.1212094816694; Thu, 29 May 2008 14:00:16 -0700 (PDT) Received: by 10.141.43.7 with HTTP; Thu, 29 May 2008 14:00:16 -0700 (PDT) Message-ID: <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> Date: Thu, 29 May 2008 17:00:16 -0400 From: "Spam Magnet" To: "Eric Sandeen" X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed Cc: xfs@oss.sgi.com In-Reply-To: <483F0BC3.2050901@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> X-Barracuda-Connect: rv-out-0708.google.com[209.85.198.249] X-Barracuda-Start-Time: 1212094818 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0002 1.0000 -2.0196 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.1, rules version 3.1.51792 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16180 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs > Byte ordering is only an issue for the log replay; you'd get a message > about that if it were the issue. > > Does file -s /dev/sdb? say that any of those things even look like an > xfs filesystem? > > If so point xfs_db at it like: > > xfs_db -r -c "sb 0" -c "p" /dev/sdb > it's indeed an xfs filesystem: $ sudo file -s /dev/sdb8 /dev/sdb8: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs) And this is output of xfs_db: magicnum = 0x58465342 blocksize = 4096 dblocks = 488936 rblocks = 0 rextents = 0 uuid = bc45ebf5-b625-102c-8d9d-0800690be5b3 logstart = 262148 rootino = 128 rbmino = 129 rsumino = 130 rextsize = 16 agblocks = 61117 agcount = 8 rbmblocks = 0 logblocks = 1200 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 = 16 rextslog = 0 inprogress = 0 imax_pct = 25 icount = 64 ifree = 53 fdblocks = 486371 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 I can mount and see the content of this disk: using: mount -t xfs /dev/sdb8 /mnt But xfs_check still crashes on me :( /usr/sbin/xfs_check: line 28: 26782 Segmentation fault (core dumped) xfs_db$DBOPTS -i -p xfs_check -c "check$OPTS" $1 Will it be ok if I made a 1:1 image of my disks under Irix (using dd): $ dd if=/dev/dsk/dks1d3vol of=disk.img bs=512 conv=ignerror,sync And tried to use xfs module in Linux to mount them ? or this programs are only meant to work with actual device rather than an image file ? thanks for your patience From owner-xfs@oss.sgi.com Thu May 29 14:06:03 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 14:06:04 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_48 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TL62Rv014410 for ; Thu, 29 May 2008 14:06:03 -0700 X-ASG-Debug-ID: 1212095214-7fe600590000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 933D01CE657 for ; Thu, 29 May 2008 14:06:54 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id oOVxN7iWyOZoS4r7 for ; Thu, 29 May 2008 14:06:54 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id C0EC098D150; Thu, 29 May 2008 16:06:53 -0500 (CDT) Message-ID: <483F1AED.3010808@sandeen.net> Date: Thu, 29 May 2008 16:06:53 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Spam Magnet CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> In-Reply-To: <3607657a0805291400h3c50165lea6fbea919deed0f@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: 1212095214 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.1, rules version 3.1.51794 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16181 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Spam Magnet wrote: >> Byte ordering is only an issue for the log replay; you'd get a message >> about that if it were the issue. >> >> Does file -s /dev/sdb? say that any of those things even look like an >> xfs filesystem? >> >> If so point xfs_db at it like: >> >> xfs_db -r -c "sb 0" -c "p" /dev/sdb >> > it's indeed an xfs filesystem: > $ sudo file -s /dev/sdb8 > /dev/sdb8: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs) > ... > > I can mount and see the content of this disk: using: > mount -t xfs /dev/sdb8 /mnt oh, I thought you couldn't mount it :) > But xfs_check still crashes on me :( > /usr/sbin/xfs_check: line 28: 26782 Segmentation fault (core dumped) > xfs_db$DBOPTS -i -p xfs_check -c "check$OPTS" $1 try xfs_repair -n then maybe. Or update xfsprogs. check shouldn't segfault, regardless of the fs state. > Will it be ok if I made a 1:1 image of my disks under Irix (using dd): > > $ dd if=/dev/dsk/dks1d3vol of=disk.img bs=512 conv=ignerror,sync > > And tried to use xfs module in Linux to mount them ? or this programs > are only meant to work with actual device rather than an image file ? nah that's fine, images or disks, whichever. -Eric > thanks for your patience > From owner-xfs@oss.sgi.com Thu May 29 14:08:09 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 14:08:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TL89aK014819 for ; Thu, 29 May 2008 14:08:09 -0700 X-ASG-Debug-ID: 1212095339-2d8d00f10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lucidpixels.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D770BC17D54 for ; Thu, 29 May 2008 14:09:00 -0700 (PDT) Received: from lucidpixels.com (lucidpixels.com [75.144.35.66]) by cuda.sgi.com with ESMTP id r82NdW8Kqra8bh1C for ; Thu, 29 May 2008 14:09:00 -0700 (PDT) Received: by lucidpixels.com (Postfix, from userid 1001) id 6472F1C0000E1; Thu, 29 May 2008 17:08:59 -0400 (EDT) Date: Thu, 29 May 2008 17:08:59 -0400 (EDT) From: Justin Piszcz To: Kasper Sandberg cc: Chris Snook , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) In-Reply-To: <1212055050.25169.33.camel@localhost> Message-ID: References: <483D7CE8.4000600@redhat.com> <483DB0EC.3090403@redhat.com> <1212055050.25169.33.camel@localhost> User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Barracuda-Connect: lucidpixels.com[75.144.35.66] X-Barracuda-Start-Time: 1212095341 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.1, rules version 3.1.51795 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16182 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: jpiszcz@lucidpixels.com Precedence: bulk X-list: xfs On Thu, 29 May 2008, Kasper Sandberg wrote: > On Wed, 2008-05-28 at 15:27 -0400, Justin Piszcz wrote: >> >> On Wed, 28 May 2008, Chris Snook wrote: >> >>> Justin Piszcz wrote: >>>> >>>> >>>> On Wed, 28 May 2008, Chris Snook wrote: >>>> >>>>> Justin Piszcz wrote: >>>>>> Hardware: >>>>>> >>>>> Given that one of the greatest benefits of NCQ/TCQ is with parity RAID, >>>>> I'd be fascinated to see how enabling NCQ changes your results. Of >>>>> course, you'd want to use a single SATA controller with a known good NCQ >>>>> implementation, and hard drives known to not do stupid things like disable >>>>> readahead when NCQ is enabled. >>>> Only/usually on multi-threaded jobs/tasks, yes? >>> >>> Generally, yes, but there's caching and readahead at various layers in >>> software that can expose the benefit on certain single-threaded workloads as >>> well. >>> >>>> Also, I turn off NCQ on all of my hosts that has it enabled by default >>>> because >>>> there are many bugs that occur when NCQ is on, they are working on it in >>>> the >>>> libata layer but IMO it is not safe at all for running SATA disks w/NCQ as >>>> with it on I have seen drives drop out of the array (with it off, no >>>> problems). >>>> >>> >>> Are you using SATA drives with RAID-optimized firmware? Most SATA >>> manufacturers have variants of their drives for a few dollars more that have >>> firmware that provides bounded latency for error recovery operations, for >>> precisely this reason. >> I see--however, as I understood it there were bugs utilizing NCQ in libata? > You wouldnt happen to have some more information about this? i havent > personally had problems yet, but i havent used it for very long - but > since it comes activated by DEFAULT, i would assume it to be relatively > stable? Not off-hand, check LKML and my email address from early this year or last year and/or the ide-list. Justin. From owner-xfs@oss.sgi.com Thu May 29 14:45:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 14:45:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TLjnNR017176 for ; Thu, 29 May 2008 14:45:50 -0700 X-ASG-Debug-ID: 1212097600-4493011e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4AB241758B4A for ; Thu, 29 May 2008 14:46:40 -0700 (PDT) Received: from rv-out-0708.google.com (rv-out-0708.google.com [209.85.198.251]) by cuda.sgi.com with ESMTP id y1ViwJxzFeOMIo35 for ; Thu, 29 May 2008 14:46:40 -0700 (PDT) Received: by rv-out-0708.google.com with SMTP id f25so3383854rvb.32 for ; Thu, 29 May 2008 14:46:40 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=biGrT2jYoWJ5tv740pTBrpdWLAKHHi5RFt60O3+1x98=; b=cHftwmCV4SjhzIfFoYWyh3YTnBvD8GcuQY9RlpTvzxaycwOfGtU6M+Ndm6CQ5M1kyGcBX4syBgUr8D4KbBXwD16p8N2y7ZGF3fQYKE7EhocT+RujlAuex8dNUOM2Vxu0gftiwY4LtD73buxHe+nra/OxgL4qbwuu/WYE3KHMpeI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=bDE46Obrs4r5YJOp8YcqXx2FhYq7iqokWD1P3j+phZUD4uJ/oFb3pt9S2DF7XNTs5wrhA1GbtOyR3btlQBkFnxwmsGhr/Datfvj5rjMBYvIScLsjyCVX61Vj6j4PiNlEWoPmA/EQlfyLMTCM6b64J73kZBH97iAoIuCm9AUNMjM= Received: by 10.141.146.4 with SMTP id y4mr2568548rvn.272.1212097600550; Thu, 29 May 2008 14:46:40 -0700 (PDT) Received: by 10.141.43.7 with HTTP; Thu, 29 May 2008 14:46:40 -0700 (PDT) Message-ID: <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> Date: Thu, 29 May 2008 17:46:40 -0400 From: "Spam Magnet" To: "Eric Sandeen" X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed Cc: xfs@oss.sgi.com In-Reply-To: <483F1AED.3010808@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> X-Barracuda-Connect: rv-out-0708.google.com[209.85.198.251] X-Barracuda-Start-Time: 1212097602 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.1, rules version 3.1.51796 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16183 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs > try xfs_repair -n then maybe. Or update xfsprogs. check shouldn't > segfault, regardless of the fs state. > I updated xfsprogs to the latest version (cvs checkout) and it solved the segfault. > > nah that's fine, images or disks, whichever. > So I guess it doesn't matter if I do the image either using dd or xfsdump. I'd prefer dd since I get a lot of issues trying to compile xfsprogs under Irix. Assuming that I get an image using dd, would a simple mount command suffice to use the xfs utils ? : $ mount -t xfs -o loop disk.img /mnt Or there are some intermediate steps that I need to take in order to mount an xfs disk image file on Linux ? From owner-xfs@oss.sgi.com Thu May 29 15:19:06 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 15:19:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TMJ6dp018814 for ; Thu, 29 May 2008 15:19:06 -0700 X-ASG-Debug-ID: 1212099598-6d2b021a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1B8811CEA72 for ; Thu, 29 May 2008 15:19:58 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id rPTPu33ePT7mO6GN for ; Thu, 29 May 2008 15:19:58 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id DF5C1A9C504; Thu, 29 May 2008 17:19:57 -0500 (CDT) Message-ID: <483F2C0D.1020401@sandeen.net> Date: Thu, 29 May 2008 17:19:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Spam Magnet CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> In-Reply-To: <3607657a0805291446t79808c63l664780c1cbc3d871@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: 1212099599 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.1, rules version 3.1.51799 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16184 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Spam Magnet wrote: >> try xfs_repair -n then maybe. Or update xfsprogs. check shouldn't >> segfault, regardless of the fs state. >> > > I updated xfsprogs to the latest version (cvs checkout) and it solved > the segfault. > >> nah that's fine, images or disks, whichever. >> > > So I guess it doesn't matter if I do the image either using dd or xfsdump. > I'd prefer dd since I get a lot of issues trying to compile xfsprogs under Irix. > > Assuming that I get an image using dd, would a simple mount command suffice > to use the xfs utils ? : > $ mount -t xfs -o loop disk.img /mnt that's fine, assuming your dd was of the partition that actually held the xfs fs. -Eric From owner-xfs@oss.sgi.com Thu May 29 15:25:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 15:25:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_42,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4TMPBjp019207 for ; Thu, 29 May 2008 15:25:11 -0700 X-ASG-Debug-ID: 1212099962-3a8101f80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy2.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 93A8A1758FDE for ; Thu, 29 May 2008 15:26:03 -0700 (PDT) Received: from proxy2.bredband.net (proxy2.bredband.net [195.54.101.72]) by cuda.sgi.com with ESMTP id HZOjdE5EdqkWYGIo for ; Thu, 29 May 2008 15:26:03 -0700 (PDT) Received: from ironport.bredband.com (195.54.101.120) by proxy2.bredband.net (7.3.127) id 4811833300A93E0D for xfs@oss.sgi.com; Fri, 30 May 2008 00:26:02 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuA7AFbKPkjVctjQPGdsb2JhbACBVZBLAQEBAS0BnXo Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport1.bredband.com with ESMTP; 30 May 2008 00:26:02 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m4TMPlPj013124; Fri, 30 May 2008 00:25:56 +0200 Message-ID: <483F2D69.4080200@stesmi.com> Date: Fri, 30 May 2008 00:25:45 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Spam Magnet CC: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> In-Reply-To: <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy2.bredband.net[195.54.101.72] X-Barracuda-Start-Time: 1212099963 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.1, rules version 3.1.51798 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16185 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Hi! Spam Magnet wrote: > So I guess it doesn't matter if I do the image either using dd or xfsdump. > I'd prefer dd since I get a lot of issues trying to compile xfsprogs under Irix. > > Assuming that I get an image using dd, would a simple mount command suffice > to use the xfs utils ? : > $ mount -t xfs -o loop disk.img /mnt > > Or there are some intermediate steps that I need to take in order to > mount an xfs disk > image file on Linux ? I would add ",ro" after loop like this : $ mount -t xfs -o loop,ro disk.img /mnt But that's just a precaution and not necessary. This way if you manage to mess something up some way you can just try again since you're then mounting readonly. Unless you were planning on updating the image and then dd'ing it back to the original device of course. // Stefan From owner-xfs@oss.sgi.com Thu May 29 17:48:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 17:48:19 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U0m0KN030399 for ; Thu, 29 May 2008 17:48:10 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id KAA15258 for ; Fri, 30 May 2008 10:48:50 +1000 Date: Fri, 30 May 2008 10:49:18 +1000 To: "xfs@oss.sgi.com" Subject: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking From: "Barry Naujok" Organization: SGI Content-Type: multipart/mixed; boundary=----------ISQHamI6crqZS8JCtnUcjs MIME-Version: 1.0 Message-ID: User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16186 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------ISQHamI6crqZS8JCtnUcjs Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable I hope the subject is explanation enough :) Tested successfully by Sebastian on his filesystem reported in http://oss.sgi.com/archives/xfs/2008-05/msg00410.html =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/include/libxfs.h =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/include/libxfs.h 2008-05-28 18:10:03.000000000 +1000 +++ b/xfsprogs/include/libxfs.h 2008-05-28 17:47:13.956576883 +1000 @@ -69,11 +69,14 @@ typedef struct { char *rtname; /* pathname of realtime "subvolume" */ int isreadonly; /* filesystem is only read in applic */ int isdirect; /* we can attempt to use direct I/O */ - int disfile; /* data "subvolume" is a regular file=20= =20 */ int dcreat; /* try to create data subvolume= =20=20 */ + int disfile; /* data "subvolume" is a regular file */ + int dcreat; /* try to create data subvolume */ int lisfile; /* log "subvolume" is a regular file */ int lcreat; /* try to create log subvolume */ - int risfile; /* realtime "subvolume" is a reg file=20= =20 */ int rcreat; /* try to create realtime=20=20 subvolume */ + int risfile; /* realtime "subvolume" is a reg file */ + int rcreat; /* try to create realtime subvolume */ int setblksize; /* attempt to set device blksize */ + int nobuflock; /* don't lock xfs_buf_t's */ /* output results */ dev_t ddev; /* device for data subvolume */ dev_t logdev; /* device for log subvolume */ =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/libxfs/init.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/libxfs/init.c 2008-05-28 18:10:03.000000000 +1000 +++ b/xfsprogs/libxfs/init.c 2008-05-28 17:50:48.105195527 +1000 @@ -28,6 +28,8 @@ int libxfs_ihash_size; /* #buckets in i struct cache *libxfs_bcache; /* global buffer cache */ int libxfs_bhash_size; /* #buckets in bcache */ +int no_xfs_buf_lock; /* global don't use xfs_buf_t lock flag */ + static void manage_zones(int); /* setup global zones */ /* @@ -335,6 +337,7 @@ libxfs_init(libxfs_init_t *a) if (!libxfs_bhash_size) libxfs_bhash_size =3D LIBXFS_BHASHSIZE(sbp); libxfs_bcache =3D cache_init(libxfs_bhash_size, &libxfs_bcache_operation= s); + no_xfs_buf_lock =3D a->nobuflock; manage_zones(0); rval =3D 1; done: =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/libxfs/rdwr.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/libxfs/rdwr.c 2008-05-28 18:10:03.000000000 +1000 +++ b/xfsprogs/libxfs/rdwr.c 2008-05-28 18:01:29.735224868 +1000 @@ -375,6 +375,8 @@ struct list_head lock_buf_list =3D {&lock_ int lock_buf_count =3D 0; #endif +extern int no_xfs_buf_lock; + xfs_buf_t * libxfs_getbuf(dev_t device, xfs_daddr_t blkno, int len) { @@ -388,7 +390,8 @@ libxfs_getbuf(dev_t device, xfs_daddr_t miss =3D cache_node_get(libxfs_bcache, &key, (struct cache_node **)&bp); if (bp) { - pthread_mutex_lock(&bp->b_lock); + if (!no_xfs_buf_lock) + pthread_mutex_lock(&bp->b_lock); cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, cache_node_get_priority((struct cache_node *)bp) - 4); #ifdef XFS_BUF_TRACING @@ -417,7 +420,8 @@ libxfs_putbuf(xfs_buf_t *bp) list_del_init(&bp->b_lock_list); pthread_mutex_unlock(&libxfs_bcache->c_mutex); #endif - pthread_mutex_unlock(&bp->b_lock); + if (!no_xfs_buf_lock) + pthread_mutex_unlock(&bp->b_lock); cache_node_put((struct cache_node *)bp); } =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/init.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/init.c 2008-05-28 18:10:03.000000000 +1000 +++ b/xfsprogs/repair/init.c 2008-05-28 17:52:26.024674072 +1000 @@ -135,6 +135,7 @@ xfs_init(libxfs_init_t *args) /* XXX assume data file also means rt file */ } + args->nobuflock =3D !do_prefetch; args->setblksize =3D !dangerously; args->isdirect =3D LIBXFS_DIRECT; if (no_modify) ------------ISQHamI6crqZS8JCtnUcjs Content-Disposition: attachment; filename=no_xfs_buf_t_lock_repair.patch Content-Type: text/x-patch; name=no_xfs_buf_t_lock_repair.patch Content-Transfer-Encoding: Base64 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9pbmNs dWRlL2xpYnhmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK LS0tIGEveGZzcHJvZ3MvaW5jbHVkZS9saWJ4ZnMuaAkyMDA4LTA1LTI4IDE4 OjEwOjAzLjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9pbmNsdWRl L2xpYnhmcy5oCTIwMDgtMDUtMjggMTc6NDc6MTMuOTU2NTc2ODgzICsxMDAw CkBAIC02OSwxMSArNjksMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWNoYXIg ICAgICAgICAgICAqcnRuYW1lOyAgICAgICAgLyogcGF0aG5hbWUgb2YgcmVh bHRpbWUgInN1YnZvbHVtZSIgKi8KIAlpbnQgICAgICAgICAgICAgaXNyZWFk b25seTsgICAgIC8qIGZpbGVzeXN0ZW0gaXMgb25seSByZWFkIGluIGFwcGxp YyAqLwogCWludCAgICAgICAgICAgICBpc2RpcmVjdDsgICAgICAgLyogd2Ug Y2FuIGF0dGVtcHQgdG8gdXNlIGRpcmVjdCBJL08gKi8KLQlpbnQgICAgICAg ICAgICAgZGlzZmlsZTsgICAgICAgIC8qIGRhdGEgInN1YnZvbHVtZSIgaXMg YSByZWd1bGFyIGZpbGUgKi8gICAgICAgIGludCAgICAgICAgICAgICBkY3Jl YXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1YnZvbHVtZSAq LworCWludCAgICAgICAgICAgICBkaXNmaWxlOyAgICAgICAgLyogZGF0YSAi c3Vidm9sdW1lIiBpcyBhIHJlZ3VsYXIgZmlsZSAqLworCWludCAgICAgICAg ICAgICBkY3JlYXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1 YnZvbHVtZSAqLwogCWludCAgICAgICAgICAgICBsaXNmaWxlOyAgICAgICAg LyogbG9nICJzdWJ2b2x1bWUiIGlzIGEgcmVndWxhciBmaWxlICovCiAJaW50 ICAgICAgICAgICAgIGxjcmVhdDsgICAgICAgICAvKiB0cnkgdG8gY3JlYXRl IGxvZyBzdWJ2b2x1bWUgKi8KLQlpbnQgICAgICAgICAgICAgcmlzZmlsZTsg ICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1bWUiIGlzIGEgcmVnIGZpbGUg Ki8gICAgICAgIGludCAgICAgICAgICAgICByY3JlYXQ7ICAgICAgICAgLyog dHJ5IHRvIGNyZWF0ZSByZWFsdGltZSBzdWJ2b2x1bWUgKi8KKwlpbnQgICAg ICAgICAgICAgcmlzZmlsZTsgICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1 bWUiIGlzIGEgcmVnIGZpbGUgKi8KKwlpbnQgICAgICAgICAgICAgcmNyZWF0 OyAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgcmVhbHRpbWUgc3Vidm9sdW1l ICovCiAJaW50CQlzZXRibGtzaXplOwkvKiBhdHRlbXB0IHRvIHNldCBkZXZp Y2UgYmxrc2l6ZSAqLworCWludAkJbm9idWZsb2NrOwkvKiBkb24ndCBsb2Nr IHhmc19idWZfdCdzICovCiAJCQkJLyogb3V0cHV0IHJlc3VsdHMgKi8KIAlk ZXZfdCAgICAgICAgICAgZGRldjsgICAgICAgICAgIC8qIGRldmljZSBmb3Ig ZGF0YSBzdWJ2b2x1bWUgKi8KIAlkZXZfdCAgICAgICAgICAgbG9nZGV2OyAg ICAgICAgIC8qIGRldmljZSBmb3IgbG9nIHN1YnZvbHVtZSAqLwoKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cnhmc3Byb2dzL2xpYnhmcy9pbml0 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgotLS0gYS94ZnNw cm9ncy9saWJ4ZnMvaW5pdC5jCTIwMDgtMDUtMjggMTg6MTA6MDMuMDAwMDAw MDAwICsxMDAwCisrKyBiL3hmc3Byb2dzL2xpYnhmcy9pbml0LmMJMjAwOC0w NS0yOCAxNzo1MDo0OC4xMDUxOTU1MjcgKzEwMDAKQEAgLTI4LDYgKzI4LDgg QEAgaW50IGxpYnhmc19paGFzaF9zaXplOwkJLyogI2J1Y2tldHMgaW4gaQog c3RydWN0IGNhY2hlICpsaWJ4ZnNfYmNhY2hlOwkvKiBnbG9iYWwgYnVmZmVy IGNhY2hlICovCiBpbnQgbGlieGZzX2JoYXNoX3NpemU7CQkvKiAjYnVja2V0 cyBpbiBiY2FjaGUgKi8KIAoraW50CW5vX3hmc19idWZfbG9jazsJLyogZ2xv YmFsIGRvbid0IHVzZSB4ZnNfYnVmX3QgbG9jayBmbGFnICovCisKIHN0YXRp YyB2b2lkIG1hbmFnZV96b25lcyhpbnQpOwkvKiBzZXR1cCBnbG9iYWwgem9u ZXMgKi8KIAogLyoKQEAgLTMzNSw2ICszMzcsNyBAQCBsaWJ4ZnNfaW5pdChs aWJ4ZnNfaW5pdF90ICphKQogCWlmICghbGlieGZzX2JoYXNoX3NpemUpCiAJ CWxpYnhmc19iaGFzaF9zaXplID0gTElCWEZTX0JIQVNIU0laRShzYnApOwog CWxpYnhmc19iY2FjaGUgPSBjYWNoZV9pbml0KGxpYnhmc19iaGFzaF9zaXpl LCAmbGlieGZzX2JjYWNoZV9vcGVyYXRpb25zKTsKKwlub194ZnNfYnVmX2xv Y2sgPSBhLT5ub2J1ZmxvY2s7CiAJbWFuYWdlX3pvbmVzKDApOwogCXJ2YWwg PSAxOwogZG9uZToKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4 ZnNwcm9ncy9saWJ4ZnMvcmR3ci5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoKLS0tIGEveGZzcHJvZ3MvbGlieGZzL3Jkd3IuYwkyMDA4LTA1 LTI4IDE4OjEwOjAzLjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9s aWJ4ZnMvcmR3ci5jCTIwMDgtMDUtMjggMTg6MDE6MjkuNzM1MjI0ODY4ICsx MDAwCkBAIC0zNzUsNiArMzc1LDggQEAgc3RydWN0IGxpc3RfaGVhZAlsb2Nr X2J1Zl9saXN0ID0geyZsb2NrXwogaW50CQkJbG9ja19idWZfY291bnQgPSAw OwogI2VuZGlmCiAKK2V4dGVybiBpbnQgICAgIG5vX3hmc19idWZfbG9jazsK KwogeGZzX2J1Zl90ICoKIGxpYnhmc19nZXRidWYoZGV2X3QgZGV2aWNlLCB4 ZnNfZGFkZHJfdCBibGtubywgaW50IGxlbikKIHsKQEAgLTM4OCw3ICszOTAs OCBAQCBsaWJ4ZnNfZ2V0YnVmKGRldl90IGRldmljZSwgeGZzX2RhZGRyX3Qg CiAKIAltaXNzID0gY2FjaGVfbm9kZV9nZXQobGlieGZzX2JjYWNoZSwgJmtl eSwgKHN0cnVjdCBjYWNoZV9ub2RlICoqKSZicCk7CiAJaWYgKGJwKSB7Ci0J CXB0aHJlYWRfbXV0ZXhfbG9jaygmYnAtPmJfbG9jayk7CisJCWlmICghbm9f eGZzX2J1Zl9sb2NrKQorCQkJcHRocmVhZF9tdXRleF9sb2NrKCZicC0+Yl9s b2NrKTsKIAkJY2FjaGVfbm9kZV9zZXRfcHJpb3JpdHkobGlieGZzX2JjYWNo ZSwgKHN0cnVjdCBjYWNoZV9ub2RlICopYnAsCiAJCQljYWNoZV9ub2RlX2dl dF9wcmlvcml0eSgoc3RydWN0IGNhY2hlX25vZGUgKilicCkgLSA0KTsKICNp ZmRlZiBYRlNfQlVGX1RSQUNJTkcKQEAgLTQxNyw3ICs0MjAsOCBAQCBsaWJ4 ZnNfcHV0YnVmKHhmc19idWZfdCAqYnApCiAJbGlzdF9kZWxfaW5pdCgmYnAt PmJfbG9ja19saXN0KTsKIAlwdGhyZWFkX211dGV4X3VubG9jaygmbGlieGZz X2JjYWNoZS0+Y19tdXRleCk7CiAjZW5kaWYKLQlwdGhyZWFkX211dGV4X3Vu bG9jaygmYnAtPmJfbG9jayk7CisJaWYgKCFub194ZnNfYnVmX2xvY2spCisJ CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZicC0+Yl9sb2NrKTsKIAljYWNoZV9u b2RlX3B1dCgoc3RydWN0IGNhY2hlX25vZGUgKilicCk7CiB9CiAKCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9yZXBhaXIvaW5p dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLS0tIGEveGZz cHJvZ3MvcmVwYWlyL2luaXQuYwkyMDA4LTA1LTI4IDE4OjEwOjAzLjAwMDAw MDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9yZXBhaXIvaW5pdC5jCTIwMDgt MDUtMjggMTc6NTI6MjYuMDI0Njc0MDcyICsxMDAwCkBAIC0xMzUsNiArMTM1 LDcgQEAgeGZzX2luaXQobGlieGZzX2luaXRfdCAqYXJncykKIAkJLyogWFhY IGFzc3VtZSBkYXRhIGZpbGUgYWxzbyBtZWFucyBydCBmaWxlICovCiAJfQog CisJYXJncy0+bm9idWZsb2NrID0gIWRvX3ByZWZldGNoOwogCWFyZ3MtPnNl dGJsa3NpemUgPSAhZGFuZ2Vyb3VzbHk7CiAJYXJncy0+aXNkaXJlY3QgPSBM SUJYRlNfRElSRUNUOwogCWlmIChub19tb2RpZnkpCg== ------------ISQHamI6crqZS8JCtnUcjs-- From owner-xfs@oss.sgi.com Thu May 29 17:51:33 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 17:51:35 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4U0pVao030901 for ; Thu, 29 May 2008 17:51:33 -0700 X-ASG-Debug-ID: 1212108743-08c900a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 829C71CF276 for ; Thu, 29 May 2008 17:52:24 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 6MoOhBNMsenT4lF4 for ; Thu, 29 May 2008 17:52:24 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id A2664A9C51C; Thu, 29 May 2008 19:52:23 -0500 (CDT) Message-ID: <483F4FC7.3060801@sandeen.net> Date: Thu, 29 May 2008 19:52:23 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Barry Naujok CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking Subject: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking References: In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1212108744 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.1, rules version 3.1.51810 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16187 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Barry Naujok wrote: > I hope the subject is explanation enough :) not really ;) Hum, if I normally lock why do I not want to lock? Locking good? Locking bad? Locking too slow? locking for what? Incoherency ok? Man page updates? :) -Eric From owner-xfs@oss.sgi.com Thu May 29 18:02:37 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 18:02:40 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U12YWr032144 for ; Thu, 29 May 2008 18:02:35 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA15686; Fri, 30 May 2008 11:03:20 +1000 Date: Fri, 30 May 2008 11:03:51 +1000 To: "Eric Sandeen" Subject: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" Content-Type: multipart/mixed; boundary=----------gqTEqeKk4oEHa0PPtngyH3 MIME-Version: 1.0 References: <483F4FC7.3060801@sandeen.net> Message-ID: In-Reply-To: <483F4FC7.3060801@sandeen.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16188 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs ------------gqTEqeKk4oEHa0PPtngyH3 Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 Content-Transfer-Encoding: Quoted-Printable On Fri, 30 May 2008 10:52:23 +1000, Eric Sandeen =20= =20 wrote: > Barry Naujok wrote: >> I hope the subject is explanation enough :) > > not really ;) > > Hum, if I normally lock why do I not want to lock? Locking good? > Locking bad? Locking too slow? locking for what? Incoherency ok? Man > page updates? :) Ok, I've reversed the logic, makes it much clearer. So, with prefetch mode in xfs_repair, you need to lock the xfs_buf_t's so the prefetch and processing threads play sensibily with them (ie. avoiding simultaneous reads/writes - much like the kernel xfs_buf_t's). If you disable prefetch, or the process is single threaded, there is no need to use the locks. So, this patch only locks the buffers if it's xfs_repair running without the -P mode. =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/include/libxfs.h =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/include/libxfs.h 2008-05-30 11:00:44.000000000 +1000 +++ b/xfsprogs/include/libxfs.h 2008-05-30 10:55:15.561596557 +1000 @@ -69,11 +69,14 @@ typedef struct { char *rtname; /* pathname of realtime "subvolume" */ int isreadonly; /* filesystem is only read in applic */ int isdirect; /* we can attempt to use direct I/O */ - int disfile; /* data "subvolume" is a regular file=20= =20 */ int dcreat; /* try to create data subvolume= =20=20 */ + int disfile; /* data "subvolume" is a regular file */ + int dcreat; /* try to create data subvolume */ int lisfile; /* log "subvolume" is a regular file */ int lcreat; /* try to create log subvolume */ - int risfile; /* realtime "subvolume" is a reg file=20= =20 */ int rcreat; /* try to create realtime=20=20 subvolume */ + int risfile; /* realtime "subvolume" is a reg file */ + int rcreat; /* try to create realtime subvolume */ int setblksize; /* attempt to set device blksize */ + int usebuflock; /* lock xfs_buf_t's - for MT usage */ /* output results */ dev_t ddev; /* device for data subvolume */ dev_t logdev; /* device for log subvolume */ =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/libxfs/init.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/libxfs/init.c 2008-05-30 11:00:44.000000000 +1000 +++ b/xfsprogs/libxfs/init.c 2008-05-30 10:57:52.189289029 +1000 @@ -28,6 +28,8 @@ int libxfs_ihash_size; /* #buckets in i struct cache *libxfs_bcache; /* global buffer cache */ int libxfs_bhash_size; /* #buckets in bcache */ +int use_xfs_buf_lock; /* global flag: use xfs_buf_t locks for MT */ + static void manage_zones(int); /* setup global zones */ /* @@ -335,6 +337,7 @@ libxfs_init(libxfs_init_t *a) if (!libxfs_bhash_size) libxfs_bhash_size =3D LIBXFS_BHASHSIZE(sbp); libxfs_bcache =3D cache_init(libxfs_bhash_size, &libxfs_bcache_operation= s); + use_xfs_buf_lock =3D a->usebuflock; manage_zones(0); rval =3D 1; done: =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/libxfs/rdwr.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/libxfs/rdwr.c 2008-05-30 11:00:44.000000000 +1000 +++ b/xfsprogs/libxfs/rdwr.c 2008-05-30 10:58:47.018181515 +1000 @@ -375,6 +375,8 @@ struct list_head lock_buf_list =3D {&lock_ int lock_buf_count =3D 0; #endif +extern int use_xfs_buf_lock; + xfs_buf_t * libxfs_getbuf(dev_t device, xfs_daddr_t blkno, int len) { @@ -388,7 +390,8 @@ libxfs_getbuf(dev_t device, xfs_daddr_t miss =3D cache_node_get(libxfs_bcache, &key, (struct cache_node **)&bp); if (bp) { - pthread_mutex_lock(&bp->b_lock); + if (use_xfs_buf_lock) + pthread_mutex_lock(&bp->b_lock); cache_node_set_priority(libxfs_bcache, (struct cache_node *)bp, cache_node_get_priority((struct cache_node *)bp) - 4); #ifdef XFS_BUF_TRACING @@ -417,7 +420,8 @@ libxfs_putbuf(xfs_buf_t *bp) list_del_init(&bp->b_lock_list); pthread_mutex_unlock(&libxfs_bcache->c_mutex); #endif - pthread_mutex_unlock(&bp->b_lock); + if (use_xfs_buf_lock) + pthread_mutex_unlock(&bp->b_lock); cache_node_put((struct cache_node *)bp); } =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D xfsprogs/repair/init.c =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=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- a/xfsprogs/repair/init.c 2008-05-30 11:00:44.000000000 +1000 +++ b/xfsprogs/repair/init.c 2008-05-30 10:59:50.217989698 +1000 @@ -135,6 +135,7 @@ xfs_init(libxfs_init_t *args) /* XXX assume data file also means rt file */ } + args->usebuflock =3D do_prefetch; args->setblksize =3D !dangerously; args->isdirect =3D LIBXFS_DIRECT; if (no_modify) ------------gqTEqeKk4oEHa0PPtngyH3 Content-Disposition: attachment; filename=no_xfs_buf_t_lock_repair.patch Content-Type: text/x-patch; name=no_xfs_buf_t_lock_repair.patch Content-Transfer-Encoding: Base64 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9pbmNs dWRlL2xpYnhmcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK LS0tIGEveGZzcHJvZ3MvaW5jbHVkZS9saWJ4ZnMuaAkyMDA4LTA1LTMwIDEx OjAwOjQ0LjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9pbmNsdWRl L2xpYnhmcy5oCTIwMDgtMDUtMzAgMTA6NTU6MTUuNTYxNTk2NTU3ICsxMDAw CkBAIC02OSwxMSArNjksMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgewogCWNoYXIg ICAgICAgICAgICAqcnRuYW1lOyAgICAgICAgLyogcGF0aG5hbWUgb2YgcmVh bHRpbWUgInN1YnZvbHVtZSIgKi8KIAlpbnQgICAgICAgICAgICAgaXNyZWFk b25seTsgICAgIC8qIGZpbGVzeXN0ZW0gaXMgb25seSByZWFkIGluIGFwcGxp YyAqLwogCWludCAgICAgICAgICAgICBpc2RpcmVjdDsgICAgICAgLyogd2Ug Y2FuIGF0dGVtcHQgdG8gdXNlIGRpcmVjdCBJL08gKi8KLQlpbnQgICAgICAg ICAgICAgZGlzZmlsZTsgICAgICAgIC8qIGRhdGEgInN1YnZvbHVtZSIgaXMg YSByZWd1bGFyIGZpbGUgKi8gICAgICAgIGludCAgICAgICAgICAgICBkY3Jl YXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1YnZvbHVtZSAq LworCWludCAgICAgICAgICAgICBkaXNmaWxlOyAgICAgICAgLyogZGF0YSAi c3Vidm9sdW1lIiBpcyBhIHJlZ3VsYXIgZmlsZSAqLworCWludCAgICAgICAg ICAgICBkY3JlYXQ7ICAgICAgICAgLyogdHJ5IHRvIGNyZWF0ZSBkYXRhIHN1 YnZvbHVtZSAqLwogCWludCAgICAgICAgICAgICBsaXNmaWxlOyAgICAgICAg LyogbG9nICJzdWJ2b2x1bWUiIGlzIGEgcmVndWxhciBmaWxlICovCiAJaW50 ICAgICAgICAgICAgIGxjcmVhdDsgICAgICAgICAvKiB0cnkgdG8gY3JlYXRl IGxvZyBzdWJ2b2x1bWUgKi8KLQlpbnQgICAgICAgICAgICAgcmlzZmlsZTsg ICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1bWUiIGlzIGEgcmVnIGZpbGUg Ki8gICAgICAgIGludCAgICAgICAgICAgICByY3JlYXQ7ICAgICAgICAgLyog dHJ5IHRvIGNyZWF0ZSByZWFsdGltZSBzdWJ2b2x1bWUgKi8KKwlpbnQgICAg ICAgICAgICAgcmlzZmlsZTsgICAgICAgIC8qIHJlYWx0aW1lICJzdWJ2b2x1 bWUiIGlzIGEgcmVnIGZpbGUgKi8KKwlpbnQgICAgICAgICAgICAgcmNyZWF0 OyAgICAgICAgIC8qIHRyeSB0byBjcmVhdGUgcmVhbHRpbWUgc3Vidm9sdW1l ICovCiAJaW50CQlzZXRibGtzaXplOwkvKiBhdHRlbXB0IHRvIHNldCBkZXZp Y2UgYmxrc2l6ZSAqLworCWludAkJdXNlYnVmbG9jazsJLyogbG9jayB4ZnNf YnVmX3QncyAtIGZvciBNVCB1c2FnZSAqLwogCQkJCS8qIG91dHB1dCByZXN1 bHRzICovCiAJZGV2X3QgICAgICAgICAgIGRkZXY7ICAgICAgICAgICAvKiBk ZXZpY2UgZm9yIGRhdGEgc3Vidm9sdW1lICovCiAJZGV2X3QgICAgICAgICAg IGxvZ2RldjsgICAgICAgICAvKiBkZXZpY2UgZm9yIGxvZyBzdWJ2b2x1bWUg Ki8KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQp4ZnNwcm9ncy9s aWJ4ZnMvaW5pdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK LS0tIGEveGZzcHJvZ3MvbGlieGZzL2luaXQuYwkyMDA4LTA1LTMwIDExOjAw OjQ0LjAwMDAwMDAwMCArMTAwMAorKysgYi94ZnNwcm9ncy9saWJ4ZnMvaW5p dC5jCTIwMDgtMDUtMzAgMTA6NTc6NTIuMTg5Mjg5MDI5ICsxMDAwCkBAIC0y OCw2ICsyOCw4IEBAIGludCBsaWJ4ZnNfaWhhc2hfc2l6ZTsJCS8qICNidWNr ZXRzIGluIGkKIHN0cnVjdCBjYWNoZSAqbGlieGZzX2JjYWNoZTsJLyogZ2xv YmFsIGJ1ZmZlciBjYWNoZSAqLwogaW50IGxpYnhmc19iaGFzaF9zaXplOwkJ LyogI2J1Y2tldHMgaW4gYmNhY2hlICovCiAKK2ludAl1c2VfeGZzX2J1Zl9s b2NrOwkvKiBnbG9iYWwgZmxhZzogdXNlIHhmc19idWZfdCBsb2NrcyBmb3Ig TVQgKi8KKwogc3RhdGljIHZvaWQgbWFuYWdlX3pvbmVzKGludCk7CS8qIHNl dHVwIGdsb2JhbCB6b25lcyAqLwogCiAvKgpAQCAtMzM1LDYgKzMzNyw3IEBA IGxpYnhmc19pbml0KGxpYnhmc19pbml0X3QgKmEpCiAJaWYgKCFsaWJ4ZnNf Ymhhc2hfc2l6ZSkKIAkJbGlieGZzX2JoYXNoX3NpemUgPSBMSUJYRlNfQkhB U0hTSVpFKHNicCk7CiAJbGlieGZzX2JjYWNoZSA9IGNhY2hlX2luaXQobGli eGZzX2JoYXNoX3NpemUsICZsaWJ4ZnNfYmNhY2hlX29wZXJhdGlvbnMpOwor CXVzZV94ZnNfYnVmX2xvY2sgPSBhLT51c2VidWZsb2NrOwogCW1hbmFnZV96 b25lcygwKTsKIAlydmFsID0gMTsKIGRvbmU6Cgo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KeGZzcHJvZ3MvbGlieGZzL3Jkd3IuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCi0tLSBhL3hmc3Byb2dzL2xpYnhm cy9yZHdyLmMJMjAwOC0wNS0zMCAxMTowMDo0NC4wMDAwMDAwMDAgKzEwMDAK KysrIGIveGZzcHJvZ3MvbGlieGZzL3Jkd3IuYwkyMDA4LTA1LTMwIDEwOjU4 OjQ3LjAxODE4MTUxNSArMTAwMApAQCAtMzc1LDYgKzM3NSw4IEBAIHN0cnVj dCBsaXN0X2hlYWQJbG9ja19idWZfbGlzdCA9IHsmbG9ja18KIGludAkJCWxv Y2tfYnVmX2NvdW50ID0gMDsKICNlbmRpZgogCitleHRlcm4gaW50ICAgICB1 c2VfeGZzX2J1Zl9sb2NrOworCiB4ZnNfYnVmX3QgKgogbGlieGZzX2dldGJ1 ZihkZXZfdCBkZXZpY2UsIHhmc19kYWRkcl90IGJsa25vLCBpbnQgbGVuKQog ewpAQCAtMzg4LDcgKzM5MCw4IEBAIGxpYnhmc19nZXRidWYoZGV2X3QgZGV2 aWNlLCB4ZnNfZGFkZHJfdCAKIAogCW1pc3MgPSBjYWNoZV9ub2RlX2dldChs aWJ4ZnNfYmNhY2hlLCAma2V5LCAoc3RydWN0IGNhY2hlX25vZGUgKiopJmJw KTsKIAlpZiAoYnApIHsKLQkJcHRocmVhZF9tdXRleF9sb2NrKCZicC0+Yl9s b2NrKTsKKwkJaWYgKHVzZV94ZnNfYnVmX2xvY2spCisJCQlwdGhyZWFkX211 dGV4X2xvY2soJmJwLT5iX2xvY2spOwogCQljYWNoZV9ub2RlX3NldF9wcmlv cml0eShsaWJ4ZnNfYmNhY2hlLCAoc3RydWN0IGNhY2hlX25vZGUgKilicCwK IAkJCWNhY2hlX25vZGVfZ2V0X3ByaW9yaXR5KChzdHJ1Y3QgY2FjaGVfbm9k ZSAqKWJwKSAtIDQpOwogI2lmZGVmIFhGU19CVUZfVFJBQ0lORwpAQCAtNDE3 LDcgKzQyMCw4IEBAIGxpYnhmc19wdXRidWYoeGZzX2J1Zl90ICpicCkKIAls aXN0X2RlbF9pbml0KCZicC0+Yl9sb2NrX2xpc3QpOwogCXB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZsaWJ4ZnNfYmNhY2hlLT5jX211dGV4KTsKICNlbmRpZgot CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZicC0+Yl9sb2NrKTsKKwlpZiAodXNl X3hmc19idWZfbG9jaykKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJmJwLT5i X2xvY2spOwogCWNhY2hlX25vZGVfcHV0KChzdHJ1Y3QgY2FjaGVfbm9kZSAq KWJwKTsKIH0KIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cnhm c3Byb2dzL3JlcGFpci9pbml0LmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CgotLS0gYS94ZnNwcm9ncy9yZXBhaXIvaW5pdC5jCTIwMDgtMDUt MzAgMTE6MDA6NDQuMDAwMDAwMDAwICsxMDAwCisrKyBiL3hmc3Byb2dzL3Jl cGFpci9pbml0LmMJMjAwOC0wNS0zMCAxMDo1OTo1MC4yMTc5ODk2OTggKzEw MDAKQEAgLTEzNSw2ICsxMzUsNyBAQCB4ZnNfaW5pdChsaWJ4ZnNfaW5pdF90 ICphcmdzKQogCQkvKiBYWFggYXNzdW1lIGRhdGEgZmlsZSBhbHNvIG1lYW5z IHJ0IGZpbGUgKi8KIAl9CiAKKwlhcmdzLT51c2VidWZsb2NrID0gZG9fcHJl ZmV0Y2g7CiAJYXJncy0+c2V0Ymxrc2l6ZSA9ICFkYW5nZXJvdXNseTsKIAlh cmdzLT5pc2RpcmVjdCA9IExJQlhGU19ESVJFQ1Q7CiAJaWYgKG5vX21vZGlm eSkK ------------gqTEqeKk4oEHa0PPtngyH3-- From owner-xfs@oss.sgi.com Thu May 29 18:11:58 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 18:12:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U1Brkf000796 for ; Thu, 29 May 2008 18:11:54 -0700 Received: from pc-bnaujok.melbourne.sgi.com (pc-bnaujok.melbourne.sgi.com [134.14.55.58]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA15821; Fri, 30 May 2008 11:12:40 +1000 To: "Eric Sandeen" Subject: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking From: "Barry Naujok" Organization: SGI Cc: "xfs@oss.sgi.com" Content-Type: text/plain; format=flowed; delsp=yes; charset=utf-8 MIME-Version: 1.0 References: <483F4FC7.3060801@sandeen.net> Content-Transfer-Encoding: 7bit Date: Fri, 30 May 2008 11:13:14 +1000 Message-ID: In-Reply-To: <483F4FC7.3060801@sandeen.net> User-Agent: Opera Mail/9.24 (Win32) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16189 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs On Fri, 30 May 2008 10:52:23 +1000, Eric Sandeen wrote: > Barry Naujok wrote: >> I hope the subject is explanation enough :) > > not really ;) > > Hum, if I normally lock why do I not want to lock? Locking good? > Locking bad? Locking too slow? locking for what? Incoherency ok? Man > page updates? :) > Ok, man page update: --- a/xfsprogs/man/man8/xfs_repair.8 2008-05-30 11:11:41.000000000 +1000 +++ b/xfsprogs/man/man8/xfs_repair.8 2008-05-30 11:10:24.075877526 +1000 @@ -91,6 +91,14 @@ should not modify the filesystem but should only scan the filesystem and indicate what repairs would have been made. .TP +.B \-P +Disable prefetching of inode and directory blocks. Use this option if +you find +.B xfs_repair +gets stuck and stops proceeding. Interrupting a stuck +.B xfs_repair +is safe. +.TP .BI \-m " maxmem" Specifies the approximate maximum amount of memory, in megabytes, to use for .BR xfs_repair . @@ -146,9 +154,6 @@ outputs its progress every 15 minutes. Reporting is only activated when ag_stride is enabled. .TP -.B \-P -Disable prefetching of inode and directory blocks. -.TP .B \-v Verbose output. .TP From owner-xfs@oss.sgi.com Thu May 29 18:16:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 18:16:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4U1GCQg001659 for ; Thu, 29 May 2008 18:16:12 -0700 X-ASG-Debug-ID: 1212110224-05fc01a30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 960211CF51F for ; Thu, 29 May 2008 18:17:05 -0700 (PDT) Received: from sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 9yMXrBwsOPEo6xQz for ; Thu, 29 May 2008 18:17:05 -0700 (PDT) Received: from Liberator.local (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by sandeen.net (Postfix) with ESMTP id 980F298D145; Thu, 29 May 2008 20:17:04 -0500 (CDT) Message-ID: <483F5590.30403@sandeen.net> Date: Thu, 29 May 2008 20:17:04 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Barry Naujok CC: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking Subject: Re: REVIEW: Enhance xfs_repair -P option to disable libxfs xfs_buf_t locking References: <483F4FC7.3060801@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1212110225 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.1, rules version 3.1.51812 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16190 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: sandeen@sandeen.net Precedence: bulk X-list: xfs Barry Naujok wrote: > On Fri, 30 May 2008 10:52:23 +1000, Eric Sandeen > wrote: > >> Barry Naujok wrote: >>> I hope the subject is explanation enough :) >> not really ;) >> >> Hum, if I normally lock why do I not want to lock? Locking good? >> Locking bad? Locking too slow? locking for what? Incoherency ok? Man >> page updates? :) >> > > Ok, man page update: I like it. Thanks! -Eric > --- a/xfsprogs/man/man8/xfs_repair.8 2008-05-30 11:11:41.000000000 +1000 > +++ b/xfsprogs/man/man8/xfs_repair.8 2008-05-30 11:10:24.075877526 +1000 > @@ -91,6 +91,14 @@ > should not modify the filesystem but should only scan the > filesystem and indicate what repairs would have been made. > .TP > +.B \-P > +Disable prefetching of inode and directory blocks. Use this option if > +you find > +.B xfs_repair > +gets stuck and stops proceeding. Interrupting a stuck > +.B xfs_repair > +is safe. > +.TP > .BI \-m " maxmem" > Specifies the approximate maximum amount of memory, in megabytes, to use > for > .BR xfs_repair . > @@ -146,9 +154,6 @@ > outputs its progress every 15 minutes. Reporting is only activated when > ag_stride is enabled. > .TP > -.B \-P > -Disable prefetching of inode and directory blocks. > -.TP > .B \-v > Verbose output. > .TP > > From owner-xfs@oss.sgi.com Thu May 29 18:27:13 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 18:27:15 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U1RA7i002730 for ; Thu, 29 May 2008 18:27:11 -0700 Received: from chook.melbourne.sgi.com (chook.melbourne.sgi.com [134.14.54.237]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id LAA16142; Fri, 30 May 2008 11:27:59 +1000 Received: by chook.melbourne.sgi.com (Postfix, from userid 1161) id 12BD458C4C3F; Fri, 30 May 2008 11:27:58 +1000 (EST) To: sgi.bugs.xfs@engr.sgi.com Cc: xfs@oss.sgi.com Subject: TAKE 982545 - Only use xfs_buf_t locks when doing prefetched repair Message-Id: <20080530012759.12BD458C4C3F@chook.melbourne.sgi.com> Date: Fri, 30 May 2008 11:27:58 +1000 (EST) From: bnaujok@sgi.com (Barry Naujok) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16191 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: bnaujok@sgi.com Precedence: bulk X-list: xfs Date: Fri May 30 11:27:33 AEST 2008 Workarea: chook.melbourne.sgi.com:/home/bnaujok/isms/xfs-cmds Inspected by: tes@sgi.com, sandeen@sandeen.net The following file(s) were checked into: longdrop.melbourne.sgi.com:/isms/xfs-cmds/master-melb Modid: master-melb:xfs-cmds:31256a xfsprogs/man/man8/xfs_repair.8 - 1.13 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/man/man8/xfs_repair.8.diff?r1=text&tr1=1.13&r2=text&tr2=1.12&f=h - Update -P description in xfs_repair man page xfsprogs/include/libxfs.h - 1.65 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/include/libxfs.h.diff?r1=text&tr1=1.65&r2=text&tr2=1.64&f=h - Add "usebuflock" field to xfs_init xfsprogs/repair/init.c - 1.22 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/repair/init.c.diff?r1=text&tr1=1.22&r2=text&tr2=1.21&f=h - Set "usebuflock" flag if doing prefetched repair xfsprogs/libxfs/rdwr.c - 1.38 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/rdwr.c.diff?r1=text&tr1=1.38&r2=text&tr2=1.37&f=h - Only lock xfs_buf_t when use_xfs_buf_lock flag set xfsprogs/libxfs/init.c - 1.56 - changed http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-cmds/xfsprogs/libxfs/init.c.diff?r1=text&tr1=1.56&r2=text&tr2=1.55&f=h - Handle usebuflock flag in xfs_init From owner-xfs@oss.sgi.com Thu May 29 19:15:10 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 19:15:12 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00, RCVD_IN_SORBS_WEB autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4U2FAkp005459 for ; Thu, 29 May 2008 19:15:10 -0700 X-ASG-Debug-ID: 1212113762-01c001890000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from b.mail.sonic.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 265D0C190D0; Thu, 29 May 2008 19:16:02 -0700 (PDT) Received: from b.mail.sonic.net (b.mail.sonic.net [64.142.19.5]) by cuda.sgi.com with ESMTP id R5IX5B94ySUdhz0r; Thu, 29 May 2008 19:16:02 -0700 (PDT) Received: from [192.168.1.105] ([66.28.253.185]) (authenticated bits=0) by b.mail.sonic.net (8.13.8.Beta0-Sonic/8.13.7) with ESMTP id m4U2G1Ye015281 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Thu, 29 May 2008 19:16:02 -0700 Cc: xfs@oss.sgi.com Message-Id: <4FC34C16-F0FA-49C5-88CC-83EEF616C218@sonic.net> From: Gary Lowell To: markgw@sgi.com In-Reply-To: <483C8227.6090408@sgi.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v919.2) X-ASG-Orig-Subj: Re: DMAPI JFS bug fixes Subject: Re: DMAPI JFS bug fixes Date: Thu, 29 May 2008 19:16:01 -0700 References: <483C78E2.4090000@sonic.net> <483C8227.6090408@sgi.com> X-Mailer: Apple Mail (2.919.2) X-Barracuda-Connect: b.mail.sonic.net[64.142.19.5] X-Barracuda-Start-Time: 1212113763 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.1, rules version 3.1.51815 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16192 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: glowell@sonic.net Precedence: bulk X-list: xfs On May 27, 2008, at 2:50 PM, Mark Goodwin wrote: > > > Gary Lowell wrote: >> Hi - >> The JFS version of DMAPI had a handful of bug fixes that don't seem >> to be in the current tree. I couldn't find anything in the list >> archive about them. Would there be any interest in applying those >> fixes or is DMAPI pretty much dead ? > > no it's not dead :) > >> If there is interest, I've got a patch. > > yes please post it here, with due reference to the original author(s). > > Thanks Great. I'll double check that they still work with TOT and post them. Cheers, Gary From owner-xfs@oss.sgi.com Thu May 29 22:27:45 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 22:27:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U5Rghf019631 for ; Thu, 29 May 2008 22:27:44 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA20557; Fri, 30 May 2008 15:28:26 +1000 Message-ID: <483F907A.3020108@sgi.com> Date: Fri, 30 May 2008 15:28:26 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Spam Magnet CC: Eric Sandeen , xfs@oss.sgi.com Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> In-Reply-To: <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16193 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Spam Magnet wrote: >> try xfs_repair -n then maybe. Or update xfsprogs. check shouldn't >> segfault, regardless of the fs state. >> > > I updated xfsprogs to the latest version (cvs checkout) and it solved > the segfault. > >> nah that's fine, images or disks, whichever. >> > > So I guess it doesn't matter if I do the image either using dd or xfsdump. xfsdump won't give you an image. xfsdump has its own format (with a bunch of overhead) which can just be read by xfsrestore. And restore then just writes out the files using mostly standard posix calls. You'll want dd or xfs_copy if you want it as an image. >> ----- partitions ----- >> >> Pt# Device Info Start End Sectors Id System >> >> 8: /dev/sdb1 2 1021 2087936 a SGI xfs >> >> 9: /dev/sdb2 0 1 3072 0 SGI volhdr >> >> 11: /dev/sdb3 0 1021 2091008 6 SGI volume >> Certainly partition 8 here. You can tell by the name (System) and the sizes. The SGI Volume is for the whole volume including the hdr and the filesystem and the SGI volhdr has the partition info. > So can this be related to the byte ordering or any of the other >> issues mentioned in the FAQ regarding xfs under Linux ? As Eric said. We chose the ondisk format to have the byte ordering of IRIX so it should not be a problem. However, parts of the log code in Linux does not do the necessary endian conversion (due to lack of info at the relevant points - it only knows as blobs of data) and so you need the log to be clean. i.e. byte ordering problem just for the log. OOI, as Eric asked, how were you able to mount it all of a sudden? --Tim From owner-xfs@oss.sgi.com Thu May 29 22:58:12 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 22:58:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_51 autolearn=no version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U5w8sc021352 for ; Thu, 29 May 2008 22:58:09 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id PAA21166; Fri, 30 May 2008 15:58:51 +1000 Message-ID: <483F979B.5070206@sgi.com> Date: Fri, 30 May 2008 15:58:51 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Martin Steigerwald CC: linux-xfs@oss.sgi.com Subject: Re: Question for XFS (mounting and clean bit) References: <20080527181336.22qjfcgcfdlwsg40@webmail.versatel.de> <483E5462.1080604@sgi.com> (sfid-20080529_093513_291114_64DAE2F5) <200805291009.36229.Martin@lichtvoll.de> In-Reply-To: <200805291009.36229.Martin@lichtvoll.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16194 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Martin Steigerwald wrote: > Am Donnerstag 29 Mai 2008 schrieb Timothy Shimmin: >> Hi Andre, > > Hi Timothy, > >> I didn't follow all of this, sorry. >> When you ask about the "clean bit", I assume that you are referring >> to "clean XFS mount for filesystem". >> We effectively mark it clean if we do a successful unmount. >> As part of unmount, we write an unmount record into the xfs log. >> On the next mount we look for the head of the log and then for the >> unmount record nearby. If we find the unmount record then we know >> we have had a clean unmount previously, otherwise we replay the log. >> So it's really a question of doing an unmount versus resetting the >> box beforehand or forcing a shutdown beforehand. > > But when is it dirtied? If the clean log entry is the actual "clean bit" I > guess: When the first new entry is written in the log. > Yes. As soon as the first new entry is written in the log it will effectively change the head of the log. The head of the log can basically be seen (simplified version) at the change of cycle#s of the 512byte sectors of the log (each sector is encoded with a cycle# at or near the start; the cycle# is the number of times that we have wrapped the log). e.g. 5 5 5 5 5 5 4 4 4 4 4 ^head (we actually typically have a set of 8 log buffers that have writes issued on so there could easily be bumps in the example....5 5 4 4 5 4 4 etc..) When we find the head we scan back for the start of a log record and look for the unmount record and so we'd have a problem if we don't find one and then we'd know it is dirty. > Does XFS write a log entry on mounting it already or only on the first > real write? Or in other words if I mount a XFS filesystem without writing > to it and reset the machine, would it be marked clean or dirty then? > Hmmm, I could test this ;-). > I believe it will be clean and I tried it out too :) --Tim From owner-xfs@oss.sgi.com Thu May 29 23:37:07 2008 Received: with ECARTIS (v1.0.0; list xfs); Thu, 29 May 2008 23:37:09 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with SMTP id m4U6b4ES023696 for ; Thu, 29 May 2008 23:37:06 -0700 Received: from boing.melbourne.sgi.com (boing.melbourne.sgi.com [134.14.55.141]) by larry.melbourne.sgi.com (950413.SGI.8.6.12/950213.SGI.AUTOCF) via ESMTP id QAA21896; Fri, 30 May 2008 16:37:42 +1000 Message-ID: <483FA0B6.1030703@sgi.com> Date: Fri, 30 May 2008 16:37:42 +1000 From: Timothy Shimmin User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss Subject: Re: [PATCH] use generic_*xattr routines References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> <483A15CE.9060409@sgi.com> <20080526053759.GA17825@lst.de> <483BE788.4050504@sgi.com> <20080529123910.GA30874@lst.de> In-Reply-To: <20080529123910.GA30874@lst.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16195 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: tes@sgi.com Precedence: bulk X-list: xfs Christoph Hellwig wrote: > On Tue, May 27, 2008 at 08:50:48PM +1000, Timothy Shimmin wrote: >>> - the callback is supplied by the xfs_attr_list caller, not set based >>> on options >> Oh, okay. For example, instead of setting the flags to ATTR_KERNOVAL >> such as in xfs_vn_listxattr when size is 0, one could just set the callback >> to xfs_attr_kern_list_sizes and pass it in etc... > > Yes. I have an initial patch that goes directly to xfs_attr_list_int > from xfs_xattr.c and kills most of the ATTR_KERN flags. It's a quite > nice cleanup already. Next step will be to convert dmapi to use it's > own callback aswell. This will be an even bigger cleanup as > put_listent gets the xattr value aswell and we can kill the additional > xfs_attr_get calls, making this code simpler and more efficient. > Sorry, what xfs_attr_get call are you referring to? >>> - there will be an opaque object supplied to xfs_attr_list that is to >>> be used by put_listent so that we don't have to pass down >>> implementation-specific arguments directly. >>> >> Ok. >> So instead of overloading fields in xfs_attr_list_context_t, >> you'll pass down a void* argument or some such for callback specific data. > > I've started looking at this and after some investigation I think > we should just pass the xfs_inode directly to all the functions and then > a void parameter, yes. We'll need to find a solution for the > seen_enough paramter, but I think this could be handled similar to > filldir. There's also some functions directly touching the attr cursor > which seems solveable, too. > I'll await the patch :) The seen_enough param was added for search type callbacks so the callback could terminate the list walk early. Oh okay, I also used it to stop when we fill the buffer. >>> I'd also like to move the attrlist_cursor_kern_t into this callback >>> opaque context because it doesn't make sense for the normal xattr API, >>> but I'll have to see if that's actually feasible. >> BTW, the cursor stuff is a bit flawed. Like the dir1 code (I believe), >> if from userspace you use the cursor and modifications happen to the EAs >> (add or removal) between calls, >> we can end up repeating elements in the list or miss some. >> We don't preserve the position and we can compact the data etc. > > Yes, I think this whole cursor is a rather bad idea. But given that > it's used by xfsdump we can't easily get rid of it. Not if we are to remain compatible with old xfsdump programs (assuming we changed the latest one). Yep. --Tim From owner-xfs@oss.sgi.com Fri May 30 00:52:28 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 00:52:31 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4U7qS2p002221 for ; Fri, 30 May 2008 00:52:28 -0700 X-ASG-Debug-ID: 1212133999-685d03050000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CCF901D0697; Fri, 30 May 2008 00:53:19 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id MwWoOmYZEMyxsNAH; Fri, 30 May 2008 00:53:19 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4U7rBOc008786 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO); Fri, 30 May 2008 09:53:11 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4U7rBLO008784; Fri, 30 May 2008 09:53:11 +0200 Date: Fri, 30 May 2008 09:53:11 +0200 From: Christoph Hellwig To: Timothy Shimmin Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] use generic_*xattr routines Subject: Re: [PATCH] use generic_*xattr routines Message-ID: <20080530075310.GA8446@lst.de> References: <20080430112217.GB16966@lst.de> <20080521081656.GA2638@lst.de> <48365486.3060503@sgi.com> <20080523054848.GA29507@lst.de> <483A15CE.9060409@sgi.com> <20080526053759.GA17825@lst.de> <483BE788.4050504@sgi.com> <20080529123910.GA30874@lst.de> <483FA0B6.1030703@sgi.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <483FA0B6.1030703@sgi.com> User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1212134000 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.1, rules version 3.1.51838 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16196 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs On Fri, May 30, 2008 at 04:37:42PM +1000, Timothy Shimmin wrote: > > Yes. I have an initial patch that goes directly to xfs_attr_list_int > > from xfs_xattr.c and kills most of the ATTR_KERN flags. It's a quite > > nice cleanup already. Next step will be to convert dmapi to use it's > > own callback aswell. This will be an even bigger cleanup as > > put_listent gets the xattr value aswell and we can kill the additional > > xfs_attr_get calls, making this code simpler and more efficient. > > > Sorry, what xfs_attr_get call are you referring to? xfs_dm_getall_dmattr currently does an xfs_attr_list and then performs and xfs_attr_get for each attribute it cares about. But rewriting this to use put_listent we not only get rid of the temporary buffer but also the need to calls xfs_attr_get because put_listent already gets the attribute value passed. It also fixes the race mentioned in the comment and with a properly written put_listent helper can copy the attributes directly to userspace without any kernel buffer at all. That would also fix the direct userspace pointer dereference currently lingering in that code :) > > I've started looking at this and after some investigation I think > > we should just pass the xfs_inode directly to all the functions and then > > a void parameter, yes. We'll need to find a solution for the > > seen_enough paramter, but I think this could be handled similar to > > filldir. There's also some functions directly touching the attr cursor > > which seems solveable, too. > > > I'll await the patch :) > The seen_enough param was added for search type callbacks so the callback > could terminate the list walk early. > Oh okay, I also used it to stop when we fill the buffer. Yes. May idea is to break out of the loop as soon as put_listent returns a non-zero value just like filldir. We can then decided to play with positivie / begative values to allow for a sucessfull early exit, or just like filldir have the actual errno inside the private context structure. I suspect the first variant will be cleaner. From owner-xfs@oss.sgi.com Fri May 30 05:09:17 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 05:09:23 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UC9G65020629 for ; Fri, 30 May 2008 05:09:16 -0700 X-ASG-Debug-ID: 1212149407-4987038e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from gaimboi.tmr.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 568A6C25E7D for ; Fri, 30 May 2008 05:10:08 -0700 (PDT) Received: from gaimboi.tmr.com (mail.tmr.com [64.65.253.246]) by cuda.sgi.com with ESMTP id U8RiFG9NSpYF25t8 for ; Fri, 30 May 2008 05:10:08 -0700 (PDT) Received: from [127.0.0.1] (gaimboi.tmr.com [127.0.0.1]) by gaimboi.tmr.com (8.12.8/8.12.8) with ESMTP id m4UCMCAv032519; Fri, 30 May 2008 08:22:12 -0400 Message-ID: <483FF174.80602@tmr.com> Date: Fri, 30 May 2008 08:22:12 -0400 From: Bill Davidsen Organization: TMR Associates Inc, Schenectady NY User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.8) Gecko/20061105 SeaMonkey/1.0.6 MIME-Version: 1.0 To: Alan Cox CC: =?ISO-8859-1?Q?Jens_B=E4ckman?= , Justin Piszcz , linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) Subject: Re: Performance Characteristics of All Linux RAIDs (mdadm/bonnie++) References: <95711f160805280934y77ed7d91tec5aeb531bf8013c@mail.gmail.com> <20080528195752.0cdcbc6d@core> <483DE40D.8090608@tmr.com> <20080529122223.462bf396@core> In-Reply-To: <20080529122223.462bf396@core> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail.tmr.com[64.65.253.246] X-Barracuda-Start-Time: 1212149409 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4980 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.1, rules version 3.1.51855 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16197 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: davidsen@tmr.com Precedence: bulk X-list: xfs Alan Cox wrote: >> I really don't think that's any part of the issue, the same memory and >> bridge went 4-5x faster in other read cases. The truth is that the >> raid-1 performance is really bad, and it's the code causing it AFAIK. If >> you track the actual io it seems to read one drive at a time, in order, >> without overlap. >> > > Make sure the readahead is set to be a fair bit over the stripe size if > you are doing bulk data tests for a single file. (Or indeed in the real > world for that specific case ;)) > IIRC Justin has readahead at 16MB and chunk at 256k. I would think that if multiple devices were used at all by the md code, that the chunk rather than stripe size would be the issue. In this case the RA seems large enough to trigger good behavior, were there are available. Note: this testing was done with an old(er) kernel, as were all of mine. Since my one large raid array has become more mission critical I'm not comfortable playing with new kernels. The fate of big, fast, and stable machines is to slide into production use. :-( I suppose that's not a bad way to do it, I now have faith in what I'm running. -- Bill Davidsen "Woe unto the statesman who makes war without a reason that will still be valid when the war is over..." Otto von Bismark From owner-xfs@oss.sgi.com Fri May 30 07:20:02 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 07:20:07 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=BAYES_50,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UEK1qL028849 for ; Fri, 30 May 2008 07:20:01 -0700 X-ASG-Debug-ID: 1212157253-5faa03ce0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from server10.greatweb.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CB2CA175D532 for ; Fri, 30 May 2008 07:20:53 -0700 (PDT) Received: from server10.greatweb.de (server10.greatweb.de [83.133.100.11]) by cuda.sgi.com with ESMTP id cSB7yuNArOveAxa6 for ; Fri, 30 May 2008 07:20:53 -0700 (PDT) Received: from localhost (localhost.localdomain [127.0.0.1]) by server10.greatweb.de (Postfix) with ESMTP id D3BCB571AF3 for ; Fri, 30 May 2008 16:20:43 +0200 (CEST) X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at server10.greatweb.de X-Amavis-Alert: BAD HEADER Improper use of control character (char 0D hex): From: Fatan Kerqagu \r\n Received: from server10.greatweb.de ([127.0.0.1]) by localhost (server10.greatweb.de [127.0.0.1]) (amavisd-new, port 30) with ESMTP id SrERlOudtyeV for ; Fri, 30 May 2008 16:20:43 +0200 (CEST) Received: by server10.greatweb.de (Postfix, from userid 1122) id B6B95571AF5; Fri, 30 May 2008 16:15:57 +0200 (CEST) To: xfs@oss.sgi.com X-ASG-Orig-Subj: SOS Kosovo Subject: SOS Kosovo From: Fatan Kerqagu Reply-To: kosovostudent@gmail.com MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit Message-Id: <20080530141557.B6B95571AF5@server10.greatweb.de> Date: Fri, 30 May 2008 16:15:57 +0200 (CEST) X-Barracuda-Connect: server10.greatweb.de[83.133.100.11] X-Barracuda-Start-Time: 1212157253 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5656 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.75 X-Barracuda-Spam-Status: No, SCORE=0.75 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.1, rules version 3.1.51864 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean X-archive-position: 16198 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: kosovostudent@gmail.com Precedence: bulk X-list: xfs Dear ladies and gentlemen please allow me to introduce myself. My name is Fatan Kercagu and I am at first year of my studies at the Economic Faculty here at Prishtina University. I am unable to continue my studies because of financial reasons therefore I would ask you hereby for your possible financial assistance as I am unable to continue studies on my own. Your assistance can be as little as possible but to me it will be big because it would enable me to create a healthy family future, your assistance would open doors to me and make me become an economist so that I could also help somebody else tomorrow just as you helped me. I thank you for your time and your help. You can send me this money easier through Western Union or through Money Fatan Kercagu Rahovec, Kosovo Email:kosovostudent@gmail.com Tel:+37744 119934 From owner-xfs@oss.sgi.com Fri May 30 10:18:40 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 10:18:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UHIdFG010410 for ; Fri, 30 May 2008 10:18:40 -0700 X-ASG-Debug-ID: 1212167970-04e802a70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rv-out-0708.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9A14BC270FA for ; Fri, 30 May 2008 10:19:30 -0700 (PDT) Received: from rv-out-0708.google.com (rv-out-0708.google.com [209.85.198.241]) by cuda.sgi.com with ESMTP id aUolTcVfCdFiWmgx for ; Fri, 30 May 2008 10:19:30 -0700 (PDT) Received: by rv-out-0708.google.com with SMTP id f25so3729606rvb.32 for ; Fri, 30 May 2008 10:19:30 -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:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; bh=UgTmECz63JUlaAwY6YqLCeTDdWX5IoWHUsEQeywPhps=; b=RzrakT7/lmVa6qSX2iPvquGP7ytXXzZV5Z31TWwdHEI5IP0BrbVvwePh0kjHA+ykljD1PLQ9TWKDNCtstrSDzzmpdui8LZjHC7oqdCm2Tj5E6lY7Re0P0avw8vI5PzDBNNq1hAw9cYAhoo9PACG6k0QaBeDoeKgHkb/8+bRydu4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=a2a1jYZcI/UzPF82VWCW40P8tLEcv8Q1lSy9YpG08Veq1UetyT0mkLmole2RT0fTsVs6Yw3GyMfqL/QkbKiHBFeC334JGAAYXavch0GdEs/4/O75kUREB+6cgr00Pc34Cq7VE2KpoFM4mtJHebYS+QNkbgpah+/UnSsyAL2mEHI= Received: by 10.141.122.20 with SMTP id z20mr3207111rvm.239.1212167970122; Fri, 30 May 2008 10:19:30 -0700 (PDT) Received: by 10.141.43.7 with HTTP; Fri, 30 May 2008 10:19:30 -0700 (PDT) Message-ID: <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> Date: Fri, 30 May 2008 13:19:30 -0400 From: "Spam Magnet" To: "Timothy Shimmin" X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed Cc: "Eric Sandeen" , xfs@oss.sgi.com In-Reply-To: <483F907A.3020108@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> <483F907A.3020108@sgi.com> X-Barracuda-Connect: rv-out-0708.google.com[209.85.198.241] X-Barracuda-Start-Time: 1212167971 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0145 1.0000 -1.9268 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.93 X-Barracuda-Spam-Status: No, SCORE=-1.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.1, rules version 3.1.51875 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16199 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs > As Eric said. > We chose the ondisk format to have the byte ordering of IRIX so > it should not be a problem. However, parts of the log code in Linux > does not do the necessary endian conversion (due to lack of info at > the relevant points - it only knows as blobs of data) and so you > need the log to be clean. i.e. byte ordering problem just for the log. > Thanks for this info, it's good to have 1 less problem to worry about :) > OOI, as Eric asked, how were you able to mount it all of a sudden? > I am not sure, as I said, to narrow down the problem I am experiencing with other disks, I decided to format an empty, healthy disk under Irix and try to mount it under Linux. The first try was not successful but the second was. Right now I am making an image of the good/healthy disk using dd to see if I can mount that image under Linux. (It's not fun to copy 2GB disks through a USB1.1-SCSI adapter :) My ultimate goal is to make image of the disks that do have partition table but refuse to mount under either OS (magic number and SB validattion failure). I am hoping I can edit the disk image in order to get the data back. Again I'd like to thank Eric, you and Stephen, you guys have been very helpful. From owner-xfs@oss.sgi.com Fri May 30 10:58:26 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 10:58:28 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UHwQtG012427 for ; Fri, 30 May 2008 10:58:26 -0700 X-ASG-Debug-ID: 1212170357-618200040000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy1.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id DE5E21D2E72 for ; Fri, 30 May 2008 10:59:18 -0700 (PDT) Received: from proxy1.bredband.net (proxy1.bredband.net [195.54.101.71]) by cuda.sgi.com with ESMTP id K4LTbE7QMoXxHDoX for ; Fri, 30 May 2008 10:59:18 -0700 (PDT) Received: from ironport2.bredband.com (195.54.101.122) by proxy1.bredband.net (7.3.127) id 4811823A00B21580 for xfs@oss.sgi.com; Fri, 30 May 2008 19:59:17 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AuYyAAbdP0jVctjQPGdsb2JhbACBVpBQAQEBAS0BnFA Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport2.bredband.com with ESMTP; 30 May 2008 19:59:17 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m4UHxC4J001811; Fri, 30 May 2008 19:59:16 +0200 Message-ID: <4840406F.50402@stesmi.com> Date: Fri, 30 May 2008 19:59:11 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Spam Magnet CC: Timothy Shimmin , Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> <483F907A.3020108@sgi.com> <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> In-Reply-To: <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy1.bredband.net[195.54.101.71] X-Barracuda-Start-Time: 1212170358 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0332 1.0000 -1.8062 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.81 X-Barracuda-Spam-Status: No, SCORE=-1.81 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.1, rules version 3.1.51878 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16200 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Spam Magnet wrote: >> As Eric said. >> We chose the ondisk format to have the byte ordering of IRIX so >> it should not be a problem. However, parts of the log code in Linux >> does not do the necessary endian conversion (due to lack of info at >> the relevant points - it only knows as blobs of data) and so you >> need the log to be clean. i.e. byte ordering problem just for the log. >> > > Thanks for this info, it's good to have 1 less problem to worry about :) > >> OOI, as Eric asked, how were you able to mount it all of a sudden? >> > > I am not sure, as I said, to narrow down the problem I am experiencing > with other disks, I decided to format an empty, healthy disk under Irix and > try to mount it under Linux. The first try was not successful but the > second was. > > Right now I am making an image of the good/healthy disk using dd to > see if I can mount that > image under Linux. (It's not fun to copy 2GB disks through a > USB1.1-SCSI adapter :) > My ultimate goal is to make image of the disks that do have > partition table but refuse to mount under either OS (magic number and > SB validattion failure). > I am hoping I can edit the disk image in order to get the data back. Are you dd'ing the whole disk or just the partition(s) you want ? I recommend just doing the partition(s) into seperate files. I'm uncertain if loopback nowadays handles partitions or not. I know it didn't before but there were patches back then. // Stefan From owner-xfs@oss.sgi.com Fri May 30 15:37:50 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 15:37:56 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_50 autolearn=ham version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UMbn3G029878 for ; Fri, 30 May 2008 15:37:50 -0700 X-ASG-Debug-ID: 1212187121-56e701e60000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bay0-omc1-s7.bay0.hotmail.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6BA78C28FA5 for ; Fri, 30 May 2008 15:38:41 -0700 (PDT) Received: from bay0-omc1-s7.bay0.hotmail.com (bay0-omc1-s7.bay0.hotmail.com [65.54.246.79]) by cuda.sgi.com with ESMTP id YPcAEdwIOkA4DRUb for ; Fri, 30 May 2008 15:38:41 -0700 (PDT) Received: from hotmail.com ([64.4.19.84]) by bay0-omc1-s7.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.3959); Fri, 30 May 2008 15:38:40 -0700 Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Fri, 30 May 2008 15:38:40 -0700 Message-ID: Received: from 65.55.160.253 by BAY109-DAV12.phx.gbl with DAV; Fri, 30 May 2008 22:38:40 +0000 X-Originating-IP: [65.55.160.253] X-Originating-Email: [polutegozix36@hotmail.com] X-Sender: polutegozix36@hotmail.com thread-index: AcjCpegqk4MyFsuNRouPXP4d7ZTlIQ== Thread-Topic: Even watch experts have a hard time telling From: "polutegozix36" To: Cc: , , , , , , , , , , X-ASG-Orig-Subj: Even watch experts have a hard time telling Subject: Even watch experts have a hard time telling Date: Fri, 30 May 2008 18:38:40 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.3959 X-OriginalArrivalTime: 30 May 2008 22:38:40.0419 (UTC) FILETIME=[E8620730:01C8C2A5] X-Barracuda-Connect: bay0-omc1-s7.bay0.hotmail.com[65.54.246.79] X-Barracuda-Start-Time: 1212187122 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5105 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.75 X-Barracuda-Spam-Status: No, SCORE=1.75 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA039a, MSGID_FROM_MTA_HEADER X-Barracuda-Spam-Report: Code version 3.1, rules version 3.1.51897 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 1.00 BSF_SC0_SA039a Custom Rule SA039a 0.00 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16201 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: polutegozix36@hotmail.com Precedence: bulk X-list: xfs Get the Finest Watch Copies! We only sell premium products. There's no battery in these Copies just like the real ones since they charge themselves as you move. The second hand moves JUST like the real ones, too. These original watches sell in stores for thousands of dollars. We sell them for much less. Replicated to the Smallest Detail 98% Perfectly Accurate Markings Signature Green Sticker w/ Serial Number on Watch Back Magnified Quickset Date Includes all Proper Markings http://dylunydurad05.blogspot.com From owner-xfs@oss.sgi.com Fri May 30 16:26:11 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 16:26:14 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_47,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4UNQBA4004572 for ; Fri, 30 May 2008 16:26:11 -0700 X-ASG-Debug-ID: 1212190023-21e2021b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from wx-out-0506.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D57CA1764CE4 for ; Fri, 30 May 2008 16:27:03 -0700 (PDT) Received: from wx-out-0506.google.com (wx-out-0506.google.com [66.249.82.226]) by cuda.sgi.com with ESMTP id dHtbhH86zmuUszU7 for ; Fri, 30 May 2008 16:27:03 -0700 (PDT) Received: by wx-out-0506.google.com with SMTP id h30so74235wxd.32 for ; Fri, 30 May 2008 16:27:03 -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:cc:subject:references:in-reply-to:content-type:content-transfer-encoding; bh=Pje9HwmS4j6903yLdf5mMTciH4AQrMc4sIHGbhoB8gM=; b=Lw3cFB2+0Wrd99d1H6bEVbz8pbTfRpkOcJEBdoxGJreRFDj5utidm4hbpgUwxprJjTQdGExVeYVKqGKiuN8rWiDCPTrwB49UyX2aDkufIOOf4N8V4AF1a89tgczCf7VyrsutwL153oFqT4FGZJ6AOK9gxp9RiqgT65NtGIVhRgU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject:references:in-reply-to:content-type:content-transfer-encoding; b=JmFP4io0yDEGoqKCNxl0wT8y2aTXjhRd+D+aau8cpN1SR8opVvtZMoHCVCBB1DR/FbVqi/AvGO5z/pSarsMQdwPe0JscT7JTn3p0ipOTXKXTh2qHqu46nXsuTIHrjhH3uvxnukEV0UqQIO0fluDpkLxvUo3a7cjPH1LxPuGXkks= Received: by 10.90.27.5 with SMTP id a5mr6727586aga.85.1212190022891; Fri, 30 May 2008 16:27:02 -0700 (PDT) Received: from Ahoora.local ( [70.19.190.113]) by mx.google.com with ESMTPS id 1sm1278130agb.30.2008.05.30.16.27.00 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 30 May 2008 16:27:02 -0700 (PDT) Message-ID: <48408D3E.3090401@gmail.com> Date: Fri, 30 May 2008 19:26:54 -0400 From: Hamid User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: Stefan Smietanowski CC: Timothy Shimmin , Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> <483F907A.3020108@sgi.com> <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> <4840406F.50402@stesmi.com> In-Reply-To: <4840406F.50402@stesmi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: wx-out-0506.google.com[66.249.82.226] X-Barracuda-Start-Time: 1212190023 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0038 1.0000 -1.9964 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.00 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.51900 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16202 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: spam.wax@gmail.com Precedence: bulk X-list: xfs Stefan Smietanowski wrote: > > Are you dd'ing the whole disk or just the partition(s) you want ? I > recommend just doing the partition(s) into seperate files. I'm uncertain > if loopback nowadays handles partitions or not. I know it didn't before > but there were patches back then. > > // Stefan > I did the whole disk under Linux: $ dd if=/dev/sdb of=disk.img conv=noerror,sync This is how fdisk sees my image: $ sudo fdisk -ul disk.img Disk disk.img (SGI disk label): 255 heads, 63 sectors, 0 cylinders Units = sectors of 1 * 512 bytes ----- partitions ----- Pt# Device Info Start End Sectors Id System 8: disk.img1 4096 3915599 3911504 a SGI xfs 9: disk.img2 0 4095 4096 0 SGI volhdr 11: disk.img3 0 3915599 3915600 6 SGI volume ----- Bootinfo ----- Bootfile: /unix ----- Directory Entries ----- 0: sgilabel sector 2 size 512 I could mount the image of the healthy disk using: $ sudo mount -t xfs -o loop,offset=$((512*4096)) disk.img /mnt and I was able to browse the content of /mnt :) Trying to mount the whole image didn't work. I was hoping I could do that so it gives me the possibility of modifying the partition table of the bad disks that refuse to mount under either OS. Basically I want to play with bad disks' images to see if I can recover any data without actually modifying the disks. Is there any work around for this ? Should I create a device (rather than a loop) for the whole image ? I should mention that creating the whole disk image by using dd under Irix6.5 and using the same mount command as above in Linux didn't work! Something might have gone wrong during the file transfer from Irix to Linux. If I get a chance I'll try it again. Thanks again From owner-xfs@oss.sgi.com Fri May 30 17:18:31 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 17:18:36 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_47 autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4V0IV6O007745 for ; Fri, 30 May 2008 17:18:31 -0700 X-ASG-Debug-ID: 1212193162-3eac02730000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy1.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E3CBBC2C085 for ; Fri, 30 May 2008 17:19:22 -0700 (PDT) Received: from proxy1.bredband.net (proxy1.bredband.net [195.54.101.71]) by cuda.sgi.com with ESMTP id Q28DpMJbK3OOY89w for ; Fri, 30 May 2008 17:19:22 -0700 (PDT) Received: from ironport2.bredband.com (195.54.101.122) by proxy1.bredband.net (7.3.127) id 4811823A00B2F2FF for xfs@oss.sgi.com; Sat, 31 May 2008 02:19:21 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ajc0ANs1QEjVctjQPGdsb2JhbACBVYcIiUgBAQEBLQGcNA Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport2.bredband.com with ESMTP; 31 May 2008 02:19:21 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m4V0JEor029769; Sat, 31 May 2008 02:19:20 +0200 Message-ID: <48409981.1050405@stesmi.com> Date: Sat, 31 May 2008 02:19:13 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Hamid CC: Timothy Shimmin , Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> <483F907A.3020108@sgi.com> <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> <4840406F.50402@stesmi.com> <48408D3E.3090401@gmail.com> In-Reply-To: <48408D3E.3090401@gmail.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy1.bredband.net[195.54.101.71] X-Barracuda-Start-Time: 1212193163 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.1, rules version 3.1.51903 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16203 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Hamid wrote: > Stefan Smietanowski wrote: >> >> Are you dd'ing the whole disk or just the partition(s) you want ? I >> recommend just doing the partition(s) into seperate files. I'm uncertain >> if loopback nowadays handles partitions or not. I know it didn't before >> but there were patches back then. >> >> // Stefan >> > I did the whole disk under Linux: > > $ dd if=/dev/sdb of=disk.img conv=noerror,sync > > This is how fdisk sees my image: > > $ sudo fdisk -ul disk.img > Disk disk.img (SGI disk label): 255 heads, 63 sectors, 0 cylinders > Units = sectors of 1 * 512 bytes > > ----- partitions ----- > Pt# Device Info Start End Sectors Id System > 8: disk.img1 4096 3915599 3911504 a SGI xfs > 9: disk.img2 0 4095 4096 0 SGI volhdr > 11: disk.img3 0 3915599 3915600 6 SGI volume > ----- Bootinfo ----- > Bootfile: /unix > ----- Directory Entries ----- > 0: sgilabel sector 2 size 512 > > I could mount the image of the healthy disk using: > > $ sudo mount -t xfs -o loop,offset=$((512*4096)) disk.img /mnt > > and I was able to browse the content of /mnt :) Excellent, that's one step on the way. > Trying to mount the whole image didn't work. I was hoping I could do Well of course, since "mounting" implies a filesystem and how is the mount command to know which partition you want to mount and what filesystem it is to mount? For all it knows you can have 4 partitions with 4 different filesystems on it and how is it to choose the correct one? Remember mounting = enabling a filesystem (in a device or file or...) to be used via a filesystem driver and exported to a mountpoint (/mnt for example). In order to do what you're really after you either use your offset trickery OR use a kernel that can mount partitioned loopback OR write the image to another disk. > that so it gives me the possibility of modifying the partition table of > the bad disks that refuse to mount under either OS. If you want to play with the whole device (ie not files) then you can just run your favorite partition program on your image file or your favorite binary patching program on the image file. > Basically I want to play with bad disks' images to see if I can recover > any data without actually modifying the disks. > Is there any work around for this ? > Should I create a device (rather than a loop) for the whole image ? I think you have the terminology a little mixed up. If you mount a something without supplying -o loop "mount" will assume the filesystem resides in a DEVICE. If you mount a something WHILE supplying -o loop you tell "mount" that it should mount it using a loop device. Note device here, it's trickery really as what it does is that "mount" will FIRST create a new device node "/dev/loop0" for example and then it will mount from that device node. So "should I create a device .." is a little mixed up as that's what mount is doing deep inside. > I should mention that creating the whole disk image by using dd under > Irix6.5 and using the same mount command as above in Linux didn't work! > Something might have gone wrong during the file transfer from Irix to > Linux. If I get a chance I'll try it again. If you do, then create a checksum (sha1sum och md5sum or something) and compare the image before and after transfer to make sure it's identical. // Stefan From owner-xfs@oss.sgi.com Fri May 30 17:21:15 2008 Received: with ECARTIS (v1.0.0; list xfs); Fri, 30 May 2008 17:21:17 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_23, J_CHICKENPOX_47,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4V0LF7E008159 for ; Fri, 30 May 2008 17:21:15 -0700 X-ASG-Debug-ID: 1212193327-171700b90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from proxy1.bredband.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 09DE11B320B8 for ; Fri, 30 May 2008 17:22:07 -0700 (PDT) Received: from proxy1.bredband.net (proxy1.bredband.net [195.54.101.71]) by cuda.sgi.com with ESMTP id owFljw5QmFLBR6mo for ; Fri, 30 May 2008 17:22:07 -0700 (PDT) Received: from ironport.bredband.com (195.54.101.120) by proxy1.bredband.net (7.3.127) id 4811823A00B2F441 for xfs@oss.sgi.com; Sat, 31 May 2008 02:22:07 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ajc0AMo2QEjVctjQPGdsb2JhbACBVYcIiUgBAQEBLQGcMg Received: from c-d0d872d5.06-15-73746f44.cust.bredbandsbolaget.se (HELO DeepSpaceNine.stesmi.com) ([213.114.216.208]) by ironport1.bredband.com with ESMTP; 31 May 2008 02:22:07 +0200 Received: from [127.0.0.1] (voyager.stesmi.com [192.168.1.11]) by DeepSpaceNine.stesmi.com (8.12.11/8.12.11) with ESMTP id m4V0M4tf029901; Sat, 31 May 2008 02:22:06 +0200 Message-ID: <48409A2B.7020506@stesmi.com> Date: Sat, 31 May 2008 02:22:03 +0200 From: Stefan Smietanowski User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 To: Hamid CC: Timothy Shimmin , Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS: SB validate failed Subject: Re: XFS: SB validate failed References: <3607657a0805291005k457791cej1c5f867da0f95965@mail.gmail.com> <483EE5BD.8020407@sandeen.net> <3607657a0805291255i59fd006fi9d6836cf528d19a6@mail.gmail.com> <483F0BC3.2050901@sandeen.net> <3607657a0805291400h3c50165lea6fbea919deed0f@mail.gmail.com> <483F1AED.3010808@sandeen.net> <3607657a0805291446t79808c63l664780c1cbc3d871@mail.gmail.com> <483F907A.3020108@sgi.com> <3607657a0805301019h4a49dc86ne8f1f019629a1c41@mail.gmail.com> <4840406F.50402@stesmi.com> <48408D3E.3090401@gmail.com> <48409981.1050405@stesmi.com> In-Reply-To: <48409981.1050405@stesmi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-AntiVirus: checked by Vexira Milter 1.0.7; VAE 6.29.0.5; VDF 6.29.0.100 X-Barracuda-Connect: proxy1.bredband.net[195.54.101.71] X-Barracuda-Start-Time: 1212193328 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.1, rules version 3.1.51904 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16204 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: stesmi@stesmi.com Precedence: bulk X-list: xfs Stefan Smietanowski wrote: > Hamid wrote: >> Stefan Smietanowski wrote: >>> >>> Are you dd'ing the whole disk or just the partition(s) you want ? I >>> recommend just doing the partition(s) into seperate files. I'm uncertain >>> if loopback nowadays handles partitions or not. I know it didn't before >>> but there were patches back then. >>> >>> // Stefan >>> >> I did the whole disk under Linux: >> >> $ dd if=/dev/sdb of=disk.img conv=noerror,sync >> >> This is how fdisk sees my image: >> >> $ sudo fdisk -ul disk.img >> Disk disk.img (SGI disk label): 255 heads, 63 sectors, 0 cylinders >> Units = sectors of 1 * 512 bytes >> >> ----- partitions ----- >> Pt# Device Info Start End Sectors Id System >> 8: disk.img1 4096 3915599 3911504 a SGI xfs >> 9: disk.img2 0 4095 4096 0 SGI volhdr >> 11: disk.img3 0 3915599 3915600 6 SGI volume >> ----- Bootinfo ----- >> Bootfile: /unix >> ----- Directory Entries ----- >> 0: sgilabel sector 2 size 512 >> >> I could mount the image of the healthy disk using: >> >> $ sudo mount -t xfs -o loop,offset=$((512*4096)) disk.img /mnt >> >> and I was able to browse the content of /mnt :) > > Excellent, that's one step on the way. > >> Trying to mount the whole image didn't work. I was hoping I could do > > Well of course, since "mounting" implies a filesystem and how is > the mount command to know which partition you want to mount and > what filesystem it is to mount? For all it knows you can have 4 > partitions with 4 different filesystems on it and how is it to > choose the correct one? > > Remember mounting = enabling a filesystem (in a device or file or...) > to be used via a filesystem driver and exported to a mountpoint (/mnt > for example). > > In order to do what you're really after you either use your offset > trickery OR use a kernel that can mount partitioned loopback OR write > the image to another disk. > >> that so it gives me the possibility of modifying the partition table >> of the bad disks that refuse to mount under either OS. > > If you want to play with the whole device (ie not files) then you can > just run your favorite partition program on your image file or your > favorite binary patching program on the image file. > >> Basically I want to play with bad disks' images to see if I can >> recover any data without actually modifying the disks. >> Is there any work around for this ? >> Should I create a device (rather than a loop) for the whole image ? > > I think you have the terminology a little mixed up. > > If you mount a something without supplying -o loop "mount" will assume > the filesystem resides in a DEVICE. > > If you mount a something WHILE supplying -o loop you tell "mount" that > it should mount it using a loop device. Note device here, it's trickery > really as what it does is that "mount" will FIRST create a new device > node "/dev/loop0" for example and then it will mount from that device > node. > > So "should I create a device .." is a little mixed up as that's what > mount is doing deep inside. > >> I should mention that creating the whole disk image by using dd under >> Irix6.5 and using the same mount command as above in Linux didn't >> work! Something might have gone wrong during the file transfer from >> Irix to Linux. If I get a chance I'll try it again. > > If you do, then create a checksum (sha1sum och md5sum or something) and And here's me replying to myself... The command that's really use deep down inside is losetup, have a look at the manpage. // Stefan From owner-xfs@oss.sgi.com Sat May 31 00:57:47 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 00:57:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda2.sgi.com [192.48.168.29]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4V7vjbG007113 for ; Sat, 31 May 2008 00:57:47 -0700 X-ASG-Debug-ID: 1212220717-59d402480000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E16B41D5A4F for ; Sat, 31 May 2008 00:58:37 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id xKcfRLuExtnQjveJ for ; Sat, 31 May 2008 00:58:37 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4V7wTOc005554 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sat, 31 May 2008 09:58:30 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4V7wTuc005552 for xfs@oss.sgi.com; Sat, 31 May 2008 09:58:29 +0200 Date: Sat, 31 May 2008 09:58:29 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] check for invalid flags in xfs_attrlist_by_handle Subject: [PATCH] check for invalid flags in xfs_attrlist_by_handle Message-ID: <20080531075829.GA5424@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1212220718 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.1, rules version 3.1.51934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16205 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_attrlist_by_handle should only take the ATTR_ flags for the root namespaces. The ATTR_KERN* flags may change at anytime and expect special preconditions that can't be guaranteed for userspace-originating requests. For example passing down ATTR_KERNNOVAL through xfs_attrlist_by_handle will hit an assert in debug builds currently. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-28 17:37:02.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-28 17:42:18.000000000 +0200 @@ -470,6 +470,12 @@ xfs_attrlist_by_handle( if (al_hreq.buflen > XATTR_LIST_MAX) return -XFS_ERROR(EINVAL); + /* + * Reject flags, only allow namespaces. + */ + if (al_hreq.flags & ~(ATTR_ROOT|ATTR_TRUST|ATTR_SECURE)) + return -XFS_ERROR(EINVAL); + error = xfs_vget_fsop_handlereq(mp, parinode, &al_hreq.hreq, &inode); if (error) goto out; From owner-xfs@oss.sgi.com Sat May 31 01:00:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 01:00:44 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4V80cR6007672 for ; Sat, 31 May 2008 01:00:38 -0700 X-ASG-Debug-ID: 1212220890-5408026a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from verein.lst.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 877A2176534B for ; Sat, 31 May 2008 01:01:30 -0700 (PDT) Received: from verein.lst.de (verein.lst.de [213.95.11.210]) by cuda.sgi.com with ESMTP id tZva5l9x41teExMD for ; Sat, 31 May 2008 01:01:30 -0700 (PDT) Received: from verein.lst.de (localhost [127.0.0.1]) by verein.lst.de (8.12.3/8.12.3/Debian-7.1) with ESMTP id m4V81LOc005721 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Sat, 31 May 2008 10:01:21 +0200 Received: (from hch@localhost) by verein.lst.de (8.12.3/8.12.3/Debian-6.6) id m4V81LUs005719 for xfs@oss.sgi.com; Sat, 31 May 2008 10:01:21 +0200 Date: Sat, 31 May 2008 10:01:21 +0200 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] attrmulti cleanup Subject: [PATCH] attrmulti cleanup Message-ID: <20080531080121.GB5424@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Scanned-By: MIMEDefang 2.39 X-Barracuda-Connect: verein.lst.de[213.95.11.210] X-Barracuda-Start-Time: 1212220891 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.1, rules version 3.1.51934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16206 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@lst.de Precedence: bulk X-list: xfs xfs_attrmulti_by_handle currently request the size based on sizeof(attr_multiop_t) but should be using sizeof(xfs_attr_multiop_t) because that is what it is dealing with. Despite beeing wrong this actually harmless in practice because both structures are the same size on all platforms. But this sizeof was the only user of struct attr_multiop so we can just kill it. Also move the ATTR_OP_* defines xfs_attr.h into the struct xfs_attr_multiop defintion in xfs_fs.h because they are only used with that structure, and are part of the user ABI for the XFS_IOC_ATTRMULTI_BY_HANDLE ioctl. Signed-off-by: Christoph Hellwig Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c =================================================================== --- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-28 17:42:18.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl.c 2008-05-28 17:42:36.000000000 +0200 @@ -598,7 +598,7 @@ xfs_attrmulti_by_handle( goto out; error = E2BIG; - size = am_hreq.opcount * sizeof(attr_multiop_t); + size = am_hreq.opcount * sizeof(xfs_attr_multiop_t); if (!size || size > 16 * PAGE_SIZE) goto out_vn_rele; Index: linux-2.6-xfs/fs/xfs/xfs_attr.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_attr.h 2008-05-28 17:41:06.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_attr.h 2008-05-28 17:42:36.000000000 +0200 @@ -100,22 +100,6 @@ typedef struct attrlist_ent { /* data fr &((char *)buffer)[ ((attrlist_t *)(buffer))->al_offset[index] ]) /* - * Multi-attribute operation vector. - */ -typedef struct attr_multiop { - int am_opcode; /* operation to perform (ATTR_OP_GET, etc.) */ - int am_error; /* [out arg] result of this sub-op (an errno) */ - char *am_attrname; /* attribute name to work with */ - char *am_attrvalue; /* [in/out arg] attribute value (raw bytes) */ - int am_length; /* [in/out arg] length of value */ - int am_flags; /* bitwise OR of attr API flags defined above */ -} attr_multiop_t; - -#define ATTR_OP_GET 1 /* return the indicated attr's value */ -#define ATTR_OP_SET 2 /* set/create the indicated attr/value pair */ -#define ATTR_OP_REMOVE 3 /* remove the indicated attr */ - -/* * Kernel-internal version of the attrlist cursor. */ typedef struct attrlist_cursor_kern { Index: linux-2.6-xfs/fs/xfs/xfs_fs.h =================================================================== --- linux-2.6-xfs.orig/fs/xfs/xfs_fs.h 2008-05-28 17:41:06.000000000 +0200 +++ linux-2.6-xfs/fs/xfs/xfs_fs.h 2008-05-28 17:42:36.000000000 +0200 @@ -372,6 +372,9 @@ typedef struct xfs_fsop_attrlist_handler typedef struct xfs_attr_multiop { __u32 am_opcode; +#define ATTR_OP_GET 1 /* return the indicated attr's value */ +#define ATTR_OP_SET 2 /* set/create the indicated attr/value pair */ +#define ATTR_OP_REMOVE 3 /* remove the indicated attr */ __s32 am_error; void __user *am_attrname; void __user *am_attrvalue; From owner-xfs@oss.sgi.com Sat May 31 01:04:04 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 01:04:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4V844QZ008199 for ; Sat, 31 May 2008 01:04:04 -0700 X-ASG-Debug-ID: 1212221096-5cba02250000-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 E7BDB17653D7; Sat, 31 May 2008 01:04:56 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id BrHXn8cYkMu5sMJC; Sat, 31 May 2008 01:04:56 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1K2M5A-0006Av-Ax; Sat, 31 May 2008 08:04:56 +0000 Date: Sat, 31 May 2008 04:04:56 -0400 From: Christoph Hellwig To: Barry Naujok Cc: "xfs@oss.sgi.com" X-ASG-Orig-Subj: Re: REVIEW: fix up xfs_repair I/O size for filesystems with >= 16KB filesystem blocksize Subject: Re: REVIEW: fix up xfs_repair I/O size for filesystems with >= 16KB filesystem blocksize Message-ID: <20080531080456.GA23803@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.17 (2007-11-01) 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: 1212221096 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.1, rules version 3.1.51934 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16207 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Thu, May 29, 2008 at 04:09:41PM +1000, Barry Naujok wrote: > For 4KB block size filesystems (the default), inode chunks are read and > written > in 8KB "clusters". With a 16KB block size (possible on ia64 boxes), the > inode > chunks are read/written in 16KB I/Os (matches the filesystem block size). > > This patch fixes up the I/Os for filesystems with a blocksize greater than > 8KB. Looks good. From owner-xfs@oss.sgi.com Sat May 31 06:20:01 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 06:20:05 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4VDJxkm000701 for ; Sat, 31 May 2008 06:20:01 -0700 X-ASG-Debug-ID: 1212240052-2fc3029d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ZenIV.linux.org.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D614F1B32B4F for ; Sat, 31 May 2008 06:20:52 -0700 (PDT) Received: from ZenIV.linux.org.uk (zeniv.linux.org.uk [195.92.253.2]) by cuda.sgi.com with ESMTP id L9wLfyYQy0Lx1G1G for ; Sat, 31 May 2008 06:20:52 -0700 (PDT) Received: from viro by ZenIV.linux.org.uk with local (Exim 4.68 #1 (Red Hat Linux)) id 1K2R0q-0002BU-EK; Sat, 31 May 2008 14:20:48 +0100 Date: Sat, 31 May 2008 14:20:48 +0100 From: Al Viro To: Miklos Szeredi Cc: hch@lst.de, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080531132048.GA4201@ZenIV.linux.org.uk> References: <20080520060838.GA6436@lst.de> <20080520083351.GA14826@lst.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: zeniv.linux.org.uk[195.92.253.2] X-Barracuda-Start-Time: 1212240052 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0194 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.1, rules version 3.1.51956 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16208 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: viro@ZenIV.linux.org.uk Precedence: bulk X-list: xfs On Thu, May 22, 2008 at 08:10:50PM +0200, Miklos Szeredi wrote: > But there are quite a few others which don't call inode_setattr (which > means that the unchanged time optimization is lost), or which do > something possibly slow in their ->setattr(): > > adfs, 9p, afs, coda, gfs2 ... > > just to name a few at the start of the alphabet. > > So it looks to me as this could cause some unintended performance > regressions in these filesystems. Actually, there's worse one: ext3. It *does* call inode_setattr(), all right, but then it proceeds to call ext3_orphan_del(). Which will lock_super(inode->i_sb); if (list_empty(&ei->i_orphan)) { unlock_super(inode->i_sb); return 0; } and bugger off, but... * it's going to cost us * code in _caller_ is bogus - we call that sucker regardless of whether we had ATTR_SIZE in ia_valid And there's one more problem, promising very ugly code review: locking rules for notify_change() had suddenly changed - you are calling it without i_mutex now. And ext3_setattr() is not happy - especially due to this blind call of ext3_orphan_del() in there. We can easily fix that one, but you'll need to audit the rest of instances... From owner-xfs@oss.sgi.com Sat May 31 06:23:59 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 06:24:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.3.0-r574664 Received: from cuda.sgi.com ([192.48.176.15]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4VDNvlH001250 for ; Sat, 31 May 2008 06:23:58 -0700 X-ASG-Debug-ID: 1212240289-2fb802950000-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 810341B32B6B for ; Sat, 31 May 2008 06:24:50 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id gYktaQKnxaP2FjB0 for ; Sat, 31 May 2008 06:24:50 -0700 (PDT) Received: from hch by bombadil.infradead.org with local (Exim 4.68 #1 (Red Hat Linux)) id 1K2R4f-000627-0d; Sat, 31 May 2008 13:24:45 +0000 Date: Sat, 31 May 2008 09:24:45 -0400 From: Christoph Hellwig To: Al Viro Cc: Miklos Szeredi , hch@lst.de, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080531132444.GA22936@infradead.org> References: <20080520060838.GA6436@lst.de> <20080520083351.GA14826@lst.de> <20080531132048.GA4201@ZenIV.linux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080531132048.GA4201@ZenIV.linux.org.uk> User-Agent: Mutt/1.5.17 (2007-11-01) 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: 1212240290 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.1, rules version 3.1.51956 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16209 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: hch@infradead.org Precedence: bulk X-list: xfs On Sat, May 31, 2008 at 02:20:48PM +0100, Al Viro wrote: > And there's one more problem, promising very ugly code review: locking > rules for notify_change() had suddenly changed - you are calling it > without i_mutex now. And ext3_setattr() is not happy - especially due > to this blind call of ext3_orphan_del() in there. We can easily fix > that one, but you'll need to audit the rest of instances... Yeah, I've actually started an audit of the setattr instance and there's even more crap turning up. I'm working on a bigger series to sort these things out. From owner-xfs@oss.sgi.com Sat May 31 06:34:39 2008 Received: with ECARTIS (v1.0.0; list xfs); Sat, 31 May 2008 06:34:43 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.0-r574664 (2007-09-11) 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-r574664 Received: from cuda.sgi.com (cuda1.sgi.com [192.48.168.28]) by oss.sgi.com (8.12.11.20060308/8.12.11/SuSE Linux 0.7) with ESMTP id m4VDYc9P001957 for ; Sat, 31 May 2008 06:34:39 -0700 X-ASG-Debug-ID: 1212240930-5953016c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ZenIV.linux.org.uk (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4B4421228114 for ; Sat, 31 May 2008 06:35:30 -0700 (PDT) Received: from ZenIV.linux.org.uk (zeniv.linux.org.uk [195.92.253.2]) by cuda.sgi.com with ESMTP id L3HfZMg5yhc3YrC0 for ; Sat, 31 May 2008 06:35:30 -0700 (PDT) Received: from viro by ZenIV.linux.org.uk with local (Exim 4.68 #1 (Red Hat Linux)) id 1K2RF1-0002Rq-9f; Sat, 31 May 2008 14:35:27 +0100 Date: Sat, 31 May 2008 14:35:27 +0100 From: Al Viro To: Christoph Hellwig Cc: Miklos Szeredi , hch@lst.de, linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com, Artem.Bityutskiy@nokia.com X-ASG-Orig-Subj: Re: [PATCH] always set a/c/mtime through ->setattr Subject: Re: [PATCH] always set a/c/mtime through ->setattr Message-ID: <20080531133527.GB28946@ZenIV.linux.org.uk> References: <20080520060838.GA6436@lst.de> <20080520083351.GA14826@lst.de> <20080531132048.GA4201@ZenIV.linux.org.uk> <20080531132444.GA22936@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080531132444.GA22936@infradead.org> User-Agent: Mutt/1.5.17 (2007-11-01) X-Barracuda-Connect: zeniv.linux.org.uk[195.92.253.2] X-Barracuda-Start-Time: 1212240931 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0017 1.0000 -2.0101 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.01 X-Barracuda-Spam-Status: No, SCORE=-2.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.1, rules version 3.1.51957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV 0.91.2/6021/Wed Feb 27 15:55:48 2008 on oss.sgi.com X-Virus-Status: Clean X-archive-position: 16210 X-ecartis-version: Ecartis v1.0.0 Sender: xfs-bounce@oss.sgi.com Errors-to: xfs-bounce@oss.sgi.com X-original-sender: viro@ZenIV.linux.org.uk Precedence: bulk X-list: xfs On Sat, May 31, 2008 at 09:24:45AM -0400, Christoph Hellwig wrote: > On Sat, May 31, 2008 at 02:20:48PM +0100, Al Viro wrote: > > And there's one more problem, promising very ugly code review: locking > > rules for notify_change() had suddenly changed - you are calling it > > without i_mutex now. And ext3_setattr() is not happy - especially due > > to this blind call of ext3_orphan_del() in there. We can easily fix > > that one, but you'll need to audit the rest of instances... > > Yeah, I've actually started an audit of the setattr instance and there's > even more crap turning up. I'm working on a bigger series to sort these > things out. Grabbing i_mutex may get very interesting on pagefault paths when dirtying a page - locking rules are interesting there already...