From BATV+67b1563f91cc02798c7c+2047+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 1 02:09:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n31798fm056891 for ; Wed, 1 Apr 2009 02:09:24 -0500 X-ASG-Debug-ID: 1238569756-7b5b01630000-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 A6F6213E48C8 for ; Wed, 1 Apr 2009 00:09:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 7PqwkGmTfpsPRlTu for ; Wed, 01 Apr 2009 00:09:16 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LouYh-00040T-D0; Wed, 01 Apr 2009 07:08:23 +0000 Date: Wed, 1 Apr 2009 03:08:23 -0400 From: Christoph Hellwig To: "Josef 'Jeff' Sipek" Cc: xfs@oss.sgi.com, "Josef 'Jeff' Sipek" X-ASG-Orig-Subj: Re: [PATCH 1/2] xfstests: make the mode consistent for all the test scripts Subject: Re: [PATCH 1/2] xfstests: make the mode consistent for all the test scripts Message-ID: <20090401070823.GA3044@infradead.org> References: <1238536234-26969-1-git-send-email-jsipek@eecs.umich.edu> <1238536234-26969-2-git-send-email-jsipek@eecs.umich.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1238536234-26969-2-git-send-email-jsipek@eecs.umich.edu> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1238569777 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean A consistant mode sounds fine to me, but we'd have to pull this in as git-pull not as patch, right? Also for some reason some modes seem to change when actually running xfstests which makes git barf when pulling into such a tree again, not sure where that comes from. From BATV+67b1563f91cc02798c7c+2047+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 1 02:09:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3179Rkc056909 for ; Wed, 1 Apr 2009 02:09:42 -0500 X-ASG-Debug-ID: 1238569724-220501fc0000-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 DF2371DCC99 for ; Wed, 1 Apr 2009 00:08:44 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id lm6zpLMjbXCcN6mu for ; Wed, 01 Apr 2009 00:08:44 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LouZ2-0004GC-Fx; Wed, 01 Apr 2009 07:08:44 +0000 Date: Wed, 1 Apr 2009 03:08:44 -0400 From: Christoph Hellwig To: "Josef 'Jeff' Sipek" Cc: xfs@oss.sgi.com, "Josef 'Jeff' Sipek" X-ASG-Orig-Subj: Re: [PATCH 2/2] xfstests: Add an ignore file Subject: Re: [PATCH 2/2] xfstests: Add an ignore file Message-ID: <20090401070843.GB3044@infradead.org> References: <1238536234-26969-1-git-send-email-jsipek@eecs.umich.edu> <1238536234-26969-3-git-send-email-jsipek@eecs.umich.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1238536234-26969-3-git-send-email-jsipek@eecs.umich.edu> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1238569744 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Mar 31, 2009 at 05:50:34PM -0400, Josef 'Jeff' Sipek wrote: > From: Josef 'Jeff' Sipek > > Ignore generated files. Sounds good. The other packages want the same treatment. From BATV+67b1563f91cc02798c7c+2047+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 1 02:22:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_53 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n317LfUR057550 for ; Wed, 1 Apr 2009 02:21:56 -0500 X-ASG-Debug-ID: 1238570530-4f9600290000-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 062D513E4939; Wed, 1 Apr 2009 00:22:10 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HMYTFKrTMZFBsYZi; Wed, 01 Apr 2009 00:22:10 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LoulB-00058N-Rl; Wed, 01 Apr 2009 07:21:17 +0000 Date: Wed, 1 Apr 2009 03:21:17 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix async io error handling in fsx Subject: Re: [PATCH] xfstests: fix async io error handling in fsx Message-ID: <20090401072117.GA25131@infradead.org> References: <1238442101-24311-1-git-send-email-felixb@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1238442101-24311-1-git-send-email-felixb@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1238570531 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Mar 30, 2009 at 02:41:41PM -0500, Felix Blyakher wrote: > The result of async io returned in the event.res in addition > to the number of bytes read/written provides negated error > number. The broken libaio defines event.res as unsigned > while the same structure in the kernel defines it as signed. > The kernel indeed treat it as signed, and returns the > negated error number. Till libaio is fixed we provide > the signed long temp var. > Also set errno for each error condition in aio_rw, as the > caller is not aio aware and expects ret(-1)+errno by the > traditional libc convention. > > Signed-off-by: Felix Blyakher > --- > ltp/fsx.c | 42 +++++++++++++++++++++++++++++++++++------- > 1 files changed, 35 insertions(+), 7 deletions(-) > if (len != event.res) { > - fprintf(stderr, "bad read length: %lu instead of %u\n", > - event.res, len); > + /* > + * The b0rked libaio defines event.res as unsigned. > + * However the kernel strucuture has it signed, > + * and it's used to pass negated error value. > + * Till the library is fixed use the temp var. > + */ > + res = (long)event.res; > + if (res >= 0) > + fprintf(stderr, "bad io length: %lu instead of %u\n", > + res, len); > + else { > + fprintf(stderr, "errcode=%d\n", -res); > + fprintf(stderr, "aio_rw: async io failed: %s\n", > + strerror(-res)); > + goto out_error; > + } > + > } > return event.res; > + > +out_error: > + /* > + * The caller expects error return in traditional libc > + * convention, i.e. -1 and the errno set to error. > + */ > + errno = ret <= 0 ? -ret : -res; > + return -1; I wonder why this doesn't give a compiler warning. res is only initialized in that last branch above. Wouldn't it be better to set ret to res inside that branch and only use ret down here? From jeffpc@josefsipek.net Wed Apr 1 09:36:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n31EZk2C087759 for ; Wed, 1 Apr 2009 09:35:56 -0500 X-ASG-Debug-ID: 1238596522-4c2401a50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 020321C890FB for ; Wed, 1 Apr 2009 07:35:22 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id 5YeIZyn3ggiCLpDt for ; Wed, 01 Apr 2009 07:35:22 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 7DBC91C00DEC; Wed, 1 Apr 2009 10:35:22 -0400 (EDT) Date: Wed, 1 Apr 2009 10:35:22 -0400 From: "Josef 'Jeff' Sipek" To: Christoph Hellwig Cc: "Josef 'Jeff' Sipek" , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] xfstests: make the mode consistent for all the test scripts Subject: Re: [PATCH 1/2] xfstests: make the mode consistent for all the test scripts Message-ID: <20090401143522.GO19690@josefsipek.net> References: <1238536234-26969-1-git-send-email-jsipek@eecs.umich.edu> <1238536234-26969-2-git-send-email-jsipek@eecs.umich.edu> <20090401070823.GA3044@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090401070823.GA3044@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1238596523 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.21957 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 01, 2009 at 03:08:23AM -0400, Christoph Hellwig wrote: > A consistant mode sounds fine to me, but we'd have to pull this in as > git-pull not as patch, right? Depends on how you manage xfs-dev.git. patch(1) won't work, but git-apply will. Personally, I use guilt [1], which let's me push/pop patches much like quilt, but since it uses git-apply, it works with all the fancy things git diffs offer. > Also for some reason some modes seem to change when actually running > xfstests which makes git barf when pulling into such a tree again, not > sure where that comes from. Hrm, I haven't seen this yet. Josef 'Jeff' Sipek. [1] http://git.kernel.org/?p=linux/kernel/git/jsipek/guilt.git;a=summary -- The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers. - Bill Gates, The Road Ahead, pg. 265 From felixb@oss.sgi.com Wed Apr 1 17:00:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n31M0kTN105169 for ; Wed, 1 Apr 2009 17:00:51 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n31M0kVg105127; Wed, 1 Apr 2009 17:00:46 -0500 Date: Wed, 1 Apr 2009 17:00:46 -0500 Message-Id: <200904012200.n31M0kVg105127@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v2.6.28-rc3-21331-gf36345f X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: 1aacc064e029f0017384e463121b98f06d3a2cc3 X-Git-Newrev: f36345ff9a4a77f2cc576a2777b6256d5c8798fa This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated f36345f Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus c2ec175 mm: page_mkwrite change prototype to match fault from 1aacc064e029f0017384e463121b98f06d3a2cc3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f36345ff9a4a77f2cc576a2777b6256d5c8798fa Merge: 1aacc064e029f0017384e463121b98f06d3a2cc3 8b53ef33d9d8fa5f771ae11cc6a6e7bc0182beec Author: Felix Blyakher Date: Wed Apr 1 16:58:39 2009 -0500 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into for-linus commit c2ec175c39f62949438354f603f4aa170846aabb Author: Nick Piggin Date: Tue Mar 31 15:23:21 2009 -0700 mm: page_mkwrite change prototype to match fault Change the page_mkwrite prototype to take a struct vm_fault, and return VM_FAULT_xxx flags. There should be no functional change. This makes it possible to return much more detailed error information to the VM (and also can provide more information eg. virtual_address to the driver, which might be important in some special cases). This is required for a subsequent fix. And will also make it easier to merge page_mkwrite() with fault() in future. Signed-off-by: Nick Piggin Cc: Chris Mason Cc: Trond Myklebust Cc: Miklos Szeredi Cc: Steven Whitehouse Cc: Mark Fasheh Cc: Joel Becker Cc: Artem Bityutskiy Cc: Felix Blyakher Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_file.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) hooks/post-receive -- XFS development tree From clayne@signalpunk.com Wed Apr 1 21:48:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n322mUi5116649 for ; Wed, 1 Apr 2009 21:48:40 -0500 X-ASG-Debug-ID: 1238640521-0ab701710000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from ns1.signalpunk.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E28EB13E9BFE for ; Wed, 1 Apr 2009 19:48:41 -0700 (PDT) Received: from ns1.signalpunk.com (ns1.signalpunk.com [74.86.59.106]) by cuda.sgi.com with ESMTP id 8bnHERHSUDXD47Cl for ; Wed, 01 Apr 2009 19:48:41 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by ns1.signalpunk.com (Postfix) with ESMTP id E96D358172800 for ; Thu, 2 Apr 2009 02:47:44 +0000 (GMT) Received: from localhost ([127.0.0.1] helo=localhost) by ns1.signalpunk.com; 2 Apr 2009 02:47:44 +0000 Date: Thu, 2 Apr 2009 02:47:44 +0000 From: Christopher Layne To: xfs@oss.sgi.com X-ASG-Orig-Subj: xfs_trans_log_inode: OOPS in 2.6.28.7 Subject: xfs_trans_log_inode: OOPS in 2.6.28.7 Message-ID: <20090402024744.GB23044@ns1.signalpunk.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) X-Barracuda-Connect: ns1.signalpunk.com[74.86.59.106] X-Barracuda-Start-Time: 1238640543 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.21998 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean While I think I might be able to reproduce this it's not something I particularly want to reproduce. The precursor was cancelling an already running xfs_fsr, removing the .fsr_last, and immediately restarting it (forcing a new cycle). Right after I received an OOPS and all file system access was blocked necessitating a hard reboot and xfs_repair. -cl [493260.254041] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018 [493260.254041] IP: [] xfs_trans_find_item+0x1/0xa [493260.254041] PGD 63143067 PUD 41bf067 PMD 0 [493260.254041] Oops: 0000 [#1] SMP [493260.254041] last sysfs file: /sys/devices/pci0000:00/0000:00:05.1/host2/target2:0:0/2:0:0:0/queue_depth [493260.254286] CPU 0 [493260.254443] Modules linked in: hid_dell hid_pl hid_cypress hid_gyration hid_bright hid_sony hid_samsung hid_microsoft hid_monterey hid_ezkey hid_apple hid_a4tech hid_logitech hid_cherry hid_sunplus hid_petalynx hid_belkin hid_chicony usbhid hid usb_storage ohci_hcd ehci_hcd k8temp hwmon usbcore [493260.255847] Pid: 4024, comm: xfs_fsr Not tainted 2.6.28.7 #3 [493260.255847] RIP: 0010:[] [] xfs_trans_find_item+0x1/0xa [493260.255847] RSP: 0018:ffff880002ec1b78 EFLAGS: 00010296 [493260.255847] RAX: 0000000000000008 RBX: ffff88006759d048 RCX: ffff88002ccf7c20 [493260.256085] RDX: 0000000000000005 RSI: 0000000000000000 RDI: ffff88006759d048 [493260.256398] RBP: ffff880002ec1ba8 R08: 0000000000000000 R09: ffff88002ccf7c50 [493260.256710] R10: ffa5a5a5a5a5a5a5 R11: 0000000204cb1be0 R12: ffff88002ccf7bc0 [493260.257025] R13: 0000000000000005 R14: 0000000000000000 R15: 0000000000000005 [493260.257342] FS: 00007f633b1f46f0(0000) GS:ffffffff80664040(0000) knlGS:0000000000000000 [493260.257659] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [493260.257821] CR2: 0000000000000018 CR3: 000000006183b000 CR4: 00000000000006e0 [493260.258138] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [493260.258455] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [493260.258771] Process xfs_fsr (pid: 4024, threadinfo ffff880002ec0000, task ffff880002e48740) [493260.259090] Stack: [493260.259247] ffff880002ec1ba8 ffffffff8031586c ffff88002ccf7bc0 0000000000000000 [493260.259415] ffff88002ccf7bc0 ffff88002ccf7c50 ffff880002ec1cd8 ffffffff802e8a8f [493260.259735] ffff880002ec1c9c 0000000000000000 ffff880000000000 0000000000000000 [493260.260209] Call Trace: [493260.260367] [] ? xfs_trans_log_inode+0x22/0x4c [493260.260531] [] xfs_bunmapi+0x738/0x782 [493260.260695] [] xfs_itruncate_finish+0x160/0x27b [493260.260860] [] xfs_inactive+0x1e3/0x411 [493260.261023] [] ? __up_read+0x8f/0x98 [493260.263061] [] xfs_fs_clear_inode+0xbf/0x106 [493260.263061] [] clear_inode+0x71/0xca [493260.263061] [] generic_delete_inode+0x8b/0xf3 [493260.263061] [] generic_drop_inode+0x17/0x169 [493260.263061] [] iput+0x61/0x65 [493260.263061] [] dentry_iput+0x8e/0x9e [493260.263061] [] d_kill+0x34/0x54 [493260.263061] [] dput+0x130/0x13d [493260.263061] [] __fput+0x16b/0x18f [493260.263061] [] fput+0x15/0x17 [493260.263061] [] filp_close+0x67/0x72 [493260.263061] [] sys_close+0x99/0xd2 [493260.263061] [] system_call_fastpath+0x16/0x1b [493260.263061] Code: 66 83 4b 64 04 48 8b 45 d0 4c 89 a0 a0 00 00 00 48 8b 45 d0 49 89 07 48 83 c4 28 44 89 e8 5b 41 5c 41 5d 41 5e 41 5f c9 c3 90 55 <48> 8b 46 18 48 89 e5 c9 c3 55 8a 56 0b 31 ff 41 ba 01 00 00 00 [493260.263061] RIP [] xfs_trans_find_item+0x1/0xa [493260.263061] RSP [493260.263061] CR2: 0000000000000018 [493260.263067] ---[ end trace 9923f588304d7b6d ]--- From deni@nbnet.nb.ca Thu Apr 2 08:31:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.6 required=5.0 tests=BAYES_20,J_CHICKENPOX_43, TVD_SPACE_RATIO autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32DUgqS144455 for ; Thu, 2 Apr 2009 08:30:52 -0500 X-ASG-Debug-ID: 1238679057-6dbc00ce0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from simmts6-srv.bellnexxia.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5B8AA13EBB84 for ; Thu, 2 Apr 2009 06:30:57 -0700 (PDT) Received: from simmts6-srv.bellnexxia.net (simmts6.bellnexxia.net [206.47.199.164]) by cuda.sgi.com with ESMTP id J0qO4UTmOwjtPFfk for ; Thu, 02 Apr 2009 06:30:57 -0700 (PDT) Received: from simip9-ac.srvr.bell.ca ([206.47.199.87]) by simmts6-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20090402132953.VGAL1652.simmts6-srv.bellnexxia.net@simip9-ac.srvr.bell.ca> for ; Thu, 2 Apr 2009 09:29:53 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ako1AIVa1EnOL8eh/2dsb2JhbACBUoNvh1zDB4NqBg Received: from simfep6.srvr.bell.ca (HELO smtpacout.sympatico.ca) ([206.47.199.161]) by simip9-ac.srvr.bell.ca with SMTP; 02 Apr 2009 09:36:39 -0400 X-Mailer: Openwave WebEngine, version 2.8.10 (webedge20-101-191-20030113) X-Originating-IP: [207.58.168.86] From: Irish Online-Draw Reply-To: sofiadavidclaim@btinternet.com To: ..@nbnet.nb.ca X-ASG-Orig-Subj: Re Subject: Re Date: Thu, 2 Apr 2009 9:29:53 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit Message-Id: <20090402132953.VGAL1652.simmts6-srv.bellnexxia.net@simip9-ac.srvr.bell.ca> X-Barracuda-Connect: simmts6.bellnexxia.net[206.47.199.164] X-Barracuda-Start-Time: 1238679078 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5228 1.0000 0.7500 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.76 X-Barracuda-Spam-Status: No, SCORE=0.76 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_DOMAIN_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22037 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.01 BSF_SC0_SA_TO_FROM_DOMAIN_MATCH Sender Domain Matches Recipient Domain X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean You Won 750,000Pounds.Send Name,Age,Occupation,Country. Agent Email:sofiadavidclaim@btinternet.com From gnb@sgi.com Thu Apr 2 09:59:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32Ewf2v148510 for ; Thu, 2 Apr 2009 09:58:51 -0500 Received: from larry.melbourne.sgi.com (larry.melbourne.sgi.com [134.14.52.130]) by relay2.corp.sgi.com (Postfix) with SMTP id 2768E30408B for ; Thu, 2 Apr 2009 07:58:17 -0700 (PDT) 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 BAA03161; Fri, 3 Apr 2009 01:29:18 +1100 Message-ID: <49D4CBA0.40408@sgi.com> Date: Fri, 03 Apr 2009 01:28:48 +1100 From: Greg Banks Reply-To: Greg Banks Organization: File Serving Technologies ; Silicon Graphics Inc. User-Agent: Thunderbird 1.5.0.12 (X11/20060911) MIME-Version: 1.0 To: NFS list , Linux Filesystem list , XFS OSS list , Linux kernel list Subject: [ANNOUNCE] Filesystem test tools open-sourced by SGI Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean G'day, SGI is releasing to the Open Source community a number of internal SGI testing and debugging tools for NFS. Some of these tools are also applicable to filesystems in general. These tools are being released under the GNU General Public License (GPL) version 2, in the hope that the Linux filesystem development community may find them useful. They are provided as-is, without any support. Please do not contact SGI for support on any of these tools. Some of these tools are unfinished. Others rely on build infrastructure in internal SGI trees which cannot be released. The tools are provided as tarball snapshots of internal SGI source control trees; for a number of technical reasons it is not possible to provide access to those trees or to create external repositories. The tools are available for download now at http://oss.sgi.com/projects/nfs/testtools/ A brief description of each tool follows. Checkstream ----------- Simple data corruption testing utilities based on the concept of generating a stream of small self-contained records which can be decoded in a way which makes certain common data corruption modes automatically diagnosable. Has been useful for automated testing of NFS, XFS, and CXFS in SGI. Weber ----- Test load generator for NFS. Uses multiple threads, multiple sockets and multiple IP addresses to simulate loads from many machines, thus enabling testing of NFS server setups with larger client counts than can be tested with physical infrastructure (or Virtual Machine clients). Has been useful in automated NFS testing and as a pinpoint NFS load generator tool for performance development. NFS PMDA -------- PCP Data Agent for extended NFS server statistics. Exports to PCP the new statistics (measuring per-client and per-server performance) which are provided by SGI's EnhancedNFS kernel patches. Samba PMDA ---------- PCP Data Agent for extended Samba server statistics. Exports to PCP the additional statistics (measuring per-client and per-server performance) which are provided by SGI's patches to Samba. Ddnfs ----- Filesystem load generation program designed to simulate the IO load placed on an XFS filesystem by the NFS server in response to certain NFS loads. Intended for use in XFS automated testing, to test performance and correctness of certain XFS functionality not otherwise exercised by the existing XFS test suite, but never integrated into XFSQA. Pmapload -------- Test suite for the portmap and rpcbind programs (which are NFS infrastructure components based on code open-sourced by Sun Microsystems and used by every Unix and Linux). Developed by SGI to test changes imported into those programs from newer Sun source code during the NFS on IPv6 work for Irix several years ago. RPC Exerciser ------------- Test suite for the userspace RPC infrastructure libraries, (which are NFS infrastructure components based on code open-sourced by Sun Microsystems and used by every Unix and Linux). Developed by SGI to test changes imported into those libraries from newer Sun source code during the NFS on IPv6 work for Irix several years ago. Testfs ------ Linux kernel module which provides an in-memory filesystem which forgets all data written to it. Also can be configured to simulate timing behaviour on reads and writes. This is useful for NFS performance testing without a fast disk subsystem. StReplay -------- Program which reads the system call trace of another program (obtained using the widely available strace utility) and replays the IO pattern. This was intended to be used for automated NFS and XFS testing and for NFS and XFS problem diagnosis, but was never completed as the author transferred to another team. Could be the basis for a very useful filesystem test tool. -- Greg Banks, P.Engineer, SGI Australian Software Group. the brightly coloured sporks of revolution. I don't speak for SGI. From tosubrata@gmail.com Thu Apr 2 10:06:16 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32F5ub6148752 for ; Thu, 2 Apr 2009 10:06:06 -0500 X-ASG-Debug-ID: 1238684711-0c3f029f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f177.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C03CE1C8F1DF for ; Thu, 2 Apr 2009 08:05:11 -0700 (PDT) Received: from mail-fx0-f177.google.com (mail-fx0-f177.google.com [209.85.220.177]) by cuda.sgi.com with ESMTP id RiXhZPx18PYg9fRc for ; Thu, 02 Apr 2009 08:05:11 -0700 (PDT) Received: by fxm25 with SMTP id 25so562238fxm.20 for ; Thu, 02 Apr 2009 08:05:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=vRB9koxHztzmNKNoix46hsYRQlmkaU0N3V/wg8babTs=; b=YFf+BsilIULuuE4C9tcPI4nnnqcWJS/Hdoe7ES1bURBcugt4am8166qsNghQoZTwwF BpuNHRp8iD/RqxnzTjCGMCdT4trdEOLzlEx+q63dQLqDdGV97D0uGC3+jELKEJ5LjaAi GWQgD/ahBFFGu0plxXWsrny1L4McMktBQMFeg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=hESuikZxDPO9W9OVMfFEHGu1ZRYqxTRjJnvrg0vHw9IVBHV/VNkzO3Qg8UOy96Z0cz JYExdecBqgV/sASD9SqZLtyG7veRfEpilDsvA7sIxDFkcMBOnNmcU4W3yKNUUefDmcjF whtfKohHbVvX4etd1pZjPiUQ8c5hmYIOrk3qE= MIME-Version: 1.0 Received: by 10.103.193.12 with SMTP id v12mr62696mup.23.1238684710490; Thu, 02 Apr 2009 08:05:10 -0700 (PDT) In-Reply-To: <49D4CBA0.40408@sgi.com> References: <49D4CBA0.40408@sgi.com> Date: Thu, 2 Apr 2009 20:35:10 +0530 Message-ID: X-ASG-Orig-Subj: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI Subject: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI From: Subrata Modak To: Greg Banks Cc: NFS list , Linux Filesystem list , XFS OSS list , ltp-list , Subrata Modak , Nate Straz Content-Type: multipart/alternative; boundary=0016e652f9f4285b3a046693c233 X-Barracuda-Connect: mail-fx0-f177.google.com[209.85.220.177] X-Barracuda-Start-Time: 1238684732 X-Barracuda-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.2, rules version 3.2.1.22044 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016e652f9f4285b3a046693c233 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Greg, On Thu, Apr 2, 2009 at 7:58 PM, Greg Banks wrote: > G'day, > > SGI is releasing to the Open Source community a number of internal > SGI testing and debugging tools for NFS. Some of these tools are > also applicable to filesystems in general. > > These tools are being released under the GNU General Public License > (GPL) version 2, in the hope that the Linux filesystem development > community may find them useful. They are provided as-is, without any > support. Please do not contact SGI for support on any of these tools. > > Some of these tools are unfinished. Others rely on build > infrastructure in internal SGI trees which cannot be released. > The tools are provided as tarball snapshots of internal SGI source > control trees; for a number of technical reasons it is not possible > to provide access to those trees or to create external repositories. > > The tools are available for download now at > > http://oss.sgi.com/projects/nfs/testtools/ Since, these are released under GPL, i hope integrating them inside LTP ( http://ltp.sf.net) after proper analysis will not be an issue. Since, no support for these tests will be available from SGI, i am hoping that having them inside LTP will be beneficial and help these tests to evolve in the long run. Regards-- Subrata (Happens to maintain LTP :-)) > > A brief description of each tool follows. > > Checkstream > ----------- > > Simple data corruption testing utilities based on the concept of > generating a stream of small self-contained records which can be > decoded in a way which makes certain common data corruption modes > automatically diagnosable. Has been useful for automated testing of > NFS, XFS, and CXFS in SGI. > > Weber > ----- > > Test load generator for NFS. Uses multiple threads, multiple sockets > and multiple IP addresses to simulate loads from many machines, > thus enabling testing of NFS server setups with larger client counts > than can be tested with physical infrastructure (or Virtual Machine > clients). Has been useful in automated NFS testing and as a pinpoint > NFS load generator tool for performance development. > > NFS PMDA > -------- > > PCP Data Agent for extended NFS server statistics. Exports to PCP > the new statistics (measuring per-client and per-server performance) > which are provided by SGI's EnhancedNFS kernel patches. > > Samba PMDA > ---------- > > PCP Data Agent for extended Samba server statistics. Exports to > PCP the additional statistics (measuring per-client and per-server > performance) which are provided by SGI's patches to Samba. > > Ddnfs > ----- > > Filesystem load generation program designed to simulate the IO > load placed on an XFS filesystem by the NFS server in response > to certain NFS loads. Intended for use in XFS automated testing, > to test performance and correctness of certain XFS functionality > not otherwise exercised by the existing XFS test suite, but never > integrated into XFSQA. > > Pmapload > -------- > > Test suite for the portmap and rpcbind programs (which are > NFS infrastructure components based on code open-sourced by Sun > Microsystems and used by every Unix and Linux). Developed by SGI to > test changes imported into those programs from newer Sun source code > during the NFS on IPv6 work for Irix several years ago. > > RPC Exerciser > ------------- > > Test suite for the userspace RPC infrastructure libraries, (which > are NFS infrastructure components based on code open-sourced by Sun > Microsystems and used by every Unix and Linux). Developed by SGI to > test changes imported into those libraries from newer Sun source code > during the NFS on IPv6 work for Irix several years ago. > > Testfs > ------ > > Linux kernel module which provides an in-memory filesystem which > forgets all data written to it. Also can be configured to simulate > timing behaviour on reads and writes. This is useful for NFS > performance testing without a fast disk subsystem. > > StReplay > -------- > > Program which reads the system call trace of another program (obtained > using the widely available strace utility) and replays the IO pattern. > This was intended to be used for automated NFS and XFS testing and > for NFS and XFS problem diagnosis, but was never completed as the > author transferred to another team. Could be the basis for a very > useful filesystem test tool. > > > -- > Greg Banks, P.Engineer, SGI Australian Software Group. > the brightly coloured sporks of revolution. > I don't speak for SGI. > > -- > 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/ > -- Regards & Thanks-- Subrata --0016e652f9f4285b3a046693c233 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Greg,

On Thu, Apr 2, 2009 at 7:58 PM, = Greg Banks <gnb@sgi.com= > wrote:
G'day,

SGI is releasing to the Open Source community a number of internal
SGI testing and debugging tools for NFS. =C2=A0Some of these tools are
also applicable to filesystems in general.

These tools are being released under the GNU General Public License
(GPL) version 2, in the hope that the Linux filesystem development
community may find them useful. =C2=A0They are provided as-is, without any<= br> support. =C2=A0Please do not contact SGI for support on any of these tools.=

Some of these tools are unfinished. =C2=A0Others rely on build
infrastructure in internal SGI trees which cannot be released.
The tools are provided as tarball snapshots of internal SGI source
control trees; for a number of technical reasons it is not possible
to provide access to those trees or to create external repositories.

The tools are available for download now at

ht= tp://oss.sgi.com/projects/nfs/testtools/

Since, th= ese are released under GPL, i hope integrating them inside LTP (http://ltp.sf.net) after proper analysis will not be= an issue. Since, no support for these tests will be available from SGI, i = am hoping that having them inside LTP will be beneficial and help these tes= ts to evolve in the long run.

Regards--
Subrata
(Happens to maintain LTP :-))



A brief description of each tool follows.

Checkstream
-----------

Simple data corruption testing utilities based on the concept of
generating a stream of small self-contained records which can be
decoded in a way which makes certain common data corruption modes
automatically diagnosable. =C2=A0Has been useful for automated testing of NFS, XFS, and CXFS in SGI.

Weber
-----

Test load generator for NFS. =C2=A0Uses multiple threads, multiple sockets<= br> and multiple IP addresses to simulate loads from many machines,
thus enabling testing of NFS server setups with larger client counts
than can be tested with physical infrastructure (or Virtual Machine
clients). =C2=A0Has been useful in automated NFS testing and as a pinpoint<= br> NFS load generator tool for performance development.

NFS PMDA
--------

PCP Data Agent for extended NFS server statistics. =C2=A0Exports to PCP
the new statistics (measuring per-client and per-server performance)
which are provided by SGI's EnhancedNFS kernel patches.

Samba PMDA
----------

PCP Data Agent for extended Samba server statistics. =C2=A0Exports to
PCP the additional statistics (measuring per-client and per-server
performance) which are provided by SGI's patches to Samba.

Ddnfs
-----

Filesystem load generation program designed to simulate the IO
load placed on an XFS filesystem by the NFS server in response
to certain NFS loads. =C2=A0Intended for use in XFS automated testing,
to test performance and correctness of certain XFS functionality
not otherwise exercised by the existing XFS test suite, but never
integrated into XFSQA.

Pmapload
--------

Test suite for the portmap and rpcbind programs (which are
NFS infrastructure components based on code open-sourced by Sun
Microsystems and used by every Unix and Linux). =C2=A0Developed by SGI to test changes imported into those programs from newer Sun source code
during the NFS on IPv6 work for Irix several years ago.

RPC Exerciser
-------------

Test suite for the userspace RPC infrastructure libraries, (which
are NFS infrastructure components based on code open-sourced by Sun
Microsystems and used by every Unix and Linux). =C2=A0Developed by SGI to test changes imported into those libraries from newer Sun source code
during the NFS on IPv6 work for Irix several years ago.

Testfs
------

Linux kernel module which provides an in-memory filesystem which
forgets all data written to it. =C2=A0Also can be configured to simulate timing behaviour on reads and writes. =C2=A0This is useful for NFS
performance testing without a fast disk subsystem.

StReplay
--------

Program which reads the system call trace of another program (obtained
using the widely available strace utility) and replays the IO pattern.
This was intended to be used for automated NFS and XFS testing and
for NFS and XFS problem diagnosis, but was never completed as the
author transferred to another team. =C2=A0Could be the basis for a very
useful filesystem test tool.


--
Greg Banks, P.Engineer, SGI Australian Software Group.
the brightly coloured sporks of revolution.
I don't speak for SGI.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel= " in
the body of a message to major= domo@vger.kernel.org
More majordomo info at =C2=A0http://vger.kernel.org/majordomo-info.html Please read the FAQ at =C2=A0http://www.tux.org/lkml/



--
Regards & Th= anks--
Subrata
--0016e652f9f4285b3a046693c233-- From felixb@sgi.com Thu Apr 2 11:35:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32GYsbk152091 for ; Thu, 2 Apr 2009 11:35:05 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id BF6628F80B7 for ; Thu, 2 Apr 2009 09:34:32 -0700 (PDT) Received: from eagdhcp-232-185.americas.sgi.com (eagdhcp-232-185.americas.sgi.com [128.162.232.185]) by estes.americas.sgi.com (Postfix) with ESMTP id E311E7000103; Thu, 2 Apr 2009 11:26:23 -0500 (CDT) Cc: Andrew Morton , LKML , xfs mailing list , Felix Blyakher Message-Id: From: Felix Blyakher To: Linus Torvalds In-Reply-To: <20090331053013.7642414167108@attica.americas.sgi.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [GIT PULL] XFS update for 2.6.30 Date: Thu, 2 Apr 2009 11:26:23 -0500 References: <20090331053013.7642414167108@attica.americas.sgi.com> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Linus, Were there any problems pulling from the xfs repository? Thanks, Felix On Mar 31, 2009, at 12:30 AM, Felix Blyakher wrote: > The following changes since commit > 15f7176eb1cccec0a332541285ee752b935c1c85: > Linus Torvalds (1): > Merge git://git.kernel.org/.../davem/net-2.6 > > are available in the git repository at: > > git://oss.sgi.com/xfs/xfs for-linus > > Christoph Hellwig (39): > xfs: fix dentry aliasing issues in open_by_handle > xfs: use mnt_want_write in compat_attrmulti ioctl > xfs: add a separate lock class for the per-mount list of dquots > xfs: lockdep annotations for xfs_dqlock2 > xfs: add a lock class for group/project dquots > xfs: fix bad_features2 fixups for the root filesystem > xfs: sanity check attr fork size > xfs: cleanup error handling in xfs_mountfs: > xfs: make sure to free the real-time inodes in the mount error > path > xfs: tiny cleanup for xfs_link > xfs: remove unused XFS_MOUNT_ILOCK/XFS_MOUNT_IUNLOCK > xfs: factor out attr fork reset handling > xfs: merge xfs_inode_flush into xfs_fs_write_inode > xfs: cleanup xfs_find_handle > xfs: remove the unused XFS_QMOPT_DQLOCK flag > xfs: remove iclog calculation special cases > xfs: remove superflous inobt macros > xfs: remove uchar_t/ushort_t/uint_t/ulong_t types > xfs: merge xfs_mkdir into xfs_create > xfs: remove XFS_QM_LOCK/XFS_QM_UNLOCK/XFS_QM_HOLD/XFS_QM_RELE > xfs: use mutex_is_locked in XFS_DQ_IS_LOCKED > xfs: sanitize qh_lock wrappers > xfs: get rid of indirections in the quotaops implementation > xfs: fix error handling in xfs_log_mount > xfs: reject swapext ioctl on swapfiles > xfs: prevent kernel crash due to corrupted inode log format > xfs: prevent lockdep false positive in xfs_iget_cache_miss > xfs: only issues a cache flush on unmount if barriers are enabled > xfs: cleanup log unmount handling > xfs: remove another leftover of the old inode log item format > xfs: cleanup xlog_recover_do_trans > xfs: cleanup xlog_bread > xfs: kill vn_atime_* helpers. > xfs: kill VN_BAD > xfs: kill mutex_t typedef > xfs: kill ino64 mount option > xfs: remove m_litino > xfs: remove m_attroffset > xfs: cleanup uuid handling > > Dave Chinner (3): > Long btree pointers are still 64 bit on disk > xfs: Check buffer lengths in log recovery > xfs: factor out code to find the longest free extent in the AG > > Eric Sandeen (3): > [XFS] Remove the rest of the macro-to-function indirections. > [XFS] remove always-true #ifndef HAVE_FORMAT32 tests > don't reallocate sxp variable passed into xfs_swapext > > Felix Blyakher (25): > Merge branch 'master' of git+ssh://oss.sgi.com/oss/git/xfs/xfs > [XFS] Warn on transaction in flight on read-only remount > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > xfs: Update maintainers > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Revert "[XFS] use scalable vmap API" > Revert "[XFS] remove old vmap cache" > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Fix xfs debug build breakage by pushing xfs_error.h after > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > xfs: increase the maximum number of supported ACL entries > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > Revert "xfs: increase the maximum number of supported ACL > entries" > > Hannes Eder (3): > xfs: move declaration to header file > xfs: make symbols static > xfs: include header files for prototypes > > Hisashi Hifumi (1): > xfs: pagecache usage optimization > > Josef 'Jeff' Sipek (1): > xfs: cleanup error handling in xfs_swap_extents > > Lachlan McIlroy (6): > [XFS] Update maintainers > Merge git://git.kernel.org/.../torvalds/linux-2.6 > Merge branch 'for-linus' of git+ssh://git.melbourne.sgi.com/git/ > xfs > Merge branch 'master' of git://git.kernel.org/.../torvalds/ > linux-2.6 > Merge git://git.kernel.org/.../torvalds/linux-2.6 > Merge branch 'master' of git://git.kernel.org/pub/scm/fs/xfs/xfs > > Malcolm Parsons (1): > xfs: fix various typos > > Nick Piggin (2): > [XFS] remove old vmap cache > [XFS] use scalable vmap API > > MAINTAINERS | 3 +- > fs/xfs/Makefile | 1 + > fs/xfs/linux-2.6/mutex.h | 25 --- > fs/xfs/linux-2.6/xfs_aops.c | 1 + > fs/xfs/linux-2.6/xfs_ioctl.c | 117 +++++------- > fs/xfs/linux-2.6/xfs_iops.c | 33 +--- > fs/xfs/linux-2.6/xfs_linux.h | 13 +-- > fs/xfs/linux-2.6/xfs_quotaops.c | 157 +++++++++++++++ > fs/xfs/linux-2.6/xfs_super.c | 137 +++++--------- > fs/xfs/linux-2.6/xfs_super.h | 1 + > fs/xfs/linux-2.6/xfs_sync.h | 1 + > fs/xfs/linux-2.6/xfs_vnode.h | 32 --- > fs/xfs/quota/xfs_dquot.c | 28 ++-- > fs/xfs/quota/xfs_dquot.h | 18 +-- > fs/xfs/quota/xfs_qm.c | 212 ++++++--------------- > fs/xfs/quota/xfs_qm.h | 26 ++-- > fs/xfs/quota/xfs_qm_bhv.c | 1 - > fs/xfs/quota/xfs_qm_syscalls.c | 190 +----------------- > fs/xfs/quota/xfs_quota_priv.h | 38 ++--- > fs/xfs/quota/xfs_trans_dquot.c | 16 +- > fs/xfs/support/debug.c | 1 + > fs/xfs/support/uuid.c | 71 ------- > fs/xfs/support/uuid.h | 4 - > fs/xfs/xfs_ag.h | 4 +- > fs/xfs/xfs_alloc.c | 26 ++- > fs/xfs/xfs_alloc.h | 6 + > fs/xfs/xfs_attr_leaf.c | 58 +++--- > fs/xfs/xfs_bmap.c | 76 +++++--- > fs/xfs/xfs_bmap.h | 6 +- > fs/xfs/xfs_btree.c | 4 +- > fs/xfs/xfs_btree.h | 2 +- > fs/xfs/xfs_da_btree.c | 2 +- > fs/xfs/xfs_da_btree.h | 9 +- > fs/xfs/xfs_dfrag.c | 68 +++---- > fs/xfs/xfs_dinode.h | 4 +- > fs/xfs/xfs_dir2.c | 2 - > fs/xfs/xfs_dir2_block.c | 7 +- > fs/xfs/xfs_dir2_data.h | 2 +- > fs/xfs/xfs_dir2_leaf.c | 17 +-- > fs/xfs/xfs_dir2_node.c | 2 +- > fs/xfs/xfs_dir2_sf.c | 13 +-- > fs/xfs/xfs_extfree_item.h | 6 - > fs/xfs/xfs_filestream.c | 9 +- > fs/xfs/xfs_fsops.c | 2 +- > fs/xfs/xfs_ialloc.c | 12 +- > fs/xfs/xfs_ialloc_btree.c | 2 +- > fs/xfs/xfs_ialloc_btree.h | 22 +-- > fs/xfs/xfs_inode.h | 2 +- > fs/xfs/xfs_inode_item.h | 2 - > fs/xfs/xfs_iomap.h | 2 +- > fs/xfs/xfs_itable.c | 9 +- > fs/xfs/xfs_log.c | 67 ++----- > fs/xfs/xfs_log.h | 3 +- > fs/xfs/xfs_log_priv.h | 3 +- > fs/xfs/xfs_log_recover.c | 308 +++++++++++++++++------------- > fs/xfs/xfs_mount.c | 253 ++++++++++++++----------- > fs/xfs/xfs_mount.h | 19 +-- > fs/xfs/xfs_qmops.c | 1 - > fs/xfs/xfs_quota.h | 3 +- > fs/xfs/xfs_rtalloc.c | 10 + > fs/xfs/xfs_rtalloc.h | 8 +- > fs/xfs/xfs_trans.h | 24 ++-- > fs/xfs/xfs_trans_ail.c | 4 +- > fs/xfs/xfs_trans_item.c | 2 +- > fs/xfs/xfs_trans_space.h | 2 +- > fs/xfs/xfs_types.h | 8 - > fs/xfs/xfs_utils.c | 2 +- > fs/xfs/xfs_vnodeops.c | 408 ++++++++ > +------------------------------ > fs/xfs/xfs_vnodeops.h | 3 - > 69 files changed, 1031 insertions(+), 1599 deletions(-) > delete mode 100644 fs/xfs/linux-2.6/mutex.h > create mode 100644 fs/xfs/linux-2.6/xfs_quotaops.c > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From greg.n.banks@gmail.com Thu Apr 2 16:45:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32LipoY165284 for ; Thu, 2 Apr 2009 16:45:01 -0500 X-ASG-Debug-ID: 1238708668-0f2400640000-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 B4EC91C914D7 for ; Thu, 2 Apr 2009 14:44:28 -0700 (PDT) Received: from rv-out-0708.google.com (rv-out-0708.google.com [209.85.198.250]) by cuda.sgi.com with ESMTP id Ld5X9kQSuu0YalOX for ; Thu, 02 Apr 2009 14:44:28 -0700 (PDT) Received: by rv-out-0708.google.com with SMTP id c5so685695rvf.32 for ; Thu, 02 Apr 2009 14:44:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:sender:received:in-reply-to :references:date:x-google-sender-auth:message-id:subject:from:to:cc :content-type:content-transfer-encoding; bh=2HGOczOEoGAVpy3VzXFKd7iKlpjKNi8hV0jHwbXhpSY=; b=op1J9s7I5xUbnqcPBBCUaKlv1BabozOXJEI03nx09dtyUffe01RVTG09dcqIre18g5 IQSV6CSQjOn6s2Pi0fgGiNpwESTYWZqoy6GCo0LjrvWRt1dGNjzjGoqtR/QzosUtDGsU qBBDKQD5xfeUubQ5ub63xBX0XPtCrZnabjDnA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type :content-transfer-encoding; b=fDlfgiBhMQyu4kb2BkxQE76RVmMfCQpLStt3GZdInPGBtI73uxd9VNV6eOMzo8PNRV VsQFRFoMPlTUJtIK0oKhKTX4CfQvzvUiF1gvRCYzScRrytsN8x8cD/7zl6ClMgChCMke 7HUB3xOpxphjZqYKBDKJ4swJnTronKPDwAUD4= MIME-Version: 1.0 Sender: greg.n.banks@gmail.com Received: by 10.141.205.10 with SMTP id h10mr168124rvq.225.1238708667317; Thu, 02 Apr 2009 14:44:27 -0700 (PDT) In-Reply-To: References: <49D4CBA0.40408@sgi.com> Date: Fri, 3 Apr 2009 08:44:27 +1100 X-Google-Sender-Auth: a62c95194f89871f Message-ID: X-ASG-Orig-Subj: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI Subject: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI From: Greg Banks To: Subrata Modak Cc: NFS list , Linux Filesystem list , XFS OSS list , ltp-list , Subrata Modak , Nate Straz Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rv-out-0708.google.com[209.85.198.250] X-Barracuda-Start-Time: 1238708668 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22069 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Apr 3, 2009 at 2:05 AM, Subrata Modak wrote: > Hi Greg, > > On Thu, Apr 2, 2009 at 7:58 PM, Greg Banks wrote: >> >> The tools are available for download now at >> >> http://oss.sgi.com/projects/nfs/testtools/ > > Since, these are released under GPL, i hope integrating them inside LTP > (http://ltp.sf.net) after proper analysis will not be an issue. Not an issue at all, in fact it would be the optimal result. The question was asked during the open source review process :-) > Since, no > support for these tests will be available from SGI, i am hoping that having > them inside LTP will be beneficial and help these tests to evolve in the > long run. Great. I'll have some spare time starting from next week and I'm familiar with the tools: how can I help? -- Greg. From curtis@alopias.GreenKey.net Thu Apr 2 18:49:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n32NnSl0171133 for ; Thu, 2 Apr 2009 18:49:38 -0500 X-ASG-Debug-ID: 1238716125-0f2402080000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from alopias.GreenKey.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 13E9D1C91C4E for ; Thu, 2 Apr 2009 16:48:45 -0700 (PDT) Received: from alopias.GreenKey.net (alopias.GreenKey.net [209.209.60.60]) by cuda.sgi.com with ESMTP id 9sTHfyG8xZcNayHU for ; Thu, 02 Apr 2009 16:48:45 -0700 (PDT) Received: by alopias.GreenKey.net (Postfix, from userid 500) id AA78E6F064; Thu, 2 Apr 2009 16:48:44 -0700 (PDT) Date: Thu, 2 Apr 2009 16:48:44 -0700 (PDT) From: Curtis Doty To: XFS X-ASG-Orig-Subj: Re: why xfs_write() race with O_DIRECT only? Subject: Re: why xfs_write() race with O_DIRECT only? In-Reply-To: <49CD7912.6080508@GreenKey.net> References: <49CD7912.6080508@GreenKey.net> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Fortune: :sodium substrate: n. Syn {salt substrate}. Message-Id: <20090402234844.AA78E6F064@alopias.GreenKey.net> X-Barracuda-Connect: alopias.GreenKey.net[209.209.60.60] X-Barracuda-Start-Time: 1238716146 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22076 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Mar 27 Curtis Doty said: > I'm guessing this is the race fixed in 2.6.29. > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25051158 > > But my app is running O_DIRECT and only calls pwrite(). Is there > something I'm missing that explains the aio stuff etc.? > > ------------[ cut here ]------------ > WARNING: at fs/xfs/linux-2.6/xfs_lrw.c:724 xfs_write+0x364/0x694() > Modules linked in: dm_mod sg usbhid usbkbd usbmouse qla2xxx > firmware_class scsi_transport_fc bnx2 hpilo ipmi_si ipmi_msghandler > container shpchp pci_hotplug rng_core iTCO_wdt iTCO_vendor_support > thermal button processor rtc_cmos rtc_core rtc_lib ehci_hcd uhci_hcd usbcore > Pid: 5789, comm: myServer Not tainted 2.6.28.9 #1 > No luck with 2.6.29. It's still occuring. ------------[ cut here ]------------ WARNING: at fs/xfs/linux-2.6/xfs_lrw.c:715 xfs_write+0x34b/0x67e() Hardware name: ProLiant DL360 G5 Modules linked in: dm_mod sg usbhid usbkbd usbmouse qla2xxx firmware_class scsi_transport_fc ipmi_si ipmi_msghandler hpilo bnx2 container thermal button processor ehci_hcd rtc_cmos rng_core rtc_core shpchp rtc_lib iTCO_wdt pci_hotplug iTCO_vendor_support uhci_hcd usbcore Pid: 5681, comm: diskServer Not tainted 2.6.29 #1 Call Trace: [] warn_slowpath+0x74/0x8a [] ? __pagevec_release+0x18/0x21 [] ? invalidate_inode_pages2_range+0x1c4/0x20c [] ? __xfs_get_blocks+0x179/0x239 [] ? xfs_end_io_direct+0x0/0x66 [] ? generic_file_direct_write+0xfe/0x1dc [] ? xfs_trans_unlocked_item+0x2a/0x41 [] xfs_write+0x34b/0x67e [] ? default_wake_function+0xb/0xd [] ? __wake_up_common+0x2f/0x5a [] ? wake_futex+0x22/0x2f [] xfs_file_aio_write+0x5b/0x63 [] do_sync_write+0xab/0xe6 [] ? autoremove_wake_function+0x0/0x33 [] ? do_sync_write+0x0/0xe6 [] vfs_write+0x8c/0x108 [] sys_pwrite64+0x45/0x60 [] sysenter_do_call+0x12/0x21 [] ? mxcsr_feature_mask_init+0xe/0x47 ---[ end trace f75be9e7e7f9aa47 ]--- From subrata@linux.vnet.ibm.com Fri Apr 3 03:18:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n338IKS3193726 for ; Fri, 3 Apr 2009 03:18:35 -0500 X-ASG-Debug-ID: 1238746657-2e0001160000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from e34.co.us.ibm.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 13DAB1E7F3C for ; Fri, 3 Apr 2009 01:17:37 -0700 (PDT) Received: from e34.co.us.ibm.com (e34.co.us.ibm.com [32.97.110.152]) by cuda.sgi.com with ESMTP id 4dfosuYrvlxzMz0H for ; Fri, 03 Apr 2009 01:17:37 -0700 (PDT) Received: from d03relay04.boulder.ibm.com (d03relay04.boulder.ibm.com [9.17.195.106]) by e34.co.us.ibm.com (8.13.1/8.13.1) with ESMTP id n338FO9f021539 for ; Fri, 3 Apr 2009 02:15:24 -0600 Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay04.boulder.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n338HZTH225798 for ; Fri, 3 Apr 2009 02:17:36 -0600 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n338HZ1F006617 for ; Fri, 3 Apr 2009 02:17:35 -0600 Received: from [9.124.158.88] ([9.124.158.88]) by d03av01.boulder.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n338HVfh006342; Fri, 3 Apr 2009 02:17:32 -0600 X-ASG-Orig-Subj: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI Subject: Re: [ANNOUNCE] Filesystem test tools open-sourced by SGI From: Subrata Modak Reply-To: subrata@linux.vnet.ibm.com To: Greg Banks Cc: Subrata Modak , NFS list , Linux Filesystem list , XFS OSS list , ltp-list , Nate Straz In-Reply-To: References: <49D4CBA0.40408@sgi.com> Content-Type: text/plain Organization: IBM Date: Fri, 03 Apr 2009 13:47:39 +0530 Message-Id: <1238746659.4871.11.camel@subratamodak.linux.ibm.com> Mime-Version: 1.0 X-Mailer: Evolution 2.12.3 (2.12.3-8.el5_2.2) Content-Transfer-Encoding: 7bit X-Barracuda-Connect: e34.co.us.ibm.com[32.97.110.152] X-Barracuda-Start-Time: 1238746678 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22108 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Greg, On Fri, 2009-04-03 at 08:44 +1100, Greg Banks wrote: > On Fri, Apr 3, 2009 at 2:05 AM, Subrata Modak wrote: > > Hi Greg, > > > > On Thu, Apr 2, 2009 at 7:58 PM, Greg Banks wrote: > >> > >> The tools are available for download now at > >> > >> http://oss.sgi.com/projects/nfs/testtools/ > > > > Since, these are released under GPL, i hope integrating them inside LTP > > (http://ltp.sf.net) after proper analysis will not be an issue. > > Not an issue at all, in fact it would be the optimal result. The > question was asked during the open source review process :-) > > > Since, no > > support for these tests will be available from SGI, i am hoping that having > > them inside LTP will be beneficial and help these tests to evolve in the > > long run. > > Great. I'll have some spare time starting from next week and I'm > familiar with the tools: how can I help? Thanks for offering to help. I will get back to you sooner on any issue(s) i face. Regards-- Subrata > From torvalds@linux-foundation.org Fri Apr 3 11:56:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n33Gtn8W225369 for ; Fri, 3 Apr 2009 11:55:59 -0500 X-ASG-Debug-ID: 1238777766-747902670000-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 8076A13F27AF; Fri, 3 Apr 2009 09:56:06 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id vIwIUtiocg0oUdvj; Fri, 03 Apr 2009 09:56:06 -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 n33GqvxI029735 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 3 Apr 2009 09:53:30 -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 n33Gqume016378; Fri, 3 Apr 2009 09:52:57 -0700 Date: Fri, 3 Apr 2009 09:52:56 -0700 (PDT) From: Linus Torvalds X-X-Sender: torvalds@localhost.localdomain To: Felix Blyakher cc: Andrew Morton , LKML , xfs mailing list X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.30 Subject: Re: [GIT PULL] XFS update for 2.6.30 In-Reply-To: Message-ID: References: <20090331053013.7642414167108@attica.americas.sgi.com> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) 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: 1238777792 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, 2 Apr 2009, Felix Blyakher wrote: > > Were there any problems pulling from the xfs repository? Sorry, no - just too much email, too many trees to look at, too many people to argue with. Pulled. Linus From torvalds@linux-foundation.org Fri Apr 3 12:14:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n33HE3Uj226187 for ; Fri, 3 Apr 2009 12:14:13 -0500 X-ASG-Debug-ID: 1238778820-5eeb03cb0000-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 6D1731EA55D for ; Fri, 3 Apr 2009 10:13:40 -0700 (PDT) Received: from smtp1.linux-foundation.org (smtp1.linux-foundation.org [140.211.169.13]) by cuda.sgi.com with ESMTP id B3PS6G39mIeMq0hD for ; Fri, 03 Apr 2009 10:13:40 -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 n33HA4sl031704 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 3 Apr 2009 10:11:40 -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 n33H2F63019073; Fri, 3 Apr 2009 10:02:15 -0700 Date: Fri, 3 Apr 2009 10:02:15 -0700 (PDT) From: Linus Torvalds X-X-Sender: torvalds@localhost.localdomain To: Felix Blyakher , Lachlan McIlroy cc: Andrew Morton , LKML , xfs mailing list X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.30 Subject: Re: [GIT PULL] XFS update for 2.6.30 In-Reply-To: Message-ID: References: <20090331053013.7642414167108@attica.americas.sgi.com> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) 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: 1238778821 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22143 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, 3 Apr 2009, Linus Torvalds wrote: > > > On Thu, 2 Apr 2009, Felix Blyakher wrote: > > > > Were there any problems pulling from the xfs repository? > > Sorry, no - just too much email, too many trees to look at, too many > people to argue with. > > Pulled. Side note - I almost unpulled afterwards. You've done several apparently totally useless pulls from my tree at random points. Daily "keep up-to-date with Linus' tree" pulls are _strongly_ discouraged (read: if this continues, I'll just stop pulling from you), because it makes the history totally unreadable after-the-fact. It has some direct technical downsides (it makes it much harder to run "git bisect" and see what is going on), but apart from those direct downsides it just makes it much harder for me - or anybody else who wants to get an overview of what happened - to visualize things when history is messy. Instead of having a clear nice line of development that says "this is what happened to XFS", those merges have basically mixed up all your changes with all the random _other_ changes in the tree. In other words, having those extra merges makes the graphical tools almost useless for getting some kind of "what happened" overview. I realize that an occasional back-merge may be required to resolve big conflicts early, but they really have to be pretty big and immediate for it to be a win. Linus From felixb@sgi.com Fri Apr 3 12:51:47 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n33HpQWV227653 for ; Fri, 3 Apr 2009 12:51:36 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 5BE538F80C4 for ; Fri, 3 Apr 2009 10:51:05 -0700 (PDT) Received: from eagdhcp-232-185.americas.sgi.com (eagdhcp-232-185.americas.sgi.com [128.162.232.185]) by estes.americas.sgi.com (Postfix) with ESMTP id 397F1700016A; Fri, 3 Apr 2009 12:41:20 -0500 (CDT) Cc: Lachlan McIlroy , Andrew Morton , LKML , xfs mailing list Message-Id: <8A177E56-84E9-487E-930E-9C6805E17184@sgi.com> From: Felix Blyakher To: Linus Torvalds In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [GIT PULL] XFS update for 2.6.30 Date: Fri, 3 Apr 2009 12:41:18 -0500 References: <20090331053013.7642414167108@attica.americas.sgi.com> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 3, 2009, at 12:02 PM, Linus Torvalds wrote: > On Fri, 3 Apr 2009, Linus Torvalds wrote: > >> On Thu, 2 Apr 2009, Felix Blyakher wrote: >>> >>> Were there any problems pulling from the xfs repository? >> >> Sorry, no - just too much email, too many trees to look at, too many >> people to argue with. >> >> Pulled. > > Side note - I almost unpulled afterwards. That was my concern, i.e. it's not pulled without explicit NAK. I knew about your possible concerns. > You've done several apparently totally useless pulls from my tree at > random points. Yes, I noticed that, and agree with all your points even before you brought them up. I already started talking to people to improve my process. The reason the intermediate pulls from your tree were done is to make sure that new xfs patches would not conflict with some other changes already in the mainline. That was part of the maintainer cheat sheet given to me, and I didn't realize the side effects of it. I probably can verify the possible conflicts without pushing the merges into the repository and reset the working tree to pre pull state. At any rate, I'll find some way to manage that without cluttering the history with the merges. Any suggestions are welcome. Thanks, Felix > > > Daily "keep up-to-date with Linus' tree" pulls are _strongly_ > discouraged > (read: if this continues, I'll just stop pulling from you), because it > makes the history totally unreadable after-the-fact. It has some > direct > technical downsides (it makes it much harder to run "git bisect" and > see > what is going on), but apart from those direct downsides it just > makes it > much harder for me - or anybody else who wants to get an overview of > what > happened - to visualize things when history is messy. > > Instead of having a clear nice line of development that says "this > is what > happened to XFS", those merges have basically mixed up all your > changes > with all the random _other_ changes in the tree. > > In other words, having those extra merges makes the graphical tools > almost > useless for getting some kind of "what happened" overview. > > I realize that an occasional back-merge may be required to resolve big > conflicts early, but they really have to be pretty big and immediate > for > it to be a win. > > Linus From david@lang.hm Fri Apr 3 20:21:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n341LaIS242920 for ; Fri, 3 Apr 2009 20:21:48 -0500 X-ASG-Debug-ID: 1238808119-48f702090000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from bifrost.lang.hm (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E558413F3CFF; Fri, 3 Apr 2009 18:21:59 -0700 (PDT) Received: from bifrost.lang.hm (mail.lang.hm [64.81.33.126]) by cuda.sgi.com with ESMTP id XEDpWFmx16PJ6VyT; Fri, 03 Apr 2009 18:21:59 -0700 (PDT) Received: from asgard.lang.hm (asgard.lang.hm [10.0.0.100]) by bifrost.lang.hm (8.13.4/8.13.4/Debian-3) with ESMTP id n341J8wl014315; Fri, 3 Apr 2009 17:19:08 -0800 Date: Fri, 3 Apr 2009 18:19:08 -0700 (PDT) From: david@lang.hm X-X-Sender: dlang@asgard.lang.hm To: Felix Blyakher cc: Linus Torvalds , Lachlan McIlroy , Andrew Morton , LKML , xfs mailing list X-ASG-Orig-Subj: Re: [GIT PULL] XFS update for 2.6.30 Subject: Re: [GIT PULL] XFS update for 2.6.30 In-Reply-To: <8A177E56-84E9-487E-930E-9C6805E17184@sgi.com> Message-ID: References: <20090331053013.7642414167108@attica.americas.sgi.com> <8A177E56-84E9-487E-930E-9C6805E17184@sgi.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: mail.lang.hm[64.81.33.126] X-Barracuda-Start-Time: 1238808140 X-Barracuda-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=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22175 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, 3 Apr 2009, Felix Blyakher wrote: > On Apr 3, 2009, at 12:02 PM, Linus Torvalds wrote: > >> On Fri, 3 Apr 2009, Linus Torvalds wrote: >> >>> On Thu, 2 Apr 2009, Felix Blyakher wrote: >>>> >>>> Were there any problems pulling from the xfs repository? >>> >>> Sorry, no - just too much email, too many trees to look at, too many >>> people to argue with. >>> >>> Pulled. >> >> Side note - I almost unpulled afterwards. > > That was my concern, i.e. it's not pulled without explicit > NAK. I knew about your possible concerns. > >> You've done several apparently totally useless pulls from my tree at >> random points. > > Yes, I noticed that, and agree with all your points even > before you brought them up. > I already started talking to people to improve my process. > The reason the intermediate pulls from your tree were done > is to make sure that new xfs patches would not conflict > with some other changes already in the mainline. That was > part of the maintainer cheat sheet given to me, and I > didn't realize the side effects of it. > I probably can verify the possible conflicts without pushing > the merges into the repository and reset the working tree to > pre pull state. create a temporary branch and do the merge in that. then throw away the test branch and there is no harm to the main tree. David Lang > At any rate, I'll find some way to manage that without > cluttering the history with the merges. > Any suggestions are welcome. > > Thanks, > Felix > >> >> >> Daily "keep up-to-date with Linus' tree" pulls are _strongly_ discouraged >> (read: if this continues, I'll just stop pulling from you), because it >> makes the history totally unreadable after-the-fact. It has some direct >> technical downsides (it makes it much harder to run "git bisect" and see >> what is going on), but apart from those direct downsides it just makes it >> much harder for me - or anybody else who wants to get an overview of what >> happened - to visualize things when history is messy. >> >> Instead of having a clear nice line of development that says "this is what >> happened to XFS", those merges have basically mixed up all your changes >> with all the random _other_ changes in the tree. >> >> In other words, having those extra merges makes the graphical tools almost >> useless for getting some kind of "what happened" overview. >> >> I realize that an occasional back-merge may be required to resolve big >> conflicts early, but they really have to be pretty big and immediate for >> it to be a win. >> >> Linus > > -- > 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 felixb@sgi.com Fri Apr 3 21:58:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n342veXL246209 for ; Fri, 3 Apr 2009 21:57:50 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id C0A8C3040C8 for ; Fri, 3 Apr 2009 19:57:18 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 5E1CA700016A; Fri, 3 Apr 2009 20:54:57 -0500 (CDT) Cc: Linus Torvalds , Lachlan McIlroy , Andrew Morton , LKML , xfs mailing list Message-Id: <60503DAA-7DA4-467C-A21E-B02D61FA9390@sgi.com> From: Felix Blyakher To: david@lang.hm In-Reply-To: Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [GIT PULL] XFS update for 2.6.30 Date: Fri, 3 Apr 2009 20:54:55 -0500 References: <20090331053013.7642414167108@attica.americas.sgi.com> <8A177E56-84E9-487E-930E-9C6805E17184@sgi.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 3, 2009, at 8:19 PM, david@lang.hm wrote: > On Fri, 3 Apr 2009, Felix Blyakher wrote: > >> On Apr 3, 2009, at 12:02 PM, Linus Torvalds wrote: >> >>> On Fri, 3 Apr 2009, Linus Torvalds wrote: >>>> On Thu, 2 Apr 2009, Felix Blyakher wrote: >>>>> Were there any problems pulling from the xfs repository? >>>> Sorry, no - just too much email, too many trees to look at, too >>>> many >>>> people to argue with. >>>> Pulled. >>> Side note - I almost unpulled afterwards. >> >> That was my concern, i.e. it's not pulled without explicit >> NAK. I knew about your possible concerns. >> >>> You've done several apparently totally useless pulls from my tree at >>> random points. >> >> Yes, I noticed that, and agree with all your points even >> before you brought them up. >> I already started talking to people to improve my process. >> The reason the intermediate pulls from your tree were done >> is to make sure that new xfs patches would not conflict >> with some other changes already in the mainline. That was >> part of the maintainer cheat sheet given to me, and I >> didn't realize the side effects of it. >> I probably can verify the possible conflicts without pushing >> the merges into the repository and reset the working tree to >> pre pull state. > > create a temporary branch and do the merge in that. then throw away > the test branch and there is no harm to the main tree. That was suggested among other things by Ingo Molnar as well. I'm planing to follow this approach. Thanks, Felix > > > David Lang > >> At any rate, I'll find some way to manage that without >> cluttering the history with the merges. >> Any suggestions are welcome. >> >> Thanks, >> Felix >> >>> Daily "keep up-to-date with Linus' tree" pulls are _strongly_ >>> discouraged >>> (read: if this continues, I'll just stop pulling from you), >>> because it >>> makes the history totally unreadable after-the-fact. It has some >>> direct >>> technical downsides (it makes it much harder to run "git bisect" >>> and see >>> what is going on), but apart from those direct downsides it just >>> makes it >>> much harder for me - or anybody else who wants to get an overview >>> of what >>> happened - to visualize things when history is messy. >>> Instead of having a clear nice line of development that says "this >>> is what >>> happened to XFS", those merges have basically mixed up all your >>> changes >>> with all the random _other_ changes in the tree. >>> In other words, having those extra merges makes the graphical >>> tools almost >>> useless for getting some kind of "what happened" overview. >>> I realize that an occasional back-merge may be required to resolve >>> big >>> conflicts early, but they really have to be pretty big and >>> immediate for >>> it to be a win. >>> >>> Linus >> >> -- >> 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 arekm@maven.pl Sat Apr 4 07:47:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_BRBL autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n34Ckl0d009447 for ; Sat, 4 Apr 2009 07:46:57 -0500 X-ASG-Debug-ID: 1238849232-243301d60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from main.carme.maven.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 57E7513F4B5C for ; Sat, 4 Apr 2009 05:47:12 -0700 (PDT) Received: from main.carme.maven.pl (main.carme.maven.pl [193.239.45.138]) by cuda.sgi.com with ESMTP id SdHClO1VYygMHmWA for ; Sat, 04 Apr 2009 05:47:12 -0700 (PDT) Received: from chello089076029166.chello.pl ([89.76.29.166]:39312 helo=maven.pl) by main.carme.maven.pl with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.69) (envelope-from ) id 1Lq5G2-0001g0-Hc; Sat, 04 Apr 2009 14:45:59 +0200 Received: from arekm by maven.pl with local (Exim 4.69) (envelope-from ) id 1Lq4Wm-0002iv-GL; Sat, 04 Apr 2009 13:59:12 +0200 From: Arkadiusz Miskiewicz To: Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfs: validate quota log items during log recovery Subject: Re: [PATCH] xfs: validate quota log items during log recovery Date: Sat, 4 Apr 2009 13:59:12 +0200 User-Agent: KMail/1.11.2 (Linux/2.6.29; KDE/4.2.2; x86_64; ; ) Cc: xfs@oss.sgi.com References: <20090303175427.GA20582@infradead.org> In-Reply-To: <20090303175427.GA20582@infradead.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200904041359.12439.arekm@maven.pl> X-Barracuda-Connect: main.carme.maven.pl[193.239.45.138] X-Barracuda-Start-Time: 1238849254 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22220 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tuesday 03 of March 2009, Christoph Hellwig wrote: > Arkadiusz has been seeing really strange crashes in xfs_qm_dqcheck that > I can only explain by a log item beeing too smal to actually fit the > xfs_dqblk_t we're dereferencing all over xfs_qm_dqcheck. So add > graceful checks for NULL or too small quota items to the log recovery > code. Unfortunately this validation doesn't cover my case. I still got oops even with the patch applied 1). I also tried xfs debug enabled kernel 2) 1) oops with "[PATCH] xfs: validate quota log items during log recovery" [ 37.379658] Filesystem "dm-0": Disabling barriers, trial barrier write f= ailed =20 [ 37.445959] XFS mounting filesystem dm-0 = =20 [ 39.478398] Starting XFS recovery on filesystem: dm-0 (logdev: internal)= =20 [ 42.833274] BUG: unable to handle kernel paging request at fffffffffffff= c00 =20 [ 42.835651] IP: [] xfs_qm_dqcheck+0x9ca/0x2270 [xfs] = =20 [ 42.835651] PGD 549067 PUD 54b067 PMD 0 = =20 [ 42.876885] Oops: 0002 [#1] SMP = =20 [ 42.876885] last sysfs file: /sys/devices/virtual/block/md3/dev = =20 [ 42.906879] CPU 2 = =20 [ 42.906879] Modules linked in: ext3 jbd mbcache raid456 async_xor async_= memcpy async_tx xor raid1 dm_mod e1000 e1000e ipmi_devintf ipmi_si ipmi_msg= handler 8021q garp stp xfs=20 scsi_wait_scan sd_mod crc_t10dif mptsas mptscsih mptbase scsi_transport_sas= scsi_mod raid10 md_mod =20 [ 42.976880] Pid: 1718, comm: mount Not tainted 2.6.28.9-2 #1 = = =20 [ 42.976880] RIP: 0010:[] [] xfs_qm_= dqcheck+0x9ca/0x2270 [xfs] = =20 [ 42.976880] RSP: 0018:ffff88015b53fa58 EFLAGS: 00010256 = = =20 [ 42.976880] RAX: 0000000000000000 RBX: ffff88015bcaee40 RCX: 00000000000= 00000 = =20 [ 42.976880] RDX: fffffffffffffc00 RSI: 0000000000000000 RDI: fffffffffff= ffc00 = =20 [ 42.976880] RBP: 0000000000000000 R08: 0000000000000000 R09: fffffffffff= ffc00 = =20 [ 42.976880] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88015bc= aebc0 = =20 [ 42.976880] R13: ffff88015bcaeb40 R14: 0000000000001000 R15: ffff88015e5= 5d000 = =20 [ 42.976880] FS: 00007f3de87f27d0(0000) GS:ffff88015fa4c180(0000) knlGS:= 0000000000000000 = =20 [ 43.176886] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b = = =20 [ 43.176886] CR2: fffffffffffffc00 CR3: 000000015b501000 CR4: 00000000000= 006e0 = =20 [ 43.176886] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000 = =20 [ 43.176886] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400 = =20 [ 43.176886] Process mount (pid: 1718, threadinfo ffff88015b53e000, task = ffff88015ccd9470) = =20 [ 43.276880] Stack: = = =20 [ 43.276880] ffff88015bcaeb40 000000005d34a0c8 ffff88015b53fb98 ffffc200= 115e839c = =20 [ 43.313546] ffffc200115e83a8 0000000000000003 ffffc200115e9e00 ffffffff= a010351c = =20 [ 43.313546] 0000000000039c4a 000000015b5ab000 ffff88015b5ab000 ffff8801= 5b53fb88 = =20 [ 43.340212] Call Trace: = = =20 [ 43.340212] [] xfs_qm_dqcheck+0x208c/0x2270 [xfs] = = =20 [ 43.340212] [] xlog_get_bp+0x1e9/0x1750 [xfs] = = =20 [ 43.340212] [] xfs_dir_file_operations+0x2290/0xe906 = [xfs] = =20 [ 43.340212] [] xlog_get_bp+0x7f7/0x1750 [xfs] = = =20 [ 43.340212] [] xlog_get_bp+0x85a/0x1750 [xfs] = = =20 [ 43.340212] [] xlog_recover+0x7a/0x90 [xfs] = = =20 [ 43.340212] [] xfs_log_mount+0xa6/0xd30 [xfs] = = =20 [ 43.340212] [] xfs_mountfs+0x33b/0x680 [xfs] = = =20 [ 43.340212] [] xfs_filestream_lookup_ag+0x60/0x4f0 [x= fs] = =20 [ 43.340212] [] kmem_zalloc+0x2b/0x40 [xfs] = = =20 [ 43.340212] [] xfs_mru_cache_create+0x12f/0x160 [xfs]= = =20 [ 43.340212] [] xfs_blkdev_get+0x492/0x660 [xfs] = = =20 [ 43.340212] [] get_sb_bdev+0x174/0x1a0 = = =20 [ 43.340212] [] xfs_blkdev_get+0x230/0x660 [xfs] = = =20 [ 43.340212] [] kstrdup+0x54/0x70 = = =20 [ 43.340212] [] vfs_kern_mount+0x86/0x250 = = =20 [ 43.340212] [] do_kern_mount+0x53/0x120 = = =20 [ 43.340212] [] do_mount+0x2ed/0xa50 = = =20 [ 43.340212] [] sys_mount+0xf9/0x110 = = =20 [ 43.340212] [] system_call_fastpath+0x16/0x1b = = =20 [ 43.340212] Code: 49 8b 54 24 08 8b 42 18 85 c0 75 65 49 8b 45 28 48 8b = 58 08 8b 6b 18 85 ed 0f 84 92 00 00 00 48 63 43 14 48 8b 53 20 48 c1 e0 04 = <4c> 89 3c 02 48 63 43 14 48 8b 53 20=20 48 c1 e0 04 44 89 74 02 08 = =20 [ 43.340212] RIP [] xfs_qm_dqcheck+0x9ca/0x2270 [xfs] = = =20 [ 43.340212] RSP = = =20 [ 43.340212] CR2: fffffffffffffc00 = = =20 [ 43.340212] ---[ end trace 3fb966a92b4fc211 ]--- = = =20 [ 60.803310] 0000:05:00.0: eth0: changing MTU from 1500 to 9000 2) ops without "[PATCH] xfs: validate quota log items during log recovery" = but with xfs debug enabled kernel [ 37.768605] Filesystem "dm-0": Disabling barriers, trial barrier write f= ailed =20 [ 37.831256] XFS mounting filesystem dm-0 = =20 [ 39.575446] Starting XFS recovery on filesystem: dm-0 (logdev: internal)= =20 [ 42.482802] Assertion failed: item->ri_total > item->ri_cnt, file: fs/xf= s/xfs_log_recover.c, line: 1452 =20 [ 42.482841] ------------[ cut here ]------------ = =20 [ 42.486059] kernel BUG at fs/xfs/support/debug.c:81! = =20 [ 42.486059] invalid opcode: 0000 [#1] SMP = =20 [ 42.486059] last sysfs file: /sys/devices/virtual/block/md3/dev = =20 [ 42.486059] CPU 3 = =20 [ 42.486059] Modules linked in: ext3 jbd mbcache raid456 async_xor async_= memcpy async_tx xor raid1 dm_mod e1000 e1000e ipmi_devintf ipmi_si ipmi_msg= handler 8021q garp stp xfs=20 scsi_wait_scan sd_mod crc_t10dif mptsas mptscsih mptbase scsi_transport_sas= scsi_mod raid10 md_mod =20 [ 42.486059] Pid: 1718, comm: mount Not tainted 2.6.28.7-1 #1 = = =20 [ 42.486059] RIP: 0010:[] [] assfail= +0x1a/0x20 [xfs] = =20 [ 42.486059] RSP: 0018:ffff88015bc7ba48 EFLAGS: 00010292 = = =20 [ 42.486059] RAX: 000000000000006e RBX: ffff88015bc723c0 RCX: 00000000000= 00004 = =20 [ 42.486059] RDX: 0000000000000d0d RSI: 0000000000000046 RDI: ffffffff808= 4d310 = =20 [ 42.486059] RBP: ffffc200115e63a8 R08: 0000000000000000 R09: 00000000000= 00006 = =20 [ 42.486059] R10: ffff88015bc7b7e8 R11: 000000005bc7b8e8 R12: ffff88015bc= 72180 = =20 [ 42.486059] R13: ffff88015bc722c0 R14: 0000000000001000 R15: ffff88015e0= fb000 = =20 [ 42.486059] FS: 00007ff1ac5557d0(0000) GS:ffff88015fa4c500(0000) knlGS:= 0000000000000000 = =20 [ 42.486059] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b = = =20 [ 42.486059] CR2: 00000000006e3000 CR3: 000000015bc6d000 CR4: 00000000000= 006e0 = =20 [ 42.486059] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 00000000000= 00000 = =20 [ 42.486059] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 00000000000= 00400 = =20 [ 42.486059] Process mount (pid: 1718, threadinfo ffff88015bc7a000, task = ffff88015d0ba210) = =20 [ 42.486059] Stack: = = =20 [ 42.486059] ffffc200115e63a8 ffffffffa0119883 ffff88015bc72180 ffffc200= 115e639c = =20 [ 42.486059] ffffc200115e63a8 ffffc200115e7e00 0000000000000003 ffff8801= 5bc7bb78 = =20 [ 42.486059] ffff88015b4b4000 ffffffffa011b47e ffff88015d455680 00000001= a0132b9d = =20 [ 42.486059] Call Trace: = = =20 [ 42.486059] [] ? xlog_recover_add_to_trans+0xa3/0x1f0= [xfs] = =20 [ 42.486059] [] ? xlog_recover_process_data+0x23e/0x29= 0 [xfs] = =20 [ 42.486059] [] ? xlog_do_recovery_pass+0x389/0x810 [x= fs] = =20 [ 42.486059] [] ? default_wake_function+0x0/0x10 = = =20 [ 42.486059] [] ? xfs_dir_file_operations+0xbd20/0x245= 71 [xfs] = =20 [ 42.486059] [] ? xlog_do_log_recovery+0x56/0x100 [xfs= ] = =20 [ 42.486059] [] ? xlog_do_recover+0x20/0x250 [xfs] = = =20 [ 42.486059] [] ? xlog_recover+0x7a/0x90 [xfs] = = =20 [ 42.486059] [] ? xfs_log_mount+0xaa/0x1b0 [xfs] = = =20 [ 42.486059] [] ? xfs_mountfs+0x32b/0x6b0 [xfs] = = =20 [ 42.486059] [] ? xfs_fstrm_free_func+0x0/0xc0 [xfs] = = =20 [ 42.486059] [] ? kmem_zalloc+0x2b/0x40 [xfs] = = =20 [ 42.486059] [] ? xfs_mru_cache_create+0x12f/0x160 [xf= s] = =20 [ 42.486059] [] ? xfs_fs_fill_super+0x262/0x430 [xfs] = = =20 [ 42.486059] [] ? get_sb_bdev+0x174/0x1a0 = = =20 [ 42.486059] [] ? xfs_fs_fill_super+0x0/0x430 [xfs] = = =20 [ 42.486059] [] ? kstrdup+0x54/0x70 = = =20 [ 42.486059] [] ? vfs_kern_mount+0x86/0x250 = = =20 [ 42.486059] [] ? do_kern_mount+0x53/0x120 = = =20 [ 42.486059] [] ? do_mount+0x2ed/0xa50 = = =20 [ 42.486059] [] ? sys_mount+0xf9/0x110 = = =20 [ 42.486059] [] ? system_call_fastpath+0x16/0x1b = = =20 [ 42.486059] Code: 08 01 00 00 00 e8 77 df 26 e0 48 83 c4 18 c3 66 90 89 = d1 48 83 ec 08 48 89 f2 31 c0 48 89 fe 48 c7 c7 e0 d2 14 a0 e8 57 4b 3f e0 = <0f> 0b eb fe 66 90 41 55 41 54 49 89 f4 55=20 89 fd 48 c7 c7 80 19 = =20 [ 42.486059] RIP [] assfail+0x1a/0x20 [xfs] = = =20 [ 42.486059] RSP = = =20 [ 43.497724] ---[ end trace 07b3fe479be2dbfb ]--- = = =20 [ 59.200404] 0000:05:00.0: eth0: changing MTU from 1500 to 9000 =20 =2D-=20 Arkadiusz Mi=C5=9Bkiewicz PLD/Linux Team arekm / maven.pl http://ftp.pld-linux.org/ From felixb@sgi.com Mon Apr 6 10:32:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_14, J_CHICKENPOX_53 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36FW8IT174728 for ; Mon, 6 Apr 2009 10:32:18 -0500 Received: from snoot.americas.sgi.com (cxfsopus16.americas.sgi.com [128.162.240.194]) by relay1.corp.sgi.com (Postfix) with ESMTP id CFF1E8F8094 for ; Mon, 6 Apr 2009 08:31:42 -0700 (PDT) Received: by snoot.americas.sgi.com (Postfix, from userid 29043) id AA9E41A8CD10; Mon, 6 Apr 2009 10:26:16 -0500 (CDT) From: Felix Blyakher To: xfs@oss.sgi.com Cc: Felix Blyakher Subject: [PATCH] xfstests: fix async io error handling in fsx Date: Mon, 6 Apr 2009 10:26:16 -0500 Message-Id: <1239031576-26279-1-git-send-email-felixb@sgi.com> X-Mailer: git-send-email 1.5.4.rc3 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The result of async io returned in the event.res in addition to the number of bytes read/written provides negated error number. The broken libaio defines event.res as unsigned while the same structure in the kernel defines it as signed. The kernel indeed treats it as signed, and returns the negated error number. Till libaio is fixed we provide the signed long temp var. Also set errno for each error condition in aio_rw, as the caller is not aio aware and expects ret(-1)+errno by the traditional libc convention. Signed-off-by: Felix Blyakher --- ltp/fsx.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 files changed, 36 insertions(+), 7 deletions(-) diff --git a/ltp/fsx.c b/ltp/fsx.c index ebe5324..210afd5 100644 --- a/ltp/fsx.c +++ b/ltp/fsx.c @@ -962,6 +962,7 @@ __aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset) static struct timespec ts; struct iocb *iocbs[] = { &iocb }; int ret; + long res; if (rw == READ) { io_prep_pread(&iocb, fd, buf, len, offset); @@ -976,21 +977,49 @@ __aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset) fprintf(stderr, "errcode=%d\n", ret); fprintf(stderr, "aio_rw: io_submit failed: %s\n", strerror(ret)); - return(-1); + goto out_error; } ret = io_getevents(io_ctx, 1, 1, &event, &ts); if (ret != 1) { - fprintf(stderr, "errcode=%d\n", ret); - fprintf(stderr, "aio_rw: io_getevents failed: %s\n", - strerror(ret)); - return -1; + if (ret == 0) + fprintf(stderr, "aio_rw: no events available\n"); + else { + fprintf(stderr, "errcode=%d\n", -ret); + fprintf(stderr, "aio_rw: io_getevents failed: %s\n", + strerror(-ret)); + } + goto out_error; } if (len != event.res) { - fprintf(stderr, "bad read length: %lu instead of %u\n", - event.res, len); + /* + * The b0rked libaio defines event.res as unsigned. + * However the kernel strucuture has it signed, + * and it's used to pass negated error value. + * Till the library is fixed use the temp var. + */ + res = (long)event.res; + if (res >= 0) + fprintf(stderr, "bad io length: %lu instead of %u\n", + res, len); + else { + fprintf(stderr, "errcode=%d\n", -res); + fprintf(stderr, "aio_rw: async io failed: %s\n", + strerror(-res)); + ret = res; + goto out_error; + } + } return event.res; + +out_error: + /* + * The caller expects error return in traditional libc + * convention, i.e. -1 and the errno set to error. + */ + errno = -ret; + return -1; } int aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset) -- 1.5.4.rc3 From BATV+40151ff64ec39679e1dc+2052+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 6 11:34:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36GXqX7177782 for ; Mon, 6 Apr 2009 11:34:08 -0500 X-ASG-Debug-ID: 1239035611-2aad032a0000-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 E399C1C9AF1F; Mon, 6 Apr 2009 09:33:31 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nMLDHOv4hUQZOlAx; Mon, 06 Apr 2009 09:33:31 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LqrlL-00048E-IY; Mon, 06 Apr 2009 16:33:31 +0000 Date: Mon, 6 Apr 2009 12:33:31 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix async io error handling in fsx Subject: Re: [PATCH] xfstests: fix async io error handling in fsx Message-ID: <20090406163331.GA22240@infradead.org> References: <1239031576-26279-1-git-send-email-felixb@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1239031576-26279-1-git-send-email-felixb@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239035611 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Apr 06, 2009 at 10:26:16AM -0500, Felix Blyakher wrote: > The result of async io returned in the event.res in addition > to the number of bytes read/written provides negated error > number. The broken libaio defines event.res as unsigned > while the same structure in the kernel defines it as signed. > The kernel indeed treats it as signed, and returns the > negated error number. Till libaio is fixed we provide > the signed long temp var. > Also set errno for each error condition in aio_rw, as the > caller is not aio aware and expects ret(-1)+errno by the > traditional libc convention. Looks good. Reviewed-by: Christoph Hellwig From BATV+40151ff64ec39679e1dc+2052+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 6 12:39:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36HdHkY181222 for ; Mon, 6 Apr 2009 12:39:34 -0500 X-ASG-Debug-ID: 1239039537-34a402a10000-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 4F0711F17D6 for ; Mon, 6 Apr 2009 10:38:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id AW6JgA8uxm3llbHz for ; Mon, 06 Apr 2009 10:38:57 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lqsmd-00027T-ES; Mon, 06 Apr 2009 17:38:56 +0000 Date: Mon, 6 Apr 2009 13:38:55 -0400 From: Christoph Hellwig To: Curtis Doty Cc: XFS X-ASG-Orig-Subj: Re: why xfs_write() race with O_DIRECT only? Subject: Re: why xfs_write() race with O_DIRECT only? Message-ID: <20090406173846.GA30403@infradead.org> References: <49CD7912.6080508@GreenKey.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49CD7912.6080508@GreenKey.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239039537 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Mar 27, 2009 at 06:10:42PM -0700, Curtis Doty wrote: > I'm guessing this is the race fixed in 2.6.29. > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=25051158 > > But my app is running O_DIRECT and only calls pwrite(). Is there > something I'm missing that explains the aio stuff etc.? The aboe patch only matters when using dmapi. Can you send a simple sample program or other kind of testcases that reproduces the bug that you see? From BATV+40151ff64ec39679e1dc+2052+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 6 12:42:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36Hfweu181344 for ; Mon, 6 Apr 2009 12:42:13 -0500 X-ASG-Debug-ID: 1239039758-6de903c60000-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 84CC313FA4FD for ; Mon, 6 Apr 2009 10:42:39 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id JNd6xoQLUliazkMG for ; Mon, 06 Apr 2009 10:42:39 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LqsoB-0005IR-PJ; Mon, 06 Apr 2009 17:40:35 +0000 Date: Mon, 6 Apr 2009 13:40:31 -0400 From: Christoph Hellwig To: Christopher Layne Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_trans_log_inode: OOPS in 2.6.28.7 Subject: Re: xfs_trans_log_inode: OOPS in 2.6.28.7 Message-ID: <20090406174030.GA8943@infradead.org> References: <20090402024744.GB23044@ns1.signalpunk.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090402024744.GB23044@ns1.signalpunk.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239039779 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 02, 2009 at 02:47:44AM +0000, Christopher Layne wrote: > While I think I might be able to reproduce this it's not something I > particularly want to reproduce. The precursor was cancelling an > already running xfs_fsr, removing the .fsr_last, and immediately > restarting it (forcing a new cycle). Right after I received an OOPS and > all file system access was blocked necessitating a hard reboot and > xfs_repair. The a5a5a5 in there looks like slab poisoning. I'll try to come up with a testcase based on your above report to try to reproduce it. From felixb@sgi.com Mon Apr 6 17:15:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36MErxk218053 for ; Mon, 6 Apr 2009 17:15:03 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 09F728F8078 for ; Mon, 6 Apr 2009 15:14:33 -0700 (PDT) Received: from eagdhcp-232-146.americas.sgi.com (eagdhcp-232-146.americas.sgi.com [128.162.232.146]) by estes.americas.sgi.com (Postfix) with ESMTP id 6837E7000103; Mon, 6 Apr 2009 17:11:57 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <6DD58BEE-122C-4283-A9C8-AA3EEE50D60D@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090318094132.430583000@bombadil.infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 5/5] xfs: remove m_attroffset Date: Mon, 6 Apr 2009 17:11:57 -0500 References: <20090318094119.561416000@bombadil.infradead.org> <20090318094132.430583000@bombadil.infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mar 18, 2009, at 4:41 AM, Christoph Hellwig wrote: > With the upcoming v3 inodes the default attroffset needs to be > calculated > for each specific inode, so we can't cache it in the superblock > anymore. > > Also replace the assert for wrong inode sizes with a proper error > check > also included in non-debug builds. Note that the ENOSYS retourn for > that might seem odd, but that error is returned by > xfs_mount_validate_sb > for all theoretically valid but not supported filesystem geometries. > > > Signed-off-by: Christoph Hellwig Reviewed-by: Felix Blyakher > > > Index: xfs/fs/xfs/xfs_mount.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_mount.c 2009-03-18 07:37:20.566978952 +0100 > +++ xfs/fs/xfs/xfs_mount.c 2009-03-18 07:47:49.573979000 +0100 > @@ -333,6 +333,22 @@ xfs_mount_validate_sb( > return XFS_ERROR(ENOSYS); > } > > + /* > + * Currently only very few inode sizes are supported. > + */ > + switch (sbp->sb_inodesize) { > + case 256: > + case 512: > + case 1024: > + case 2048: > + break; > + default: > + xfs_fs_mount_cmn_err(flags, > + "inode size of %d bytes not supported", > + sbp->sb_inodesize); > + return XFS_ERROR(ENOSYS); > + } > + > if (xfs_sb_validate_fsb_count(sbp, sbp->sb_dblocks) || > xfs_sb_validate_fsb_count(sbp, sbp->sb_rblocks)) { > xfs_fs_mount_cmn_err(flags, > @@ -655,27 +671,6 @@ xfs_mount_common(xfs_mount_t *mp, xfs_sb > mp->m_blockwsize = sbp->sb_blocksize >> XFS_WORDLOG; > mp->m_blockwmask = mp->m_blockwsize - 1; > > - /* > - * Setup for attributes, in case they get created. > - * This value is for inodes getting attributes for the first time, > - * the per-inode value is for old attribute values. > - */ > - ASSERT(sbp->sb_inodesize >= 256 && sbp->sb_inodesize <= 2048); > - switch (sbp->sb_inodesize) { > - case 256: > - mp->m_attroffset = XFS_LITINO(mp) - > - XFS_BMDR_SPACE_CALC(MINABTPTRS); > - break; > - case 512: > - case 1024: > - case 2048: > - mp->m_attroffset = XFS_BMDR_SPACE_CALC(6 * MINABTPTRS); > - break; > - default: > - ASSERT(0); > - } > - ASSERT(mp->m_attroffset < XFS_LITINO(mp)); > - > mp->m_alloc_mxr[0] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 1); > mp->m_alloc_mxr[1] = xfs_allocbt_maxrecs(mp, sbp->sb_blocksize, 0); > mp->m_alloc_mnr[0] = mp->m_alloc_mxr[0] / 2; > Index: xfs/fs/xfs/xfs_attr_leaf.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_attr_leaf.c 2009-03-18 07:37:20.570978763 > +0100 > +++ xfs/fs/xfs/xfs_attr_leaf.c 2009-03-18 07:37:23.768978423 +0100 > @@ -155,7 +155,8 @@ xfs_attr_shortform_bytesfit(xfs_inode_t > * 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) > + if (!dp->i_d.di_forkoff && dp->i_df.if_bytes > > + xfs_default_attroffset(dp)) > dsize = XFS_BMDR_SPACE_CALC(MINDBTPTRS); > break; > > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2009-03-18 07:37:20.575978772 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2009-03-18 07:37:23.770978468 +0100 > @@ -3569,6 +3569,27 @@ xfs_bmap_extents_to_btree( > } > > /* > + * Calculate the default attribute fork offset for newly created > inodes. > + */ > +uint > +xfs_default_attroffset( > + struct xfs_inode *ip) > +{ > + struct xfs_mount *mp = ip->i_mount; > + uint offset; > + > + if (mp->m_sb.sb_inodesize == 256) { > + offset = XFS_LITINO(mp) - > + XFS_BMDR_SPACE_CALC(MINABTPTRS); > + } else { > + offset = XFS_BMDR_SPACE_CALC(6 * MINABTPTRS); > + } > + > + ASSERT(offset < XFS_LITINO(mp)); > + return offset; > +} > + > +/* > * Helper routine to reset inode di_forkoff field when switching > * attribute fork from local to extent format - we reset it where > * possible to make space available for inline data fork extents. > @@ -3580,15 +3601,18 @@ xfs_bmap_forkoff_reset( > int whichfork) > { > if (whichfork == XFS_ATTR_FORK && > - (ip->i_d.di_format != XFS_DINODE_FMT_DEV) && > - (ip->i_d.di_format != XFS_DINODE_FMT_UUID) && > - (ip->i_d.di_format != XFS_DINODE_FMT_BTREE) && > - ((mp->m_attroffset >> 3) > ip->i_d.di_forkoff)) { > - ip->i_d.di_forkoff = mp->m_attroffset >> 3; > - ip->i_df.if_ext_max = XFS_IFORK_DSIZE(ip) / > - (uint)sizeof(xfs_bmbt_rec_t); > - ip->i_afp->if_ext_max = XFS_IFORK_ASIZE(ip) / > - (uint)sizeof(xfs_bmbt_rec_t); > + ip->i_d.di_format != XFS_DINODE_FMT_DEV && > + ip->i_d.di_format != XFS_DINODE_FMT_UUID && > + ip->i_d.di_format != XFS_DINODE_FMT_BTREE) { > + uint dfl_forkoff = xfs_default_attroffset(ip) >> 3; > + > + if (dfl_forkoff > ip->i_d.di_forkoff) { > + ip->i_d.di_forkoff = dfl_forkoff; > + ip->i_df.if_ext_max = > + XFS_IFORK_DSIZE(ip) / sizeof(xfs_bmbt_rec_t); > + ip->i_afp->if_ext_max = > + XFS_IFORK_ASIZE(ip) / sizeof(xfs_bmbt_rec_t); > + } > } > } > > @@ -4057,7 +4081,7 @@ xfs_bmap_add_attrfork( > case XFS_DINODE_FMT_BTREE: > ip->i_d.di_forkoff = xfs_attr_shortform_bytesfit(ip, size); > if (!ip->i_d.di_forkoff) > - ip->i_d.di_forkoff = mp->m_attroffset >> 3; > + ip->i_d.di_forkoff = xfs_default_attroffset(ip) >> 3; > else if (mp->m_flags & XFS_MOUNT_ATTR2) > version = 2; > break; > @@ -4204,12 +4228,12 @@ xfs_bmap_compute_maxlevels( > * (a signed 16-bit number, xfs_aextnum_t). > * > * Note that we can no longer assume that if we are in ATTR1 that > - * the fork offset of all the inodes will be (m_attroffset >> 3) > - * because we could have mounted with ATTR2 and then mounted back > - * with ATTR1, keeping the di_forkoff's fixed but probably at > - * various positions. Therefore, for both ATTR1 and ATTR2 > - * we have to assume the worst case scenario of a minimum size > - * available. > + * the fork offset of all the inodes will be > + * (xfs_default_attroffset(ip) >> 3) because we could have mounted > + * with ATTR2 and then mounted back with ATTR1, keeping the > + * di_forkoff's fixed but probably at various positions. Therefore, > + * for both ATTR1 and ATTR2 we have to assume the worst case > scenario > + * of a minimum size available. > */ > if (whichfork == XFS_DATA_FORK) { > maxleafents = MAXEXTNUM; > Index: xfs/fs/xfs/xfs_bmap.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.h 2009-03-18 07:37:20.579979142 +0100 > +++ xfs/fs/xfs/xfs_bmap.h 2009-03-18 07:37:23.772979002 +0100 > @@ -338,6 +338,10 @@ xfs_check_nostate_extents( > xfs_extnum_t idx, > xfs_extnum_t num); > > +uint > +xfs_default_attroffset( > + struct xfs_inode *ip); > + > #ifdef __KERNEL__ > > /* > Index: xfs/fs/xfs/xfs_mount.h > =================================================================== > --- xfs.orig/fs/xfs/xfs_mount.h 2009-03-18 07:37:20.585978718 +0100 > +++ xfs/fs/xfs/xfs_mount.h 2009-03-18 07:37:23.772979002 +0100 > @@ -198,7 +198,6 @@ typedef struct xfs_mount { > int m_fixedfsid[2]; /* unchanged for life of FS */ > uint m_dmevmask; /* DMI events for this FS */ > __uint64_t m_flags; /* global mount flags */ > - uint m_attroffset; /* inode attribute offset */ > uint m_dir_node_ents; /* #entries in a dir danode */ > uint m_attr_node_ents; /* #entries in attr danode */ > int m_ialloc_inos; /* inodes in inode allocation */ > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From BATV+40151ff64ec39679e1dc+2052+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 6 17:29:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36MTEqu218745 for ; Mon, 6 Apr 2009 17:29:29 -0500 X-ASG-Debug-ID: 1239056912-5bd3006b0000-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 D16131C9D627; Mon, 6 Apr 2009 15:28:32 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4OqZVXTiFyu0MGqk; Mon, 06 Apr 2009 15:28:32 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LqxIu-0003E7-4V; Mon, 06 Apr 2009 22:28:32 +0000 Date: Mon, 6 Apr 2009 18:28:32 -0400 From: Christoph Hellwig To: Felix Blyakher , Dave Chinner Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 0/2, RESEND] [XFS] a couple of fixes Subject: Re: [PATCH 0/2, RESEND] [XFS] a couple of fixes Message-ID: <20090406222831.GA12016@infradead.org> References: <1237116342-25701-1-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1237116342-25701-1-git-send-email-david@fromorbit.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239056933 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I've sucked these patches into my tree after reviewin and QAing them. Felix, can you pull this and send it to Linus for 2.6.30? git://git.kernel.org/pub/scm/fs/xfs/xfs.git From sandeen@sandeen.net Mon Apr 6 18:11:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36NBB51220387 for ; Mon, 6 Apr 2009 18:11:21 -0500 X-ASG-Debug-ID: 1239059449-77c6013e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D0441F28D6 for ; Mon, 6 Apr 2009 16:10:50 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Msqs4FR3Kjfcm4GJ for ; Mon, 06 Apr 2009 16:10:50 -0700 (PDT) Received: from Liberator.local (72-254-110-249.client.stsn.net [72.254.110.249]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 51403AA60DE; Mon, 6 Apr 2009 18:10:45 -0500 (CDT) Message-ID: <49DA8BF2.20206@sandeen.net> Date: Mon, 06 Apr 2009 16:10:42 -0700 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com, Felix Blyakher X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups References: <20090224133858.GB15820@infradead.org> In-Reply-To: <20090224133858.GB15820@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: 1239059450 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22441 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > - reshuffle various conditionals for data vs attr fork to make the code > more readable > - do fine-grainded goto-based error handling > - exit early from conditionals instead of keeping a long else branch > around > - allow kmem_alloc to fail > > Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2009-02-23 18:08:35.352924726 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2009-02-23 18:23:49.527051836 +0100 > @@ -5857,7 +5857,7 @@ xfs_getbmap( > void *arg) /* formatter arg */ > { > __int64_t bmvend; /* last block requested */ > - int error; /* return value */ > + int error = 0; /* return value */ > __int64_t fixlen; /* length for -1 case */ > int i; /* extent number */ > int lock; /* lock state */ > @@ -5876,30 +5876,8 @@ xfs_getbmap( > > mp = ip->i_mount; > iflags = bmv->bmv_iflags; > - > whichfork = iflags & BMV_IF_ATTRFORK ? XFS_ATTR_FORK : XFS_DATA_FORK; > > - /* If the BMV_IF_NO_DMAPI_READ interface bit specified, do not > - * generate a DMAPI read event. Otherwise, if the DM_EVENT_READ > - * bit is set for the file, generate a read event in order > - * that the DMAPI application may do its thing before we return > - * the extents. Usually this means restoring user file data to > - * regions of the file that look like holes. > - * > - * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify > - * BMV_IF_NO_DMAPI_READ so that read events are generated. > - * If this were not true, callers of ioctl( XFS_IOC_GETBMAP ) > - * could misinterpret holes in a DMAPI file as true holes, > - * when in fact they may represent offline user data. > - */ > - if ((iflags & BMV_IF_NO_DMAPI_READ) == 0 && > - DM_EVENT_ENABLED(ip, DM_EVENT_READ) && > - whichfork == XFS_DATA_FORK) { > - error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, 0, 0, 0, NULL); > - if (error) > - return XFS_ERROR(error); > - } > - > if (whichfork == XFS_ATTR_FORK) { > if (XFS_IFORK_Q(ip)) { > if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && > @@ -5913,11 +5891,37 @@ xfs_getbmap( > ip->i_mount); > return XFS_ERROR(EFSCORRUPTED); > } > - } else if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && > - ip->i_d.di_format != XFS_DINODE_FMT_BTREE && > - ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) > - return XFS_ERROR(EINVAL); > - if (whichfork == XFS_DATA_FORK) { > + > + prealloced = 0; > + fixlen = 1LL << 32; > + } else { > + /* > + * If the BMV_IF_NO_DMAPI_READ interface bit specified, do > + * not generate a DMAPI read event. Otherwise, if the > + * DM_EVENT_READ bit is set for the file, generate a read > + * event in order that the DMAPI application may do its thing > + * before we return the extents. Usually this means restoring > + * user file data to regions of the file that look like holes. > + * > + * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify > + * BMV_IF_NO_DMAPI_READ so that read events are generated. > + * If this were not true, callers of ioctl(XFS_IOC_GETBMAP) > + * could misinterpret holes in a DMAPI file as true holes, > + * when in fact they may represent offline user data. > + */ > + if (DM_EVENT_ENABLED(ip, DM_EVENT_READ) && > + !(iflags & BMV_IF_NO_DMAPI_READ)) { > + error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, > + 0, 0, 0, NULL); > + if (error) > + return XFS_ERROR(error); > + } > + > + if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && > + ip->i_d.di_format != XFS_DINODE_FMT_BTREE && > + ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) > + return XFS_ERROR(EINVAL); > + > if (xfs_get_extsz_hint(ip) || > ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ > prealloced = 1; > @@ -5926,42 +5930,34 @@ xfs_getbmap( > prealloced = 0; > fixlen = ip->i_size; > } > - } else { > - prealloced = 0; > - fixlen = 1LL << 32; > } > > if (bmv->bmv_length == -1) { > fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, fixlen)); > - bmv->bmv_length = MAX( (__int64_t)(fixlen - bmv->bmv_offset), > - (__int64_t)0); > - } else if (bmv->bmv_length < 0) > - return XFS_ERROR(EINVAL); > - if (bmv->bmv_length == 0) { > + bmv->bmv_length = > + max_t(__int64_t, fixlen - bmv->bmv_offset, 0); > + } else if (bmv->bmv_length == 0) { > bmv->bmv_entries = 0; > return 0; > + } else if (bmv->bmv_length < 0) { > + return XFS_ERROR(EINVAL); > } > + > nex = bmv->bmv_count - 1; > if (nex <= 0) > return XFS_ERROR(EINVAL); > bmvend = bmv->bmv_offset + bmv->bmv_length; > > xfs_ilock(ip, XFS_IOLOCK_SHARED); > - > - if (((iflags & BMV_IF_DELALLOC) == 0) && > - (whichfork == XFS_DATA_FORK) && > - (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size)) { > - /* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */ > - error = xfs_flush_pages(ip, (xfs_off_t)0, > - -1, 0, FI_REMAPF); > - if (error) { > - xfs_iunlock(ip, XFS_IOLOCK_SHARED); > - return error; > + if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { > + if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { > + error = xfs_flush_pages(ip, 0, -1, 0, FI_REMAPF); > + if (error) > + goto out_unlock_iolock; > } > - } > > - ASSERT(whichfork == XFS_ATTR_FORK || (iflags & BMV_IF_DELALLOC) || > - ip->i_delayed_blks == 0); > + ASSERT(ip->i_delayed_blks == 0); > + } > > lock = xfs_ilock_map_shared(ip); > > @@ -5972,23 +5968,24 @@ xfs_getbmap( > if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1) > nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1; > > - bmapi_flags = xfs_bmapi_aflag(whichfork) | > - ((iflags & BMV_IF_PREALLOC) ? 0 : XFS_BMAPI_IGSTATE); > + bmapi_flags = xfs_bmapi_aflag(whichfork); > + if (!(iflags & BMV_IF_PREALLOC)) > + bmapi_flags |= XFS_BMAPI_IGSTATE; > > /* > * Allocate enough space to handle "subnex" maps at a time. > */ > subnex = 16; > - map = kmem_alloc(subnex * sizeof(*map), KM_SLEEP); > + map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL); > + if (!map) > + goto out_unlock_ilock; > > bmv->bmv_entries = 0; > > - if ((XFS_IFORK_NEXTENTS(ip, whichfork) == 0)) { > - if (((iflags & BMV_IF_DELALLOC) == 0) || > - whichfork == XFS_ATTR_FORK) { > - error = 0; > - goto unlock_and_return; > - } > + if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 && > + (whichfork == XFS_ATTR_FORK || !(iflags & BMV_IF_DELALLOC))) { > + error = 0; > + goto out_free_map; > } > > nexleft = nex; > @@ -6000,10 +5997,12 @@ xfs_getbmap( > bmapi_flags, NULL, 0, map, &nmap, > NULL, NULL); > if (error) > - goto unlock_and_return; > + goto out_free_map; > ASSERT(nmap <= subnex); > > for (i = 0; i < nmap && nexleft && bmv->bmv_length; i++) { > + int full = 0; /* user array is full */ > + > out.bmv_oflags = 0; > if (map[i].br_state == XFS_EXT_UNWRITTEN) > out.bmv_oflags |= BMV_OF_PREALLOC; > @@ -6018,36 +6017,32 @@ xfs_getbmap( > whichfork == XFS_ATTR_FORK) { > /* came to the end of attribute fork */ > out.bmv_oflags |= BMV_OF_LAST; > - goto unlock_and_return; > - } else { > - int full = 0; /* user array is full */ > - > - if (!xfs_getbmapx_fix_eof_hole(ip, &out, > - prealloced, bmvend, > - map[i].br_startblock)) { > - goto unlock_and_return; > - } > - > - /* format results & advance arg */ > - error = formatter(&arg, &out, &full); > - if (error || full) > - goto unlock_and_return; > - nexleft--; > - bmv->bmv_offset = > - out.bmv_offset + out.bmv_length; > - bmv->bmv_length = MAX((__int64_t)0, > - (__int64_t)(bmvend - bmv->bmv_offset)); > - bmv->bmv_entries++; > + goto out_free_map; > } > + > + if (!xfs_getbmapx_fix_eof_hole(ip, &out, prealloced, > + bmvend, map[i].br_startblock)) > + goto out_free_map; > + > + /* format results & advance arg */ > + error = formatter(&arg, &out, &full); > + if (error || full) > + goto out_free_map; > + nexleft--; > + bmv->bmv_offset = > + out.bmv_offset + out.bmv_length; > + bmv->bmv_length = > + max_t(__int64_t, 0, bmvend - bmv->bmv_offset); > + bmv->bmv_entries++; > } > } while (nmap && nexleft && bmv->bmv_length); > > -unlock_and_return: > + out_free_map: > + kmem_free(map); > + out_unlock_ilock: > xfs_iunlock_map_shared(ip, lock); > + out_unlock_iolock: > xfs_iunlock(ip, XFS_IOLOCK_SHARED); > - > - kmem_free(map); > - > return error; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From sandeen@sandeen.net Mon Apr 6 18:57:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64, J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n36Numse222785 for ; Mon, 6 Apr 2009 18:56:58 -0500 X-ASG-Debug-ID: 1239062186-77c702150000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 795E51F3408 for ; Mon, 6 Apr 2009 16:56:27 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 3Fb6byx39tqeyA6e for ; Mon, 06 Apr 2009 16:56:27 -0700 (PDT) Received: from Liberator.local (72-254-110-249.client.stsn.net [72.254.110.249]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 8B5CBAA60DE; Mon, 6 Apr 2009 18:56:25 -0500 (CDT) Message-ID: <49DA96A6.2010201@sandeen.net> Date: Mon, 06 Apr 2009 16:56:22 -0700 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock Subject: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock References: <20090224133902.GC15820@infradead.org> In-Reply-To: <20090224133902.GC15820@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: 1239062187 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > xfs_getbmap (or rather the formatters called by it) copy out the getbmap > structures under the ilock, which can deadlock against mmap. This has > been reported via bugzilla a while ago (#717) and has recently also > shown up via lockdep. > > So allocate a temporary buffer to format the kernel getbmap structures > into and then copy them out after dropping the locks. > > A little problem with this is that we limit the number of extents we > can copy out by the maximum allocation size, but I see no real way > around that. > > > Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2009-02-23 20:38:27.512925014 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2009-02-23 20:40:46.720926193 +0100 > @@ -5867,12 +5867,13 @@ xfs_getbmap( > int nexleft; /* # of user extents left */ > int subnex; /* # of bmapi's can do */ > int nmap; /* number of map entries */ > - struct getbmapx out; /* output structure */ > + struct getbmapx *out; /* output structure */ > int whichfork; /* data or attr fork */ > int prealloced; /* this is a file with > * preallocated data space */ > int iflags; /* interface flags */ > int bmapi_flags; /* flags for xfs_bmapi */ > + int cur_ext = 0; > > mp = ip->i_mount; > iflags = bmv->bmv_iflags; > @@ -5948,6 +5949,13 @@ xfs_getbmap( > return XFS_ERROR(EINVAL); > bmvend = bmv->bmv_offset + bmv->bmv_length; > > + > + if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx)) > + return XFS_ERROR(ENOMEM); > + out = kmem_zalloc(bmv->bmv_count * sizeof(struct getbmapx), KM_MAYFAIL); > + if (!out) > + return XFS_ERROR(ENOMEM); > + > xfs_ilock(ip, XFS_IOLOCK_SHARED); > if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { > if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { > @@ -6001,39 +6009,39 @@ xfs_getbmap( > ASSERT(nmap <= subnex); > > for (i = 0; i < nmap && nexleft && bmv->bmv_length; i++) { > - int full = 0; /* user array is full */ > - > - out.bmv_oflags = 0; > + out[cur_ext].bmv_oflags = 0; > if (map[i].br_state == XFS_EXT_UNWRITTEN) > - out.bmv_oflags |= BMV_OF_PREALLOC; > + out[cur_ext].bmv_oflags |= BMV_OF_PREALLOC; > else if (map[i].br_startblock == DELAYSTARTBLOCK) > - out.bmv_oflags |= BMV_OF_DELALLOC; > - out.bmv_offset = XFS_FSB_TO_BB(mp, map[i].br_startoff); > - out.bmv_length = XFS_FSB_TO_BB(mp, map[i].br_blockcount); > - out.bmv_unused1 = out.bmv_unused2 = 0; > + out[cur_ext].bmv_oflags |= BMV_OF_DELALLOC; > + out[cur_ext].bmv_offset = > + XFS_FSB_TO_BB(mp, map[i].br_startoff); > + out[cur_ext].bmv_length = > + XFS_FSB_TO_BB(mp, map[i].br_blockcount); > + out[cur_ext].bmv_unused1 = 0; > + out[cur_ext].bmv_unused2 = 0; > ASSERT(((iflags & BMV_IF_DELALLOC) != 0) || > (map[i].br_startblock != DELAYSTARTBLOCK)); > if (map[i].br_startblock == HOLESTARTBLOCK && > whichfork == XFS_ATTR_FORK) { > /* came to the end of attribute fork */ > - out.bmv_oflags |= BMV_OF_LAST; > + out[cur_ext].bmv_oflags |= BMV_OF_LAST; > goto out_free_map; > } > > - if (!xfs_getbmapx_fix_eof_hole(ip, &out, prealloced, > - bmvend, map[i].br_startblock)) > + if (!xfs_getbmapx_fix_eof_hole(ip, &out[cur_ext], > + prealloced, bmvend, > + map[i].br_startblock)) > goto out_free_map; > > - /* format results & advance arg */ > - error = formatter(&arg, &out, &full); > - if (error || full) > - goto out_free_map; > nexleft--; > bmv->bmv_offset = > - out.bmv_offset + out.bmv_length; > + out[cur_ext].bmv_offset + > + out[cur_ext].bmv_length; > bmv->bmv_length = > max_t(__int64_t, 0, bmvend - bmv->bmv_offset); > bmv->bmv_entries++; > + cur_ext++; > } > } while (nmap && nexleft && bmv->bmv_length); > > @@ -6043,6 +6051,16 @@ xfs_getbmap( > xfs_iunlock_map_shared(ip, lock); > out_unlock_iolock: > xfs_iunlock(ip, XFS_IOLOCK_SHARED); > + > + for (i = 0; i < cur_ext; i++) { > + int full = 0; /* user array is full */ > + > + /* format results & advance arg */ > + error = formatter(&arg, &out[i], &full); > + if (error || full) > + break; > + } > + > return error; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From felixb@sgi.com Mon Apr 6 19:58:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n370w9U3225603 for ; Mon, 6 Apr 2009 19:58:20 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id D48628F8078 for ; Mon, 6 Apr 2009 17:57:49 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 77D3370001C8; Mon, 6 Apr 2009 19:57:49 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090224133858.GB15820@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Date: Mon, 6 Apr 2009 19:57:48 -0500 References: <20090224133858.GB15820@infradead.org> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Feb 24, 2009, at 7:38 AM, Christoph Hellwig wrote: > - reshuffle various conditionals for data vs attr fork to make the > code > more readable > - do fine-grainded goto-based error handling > - exit early from conditionals instead of keeping a long else branch > around > - allow kmem_alloc to fail > > Signed-off-by: Christoph Hellwig > > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2009-02-23 18:08:35.352924726 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2009-02-23 18:23:49.527051836 +0100 > @@ -5857,7 +5857,7 @@ xfs_getbmap( > void *arg) /* formatter arg */ > { > __int64_t bmvend; /* last block requested */ > - int error; /* return value */ > + int error = 0; /* return value */ > __int64_t fixlen; /* length for -1 case */ > int i; /* extent number */ > int lock; /* lock state */ > @@ -5876,30 +5876,8 @@ xfs_getbmap( > > mp = ip->i_mount; > iflags = bmv->bmv_iflags; > - > whichfork = iflags & BMV_IF_ATTRFORK ? XFS_ATTR_FORK : XFS_DATA_FORK; > > - /* If the BMV_IF_NO_DMAPI_READ interface bit specified, do not > - * generate a DMAPI read event. Otherwise, if the DM_EVENT_READ > - * bit is set for the file, generate a read event in order > - * that the DMAPI application may do its thing before we return > - * the extents. Usually this means restoring user file data to > - * regions of the file that look like holes. > - * > - * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify > - * BMV_IF_NO_DMAPI_READ so that read events are generated. > - * If this were not true, callers of ioctl( XFS_IOC_GETBMAP ) > - * could misinterpret holes in a DMAPI file as true holes, > - * when in fact they may represent offline user data. > - */ > - if ((iflags & BMV_IF_NO_DMAPI_READ) == 0 && > - DM_EVENT_ENABLED(ip, DM_EVENT_READ) && > - whichfork == XFS_DATA_FORK) { > - error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, 0, 0, 0, NULL); > - if (error) > - return XFS_ERROR(error); > - } > - > if (whichfork == XFS_ATTR_FORK) { > if (XFS_IFORK_Q(ip)) { > if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && > @@ -5913,11 +5891,37 @@ xfs_getbmap( > ip->i_mount); > return XFS_ERROR(EFSCORRUPTED); > } > - } else if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && > - ip->i_d.di_format != XFS_DINODE_FMT_BTREE && > - ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) > - return XFS_ERROR(EINVAL); > - if (whichfork == XFS_DATA_FORK) { > + > + prealloced = 0; > + fixlen = 1LL << 32; > + } else { > + /* > + * If the BMV_IF_NO_DMAPI_READ interface bit specified, do > + * not generate a DMAPI read event. Otherwise, if the > + * DM_EVENT_READ bit is set for the file, generate a read > + * event in order that the DMAPI application may do its thing > + * before we return the extents. Usually this means restoring > + * user file data to regions of the file that look like holes. > + * > + * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify > + * BMV_IF_NO_DMAPI_READ so that read events are generated. > + * If this were not true, callers of ioctl(XFS_IOC_GETBMAP) > + * could misinterpret holes in a DMAPI file as true holes, > + * when in fact they may represent offline user data. > + */ > + if (DM_EVENT_ENABLED(ip, DM_EVENT_READ) && > + !(iflags & BMV_IF_NO_DMAPI_READ)) { > + error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, > + 0, 0, 0, NULL); > + if (error) > + return XFS_ERROR(error); > + } > + > + if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && > + ip->i_d.di_format != XFS_DINODE_FMT_BTREE && > + ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) > + return XFS_ERROR(EINVAL); > + > if (xfs_get_extsz_hint(ip) || > ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ > prealloced = 1; > @@ -5926,42 +5930,34 @@ xfs_getbmap( > prealloced = 0; > fixlen = ip->i_size; > } > - } else { > - prealloced = 0; > - fixlen = 1LL << 32; > } > > if (bmv->bmv_length == -1) { > fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, fixlen)); > - bmv->bmv_length = MAX( (__int64_t)(fixlen - bmv->bmv_offset), > - (__int64_t)0); > - } else if (bmv->bmv_length < 0) > - return XFS_ERROR(EINVAL); > - if (bmv->bmv_length == 0) { > + bmv->bmv_length = > + max_t(__int64_t, fixlen - bmv->bmv_offset, 0); > + } else if (bmv->bmv_length == 0) { > bmv->bmv_entries = 0; > return 0; > + } else if (bmv->bmv_length < 0) { > + return XFS_ERROR(EINVAL); > } > + > nex = bmv->bmv_count - 1; > if (nex <= 0) > return XFS_ERROR(EINVAL); > bmvend = bmv->bmv_offset + bmv->bmv_length; > > xfs_ilock(ip, XFS_IOLOCK_SHARED); > - > - if (((iflags & BMV_IF_DELALLOC) == 0) && > - (whichfork == XFS_DATA_FORK) && > - (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size)) { > - /* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */ > - error = xfs_flush_pages(ip, (xfs_off_t)0, > - -1, 0, FI_REMAPF); > - if (error) { > - xfs_iunlock(ip, XFS_IOLOCK_SHARED); > - return error; > + if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { > + if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { > + error = xfs_flush_pages(ip, 0, -1, 0, FI_REMAPF); > + if (error) > + goto out_unlock_iolock; > } > - } > > - ASSERT(whichfork == XFS_ATTR_FORK || (iflags & BMV_IF_DELALLOC) || > - ip->i_delayed_blks == 0); > + ASSERT(ip->i_delayed_blks == 0); > + } > > lock = xfs_ilock_map_shared(ip); > > @@ -5972,23 +5968,24 @@ xfs_getbmap( > if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1) > nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1; > > - bmapi_flags = xfs_bmapi_aflag(whichfork) | > - ((iflags & BMV_IF_PREALLOC) ? 0 : XFS_BMAPI_IGSTATE); > + bmapi_flags = xfs_bmapi_aflag(whichfork); > + if (!(iflags & BMV_IF_PREALLOC)) > + bmapi_flags |= XFS_BMAPI_IGSTATE; > > /* > * Allocate enough space to handle "subnex" maps at a time. > */ > subnex = 16; > - map = kmem_alloc(subnex * sizeof(*map), KM_SLEEP); > + map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL); > + if (!map) > + goto out_unlock_ilock; Shouldn't we set error to ENOMEM here? Should the callers be taught to handle ENOMEM now? Felix > > > bmv->bmv_entries = 0; > > - if ((XFS_IFORK_NEXTENTS(ip, whichfork) == 0)) { > - if (((iflags & BMV_IF_DELALLOC) == 0) || > - whichfork == XFS_ATTR_FORK) { > - error = 0; > - goto unlock_and_return; > - } > + if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 && > + (whichfork == XFS_ATTR_FORK || !(iflags & BMV_IF_DELALLOC))) { > + error = 0; > + goto out_free_map; > } > > nexleft = nex; > @@ -6000,10 +5997,12 @@ xfs_getbmap( > bmapi_flags, NULL, 0, map, &nmap, > NULL, NULL); > if (error) > - goto unlock_and_return; > + goto out_free_map; > ASSERT(nmap <= subnex); > > for (i = 0; i < nmap && nexleft && bmv->bmv_length; i++) { > + int full = 0; /* user array is full */ > + > out.bmv_oflags = 0; > if (map[i].br_state == XFS_EXT_UNWRITTEN) > out.bmv_oflags |= BMV_OF_PREALLOC; > @@ -6018,36 +6017,32 @@ xfs_getbmap( > whichfork == XFS_ATTR_FORK) { > /* came to the end of attribute fork */ > out.bmv_oflags |= BMV_OF_LAST; > - goto unlock_and_return; > - } else { > - int full = 0; /* user array is full */ > - > - if (!xfs_getbmapx_fix_eof_hole(ip, &out, > - prealloced, bmvend, > - map[i].br_startblock)) { > - goto unlock_and_return; > - } > - > - /* format results & advance arg */ > - error = formatter(&arg, &out, &full); > - if (error || full) > - goto unlock_and_return; > - nexleft--; > - bmv->bmv_offset = > - out.bmv_offset + out.bmv_length; > - bmv->bmv_length = MAX((__int64_t)0, > - (__int64_t)(bmvend - bmv->bmv_offset)); > - bmv->bmv_entries++; > + goto out_free_map; > } > + > + if (!xfs_getbmapx_fix_eof_hole(ip, &out, prealloced, > + bmvend, map[i].br_startblock)) > + goto out_free_map; > + > + /* format results & advance arg */ > + error = formatter(&arg, &out, &full); > + if (error || full) > + goto out_free_map; > + nexleft--; > + bmv->bmv_offset = > + out.bmv_offset + out.bmv_length; > + bmv->bmv_length = > + max_t(__int64_t, 0, bmvend - bmv->bmv_offset); > + bmv->bmv_entries++; > } > } while (nmap && nexleft && bmv->bmv_length); > > -unlock_and_return: > + out_free_map: > + kmem_free(map); > + out_unlock_ilock: > xfs_iunlock_map_shared(ip, lock); > + out_unlock_iolock: > xfs_iunlock(ip, XFS_IOLOCK_SHARED); > - > - kmem_free(map); > - > return error; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Mon Apr 6 20:47:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64, J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n371lXZe228607 for ; Mon, 6 Apr 2009 20:47:43 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 778568F8073 for ; Mon, 6 Apr 2009 18:47:13 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id BEC247000103; Mon, 6 Apr 2009 19:43:06 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <2B47193B-9486-4500-80C4-E96750BEA54B@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090224133902.GC15820@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock Date: Mon, 6 Apr 2009 19:42:57 -0500 References: <20090224133902.GC15820@infradead.org> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Feb 24, 2009, at 7:39 AM, Christoph Hellwig wrote: > xfs_getbmap (or rather the formatters called by it) copy out the > getbmap > structures under the ilock, which can deadlock against mmap. This has > been reported via bugzilla a while ago (#717) and has recently also > shown up via lockdep. > > So allocate a temporary buffer to format the kernel getbmap structures > into and then copy them out after dropping the locks. > > A little problem with this is that we limit the number of extents we > can copy out by the maximum allocation size, Actually with the patch we either get all requested extents, or none if we fail to get memory for them. Should we teach the callers to expect ENOMEM and repeat the call to xfs_getbmap with smaller number of extents? Felix > but I see no real way > around that. > > > > Signed-off-by: Christoph Hellwig > > Index: xfs/fs/xfs/xfs_bmap.c > =================================================================== > --- xfs.orig/fs/xfs/xfs_bmap.c 2009-02-23 20:38:27.512925014 +0100 > +++ xfs/fs/xfs/xfs_bmap.c 2009-02-23 20:40:46.720926193 +0100 > @@ -5867,12 +5867,13 @@ xfs_getbmap( > int nexleft; /* # of user extents left */ > int subnex; /* # of bmapi's can do */ > int nmap; /* number of map entries */ > - struct getbmapx out; /* output structure */ > + struct getbmapx *out; /* output structure */ > int whichfork; /* data or attr fork */ > int prealloced; /* this is a file with > * preallocated data space */ > int iflags; /* interface flags */ > int bmapi_flags; /* flags for xfs_bmapi */ > + int cur_ext = 0; > > mp = ip->i_mount; > iflags = bmv->bmv_iflags; > @@ -5948,6 +5949,13 @@ xfs_getbmap( > return XFS_ERROR(EINVAL); > bmvend = bmv->bmv_offset + bmv->bmv_length; > > + > + if (bmv->bmv_count > ULONG_MAX / sizeof(struct getbmapx)) > + return XFS_ERROR(ENOMEM); > + out = kmem_zalloc(bmv->bmv_count * sizeof(struct getbmapx), > KM_MAYFAIL); > + if (!out) > + return XFS_ERROR(ENOMEM); > + > xfs_ilock(ip, XFS_IOLOCK_SHARED); > if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { > if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { > @@ -6001,39 +6009,39 @@ xfs_getbmap( > ASSERT(nmap <= subnex); > > for (i = 0; i < nmap && nexleft && bmv->bmv_length; i++) { > - int full = 0; /* user array is full */ > - > - out.bmv_oflags = 0; > + out[cur_ext].bmv_oflags = 0; > if (map[i].br_state == XFS_EXT_UNWRITTEN) > - out.bmv_oflags |= BMV_OF_PREALLOC; > + out[cur_ext].bmv_oflags |= BMV_OF_PREALLOC; > else if (map[i].br_startblock == DELAYSTARTBLOCK) > - out.bmv_oflags |= BMV_OF_DELALLOC; > - out.bmv_offset = XFS_FSB_TO_BB(mp, map[i].br_startoff); > - out.bmv_length = XFS_FSB_TO_BB(mp, map[i].br_blockcount); > - out.bmv_unused1 = out.bmv_unused2 = 0; > + out[cur_ext].bmv_oflags |= BMV_OF_DELALLOC; > + out[cur_ext].bmv_offset = > + XFS_FSB_TO_BB(mp, map[i].br_startoff); > + out[cur_ext].bmv_length = > + XFS_FSB_TO_BB(mp, map[i].br_blockcount); > + out[cur_ext].bmv_unused1 = 0; > + out[cur_ext].bmv_unused2 = 0; > ASSERT(((iflags & BMV_IF_DELALLOC) != 0) || > (map[i].br_startblock != DELAYSTARTBLOCK)); > if (map[i].br_startblock == HOLESTARTBLOCK && > whichfork == XFS_ATTR_FORK) { > /* came to the end of attribute fork */ > - out.bmv_oflags |= BMV_OF_LAST; > + out[cur_ext].bmv_oflags |= BMV_OF_LAST; > goto out_free_map; > } > > - if (!xfs_getbmapx_fix_eof_hole(ip, &out, prealloced, > - bmvend, map[i].br_startblock)) > + if (!xfs_getbmapx_fix_eof_hole(ip, &out[cur_ext], > + prealloced, bmvend, > + map[i].br_startblock)) > goto out_free_map; > > - /* format results & advance arg */ > - error = formatter(&arg, &out, &full); > - if (error || full) > - goto out_free_map; > nexleft--; > bmv->bmv_offset = > - out.bmv_offset + out.bmv_length; > + out[cur_ext].bmv_offset + > + out[cur_ext].bmv_length; > bmv->bmv_length = > max_t(__int64_t, 0, bmvend - bmv->bmv_offset); > bmv->bmv_entries++; > + cur_ext++; > } > } while (nmap && nexleft && bmv->bmv_length); > > @@ -6043,6 +6051,16 @@ xfs_getbmap( > xfs_iunlock_map_shared(ip, lock); > out_unlock_iolock: > xfs_iunlock(ip, XFS_IOLOCK_SHARED); > + > + for (i = 0; i < cur_ext; i++) { > + int full = 0; /* user array is full */ > + > + /* format results & advance arg */ > + error = formatter(&arg, &out[i], &full); > + if (error || full) > + break; > + } > + > return error; > } > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From armando@escortguide.com Tue Apr 7 08:54:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_20,MIME_8BIT_HEADER, THEBAT_UNREG autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n37Drfq7007104 for ; Tue, 7 Apr 2009 08:53:53 -0500 X-ASG-Debug-ID: 1239112486-787300260000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from 186-48.static.alkar.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7FCC013FE77D for ; Tue, 7 Apr 2009 06:54:46 -0700 (PDT) Received: from 186-48.static.alkar.net (186-48.static.alkar.net [77.239.186.48]) by cuda.sgi.com with ESMTP id 9gz28O52UDZFIlfg for ; Tue, 07 Apr 2009 06:54:46 -0700 (PDT) Date: Tue, 07 Apr 2009 17:53:18 +0300 From: Richards X-Mailer: The Bat! (v3.99.3) UNREG Organization: ldlzfrm X-Priority: 3 (Normal) Message-Id: <314283216.200904071753@escortguide.com> To: xfs@oss.sgi.com X-ASG-Orig-Subj: =?windows-1251?b?wO3y6Orw6Ofo8e375SDo5OXoIOzg6+7j7iDh6Oft5fHgLiA4XzgwOQ==?= =?windows-1251?b?XzMzM18xMDA0ICBb5+Jv7W/qX+/rYfLt++lfMTXwL+x17V0=?= Subject: =?windows-1251?b?wO3y6Orw6Ofo8e375SDo5OXoIOzg6+7j7iDh6Oft5fHgLiA4XzgwOQ==?= =?windows-1251?b?XzMzM18xMDA0ICBb5+Jv7W/qX+/rYfLt++lfMTXwL+x17V0=?= MIME-Version: 1.0 Content-Type: text/plain; charset=windows-1251 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: 186-48.static.alkar.net[77.239.186.48] X-Barracuda-Start-Time: 1239112487 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1598 1.0000 -1.0462 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.05 X-Barracuda-Spam-Status: No, SCORE=-1.05 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22498 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean =C8=ED=F4o=F0=ECa=F6uo=ED=EDa=FF_=F2e=EBe=F4o=ED=EDa=FF_=F1=EBy=E6=E1a_<=C8= =E4eu_=CCa=EBo=E3o_=C1u=E7=EDe=F1a> =C7=E2o=EDu=F2e u =EFo=EBy=F7a=E9=F2e =EFo=EBe=E7=EDy=FE u=ED=F4o=F0=ECa=F6= u=FE! 8 809 333 1004 (=E7=E2=EE=ED=EE=EA =EF=EB=E0=F2=ED=FB=E9 15=F0/=EC=E8=ED= ) =C3=E4=E5 =F7=E5=F0=F2 =ED=E8 =EC=EE=EB=EE=EB, =EA =ED=E0=EC =F1 =EC=F3=EA= =EE=E9 =ED=E0 =E4=E2=EE=F0. =C2=E8=E4=E8=F8=FC, =E4=E0 =ED=E5 =E2=FB=F0=E2=E5=F8=FC; =EF=EE=EA=E0=E6=F3= , =E4=E0 =ED=E5 =E2=EE=E7=FC=EC=E5=F8=FC. From BATV+6fbc271676f34c316c01+2053+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 7 11:01:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n37G1WfF013921 for ; Tue, 7 Apr 2009 11:01:49 -0500 X-ASG-Debug-ID: 1239120072-71cf026c0000-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 245041CA0CFD; Tue, 7 Apr 2009 09:01:13 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id uajh2beHfRECBHdU; Tue, 07 Apr 2009 09:01:13 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LrDja-0003xN-5o; Tue, 07 Apr 2009 16:01:10 +0000 Date: Tue, 7 Apr 2009 12:01:10 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 5/5] xfs: remove m_attroffset Subject: Re: [PATCH 5/5] xfs: remove m_attroffset Message-ID: <20090407160109.GA14912@infradead.org> References: <20090318094119.561416000@bombadil.infradead.org> <20090318094132.430583000@bombadil.infradead.org> <6DD58BEE-122C-4283-A9C8-AA3EEE50D60D@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <6DD58BEE-122C-4283-A9C8-AA3EEE50D60D@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239120073 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This one already was in the last pull request :) From SEMA-CR-1-4673CR@ptcmarketing.com Tue Apr 7 11:24:46 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.6 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n37GOKLt014930 for ; Tue, 7 Apr 2009 11:24:35 -0500 X-ASG-Debug-ID: 1239121505-788803480000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2186313FF9E9 for ; Tue, 7 Apr 2009 09:25:06 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id NAW8w3eRf9llXtj9 for ; Tue, 07 Apr 2009 09:25:06 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.39,338,1235970000"; d="scan'208,217";a="295910569" Received: from unknown (HELO HQCRMINT1.ptcnet.ptc.com) ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 07 Apr 2009 12:20:09 -0400 Date: Tue, 7 Apr 2009 12:14:42 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: Get More Design Power - Upgrade to Pro/ENGINEER Advanced XE Subject: Get More Design Power - Upgrade to Pro/ENGINEER Advanced XE Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1239120924840_541107316 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1239121527 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1239120924840_541107316 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Upgrade Pro/ENGINEER Foundation XE to Advanced XE Now is the best time to upgrade to a Pro/ENGINEER package that features the = advanced tools and technology you need to invigorate your designs, boost you= r productivity, and solve your unique product development challenges. Pro/ENGINEER Advanced XE=20 (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3V2RCL= &o=3D= 1-445OPX= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90217) Designed for engineers who need more design power and more efficient design = processes, this package includes everything you already have in the Pro/ENGI= NEER Foundation XE package, plus: * Choice of data management option: - Pro/INTRALINK=C2=AE for Pro/ENGINEER data management - Windchill PDMLink for broader engineering content and process manageme= nt * Choice of one high-performance design module: - Pro/ENGINEER Advanced Assembly - Pro/ENGINEER Behavioral Modeling - Pro/ENGINEER Interactive Surface Design - Pro/ENGINEER Mechanism Dynamics - Pro/ENGINEER Piping and Cabling Click here to learn more about the Pro/ENGINEER Advanced XE package. (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3V2RCL= &o=3D= 1-445OPX= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90217)=20 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-445OPX= &campd=3D= 1-3V2RCL= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-445OPX= &campd=3D= 1-3V2RCL= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1239120924840_541107316 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Email ProE Foundation XE Upgrade NA FY09
3D"PTC.com"
3D"

Upgrade Pro/ENGINEER Foundation XE to Advanced XE
=20

Now is the best time to upgrade to a Pro/ENGINEER packa= ge that features the advanced tools and technology you need to invigorate yo= ur designs, boost your productivity, and solve your unique product developme= nt challenges.

Pro/ENGINEER Ad= vanced XE

Designed for engineers who need more design power and m= ore efficient design processes, this package includes everything you already= have in the Pro/ENGINEER Foundation XE package, plus:

  • Choice of data management option:

        o  Pro/= INTRALINK® for Pro/ENGINEER data management

        o  Windchill= PDMLink for broader engineering content and process management

  • Choice of one high-performance design module:

        o  = ;Pro/ENGINEER Advanced Assembly

        o  = ;Pro/ENGINEER Behavioral Modeling

        o  Pro/= ENGINEER Interactive Surface Design

        o  Pro/= ENGINEER Mechanism Dynamics

        o  Pro/= ENGINEER Piping and Cabling

Click here<= /strong> to learn more about the Pro/ENGINEER Advanced XE package.

3D""
contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1239120924840_541107316-- From felixb@oss.sgi.com Tue Apr 7 16:28:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n37LSsrC040107 for ; Tue, 7 Apr 2009 16:28:59 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n37LSsUJ040065; Tue, 7 Apr 2009 16:28:54 -0500 Date: Tue, 7 Apr 2009 16:28:54 -0500 Message-Id: <200904072128.n37LSsUJ040065@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, mainline, updated. v2.6.28-rc3-21503-g8fe74cf X-Git-Refname: refs/heads/mainline X-Git-Reftype: branch X-Git-Oldrev: 15f7176eb1cccec0a332541285ee752b935c1c85 X-Git-Newrev: 8fe74cf053de7ad2124a894996f84fa890a81093 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, mainline has been updated 8fe74cf Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 c2ec175 mm: page_mkwrite change prototype to match fault ce3b0f8 New helper - current_umask() from 15f7176eb1cccec0a332541285ee752b935c1c85 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8fe74cf053de7ad2124a894996f84fa890a81093 Merge: c2eb2fa6d2b6fe122d3479ec5b28d978418b2698 ced117c73edc917e96dea7cca98c91383f0792f7 Author: Linus Torvalds Date: Thu Apr 2 21:09:10 2009 -0700 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6 * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: Remove two unneeded exports and make two symbols static in fs/mpage.c Cleanup after commit 585d3bc06f4ca57f975a5a1f698f65a45ea66225 Trim includes of fdtable.h Don't crap into descriptor table in binfmt_som Trim includes in binfmt_elf Don't mess with descriptor table in load_elf_binary() Get rid of indirect include of fs_struct.h New helper - current_umask() check_unsafe_exec() doesn't care about signal handlers sharing New locking/refcounting for fs_struct Take fs_struct handling to new file (fs/fs_struct.c) Get rid of bumping fs_struct refcount in pivot_root(2) Kill unsharing fs_struct in __set_personality() commit ce3b0f8d5c2203301fc87f3aaaed73e5819e2a48 Author: Al Viro Date: Sun Mar 29 19:08:22 2009 -0400 New helper - current_umask() current->fs->umask is what most of fs_struct users are doing. Put that into a helper function. Signed-off-by: Al Viro ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_file.c | 4 ++-- fs/xfs/linux-2.6/xfs_iops.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) hooks/post-receive -- XFS development tree From felixb@oss.sgi.com Tue Apr 7 16:29:20 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n37LTE2t040218 for ; Tue, 7 Apr 2009 16:29:20 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n37LTEPg040121; Tue, 7 Apr 2009 16:29:14 -0500 Date: Tue, 7 Apr 2009 16:29:14 -0500 Message-Id: <200904072129.n37LTEPg040121@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.28-rc3-20848-g8de2bf9 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 1aacc064e029f0017384e463121b98f06d3a2cc3 X-Git-Newrev: 8de2bf937a6bea8f0f775fd5399ba20c1a0c3d77 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 8de2bf9 xfs: remove xfs_flush_space 153fec4 xfs: flush delayed allcoation blocks on ENOSPC in create e43afd7 xfs: block callers of xfs_flush_inodes() correctly 5825294 xfs: make inode flush at ENOSPC synchronous a8d770d xfs: use xfs_sync_inodes() for device flushing 9d7fef7 xfs: inform the xfsaild of the push target before sleeping c626d17 xfs: prevent unwritten extent conversion from blocking I/O completion 705db3f xfs: fix double free of inode a6cb767 xfs: validate log feature fields correctly from 1aacc064e029f0017384e463121b98f06d3a2cc3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8de2bf937a6bea8f0f775fd5399ba20c1a0c3d77 Author: Dave Chinner Date: Mon Apr 6 18:49:12 2009 +0200 xfs: remove xfs_flush_space The only thing we need to do now when we get an ENOSPC condition during delayed allocation reservation is flush all the other inodes with delalloc blocks on them and retry without EOF preallocation. Remove the unneeded mess that is xfs_flush_space() and just call xfs_flush_inodes() directly from xfs_iomap_write_delay(). Also, change the location of the retry label to avoid trying to do EOF preallocation because we don't want to do that at ENOSPC. This enables us to remove the BMAPI_SYNC flag as it is no longer used. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit 153fec43ce5264dfe9f3530b281a2e940b25a0a8 Author: Dave Chinner Date: Mon Apr 6 18:48:30 2009 +0200 xfs: flush delayed allcoation blocks on ENOSPC in create If we are creating lots of small files, we can fail to get a reservation for inode create earlier than we should due to EOF preallocation done during delayed allocation reservation. Hence on the first reservation ENOSPC failure flush all the delayed allocation blocks out of the system and retry. This fixes the last commonly triggered spurious ENOSPC issue that has been reported. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit e43afd72d2455defd63a3f94f22fa09b586e58ed Author: Dave Chinner Date: Mon Apr 6 18:47:27 2009 +0200 xfs: block callers of xfs_flush_inodes() correctly xfs_flush_inodes() currently uses a magic timeout to wait for some inodes to be flushed before returning. This isn't really reliable but used to be the best that could be done due to deadlock potential of waiting for the entire flush. Now the inode flush is safe to execute while we hold page and inode locks, we can wait for all the inodes to flush synchronously. Convert the wait mechanism to a completion to do this efficiently. This should remove all remaining spurious ENOSPC errors from the delayed allocation reservation path. This is extracted almost line for line from a larger patch from Mikulas Patocka. Signed-off-by: Mikulas Patocka Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit 5825294edd3364cbba6514f70d88debec4f6cec7 Author: Dave Chinner Date: Mon Apr 6 18:45:44 2009 +0200 xfs: make inode flush at ENOSPC synchronous When we are writing to a single file and hit ENOSPC, we trigger a background flush of the inode and try again. Because we hold page locks and the iolock, the flush won't proceed until after we release these locks. This occurs once we've given up and ENOSPC has been reported. Hence if this one is the only dirty inode in the system, we'll get an ENOSPC prematurely. To fix this, remove the async flush from the allocation routines and move it to the top of the write path where we can do a synchronous flush and retry the write again. Only retry once as a second ENOSPC indicates that we really are ENOSPC. This avoids a page cache deadlock when trying to do this flush synchronously in the allocation layer that was identified by Mikulas Patocka. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit a8d770d987ee20b59fba6c37d7f0f2a351913c4b Author: Dave Chinner Date: Mon Apr 6 18:44:54 2009 +0200 xfs: use xfs_sync_inodes() for device flushing Currently xfs_device_flush calls sync_blockdev() which is a no-op for XFS as all it's metadata is held in a different address to the one sync_blockdev() works on. Call xfs_sync_inodes() instead to flush all the delayed allocation blocks out. To do this as efficiently as possible, do it via two passes - one to do an async flush of all the dirty blocks and a second to wait for all the IO to complete. This requires some modification to the xfs-sync_inodes_ag() flush code to do efficiently. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit 9d7fef74b23fe57803c5f71fab11630d9ec2cb4b Author: Dave Chinner Date: Mon Apr 6 18:42:59 2009 +0200 xfs: inform the xfsaild of the push target before sleeping When trying to reserve log space, we find the amount of space we need, then go to sleep waiting for space. When we are woken, we try to push the tail of the log forward to make sure we have space available. Unfortunately, this means that if there is not space available, and everyone who needs space goes to sleep there is no-one left to push the tail of the log to make space available. Once we have a thread waiting for space to become available, the others queue up behind it in a FIFO, and none of them push the tail of the log. This can result in everyone going to sleep in xlog_grant_log_space() if the first sleeper races with the last I/O that moves the tail of the log forward. With no further I/O tomove the tail of the log, there is nothing to wake the sleepers and hence all transactions just stop. Fix this by making sure the xfsaild will create enough space for the transaction that is about to sleep by moving the push target far enough forwards to ensure that that the curent proceeees will have enough space available when it is woken. That is, we push the AIL before we go to sleep. Because we've inserted the log ticket into the queue before we've pushed and gone to sleep, subsequent transactions will wait behind this one. Hence we are guaranteed to have space available when we are woken. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit c626d174cfe38e7f0545d074c299527892cd8c45 Author: Dave Chinner Date: Mon Apr 6 18:42:11 2009 +0200 xfs: prevent unwritten extent conversion from blocking I/O completion Unwritten extent conversion can recurse back into the filesystem due to memory allocation. Memory reclaim requires I/O completions to be processed to allow the callers to make progress. If the I/O completion workqueue thread is doing the recursion, then we have a deadlock situation. Move unwritten extent completion into it's own workqueue so it doesn't block I/O completions for normal delayed allocation or overwrite data. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit 705db3fd4660174a27418bbcb874d209a76044eb Author: Dave Chinner Date: Mon Apr 6 18:40:17 2009 +0200 xfs: fix double free of inode If we fail to initialise the VFS inode in inode_init_always(), it will call ->delete_inode internally resulting in the inode being freed. Hence we need to delay the call to inode_init_always() until after the XFS inode is sufficient set up to handle a call to ->delete_inode, and then if that fails do not touch the inode again at all as it has been freed. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig commit a6cb767e24b1dbedfcfa8077eab0aa2eab224038 Author: Dave Chinner Date: Mon Apr 6 18:39:27 2009 +0200 xfs: validate log feature fields correctly If the large log sector size feature bit is set in the superblock by accident (say disk corruption), the then fields that are now considered valid are not checked on production kernels. The checks are present as ASSERT statements so cause a panic on a debug kernel. Change this so that the fields are validity checked if the feature bit is set and abort the log mount if the fields do not contain valid values. Reported-by: Eric Sesterhenn Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_aops.c | 38 +++++++++++--------- fs/xfs/linux-2.6/xfs_aops.h | 1 + fs/xfs/linux-2.6/xfs_buf.c | 9 +++++ fs/xfs/linux-2.6/xfs_fs_subr.c | 14 ++++---- fs/xfs/linux-2.6/xfs_lrw.c | 18 +++++++++- fs/xfs/linux-2.6/xfs_sync.c | 78 +++++++++++++++++----------------------- fs/xfs/linux-2.6/xfs_sync.h | 9 +++-- fs/xfs/xfs_iget.c | 23 +++++++----- fs/xfs/xfs_iomap.c | 61 ++++++++----------------------- fs/xfs/xfs_iomap.h | 3 +- fs/xfs/xfs_log.c | 78 +++++++++++++++++++++++++--------------- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_vnodeops.c | 7 ++++ 13 files changed, 180 insertions(+), 161 deletions(-) hooks/post-receive -- XFS development tree From thomas@nchc.org.tw Tue Apr 7 21:06:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3826SBb053929 for ; Tue, 7 Apr 2009 21:06:43 -0500 X-ASG-Debug-ID: 1239156347-5d8d01300000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.nchc.org.tw (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C24651F8B95 for ; Tue, 7 Apr 2009 19:05:48 -0700 (PDT) Received: from smtp.nchc.org.tw (smtp.nchc.org.tw [140.110.16.10]) by cuda.sgi.com with ESMTP id fIV8FEi7j4aJYVnr for ; Tue, 07 Apr 2009 19:05:48 -0700 (PDT) Received: from smtp.nchc.org.tw (localhost [127.0.0.1]) by smtp.nchc.org.tw (Postfix) with ESMTP id 2AC1CE7072; Wed, 8 Apr 2009 10:05:46 +0800 (CST) Received: from thomas-desktop.nchc.org.tw (pika017.nchc.org.tw [140.110.61.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.nchc.org.tw (Postfix) with ESMTP id 09E9AE7071; Wed, 8 Apr 2009 10:05:46 +0800 (CST) Date: Wed, 8 Apr 2009 10:05:45 +0800 From: Thomas Tsai To: xfs@oss.sgi.com X-ASG-Orig-Subj: Build xfs 3.0 deb problem Subject: Build xfs 3.0 deb problem Message-Id: <20090408100545.2354f572.thomas@nchc.org.tw> Organization: NCHC X-Mailer: Sylpheed 2.4.8 (GTK+ 2.12.9; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg="PGP-SHA1"; boundary="Signature=_Wed__8_Apr_2009_10_05_45_+0800_7HkNsx9dhK+G4FLi" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: smtp.nchc.org.tw[140.110.16.10] X-Barracuda-Start-Time: 1239156368 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22547 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean --Signature=_Wed__8_Apr_2009_10_05_45_+0800_7HkNsx9dhK+G4FLi Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello xfs, I get the source tarball and easy run Makepkgs debian The build result look fine but lose some library files like libxfs.a.... I really need libxfs-dev to build my package. Please give me a hand, tkx. -- dpkg -L xfslibs-dev /. /lib /usr /usr/lib /usr/lib/libhandle.la /usr/lib/libhandle.a /usr/lib/libdisk.a /usr/share /usr/share/doc /usr/share/doc/xfslibs-dev /usr/share/doc/xfslibs-dev/copyright /usr/share/doc/xfslibs-dev/changelog.Debian.gz /usr/share/man /usr/share/man/man3 /usr/share/man/man3/path_to_handle.3.gz =20 /usr/share/man/man3/xfsctl.3.gz /usr/include /usr/include/xfs /usr/include/xfs/jdm.h /usr/include/xfs/xfs.h /usr/include/xfs/xqm.h /usr/include/xfs/linux.h /usr/include/xfs/handle.h /usr/include/xfs/platform_defs.h /usr/include/xfs/xfs_fs.h /lib/libhandle.la /lib/libhandle.so /lib/libhandle.a /usr/lib/libhandle.so /usr/share/man/man3/attr_list_by_handle.3.gz /usr/share/man/man3/path_to_fshandle.3.gz /usr/share/man/man3/handle_to_fshandle.3.gz ...more man files --=20 Thomas Tsai --Signature=_Wed__8_Apr_2009_10_05_45_+0800_7HkNsx9dhK+G4FLi Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFJ3AZ8XpcitEY3ms8RApmzAJ4u6SZDy8hi7DHLa8cjFSpczrjQuACcDjmr 3FvWyR4UyagFW55fiFImrT8= =GEcJ -----END PGP SIGNATURE----- --Signature=_Wed__8_Apr_2009_10_05_45_+0800_7HkNsx9dhK+G4FLi-- From MAILER-DAEMON@oss.sgi.com Tue Apr 7 21:24:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,MISSING_MIME_HB_SEP autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n382O7wi054705 for ; Tue, 7 Apr 2009 21:24:12 -0500 X-ASG-Debug-ID: 1239157494-2a8501c60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail37.opentransfer.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 28F121401EB9 for ; Tue, 7 Apr 2009 19:24:55 -0700 (PDT) Received: from mail37.opentransfer.com (mail37.opentransfer.com [76.162.254.37]) by cuda.sgi.com with SMTP id nuZVELkwNYFw6CcO for ; Tue, 07 Apr 2009 19:24:55 -0700 (PDT) Received: (qmail 27820 invoked for bounce); 8 Apr 2009 02:23:25 -0000 Date: 8 Apr 2009 02:23:25 -0000 From: MAILER-DAEMON@mail37.opentransfer.com To: xfs@oss.sgi.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="1239157405mail37.opentransfer.com10322621" X-ASG-Orig-Subj: failure notice Subject: failure notice X-Barracuda-Connect: mail37.opentransfer.com[76.162.254.37] X-Barracuda-Start-Time: 1239157516 Message-Id: <20090408022455.28F121401EB9@cuda.sgi.com> X-Barracuda-Bayes: INNOCENT GLOBAL 0.4110 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=ANY_BOUNCE_MESSAGE, BOUNCE_MESSAGE, NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22548 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name 0.00 BOUNCE_MESSAGE MTA bounce message 0.00 ANY_BOUNCE_MESSAGE Message is some kind of bounce message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --1239157405mail37.opentransfer.com10322621 Hi. This is the qmail-send program at mail37.opentransfer.com. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out. : 205.188.159.216 does not like recipient. Remote host said: 550 MAILBOX NOT FOUND Giving up on 205.188.159.216. --- Enclosed are the original headers of the message. --1239157405mail37.opentransfer.com10322621 Content-Type: message/rfc822 Return-Path: Received: (qmail 27772 invoked by uid 399); 8 Apr 2009 02:23:23 -0000 Received: from unknown (HELO oss.sgi.com) (58.187.2.244) by mail37.opentransfer.com with SMTP; 8 Apr 2009 02:23:23 -0000 From: xfs@oss.sgi.com To: more@aol.com Subject: Mail System Error - Returned Mail Date: Wed, 8 Apr 2009 09:23:59 -0700 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0008_7B33D160.99227518" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 (Body supressed) ------=_NextPart_000_0008_7B33D160.99227518-- --1239157405mail37.opentransfer.com10322621-- From nscott@aconex.com Tue Apr 7 21:47:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n382kpFQ055664 for ; Tue, 7 Apr 2009 21:47:01 -0500 X-ASG-Debug-ID: 1239158790-5d8f01d20000-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 AC21B1F8CE7 for ; Tue, 7 Apr 2009 19:46:31 -0700 (PDT) Received: from postoffice2.aconex.com (mail.aconex.com [203.89.202.182]) by cuda.sgi.com with ESMTP id EEKiAL6xmUSCMhTl for ; Tue, 07 Apr 2009 19:46:31 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id C6A8E4418E0; Wed, 8 Apr 2009 12:46:28 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.102.1]) by postoffice2.aconex.com with ESMTP id ceq4vlDNbNP4OzWo; Wed, 08 Apr 2009 12:46:28 +1000 (EST) Received: from gatekeeper.aconex.com (unknown [192.168.102.10]) by postoffice.aconex.com (Postfix) with ESMTP id B819B92C2C4; Wed, 8 Apr 2009 12:46:28 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id C9E714FD99; Wed, 8 Apr 2009 12:46:41 +1000 (EST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at gatekeeper.yarra.acx Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8OaVaEaW6llZ; Wed, 8 Apr 2009 12:46:37 +1000 (EST) Received: from mail-au.aconex.com (mail-au.aconex.com [192.168.102.12]) by gatekeeper.aconex.com (Postfix) with ESMTP id 1E0FA4FDA1; Wed, 8 Apr 2009 12:46:37 +1000 (EST) Date: Wed, 8 Apr 2009 12:46:24 +1000 (EST) From: Nathan Scott To: Thomas Tsai Cc: xfs@oss.sgi.com Message-ID: <732332763.3161411239158784001.JavaMail.root@mail-au.aconex.com> In-Reply-To: <20090408100545.2354f572.thomas@nchc.org.tw> X-ASG-Orig-Subj: Re: Build xfs 3.0 deb problem Subject: Re: Build xfs 3.0 deb problem MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [203.89.192.141] X-Mailer: Zimbra 5.0.13_GA_2791.RHEL5_64 (ZimbraWebClient - [unknown] (Linux)/5.0.13_GA_2791.RHEL5_64) X-Barracuda-Connect: mail.aconex.com[203.89.202.182] X-Barracuda-Start-Time: 1239158791 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.2, rules version 3.2.1.22549 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean ----- "Thomas Tsai" wrote: > Hello xfs, > > I get the source tarball and easy run Makepkgs debian > The build result look fine but lose some library files like > libxfs.a.... > > I really need libxfs-dev to build my package. > Please give me a hand, tkx. What is your package, and what libxfs calls does it make? libxfs.a was never intended as a published API, and nothing outside xfsprogs should be using it. cheers. -- Nathan From thomas@nchc.org.tw Tue Apr 7 22:57:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_83 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n383v3Db059095 for ; Tue, 7 Apr 2009 22:57:20 -0500 X-ASG-Debug-ID: 1239163092-2fde03940000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from smtp.nchc.org.tw (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 417D21402412 for ; Tue, 7 Apr 2009 20:58:12 -0700 (PDT) Received: from smtp.nchc.org.tw (smtp.nchc.org.tw [140.110.16.10]) by cuda.sgi.com with ESMTP id NmSwMoECdPKchJoC for ; Tue, 07 Apr 2009 20:58:12 -0700 (PDT) Received: from smtp.nchc.org.tw (localhost [127.0.0.1]) by smtp.nchc.org.tw (Postfix) with ESMTP id 60AA1E7093; Wed, 8 Apr 2009 11:56:42 +0800 (CST) Received: from thomas-desktop.nchc.org.tw (pika017.nchc.org.tw [140.110.61.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.nchc.org.tw (Postfix) with ESMTP id 3EDECE7090; Wed, 8 Apr 2009 11:56:42 +0800 (CST) Date: Wed, 8 Apr 2009 11:56:48 +0800 From: Thomas Tsai To: Nathan Scott Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Build xfs 3.0 deb problem Subject: Re: Build xfs 3.0 deb problem Message-Id: <20090408115648.efaee933.thomas@nchc.org.tw> In-Reply-To: <732332763.3161411239158784001.JavaMail.root@mail-au.aconex.com> References: <20090408100545.2354f572.thomas@nchc.org.tw> <732332763.3161411239158784001.JavaMail.root@mail-au.aconex.com> Organization: NCHC X-Mailer: Sylpheed 2.4.8 (GTK+ 2.12.9; i486-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg="PGP-SHA1"; boundary="Signature=_Wed__8_Apr_2009_11_56_48_+0800_Gfi2XFHPDXIwPYcd" X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: ClamAV using ClamSMTP X-Barracuda-Connect: smtp.nchc.org.tw[140.110.16.10] X-Barracuda-Start-Time: 1239163093 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22554 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean --Signature=_Wed__8_Apr_2009_11_56_48_+0800_Gfi2XFHPDXIwPYcd Content-Type: text/plain; charset=US-ASCII Content-Disposition: inline Content-Transfer-Encoding: quoted-printable tkx for reply soon. My package name is partclone(partclone.org), like partimage, but I used lib= xfs to check bitmap/super block and backup xfs partition. It's GPL licensed. We need GPL tool to backup XFS partition. The partimage can do that but get= some problems(not based on the xfs library). The xfs library you maintained well, and it's why I use xfslibs-dev's liarb= ry to write backup tool, "partclone.xfs" . so..., may I use xfslibs-dev to build partclone? or stop it and remove? tkx. Thomas On Wed, 8 Apr 2009 12:46:24 +1000 (EST) Nathan Scott wrote: >=20 > ----- "Thomas Tsai" wrote: >=20 > > Hello xfs, > >=20 > > I get the source tarball and easy run Makepkgs debian > > The build result look fine but lose some library files like > > libxfs.a.... > >=20 > > I really need libxfs-dev to build my package. > > Please give me a hand, tkx. >=20 > What is your package, and what libxfs calls does it make? > libxfs.a was never intended as a published API, and nothing > outside xfsprogs should be using it. >=20 > cheers. >=20 > --=20 > Nathan --=20 Thomas Tsai --Signature=_Wed__8_Apr_2009_11_56_48_+0800_Gfi2XFHPDXIwPYcd Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFJ3CCBXpcitEY3ms8RAiPaAKCFvHXN8YHFHa6++Wk9ezydG3wndACg3/H6 i7vm09poO//2YAp1iAOBd6g= =XDKj -----END PGP SIGNATURE----- --Signature=_Wed__8_Apr_2009_11_56_48_+0800_Gfi2XFHPDXIwPYcd-- From nscott@aconex.com Tue Apr 7 23:11:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_83 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n384AeRn059783 for ; Tue, 7 Apr 2009 23:10:50 -0500 X-ASG-Debug-ID: 1239163908-2fa403b50000-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 E14B614024B4 for ; Tue, 7 Apr 2009 21:11:49 -0700 (PDT) Received: from postoffice2.aconex.com (mail.aconex.com [203.89.202.182]) by cuda.sgi.com with ESMTP id 82FdMytUfx5QSJf0 for ; Tue, 07 Apr 2009 21:11:49 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 6AA7943C29C; Wed, 8 Apr 2009 14:10:18 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.102.1]) by postoffice2.aconex.com with ESMTP id QIq1EtqpJdmg9BAc; Wed, 08 Apr 2009 14:10:18 +1000 (EST) Received: from gatekeeper.aconex.com (unknown [192.168.102.10]) by postoffice.aconex.com (Postfix) with ESMTP id 4D43892C2F8; Wed, 8 Apr 2009 14:10:18 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id D00164FDA0; Wed, 8 Apr 2009 14:10:31 +1000 (EST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at gatekeeper.yarra.acx Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0kq0krqWZ6Gh; Wed, 8 Apr 2009 14:10:27 +1000 (EST) Received: from mail-au.aconex.com (mail-au.aconex.com [192.168.102.12]) by gatekeeper.aconex.com (Postfix) with ESMTP id A859D4FD99; Wed, 8 Apr 2009 14:10:27 +1000 (EST) Date: Wed, 8 Apr 2009 14:10:14 +1000 (EST) From: Nathan Scott To: Thomas Tsai Cc: xfs@oss.sgi.com Message-ID: <430737146.3196421239163814099.JavaMail.root@mail-au.aconex.com> In-Reply-To: <20090408115648.efaee933.thomas@nchc.org.tw> X-ASG-Orig-Subj: Re: Build xfs 3.0 deb problem Subject: Re: Build xfs 3.0 deb problem MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [203.89.192.141] X-Mailer: Zimbra 5.0.13_GA_2791.RHEL5_64 (ZimbraWebClient - [unknown] (Linux)/5.0.13_GA_2791.RHEL5_64) X-Barracuda-Connect: mail.aconex.com[203.89.202.182] X-Barracuda-Start-Time: 1239163909 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0013 1.0000 -2.0127 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.2, rules version 3.2.1.22556 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean ----- "Thomas Tsai" wrote: > tkx for reply soon. > > My package name is partclone(partclone.org), like partimage, but I Sounds like xfs_copy(8)? > used libxfs to check bitmap/super block and backup xfs partition. It's > GPL licensed. > > We need GPL tool to backup XFS partition. The partimage can do that > but get some problems(not based on the xfs library). > The xfs library you maintained well, and it's why I use xfslibs-dev's > liarbry to write backup tool, "partclone.xfs" . Can this use xfs_copy directly? > so..., may I use xfslibs-dev to build partclone? > or stop it and remove? Its historically proved disasterous having ondisk filesystem knowledge in tools (e.g. grub) ... and restricts what filesystem developers can do in terms of extending their ondisk formats, somewhat. It'd be alot better if you could use a tool shipped by the XFS folk rather than one you write yourself (libxfs is a very error prone interface modelled on kernel code, it wasn't designed as a general purpose API). cheers. -- Nathan From felixb@sgi.com Tue Apr 7 23:48:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n384m5XM061911 for ; Tue, 7 Apr 2009 23:48:15 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 6D2BD8F8068 for ; Tue, 7 Apr 2009 21:47:46 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 762EA70001C8; Tue, 7 Apr 2009 23:45:35 -0500 (CDT) Cc: Dave Chinner , xfs@oss.sgi.com Message-Id: <09C35383-EA8E-4EC2-A067-B3FA327AFF4C@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090406222831.GA12016@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH 0/2, RESEND] [XFS] a couple of fixes Date: Tue, 7 Apr 2009 23:45:33 -0500 References: <1237116342-25701-1-git-send-email-david@fromorbit.com> <20090406222831.GA12016@infradead.org> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 6, 2009, at 5:28 PM, Christoph Hellwig wrote: > I've sucked these patches into my tree after reviewin and QAing them. > Felix, can you pull this and send it to Linus for 2.6.30? > > git://git.kernel.org/pub/scm/fs/xfs/xfs.git I did pull from your tree, and pushed to oss. But I stopped short from pushing the for-linus branch, and generating the pull request, as I'm again seeing the 'merge' commits. I'll try to sort it out tomorrow. Felix From lizf@cn.fujitsu.com Wed Apr 8 02:08:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_73, J_CHICKENPOX_74 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38789wl072317 for ; Wed, 8 Apr 2009 02:08:19 -0500 X-ASG-Debug-ID: 1239174447-665f01680000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from song.cn.fujitsu.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7F4B21F91F3 for ; Wed, 8 Apr 2009 00:07:28 -0700 (PDT) Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id PO5FDKmsJRUf96te for ; Wed, 08 Apr 2009 00:07:28 -0700 (PDT) Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 4ABA717008E; Wed, 8 Apr 2009 15:52:01 +0800 (CST) Received: from fnst.cn.fujitsu.com (localhost.localdomain [127.0.0.1]) by tang.cn.fujitsu.com (8.13.1/8.13.1) with ESMTP id n387BKKO028942; Wed, 8 Apr 2009 15:11:20 +0800 Received: from localhost.localdomain (unknown [10.167.141.140]) by fnst.cn.fujitsu.com (Postfix) with ESMTPA id 784E2290E10; Wed, 8 Apr 2009 15:12:31 +0800 (CST) Message-ID: <49DC4D54.3020001@cn.fujitsu.com> Date: Wed, 08 Apr 2009 15:08:04 +0800 From: Li Zefan User-Agent: Thunderbird 2.0.0.9 (X11/20071115) MIME-Version: 1.0 To: felixb@sgi.com CC: LKML , Andrew Morton , xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 4/6] xfs: use memdup_user() Subject: [PATCH 4/6] xfs: use memdup_user() References: <49DC4CC0.9050805@cn.fujitsu.com> In-Reply-To: <49DC4CC0.9050805@cn.fujitsu.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1239174469 X-Barracuda-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, BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22567 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Remove open-coded memdup_user() Signed-off-by: Li Zefan --- fs/xfs/linux-2.6/xfs_ioctl.c | 23 +++++++---------------- fs/xfs/linux-2.6/xfs_ioctl32.c | 12 ++++-------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index d0b4994..34eaab6 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c @@ -489,17 +489,12 @@ xfs_attrmulti_attr_set( if (len > XATTR_SIZE_MAX) return EINVAL; - kbuf = kmalloc(len, GFP_KERNEL); - if (!kbuf) - return ENOMEM; - - if (copy_from_user(kbuf, ubuf, len)) - goto out_kfree; + kbuf = memdup_user(ubuf, len); + if (IS_ERR(kbuf)) + return PTR_ERR(kbuf); error = xfs_attr_set(XFS_I(inode), name, kbuf, len, flags); - out_kfree: - kfree(kbuf); return error; } @@ -540,20 +535,16 @@ xfs_attrmulti_by_handle( if (!size || size > 16 * PAGE_SIZE) goto out_dput; - error = ENOMEM; - ops = kmalloc(size, GFP_KERNEL); - if (!ops) + ops = memdup_user(am_hreq.ops, size); + if (IS_ERR(ops)) { + error = PTR_ERR(ops); goto out_dput; - - error = EFAULT; - if (copy_from_user(ops, am_hreq.ops, size)) - goto out_kfree_ops; + } attr_name = kmalloc(MAXNAMELEN, GFP_KERNEL); if (!attr_name) goto out_kfree_ops; - error = 0; for (i = 0; i < am_hreq.opcount; i++) { ops[i].am_error = strncpy_from_user(attr_name, diff --git a/fs/xfs/linux-2.6/xfs_ioctl32.c b/fs/xfs/linux-2.6/xfs_ioctl32.c index c70c4e3..0882d16 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl32.c +++ b/fs/xfs/linux-2.6/xfs_ioctl32.c @@ -427,20 +427,16 @@ xfs_compat_attrmulti_by_handle( if (!size || size > 16 * PAGE_SIZE) goto out_dput; - error = ENOMEM; - ops = kmalloc(size, GFP_KERNEL); - if (!ops) + ops = memdup_user(compat_ptr(am_hreq.ops), size); + if (IS_ERR(ops)) { + error = PTR_ERR(ops); goto out_dput; - - error = EFAULT; - if (copy_from_user(ops, compat_ptr(am_hreq.ops), size)) - goto out_kfree_ops; + } attr_name = kmalloc(MAXNAMELEN, GFP_KERNEL); if (!attr_name) goto out_kfree_ops; - error = 0; for (i = 0; i < am_hreq.opcount; i++) { ops[i].am_error = strncpy_from_user(attr_name, -- 1.5.4.rc3 From MAILER-DAEMON@oss.sgi.com Wed Apr 8 04:32:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=ANY_BOUNCE_MESSAGE,AWL, BAYES_00,URIBL_PH_SURBL,VBOUNCE_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n389WKMb080545 for ; Wed, 8 Apr 2009 04:32:25 -0500 X-ASG-Debug-ID: 1239183100-379101040000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from omr-m25.mx.aol.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CFCF11F96DC for ; Wed, 8 Apr 2009 02:31:40 -0700 (PDT) Received: from omr-m25.mx.aol.com (omr-m25.mx.aol.com [64.12.136.133]) by cuda.sgi.com with ESMTP id JRZ2xfBUU80fxVEG for ; Wed, 08 Apr 2009 02:31:40 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from rly-de10.mx.aol.com (rly-de10.mx.aol.com [205.188.249.86]) by omr-m25.mx.aol.com (v117.7) with ESMTP id MAILOMRM253-7e1449dc6ef6147; Wed, 08 Apr 2009 05:31:34 -0400 Received: from localhost (localhost) by rly-de10.mx.aol.com (8.14.1/8.14.1) id n389VT48016275; Wed, 8 Apr 2009 05:31:34 -0400 Date: Wed, 8 Apr 2009 05:31:34 -0400 From: Mail Delivery Subsystem Message-Id: <200904080931.n389VT48016275@rly-de10.mx.aol.com> To: MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="n389VT48016275.1239183094/rly-de10.mx.aol.com" X-ASG-Orig-Subj: Returned mail: see transcript for details Subject: Returned mail: see transcript for details Auto-Submitted: auto-generated (failure) X-AOL-INRLY: ctb-mesg-1-1.saix.net [196.25.240.79] rly-de10 X-AOL-IP: 205.188.249.86 X-Barracuda-Connect: omr-m25.mx.aol.com[64.12.136.133] X-Barracuda-Start-Time: 1239183120 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a MIME-encapsulated message --n389VT48016275.1239183094/rly-de10.mx.aol.com The original message was received at Wed, 8 Apr 2009 05:31:14 -0400 from ctb-mesg-1-1.saix.net [196.25.240.79] *** ATTENTION *** Your e-mail is being returned to you because there was a problem with its delivery. The address which was undeliverable is listed in the section labeled: "----- The following addresses had permanent fatal errors -----". The reason your mail is being returned to you is listed in the section labeled: "----- Transcript of Session Follows -----". The line beginning with "<<<" describes the specific reason your e-mail could not be delivered. The next line contains a second error message which is a general translation for other e-mail servers. Please direct further questions regarding this message to your e-mail administrator. --AOL Postmaster ----- The following addresses had permanent fatal errors ----- (reason: 554 TRANSACTION FAILED - Unrepairable Virus Detected. Your mail has not been sent.) ----- Transcript of session follows ----- ... while talking to air-de01.mail.aol.com.: >>> DATA <<< 554 TRANSACTION FAILED - Unrepairable Virus Detected. Your mail has not been sent. 554 5.0.0 Service unavailable --n389VT48016275.1239183094/rly-de10.mx.aol.com Content-Type: message/delivery-status Reporting-MTA: dns; rly-de10.mx.aol.com Arrival-Date: Wed, 8 Apr 2009 05:31:14 -0400 Final-Recipient: RFC822; ksamra@aol.com Action: failed Status: 5.0.0 Remote-MTA: DNS; air-de01.mail.aol.com Diagnostic-Code: SMTP; 554 TRANSACTION FAILED - Unrepairable Virus Detected. Your mail has not been sent. Last-Attempt-Date: Wed, 8 Apr 2009 05:31:34 -0400 --n389VT48016275.1239183094/rly-de10.mx.aol.com Content-Type: text/rfc822-headers Received: from ctb-mesg-1-1.saix.net (ctb-mesg-1-1.saix.net [196.25.240.79]) by rly-de10.mx.aol.com (v123.4) with ESMTP id MAILRELAYINDE101-50649dc6ee0275; Wed, 08 Apr 2009 05:31:13 -0400 Received: from oss.sgi.com (dsl-145-16-113.telkomadsl.co.za [165.145.16.113]) by ctb-mesg-1-1.saix.net (Postfix) with ESMTP id 250A62A222 for ; Wed, 8 Apr 2009 11:34:45 +0200 (SAST) From: xfs@oss.sgi.com To: ksamra@aol.com Subject: Returned mail: see transcript for details Date: Wed, 8 Apr 2009 11:24:17 +0200 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0014_F8720032.0217B85C" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2600.0000 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 Message-Id: <20090408093447.250A62A222@ctb-mesg-1-1.saix.net> X-AOL-IP: 196.25.240.79 X-AOL-SCOLL-SCORE:0:2:295954496:93952408 X-AOL-SCOLL-URL_COUNT:0 --n389VT48016275.1239183094/rly-de10.mx.aol.com-- From BATV+65849a2756afd0739cf0+2054+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 8 08:24:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_73 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38DNYZx091757 for ; Wed, 8 Apr 2009 08:23:50 -0500 X-ASG-Debug-ID: 1239196974-787800e90000-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 3FB2A1CA593A; Wed, 8 Apr 2009 06:22:54 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 98JwgwWrxRCvk863; Wed, 08 Apr 2009 06:22:54 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LrXjy-0006Mi-8P; Wed, 08 Apr 2009 13:22:54 +0000 Date: Wed, 8 Apr 2009 09:22:54 -0400 From: Christoph Hellwig To: Li Zefan Cc: felixb@sgi.com, Andrew Morton , LKML , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 4/6] xfs: use memdup_user() Subject: Re: [PATCH 4/6] xfs: use memdup_user() Message-ID: <20090408132254.GA5957@infradead.org> References: <49DC4CC0.9050805@cn.fujitsu.com> <49DC4D54.3020001@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49DC4D54.3020001@cn.fujitsu.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239196995 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 08, 2009 at 03:08:04PM +0800, Li Zefan wrote: > Remove open-coded memdup_user() > > Signed-off-by: Li Zefan > --- > fs/xfs/linux-2.6/xfs_ioctl.c | 23 +++++++---------------- > fs/xfs/linux-2.6/xfs_ioctl32.c | 12 ++++-------- > 2 files changed, 11 insertions(+), 24 deletions(-) > > diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c > index d0b4994..34eaab6 100644 > --- a/fs/xfs/linux-2.6/xfs_ioctl.c > +++ b/fs/xfs/linux-2.6/xfs_ioctl.c > @@ -489,17 +489,12 @@ xfs_attrmulti_attr_set( > if (len > XATTR_SIZE_MAX) > return EINVAL; > > - kbuf = kmalloc(len, GFP_KERNEL); > - if (!kbuf) > - return ENOMEM; > - > - if (copy_from_user(kbuf, ubuf, len)) > - goto out_kfree; > + kbuf = memdup_user(ubuf, len); > + if (IS_ERR(kbuf)) > + return PTR_ERR(kbuf); wouldn't NULL be a better error return for this kind of interface, matching kmalloc? Otherwise the patch looks good to me. Reviewed-by: Christoph Hellwig From BATV+65849a2756afd0739cf0+2054+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 8 08:34:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38DYAVm092220 for ; Wed, 8 Apr 2009 08:34:25 -0500 X-ASG-Debug-ID: 1239197630-7858011f0000-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 22E8F1CA4ADB; Wed, 8 Apr 2009 06:33:51 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id LMYmZWmAaJL4W71A; Wed, 08 Apr 2009 06:33:51 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LrXuY-000579-QT; Wed, 08 Apr 2009 13:33:50 +0000 Date: Wed, 8 Apr 2009 09:33:50 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 0/2, RESEND] [XFS] a couple of fixes Subject: Re: [PATCH 0/2, RESEND] [XFS] a couple of fixes Message-ID: <20090408133350.GA12013@infradead.org> References: <1237116342-25701-1-git-send-email-david@fromorbit.com> <20090406222831.GA12016@infradead.org> <09C35383-EA8E-4EC2-A067-B3FA327AFF4C@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <09C35383-EA8E-4EC2-A067-B3FA327AFF4C@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239197631 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 07, 2009 at 11:45:33PM -0500, Felix Blyakher wrote: > > On Apr 6, 2009, at 5:28 PM, Christoph Hellwig wrote: > >> I've sucked these patches into my tree after reviewin and QAing them. >> Felix, can you pull this and send it to Linus for 2.6.30? >> >> git://git.kernel.org/pub/scm/fs/xfs/xfs.git > > I did pull from your tree, and pushed to oss. > But I stopped short from pushing the for-linus branch, > and generating the pull request, as I'm again seeing > the 'merge' commits. I'll try to sort it out tomorrow. Note that you will always see some merge commits of both merged trees touched the same files. What Linus objected was the large amount of merge commits. The way to bring them down is to simply do less merges, just stay on the same mainline level for a longer time and only merge with mainline short before you prepare a pull or when you really need it due to conflicting changes making it in. From rdreier@cisco.com Wed Apr 8 12:33:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38HXJKt107706 for ; Wed, 8 Apr 2009 12:33:29 -0500 X-ASG-Debug-ID: 1239212050-1d4600a00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from sj-iport-3.cisco.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D65C2140656D for ; Wed, 8 Apr 2009 10:34:10 -0700 (PDT) Received: from sj-iport-3.cisco.com (sj-iport-3.cisco.com [171.71.176.72]) by cuda.sgi.com with ESMTP id ZSEDhQXTUjirZgm0 for ; Wed, 08 Apr 2009 10:34:10 -0700 (PDT) X-IronPort-AV: E=Sophos;i="4.39,345,1235952000"; d="scan'208";a="151695606" Received: from syd-dkim-1.cisco.com ([64.104.193.116]) by sj-iport-3.cisco.com with ESMTP; 08 Apr 2009 17:31:27 +0000 Received: from sj-core-5.cisco.com (sj-core-5.cisco.com [171.71.177.238]) by syd-dkim-1.cisco.com (8.12.11/8.12.11) with ESMTP id n38HVQLd032728; Thu, 9 Apr 2009 03:31:26 +1000 Received: from xbh-sjc-221.amer.cisco.com (xbh-sjc-221.cisco.com [128.107.191.63]) by sj-core-5.cisco.com (8.13.8/8.13.8) with ESMTP id n38HVPZL010988; Wed, 8 Apr 2009 17:31:25 GMT Received: from xfe-sjc-212.amer.cisco.com ([171.70.151.187]) by xbh-sjc-221.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 8 Apr 2009 10:31:25 -0700 Received: from roland-conroe ([10.33.42.9]) by xfe-sjc-212.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 8 Apr 2009 10:31:25 -0700 Received: by roland-conroe (Postfix, from userid 33217) id 3F148E7207; Wed, 8 Apr 2009 10:31:25 -0700 (PDT) From: Roland Dreier To: Christoph Hellwig Cc: Li Zefan , felixb@sgi.com, Andrew Morton , LKML , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 4/6] xfs: use memdup_user() Subject: Re: [PATCH 4/6] xfs: use memdup_user() References: <49DC4CC0.9050805@cn.fujitsu.com> <49DC4D54.3020001@cn.fujitsu.com> <20090408132254.GA5957@infradead.org> X-Message-Flag: Warning: May contain useful information Date: Wed, 08 Apr 2009 10:31:25 -0700 In-Reply-To: <20090408132254.GA5957@infradead.org> (Christoph Hellwig's message of "Wed, 8 Apr 2009 09:22:54 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-OriginalArrivalTime: 08 Apr 2009 17:31:25.0424 (UTC) FILETIME=[D790C700:01C9B86F] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; l=301; t=1239211886; x=1240075886; c=relaxed/simple; s=syddkim1002; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version; d=cisco.com; i=rdreier@cisco.com; z=From:=20Roland=20Dreier=20 |Subject:=20Re=3A=20[PATCH=204/6]=20xfs=3A=20use=20memdup_u ser() |Sender:=20; bh=D9O1kDG8ifNkpuUOdMD/LKAg7MKrXL3IQfI1o3uCciI=; b=wV4bTr0y1fTAUlhuM1UM0U1erQTGUUV/7CgPQrRnF+c/avWBHSKTD4scA+ OrpIiZE3yei0lt2fSxwi/NYuh027pWxv+q/qsZWqne1CGbsAh6y7oMGhaDsK 6LtkD55uAcKWTJlfKHATyQUzoNkphUbZJxAvxixh0CS/4ece9/gag=; Authentication-Results: syd-dkim-1; header.From=rdreier@cisco.com; dkim=pass ( sig from cisco.com/syddkim1002 verified; ); X-Barracuda-Connect: sj-iport-3.cisco.com[171.71.176.72] X-Barracuda-Start-Time: 1239212071 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22608 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean > wouldn't NULL be a better error return for this kind of interface, > matching kmalloc? I guess returning an error code from memdup_user() lets callers distinguish between ENOMEM and EFAULT. Not sure if that's important or not but there probably are at least some sites that care. - R. From felixb@sgi.com Wed Apr 8 13:58:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38IwCL2112117 for ; Wed, 8 Apr 2009 13:58:22 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 0F1BD3040C0 for ; Wed, 8 Apr 2009 11:57:53 -0700 (PDT) Received: from eagdhcp-232-161.americas.sgi.com (eagdhcp-232-161.americas.sgi.com [128.162.232.161]) by estes.americas.sgi.com (Postfix) with ESMTP id ED4A87000103; Wed, 8 Apr 2009 13:47:08 -0500 (CDT) Cc: xfs-oss Message-Id: <578FD09C-C517-48C8-9299-7EB805D8337B@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <49CE3A1A.9020103@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: xfstests license clarification? Date: Wed, 8 Apr 2009 13:47:08 -0500 References: <49CE3A1A.9020103@sandeen.net> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mar 28, 2009, at 9:54 AM, Eric Sandeen wrote: > Since most of the scripts themselves in xfstests make no mention of > redistribution, and only say "copyright sgi, all rights reserved" etc: > > #----------------------------------------------------------------------- > # Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. > #----------------------------------------------------------------------- > > do we need to do anything in terms of making this look more like Free > Software (assuming that's the intent?) Yes, it was intent. And it's OK to add the GPL license blob there. Can't speak for non sgi files. Felix > It might be a rats-nest, there are a several testcases in src/ gleaned > from mailing lists & bugs with little or no attribution; OTOH maybe > this > stuff is trivial enough that it doesn't warrant copyright, I dunno. > > Is it worth trying to clarify the license on the collection, or is > this > just a can of worms? > > -Eric > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Wed Apr 8 15:34:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_73 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n38KYKpR126261 for ; Wed, 8 Apr 2009 15:34:30 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3433DAC001 for ; Wed, 8 Apr 2009 13:34:01 -0700 (PDT) Received: from eagdhcp-232-161.americas.sgi.com (eagdhcp-232-161.americas.sgi.com [128.162.232.161]) by estes.americas.sgi.com (Postfix) with ESMTP id 0609A7000103; Wed, 8 Apr 2009 15:06:41 -0500 (CDT) Cc: Li Zefan , Andrew Morton , LKML , xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090408132254.GA5957@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 4/6] xfs: use memdup_user() Date: Wed, 8 Apr 2009 15:06:40 -0500 References: <49DC4CC0.9050805@cn.fujitsu.com> <49DC4D54.3020001@cn.fujitsu.com> <20090408132254.GA5957@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 8, 2009, at 8:22 AM, Christoph Hellwig wrote: > On Wed, Apr 08, 2009 at 03:08:04PM +0800, Li Zefan wrote: >> Remove open-coded memdup_user() >> >> Signed-off-by: Li Zefan >> --- >> fs/xfs/linux-2.6/xfs_ioctl.c | 23 +++++++---------------- >> fs/xfs/linux-2.6/xfs_ioctl32.c | 12 ++++-------- >> 2 files changed, 11 insertions(+), 24 deletions(-) >> >> diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/ >> xfs_ioctl.c >> index d0b4994..34eaab6 100644 >> --- a/fs/xfs/linux-2.6/xfs_ioctl.c >> +++ b/fs/xfs/linux-2.6/xfs_ioctl.c >> @@ -489,17 +489,12 @@ xfs_attrmulti_attr_set( >> if (len > XATTR_SIZE_MAX) >> return EINVAL; >> >> - kbuf = kmalloc(len, GFP_KERNEL); >> - if (!kbuf) >> - return ENOMEM; >> - >> - if (copy_from_user(kbuf, ubuf, len)) >> - goto out_kfree; >> + kbuf = memdup_user(ubuf, len); >> + if (IS_ERR(kbuf)) >> + return PTR_ERR(kbuf); > > wouldn't NULL be a better error return for this kind of interface, > matching kmalloc? > > > Otherwise the patch looks good to me. > > Reviewed-by: Christoph Hellwig Looks good to me too. Reviewed-by: Felix Blyakher p.s. Replying to reply as I couldn't find the original post. From lizf@cn.fujitsu.com Wed Apr 8 19:43:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n390hW1F140961 for ; Wed, 8 Apr 2009 19:43:42 -0500 X-ASG-Debug-ID: 1239237771-470701790000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from song.cn.fujitsu.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id AD70D1CA8BDE for ; Wed, 8 Apr 2009 17:42:51 -0700 (PDT) Received: from song.cn.fujitsu.com (cn.fujitsu.com [222.73.24.84]) by cuda.sgi.com with ESMTP id oWECQrkUtJ4zB3TZ for ; Wed, 08 Apr 2009 17:42:51 -0700 (PDT) Received: from tang.cn.fujitsu.com (tang.cn.fujitsu.com [10.167.250.3]) by song.cn.fujitsu.com (Postfix) with ESMTP id 9B074170130; Thu, 9 Apr 2009 09:28:00 +0800 (CST) Received: from fnst.cn.fujitsu.com (localhost.localdomain [127.0.0.1]) by tang.cn.fujitsu.com (8.13.1/8.13.1) with ESMTP id n390hMXl011735; Thu, 9 Apr 2009 08:43:22 +0800 Received: from localhost.localdomain (unknown [10.167.141.140]) by fnst.cn.fujitsu.com (Postfix) with ESMTPA id A5179292C8E; Thu, 9 Apr 2009 08:48:04 +0800 (CST) Message-ID: <49DD44B5.9040702@cn.fujitsu.com> Date: Thu, 09 Apr 2009 08:43:33 +0800 From: Li Zefan User-Agent: Thunderbird 2.0.0.9 (X11/20071115) MIME-Version: 1.0 To: Roland Dreier CC: Christoph Hellwig , felixb@sgi.com, Andrew Morton , LKML , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 4/6] xfs: use memdup_user() Subject: Re: [PATCH 4/6] xfs: use memdup_user() References: <49DC4CC0.9050805@cn.fujitsu.com> <49DC4D54.3020001@cn.fujitsu.com> <20090408132254.GA5957@infradead.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cn.fujitsu.com[222.73.24.84] X-Barracuda-Start-Time: 1239237792 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22636 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Roland Dreier wrote: > > wouldn't NULL be a better error return for this kind of interface, > > matching kmalloc? > > I guess returning an error code from memdup_user() lets callers > distinguish between ENOMEM and EFAULT. Not sure if that's important or > not but there probably are at least some sites that care. > Right, and this API is simlilar to strndup_user(). From vegard.nossum@gmail.com Thu Apr 9 09:08:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39E81EQ248006 for ; Thu, 9 Apr 2009 09:08:12 -0500 X-ASG-Debug-ID: 1239286061-61b100be0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f177.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4B9DB200554 for ; Thu, 9 Apr 2009 07:07:41 -0700 (PDT) Received: from mail-fx0-f177.google.com (mail-fx0-f177.google.com [209.85.220.177]) by cuda.sgi.com with ESMTP id bkVMeGeAqQfD8Ju0 for ; Thu, 09 Apr 2009 07:07:41 -0700 (PDT) Received: by fxm25 with SMTP id 25so629149fxm.20 for ; Thu, 09 Apr 2009 07:07:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type; bh=Qj2473DTmZQK6hUpzQlYjnpTFWHdzpP0LzoiPUQRrXs=; b=DYss9nYD8Hq2ee72BgW05Gqe1hycKai2vz7B3u1cVzWXktKVmmcyJfdPU5ryCId6T4 hxsBUT0DIvmNJPptFTN6kqFtgvUwQVeRtDiJoOQD4epxm20o11MvSqfvIoG+8YtxsYir dDe/rZHU24z93oGdPysnbKOatMIh6iZEr2IcE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=W5HSKjAjQOhPSJISml9DvtpAtXTXgCX/Tfu6E44DPRyjqAJfclRjZ77t51+/Nr2B6Z 1UUoFi+akrYJO+46JPYq97bCc1RB1MVYfDnMNW2gpcPuBs53f/Gd59qG5nLWOKnCpkTt Ed/Ssi8aMnP/4+cyLmfpfAttQgSXsB8RAGJQ8= MIME-Version: 1.0 Received: by 10.204.59.65 with SMTP id k1mr2231978bkh.174.1239286060639; Thu, 09 Apr 2009 07:07:40 -0700 (PDT) In-Reply-To: <200903301936.08477.cova@ferrara.linux.it> References: <200903301936.08477.cova@ferrara.linux.it> Date: Thu, 9 Apr 2009 16:07:40 +0200 Message-ID: <19f34abd0904090707v7eb8b677gbda42595aa04a090@mail.gmail.com> X-ASG-Orig-Subj: Re: [BUG] spinlock lockup on CPU#0 Subject: Re: [BUG] spinlock lockup on CPU#0 From: Vegard Nossum To: Fabio Coatti Cc: Felix Blyakher , xfs@oss.sgi.com, linux-kernel@vger.kernel.org Content-Type: multipart/mixed; boundary=001636c5b0546b679804671fc55a X-Barracuda-Connect: mail-fx0-f177.google.com[209.85.220.177] X-Barracuda-Start-Time: 1239286062 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22690 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --001636c5b0546b679804671fc55a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable 2009/3/30 Fabio Coatti : > Hi all, I've got the following BUG: report on one of our servers running > 2.6.28.8; some background: > we are seeing several lockups in db (mysql) servers that shows up as a su= dden > load increase and then, very quickly, the server freezes. It happens in a > random way, sometimes after weeks, sometimes very quickly after a system > reboot. Trying to discover the problem we installed latest (at the time o= f > test) 2.6.28.X kernel and loaded it with some high disk I/O operations (f= ind, > dd, rsync and so on). > We have been able =C2=A0to crash a server with these tests; unfortunately= we have > been able to capture only a remote screen snapshot so I copied by hand > (hopefully without typos) the data and this is the result is the followin= g: Hi, Thanks for the report. > > =C2=A0[] ? default_idle+0x30/0x50 > =C2=A0[] ? default_idle+0x2e/0x50 > =C2=A0[] ? c1e_idle+0x73/0x120 > =C2=A0[] ? atomic_notifier_call_chain+0x11/0x20 > =C2=A0[] ? cpu_idle+0x3f/0x70 > BUG: spinlock lockup on CPU#0, find/13114, ffff8801363d2c80 > Pid: 13114, comm: find Tainted: G =C2=A0 =C2=A0 =C2=A0D W =C2=A02.6.28.8 = #5 > Call Trace: > =C2=A0[] _raw_spin_lock+0x14e/0x180 > =C2=A0[] _spin_lock+0x51/0x70 > =C2=A0[] ? task_rq_lock+0x54/0xa0 > =C2=A0[] task_rq_lock+0x54/0xa0 > =C2=A0[] try_to_wake_up+0x91/0x280 > =C2=A0[] wake_up_process+0x10/0x20 > =C2=A0[] xfsbufd_wakeup+0x53/0x70 > =C2=A0[] shrink_slab+0x90/0x180 > =C2=A0[] try_to_free_pages+0x256/0x3a0 > =C2=A0[] ? isolate_pages_global+0x0/0x280 > =C2=A0[] __alloc_pages_internal+0x1b6/0x460 > =C2=A0[] alloc_page_vma+0x6d/0x110 > =C2=A0[] handle_mm_fault+0x4ab/0x790 > =C2=A0[] do_page_fault+0x463/0x870 > =C2=A0[] ? trace_hardirqs_off_thunk+0x3a/0x3c > =C2=A0[] error_exit+0x0/0xa9 Seems like you hit this: /* * This could deadlock. * * But until all the XFS lowlevel code is revamped to * handle buffer allocation failures we can't do much. */ if (!(++retries % 100)) printk(KERN_ERR "XFS: possible memory allocation " "deadlock in %s (mode:0x%x)\n", __func__, gfp_mask); XFS_STATS_INC(xb_page_retries); xfsbufd_wakeup(0, gfp_mask); congestion_wait(WRITE, HZ/50); goto retry; ...so my guess is that you ran out of memory (and XFS simply can't handle it -- an error in the XFS code, of course). My first tip, if you simply want your servers not to crash, is to switch to another filesystem. You could at least try it and see if it helps your problem -- that's the most straight-forward solution I can think of. > > The machine is a dual 2216HE (2 cores) AMD with 4 Gb ram; below you can f= ind > the .config file. (from /proc/config.gz) > > we are seeing similar lockups (at least similar for the results) since se= veral > kernel revisions (starting from 2.6.25.X) and on different hardware. Seve= ral > machines are hit by this, mostly databases (maybe for the specific usage,= other > machines being apache servers, I don't know). > > Could someone give us some hints about this issue, or at least some > suggestions on how to dig it? Of course we can do any sort of testing and > tries. You _could_ also try something like the attached patch. It's completely untested, and could lead to data loss (depending on whether the callers of this function expects/handles the error condition gracefully). I really have no idea. If you try, be sure to back up your data first. Good luck :-) (It could also be something else entirely, but I think the stack trace looks suspicious enough.) Vegard --=20 "The animistic metaphor of the bug that maliciously sneaked in while the programmer was not looking is intellectually dishonest as it disguises that the error is the programmer's own creation." -- E. W. Dijkstra, EWD1036 --001636c5b0546b679804671fc55a Content-Type: application/octet-stream; name="xfs-deadlock.patch" Content-Disposition: attachment; filename="xfs-deadlock.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ftbiul9b1 ZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jIGIvZnMveGZzL2xpbnV4LTIu Ni94ZnNfYnVmLmMKaW5kZXggYWExMDE2Yi4uYjc5ZTcyNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xp bnV4LTIuNi94ZnNfYnVmLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmMKQEAgLTM5 MCwyOSArMzkwLDEzIEBAIF94ZnNfYnVmX2xvb2t1cF9wYWdlcygKIAkgICAgICByZXRyeToKIAkJ cGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgZmlyc3QgKyBpLCBnZnBfbWFzayk7 CiAJCWlmICh1bmxpa2VseShwYWdlID09IE5VTEwpKSB7Ci0JCQlpZiAoZmxhZ3MgJiBYQkZfUkVB RF9BSEVBRCkgewotCQkJCWJwLT5iX3BhZ2VfY291bnQgPSBpOwotCQkJCWZvciAoaSA9IDA7IGkg PCBicC0+Yl9wYWdlX2NvdW50OyBpKyspCi0JCQkJCXVubG9ja19wYWdlKGJwLT5iX3BhZ2VzW2ld KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KKwkJCXByaW50ayhLRVJOX0VNRVJHICJYRlMg Y291bGRuJ3QgZmluZF9vcl9jcmVhdGVfcGFnZSgpXG4iKTsKKwkJCVdBUk5fT05fT05DRSgxKTsK IAotCQkJLyoKLQkJCSAqIFRoaXMgY291bGQgZGVhZGxvY2suCi0JCQkgKgotCQkJICogQnV0IHVu dGlsIGFsbCB0aGUgWEZTIGxvd2xldmVsIGNvZGUgaXMgcmV2YW1wZWQgdG8KLQkJCSAqIGhhbmRs ZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyB3ZSBjYW4ndCBkbyBtdWNoLgotCQkJICovCi0J CQlpZiAoISgrK3JldHJpZXMgJSAxMDApKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiWEZT OiBwb3NzaWJsZSBtZW1vcnkgYWxsb2NhdGlvbiAiCi0JCQkJCSJkZWFkbG9jayBpbiAlcyAobW9k ZToweCV4KVxuIiwKLQkJCQkJX19mdW5jX18sIGdmcF9tYXNrKTsKLQotCQkJWEZTX1NUQVRTX0lO Qyh4Yl9wYWdlX3JldHJpZXMpOwotCQkJeGZzYnVmZF93YWtldXAoMCwgZ2ZwX21hc2spOwotCQkJ Y29uZ2VzdGlvbl93YWl0KFdSSVRFLCBIWi81MCk7Ci0JCQlnb3RvIHJldHJ5OworCQkJYnAtPmJf cGFnZV9jb3VudCA9IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsr KQorCQkJCXVubG9ja19wYWdlKGJwLT5iX3BhZ2VzW2ldKTsKKwkJCXJldHVybiAtRU5PTUVNOwog CQl9CiAKIAkJWEZTX1NUQVRTX0lOQyh4Yl9wYWdlX2ZvdW5kKTsK --001636c5b0546b679804671fc55a-- From vegard.nossum@gmail.com Thu Apr 9 09:22:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39EMSnk249030 for ; Thu, 9 Apr 2009 09:22:38 -0500 X-ASG-Debug-ID: 1239286908-52ab014d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-fx0-f177.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 62EB11CAB14B for ; Thu, 9 Apr 2009 07:21:48 -0700 (PDT) Received: from mail-fx0-f177.google.com (mail-fx0-f177.google.com [209.85.220.177]) by cuda.sgi.com with ESMTP id tIqhOLCw3rQ37Lcd for ; Thu, 09 Apr 2009 07:21:48 -0700 (PDT) Received: by fxm25 with SMTP id 25so635314fxm.20 for ; Thu, 09 Apr 2009 07:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=uGIFusYmNceBiz3Vn3dTLRz1lgLMhjqu4IQtuYR+xMU=; b=l9oaVcYtaC47Wd0rwfQFeQbsilxuHUvIBRW8jAL/A62bQSKfq8cR/HJbWzLSaBrCOM M9QOcNVr22in05aqjQ2xi47HKWRawAdX72SFRHd0j+V7TUlNk5Oiapc4SMaNiqBdsW+m L2noYTZmTEjTjMyUqIdi8gCqTvya65ConbA90= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=q/5RAAg34sxyHan/Qy1gPIsLYOGCCNC7VKWCD1B7DvrsTJppkmgIVmsWBZs67mFA72 MxdbRK+N6lZEAD+58WfP7KtZt/AVgzLn6tBYrkq+MpCI2+ouHBZdeB9VbHMRODa+GcGg H03QYpbt80VHgTRiGHgssqzjEmZAXyOQRQc3k= MIME-Version: 1.0 Received: by 10.204.53.1 with SMTP id k1mr2272662bkg.50.1239286907751; Thu, 09 Apr 2009 07:21:47 -0700 (PDT) In-Reply-To: <19f34abd0904090707v7eb8b677gbda42595aa04a090@mail.gmail.com> References: <200903301936.08477.cova@ferrara.linux.it> <19f34abd0904090707v7eb8b677gbda42595aa04a090@mail.gmail.com> Date: Thu, 9 Apr 2009 16:21:47 +0200 Message-ID: <19f34abd0904090721i1e2976dbka7780cb09319c531@mail.gmail.com> X-ASG-Orig-Subj: Re: [BUG] spinlock lockup on CPU#0 Subject: Re: [BUG] spinlock lockup on CPU#0 From: Vegard Nossum To: Fabio Coatti Cc: Felix Blyakher , xfs@oss.sgi.com, linux-kernel@vger.kernel.org Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: mail-fx0-f177.google.com[209.85.220.177] X-Barracuda-Start-Time: 1239286929 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22692 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/4/9 Vegard Nossum : > 2009/3/30 Fabio Coatti : >> Hi all, I've got the following BUG: report on one of our servers running >> 2.6.28.8; some background: >> we are seeing several lockups in db (mysql) servers that shows up as a sudden >> load increase and then, very quickly, the server freezes. It happens in a >> random way, sometimes after weeks, sometimes very quickly after a system >> reboot. Trying to discover the problem we installed latest (at the time of >> test) 2.6.28.X kernel and loaded it with some high disk I/O operations (find, >> dd, rsync and so on). [...] >> Could someone give us some hints about this issue, or at least some >> suggestions on how to dig it? Of course we can do any sort of testing and >> tries. > > You _could_ also try something like the attached patch. It's > completely untested, and could lead to data loss (depending on whether > the callers of this function expects/handles the error condition > gracefully). I really have no idea. If you try, be sure to back up > your data first. Good luck :-) Actually, I think you can forget about this patch. At least that's not the point of problem in the stack-trace you posted. (My suggestion of trying a different filesystem still holds, though.) :-/ Vegard -- "The animistic metaphor of the bug that maliciously sneaked in while the programmer was not looking is intellectually dishonest as it disguises that the error is the programmer's own creation." -- E. W. Dijkstra, EWD1036 From sandeen@sandeen.net Thu Apr 9 10:28:20 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39FRxch255482 for ; Thu, 9 Apr 2009 10:28:10 -0500 X-ASG-Debug-ID: 1239290859-61b301db0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B65332009ED for ; Thu, 9 Apr 2009 08:27:39 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id oa9B17PvBrJDJhu8 for ; Thu, 09 Apr 2009 08:27: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 mail.sandeen.net (Postfix) with ESMTP id BC0C8A9B0A5; Thu, 9 Apr 2009 10:27:37 -0500 (CDT) Message-ID: <49DE13E9.6040605@sandeen.net> Date: Thu, 09 Apr 2009 10:27:37 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Vegard Nossum CC: Fabio Coatti , linux-kernel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [BUG] spinlock lockup on CPU#0 Subject: Re: [BUG] spinlock lockup on CPU#0 References: <200903301936.08477.cova@ferrara.linux.it> <19f34abd0904090707v7eb8b677gbda42595aa04a090@mail.gmail.com> In-Reply-To: <19f34abd0904090707v7eb8b677gbda42595aa04a090@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1239290859 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22696 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Vegard Nossum wrote: > 2009/3/30 Fabio Coatti : >> Hi all, I've got the following BUG: report on one of our servers running >> 2.6.28.8; some background: >> we are seeing several lockups in db (mysql) servers that shows up as a sudden >> load increase and then, very quickly, the server freezes. It happens in a >> random way, sometimes after weeks, sometimes very quickly after a system >> reboot. Trying to discover the problem we installed latest (at the time of >> test) 2.6.28.X kernel and loaded it with some high disk I/O operations (find, >> dd, rsync and so on). >> We have been able to crash a server with these tests; unfortunately we have >> been able to capture only a remote screen snapshot so I copied by hand >> (hopefully without typos) the data and this is the result is the following: > > Hi, > > Thanks for the report. > >> [] ? default_idle+0x30/0x50 >> [] ? default_idle+0x2e/0x50 >> [] ? c1e_idle+0x73/0x120 >> [] ? atomic_notifier_call_chain+0x11/0x20 >> [] ? cpu_idle+0x3f/0x70 >> BUG: spinlock lockup on CPU#0, find/13114, ffff8801363d2c80 >> Pid: 13114, comm: find Tainted: G D W 2.6.28.8 #5 >> Call Trace: >> [] _raw_spin_lock+0x14e/0x180 >> [] _spin_lock+0x51/0x70 >> [] ? task_rq_lock+0x54/0xa0 >> [] task_rq_lock+0x54/0xa0 >> [] try_to_wake_up+0x91/0x280 >> [] wake_up_process+0x10/0x20 >> [] xfsbufd_wakeup+0x53/0x70 >> [] shrink_slab+0x90/0x180 >> [] try_to_free_pages+0x256/0x3a0 >> [] ? isolate_pages_global+0x0/0x280 >> [] __alloc_pages_internal+0x1b6/0x460 >> [] alloc_page_vma+0x6d/0x110 >> [] handle_mm_fault+0x4ab/0x790 >> [] do_page_fault+0x463/0x870 >> [] ? trace_hardirqs_off_thunk+0x3a/0x3c >> [] error_exit+0x0/0xa9 > > Seems like you hit this: In _xfs_buf_lookup_pages? that's not on the stack, and we didn't see the below printk... > /* > * This could deadlock. > * > * But until all the XFS lowlevel code is revamped to > * handle buffer allocation failures we can't do much. > */ > if (!(++retries % 100)) > printk(KERN_ERR > "XFS: possible memory allocation " > "deadlock in %s (mode:0x%x)\n", > __func__, gfp_mask); > ... so I don't think so. From the trace: >> [] xfsbufd_wakeup+0x53/0x70 >> [] shrink_slab+0x90/0x180 this is the shrinker kicking off: static struct shrinker xfs_buf_shake = { .shrink = xfsbufd_wakeup, .seeks = DEFAULT_SEEKS, }; > ...so my guess is that you ran out of memory (and XFS simply can't > handle it -- an error in the XFS code, of course). Wrong guess, I think. XFS has been called via the shrinker mechanisms to *free* memory, and we're not able to get the task rq lock in the wakeup path, but not sure why... > My first tip, if you simply want your servers not to crash, is to > switch to another filesystem. You could at least try it and see if it > helps your problem -- that's the most straight-forward solution I can > think of. > >> The machine is a dual 2216HE (2 cores) AMD with 4 Gb ram; below you can find >> the .config file. (from /proc/config.gz) >> >> we are seeing similar lockups (at least similar for the results) since several >> kernel revisions (starting from 2.6.25.X) and on different hardware. Several >> machines are hit by this, mostly databases (maybe for the specific usage, other >> machines being apache servers, I don't know). >> >> Could someone give us some hints about this issue, or at least some >> suggestions on how to dig it? Of course we can do any sort of testing and >> tries. If sysrq-t (show all running tasks) still works post-oops, capturing that might help to see where other threads are at. Hook up a serial console to make capturing the output possible. -Eric From BATV+351d8d974fdb4d06c7eb+2055+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 9 12:06:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39H5jac002338 for ; Thu, 9 Apr 2009 12:06:02 -0500 X-ASG-Debug-ID: 1239296706-7dd1015b0000-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 C88C61CAB777; Thu, 9 Apr 2009 10:05:06 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nFT5a9wcPpIgKYqm; Thu, 09 Apr 2009 10:05:06 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LrxgX-0005mC-89; Thu, 09 Apr 2009 17:05:05 +0000 Date: Thu, 9 Apr 2009 13:05:05 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [XFS updates] XFS development tree branch, master, updated. v2.6.28-rc3-20838-g5123bc3 Subject: Re: [XFS updates] XFS development tree branch, master, updated. v2.6.28-rc3-20838-g5123bc3 Message-ID: <20090409170505.GA6982@infradead.org> References: <200903310323.n2V3NoRK232157@oss.sgi.com> <20090331071124.GA12889@infradead.org> <730FBF20-6F2C-42FA-A19F-67F6C6279445@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <730FBF20-6F2C-42FA-A19F-67F6C6279445@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239296726 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Mar 31, 2009 at 07:59:19AM -0500, Felix Blyakher wrote: > It does, though it's not as severe as other disk format changes. > I don't have a final solution yet, but since it's already escaped > in public, I may as well show my current thinking, and invite > comments. > So, the older kernels would be able to mount and work with the > new filesystem, with exception of seeing only first 25 ACL > entries. The user may still would like to mount it as such > confirming that he aware of consequences. This feature validation > would not follow the current scheme of black and white. With > the presence of the force_mount (new) option, we emit a warning > and allow to mount. > Comments? We do need a on-disk feature flag, yes. And we can have a large-acl or similar mount option to automatically set that flag if we create a larger than existing number of acls. But if we are going to change this just upping the number of entires to another static value seems rather dumb, we should better make it completely dynamic. The only way why it's static is to be able to allocate the space for the acl upfront before the attr_get call. We can just try the 25 entry one first and if xfs_attr_get tells us it's too small try again with the correct value. From BATV+351d8d974fdb4d06c7eb+2055+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 9 12:12:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39HBspG002961 for ; Thu, 9 Apr 2009 12:12:09 -0500 X-ASG-Debug-ID: 1239297095-7d4800da0000-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 A10602015CC; Thu, 9 Apr 2009 10:11:35 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id F7VedlnzPCRdRroP; Thu, 09 Apr 2009 10:11:35 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lrxmp-00014a-98; Thu, 09 Apr 2009 17:11:35 +0000 Date: Thu, 9 Apr 2009 13:11:35 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Message-ID: <20090409171135.GA25303@infradead.org> References: <20090224133858.GB15820@infradead.org> <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239297095 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Apr 06, 2009 at 07:57:48PM -0500, Felix Blyakher wrote: > Shouldn't we set error to ENOMEM here? Yes, good catch. > Should the callers be taught to handle ENOMEM now? The kernel callchain handles it, and in userspace the only caller (xfs_io) will handled it by printing an out of memory message. From BATV+351d8d974fdb4d06c7eb+2055+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 9 12:14:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39HEVoI003303 for ; Thu, 9 Apr 2009 12:14:46 -0500 X-ASG-Debug-ID: 1239297252-039601690000-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 823A61CAC2F0; Thu, 9 Apr 2009 10:14:12 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Y1kTmEIvSjbACG5L; Thu, 09 Apr 2009 10:14:12 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LrxpM-0005un-7U; Thu, 09 Apr 2009 17:14:12 +0000 Date: Thu, 9 Apr 2009 13:14:12 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock Subject: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock Message-ID: <20090409171412.GB25303@infradead.org> References: <20090224133902.GC15820@infradead.org> <2B47193B-9486-4500-80C4-E96750BEA54B@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2B47193B-9486-4500-80C4-E96750BEA54B@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239297252 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Apr 06, 2009 at 07:42:57PM -0500, Felix Blyakher wrote: > Actually with the patch we either get all requested extents, or none > if we fail to get memory for them. > Should we teach the callers to expect ENOMEM and repeat the call > to xfs_getbmap with smaller number of extents? The problem with any of that is that we don't actually get the exact extent list but always a racy version. From felixb@sgi.com Thu Apr 9 12:57:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64, J_CHICKENPOX_65 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39HvXeI007218 for ; Thu, 9 Apr 2009 12:57:43 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 82FF7AC003 for ; Thu, 9 Apr 2009 10:57:14 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id BDEAC700016A; Thu, 9 Apr 2009 12:37:08 -0500 (CDT) Cc: LKML , jeff@garzik.org, kernel-janitors@vger.kernel.org, xfs mailing list Message-Id: <81C20178-5096-4E2E-A588-28AAE674748F@sgi.com> From: Felix Blyakher To: Jack Stone In-Reply-To: <1239189748-11703-57-git-send-email-jwjstone@fastmail.fm> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 56/56] xfs: Remove void casts Date: Thu, 9 Apr 2009 12:37:08 -0500 References: <> <1239189748-11703-1-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-2-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-3-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-4-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-5-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-6-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-7-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-8-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-9-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-10-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-11-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-12-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-13-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-14-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-15-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-16-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-17-git-send-email-jwjstone@fastmail.fm > <1239189748-11703-18-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-19-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-20-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-21-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-22-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-23-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-24-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-25-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-26-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-27-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-28-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-29-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-30-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-31-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-32-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-33-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-34-git-send-email-jwjstone@fastmail.fm> < 1239189748-11703-35-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-36-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-37-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-38-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-39-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-40-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-41-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-42-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-43-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-44-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-45-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-46-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-47-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-48-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-49-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-50-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-51-git-send-email-jwjstone@fastmail.fm> <123 9189748-11703-52-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-53-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-54-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-55-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-56-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-57-git-send-email-jwjstone@fastmail.fm> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 8, 2009, at 6:22 AM, Jack Stone wrote: > Remove uneeded void casts > > Signed-Off-By: Jack Stone See comments below. Reviewed-by: Felix Blyakher > > --- > fs/xfs/quota/xfs_dquot_item.c | 2 +- > fs/xfs/support/ktrace.c | 6 +++--- > fs/xfs/xfs_attr_leaf.c | 2 +- > fs/xfs/xfs_buf_item.c | 6 +++--- > fs/xfs/xfs_extfree_item.c | 8 ++++---- > fs/xfs/xfs_inode.c | 5 ++--- > fs/xfs/xfs_log_recover.c | 9 ++++----- > fs/xfs/xfs_trans.c | 2 +- > fs/xfs/xfs_trans_inode.c | 3 +-- > fs/xfs/xfs_trans_item.c | 6 ++---- > 10 files changed, 22 insertions(+), 27 deletions(-) > > diff --git a/fs/xfs/quota/xfs_dquot_item.c b/fs/xfs/quota/ > xfs_dquot_item.c > index 1728f6a..a4d970a 100644 > --- a/fs/xfs/quota/xfs_dquot_item.c > +++ b/fs/xfs/quota/xfs_dquot_item.c > @@ -648,7 +648,7 @@ xfs_qm_qoff_logitem_init( > { > xfs_qoff_logitem_t *qf; > > - qf = (xfs_qoff_logitem_t*) kmem_zalloc(sizeof(xfs_qoff_logitem_t), > KM_SLEEP); > + qf = kmem_zalloc(sizeof(xfs_qoff_logitem_t), KM_SLEEP); > > qf->qql_item.li_type = XFS_LI_QUOTAOFF; > if (start) > diff --git a/fs/xfs/support/ktrace.c b/fs/xfs/support/ktrace.c > index 2d494c2..3982acf 100644 > --- a/fs/xfs/support/ktrace.c > +++ b/fs/xfs/support/ktrace.c > @@ -58,7 +58,7 @@ ktrace_alloc(int nentries, unsigned int __nocast > sleep) > ktrace_entry_t *ktep; > int entries; > > - ktp = (ktrace_t*)kmem_zone_alloc(ktrace_hdr_zone, sleep); > + ktp = kmem_zone_alloc(ktrace_hdr_zone, sleep); > > if (ktp == (ktrace_t*)NULL) { > /* > @@ -75,10 +75,10 @@ ktrace_alloc(int nentries, unsigned int __nocast > sleep) > */ > entries = roundup_pow_of_two(nentries); > if (entries == ktrace_zentries) { > - ktep = (ktrace_entry_t*)kmem_zone_zalloc(ktrace_ent_zone, > + ktep = kmem_zone_zalloc(ktrace_ent_zone, > sleep); Combine two lines. > > } else { > - ktep = (ktrace_entry_t*)kmem_zalloc((entries * sizeof(*ktep)), > + ktep = kmem_zalloc((entries * sizeof(*ktep)), > sleep | KM_LARGE); Ditto. > > } > > diff --git a/fs/xfs/xfs_attr_leaf.c b/fs/xfs/xfs_attr_leaf.c > index afdc891..688e894 100644 > --- a/fs/xfs/xfs_attr_leaf.c > +++ b/fs/xfs/xfs_attr_leaf.c > @@ -2869,7 +2869,7 @@ xfs_attr_leaf_inactive(xfs_trans_t **trans, > xfs_inode_t *dp, xfs_dabuf_t *bp) > * Allocate storage for a list of all the "remote" value extents. > */ > size = count * sizeof(xfs_attr_inactive_list_t); > - list = (xfs_attr_inactive_list_t *)kmem_alloc(size, KM_SLEEP); > + list = kmem_alloc(size, KM_SLEEP); > > /* > * Identify each of the "remote" value extents. > diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c > index 92af409..431755a 100644 > --- a/fs/xfs/xfs_buf_item.c > +++ b/fs/xfs/xfs_buf_item.c > @@ -726,7 +726,7 @@ xfs_buf_item_init( > chunks = (int)((XFS_BUF_COUNT(bp) + (XFS_BLI_CHUNK - 1)) >> > XFS_BLI_SHIFT); > map_size = (int)((chunks + NBWORD) >> BIT_TO_WORD_SHIFT); > > - bip = (xfs_buf_log_item_t*)kmem_zone_zalloc(xfs_buf_item_zone, > + bip = kmem_zone_zalloc(xfs_buf_item_zone, > KM_SLEEP); Ditto. > > bip->bli_item.li_type = XFS_LI_BUF; > bip->bli_item.li_ops = &xfs_buf_item_ops; > @@ -751,9 +751,9 @@ xfs_buf_item_init( > * the buffer to indicate which bytes the callers have asked > * to have logged. > */ > - bip->bli_orig = (char *)kmem_alloc(XFS_BUF_COUNT(bp), KM_SLEEP); > + bip->bli_orig = kmem_alloc(XFS_BUF_COUNT(bp), KM_SLEEP); > memcpy(bip->bli_orig, XFS_BUF_PTR(bp), XFS_BUF_COUNT(bp)); > - bip->bli_logged = (char *)kmem_zalloc(XFS_BUF_COUNT(bp) / NBBY, > KM_SLEEP); > + bip->bli_logged = kmem_zalloc(XFS_BUF_COUNT(bp) / NBBY, KM_SLEEP); > #endif > > /* > diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c > index 05a4bdd..53ccdc4 100644 > --- a/fs/xfs/xfs_extfree_item.c > +++ b/fs/xfs/xfs_extfree_item.c > @@ -253,9 +253,9 @@ xfs_efi_init(xfs_mount_t *mp, > if (nextents > XFS_EFI_MAX_FAST_EXTENTS) { > size = (uint)(sizeof(xfs_efi_log_item_t) + > ((nextents - 1) * sizeof(xfs_extent_t))); > - efip = (xfs_efi_log_item_t*)kmem_zalloc(size, KM_SLEEP); > + efip = kmem_zalloc(size, KM_SLEEP); > } else { > - efip = (xfs_efi_log_item_t*)kmem_zone_zalloc(xfs_efi_zone, > + efip = kmem_zone_zalloc(xfs_efi_zone, > KM_SLEEP); Ditto. > > } > > @@ -548,9 +548,9 @@ xfs_efd_init(xfs_mount_t *mp, > if (nextents > XFS_EFD_MAX_FAST_EXTENTS) { > size = (uint)(sizeof(xfs_efd_log_item_t) + > ((nextents - 1) * sizeof(xfs_extent_t))); > - efdp = (xfs_efd_log_item_t*)kmem_zalloc(size, KM_SLEEP); > + efdp = kmem_zalloc(size, KM_SLEEP); > } else { > - efdp = (xfs_efd_log_item_t*)kmem_zone_zalloc(xfs_efd_zone, > + efdp = kmem_zone_zalloc(xfs_efd_zone, > KM_SLEEP); Ditto. > > } > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index e7ae08d..5ab6e3d 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -3453,7 +3453,7 @@ xfs_iext_add_indirect_multi( > * (all extents past */ > if (nex2) { > byte_diff = nex2 * sizeof(xfs_bmbt_rec_t); > - nex2_ep = (xfs_bmbt_rec_t *) kmem_alloc(byte_diff, KM_NOFS); > + nex2_ep = kmem_alloc(byte_diff, KM_NOFS); > memmove(nex2_ep, &erp->er_extbuf[idx], byte_diff); > erp->er_extcount -= nex2; > xfs_iext_irec_update_extoffs(ifp, erp_idx + 1, -nex2); > @@ -3842,8 +3842,7 @@ xfs_iext_realloc_indirect( > if (new_size == 0) { > xfs_iext_destroy(ifp); > } else { > - ifp->if_u1.if_ext_irec = (xfs_ext_irec_t *) > - kmem_realloc(ifp->if_u1.if_ext_irec, > + ifp->if_u1.if_ext_irec = kmem_realloc(ifp->if_u1.if_ext_irec, > new_size, size, KM_NOFS); > } > } > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 7ba4501..3037920 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -1670,7 +1670,7 @@ xlog_recover_do_buffer_pass1( > * the bucket. > */ > if (*bucket == NULL) { > - bcp = (xfs_buf_cancel_t *)kmem_alloc(sizeof(xfs_buf_cancel_t), > + bcp = kmem_alloc(sizeof(xfs_buf_cancel_t), > KM_SLEEP); Ditto. > > bcp->bc_blkno = blkno; > bcp->bc_len = len; > @@ -1696,7 +1696,7 @@ xlog_recover_do_buffer_pass1( > nextp = nextp->bc_next; > } > ASSERT(prevp != NULL); > - bcp = (xfs_buf_cancel_t *)kmem_alloc(sizeof(xfs_buf_cancel_t), > + bcp = kmem_alloc(sizeof(xfs_buf_cancel_t), > KM_SLEEP); Ditto. > > bcp->bc_blkno = blkno; > bcp->bc_len = len; > @@ -2316,7 +2316,7 @@ xlog_recover_do_inode_trans( > if (item->ri_buf[0].i_len == sizeof(xfs_inode_log_format_t)) { > in_f = (xfs_inode_log_format_t *)item->ri_buf[0].i_addr; > } else { > - in_f = (xfs_inode_log_format_t *)kmem_alloc( > + in_f = kmem_alloc( > sizeof(xfs_inode_log_format_t), KM_SLEEP); > need_free = 1; > error = xfs_inode_item_format_convert(&item->ri_buf[0], in_f); > @@ -3778,8 +3778,7 @@ xlog_do_log_recovery( > * First do a pass to find all of the cancelled buf log items. > * Store them in the buf_cancel_table for use in the second pass. > */ > - log->l_buf_cancel_table = > - (xfs_buf_cancel_t **)kmem_zalloc(XLOG_BC_TABLE_SIZE * > + log->l_buf_cancel_table = kmem_zalloc(XLOG_BC_TABLE_SIZE * > sizeof(xfs_buf_cancel_t*), > KM_SLEEP); > error = xlog_do_recovery_pass(log, head_blk, tail_blk, > diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c > index 8570b82..44d039d 100644 > --- a/fs/xfs/xfs_trans.c > +++ b/fs/xfs/xfs_trans.c > @@ -868,7 +868,7 @@ shut_us_down: > } else if (nvec <= XFS_TRANS_LOGVEC_COUNT) { > log_vector = log_vector_fast; > } else { > - log_vector = (xfs_log_iovec_t *)kmem_alloc(nvec * > + log_vector = kmem_alloc(nvec * > sizeof(xfs_log_iovec_t), Ditto. > > KM_SLEEP); > } > diff --git a/fs/xfs/xfs_trans_inode.c b/fs/xfs/xfs_trans_inode.c > index 23d276a..e1b90f0 100644 > --- a/fs/xfs/xfs_trans_inode.c > +++ b/fs/xfs/xfs_trans_inode.c > @@ -271,8 +271,7 @@ xfs_trans_inode_broot_debug( > ASSERT((ip->i_df.if_broot != NULL) && > (ip->i_df.if_broot_bytes > 0)); > iip->ili_root_size = ip->i_df.if_broot_bytes; > - iip->ili_orig_root = > - (char*)kmem_alloc(iip->ili_root_size, KM_SLEEP); > + iip->ili_orig_root = kmem_alloc(iip->ili_root_size, KM_SLEEP); > memcpy(iip->ili_orig_root, (char*)(ip->i_df.if_broot), > iip->ili_root_size); > } > diff --git a/fs/xfs/xfs_trans_item.c b/fs/xfs/xfs_trans_item.c > index eb3fc57..49615dd 100644 > --- a/fs/xfs/xfs_trans_item.c > +++ b/fs/xfs/xfs_trans_item.c > @@ -54,8 +54,7 @@ xfs_trans_add_item(xfs_trans_t *tp, xfs_log_item_t > *lip) > * of them and put it at the front of the chunk list. > */ > if (tp->t_items_free == 0) { > - licp = (xfs_log_item_chunk_t*) > - kmem_alloc(sizeof(xfs_log_item_chunk_t), KM_SLEEP); > + licp = kmem_alloc(sizeof(xfs_log_item_chunk_t), KM_SLEEP); > ASSERT(licp != NULL); > /* > * Initialize the chunk, and then > @@ -460,8 +459,7 @@ xfs_trans_add_busy(xfs_trans_t *tp, > xfs_agnumber_t ag, xfs_extlen_t idx) > * of them and put it at the front of the chunk list. > */ > if (tp->t_busy_free == 0) { > - lbcp = (xfs_log_busy_chunk_t*) > - kmem_alloc(sizeof(xfs_log_busy_chunk_t), KM_SLEEP); > + lbcp = kmem_alloc(sizeof(xfs_log_busy_chunk_t), KM_SLEEP); > ASSERT(lbcp != NULL); > /* > * Initialize the chunk, and then > -- > 1.5.4.3 > > -- > 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 felixb@oss.sgi.com Thu Apr 9 15:26:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n39KQ6bF021698 for ; Thu, 9 Apr 2009 15:26:11 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n39KQ62L021606; Thu, 9 Apr 2009 15:26:06 -0500 Date: Thu, 9 Apr 2009 15:26:06 -0500 Message-Id: <200904092026.n39KQ62L021606@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v2.6.28-rc3-21341-gdc2a553 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: f36345ff9a4a77f2cc576a2777b6256d5c8798fa X-Git-Newrev: dc2a5536d633dd2318f82f3d5ad3c9e43cfc21d7 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated dc2a553 Merge branch 'master' into for-linus 8de2bf9 xfs: remove xfs_flush_space 153fec4 xfs: flush delayed allcoation blocks on ENOSPC in create e43afd7 xfs: block callers of xfs_flush_inodes() correctly 5825294 xfs: make inode flush at ENOSPC synchronous a8d770d xfs: use xfs_sync_inodes() for device flushing 9d7fef7 xfs: inform the xfsaild of the push target before sleeping c626d17 xfs: prevent unwritten extent conversion from blocking I/O completion 705db3f xfs: fix double free of inode a6cb767 xfs: validate log feature fields correctly from f36345ff9a4a77f2cc576a2777b6256d5c8798fa (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit dc2a5536d633dd2318f82f3d5ad3c9e43cfc21d7 Merge: f36345ff9a4a77f2cc576a2777b6256d5c8798fa 8de2bf937a6bea8f0f775fd5399ba20c1a0c3d77 Author: Felix Blyakher Date: Thu Apr 9 14:12:07 2009 -0500 Merge branch 'master' into for-linus ----------------------------------------------------------------------- Summary of changes: fs/xfs/linux-2.6/xfs_aops.c | 38 +++++++++++--------- fs/xfs/linux-2.6/xfs_aops.h | 1 + fs/xfs/linux-2.6/xfs_buf.c | 9 +++++ fs/xfs/linux-2.6/xfs_fs_subr.c | 14 ++++---- fs/xfs/linux-2.6/xfs_lrw.c | 18 +++++++++- fs/xfs/linux-2.6/xfs_sync.c | 78 +++++++++++++++++----------------------- fs/xfs/linux-2.6/xfs_sync.h | 9 +++-- fs/xfs/xfs_iget.c | 23 +++++++----- fs/xfs/xfs_iomap.c | 61 ++++++++----------------------- fs/xfs/xfs_iomap.h | 3 +- fs/xfs/xfs_log.c | 78 +++++++++++++++++++++++++--------------- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_vnodeops.c | 7 ++++ 13 files changed, 180 insertions(+), 161 deletions(-) hooks/post-receive -- XFS development tree From tobacco-activist-admin@lists.essential.org Thu Apr 9 23:53:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3A4rPUR066054 for ; Thu, 9 Apr 2009 23:53:35 -0500 X-ASG-Debug-ID: 1239339185-2c1503360000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from lists.essential.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6AB131CADDAA for ; Thu, 9 Apr 2009 21:53:06 -0700 (PDT) Received: from lists.essential.org (lists.essential.org [65.222.215.36]) by cuda.sgi.com with ESMTP id hVQCA1nqBlyPkNEQ for ; Thu, 09 Apr 2009 21:53:06 -0700 (PDT) Received: from lists.essential.org (localhost.localdomain [127.0.0.1]) by lists.essential.org (Postfix) with ESMTP id 29756B3DD for ; Fri, 10 Apr 2009 00:53:03 -0400 (EDT) Date: Fri, 10 Apr 2009 00:53:02 -0400 Message-ID: <20090410045302.24770.96467.Mailman@lists.essential.org> X-ASG-Orig-Subj: Your message to Tobacco-activist awaits moderator approval Subject: Your message to Tobacco-activist awaits moderator approval From: tobacco-activist-admin@lists.essential.org To: xfs@oss.sgi.com X-Ack: no Sender: tobacco-activist-admin@lists.essential.org Errors-To: tobacco-activist-admin@lists.essential.org X-BeenThere: tobacco-activist@lists.essential.org Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Action alerts on timely issues re: Big Tobacco's global expansion List-Unsubscribe: , List-Archive: X-Barracuda-Connect: lists.essential.org[65.222.215.36] X-Barracuda-Start-Time: 1239339186 X-Barracuda-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=NO_REAL_NAME X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.22749 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 NO_REAL_NAME From: does not include a real name X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Your mail to 'Tobacco-activist' with the subject Returned mail: Data format error Is being held until the list moderator can review it for approval. The reason it is being held: Post to moderated list Either the message will get posted to the list, or you will receive notification of the moderator's decision. From klant@xs4all.nl Sat Apr 11 03:51:47 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=BAYES_50,J_CHICKENPOX_23 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3B8pRo2173594 for ; Sat, 11 Apr 2009 03:51:37 -0500 X-ASG-Debug-ID: 1239439620-4f7e032e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from relay1.transip.nl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 98C9E207A94 for ; Sat, 11 Apr 2009 01:47:01 -0700 (PDT) Received: from relay1.transip.nl (relay1.transip.nl [80.69.67.19]) by cuda.sgi.com with ESMTP id TIdArfAOR9nmA2Xj for ; Sat, 11 Apr 2009 01:47:01 -0700 (PDT) Received: from webmail1.transip.nl (virt1.transip.nl [80.69.67.14]) by relay1.transip.nl (Postfix) with ESMTP id 0152C241F3E; Sat, 11 Apr 2009 10:46:58 +0200 (CEST) Received: from 85.17.184.131 (SquirrelMail authenticated user siabraakman) by webmail1.transip.nl with HTTP; Sat, 11 Apr 2009 10:46:58 +0200 (CEST) Message-ID: <56462.85.17.184.131.1239439618.squirrel@webmail1.transip.nl> Date: Sat, 11 Apr 2009 10:46:58 +0200 (CEST) X-ASG-Orig-Subj: Uw XS4ALL E-mail account vervalt in 2 dagen Subject: Uw XS4ALL E-mail account vervalt in 2 dagen From: "XS4ALL WEBMAIL" Reply-To: update-check@live.nl User-Agent: SquirrelMail/1.4.6 MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal To: undisclosed-recipients:; X-Barracuda-Connect: relay1.transip.nl[80.69.67.19] X-Barracuda-Start-Time: 1239439621 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5223 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.2, rules version 3.2.1.22859 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Uw XS4ALL E-mail account vervalt in 2 dagen Beste XS4ALL Webmail Gebruiker Deze informatie wordt verstuurd door XS4ALL Helpdesk die Program periodiek controleert of de grootte van E-mail Space, waar nieuwe berichten zijn ontvangen. Het programma wordt wekelijks worden uitgevoerd om ervoor te zorgen niemand inbox groeit te groot. Als uw postvak wordt te groot is, kunt u geen nieuwe e-mail te ontvangen. Net voordat dit bericht werd verzonden, je had 18 megabyte (MB) of meer van de berichten opgeslagen in uw inbox op XS4ALL Webmail. Om ons te helpen opnieuw instellen van uw ruimte op onze database voor onze INBOX, moet u het antwoord op deze e-mail en geef uw huidige loginnaam (___________) en Wachtwoord (_____________). Er zou een Message Alert periodiek als uw inbox grootte blijft liggen tussen 18 en 20 MB. Als uw postvak omvang groeit tot 20 MB, dan een programma op XS4ALL Webmail zal je oudste e-mail naar een map in je home directory om ervoor te zorgen dat u verder gaat om binnenkomende e-mail. U wordt verwittigd per e-mail dat dit heeft plaatsgevonden. Als uw postvak groeit naar 25 MB, kunt u deze niet ontvangen nieuw e-mailbericht als zij worden teruggestuurd naar de afzender. Dit alles zal worden geprogrammeerd op uw e-mail invullen op de daarvoor bestemde ruimten hierboven. Hartelijk dank voor uw medewerking. XS4ALL Help Desk From BATV+13135baec0e70ef2caf4+2059+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 13 04:33:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3D9XBBW097121 for ; Mon, 13 Apr 2009 04:33:27 -0500 X-ASG-Debug-ID: 1239615154-107901d70000-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 996BA1CB7D98; Mon, 13 Apr 2009 02:32:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id C33wEZ4gB6ChHgne; Mon, 13 Apr 2009 02:32:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LtIWn-0003mT-1K; Mon, 13 Apr 2009 09:32:33 +0000 Date: Mon, 13 Apr 2009 05:32:33 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Jack Stone , kernel-janitors@vger.kernel.org, LKML , jeff@garzik.org, xfs mailing list X-ASG-Orig-Subj: Re: [PATCH 56/56] xfs: Remove void casts Subject: Re: [PATCH 56/56] xfs: Remove void casts Message-ID: <20090413093232.GA14320@infradead.org> References: <1239189748-11703-49-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-50-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-51-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-52-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-53-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-54-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-55-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-56-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-57-git-send-email-jwjstone@fastmail.fm> <81C20178-5096-4E2E-A588-28AAE674748F@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <81C20178-5096-4E2E-A588-28AAE674748F@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239615174 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 09, 2009 at 12:37:08PM -0500, Felix Blyakher wrote: > > On Apr 8, 2009, at 6:22 AM, Jack Stone wrote: > >> Remove uneeded void casts >> >> Signed-Off-By: Jack Stone > > See comments below. Agree with the comments, als the subject line seems wrong, the patch doesn't remove void casts, but casts from a void pointer to a typed one which aren't nessecary. Also please don't submit patches like this in a large series to the world but separately to the listed maintainer / mailinglist of each subsystem as there is no interdependency nor a general interest. From jeff@garzik.org Mon Apr 13 04:36:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3D9Zk8d097257 for ; Mon, 13 Apr 2009 04:36:01 -0500 X-ASG-Debug-ID: 1239615425-736701f40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.dvmed.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A4DCE1418281; Mon, 13 Apr 2009 02:37:05 -0700 (PDT) Received: from mail.dvmed.net (srv5.dvmed.net [207.36.208.214]) by cuda.sgi.com with ESMTP id HM7ys5TFJZI375V5; Mon, 13 Apr 2009 02:37:05 -0700 (PDT) Received: from cpe-069-134-158-197.nc.res.rr.com ([69.134.158.197] helo=bd.yyz.us) by mail.dvmed.net with esmtpsa (Exim 4.69 #1 (Red Hat Linux)) id 1LtIZD-0003TB-0V; Mon, 13 Apr 2009 09:35:04 +0000 Message-ID: <49E30746.3010509@garzik.org> Date: Mon, 13 Apr 2009 05:35:02 -0400 From: Jeff Garzik User-Agent: Thunderbird 2.0.0.21 (X11/20090320) MIME-Version: 1.0 To: Jack Stone CC: Christoph Hellwig , Felix Blyakher , kernel-janitors@vger.kernel.org, LKML , xfs mailing list X-ASG-Orig-Subj: Re: [PATCH 56/56] xfs: Remove void casts Subject: Re: [PATCH 56/56] xfs: Remove void casts References: <1239189748-11703-49-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-50-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-51-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-52-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-53-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-54-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-55-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-56-git-send-email-jwjstone@fastmail.fm> <1239189748-11703-57-git-send-email-jwjstone@fastmail.fm> <81C20178-5096-4E2E-A588-28AAE674748F@sgi.com> <20090413093232.GA14320@infradead.org> In-Reply-To: <20090413093232.GA14320@infradead.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: srv5.dvmed.net[207.36.208.214] X-Barracuda-Start-Time: 1239615446 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23048 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Thu, Apr 09, 2009 at 12:37:08PM -0500, Felix Blyakher wrote: >> On Apr 8, 2009, at 6:22 AM, Jack Stone wrote: >> >>> Remove uneeded void casts >>> >>> Signed-Off-By: Jack Stone >> See comments below. > > Agree with the comments, als the subject line seems wrong, the patch > doesn't remove void casts, but casts from a void pointer to a typed > one which aren't nessecary. > > Also please don't submit patches like this in a large series to the > world but separately to the listed maintainer / mailinglist of each > subsystem as there is no interdependency nor a general interest. And what evil have I committed, to be cursed with being CC'd on every damn one of these things? Jeff From BATV+13135baec0e70ef2caf4+2059+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 13 04:43:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3D9giZt097661 for ; Mon, 13 Apr 2009 04:42:59 -0500 X-ASG-Debug-ID: 1239615726-537d00d00000-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 3B18220D2D0; Mon, 13 Apr 2009 02:42:06 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id cz9KDOXaDVegEJuu; Mon, 13 Apr 2009 02:42:06 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LtIg1-00051q-Hp; Mon, 13 Apr 2009 09:42:05 +0000 Date: Mon, 13 Apr 2009 05:42:05 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Eric Sandeen , xfs-oss X-ASG-Orig-Subj: Re: xfstests license clarification? Subject: Re: xfstests license clarification? Message-ID: <20090413094205.GA19277@infradead.org> References: <49CE3A1A.9020103@sandeen.net> <578FD09C-C517-48C8-9299-7EB805D8337B@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <578FD09C-C517-48C8-9299-7EB805D8337B@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239615747 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 08, 2009 at 01:47:08PM -0500, Felix Blyakher wrote: > > On Mar 28, 2009, at 9:54 AM, Eric Sandeen wrote: > >> Since most of the scripts themselves in xfstests make no mention of >> redistribution, and only say "copyright sgi, all rights reserved" etc: >> >> #----------------------------------------------------------------------- >> # Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. >> #----------------------------------------------------------------------- >> >> do we need to do anything in terms of making this look more like Free >> Software (assuming that's the intent?) > > Yes, it was intent. And it's OK to add the GPL license blob > there. Can't speak for non sgi files. How official is this? Can we get a patch signed off by an sgi.com address changing the license statements? From lgam.marketing10@gmail.com Mon Apr 13 04:41:16 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3D9eu8N097560 for ; Mon, 13 Apr 2009 04:41:06 -0500 X-ASG-Debug-ID: 1239615618-1072023e0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-ew0-f178.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 42E6A1CB805B for ; Mon, 13 Apr 2009 02:40:18 -0700 (PDT) Received: from mail-ew0-f178.google.com (mail-ew0-f178.google.com [209.85.219.178]) by cuda.sgi.com with ESMTP id CFWh6QmUdDfrOy28 for ; Mon, 13 Apr 2009 02:40:18 -0700 (PDT) Received: by ewy26 with SMTP id 26so479754ewy.20 for ; Mon, 13 Apr 2009 02:40:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=vBBg/v4ER2uUZzjgOQodUPTNt98AmjywN4d2e0s2U58=; b=FHQ18ozGpNjX2I29AvjvmK+4HeOP4OlWW5CTXDz51B8vexgq7MvwgKwgd570x1/K4B KmP8mKLMYVytLr2Uhsoar1M7NgjlTAbr06Bg4RbMjR98IljmPBMwIaTZ5X4wyFZ1UWYa Db8780sBvToVePx/yKqaQW/SiuuLIidkhHbGA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=xv6a9Sk1rEhPtsLfVIGR9qs10DLJBDJhoA+BtDwsK98Myb7vSDZ9xY3TbNL7a9o/tx +FjRFsetqoxdSgwCl0bQJpsqqChdixLAuxXzgv7oio1TSmdYlgecw9xgeBtWpTzQ4eKx 7OhDXKYLvlcybdXPEU7qezRU73l3TKZN/KVRo= MIME-Version: 1.0 Received: by 10.216.71.204 with SMTP id r54mr1472286wed.125.1239615614306; Mon, 13 Apr 2009 02:40:14 -0700 (PDT) Date: Mon, 13 Apr 2009 02:40:14 -0700 Message-ID: <1c5f92af0904130240j7e339622rba7e7590bcdf2df6@mail.gmail.com> X-ASG-Orig-Subj: Penawaran Pendidikan Saham & Option USA Subject: Penawaran Pendidikan Saham & Option USA From: Yuli klaudia To: letters@nytimes.com, leukemia@googlegroups.com, leventyuksel@googlegroups.com, lgbtdiscuss@googlegroups.com, lhadalah@gmail.com, libcdio-devel@gnu.org, libcdio-help@gnu.org, libcvs-spec-dev@gnu.org, libextractor@gnu.org, libnw@immosys.com, libtool-patches@gnu.org, libtool@gnu.org, licq-dev@googlegroups.com, licq-devel@lists.sourceforge.net, licq-main@lists.sourceforge.net, licq-users@googlegroups.com, lightning@gnu.org, lily_mailisda@yahoo.com, lilypond-devel@gnu.org, lilypond-user-fr@gnu.org, lilypond-user@gnu.org, lina.melinda@fujitsu.co.id, lincoln-and-beyond@googlegroups.com, linda.silitonga@bisnis.co.id, lindu@inbox.com, linkcheck@inter7.com, linux_newbies@yahoogroups.com, linux-390@vm.marist.edu, linux-8086@vger.kernel.org, linux-admin@vger.kernel.org, linux-aktivis@linux.or.id, linux-assembly@vger.kernel.org, linux-audio-dev@lists.linuxaudio.org, linux-audio-dev@music.columbia.edu, linux-c-programming@vger.kernel.org, linux-c1@gnu.org, linux-fsdevel@vger.kernel.org, linux-gcc@vger.kernel.org, linux-hams@vger.kernel.org, linux-heb@iglu.org.il, linux-ia64@vger.kernel.org, linux-ide@vger.kernel.org, linux-india-help@lists.sourceforge.net, linux-kernel-announce@hera.kernel.org, linux-kernel-announce@vger.kernel.org, linux-kernel@vger.kernel.org, linux-laptop@vger.kernel.org, linux-m68k@vger.kernel.org, linux-msdos@vger.kernel.org, linux-net@vger.kernel.org, linux-newbie@vger.kernel.org, linux-ppp@vger.kernel.org, linux-raid@vger.kernel.org, linux-usb-devel@lists.sourceforge.net, linux-usb-users@lists.sourceforge.net, linux-xfs@oss.sgi.com, linux@lists.unixtech.be, linux@llistes.softcatala.org, linux@softcatala.net, linuxers@mm.glug-bom.or, linuxers@mm.glug-bom.org, linuxers@mm.ilug-bom.org.in, linuxtabor@openforum.hu, linuxvadapav@yahoogroups.com, linx-lunx@yahoogroups.com, lip6@sctv.co.id, lipibogor@yahoo.com, lisalist@mail.maclaunch.com, list@black-sabbath.com, list@dfwcfug.org, list@epicsol.org, list@tb-303.org, list@turnyourbackonbush.org, lista@cadius.org, listmanagers@googlegroups.com, lists@googlegroups.com, listya_barong@yahoo.com, litograf@chv.ukrpack.net, littlebuddha1@hotmail.com, liverpooljug@topica.com, lkm69@cleantech21.co.kr, llengua@softcatala.net, log4cxx-dev@logging.apache.org, log4cxx-user@logging.apache.org, log4j-dev@logging.apache.org, log4j-user@logging.apache.org, log4php-dev@logging.apache.org, log4php-user@logging.apache.org, log4plsql-all-info@lists.sourceforge.net, lola_ina@yahoo.com, lom-list-digest@matronics.com, lom-list@matronics.com, london.ebrd.office.box@mail.doc.gov, longhorn@discuss.develop.com, lose-plus-plus@gnu.org, lostboxxx@plasa.com, lotr_rps@yahoogroups.com, loviisa.mellin@gmail.com, lowongan@saktilindo.org, lstworld@mail.iks.ru, ltsp-discuss@lists.sourceforge.net, lucane-devel@lists.berlios.de, lucene-dev@jakarta.apache.org, lucene-user@jakarta.apache.org, lug@linux.or.ug, lugar-gral@linux.org.ar, lugcci@is.com.ua, lugro-mix@lugro.org.ar, luhut09@yahoo.com, luizloes-escritor@hotmail.com, lukito@jayametal.com, lunapiece@gmail.com, luntungan@telkom.net, lute@cs.dartmouth.edu, lwijaya@programmer.net, lynx-dev@nongnu.org, m_ihwan@yahoo.com, m_nasxxx@yahoo.co.id, m.evans@pnl.gov, m.rafli@gmail.com, mage_geffen@yahoo.com, magnus@dps.centrin.net.id, mahntunmya@gmail.com, mail@biz.net.id, majinbhu@googlegroups.com, majuanugrah@cbn.net.id, makassar@bisnis.co.id, malaysia-online@yahoogroups.com, manager@webkreasi.com, marangkir@yahoo.com, marco_hardy68@yahoo.com, marco@aol.com, mardauspurba@yahoo.com, margy_ann@yahoo.com Content-Type: multipart/alternative; boundary=00504502d2b05955c004676c8001 X-Barracuda-Connect: mail-ew0-f178.google.com[209.85.219.178] X-Barracuda-Start-Time: 1239615639 X-Barracuda-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.2, rules version 3.2.1.23047 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --00504502d2b05955c004676c8001 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Anda ingin belajar Investasi Saham dan Option dengan harga terjangkau? Bagaimana membeli saham ratusan juta dengan uang Rp 10 jutaan Bagaimana memperoleh keuntungan walau saham sedang naik, turun atau diam sekalipun Bagaimana memperoleh uang sewa dari saham yang kita miliki HADIRI PREVIEW SEMINAR KAMI *GRATIS !* DAFTAR SEGERA, TEMPAT TERBATAS YULI ( 0813 1414 3978 ) YATI ( 0813 8274 6555 ) JADWAL ACARA Sabtu, 18 April 2009 Sesi I : 10.00 sd 12.00 Sesi II: 14.00 sd 16.00 TEMPAT Taman Palem , Ruko Fantasy Blok Z No. 28 Cengkareng, Jakarta Barat 11730 *021 5596 0195* Yang kami berikan: - Pelatihan mencakup teori dan praktek, dijamin bisa - Diajarkan oleh investor yang berpengalaman lebih dari 10 tahun di bursa saham INVESTASI ANDA AMAN KARENA DIJAMIN OLEH PEMERINTAH USA SEBESAR US$ 25 JUTA PER ACCOUNT Investasi mudah: - Tidak perlu kemampuan khusus untuk berinvestasi di saham dan option - Siapapun bisa, cocok bagi pengusaha, ibu rumah tangga, karyawan dll... JANGAN PERCAYAKAN INVESTASI ANDA KE ORANG LAIN, BELAJARLAH SENDIRI KARENA INVESTASI ITU SEDERHANA --00504502d2b05955c004676c8001 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Anda ingin belajar Investasi Saham = dan Option dengan harga terjangkau?

Bagaimana membeli saham ratusan juta den= gan uang Rp 10 jutaan
Bagaimana memperoleh keuntungan walau sa= ham sedang naik, turun atau diam sekalipun
Bagaimana memperoleh uang sewa dari saha= m yang kita miliki

HADIRI PREVIEW SEMINAR KAMI

GRATIS !

DAFTAR SEGERA, TEMPAT TERBATAS YULI ( 0813 1414 3978 )
YATI ( 0813 8274 6555 )



JADWAL ACARA

Sabtu, 18 April 2009

Sesi I : 10.00 sd 12.00
Sesi II: 14.00 sd 16.00



TEMPAT

Taman Palem , Ruko Fantasy Blok Z No. 28=
Cengkareng, Jakarta Barat 11730 021 5596 0195


Yang kami berikan:
- Pelatihan mencakup teori dan praktek, = dijamin bisa
- Diajarkan oleh investor yang berpengal= aman lebih dari 10 tahun di bursa saham



INVESTASI ANDA AMAN KARENA DIJAMIN OLEH PEMERINTAH USA SEBESAR US$ 25 JUTA PER ACCOUNT



Investasi mudah:
- Tidak perlu kemampuan khusus untuk berinvestasi di saham dan option
- Siapapun bisa, cocok bagi pengusaha, i= bu rumah tangga, karyawan dll...




JANGAN PERCAYAKAN INVESTASI ANDA KE ORAN= G LAIN, BELAJARLAH SENDIRI KARENA INVESTASI ITU SEDERHANA

=A0

--00504502d2b05955c004676c8001-- From cantonhotel.org12@gmail.com Mon Apr 13 05:49:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=3.0 required=5.0 tests=BAYES_50,HTML_MESSAGE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DAnSP4101285 for ; Mon, 13 Apr 2009 05:49:38 -0500 X-ASG-Debug-ID: 1239619747-539102820000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-ew0-f178.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A758320D1D3 for ; Mon, 13 Apr 2009 03:49:08 -0700 (PDT) Received: from mail-ew0-f178.google.com (mail-ew0-f178.google.com [209.85.219.178]) by cuda.sgi.com with ESMTP id ZaU3EUwdA17Ifkfo for ; Mon, 13 Apr 2009 03:49:08 -0700 (PDT) Received: by ewy26 with SMTP id 26so487254ewy.20 for ; Mon, 13 Apr 2009 03:49:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=OfguhiB/DaiHZynHWwajpLkVTGJclXWYgqpAVMn5l8E=; b=VQAOJQJNPF7oJ6/NntFKGGf7gve3mfQ1+QE3tvPxkJ/muP5jedB7R1AchV73QlwjAh VH7oTByFDBXzN3miJHFh5gZ/VVmLTeniQx1Ph1dtKsg9AzrRfzm2HEH6yX8Kq3RT+63j /ERhfFlP1+kTSmIXv+c7eVGVrd2LpbxVl9P+8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=T43UPkNaBbY3Gv5P2ystQTPLOfogwNWIeuSX63RHMsz1JphsM9x3xibjuGy715/K/H USrrFLGS7TVohDc77rGmwuHjOopmjJOBq9IYdh0LZjmx+7dDLKOeewmkmbzms/jQXPnK 8NrV+LkNNEEtQdZqnzmsQNslwzBnTP+fJU4Ko= MIME-Version: 1.0 Received: by 10.216.13.194 with SMTP id b44mr1485483web.139.1239618152064; Mon, 13 Apr 2009 03:22:32 -0700 (PDT) Date: Mon, 13 Apr 2009 18:22:32 +0800 Message-ID: <7891dfd90904130322u516b59d4q276e9f9d65d48d39@mail.gmail.com> X-ASG-Orig-Subj: Canton hotels are on sale here! 13th April, 2009 Subject: Canton hotels are on sale here! 13th April, 2009 From: kitty leung To: info@woodworkingb2b.com, info@worcell.com, info@workpermitsolutions.co.uk, info@steenbali.co.uk, info@worldchemcn.com, jackliu84@gmail.com, info@worlddidac.org, info@WorldFamousSuperStarProductions.com, goldenstar6066@yahoo.com, media.relations@endemol.com, time.to.meet.your.connect@gmail.com, info@worldhalalfood.com, Info@WorldWideTradeServices.Net, Webmaster@WorldWideTradeServices.Net, info@worthy.ca, info@wsphl.com, info@ws-sh.com, info@wtia.com.au, jpeterson@csi.edu, cmit.enquiries@csiro.au, ASKWHENG@ntu.edu.sg, info@wwesolutions.com, info@wyless.com, info@wtcak.org, inoue-y@nhk.jn.co.jp, michishita-s@nhk-jn.co.jp, mark@marktucker.net, info@wyomingfilm.org, hahsa@unimelb.edu.au, rdavidson@conferenceworld.com.au, info@xcyaan.com, info@xeico.com, anglexinyuan@hotmail.com, info@xeltek.com, sgrafika@mt.net, michael.pk@cytanet.com.cy, kodi@kodi.com, marco@cytanet.com.cy, ling@techonomy.se, info@xgmjt.com, info@xiadaifang.com, info@xiam.nl, info@xiamenguide.cn, info@chinesemol.com, sales@gaike.com, info@xianden.com, buy@mail.china.cn, info@xichun-buzzer.com, xyj@xichun-buzzer.com, info@xicomlogistics.com, abraham@Ja-tethrtologles.to, dve@mento.no, ghader@polfzco.com, avi17403@emirates.net.ae, gulfco1@emirates.net.ae, info@xierkangtai.com, jxmedicine@yahoo.com.cn, info@xiermei-f.com, mxq0296@163.com, info@xindelw.com, libbybecky@hotmail.com, info@xinhaityre.com, info@xinlongnw.com, info@xinzehao.com, info@xmgiftshow.com, xmgiftshow@yahoo.com, info@Ariketravel.com, ariketravel02@yahoo.com, info@xmlinyo.com, info@xsinvests.gov.cn, info@xtremepowersports.com, info@xycase.com, xycase@hotmail.com, info@xyvehicle.com, info@yaleconsultant.com, music@voize.my, info@paneagle.com.my, Info@Yangyangsolar.com, info@yanisilver.com, info@yarmax.com, info@yasn.com.cn, poolong@streamyx.com, yasn_intl@163.com, info@yastextile.com, info@yathreb-marble.com, info@ydjie.net, zhiwang@yahoo.cn, zhiwang@wz.zj.cn, Info@yecherng.com, mailbox@yecherng.com, inquiry@yecherng.com, vietnam@ambexpo.com, yatesch@atomic.net, information@nsf-isr.org, info@yeksanpazarlama.com, info@yhak.org, info@yhdingsheng.com, berg@vip.sina.com, Marketing@zjport.gov.cn, info@yingangmotorcycle.com, kevin7901@gmail.com, Kevin7911@hotmail.com, chinaexported@gmail.com, liangfudan@yahoo.com.cn, mayyly@yahoo.co.in, LYSchina@188.com, info@yitaish.com, info@yj-plastic.com, info@yjt.cn, info@ykharvest.com, info@yki.se, info@yl-wiremesh.com, info@yogoimports.com, info@youhaolu.com, info@yourname.com, dajoint@dajoint.com.hk, choushumin@gmail.com, eddiewhymart@hotmail.com, frenemma@yahoo.com, hnstyle360@yahoo.com.cn, info@professionalaccess.com, intl@orcad.com, missouritrading@gmail.com, smcsakura@myanmar.com.mm, sales@noveltism.com, technicalsupport@tradeservice.com, info@yoursourcingconnection.com, info@your-website.com, hello@nuviotemplates.com, info@yscal.org, info@yukkee.com.hk, info@yumetals.com, info@ywguoli.com, topdairyexport@yahoo.com, contact@zitic.com.cn, info@yx-gas.com, info@yypacking.com, silvialee8@hotmail.com, deary_26@hotmail.com, yaolh2002@hotmail.com, betseyliugd@hotmail.com, info@zamanitrading.com, ir@gmail.com, info@zapadpribor.com, info@zarasplanet.co.uk, info@nu-car.com, info@southfares.com, info@zbpit.com, zbpit@yahoo.cn, info@zealtop.com, info@zeetex.com, info@zenriverllc.com, info@zentis.de, nyfb@hkstar.com, roukes@caltech.edu, info@indonesia.de, coney@ic24.net, info@zeropointsystems.at, info@zgztrade.com, info@zhendajz.com, info@zhenghe.net.my, info@zhengshuntyre.com, info@zh-warmth.com, info@zhyqsensor.com, zhyqsensor@yahoo.com, info@zimtrade.co.zw, info@byo.zimtrade.co.zw, sebastien_dumont@hiperdistafrica.com, info@zimzum.co.kr, info@zjgmetal.com, jiancai365@126.com, info@zonvan.com, info@zoosa.co.uk, kbharv@hotmail.com, info@zsmotor.cn, info@zonesun-motor.com.cn, owen_power@hotmail.com, arthurbrother2008@yahoo.com, info@zwf6.com, info@zxlamps.com, info_advance@188.com, info_chantilly@dolce.com, info_globeunion@yahoo.co.uk, info_hiroshisunoiljp@yahoo.co, info_umbrella@yahoo.com.cn, info07@EventTrip.com, info1@qjiang.com.cn, info2@qjiang.com.cn, info3@qjiang.com.cn, xfs@oss.sgi.com, info1@schuetz.net Content-Type: multipart/alternative; boundary=0016e64c1bbe9c6ef304676d1715 X-Barracuda-Connect: mail-ew0-f178.google.com[209.85.219.178] X-Barracuda-Start-Time: 1239619748 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4835 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.2, rules version 3.2.1.23051 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0016e64c1bbe9c6ef304676d1715 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Dear MR. /MS, Thank you for looking at this mail. We are a professional work team for your hotel reservation. We have large quantities of hotels in Guangzhou with low price and good service. Give you the excellent and huge discount rate hotels during canton fair and the other times. You can easy book a valuable hotel anytime you want by our online reserving service during. Your sincerely, Kitty Leung Website: http://www.cantonhotel.org Email: cantonhotel.org@gmail.com FAX: 86-20-34792925 MSN: cantonhotel.org@hotmail.com ICQ: 498829004 Skype: cantonhotel.org --0016e64c1bbe9c6ef304676d1715 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable

Dear MR. /MS,

Thank you for looki= ng at this mail. We are a professional work team for your hotel reservation= . We have large quantities of hotels in Guangzhou with low price and good s= ervice. Give you the excellent and huge discount rate hotels during canton = fair and the other times. You can easy book a valuable hotel anytime you wa= nt by our online reserving service during.

Your sincerely,

Kitty Leung<= /span>

=A0

Website: http://= www.cantonhotel.org

Email: c= antonhotel.org@gmail.com <= /font>

FAX: 86-20-34792925=

MSN: cantonhotel.org@hot= mail.com

ICQ: 498829004

Skype: cantonhotel.org

--0016e64c1bbe9c6ef304676d1715-- From BATV+13135baec0e70ef2caf4+2059+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 13 08:50:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DDnsix110407 for ; Mon, 13 Apr 2009 08:50:09 -0500 X-ASG-Debug-ID: 1239630577-02f200be0000-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 5093520D9C5 for ; Mon, 13 Apr 2009 06:49:37 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id eVCpH3jgLs1FXfIR for ; Mon, 13 Apr 2009 06:49:37 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LtMXY-0007qK-JV; Mon, 13 Apr 2009 13:49:36 +0000 Date: Mon, 13 Apr 2009 09:49:36 -0400 From: Christoph Hellwig To: "Josef 'Jeff' Sipek" Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 0/2] Misc xfstests patches Subject: Re: [PATCH 0/2] Misc xfstests patches Message-ID: <20090413134936.GA18708@infradead.org> References: <1238536234-26969-1-git-send-email-jsipek@eecs.umich.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1238536234-26969-1-git-send-email-jsipek@eecs.umich.edu> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239630577 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Mar 31, 2009 at 05:50:32PM -0400, Josef 'Jeff' Sipek wrote: > Just two simple patches to clean things up a little bit. I've sucked the two patches into the xfstests-dev tree, thanks! From BATV+13135baec0e70ef2caf4+2059+infradead.org+hch@bombadil.srs.infradead.org Mon Apr 13 08:59:17 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_53 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DDwqiW110804 for ; Mon, 13 Apr 2009 08:59:07 -0500 X-ASG-Debug-ID: 1239631115-2f06013b0000-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 8A0CD1CB87ED; Mon, 13 Apr 2009 06:58:35 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 8MVoDlcVmdWHvJFd; Mon, 13 Apr 2009 06:58:35 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LtMgE-0001IE-Uo; Mon, 13 Apr 2009 13:58:34 +0000 Date: Mon, 13 Apr 2009 09:58:34 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix async io error handling in fsx Subject: Re: [PATCH] xfstests: fix async io error handling in fsx Message-ID: <20090413135834.GA3196@infradead.org> References: <1239031576-26279-1-git-send-email-felixb@sgi.com> <20090406163331.GA22240@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090406163331.GA22240@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239631115 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Apr 06, 2009 at 12:33:31PM -0400, Christoph Hellwig wrote: > On Mon, Apr 06, 2009 at 10:26:16AM -0500, Felix Blyakher wrote: > > The result of async io returned in the event.res in addition > > to the number of bytes read/written provides negated error > > number. The broken libaio defines event.res as unsigned > > while the same structure in the kernel defines it as signed. > > The kernel indeed treats it as signed, and returns the > > negated error number. Till libaio is fixed we provide > > the signed long temp var. > > Also set errno for each error condition in aio_rw, as the > > caller is not aio aware and expects ret(-1)+errno by the > > traditional libc convention. > > Looks good. > > Reviewed-by: Christoph Hellwig Do you plan to commit this? Otherwise I'll just suck it into the xfstests-dev tree. From trx.lists@gmail.com Mon Apr 13 09:13:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_00,HTML_MESSAGE, LOCALPART_IN_SUBJECT autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DEDXxj111655 for ; Mon, 13 Apr 2009 09:13:44 -0500 X-ASG-Debug-ID: 1239631994-02f501210000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-ew0-f158.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EA6BC20DC2A for ; Mon, 13 Apr 2009 07:13:15 -0700 (PDT) Received: from mail-ew0-f158.google.com (mail-ew0-f158.google.com [209.85.219.158]) by cuda.sgi.com with ESMTP id i82hJUEu98TTYtwV for ; Mon, 13 Apr 2009 07:13:15 -0700 (PDT) Received: by ewy2 with SMTP id 2so2505844ewy.20 for ; Mon, 13 Apr 2009 07:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=+LuTODc8w3jx2VveiXR9b0OWvAvGigJZCBRntKh5VnQ=; b=KxKN5QxoG+J57c5YEb/2esmFefQO5OX48vSW8ODpXMbEO1+xVea58qk1206SiDo4hY 9JJnk55y2L0K2WvoJAiRfJfWZjktm11SZlZW9wUbU5uM3miRf0GScA5gHjxZK7+zlfJT N+tBOtgLDA88GmE4ezByWRcEqKFuijviGMPN8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=Rs15+5OJCNr5+VDA0JAAIZ/ktuq41fATpDuCDW/6vFCrsj30bUgjHwghoi77wrCXBB y7NN/FRQ9E/LcL7B5mPb/RTWHodORRmh5rEIPsreF+gy5/CeXK3h0QpNsgMMlCo/3Kzd gAvDn3ZwnbD6pTxOPaIgtJCHOIGlBhxfqWxMY= MIME-Version: 1.0 Received: by 10.210.91.17 with SMTP id o17mr1990236ebb.92.1239631994260; Mon, 13 Apr 2009 07:13:14 -0700 (PDT) Date: Mon, 13 Apr 2009 16:13:14 +0200 Message-ID: X-ASG-Orig-Subj: xfs - fixing wrong xfs size Subject: xfs - fixing wrong xfs size From: Nebojsa Trpkovic To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0015174c3e9eab8dac04677050a7 X-Barracuda-Connect: mail-ew0-f158.google.com[209.85.219.158] X-Barracuda-Start-Time: 1239631995 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.02 X-Barracuda-Spam-Status: No, SCORE=-1.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=HTML_MESSAGE, LOCALPART_IN_SUBJECT, LOCALPART_IN_SUBJECT_2 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23065 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 LOCALPART_IN_SUBJECT Local part of To: address appears in Subject 0.00 HTML_MESSAGE BODY: HTML included in message 1.00 LOCALPART_IN_SUBJECT_2 Local part of To: address appears in Subject X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0015174c3e9eab8dac04677050a7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit hello. I had problem with raid5 on my system. after recovering of the array, I can not mount XFS that resides on it. I've run xfs_check and xfs_repair (which fixed some errors) and now I can run them all day long without any errors. but, when I try to mount that partition, I get: mount: /dev/md0: can't read superblock and there's Filesystem "md0": Disabling barriers, not supported by the underlying device attempt to access beyond end of device md0: rw=0, want=123024384, limit=123023488 I/O error in filesystem ("md0") meta-data dev md0 block 0x75533f8 ("xfs_read_buf") error 5 buf count 4096 XFS: size check 2 failed in the dmesg. is there any way to "fix" this wrong size of XFS ? thx. --0015174c3e9eab8dac04677050a7 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable hello.

I had problem with raid5 on my system.
after recovering o= f the array, I can not mount XFS that resides on it.
I've run xfs_ch= eck and xfs_repair (which fixed some errors) and now I can run them all day= long without any errors.

but, when I try to mount that partition, I get:

mount: /dev/md0=
: can't read superblock

and there's

Filesystem "md0": Disabling barriers=
, not supported by the underlying device
attempt to access beyond end of device
md0: rw=3D0, want=3D123024384, li= mit=3D123023488
I/O error in filesystem ("md0") meta-data dev = md0 block 0x75533f8 ("xfs_read_buf") error 5 buf count 4096=
XFS: size check 2 failed


in the dmesg.


is there any= way to "fix" this wrong size of XFS ?

thx.


--0015174c3e9eab8dac04677050a7-- From sandeen@sandeen.net Mon Apr 13 10:03:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DF2h7N115147 for ; Mon, 13 Apr 2009 10:02:53 -0500 X-ASG-Debug-ID: 1239634945-377a01ca0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 56E191CB8819 for ; Mon, 13 Apr 2009 08:02:26 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id KajmLPIAhBunDsgB for ; Mon, 13 Apr 2009 08:02:26 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 974AAAA60C0; Mon, 13 Apr 2009 10:02:22 -0500 (CDT) Message-ID: <49E353FD.5060207@sandeen.net> Date: Mon, 13 Apr 2009 10:02:21 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Nebojsa Trpkovic CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs - fixing wrong xfs size Subject: Re: xfs - fixing wrong xfs size References: 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: 1239634946 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23069 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Nebojsa Trpkovic wrote: > hello. > > I had problem with raid5 on my system. > after recovering of the array, I can not mount XFS that resides on it. > I've run xfs_check and xfs_repair (which fixed some errors) and now I > can run them all day long without any errors. > > but, when I try to mount that partition, I get: > > mount: /dev/md0: can't read superblock > > > and there's > > Filesystem "md0": Disabling barriers, not supported by the underlying device > > attempt to access beyond end of device > md0: rw=0, want=123024384, limit=123023488 > I/O error in filesystem ("md0") meta-data dev md0 block 0x75533f8 ("xfs_read_buf") error 5 buf count 4096 > > XFS: size check 2 failed So, the superblock says that the fs is 896 1k-blocks longer than the device actually is. > in the dmesg. > > > is there any way to "fix" this wrong size of XFS ? hard to say, almost certainly sounds like an md problem; is there a chance that your raid recovery led to a device which is somehow smaller than it started? You could change the superblock block-count value, but I'm guessing that something else has gone wrong. It might be useful to know what errors xfs_repair found. -Eric From trx.lists@gmail.com Mon Apr 13 11:34:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: * X-Spam-Status: No, score=1.9 required=5.0 tests=AWL,BAYES_00,HTML_MESSAGE, SUBJ_FORWARDED autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DGYZix120022 for ; Mon, 13 Apr 2009 11:34:45 -0500 X-ASG-Debug-ID: 1239640436-030703920000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-ew0-f158.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B1C4920DF81 for ; Mon, 13 Apr 2009 09:33:56 -0700 (PDT) Received: from mail-ew0-f158.google.com (mail-ew0-f158.google.com [209.85.219.158]) by cuda.sgi.com with ESMTP id L4qav8Wf9f6CdMHo for ; Mon, 13 Apr 2009 09:33:56 -0700 (PDT) Received: by ewy2 with SMTP id 2so2596952ewy.20 for ; Mon, 13 Apr 2009 09:33:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=uNgMi+AP9UJRdedBDeXjixSgWm+11xkBsx62Oidh1uA=; b=cChAqHwdt52t4iej6XNJz1A+VN5jsCvfYMoIWxGMROc6tf1ONfJYYxhiDYYO9KfyBY 6QZnWSs+SmT+MFNsu0BVzpfFhI0xTBqGALzWUkXV0HGCkppq4bbEYyfbrvoKJtAZPdxo uQPFKp9iyB70it5/ZFYN0FRSkCyCrWojRWVqY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=QFXx4WCj3dHHtP/+UjgThd+dlVwkwi+HgoQSLtpLTm3OkMUd/BnImsFYb4sP1T799r sQ+oemJFJBxzf9HkrL6BkDp95plYgwOCgMrgt4Pn3+jMcs8CdhcOi4rqVgo0dKEh8VfO uihgXk7Tf+Y9LcsTr158d6hXnnkdndXRxY6bM= MIME-Version: 1.0 Received: by 10.210.89.4 with SMTP id m4mr4768036ebb.95.1239640436042; Mon, 13 Apr 2009 09:33:56 -0700 (PDT) In-Reply-To: References: <49E353FD.5060207@sandeen.net> Date: Mon, 13 Apr 2009 18:33:55 +0200 Message-ID: X-ASG-Orig-Subj: Fwd: xfs - fixing wrong xfs size Subject: Fwd: xfs - fixing wrong xfs size From: Nebojsa Trpkovic To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=0015174bde84d709a9046772475a X-Barracuda-Connect: mail-ew0-f158.google.com[209.85.219.158] X-Barracuda-Start-Time: 1239640457 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0006 1.0000 -2.0174 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-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.2, rules version 3.2.1.23075 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --0015174bde84d709a9046772475a Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On Mon, Apr 13, 2009 at 5:02 PM, Eric Sandeen wrote: > Nebojsa Trpkovic wrote: > > hello. > > > > I had problem with raid5 on my system. > > after recovering of the array, I can not mount XFS that resides on it. > > I've run xfs_check and xfs_repair (which fixed some errors) and now I > > can run them all day long without any errors. > > > > but, when I try to mount that partition, I get: > > > > mount: /dev/md0: can't read superblock > > > > > > and there's > > > > Filesystem "md0": Disabling barriers, not supported by the underlying > device > > > > attempt to access beyond end of device > > md0: rw=0, want=123024384, limit=123023488 > > I/O error in filesystem ("md0") meta-data dev md0 block 0x75533f8 > > ("xfs_read_buf") error 5 buf count 4096 > > > > XFS: size check 2 failed > > So, the superblock says that the fs is 896 1k-blocks longer than the > device actually is. > > > in the dmesg. > > > > > > is there any way to "fix" this wrong size of XFS ? > > hard to say, almost certainly sounds like an md problem; is there a > chance that your raid recovery led to a device which is somehow smaller > than it started? You could change the superblock block-count value, but > I'm guessing that something else has gone wrong. > > It might be useful to know what errors xfs_repair found. > > -Eric > thx for quick reply. yes, I definitely had md problem - my raid5 made of 6 drives connected to ICH9R and 2 drives connected to the masterpeace of hardware called JMicron fell apart when later one just stopped working out of nowhere. after reboot, JMicron worked well, but raid was out of sync with 2 members failed. I've zeroed superblocks of raid partitions and created new one with "assume-clear". partition tables stayed intact - I had no need to change anything in them. that worked fine with /dev/md1 wich had reiserfs: after long and slow reiserfs --rebuild-tree I'm able to access all files on that partition. unforutuately, I have no way to mount xfs partition although xfs_check and xfs_repair give no errors (I had to run xfs_repair -L /dev/md0 to get in this error-free situation). how can I set superblock block-count value (now I have realy nothing to loose - the only other option is to give up of that data) ? --0015174bde84d709a9046772475a Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
On Mon, Apr 13, 2009 at 5:02 PM, Eric Sandeen <sandeen@sand= een.net> wrote:
Nebojsa Trpkovic wrote:
> hello.
>
> I had problem with raid5 on my system.
> after recovering of the array, I can not mount XFS that resides on it.=
> I've run xfs_check and xfs_repair (which fixed some errors) and no= w I
> can run them all day long without any errors.
>
> but, when I try to mount that partition, I get:
>
> mount: /dev/md0: can't read superblock
>
>
> and there's
>
> Filesystem "md0": Disabling barriers, not supported by the u= nderlying device
>
> attempt to access beyond end of device
> md0: rw=3D0, want=3D123024384, limit=3D123023488
> I/O error in filesystem ("md0") meta-data dev md0 block 0x75= 533f8

=A0 =A0 =A0 ("xfs_read_buf") error 5 buf count 4096
>
> XFS: size check 2 failed

So, the superblock says that the fs is 896 1k-blocks longer than the<= br> device actually is.

> in the dmesg.
>
>
> is there any way to "fix" this wrong size of XFS ?

hard to say, almost certainly sounds like an md problem; is there a chance that your raid recovery led to a device which is somehow smaller
than it started? =A0You could change the superblock block-count value, but<= br> I'm guessing that something else has gone wrong.

It might be useful to know what errors xfs_repair found.

-Eric


thx for quick reply.

y= es, I definitely had md problem - my raid5 made of 6 drives connected to IC= H9R and 2 drives connected to the masterpeace of hardware called JMicron fe= ll apart when later one just stopped working out of nowhere. after reboot, = JMicron worked well, but raid was out of sync with 2 members failed. I'= ve zeroed superblocks of raid partitions and created new one with "ass= ume-clear". partition tables stayed intact - I had no need to change a= nything in them. that worked fine with /dev/md1 wich had reiserfs: after lo= ng and slow reiserfs --rebuild-tree I'm able to access all files on tha= t partition. unforutuately, I have no way to mount xfs partition although x= fs_check and xfs_repair give no errors (I had to run xfs_repair -L /dev/md0= to get in this error-free situation).

how can I set superblock block-count value (now I have realy nothing to= loose - the only other option is to give up of that data) ?



--0015174bde84d709a9046772475a-- From stuart.menefy@st.com Mon Apr 13 12:43:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DHgdZv123409 for ; Mon, 13 Apr 2009 12:42:50 -0500 X-ASG-Debug-ID: 1239644537-145e02f10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from eu1sys200aog111.obsmtp.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D650820E6BE for ; Mon, 13 Apr 2009 10:42:17 -0700 (PDT) Received: from eu1sys200aog111.obsmtp.com (eu1sys200aog111.obsmtp.com [207.126.144.131]) by cuda.sgi.com with ESMTP id IdM0ikBDp2RNKBvb for ; Mon, 13 Apr 2009 10:42:17 -0700 (PDT) Received: from source ([164.129.1.35]) (using TLSv1) by eu1sys200aob111.postini.com ([207.126.147.11]) with SMTP ID DSNKSeN5eMDfS0pAy2KQcl0yO+oFSeKRJmYi@postini.com; Mon, 13 Apr 2009 17:42:18 UTC Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 94215DA4B for ; Mon, 13 Apr 2009 17:41:01 +0000 (GMT) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 573DC4C3E9 for ; Mon, 13 Apr 2009 17:42:11 +0000 (GMT) Received: from adelie.bri.st.com (adelie.bri.st.com [164.129.14.72]) by mail1.bri.st.com (MOS 3.8.7a) with ESMTP id CLM70355 (AUTH stuart); Mon, 13 Apr 2009 18:42:10 +0100 (BST) Message-ID: <49E37972.1070101@st.com> Date: Mon, 13 Apr 2009 18:42:10 +0100 From: Stuart MENEFY User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Help debugging a use after free Subject: Help debugging a use after free X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: eu1sys200aog111.obsmtp.com[207.126.144.131] X-Barracuda-Start-Time: 1239644541 X-Barracuda-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.2, rules version 3.2.1.23079 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Folks For the last few days I've been trying to debug an apparent use after free in XFS code. This is in a 2.6.23.17 kernel on an SH4 processor, so this could easily be an XFS problem which has already been solved, or an architecture problem. This started because I've been trying to work around the D-cache aliasing problems which the SH4 suffers from because of XFS's use of vmap, so its also possible this is an obscure aliasing problem. I've also been unable to reproduce it on an x86_64, albeit with a slightly later kernel. The problem occurs when running a loop which is essentially: mount /dev/sda1 /mnt bonnie++ -u root -f -s0 -n16:1024:1024 -b -d /mnt umount /mnt on an otherwise clean partition, and usually takes at least 24 hours to appear. The problem only occurs with SLAB poisoning enabled, and results in a misaligned access because the poison value when treated as a pointer is an illegal misaligned: Unaligned kernel access on behalf of "bonnie++" pid=22419 pc=0x841a6c6c ins=0x8433 Pid : 22419, Comm: bonnie++ PC is at xfs_trans_unlocked_item+0xc/0x60 PC : 841a6c6c SP : 87f29d3c SR : 40008000 TEA : 00402ebe Not tainted R0 : 00000000 R1 : 841a6c60 R2 : 87f28000 R3 : 00000001 R4 : 6b6b6b6b R5 : 6b6b6b6b R6 : 843342ac R7 : 840139c0 R8 : 6b6b6b6b R9 : 6b6b6b6b R10 : 878cb000 R11 : 8452eb8c R12 : 00003255 R13 : 00000625 R14 : 87f29d4c MACH: 00000000 MACL: 0df75800 GBR : 297f9658 PR : 84189d20 Call trace: [<84189d20>] xfs_iunlock+0x60/0xc0 [<841915da>] xfs_inode_item_push+0x1a/0x40 [<841a6ff4>] xfs_trans_push_ail+0x1b4/0x240 [<841971b6>] xlog_grant_push_ail+0xf6/0x180 [<8419961c>] xfs_log_reserve+0x3c/0xc0 [<841a540a>] xfs_trans_reserve+0x8a/0x220 [<8418d6f0>] xfs_itruncate_finish+0x170/0x420 [<841a7de0>] xfs_trans_ihold+0x0/0x20 [<841a7de0>] xfs_trans_ihold+0x0/0x20 [<841a7e60>] xfs_trans_ijoin+0x0/0xa0 [<841b112a>] xfs_inactive+0x3ea/0x500 [<84189da0>] xfs_ilock+0x0/0xe0 [<841bf75c>] xfs_fs_clear_inode+0x3c/0xa0 [<843379a0>] _spin_unlock+0x0/0x60 [<840818da>] clear_inode+0x5a/0x140 [<84081a92>] generic_delete_inode+0xd2/0x120 [<84081bc6>] generic_drop_inode+0xe6/0x1c0 [<84080e2e>] iput+0x4e/0x80 [<840764ba>] do_unlinkat+0xfa/0x1a0 [<8408fdba>] do_fsync+0x7a/0xe0 [<8408fe40>] __do_fsync+0x20/0x60 [<8407656e>] sys_unlink+0xe/0x20 [<84076560>] sys_unlink+0x0/0x20 [<840088f8>] syscall_call+0xa/0xe (Note that due to the way backtrace is implemented on SH architectures there are spurious values in this backtrace, so it is probably safe to ignore any entries of the form FN+0x0.) The problem is caused by the "xfs_inode_t" which is passed into xfs_iunlock() having already been freed at the SLAB level. Putting some additional tracing code into the free path, this structure is being freed by xfs_inode_item_destroy(), which is called from from xfs_idestroy() which is called from xfs_ireclaim(). In between the free and use there appears to be some disk activity, as I see an allocate from the SCSI layer, plus a few other kmalloc and kfree's. Running with XFS_DEBUG enabled hasn't shown any problems, and still failed in the same way. So, does this sound like a problem which has been seen before? Alternatively can anyone suggest what would normally prevent this happening, and I can look into that (although I know next to nothing about the guts of the XFS code, so please don't be afraid to state the obvious!). Or any other suggestions welcome. Stuart From felixb@sgi.com Mon Apr 13 16:16:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DLGXrl132487 for ; Mon, 13 Apr 2009 16:16:44 -0500 Received: from attica.americas.sgi.com (attica.americas.sgi.com [128.162.236.44]) by relay3.corp.sgi.com (Postfix) with ESMTP id E4C9FAC01A for ; Mon, 13 Apr 2009 14:16:16 -0700 (PDT) Received: by attica.americas.sgi.com (Postfix, from userid 29043) id A986BA24F540; Mon, 13 Apr 2009 16:09:39 -0500 (CDT) Date: Mon, 13 Apr 2009 16:09:39 -0500 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.30-rc2 User-Agent: Heirloom mailx 12.2 01/07/07 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20090413210939.A986BA24F540@attica.americas.sgi.com> From: felixb@sgi.com (Felix Blyakher) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The following changes since commit 62b8e680e61d3f48f2a12ee248ca03ea8f376926: David Howells (1): MN10300: Kill MN10300's own profiling Kconfig are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Dave Chinner (9): xfs: validate log feature fields correctly xfs: fix double free of inode xfs: prevent unwritten extent conversion from blocking I/O completion xfs: inform the xfsaild of the push target before sleeping xfs: use xfs_sync_inodes() for device flushing xfs: make inode flush at ENOSPC synchronous xfs: block callers of xfs_flush_inodes() correctly xfs: flush delayed allcoation blocks on ENOSPC in create xfs: remove xfs_flush_space Felix Blyakher (1): Merge branch 'master' into for-linus fs/xfs/linux-2.6/xfs_aops.c | 38 +++++++++++--------- fs/xfs/linux-2.6/xfs_aops.h | 1 + fs/xfs/linux-2.6/xfs_buf.c | 9 +++++ fs/xfs/linux-2.6/xfs_fs_subr.c | 14 ++++---- fs/xfs/linux-2.6/xfs_lrw.c | 18 +++++++++- fs/xfs/linux-2.6/xfs_sync.c | 78 +++++++++++++++++----------------------- fs/xfs/linux-2.6/xfs_sync.h | 9 +++-- fs/xfs/xfs_iget.c | 23 +++++++----- fs/xfs/xfs_iomap.c | 61 ++++++++----------------------- fs/xfs/xfs_iomap.h | 3 +- fs/xfs/xfs_log.c | 78 +++++++++++++++++++++++++--------------- fs/xfs/xfs_mount.h | 2 +- fs/xfs/xfs_vnodeops.c | 7 ++++ 13 files changed, 180 insertions(+), 161 deletions(-) From sandeen@sandeen.net Mon Apr 13 16:49:17 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3DLmvt3133886 for ; Mon, 13 Apr 2009 16:49:07 -0500 X-ASG-Debug-ID: 1239659419-2573024b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 446CB141AB2F for ; Mon, 13 Apr 2009 14:50:19 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id LZxbzOTlFI3JTD3O for ; Mon, 13 Apr 2009 14:50:19 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 8110FAA60C0; Mon, 13 Apr 2009 16:48:18 -0500 (CDT) Message-ID: <49E3B321.3060605@sandeen.net> Date: Mon, 13 Apr 2009 16:48:17 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Kevin Xu CC: xfscn@googlegroups.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH]fix fbno in xfs_dir2_node_addname_int Subject: Re: [PATCH]fix fbno in xfs_dir2_node_addname_int References: <47E5A982.8010002@gmail.com> In-Reply-To: <47E5A982.8010002@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: 1239659440 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23096 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Kevin Xu wrote: > if we didn't find a freespace block for our new entry in the current > freeindex block, > return to the first freeindex block and continue to check. > Kevin, you sent this and another patch a while ago, and we had asked for more information in the changelogs, a Signed-off-by: line, and a testcase if at all possible. Any chance that you can provide these things? Thanks, -Eric From knikanth@suse.de Tue Apr 14 06:11:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3EBAeVq182391 for ; Tue, 14 Apr 2009 06:10:51 -0500 X-ASG-Debug-ID: 1239707403-62ba02f10000-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 0624D211B2C; Tue, 14 Apr 2009 04:10:03 -0700 (PDT) Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id FoEMMjAJvYxVrrBN; Tue, 14 Apr 2009 04:10:03 -0700 (PDT) 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 020578640B; Tue, 14 Apr 2009 13:10:03 +0200 (CEST) From: Nikanth Karthikesan Organization: suse.de X-ASG-Orig-Subj: [PATCH 5/6] Handle possible bio_alloc failure in xfs Subject: [PATCH 5/6] Handle possible bio_alloc failure in xfs Date: Tue, 14 Apr 2009 16:36:45 +0530 User-Agent: KMail/1.11.1 (Linux/2.6.27.21-0.1-default; KDE/4.2.1; x86_64; ; ) MIME-Version: 1.0 Content-Disposition: inline To: xfs-masters@oss.sgi.com Cc: xfs@oss.sgi.com, linux-kernel@vger.kernel.org, Jens Axboe Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Message-Id: <200904141636.45463.knikanth@suse.de> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1239707424 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23139 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Handle bio_alloc failure in xfs. Signed-off-by: Nikanth Karthikesan --- Index: linux-2.6/fs/xfs/linux-2.6/xfs_buf.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_buf.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_buf.c @@ -1196,6 +1196,8 @@ _xfs_buf_ioapply( (XBF_READ|_XBF_PAGE_LOCKED)) && (blocksize >= PAGE_CACHE_SIZE)) { bio = bio_alloc(GFP_NOIO, 1); + if (unlikely(!bio)) + goto out_enomem; bio->bi_bdev = bp->b_target->bt_bdev; bio->bi_sector = sector - (offset >> BBSHIFT); @@ -1217,6 +1219,9 @@ next_chunk: nr_pages = total_nr_pages; bio = bio_alloc(GFP_NOIO, nr_pages); + if (unlikely(!bio)) + goto out_enomem; + bio->bi_bdev = bp->b_target->bt_bdev; bio->bi_sector = sector; bio->bi_end_io = xfs_buf_bio_end_io; @@ -1247,6 +1252,11 @@ submit_io: bio_put(bio); xfs_buf_ioerror(bp, EIO); } + return; + +out_enomem: + xfs_buf_ioerror(bp, ENOMEM); + } int From niemayer@isg.de Tue Apr 14 09:45:04 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3EEiiKl196450 for ; Tue, 14 Apr 2009 09:44:54 -0500 X-ASG-Debug-ID: 1239720244-759f02ad0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.isg.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 564311CBD47D for ; Tue, 14 Apr 2009 07:44:04 -0700 (PDT) Received: from mail.isg.de (rzfoobar.is-asp.com [217.11.194.155]) by cuda.sgi.com with ESMTP id 3M5KHISXz6MCA3ho for ; Tue, 14 Apr 2009 07:44:04 -0700 (PDT) Received: from embargo.is-teledata.com (unknown [192.168.5.53]) by mail.isg.de (Postfix) with ESMTP id C46371AB57D6; Tue, 14 Apr 2009 16:44:01 +0200 (CEST) Message-ID: <49E4A131.5040309@isg.de> Date: Tue, 14 Apr 2009 16:44:01 +0200 From: Peter Niemayer User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14 MIME-Version: 1.0 Newsgroups: gmane.linux.kernel To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: XFS support for TRIM / blkdev_issue_discard? Subject: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> In-Reply-To: <20090331053013.7642414167108@attica.americas.sgi.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rzfoobar.is-asp.com[217.11.194.155] X-Barracuda-Start-Time: 1239720266 X-Barracuda-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_SC0_SA085, BSF_SC0_SA085b X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23153 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 0.40 BSF_SC0_SA085b Custom Rule SA085b X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Dear Felix Blyakher, do you know whether there are plans to support the ATA TRIM command / blkdev_issue_discard() call in XFS for Linux anytime soon? I ask because as someone who is currently benchmarking solid state disks for certain usage scenarios I noticed that other filesystems are starting to support the discarding of unused blocks, which allows to prevent performance-degradation of SSDs during heavy use. (See e.g. http://www.mail-archive.com/cluster-devel@redhat.com/msg03401.html on the GFS2 support for the discard feature, it seems not too hard to implement the support) Amongst other SSDs, we have one in our tests that supports the ATA TRIM command, and I would like to test the benefits of it, even if that requires me to install an early kernel pre-release. (Currently, XFS is our favorite filesystem for several reasons, so it would be great if we could run our TRIM-support-benchmarks using it) Regards, Peter Niemayer From BATV+884bc5685e7843c777ed+2060+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 14 11:23:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3EGNITv203656 for ; Tue, 14 Apr 2009 11:23:34 -0500 X-ASG-Debug-ID: 1239726181-6c42039d0000-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 F2ABD1CBD7A9; Tue, 14 Apr 2009 09:23:01 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4wDTZvS4LLslSo0k; Tue, 14 Apr 2009 09:23:01 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LtlPZ-00084T-A6; Tue, 14 Apr 2009 16:23:01 +0000 Date: Tue, 14 Apr 2009 12:23:01 -0400 From: Christoph Hellwig To: Nikanth Karthikesan Cc: xfs-masters@oss.sgi.com, Jens Axboe , linux-kernel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 5/6] Handle possible bio_alloc failure in xfs Subject: Re: [PATCH 5/6] Handle possible bio_alloc failure in xfs Message-ID: <20090414162301.GA24967@infradead.org> References: <200904141636.45463.knikanth@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200904141636.45463.knikanth@suse.de> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239726181 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 14, 2009 at 04:36:45PM +0530, Nikanth Karthikesan wrote: > Handle bio_alloc failure in xfs. > > Signed-off-by: Nikanth Karthikesan NAK, as already explained by Jens. From felixb@sgi.com Tue Apr 14 13:35:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3EIYr1R210584 for ; Tue, 14 Apr 2009 13:35:04 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 79AB38F80D7 for ; Tue, 14 Apr 2009 11:34:37 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id A92837000103; Tue, 14 Apr 2009 13:32:35 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Peter Niemayer In-Reply-To: <49E4A131.5040309@isg.de> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: XFS support for TRIM / blkdev_issue_discard? Date: Tue, 14 Apr 2009 13:32:35 -0500 References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 14, 2009, at 9:44 AM, Peter Niemayer wrote: > Dear Felix Blyakher, Hi Peter, > do you know whether there are plans to support the ATA TRIM command / > blkdev_issue_discard() call in XFS for Linux anytime soon? This topic was indeed brought up in xfs discussions. Though, we don't have any definite plans on supporting it yet. That doesn't mean that we oppose to it, just the lack of resources at the moment. Your mail will bring it up for discussion again. Stay tuned, Felix > > > I ask because as someone who is currently benchmarking solid state > disks > for certain usage scenarios I noticed that other filesystems are > starting > to support the discarding of unused blocks, which allows to prevent > performance-degradation of SSDs during heavy use. > (See e.g. http://www.mail-archive.com/cluster-devel@redhat.com/msg03401.html > on the GFS2 support for the discard feature, it seems not too hard > to implement the support) > > Amongst other SSDs, we have one in our tests that supports the ATA > TRIM command, > and I would like to test the benefits of it, even if that requires me > to install an early kernel pre-release. > > (Currently, XFS is our favorite filesystem for several reasons, so > it would > be great if we could run our TRIM-support-benchmarks using it) > > Regards, > > Peter Niemayer From cattelan@thebarn.com Tue Apr 14 14:11:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3EJAmsS212613 for ; Tue, 14 Apr 2009 14:11:03 -0500 X-ASG-Debug-ID: 1239736334-063d01400000-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 9F4DF141F630 for ; Tue, 14 Apr 2009 12:12:15 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id 1mKBXqVg00pXGrb2 for ; Tue, 14 Apr 2009 12:12:15 -0700 (PDT) Received: from Russell-Cattelans-MacBook.local (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3EJA4tE015840; Tue, 14 Apr 2009 14:10:05 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <49E4DF8C.4050800@thebarn.com> Date: Tue, 14 Apr 2009 14:10:04 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Stuart MENEFY CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> In-Reply-To: <49E37972.1070101@st.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1239736356 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23172 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Stuart MENEFY wrote: > Folks > > For the last few days I've been trying to debug an apparent use > after free in XFS code. This is in a 2.6.23.17 kernel on an SH4 > processor, so this could easily be an XFS problem which has already > been solved, or an architecture problem. This started because I've > been trying to work around the D-cache aliasing problems which the > SH4 suffers from because of XFS's use of vmap, so its also possible > this is an obscure aliasing problem. I've also been unable to > reproduce it on an x86_64, albeit with a slightly later kernel. > > The problem occurs when running a loop which is essentially: mount > /dev/sda1 /mnt bonnie++ -u root -f -s0 -n16:1024:1024 -b -d /mnt > umount /mnt on an otherwise clean partition, and usually takes at > least 24 hours to appear. The problem only occurs with SLAB > poisoning enabled, and results in a misaligned access because the > poison value when treated as a pointer is an illegal misaligned: > > Unaligned kernel access on behalf of "bonnie++" pid=22419 > pc=0x841a6c6c ins=0x8433 Pid : 22419, Comm: bonnie++ PC > is at xfs_trans_unlocked_item+0xc/0x60 PC : 841a6c6c SP : > 87f29d3c SR : 40008000 TEA : 00402ebe Not tainted R0 : > 00000000 R1 : 841a6c60 R2 : 87f28000 R3 : 00000001 R4 : > 6b6b6b6b R5 : 6b6b6b6b R6 : 843342ac R7 : 840139c0 R8 : > 6b6b6b6b R9 : 6b6b6b6b R10 : 878cb000 R11 : 8452eb8c R12 : > 00003255 R13 : 00000625 R14 : 87f29d4c MACH: 00000000 MACL: > 0df75800 GBR : 297f9658 PR : 84189d20 > > Call trace: [<84189d20>] xfs_iunlock+0x60/0xc0 [<841915da>] > xfs_inode_item_push+0x1a/0x40 [<841a6ff4>] > xfs_trans_push_ail+0x1b4/0x240 [<841971b6>] > xlog_grant_push_ail+0xf6/0x180 [<8419961c>] > xfs_log_reserve+0x3c/0xc0 [<841a540a>] xfs_trans_reserve+0x8a/0x220 > [<8418d6f0>] xfs_itruncate_finish+0x170/0x420 [<841a7de0>] > xfs_trans_ihold+0x0/0x20 [<841a7de0>] xfs_trans_ihold+0x0/0x20 > [<841a7e60>] xfs_trans_ijoin+0x0/0xa0 [<841b112a>] > xfs_inactive+0x3ea/0x500 [<84189da0>] xfs_ilock+0x0/0xe0 > [<841bf75c>] xfs_fs_clear_inode+0x3c/0xa0 [<843379a0>] > _spin_unlock+0x0/0x60 [<840818da>] clear_inode+0x5a/0x140 > [<84081a92>] generic_delete_inode+0xd2/0x120 [<84081bc6>] > generic_drop_inode+0xe6/0x1c0 [<84080e2e>] iput+0x4e/0x80 > [<840764ba>] do_unlinkat+0xfa/0x1a0 [<8408fdba>] do_fsync+0x7a/0xe0 > [<8408fe40>] __do_fsync+0x20/0x60 [<8407656e>] sys_unlink+0xe/0x20 > [<84076560>] sys_unlink+0x0/0x20 [<840088f8>] syscall_call+0xa/0xe > > > (Note that due to the way backtrace is implemented on SH > architectures there are spurious values in this backtrace, so it is > probably safe to ignore any entries of the form FN+0x0.) > > The problem is caused by the "xfs_inode_t" which is passed into > xfs_iunlock() having already been freed at the SLAB level. Putting > some additional tracing code into the free path, this structure is > being freed by xfs_inode_item_destroy(), which is called from from > xfs_idestroy() which is called from xfs_ireclaim(). I guess the first question is which thread has actually free'ed the inode? it sounds like a race that seems unlikely unless you are on a multi processor system. I don't know anything about the SH4 architecture but I assume this is a single processor system? If you can instrument actually free that is causing the problem it would be good to print out the actually pid doing the free and as many return addresses that you can, so we can get an idea of the actual call chain. > > In between the free and use there appears to be some disk activity, > as I see an allocate from the SCSI layer, plus a few other kmalloc > and kfree's. > > Running with XFS_DEBUG enabled hasn't shown any problems, and still > failed in the same way. I wouldn't expect XFS_DEBUG to point out anything particularly interesting in this area, but it never hurts to try. > > So, does this sound like a problem which has been seen before? > Alternatively can anyone suggest what would normally prevent this > happening, and I can look into that (although I know next to > nothing about the guts of the XFS code, so please don't be afraid > to state the obvious!). Or any other suggestions welcome. > > Stuart > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJ5N+LNRmM+OaGhBgRAn8vAJoCUKDPYWEyZlXs+PgwASpXSfLT9gCfRQja 9TX1Y/ntxb8Ux9pzvg3V0Yg= =2Rcd -----END PGP SIGNATURE----- From bemossedxzyyv@embedmore-talent-2ourworld.cn Tue Apr 14 20:26:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=BAYES_40 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3F1QMVO239278 for ; Tue, 14 Apr 2009 20:26:33 -0500 X-ASG-Debug-ID: 1239758735-5cd902490002-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from embedmore-talent-2ourworld.cn (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 4415F1CC0061; Tue, 14 Apr 2009 18:26:03 -0700 (PDT) Received: from embedmore-talent-2ourworld.cn (BeaverNet-161.caltech.edu [131.215.220.161]) by cuda.sgi.com with SMTP id JRI3f8XWewfeOtES; Tue, 14 Apr 2009 18:26:03 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s168111; d=embedmore-talent-2ourworld.cn; h=Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Cc:Subject:Content-Type:Content-Transfer-Encoding; b=QDO1ou7KjGkUkUeaV6KNnFSRNlGFfqLScgV0rPg11LxNKf4IS5ZjduCm2u897doN9Opqtp70bgt7BK4HLU2lyg==; Message-ID: Date: Wed, 15 Apr 2009 02:04:18 +0100 From: "Joseph" User-Agent: Mozilla 4.7 [en] (Win98; I) X-Accept-Language: en-us MIME-Version: 1.0 To: "Walter" Cc: "Patrick" X-ASG-Orig-Subj: No time left Subject: No time left Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Barracuda-Connect: BeaverNet-161.caltech.edu[131.215.220.161] X-Barracuda-Start-Time: 1239758764 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4581 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23196 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Guess what his brother has found last Friday? www.embedmore-talent-2ourworld.cn mass rid tree "As for me, my heart shock is overflowing with happiness sip drop "Yes, cup yes, hurt yes," motioned the invalid. From knikanth@suse.de Wed Apr 15 00:10:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3F5AaEP247404 for ; Wed, 15 Apr 2009 00:10:46 -0500 X-ASG-Debug-ID: 1239772198-3e3401f60000-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 C2EEB1CC0769; Tue, 14 Apr 2009 22:09:58 -0700 (PDT) Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id 4PtVY6DhHdQJw0ji; Tue, 14 Apr 2009 22:09:58 -0700 (PDT) Received: from Relay2.suse.de (mail2.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 6238679727; Wed, 15 Apr 2009 07:09:55 +0200 (CEST) From: Nikanth Karthikesan Organization: suse.de To: xfs-masters@oss.sgi.com X-ASG-Orig-Subj: [PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Subject: [PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Date: Wed, 15 Apr 2009 10:36:48 +0530 User-Agent: KMail/1.11.1 (Linux/2.6.27.21-0.1-default; KDE/4.2.1; x86_64; ; ) Cc: xfs@oss.sgi.com, Christoph Hellwig MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904151036.49241.knikanth@suse.de> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1239772219 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23210 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Remove code handling bio_alloc failure with __GFP_WAIT. GFP_NOIO implies __GFP_WAIT. Signed-off-by: Nikanth Karthikesan --- diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 7ec89fc..fb4f516 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@ -421,10 +421,7 @@ xfs_alloc_ioend_bio( struct bio *bio; int nvecs = bio_get_nr_vecs(bh->b_bdev); - do { - bio = bio_alloc(GFP_NOIO, nvecs); - nvecs >>= 1; - } while (!bio); + bio = bio_alloc(GFP_NOIO, nvecs); ASSERT(bio->bi_private == NULL); bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9); From SEMA-CR-1-476QIO@ptcmarketing.com Wed Apr 15 03:14:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.1 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3F8DuEa253239 for ; Wed, 15 Apr 2009 03:14:11 -0500 X-ASG-Debug-ID: 1239783346-26e900970000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 95B891421AC5 for ; Wed, 15 Apr 2009 01:15:46 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id 4DW8MaZeBAvAk4mS for ; Wed, 15 Apr 2009 01:15:46 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.40,191,1238990400"; d="scan'208,217";a="296703154" Received: from unknown (HELO HQCRMINT1.ptcnet.ptc.com) ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 15 Apr 2009 03:45:06 -0400 Date: Wed, 15 Apr 2009 03:44:36 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: =?utf-8?q?You=E2=80=99re?= Invited =?utf-8?q?=E2=80=93?= ECAD and MCAD Co-Design Best Practices Forum =?utf-8?q?=E2=80=93?= 05/13/09 Subject: =?utf-8?q?You=E2=80=99re?= Invited =?utf-8?q?=E2=80=93?= ECAD and MCAD Co-Design Best Practices Forum =?utf-8?q?=E2=80=93?= 05/13/09 Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1239781476001_1266893679 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1239783347 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1239781476001_1266893679 Content-Type: text/plain; charset=UTF-8 ECAD and MCAD Co-Design Best Practices Forum PTC and Cadence Design Systems invite you to attend an exclusive co-design educational forum to discuss strategies and practices around ECAD/MCAD/DDM requirements and hear first hand our joint PTC/CDN integration and collaboration plans. Join PTC and Cadence Design Systems for the opportunity to network with peers and discuss industry and market trends. Date: Wednesday, May 13, 2009 Location: Cadence Design Systems, Inc. San Jose, California Agenda: Sign up for one, two or all three sessions! Session 1: What's New in Pro/ENGINEER Wildfire 4.0 Time: 10:00AM - 11:30AM PT Audience: MCAD Users, MCAD Consumers and Managers Focus: Pro/ENGINEER Wildfire 4.0 Modules and ProductView Presenter: Jason Petersen, Senior Generalist Applications Engineer, PTC Session 2: ECAD/MCAD Co-Design Collaboration and Best Practice Disucssion Time: 11:30AM - 1:00PM PT (Lunch will be provided) Audience: ECAD and MCAD Users and Managers Focus: Pro/ENGINEER ECAD-MCAD Collaboration ECX Presenters: Pawel Chadzynski, VP Product Management, PTC Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems Session 3: ECAD Design Review, Change Verification and Design Data Management Time: 1:00PM - 2:30PM PT Audience: ECAD Users, ECAD Data Consumers and ECAD Managers Focus: InterComm Expert Suite, ECAD WGM Suite and Cadence Design Systems Allegro Design Workbench for Library and Design Data Management Presenters: Pawel Chadznski, VP Product Management, PTC Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems Seating is limited! To reserve yours, register today (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-3XZ5Y8&o=1-46K1QB&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90706). =============================================================================== contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-46K1QB&campd=1-3XZ5Y8&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-46K1QB&campd=1-3XZ5Y8&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com edit profile http://www.ptc.com/read?&w=2354034&t=/common/account/index.htm ------------------------------------------------------------------------------- This email was sent to: xfs@oss.sgi.com PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to . --BF_1239781476001_1266893679 Content-Type: text/html; charset=UTF-8 Santa Clara Email 1 NA ECADMCAD Road Show FY09
PTC.com

ECAD and MCAD Co-Design Best Practices Forum

PTC and Cadence Design Systems invite you to attend an exclusive co-design educational forum to discuss strategies and practices around ECAD/MCAD/DDM requirements and hear first hand our joint PTC/CDN integration and collaboration plans. 

Join PTC and Cadence Design Systems for the opportunity to network with peers and discuss industry and market trends.

Date:
Wednesday, May 13, 2009

Location:
Cadence Design Systems, Inc.
San Jose, California

Agenda:
Sign up for one, two or all three sessions!

Session 1:

What's New in Pro/ENGINEER Wildfire 4.0

Time:

10:00AM - 11:30AM PT

Audience:

MCAD Users, MCAD Consumers and Managers

Focus:

Pro/ENGINEER Wildfire 4.0 Modules and ProductView

Presenter:

Jason Petersen, Senior Generalist Applications Engineer, PTC

 

 

Session 2:

ECAD/MCAD Co-Design Collaboration and Best Practice Disucssion

Time:

11:30AM - 1:00PM PT (Lunch will be provided)

Audience:

ECAD and MCAD Users and Managers

Focus:

Pro/ENGINEER ECAD-MCAD Collaboration ECX

Presenters:

Pawel Chadzynski, VP Product Management, PTC

 

Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems

   

Session 3:

ECAD Design Review, Change Verification and Design Data Management

Time:

1:00PM - 2:30PM PT

Audience:

ECAD Users, ECAD Data Consumers and ECAD Managers

Focus:

InterComm Expert Suite, ECAD WGM Suite and Cadence Design Systems Allegro Design Workbench for Library and Design Data Management

Presenters:

Pawel Chadznski, VP Product Management, PTC

 

Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems

Seating is limited! To reserve yours, register today.

contact PTC | privacy policy | unsubscribe | change preferences | edit profile
This email was sent to: xfs@oss.sgi.com     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank email to unsubscribe@ptc.com.
--BF_1239781476001_1266893679-- From niemayer@isg.de Wed Apr 15 04:44:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3F9iGru255734 for ; Wed, 15 Apr 2009 04:44:27 -0500 X-ASG-Debug-ID: 1239788639-130f00240000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.isg.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 68A42216DFF for ; Wed, 15 Apr 2009 02:43:59 -0700 (PDT) Received: from mail.isg.de (rzfoobar.is-asp.com [217.11.194.155]) by cuda.sgi.com with ESMTP id AsEIGazili25m9HP for ; Wed, 15 Apr 2009 02:43:59 -0700 (PDT) Received: from embargo.is-teledata.com (unknown [192.168.5.53]) by mail.isg.de (Postfix) with ESMTP id 32F9F1AB6D72; Wed, 15 Apr 2009 11:43:58 +0200 (CEST) Message-ID: <49E5AC5E.90103@isg.de> Date: Wed, 15 Apr 2009 11:43:58 +0200 From: Peter Niemayer User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14 MIME-Version: 1.0 To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rzfoobar.is-asp.com[217.11.194.155] X-Barracuda-Start-Time: 1239788640 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23227 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: >> do you know whether there are plans to support the ATA TRIM command / >> blkdev_issue_discard() call in XFS for Linux anytime soon? > > This topic was indeed brought up in xfs discussions. > Though, we don't have any definite plans on supporting it yet. > That doesn't mean that we oppose to it, just the lack of > resources at the moment. > Your mail will bring it up for discussion again. Thanks a lot for your information! Of course, I volunteer to help with testing & qualified feed-back. I might even help with the implementation if you can tell me where to look for the (hopefully well defined ;-) place in the filesystem code where sectors become known not to contain relevant data anymore. But since I'm unfamiliar with kernel-filesystem programming, it might take longer answering my questions then somebody involved with XFS already would need to insert the blkdev_issue_discard() calls. Regards, Peter Niemayer From knikanth@suse.de Wed Apr 15 05:42:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3FAgV9A257560 for ; Wed, 15 Apr 2009 05:42:41 -0500 X-ASG-Debug-ID: 1239792113-136b00c20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.suse.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D1B3F216FC8; Wed, 15 Apr 2009 03:41:53 -0700 (PDT) Received: from mx1.suse.de (cantor.suse.de [195.135.220.2]) by cuda.sgi.com with ESMTP id 64IUI6oPbsf7Lv5v; Wed, 15 Apr 2009 03:41:53 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from Relay2.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 mx1.suse.de (Postfix) with ESMTP id AA8676CB00; Wed, 15 Apr 2009 12:41:51 +0200 (CEST) To: xfs-masters@oss.sgi.com X-ASG-Orig-Subj: [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Subject: [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Cc: xfs@oss.sgi.com, Christoph Hellwig , Jens Axboe Content-Disposition: inline From: Nikanth Karthikesan Organization: suse.de Date: Wed, 15 Apr 2009 16:09:30 +0530 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <200904151609.30677.knikanth@suse.de> X-Barracuda-Connect: cantor.suse.de[195.135.220.2] X-Barracuda-Start-Time: 1239792134 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Resending as I accidentally missed Jens earlier. Jens, can you merge this as well. Thanks Nikanth Remove code handling bio_alloc failure with __GFP_WAIT. GFP_NOIO implies __GFP_WAIT. Signed-off-by: Nikanth Karthikesan --- diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 7ec89fc..fb4f516 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@ -421,10 +421,7 @@ xfs_alloc_ioend_bio( struct bio *bio; int nvecs = bio_get_nr_vecs(bh->b_bdev); - do { - bio = bio_alloc(GFP_NOIO, nvecs); - nvecs >>= 1; - } while (!bio); + bio = bio_alloc(GFP_NOIO, nvecs); ASSERT(bio->bi_private == NULL); bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9); From niemayer@isg.de Wed Apr 15 06:59:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3FBwfYY260398 for ; Wed, 15 Apr 2009 06:58:51 -0500 X-ASG-Debug-ID: 1239796702-138101c50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.isg.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 478932172E0 for ; Wed, 15 Apr 2009 04:58:22 -0700 (PDT) Received: from mail.isg.de (rzfoobar.is-asp.com [217.11.194.155]) by cuda.sgi.com with ESMTP id VniAPHVRpA6btEda for ; Wed, 15 Apr 2009 04:58:22 -0700 (PDT) Received: from embargo.is-teledata.com (unknown [192.168.5.53]) by mail.isg.de (Postfix) with ESMTP id 25F5E1A97F07; Wed, 15 Apr 2009 13:58:22 +0200 (CEST) Message-ID: <49E5CBDD.3070302@isg.de> Date: Wed, 15 Apr 2009 13:58:21 +0200 From: Peter Niemayer User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14 MIME-Version: 1.0 To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rzfoobar.is-asp.com[217.11.194.155] X-Barracuda-Start-Time: 1239796704 X-Barracuda-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=BSF_SC0_SA085 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23237 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.10 BSF_SC0_SA085 Custom Rule SA085 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean FYI: I added my proposal to the Wiki: http://xfs.org/index.php/Support_discarding_of_unused_sectors (plus a reference at http://xfs.org/index.php/Ideas_for_XFS ) Regards, Peter Niemayer From kirillvyacheslavovich@xx0007xx.net Wed Apr 15 09:56:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.3 required=5.0 tests=BAYES_50,MIME_8BIT_HEADER, MIME_BASE64_BLANKS,MIME_BASE64_TEXT autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3FEudks007800 for ; Wed, 15 Apr 2009 09:56:49 -0500 X-ASG-Debug-ID: 1239807381-704401fc0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from nattytc.frinick.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 7E41A217DF0 for ; Wed, 15 Apr 2009 07:56:21 -0700 (PDT) Received: from nattytc.frinick.com (nattytc.frinick.com [195.209.36.214]) by cuda.sgi.com with SMTP id oKdoMz45dXIXNHK9 for ; Wed, 15 Apr 2009 07:56:21 -0700 (PDT) Received: from rev-net-0e9p-0165-013x-01j5cv5r.mtb ([10.167.41.179]) by nattytc.frinick.com () with ESMTP id 2943076FC6 for ;Wed, 15 Apr 2009 18:55:45 +0400 From: Kirill Vyacheslavovich To: Xfs X-ASG-Orig-Subj: =?Windows-1251?B?x+Di5fD45e3o5SDv8O725fHx4CDv8O7k4OboIPLu4uDw7uIv8/Hr8+Mg?= =?Windows-1251?B?yuvo5e3y8w==?= Subject: =?Windows-1251?B?x+Di5fD45e3o5SDv8O725fHx4CDv8O7k4OboIPLu4uDw7uIv8/Hr8+Mg?= =?Windows-1251?B?yuvo5e3y8w==?= Date: Wed, 15 Apr 2009 18:55:45 +0400 Message-ID: <0007050791.20090415185545@xx0007xx.net> X-Priority: 1 (Highest) X-MSMail-Priority: High X-Mailer: Bad Seeds Importance: High X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1123 Sensitivity: Company-Confidential MIME-Version: 1.0 Content-Type: text/plain; charset=Windows-1251 Content-Transfer-Encoding: base64 X-Barracuda-Connect: nattytc.frinick.com[195.209.36.214] X-Barracuda-Start-Time: 1239807382 X-Barracuda-Bayes: INNOCENT GLOBAL 0.6033 1.0000 0.7648 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 1.29 X-Barracuda-Spam-Status: No, SCORE=1.29 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=MIME_BASE64_BLANKS, MIME_BASE64_TEXT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23249 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 MIME_BASE64_BLANKS RAW: Extra blank lines in base64 encoding 0.52 MIME_BASE64_TEXT RAW: Message text disguised using base64 encoding X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xO7h8PvpIOLl9+XwISD98u4gwfDu7ejx6+DiDQoNCj4gMjgg4O/w5ev/Lg0KICDjLiDK6OXi LCDh8+v84i4g2OXi9+Xt6u4sIDQNCg0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KPiDP8O7k4ujm5e3o5SDy7uLg8O7iIOgg8/Hr8+Mg7eAg8e7i8OXs5e3t7uwg8Pvt 6uU6IOjt7e7i4Pbo7u3t++Ug8fLw4PLl4+joIOgg8uX17e7r7uPo6C4NCiAgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCg0KPiDW5evl4uD/IODz5Ojy7vDo/zoNCiAgUPPq 7uLu5Ojy5evoIOgg7eD34Ov87ejq6CDu8uTl6+7iIO/w7uTg5iDy7uLg8O7iIOgg8/Hr8+Mg 8e7i8OXs5e3t+/Ug6u7s7+Dt6OksIPDg4e7y7ejq6CDu8uTl6+Ag8eH78uAsIA0KICDs5e3l 5Obl8Psg7+4g8ODh7vLlIPEgVklQLSDq6+jl7fLg7OgsIOHw5e3kLezl7eXk5uXw+yDoIOzg 8Orl8u7r7uPoIOru7O/g7ejpLCDt4Pfg6/zt6OroIPHh+/LgIPDu5+3o9+3u6SDoIO7v8u7i 7ukg8u7w4+7i6+guDQogIM7tIO/w5eTt4Oft4Pfl7SDy4Orm5SDk6/8g8uX1LCDq8u4g7eD1 7uTo8vH/IPMgq+jx8u7q7uK7IPDg8erw8/Lq6CDt7uLu6SDy7vDj7uLu6SDs4PDq6CDy7uLg 8OAv8/Hr8+PoLiANCiAgzuTt6Owg8evu4u7sLCDk6/8g8uX1LCDq8u4g8+Hl5uTl7Swg9/Lu IO/w7uTg8vwg7O7m7e4g4vHlLiDN8+bt7iDy7uv86u4g5+3g8vwgys7M0yDoIMrAyi4NCg0K PiDP8O7j8ODs7OANCg0KPiDC4uXk5e3o5S4gz+7k4+7y7uLq4CDqIO/w7uTg5uUg8u7i4PDu 4iDoIPPx6/PjIO3gIPHu4vDl7OXt7e7sIPD77erlDQogIM3u4vvlIPLl7eTl7fbo6CDiIO/w 7uTi6Obl7ejoIPLu4uDw7uIv8/Hr8+Mg7eAg8e7i8OXs5e3t7uwg8Pvt6uUuIMzg8Orl8ujt 4+7i++kg8e/u8CDi5ergIOzl5uTzINQuIMru8uvl8O7sIOggxOYuINLw4PPy7uwuIA0KICDX 8u4g4uDm7eXlOiDv8O7k4ObgIOjr6CDv8O7k4ujm5e3o5T8gz/Du5OLo5uXt6OUg8u7i4PDu 4iDoIPPx6/PjOiDu4fnl5SDoIO7x7uHl7e3u5S4gyu7t9uXv9uj/IPHu4vDl7OXt7e7pIO/w 7uTg5uguIA0KICDP5e3y4OPw4Ozs4CDRLiDD6O3j5fDgLiDA7eDr6PLo9+Xx6ujpIOzu5+Pu 4u7pIPjy8/DsLiA1IO/u6/7x7uIg8e7i8OXs5e3t7uPuIO/w7uTi6Obl7ej/IOgg7/Du5ODm 6CDy7uLg8OAv8/Hr8+PoLg0KDQo+INfg8fL8IDEuIMjk5e7r7uPo9+Xx6ujpIO/u6/7xIO/w 7uTi6Obl7ej/IPLu4uDw4C/z8evz4+gg6u7s7+Dt6OgNCiAglSDD5OUg6PHq4PL8IO/w6Pfo 7fMg7+vu9e7pIPPn7eDi4OXs7vHy6CDy7vDj7uLu6SDs4PDq6D8gwfDl7eTo7ePu4vvlIOjn 7OXw5e3o/yDiIO/w7vbl8fHlIO/w7uTi6Obl7ej/IPLu4uDw4C/z8evz4+guDQogIJUg0O7r /CDv7ufo9uju7ejw7uLg7ej/IOjr6CD96vHq6/7n6OLt+/Ug7/Dl6Ozz+eXx8uIg4iDv8O7k 4ujm5e3o6CDy7vDj7uLu6SDs4PDq6Cwg8u7i4PDgL/Px6/Pj6A0KICCVIMru8O/u8ODy6OLt 4P8g6vPr/PLz8OAg6CD25e3t7vHy6CDq7uzv4O3o6Cwg6u7y7vD75SDi6+j//vIg7eAg8O7x 8iDv8O7k4OYg6CDz5+3g4uDl7O7x8vwg8u7w4+7i7ukg7ODw6ugNCg0KPiDX4PHy/CAyLiDO 8OPg7ejn4Pbo/yDoIO/u8fLw7uXt6OUg7vLk5evgIO/w7uTg5iDiIOru7O/g7ejoLg0KICCV INLw6CDn4OTg9+gg8+/w4OLr5e3o/yDv8O7k4Obg7OguIMTo4OPt7vHy6OrgIPHu4fHy4uXt 7e7j7iDx8ujr/yDv8O7k4OboLiDM5fLu5Ojq4CCr1/LuIOL7IOfgIO/y6PbgP7suDQogIJUg 0ujv+yDoIPHy6OvoIO/w7uTg5i4gwvv/4uvl7ejlIPHo6/zt+/Ug6CDx6+Dh+/Ug8fLu8O7t IO/w7uTg4vbu4iDu8uTl6+Ag4u4g4ufg6Ozu5OXp8fLi6Ogg8SDK6+jl7fLg7Ogg4iD17uTl IA0KICAgIO/w7uTg5ugg8u7i4PDu4i/z8evz4yDq7uzv4O3o6C4gyvLuIOzu5uXyLCDgIOry 7iDt5SDs7ubl8iDv8O7k4OLg8vwg5O7w7uPuPyDD5OUg6CDt4CD35ewg6u7s7+Dt6Ogg8uXw //7yIOjs6OTm6CDk5e384+g/DQogIJUgz+735ezzIPXu8O746Okg7/Du9OXx8eju7eDrIO3l IOzu5uXyIP309OXq8uji7e4g7/Du5ODi4PL8PyDX8u4g8uDq7uUgq/fl8O3g/yDk+/DguyDi IO/w7uTg5uD1IOru7O/g7ejoPw0KICCVIM/u9+Xs8yDq7uzv4O3o6CDy5fD//vIgyuvo5e3y 7uI/INTg6vLu8Psg6PUg8+Tl8Obg7ej/Lg0KICCVIMLo5Psg6u7t8vDu6/8g6CDx4Ozu6u7t 8vDu6/8g8OXn8+v88uDy6OLt7vHy6CDv8O7k4OYg7/Du5ODi9uAuDQogIJUg0e7x8uDi6+Xt 6OUg6uDw8vsg6uv+9+Xi+/Ug8OXn8+v88uDy6OLt+/Ug7uHr4PHy5ekg8ODh7vL7ICjK0M4p IO/w7uTg4vbgDQogIJUgy+jx8iDu9uXt6ugg8u7w4+7i7ukg8u736uggKOzg4+Dn6O3gKQ0K DQo+INfg8fL8IDMuINLl9e3u6+7j6P8g8/Hv5fjt7ukg7/Du5ODm6CDy7uLg8O7iIOgg8/Hr 8+Mg7eAg8e7i8OXs5e3t7uwg8Pvt6uUNCiAg3fLg7yAxLiDM5fLu5Psg7+7o8ergIMrr6OXt 8u7iLiDP8ODi6OvgIPHu8fLg4uvl7ej/IOru7Ozl8Pfl8eru4+4g7/Dl5Ovu5uXt6P8uDQog IN3y4O8gMi4g0/Hy4O3u4uvl7ejlIOru7fLg6vLgIO/uIPLl6+X07u3zIOgg5O7j7uLu8OXt 7e7x8vwg7iDi8fLw5fflLg0KICDd8uDvIDMuIM/w4OLo6+Ag4vXu5uTl7ej/IOIg6u7t8uDq 8iDiIO/w7vbl8fHlIO3l7+7x8OXk8fLi5e3t+/Ug7+Xw5ePu4u7w7uIg8SDK6+jl7fLu7C4N CiAgz/Dl5+Xt8uD26P8g6u7s7OXw9+Xx6u7j7iDv8OXk6+7m5e3o/yDK6+jl7fLzLiDM5fLu 5CDB5e3k5uDs6O3gINTw4O3q6+jt4C4NCiAg0+/w4Obt5e3o5SCrwOvj7vDo8uwg1S3PLcIg 4iDv8O7k4ujm5e3o6CDy7uLg8O7iL/Px6/Pjuy4NCiAg3fLg7yA0LiDQ4OHu8uAg8SDi7ufw 4Obl7ej/7Ogg6CDx7uzt5e3o/+zoIOrr6OXt8uAuIM7x7e7i7fvlIPLo7/sg6CDi6OT7IOLu 5/Dg5uXt6OkuDQogIN3y4O8gNS4gx+Di5fD45e3o5SDv8O725fHx4CDv8O7k4OboIPLu4uDw 7uIv8/Hr8+Mgyuvo5e3y8y4gz/Do5ez7IOgg8uX17e7r7uPo6C4NCg0KPiDX4PHy/CA0LiDM 4PDq5fLo7ePu4vvpIO/u6/7xIO/w7uTg5ugNCiAglSDP7vfl7PMgwuD4IPLu4uDwLCDq7vLu 8PvpIO/w7uTg4uDr8f8g4vHl4+TgLCDt5SDv8O7k4OXy8f8/INHu4vDl7OXt7fvlIOzg8Orl 8ujt4+7i++Ug8fLw4PLl4+joLCANCiAgICDi6+j//vno5Swg7eAg/fT05ery6OLt7vHy/CDx 4fvy4CDy7uLg8OAv8/Hr8+PoDQogIJUg1ODq8u7w+ywg4uvo//756OUsIO3gIPHh+/IuDQog IJUgwe7x8u7t8erg/yDs4PLw6PbgIOrg6iDi++Hu8CDv6+Dt7uzl8O3u6SDx8vDg8uXj6Ogg 7/Du5OLo5uXt6P8g8u7w4+7i7ukg7ODw6ugNCiAglSDK4O3g6/sg8eH78uAuIN309OXq8uji 7e7x8vwg6uDt4Ovu4iDx4fvy4C4g2Org6+Ag0C4gy+Xp6uDw8uAuDQogIJUgwOr26Ogg8fLo 7PPr6PDu4uDt6P8g8eH78uAuIEJUTC3s5fDu7/Do//Lo/yDiIP309OXq8uji7e7pIO/w7uTg 5uUg8u7i4PDgL/Px6/Pj6C4NCiAglSDP6+Dt6PDu4uDt6OUg6CDv8O7i5eTl7ejlIEJUTC3s 5fDu7/Do//Lo6SDiIOfg4ujx6Ozu8fLoIO7yIPHy4OTo6CDw4Ofi6PLo/yDy7vDj7uLu6SDs 4PDq6C4gDQogICAg0ujv6Pft++Ug7vjo4eroIO/w6CDv8O7i5eTl7ejoIODq9ujpIPHy6Ozz 6+jw7uLg7ej/IPHh+/LgLg0KDQo+INfg8fL8IDUuIFBSIOgg4ufg6Ozu5OXp8fLi6OUg8e4g 0czIIOrg6iDx8OXk8fLi7iDv8O7k4ujm5e3o/yDy7vDj7uLu6SDs4PDq6CAo8u7i4PDgLCDz 8evz4+gpIOIg8e7i8OXs5e3t+/Ug8/Hr7uLo//UNCiAglSDP7ujx6iDq7u3q8/Dl7fLt+/Ug 7/Dl6Ozz+eXx8uIuIM7y8fLw7unq4CDu8iDq7u3q8/Dl7fLu4i4gNSDx6Osg6u7t6vPw5e3y 7fv1IOTl6fHy4ujpIO/uIM/u8vLl8PMuIKvR5fD76SBQUrsg4iDw4OHu8uUg8SDq7u3q8/Dl 7fLg7OguDQogIJUg0e7h+/Lo6e376SBQUiwg6uDqIOLg5u376SD04Ory7vAg7/Du5OLo5uXt 6P8g8e7i8OXs5e3t7ukg8u7w4+7i7ukg7ODw6ugNCiAglSDC6OT7IOgg8ujv+yBQUi3s5fDu 7/Do//Lo6Swg4uvo//756PUg7eAg4u7n4vv45e3o5SDo7Ojk5uAg6CDv7uL7+OXt6P8g8+ft 4OLg5ezu8fLoIPLu8OPu4u7pIOzg8OroLiDK8ODy6ujlIPH25e3g8OjoIOj1IO/w7uLl5OXt 6P8uDQogIJUg0ODh7vLgIPHuINHMyCDoIObz8O3g6+jx8uDs6CDxIPbl6/z+IP309OXq8uji 7e7x8ugg7/Du5OLo5uXt6P8g8u7w4+7i7ukg7ODw6ugv8/Hr8+PoIO3gIPD77erlLg0KDQo+ INTu8Oz7IOgg7OXy7uT7IO/w7uLl5OXt6P86DQogIJUgzOjt6C3r5er26OgsIOzu5+Pu4u7p IPjy8/DsDQogIJUgw/Dz7+/u4vvlIOTo8erz8fHo6A0KICCVINDu6+Xi++Ug6OPw+yDoIOTl 6+7i++UNCiAglSDQ4Ofh7vAg6u7t6vDl8u379SDv8ODq8uj35fHq6PUg8ejy8+D26OkgKGNh c2Utc3R1ZGllcykuDQogIJUgwvHlIPP34PHy7ejq6CDu4eXx7+X36OLg/vLx/yDs5fLu5Oj3 5fHq6OzoIO/u8e7h6P/s6C4NCg0KPiBDVE/ITU9DVNwg09dBQ9LI3yBPxEhPw08g09dBQ9LN yMpBOg0KICCVIDgwMC4wMCDj8O0uIOfgIO7k7e7j7iDvcGXkY/Jh4ujyZev/Lg0KICCVIMTr /yDi8u7w7uPuIOgg8vDl8vzl4+4g8/fg8fLt6OrgIPHq6OTq4CAtIDUlIOggNyUg8e7u8uLl 8vHy4uXt7e4uDQoNCj4gQiBj8m/o7G9j8vwg4mvr/vdl7fs6DQogICAg6O307vDs4Pbo7u3t 7i3q7u3x8+v88uD26O7t7e7lIO7h8evz5uji4O3o5SwNCiAgICD96vHq6/7n6OLt++kg8eHu 8O3o6iDs4PLl8Ojg6+7iLCDh6+7q7e7yLA0KICAgIPDz9+rgLCDq7vTlLeHw5enqLCDu4eXk IOIg8OXx8u7w4O3lLg0KDQoqIFBFw8tBTUVIVDogOS4zMC0xNy4zMC4gz+Xw5fD74iAxMy4z MC0xNC4zMC4NCiog0OXj6PHy8OD26P8g8SA5LjAwIOIg9e7r6+UuDQoNCj4g0uXrLjogKzM4 ICgwNDQpIDIzMyA0NiA2OSAvIDIzNyA5TyBPNQ0KDQoNCj4g0+Tg9+3u4+4g4ejn7eXx4CEN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQrx6/P34Ont++Ug8fLw7uroOusg zuvl4y4gzPPmIO735e38IPcgYmF4bWF0QHlhLnJ18fwhYW5uYW1AcHN0dS5ydQkhIMvz9/jl 4+4g7OXx8mFrb25AcGF0cmlhcmNoLnJ1CcPLIDM2MzhAcGVjaGtpbi5pcHRlbGVjb20ubmV0 LnVh From xfs@tlinx.org Wed Apr 15 16:24:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3FLNvgV026783 for ; Wed, 15 Apr 2009 16:24:09 -0500 X-ASG-Debug-ID: 1239830730-7b4f03660000-NocioJ 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 3D7F514250FF for ; Wed, 15 Apr 2009 14:25:30 -0700 (PDT) Received: from ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id XHUcTPJwft5T97RI for ; Wed, 15 Apr 2009 14:25:30 -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 n3FLNHgm012209 for ; Wed, 15 Apr 2009 14:23:17 -0700 Message-ID: <49E65044.8080802@tlinx.org> Date: Wed, 15 Apr 2009 14:23:16 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: future of xfs, oss.sgi.com after sgi purchased? Subject: future of xfs, oss.sgi.com after sgi purchased? X-Stationery: 0.4.8.14 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: 1239830752 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23273 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Not one to beat about the bush, but curious from a practical sense, If sgi is being bought by another company, is there any idea about the plans for the xfs file system or the source code on 'oss.sgi.com'? I'm _guessing_ that there is some interest in users and developers to keep xfs alive after the 'sgi' moniker is purchased, but that begs the question about the new company wanting to support the old 'sgi.com' websites including oss.sgi.com. Is there a danger of oss.sgi.com suddenly being yanked offline with little to no warning, such that community members should start keeping up-to-date, or is it already mirrored? I'm assuming that the current source code repository only exists on oss.sgi.com? Should it be mirrored on some other external open-source site? sourceforge? google? mozilla? Is completely worthless to discuss new, desired features in some of the utils? Will it be possible to support the xfs codebase if its development no longer becomes necessary to sgi (or its parent company)? *sigh*, -linda From martingeng@martinlinkingbiz.com Wed Apr 15 20:29:23 2009 Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3G1T24A036817 for ; Wed, 15 Apr 2009 20:29:12 -0500 X-ASG-Debug-ID: 1239845304-63fc01c50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from www.martinlinkingbiz.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A25421CC4B9E for ; Wed, 15 Apr 2009 18:28:24 -0700 (PDT) Received: from www.martinlinkingbiz.com ([67.222.146.102]) by cuda.sgi.com with ESMTP id 56GnFuS7BkxaN957 for ; Wed, 15 Apr 2009 18:28:24 -0700 (PDT) Received: (qmail 25756 invoked by uid 0); 16 Apr 2009 01:21:38 -0000 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=private; d=martinlinkingbiz.com; b=0py0ElRjSGe0ppDu7vICckcxPVgcCIyf0iZsBMkdOqRvLGRPI9/xngx3f64EjqJc; Received: from unknown (HELO MartinThinkpad) (martingeng@martinlinkingbiz.com@218.104.206.238) by 67.222.146.102 with ESMTPA; 16 Apr 2009 01:20:57 -0000 Reply-To: From: "Martin Geng" To: "Martin Geng" X-ASG-Orig-Subj: The 2nd Plant Managers Forum 2009 -- **Last Reminder to Register- 5 Seats Left** Subject: The 2nd Plant Managers Forum 2009 -- **Last Reminder to Register- 5 Seats Left** Date: Thu, 16 Apr 2009 09:07:18 +0800 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_044C_01C9BE74.A5CC8E60" X-Priority: 1 (Highest) X-MSMail-Priority: High X-Mailer: Microsoft Office Outlook 11 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 Thread-Index: AclaibrZee3ttqYUT9ik0WbSsgdFtgAAHrjAAABlmJAAACqREAAAKOGAAAB3YQAAAgABAAAAsg8gAA/kOdAAAB3l4AAXqWiQAMmD6/AAAIpIQAAAU5CQAAAxmwAAL3jl4AAALapgAABIFIAAAE5qsAAAPp2AAAAr/OAAAF8TkAAGrboQADkFk8AAADJxkAAAEIeQAAAgfQAAIbvtUAAAPBdwAAAYnXAAABqp4AAAKgIwAAA0IPAAABDesAAAgrvgAAAz22AAAEwSEAAAGAbgAAC77PAA+emHUAAATZdgAAAfJvAAAEUYcAAAHNzAAABbW7AAMjIDsAAASnQQAABMOEAAADctsAAAJYMgAAA4pZAAACLgkAAusJ2gAABAwdAAABMo8AAAO+iAAAAeZDAAMXdGIAAATttQAAAc4dAAABEQwAAALuYAAAAY9YAAADprUAAA7/hwAJXbF1AAAl5oMAOKlKMwBMKy7/AAACJG4AAADZLwACMHsaAAAGNzYAABwaHwAAAYhXAAARfS8AAALdsAAAAMTpAAAdtqcAAAFtmwAAAUWUAAACFHQAAAHbMwAAjsQ2AAABpCEAAAM0RwAAApXHAAAA0lsAAACyLAAAAVQ2AAACFAEAAAEE8gAAAhR2AAAAtmAAAABpswAAAW8ZAAABEegAAACtygAAAgyNAAAAtm8ABY9IagAAzPsDAAuUTiUAAADg9gAAAgfNAAAA3zcAAAGWtQAAAJjyAAACcoIAAACzRQAAAPHAAAABqIYAAADA8AAAARZQAAABrb4AAAFTpQAAAVnRAAAA4KwAAACrUQAAALORAAAAvoUAA/Mo8wAAANJsAAiMfEUAAAxipAAAAQYIAAApeKkAAADrGgAAOhE6AAAAycMAAACIyQAAAJSMAAABoW8AAAEp+wAAA9dqAAABi0kAAACk5wAAA8aiAAAAqc8AAAENJQAAAosnAAAApXAAAADG5g AAAJZjAAAAsjwAAACddgAA AH0rAAAAh8kAAACs6QAAAxa9AAAA7zsAAAFGowAAAIcwAAAAjaQAAAE2sQAAAM7RAAjs6AUAAAOMfgAAAPDLAAAAoJcAAAJJVQAAHDcqAAAAsZEAAFCa2wAAWJshAAAA/VYAAADNKAAAAIyuAAAAtRMAAAECRwAAAJToAAAAi8kAAACrbQAAAFd3AAAA4ScAAAC+RgAAAME4AAABDowAAAHGrgAAAPPMAAK8eI8AAADMoQAAAI/3AAAA5YYAAACc+wAAAI/QAABeoAgAAPATiAABTq6yAABxyp4ABHPHyQABn4stAAAtDQUAAAZkXAAAA0JsAAABunwAAAsP+wAAA3kIAAAEOqYAAAPFAwAASlLWAAiL0vsAAAfQVQAAB4HwAAACRy4AAAlRmAAC6kn1AAAM6W0AAAGaBAAAAX3IAAAEkoUAAAHAnwADTNtdAAACG+8AA4kCgwAAB654AAAFMKMAAAoz9QADEUEiAAjfQd0ABANfrgACOpViAACNL38AAAVIcwADHyAaAABR5mUAAo1iWAAJKn4OAANpKK4AAtETJwAACzNoAABBt9MAAukpugADLt4sAAmMc00AAA0b/gADEDt/AAAhBm4AAAPKqQADDMhZAAa09GQAABAzlQAPtFgIAAAH5/UAAEXLggACKjieAAAImpkAAxF8ngAA6T06AAAQlRcADJmY/gAAEX/WAAAB1OEABWfB/AABJ9fhAAACUcEAAu0w6QAJhTJNAAALEHcABRZQQwAAFIpHAALz5bAA== Importance: High Disposition-Notification-To: "Martin Geng" X-Barracuda-Connect: UNKNOWN[67.222.146.102] X-Barracuda-Start-Time: 1239845325 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1001.00 X-Barracuda-Spam-Status: No, SCORE=-1001.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This is a multi-part message in MIME format. ------=_NextPart_000_044C_01C9BE74.A5CC8E60 Content-Type: multipart/alternative; boundary="----=_NextPart_001_044D_01C9BE74.A5CC8E60" ------=_NextPart_001_044D_01C9BE74.A5CC8E60 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit This is your last chance to register for The 2nd Plant Managers Forum 2009. We have only 5 seats left; therefore, do not miss this opportunity to register! The 2nd Plant Managers Forum 2009 Achieving best practices in maintaining excellence in plant management 21st & 22nd May 2009 Millennium Hongqiao Hotel Shanghai China Hello, How are you? MARTIN LINKING is convening the 2nd Plant Managers Forum in Shanghai on 21st & 22nd May 2009. This event will offer effective tools and strategies responding to the challenges brought by the international financial crisis. It will also cover such key issues as workplace regulation and labour laws, personnel management, cost cutting and financial controlling practices, optimized operations and maintenance schedules and continuous improvement that will guarantee the plant survives amidst the economic turmoil and prospers long into the future. If you are not relevant, could you help me to forward this information to the people who are related. Thanks for that! Topics for discussion: * Examining Chinese manufacturing on how to improve cash flow in the face of an unprecedented financial market crisis * Looking at ways to make sure the efficient execution of company strategies and planning amidst the economic turmoil * Examining the updated implementation for the labor contract law to cope with the deteriorating market conditions * Achieving optimum energy management goals by creating and implementing a strategic action plan * Discussing solutions to improve accuracy of sales and production planning * Identifying and managing health and safety hazards within your business * Effectively assessing and handling the potential risks in your supply chain * Providing ideas and thought-processes relating to concepts of Demand-Driven manufacturing * Creating the vision for a Kaizen culture and ensure long-term cohesiveness Some of the eminent speakers we are inviting include: * Glenn Rosenholmer Global Partner/Project Director UnitedLog Consulting * Guillaume de Roquefeuil Managing Director BravoSolution * Kien Leong General Manager JCIT Asia Pacific * Yongchun Dai JXG Site Director , RM of Supply College MARS CHINA * Baldwin Hui President Institute of Business Engineering * Gary Ching VP Institute of Business Engineering * Michael Sherretz Former China Country Manager and VP Manufacturing PPG Industries, Tyco Fire & Security, Gambro * Douglas McLachlin Partner, Director of Resources Management Services Environmental Resources Management (ERM) * Dr. Iris Duchetsmann German-attorney-at-law Beiten Burkhardt Law Firm Please find an agenda in both English and Chinese attached with this email. Please do not hesitate to contact me should you have any queries, 15% special offer is available for all the attendees of the first Plant Managers Forum 2008. To register the very limited 10% off seats, simply fill out the registration form, attention it to Martin Geng and fax it to + 86 28 6552 1233. If you don't want to receive any further email from us, please reply this email to unsubscribe with correct email address. Best Regards, Martin Geng __________________________________________ Martin Linking Business Consulting Company Limited Room 808A, Times Plaza, No.2 Zongfu Road, Chengdu, Sichuan 610016, China T: +86 28 65521255 F: +86 28 65521233 E: martin.geng@martinlinking.net www.martinlinking.com We are dedicated to offer our clients cutting edge information they can use immediately. Upcoming Martin Linking events: Title : Best Practices for Sustainable Corporate Social Responsibility 2009 Date : 20th & 21st August 2009 Venue : Shanghai, China Link : http://www.martinlinking.com/documents/ws/csr_ws.pdf Title : Total Productive Maintenance (TPM) Best Practice 2009 Date : 30th & 31st July 2009 Venue : Shanghai, China Link : http://www.martinlinking.com/documents/ws/tpm_ws.pdf Title : Continuous Application of Behavior-Based Safety 2009 Date : 30th & 31st July 2009 Venue : Shanghai, China Link : http://www.martinlinking.com/documents/ws/bbs_ws.pdf Title : Upgrade the Practical Skills of Business Channels of Pharmaceutical Enterprises under the New Medicine Situation Date : 18th & 19th June 2009 Venue : Shanghai, China Link : http://www.martinlinking.com/documents/ws/pbc_ws.pdf Title : Best Practices for Machinery Lubrication Date : 21st& 22nd May 2009 Venue : Shanghai, China Link : http://www.martinlinking.com/documents/ws/ml_ws.pdf This message and any attachment is intended only for the use of the Addressee and may contain information that is PRIVILEGED. If you are not the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please erase all copies of the message and its attachments and notify us immediately. Thank You. Security Warning: Please note that this e-mail has been created in the knowledge that Internet e-mail is not a 100% secure communications medium. We advise that you understand and observe this lack of security when e-mailing us. Viruses: Although we have taken steps to ensure that this e-mail and attachments are free from any virus, we advise that in keeping with good computing practice the recipient should ensure they are actually virus free. ------=_NextPart_001_044D_01C9BE74.A5CC8E60 Content-Type: text/html; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable

 

This is your last chance to = register for The 2nd Plant Managers Forum = 2009. We have only 5 = seats left; therefore, do not miss this opportunity to = register!

 

 

The 2nd Plant Managers Forum = 2009

Achieving best practices in = maintaining excellence in plant management

21st & 22nd May = 2009

Millennium Hongqiao = Hotel

Shanghai China

Hello,

How are you?

 

MARTIN LINKING is convening the 2nd = Plant Managers = Forum in Shanghai on 21st &  22nd May 2009. This event will offer = effective tools and strategies responding to the challenges brought by the = international financial crisis. It will also cover such key issues as = workplace regulation and labour laws, personnel management, cost cutting and = financial controlling practices, optimized operations and maintenance schedules = and continuous improvement that will guarantee the plant survives amidst the economic turmoil and prospers long into the = future.

 

If you are not = relevant, could you help me to forward this information to the people who are = related. Thanks for that! 

 

Topics for discussion:

l   = Examining<= /strong> Chinese manufacturing on how to improve cash flow in the face of an = unprecedented financial market crisis

l   = Looking = at ways to make sure the efficient execution of company strategies and planning = amidst the economic = turmoil

l   = Examining<= /strong> the updated implementation for the labor contract law to cope with the deteriorating = market conditions

l   = Achieving<= /strong> optimum energy management goals by creating and implementing a strategic action = plan

l   = Discussing= solutions to improve accuracy of sales and production = planning

l   = Identifying and managing health and safety hazards within your = business

l   = Effectively assessing and handling the potential = risks in your supply chain

l   = Providing<= /strong> ideas and thought-processes relating to concepts of Demand-Driven manufacturing =

l   = Creating the vision for a Kaizen culture and ensure long-term = cohesiveness

 <= /p>

Some of the eminent speakers we are inviting = include:

·         Glenn = Rosenholmer Global Partner/Project Director  UnitedLog Consulting

·         Guillaume = de Roquefeuil  Managing Director  BravoSolution

·         Kien Leong General Manager JCIT Asia = Pacific

·         Yongchun = Dai  JXG Site Director , RM of = Supply College MARS CHINA

·        Baldwin = Hui  President =   Institute of Business = Engineering

·         Gary = Ching  VP  Institute of Business = Engineering

·         Michael Sherretz  Former China Country = Manager and VP Manufacturing  PPG = Industries, Tyco Fire & Security, Gambro

·         Douglas McLachlin  Partner, Director of = Resources Management Services  = Environmental Resources Management (ERM)

·         Dr. Iris Duchetsmann  German-attorney-at-law  Beiten Burkhardt Law = Firm

 

Please find an agenda in both English and Chinese = attached with this email.

Please do not hesitate to contact me should you have any = queries, 15% special offer is = available for all the attendees of the first Plant Managers Forum 2008. =

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

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

Best Regards, 

Martin Geng

__________________________________________

Martin Linking Business Consulting Company = Limited

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

Sichuan= 610016, China

 

T: +86 28 = 65521255

F: +86 28 = 65521233

E: martin.geng@martinlinking.net

www.martinlinking.com

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

 =

Upcoming Martin Linking events:  

Title      : Best Practices for Sustainable Corporate = Social Responsibility 2009

Date     :  20th = & 21st August 2009

Venue   : Shanghai, China

Link    =   : h= ttp://www.martinlinking.com/documents/ws/csr_ws.pdf=

 =

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

Date     :  30th = & 31st July 2009

Venue   : Shanghai, China

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

 =

Title      : Continuous Application of Behavior-Based = Safety 2009

Date     :  30th = & 31st July 2009

Venue   : Shanghai, China

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

 =

Title      : Upgrade the Practical Skills of Business = Channels of Pharmaceutical Enterprises under the New Medicine = Situation

Date     :  18th = & 19th June = 2009

Venue   : Shanghai, China

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

 

Title      :  = Best Practices for Machinery = Lubrication

Date     :  21st& = 22nd May = 2009

Venue   : Shanghai, China

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

 

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

 

 

 

------=_NextPart_001_044D_01C9BE74.A5CC8E60-- ------=_NextPart_000_044C_01C9BE74.A5CC8E60 Content-Type: application/pdf; name="The 2nd Plant Managers Forum 2009.pdf" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="The 2nd Plant Managers Forum 2009.pdf" JVBERi0xLjYNJeLjz9MNCjc4OSAwIG9iag08PC9MaW5lYXJpemVkIDEvTCA0OTQ5OTgvTyA3OTEv RSAyMjU2ODYvTiA0L1QgNDc5MTcwL0ggWyAxNDU2IDQ1NV0+Pg1lbmRvYmoNICAgICAgICAgICAg DQp4cmVmDQo3ODkgNTgNCjAwMDAwMDAwMTYgMDAwMDAgbg0KMDAwMDAwMTkxMSAwMDAwMCBuDQow MDAwMDAyMDQxIDAwMDAwIG4NCjAwMDAwMDI1NjYgMDAwMDAgbg0KMDAwMDAwMzAxOSAwMDAwMCBu DQowMDAwMDAzMTUyIDAwMDAwIG4NCjAwMDAwMDMxODkgMDAwMDAgbg0KMDAwMDAwMzIzNyAwMDAw MCBuDQowMDAwMDAzNDY2IDAwMDAwIG4NCjAwMDAwMDM1NDQgMDAwMDAgbg0KMDAwMDAwNDI5OSAw MDAwMCBuDQowMDAwMDA0NDMxIDAwMDAwIG4NCjAwMDAwMDQ4MTEgMDAwMDAgbg0KMDAwMDAwNTIw MSAwMDAwMCBuDQowMDAwMDA1MzI2IDAwMDAwIG4NCjAwMDAwMDU1NDkgMDAwMDAgbg0KMDAwMDAw NjAwNSAwMDAwMCBuDQowMDAwMDA2MTQzIDAwMDAwIG4NCjAwMDAwMDcxMzUgMDAwMDAgbg0KMDAw MDAwNzk2NyAwMDAwMCBuDQowMDAwMDA4MDk5IDAwMDAwIG4NCjAwMDAwMDkwODcgMDAwMDAgbg0K MDAwMDAwOTQyMSAwMDAwMCBuDQowMDAwMDA5NTc2IDAwMDAwIG4NCjAwMDAwMTA0ODUgMDAwMDAg bg0KMDAwMDAxMTQ5NiAwMDAwMCBuDQowMDAwMDE0MTkwIDAwMDAwIG4NCjAwMDAwMTc2NzAgMDAw MDAgbg0KMDAwMDAxNzkxMiAwMDAwMCBuDQowMDAwMDE4MTM2IDAwMDAwIG4NCjAwMDAxMTM0NTAg MDAwMDAgbg0KMDAwMDExMzc3MyAwMDAwMCBuDQowMDAwMTE1MDMzIDAwMDAwIG4NCjAwMDAxMjQ3 MzUgMDAwMDAgbg0KMDAwMDEzMTg4NyAwMDAwMCBuDQowMDAwMTQ1MTc1IDAwMDAwIG4NCjAwMDAx NDkwNDYgMDAwMDAgbg0KMDAwMDE1NDE2MSAwMDAwMCBuDQowMDAwMTY0MTk1IDAwMDAwIG4NCjAw MDAxNjQ0NTEgMDAwMDAgbg0KMDAwMDE2NTY3NiAwMDAwMCBuDQowMDAwMTY1OTEwIDAwMDAwIG4N CjAwMDAxNzQ2NjUgMDAwMDAgbg0KMDAwMDE3NDkxNCAwMDAwMCBuDQowMDAwMTc1MTE5IDAwMDAw IG4NCjAwMDAxNzU0MDUgMDAwMDAgbg0KMDAwMDE5NDgwNCAwMDAwMCBuDQowMDAwMTk1MDQ0IDAw MDAwIG4NCjAwMDAxOTUyNDggMDAwMDAgbg0KMDAwMDE5NTYyNyAwMDAwMCBuDQowMDAwMjAzMjE5 IDAwMDAwIG4NCjAwMDAyMDM0NzQgMDAwMDAgbg0KMDAwMDIwMzY4NCAwMDAwMCBuDQowMDAwMjAz OTcyIDAwMDAwIG4NCjAwMDAyMjQ5NTYgMDAwMDAgbg0KMDAwMDIyNTE5NiAwMDAwMCBuDQowMDAw MjI1NDAwIDAwMDAwIG4NCjAwMDAwMDE0NTYgMDAwMDAgbg0KdHJhaWxlcg0KPDwvU2l6ZSA4NDcv UHJldiA0NzkxNTgvUm9vdCA3OTAgMCBSL0luZm8gNzg4IDAgUi9JRFs8MkRBNTU2OUQ5OTMzQjk0 RjlBNzRCREMwMDZGMTEwRTg+PDY3MkIxQTREODdDRERBNDM5MkUyRTdBMUY2MEE2RkI3Pl0+Pg0K c3RhcnR4cmVmDQowDQolJUVPRg0KICAgICAgICANCjg0NiAwIG9iag08PC9MZW5ndGggMzYwL0Mg Mzg2L0ZpbHRlci9GbGF0ZURlY29kZS9JIDQwOC9PIDM3MC9TIDE2Mj4+c3RyZWFtDQp42mJgYGBn YGAzYmBjYDDZyCDEgABCDKxAORYGjgOFDWetGdwEGBiO3pmmN4EBDUgENi48mvfxD8fRM5ImX7+4 58VaNHMABRefmqgWc+h9vEvZ08sdBj2SJjwJAVfUzs+JAZmtZJrW0QHSzRjRAQZgoyDMBpChcBuB HGUGlhvyQNociAPBClUZBBm+MGQw8IA4EcwMDEFM5xj0G0IP6CiwNrBeYOthOMW8m7G3QfxA2QOh CcwbeBewz+FKZNvZYOwgXu50geODsIx3k/RpyYfN+5qqDhVcYLshNIGxS4mPIYtBi0FeZZcCWwTT HKY1ss0MuQzaDvKpsgYgAcZPDHGVhxtMGEQWaikwPQivYFzGkMKg3WDqILpAToDVgn0BwzfGuwz6 DOIMtgfYHJh2sIcw1jFmMpxoQA0xWwY2ngdAmpuBgVkdSHswsAkAY4HpFAOj3gOYImYRBnZfXVAI AfEhgAADAC1uZTgNCmVuZHN0cmVhbQ1lbmRvYmoNNzkwIDAgb2JqDTw8L01hcmtJbmZvPDwvTWFy a2VkIGZhbHNlPj4vT3V0bGluZXMgNjEgMCBSL01ldGFkYXRhIDc4NyAwIFIvUGFnZXMgNzg2IDAg Ui9TdHJ1Y3RUcmVlUm9vdCA3MiAwIFIvVHlwZS9DYXRhbG9nPj4NZW5kb2JqDTc5MSAwIG9iag08 PC9Dcm9wQm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgNzg2IDAgUi9TdHJ1Y3RQYXJlbnRzIDAv Q29udGVudHNbNzk4IDAgUiA4MDAgMCBSIDgwNCAwIFIgODA2IDAgUiA4MDcgMCBSIDgwOSAwIFIg ODEyIDAgUiA4MTMgMCBSXS9Sb3RhdGUgMC9NZWRpYUJveFswIDAgNTk1LjIyIDg0Ml0vUmVzb3Vy Y2VzPDwvWE9iamVjdDw8L0ltMCA4MTggMCBSL0ltMSA4MjAgMCBSL0ltMiA4MjEgMCBSL0ltMyA4 MjIgMCBSL0ltNCA4MjMgMCBSL0ltNSA4MjQgMCBSL0ltNiA4MjUgMCBSPj4vQ29sb3JTcGFjZTw8 L0NTMCA3OTQgMCBSL0NTMSA3OTUgMCBSPj4vRm9udDw8L1RUMCA3OTIgMCBSL1RUMSA4MDEgMCBS L1RUMiA4MTAgMCBSL1RUMyA4MTEgMCBSL0MyXzAgNzkzIDAgUi9DMl8xIDc5OSAwIFIvQzJfMiA4 MDIgMCBSL0MyXzMgODA1IDAgUi9DMl80IDgwOCAwIFI+Pi9Qcm9jU2V0Wy9QREYvVGV4dC9JbWFn ZUMvSW1hZ2VJXS9FeHRHU3RhdGU8PC9HUzAgNzk3IDAgUj4+Pj4vVHlwZS9QYWdlPj4NZW5kb2Jq DTc5MiAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDc5NiAwIFIvTGFz dENoYXIgMTIyL1dpZHRoc1syNzggMCAwIDAgMCAwIDcyMiAwIDAgMCAwIDU4NCAwIDMzMyAyNzgg MCA1NTYgNTU2IDU1NiAwIDAgNTU2IDU1NiAwIDU1NiA1NTYgMzMzIDAgMCAwIDAgMCA5NzUgNzIy IDcyMiA3MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggMCA3MjIgNjExIDgzMyA3MjIgNzc4IDY2 NyAwIDcyMiA2NjcgNjExIDcyMiAwIDk0NCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgNjExIDU1NiA2 MTEgNTU2IDMzMyA2MTEgNjExIDI3OCAwIDU1NiAyNzggODg5IDYxMSA2MTEgNjExIDYxMSAzODkg NTU2IDMzMyA2MTEgNTU2IDc3OCA1NTYgNTU2IDUwMF0vQmFzZUZvbnQvQXJpYWwtQm9sZE1UL0Zp cnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTc5 MyAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1s4MzIgMCBSXS9CYXNlRm9u dC9FR0JJUEIrQ2FsaWJyaS9Ub1VuaWNvZGUgODMzIDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5 cGUvRm9udD4+DWVuZG9iag03OTQgMCBvYmoNWy9JQ0NCYXNlZCA4MTQgMCBSXQ1lbmRvYmoNNzk1 IDAgb2JqDVsvSW5kZXhlZCA3OTQgMCBSIDI1NSA4MTkgMCBSXQ1lbmRvYmoNNzk2IDAgb2JqDTw8 L1N0ZW1WIDEzOC9Gb250TmFtZS9BcmlhbC1Cb2xkTVQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRX ZWlnaHQgNzAwL0ZsYWdzIDMyL0Rlc2NlbnQgLTIxMS9Gb250QkJveFstNjI4IC0zNzYgMjAwMCAx MDEwXS9Bc2NlbnQgOTA1L0ZvbnRGYW1pbHkoQXJpYWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1 MTUvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTc5NyAwIG9iag08 PC9PUE0gMS9PUCBmYWxzZS9vcCBmYWxzZS9UeXBlL0V4dEdTdGF0ZS9TQSBmYWxzZS9TTSAwLjAy Pj4NZW5kb2JqDTc5OCAwIG9iag08PC9MZW5ndGggNjg0L0ZpbHRlci9GbGF0ZURlY29kZT4+c3Ry ZWFtDQpIiaxVW2vbMBR+9684j90gsq6WBCHQpt3oQyGlhj4Oz3FSj0bt7HRj/35H8iV2467bCIFE QTrf5Xw69kUaxSuYz+Ob5fUlUFgsLi6XEMWf7yhs6yhe8i8UGKSbiFGi8AD+axZGUJJQKiDdRXOK i0X6Lbq68cUHQNYBMthGcZq2WDNKsAKXOYRVAulPEEmAx5+EE2VACUa0pNITnHG3htVj5vZwk7ls W1Q1fHqqXnbwAVkDBg9oHkgRgbJmjHBrIF1jMaU2HAzyrtDytXssXXH3kD0XvVbeaf0ezVhCpARp ENmAlJJwicIEVEV0Dw5P0H6Ta2JwjxHLh9tGclBWEdQ1k4oSI8Pux34bC0w4gQfaf325Z2TaWst1 0xODZiSaVAoabd5wJ9C30kC+Q1s7CpdP0W1j9Lb9XIwyFp1N6iM55EsJ1yxEMk66MdgyHdJ+K3FU 3OOHeDVPQAjic1y/fVG46a9ef0vQVFCB7EIR7Cc6JUnSiDg7BDqEsR2M9g315WHRAmh0YfmfAEQ/ AqhcSWwRVx1Ss5Iiwa5oaYltb/9ZOrxbr8P32Zrkr8OPlzh5ee0JSWLxy0oGUOfO11GE6oAlJSxU bSZC1myU8njwsAynhLUZK1BehmGa8K415/lDWfwo3Ra+FvUenqss35d5UUPp4DlM4S5M4a7A5Ytb FxVsSpe5vMweIa/KuqwH3T2v9uUGEby69BdOXLyqSrf38H2vmTQoNIzvccMxO4bTpXGMrPF3dNTz YXrsdXrYRMXA28ZI/LPg4X90tfWTKAN2/i57cRL2YpJdTLDTEXv7sHwDtd3tagUf1fKTKOeTyuWx coXBD9jdSdjdJLt6N7X1SdjXk+zJFLv8x9SOUPVr1Jkg2qrwUmwLVycxtZqkN8emNL6CD6bgtwAD AC3W5y4NCmVuZHN0cmVhbQ1lbmRvYmoNNzk5IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2Vu ZGFudEZvbnRzWzgzNiAwIFJdL0Jhc2VGb250L0VHQkpQQitTaW1IZWkvVG9Vbmljb2RlIDgzNyAw IFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNODAwIDAgb2JqDTw8L0xl bmd0aCAzMDkvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCkiJvNXPb4IwFAfwO3/FO24HSlta CokxQUWzZKjR+gcsTg0ezGK47L8fThMLfQuXxy4cCO996K9vAQBe3l/tOSjKKQRRfq2r48e+htEo st9fB4jW1+pSV5cTjMeTWfMJZ0KlcApCzriScH/az8Dtsr6Vl9O3GcTZs85o1dRxlmgB4bMuJ9Fz TFfc101iXH1Joi9RXWC6cnVLoltUl9jMt3S41f3ZFdCucbdrGDOZJRAKJh+FJcmgSpRX/qBSo/9r O+neBR1yOyW9+pBjN736gkRfoHqKrLt08YIEL1AcyTDDM1ffkOgbTNdohrUmfuue4+Y15wrsHrz+ W/RIaz+mfqs1EzJzz/WcZJBz9B/QsGpdEysSfYXqXqh1d9eQ64tEWueO2pHoO1Tvj7QB4hx+BBgA aI/2lQ0KZW5kc3RyZWFtDWVuZG9iag04MDEgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250 RGVzY3JpcHRvciA4MDMgMCBSL0xhc3RDaGFyIDEyMS9XaWR0aHNbMjc4IDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAyNzggMCAyNzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNjY3 IDAgMCAwIDY2NyA2MTEgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDIyMiA1MDAgMjIy IDgzMyA1NTYgNTU2IDU1NiA1NTYgMzMzIDUwMCAyNzggNTU2IDUwMCA3MjIgNTAwIDUwMF0vQmFz ZUZvbnQvQXJpYWxNVC9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUv Rm9udD4+DWVuZG9iag04MDIgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNb ODE3IDAgUl0vQmFzZUZvbnQvRUdCSk5BK1dpbmdkaW5ncy1SZWd1bGFyL0VuY29kaW5nL0lkZW50 aXR5LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTgwMyAwIG9iag08PC9TdGVtViA4OC9Gb250TmFtZS9B cmlhbE1UL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250V2VpZ2h0IDQwMC9GbGFncyAzMi9EZXNjZW50 IC0yMTEvRm9udEJCb3hbLTY2NSAtMzI1IDIwMDAgMTAwNl0vQXNjZW50IDkwNS9Gb250RmFtaWx5 KEFyaWFsKS9DYXBIZWlnaHQgNzE4L1hIZWlnaHQgNTE1L1R5cGUvRm9udERlc2NyaXB0b3IvSXRh bGljQW5nbGUgMD4+DWVuZG9iag04MDQgMCBvYmoNPDwvTGVuZ3RoIDM4NS9GaWx0ZXIvRmxhdGVE ZWNvZGU+PnN0cmVhbQ0KSInElc9LwzAUx+/9K95RD83y8qsJlIFt5/Aw2KF3Ed1GBYeWgfjf+2q3 NVmd9BCQHl5JyCefPMI3AAB5PluVDxVoA/N5UZWQcJZpBTuqNtOQcsaVgPoluYHb+pVGUVmaPY5f zC5WBJitB2p2SUVaQx8VJTVzYKRlynIJ9dtphxP9B/4H246Nu7qkaix8AsKKFpTiEem33ibk2YJU jPcK/Z+ShlkD2lmmjxq5RCPm5x3v2kOzfXo+dBvXX+8bmK3bZn9o9rth/74nfV2OenMB9I7grh0B aa3xmp9zVcZ1CoGDk+GTnVBYHtUpBHpOOL1PnMu4fQqAnpO45pQK5ugCpsgU2mOvTWSpAOhJyemN qmRkpwDoOanpTq6wcZ0CoOekJzupotBRnUKg5/RLAv/7JR/l9/mSS+Yy4V9yjXwRVSoEelJXg3+c UFKYuAkVAD2n6Umu8D5uaobAwSmbnuS8chg5DDzgok4+6Fm3NKed7l7d1Crsnt12k8C3AAMA5Cbq SQ0KZW5kc3RyZWFtDWVuZG9iag04MDUgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50 Rm9udHNbODQwIDAgUl0vQmFzZUZvbnQvRUdCSk5CK0NhbGlicmktQm9sZC9Ub1VuaWNvZGUgODQx IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag04MDYgMCBvYmoNPDwv TGVuZ3RoIDkyMS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSImsVVuPm0YUfudXnEeoBJ4Z Bgaq1UpZ7AdH2bYJVHmIqorgwaZrwAtsN/n3PWcGbKfattq2tjzXc/2+c8YAAB+/g855dBgkkgdp AlEaBQL8eTdo5yPer7KcQTUCAxbEKQ6p5ABj1aGeRMkkNnpMQJgGQpJa7bzH713hrH6Cm5vVfbZd g4Tb27t1Bs6qKBhwKGqHBYwxXFXg05KHUDyjm2IAnpA7miIRiBhkFAVhzFCgdT652Ydtsc3evPN4 4sI2z3/e5FDQ5kePu3C3AS9U7pv1+sMmzzfr78H7pXjrbO7R96aY0xVLzCZZTIGSfRUaAUcYGCas cAxVbCHhZFOEqEgeJAiWBNEFErIuQoW6i38SUHKx/mgwjQJlMY3APxu4iu5fB//o0LGSCHsUGYSt e7tHErhAGpi0MYYpfiRUrbPathzWvUnh/TmR/4piliNyUSJxVGiDBYkMAfLsB4fDMyRwj1XyFhwL xIyK/2dYzni1zsHJX6i7aKk7BnuqPT7XHpUdo4LjjDIw5WZWKogTkCFSm9iCc8ErfrP1c2U3Ptdz Jn4V1mhqzKQgEspVcomTtXHDWJjevmBGXbXFElqgEkWx7WbX33YMVyZ06p3INMxF/BPK+0KoZVo3 oxe5Ff6ePJ+7tKFf0+29GGWUezqWuO/ocoIeD0+01Hg2eNKluwlbquk7Wh5hnA8Gc0Ni+0bPRtGl codld+q73exm6s14oCugWA7kwxg80lm31x63wcHnoX/aHyYP+/rzVzpd9JrOuBu6q5jQrA2rbsxx R8Ybe1TNKTQoZFIer16BK/iTF1i8lIbPg0iFNKkwJID/ksb0VTTa504uPIbxP/C4+VK2DbKE+Zhx TwPxlx0uh3rU0JbEJSe6pVuX1WQWA+F1pdh3i75R773UfUZH9gjposumRRJOi3b/O+605xODJU2j 0YT6+K1y43HmWuuTkdCAUWgwNmsUc6G01yawzgsvPnSld0bFCEx2Q9zSXKKAWVSUS3kkZ205eH7s PugJqqHBvBlSzQ3VM3gvMc7Z/0Q556/nnCVnzv+Wcua+6/sHbCAoJ0oVEeZU7cL9iniPOGNbIdsP GsanQRPYlKv1IRYf+GeMTpADXddN1ehuAv1FV08TNg/0NVQ9hWiVzsUoTDHiC0b5z6G1Jw8JLjty DuNkOr2cNDb/iHzuAJ+RrjPRts1uRKGJWpx6F3TVd33bVCY+Qhyf+D8EGABsyO/aDQplbmRzdHJl YW0NZW5kb2JqDTgwNyAwIG9iag08PC9MZW5ndGggNzYxL0ZpbHRlci9GbGF0ZURlY29kZT4+c3Ry ZWFtDQpIiaxVTW/bMAy951fwKB2cRnYSJ0ARYGt76IACO/g2DIMbO4lWf8FW1mW/fnyUnaVY2q5D D5YtfjxSfBRNRGQo2YwmlKyJl0e6nEwm0Sr5PrpIkkmvHLNsCYtwNjZT2GUj5fZtWduCNNve3F3R 6OIzXV5e3F3dXpMJabX6eA3hVfgtPIkRzGbj6TSmwIzjKAIQB4yWq3Mg0REkScyQSryI+wQk8tMs zUzOgXxjHObE/AvbB2EYD6+bn3qqUn5Kfmxl9VxVW3J6oXY6MCpnKe0bHYUqg5WDICNbNkXeO+Fd wdbpcCFQztYVbRiihrgltxOYArr7uqW1NkbVlWshWMNBG1GbhXrktHijY+VqrFDXjfhrE/VqZOl2 vAzQbJjlQ3qtrQUZqJYPw8oS+/ahz1bCCXCVWSTbISHSX5NPf1d/+hyF0ibM3yyO/onG2ZtpDI8s hi+xGEXqgw5RyZna2VwHC/UDpcTZ68bZcl9SzroKS8vP9qBNqIiLwkIsW2hKsXG0rSEqOl7o3luu e8ccGgdccc3AAFqBKywIMBGQwYSAwn2hWvGEcmuBJtp1r0S7NIVAAvE8D/P34iF+Ew/B0/sUvXaf rm233utgqrrOVnhvdST92dXYFaJDz4kNOZFCz3XEZ8u9iWtjwCGXk2Fjla51wOXae4NgzrfMKJEd +JaRYGw4Ptc75XvJ8g4tnuJLAmUS5U8A2Qsc30Wkg88KmYpNgSUVz+r0FGeJWbwXMcv/ICY+ErN8 kZiJupUz55Wv/waFG47WM5CelKr0G9RZ9NYXaKjETrDSwskH9Z5c/U3udLD0tOwGhF9pm3m6QSaP MMN0M4z39lnQwc/LnhawRPe+kbxB3nWg8zwJ4eSdSAjN2382y+OYil772Ww2+em9RzlkVEFaYHfw kxg9r9HFeLiv8+EDkuP84WGR0e44igoLyfDzmosTNbVMHf+DsjLZqLUy8B/6CGQrkrj1vpWBtW+a wiciIxWuqcR9pvjP/uVfKT79FmAAPxX6mQ0KZW5kc3RyZWFtDWVuZG9iag04MDggMCBvYmoNPDwv U3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbODQ0IDAgUl0vQmFzZUZvbnQvRUdCS0xCK1Np bVN1bi9Ub1VuaWNvZGUgODQ1IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVu ZG9iag04MDkgMCBvYmoNPDwvTGVuZ3RoIDkxNy9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0K SImsVVmP2zYQfvevmKeCKiAuL5ESsNiH2AGaBEa3WAF9CIpAsWlbgS3tSnKD9Nd3hjqsXW+CFKgM UyPOcI5vDgIAvF0vYXFzD7e3N+vluxUoDXd3b1a0mecSJOS7heAudSAg3y4YRPkXYomeFQsuhEBy A0Th6fwrzOQ/4oFYKTe+7ps6ijP2d6Q0K7dltYdy64sWimoL3aE+7w9d/NjUG9+2voXGH4uOhLo6 +it/vxCTHUV2lOHZZGZTVxv/2EXKsjbSDOodrPwJ9carpoximaBRaZmvADfPu2LTnRtSTX4JdI/0 X4FhJjCW6pMa0CDTsbLcOA2x5E5rcuFWCJ3dIThXSpKfQRT165GnnM76SCcp1C40/e+u4ZduhIWO fYWPbNlEMYZK2EWxYXtaEF6PwUpN4EtGkAjWljXxghTsAt1AAZFjH4ryH9/vb870Onbh1USSeUwX 0dvA7qXanuvheNEY7Madb06YHaIPviW7jlKRMI+qgpyP4oS1bUjBHIgQFkWk7Zjo2xGDK5TtPFUD PFLwBM/hFxGO2xSzkXJnhIH89ELZ23zxhDZToyDJEi4UxKmRPLVYhos/f4VqYEuepUFiEMAvEkD+ zfJBwKYli9yiwzwzEqDdVHhOSY0uDIoTzWVQu1v8gb83+TwSp8ZIBJcmhf1Vu9kx38KFNlCkk8Ls KSkTnljs5IybVGiKdGhDzZSEX1AM1sU3UEJk8HAoqv2hKGF5KKvi9TZw00wQ6E0wrKZOJA9kbx5f MsOGwGAzblVvmq3L49FXVXk+wW91Fc3gnpuYOu1pMepwBJKSGJMBQs+OOBNeEySXKrl4oVJJh565 sQ+W8974FebzHv3RaJvbSLm2z208lUWNQXb+GHD9Xqz2/4xVu4yS/h9idd+JVb6mPbVcv0ASqyV6 pQNd9rJun1eKCMMJg8OGCdoDpTDYFMtGc2vGWv292RcVjp8tfI5ix771s5/jICWdSpls8hS909k4 SIeHnLu4gOIpiRtESU63xfQ84E2UscdIKcVqXC2OJBXuEGqXfqcJNFw/a2TQHCP2NoiWuBpW9AcC fR/Rvdfv9Iq6sPZm/Gx/8H4eLDmuUvxI55fFVFPvqmNZeSy1Rz+lIRWz6sJhl2CbC6MD5DgRtBVh giDuVmf4YL0ZRMshqRxsTqj1pGBVY90EO8+LJ5XzUUCj1gyj9jICUkXFHLQO42e6vX70p0EM/wow AJnl55oNCmVuZHN0cmVhbQ1lbmRvYmoNODEwIDAgb2JqDTw8L1N1YnR5cGUvVHJ1ZVR5cGUvRm9u dERlc2NyaXB0b3IgODI3IDAgUi9MYXN0Q2hhciAxMTkvV2lkdGhzWzI2NyAwIDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNDk0IDAgNDE4IDAgMCAwIDQ3NCAwIDI0NiAw IDQ4MCAyNDYgODEzIDUzNyA1MzggMCAwIDM1NSAwIDM0NyAwIDAgNzQ1XS9CYXNlRm9udC9FR0JL SUIrQ2FsaWJyaS1Cb2xkL0ZpcnN0Q2hhciA0Ni9FbmNvZGluZy9XaW5BbnNpRW5jb2RpbmcvVHlw ZS9Gb250Pj4NZW5kb2JqDTgxMSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlw dG9yIDgyOSAwIFIvTGFzdENoYXIgMC9XaWR0aHNbMF0vQmFzZUZvbnQvRUdCS0lBK1pXQWRvYmVG L0ZpcnN0Q2hhciAwL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0ZvbnQ+Pg1lbmRvYmoN ODEyIDAgb2JqDTw8L0xlbmd0aCA4MzgvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJlYW0NCkiJ1FTL btpQEN37K2ZpL7jct+0qQmogi0SiSoV3VVU5YIITY7s2NMnfd+aaVwigVuqmWNij+zhzzrwAAG7G Q/BuEq9/WxZ5mU0WaZ3B1VV/PLwdQSRhMLge4YmfntAxU0rFcWyB46Mss5ZzrkKQaIuNLTRnIsRT MoTpEmGXCkaV99Vzjq7R0f0eXm3h+0P5Q4OAZO4J6eDxoyLDVNQhRlxBsvSuyMm5/yB58i7L0Xs5 UcS4xFtadWokszFpi0HLEN3SVnxCjT6vxlxUY6Rg+s/FnBV36NEeeuSdR85kKNCaguDMdN7JkIoZ DKYwzGquyf83R2DQszsif2v/D/cH35O7j5ELt5G7HIR/QpAIYNZ1BI9eP0l2ecLNiPKEGZNY58kL CMXiqEuZs5QImbbvk+bfp82qzBrY/sbZLE8hkFIfbAUnVUdb1eRSO+c9x0OQ9x5WKJcSeprF3EIy 83y4/AtOFWW8Cy1dD3qGS4dDlvUPmJ1r05jv21RHmxo2mnGDjRhajIrYN2u4W+7605ztz1js1B8l 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 4u0a2u2w+2ipdGlO6dge3z3tZfSywrLXe6P2Xi1fVl6zj7BPuG+kwqeic7/m/l37P1TGV96pcq5q rVaq3lE9d4B9YPCg48GWGuWaopr3h7iH7tZ61LbXadeVH8Yczjj8tD60vvdrxteNDQoNRQ0fj/CO jBwNPNrTaNXY2KTUVNIMNwubp45FHrv5jes3nS2GLbWttNai4+C48Pizb6O/HTrhfaL7JONky3da 31W3UdoK26H27PaZjviOkc7wzoFTK051d9l2tX1v9P2R02qnq87Inik5Szibf3bhXM652fOp56cv xF0Y647qfnBx1cXbPQE9/Ze8L1257H75Yq9T77krdldOX7W5euoa41rHdcvr7X0WfW0/WPzQ1m/Z 337D6kbnTeubXQPLB84OOgxeuOV66/Jtr9vX76y8MzAUMnR3OHJ45C777uS9pHsv72fcn3+w6SH6 YeEjqUflj5Ue1/2o92PriOXImVHX0b4nQU8ejLHGnv+U/tOH8fyn5KflE6oTjZNmk6en3KduPlv9 bPx56vP56YKfpX+ufqH74rtfHH/pm1k1M/6S/3Lh1+JX8q+OvF72unvWf/bxm+Q383OFb+XfHn3H eNf7Puz9xHzmB+yHio96H7s+eX96uJC8sPCbAAMA94Tz+woNCmVuZHN0cmVhbQ1lbmRvYmoNODE1 IDAgb2JqDTw8L0xlbmd0aCAzMzk1L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDYyODg+PnN0 cmVhbQ0KSIncVmtsVMcVPmfmPrx+xHixsWsIzHJjQ/D6zRsKNt414MgEPwg2z117197Fa6+zu1hA KDKBBlg7Vaq4SKGkMSlEQCC6xiSBlFYpLcRSWlKkpAJBaCs5AqVxlKi4VInAPfd6a5E0qMqfROr9 dmbOOfPNmXNm7sxdQABIgE7gUPB4TX5R4aXBKIDqIOsTjR0R8Vr+sWOkHwSQ5ze1N7f+/vYCHSDx CoC0sTmwtelX3VmkwzkATPR53Z6r+M4tgJS5ZJvtI4N1fPxPSG8n/RFfa2TL8iXRfaT3APC9gWCj 285yLtLYASoXW91b2vkTygyAtEnEF23uVu/h66nnifsclVPtIW/74+9M20j9C0mvBUZxA++UByh6 FbSSZPV9lN7HX1JwIyCP8LP4EUD+vaFxQ7D4U6oLC4pTbClZthRbJ4e7nQzugTzwxdxOyZgeeuBL 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 spxj+YDlNMszLC0se1iCLILFyWJjoVAI+j34FtwCX4IvwBL4BFwBC+ASOAPeBkfAgc6GsryyvB1G Sjsc6hLGWWGcEsakMA4J4yVhHBTGoDD2C2OfMOLCiIkn5Bbpk4/LR+UjslJWyDJZIj2yUBZIt5TS JR3SJrGGzVJ7xBbpCWsRc3GAIv0+87eeQEpz791nOgNhzSyJUOS5cKUZrDVtJ60dTUpbndO0N8e8 ajNzjTRtdWzSm9Z4nCpq/35V5pQi0SM3aLO2gwS+GxfE5s+F8vbAa1heQ3kNy1upzUepIdI3nniM HtLwX5e2YTSnZtuwGm40NicpHG/dz7pgy3djPAmvPx6u8Iw0W4Pb5a885r3uIG2G8vGfXoBN4iag QnUtdS0qhH80FSpU+8d0qPLYLr/3ujaTDnngLkYq/xRgALubwkINCmVuZHN0cmVhbQ1lbmRvYmoN ODE2IDAgb2JqDTw8L1N0ZW1WIDAvRm9udE5hbWUvRUdCSk5BK1dpbmdkaW5ncy1SZWd1bGFyL0Zv bnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgODE1IDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyA0 L0Rlc2NlbnQgLTIxMC9Gb250QkJveFswIC0yMTEgMTM1OSA4OTldL0FzY2VudCA4OTgvRm9udEZh bWlseShXaW5nZGluZ3MpL0NhcEhlaWdodCAwL1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5n bGUgMD4+DWVuZG9iag04MTcgMCBvYmoNPDwvU3VidHlwZS9DSURGb250VHlwZTIvRm9udERlc2Ny aXB0b3IgODE2IDAgUi9CYXNlRm9udC9FR0JKTkErV2luZ2RpbmdzLVJlZ3VsYXIvV1s1N1s3ODZd MTIyWzc0N11dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9TdXBwbGVtZW50 IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAvVHlwZS9Gb250 Pj4NZW5kb2JqDTgxOCAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA5NTE1NS9GaWx0ZXIv RENURGVjb2RlL0JpdHNQZXJDb21wb25lbnQgOC9Db2xvclNwYWNlIDc5NCAwIFIvV2lkdGggMTI4 MC9IZWlnaHQgMTAyNC9UeXBlL1hPYmplY3Q+PnN0cmVhbQ0K/9j/4AAQSkZJRgABAAEBLAEsAAD/ /gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCEAAgGBgcGBQgHBwcKCQgKDRYODQwM DRsTFBAWIBwiIR8cHx4jKDMrIyYwJh4fLD0tMDU2OTo5Iis/Qz44QzM4OTcBCQoKDQsNGg4OGjck HyQ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//+AB4C AAAAAgAAAAQAAABaAAAAAwAAAAQAAAAAAAAA/8QBogAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoLAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUS ITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4 ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+hEAAgECBAQDBAcFBAQAAQJ3 AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5 OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaan qKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/8AAEQgEAAUA AwERAAIRAQMRAf/aAAwDAQACEQMRAD8A8yxg1xHr2DHWncVhdvNAWAD2oHYMc5/nQFgA9O1AWDGM dqQWFx1PUUBYUDr/AFoGkAX196LhYQjnNAW6gQM5oCwuAPxFAWDbQCQoH+c0irC4wf60gsKF5zj6 UDsKB60ALj1/SkUOC9T29qLhYUDufSlcdhwHAOcfWlcdhwXHt6+9K47Cgcew70NhYUA9e/TnvSbG Oxg88c96Vx2FC+oP0pXCw4L+PP4UrlWF29cAEelK4WHhcHpn+VTe40hwXkenXntSuOw4LyM1NyrC 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 ABQMKAFoAKADpQAUDFpAFABQAtAwoAWkACgYtIBRQMXNSAuaLDAGiwDgaVhig1Nh3HBqVh3HBqVg uODUrDuODUrDHBqVgHhqVhjs0gDNIAzQAuaAEzQAZoAQmmAmaADNMBM0AGaADNACUwEoEJmmAmaA CgAoASgAoAKAFoAKACgAoAKADvQAtAwpALQAUALQAtIAFAC5oAKADNIYuaADNACg0gFzQAuaAFzS AXNIYoNADgaQCg0hi0AOpAKKQxwoAUH8KQDgaQxRSAcKAFBpDFFIBaAFpAFAC0AFACUAFMBKADpQ AntTATNACUAFABQISmAlABTASgAoASgBKYgoATpQAlMBO1ACUxDTTAQ0wGGmIYapCGGmIYaoBhpi GmmA00xDTTENNMQlMBKYgoASmISgApiCgAoASgBaACgAoAKACgAoAWkMKAFpAFABTAKACgAoA//Z Cg0KZW5kc3RyZWFtDWVuZG9iag04MTkgMCBvYmoNPDwvTGVuZ3RoIDI1Mi9GaWx0ZXIvRmxhdGVE ZWNvZGU+PnN0cmVhbQ0KaN7swuV2ggAYAFDe//+651w3YoBKKIoBIirdKYjonoB9z7Gzey6CIGVZ GtGPDkO412CwV6G/U/yd7O1W0C2W0CkWTiHZ2zm0tqKVi2Y+M3PByHl9M9U3Ey0bQzUbKRmnpJyc DuV0sFqzcLnuL5PeImGkhJZiah5TYkyKUXcWdYSoLYQEH+J82JoGzUnQmAT1sV8f+djIr3EeOvS+ h97XwP1k3Q/Wfe87bz3nlXFeGPuZtp9o+5GyHkjrnrSqXbPaMe86ZqUNjVvCuCGMa1y/wvXLln7R hNo5bGhnDe20DtUTiKnHmHoEa1A5hKhygCrIv7/uV4ABAGrr4pgKDQplbmRzdHJlYW0NZW5kb2Jq DTgyMCAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCAxMTAyL0ZpbHRlci9GbGF0ZURlY29k ZS9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JTcGFjZSA3OTUgMCBSL1dpZHRoIDI1Ni9IZWlnaHQg MjU2L1R5cGUvWE9iamVjdD4+c3RyZWFtDQpo3uTSh1baAABA0XNiCCFh773cWxlOHKC4EJShImL+ /zOa0vZ0qdUKSvLeJ9zzBOF7ExPiIIueNMiqJw+y2ZRB6iC73aHndLpcbj2Pntfr8/n9gUAwGNIL 60Ui0WgsFo8nEslkKpVOZzLZ7OTk1NT09MzM7Ozc3Pz8wsLi4tLS8vLKyurq2tr6ei6XzxcKxeLG xubm1tb29s7O7m5Jb29vf//g4PCwXK7oHR0dH1erJyenp2dn5+cXFzW9y8u6XkPv6ur6utlstdp6 Hb2bm9vbu7vuoPv7nt7DQ3/Q46P2LUFgAwhwAAEOIMABBDiAAAcQ4AACHECAA0zAASbgACIcQIQD iHAAEQ4gwgFEOIAFDmCBA1jgABY4gAQHkOAAEhxAggNIcAAJDmCFA1jhAFY4gBUOIMMBZDiADAeQ 4QAyHECGA9jgADY4gAIHUOAAChxAgQMocAAFDqDCAVQ4gAoHUOEAKhxAhQPY4QB2OIADDuCAAzjg AA44gBMO4IQDuOAALjiAGw7ghgO44QBuOIAHDuCBA3jgAB44gBcO4IUD+OAAfp8PDeD/CuDlAgTg AIGfAB4iQBAOEPwTwM0CCD0B4AIBhJ4GcFIAQnCA0EsADvMDhP8BYDc5QBgOEIYDhOEAkVcDqKYE iMABonCA6NsBFDMBxP4LwGYagBgcIA4HiL8PQDY6QAIOkBgGgNW4AEk4QBIOkBoqgGQ4gBQcID0C AIuBANJwgAwcIDNKAPEJAGG8ALIjBnh+gfEAyMIBJuEAk3CAqU8FED8dYAoOMD0GAJZPBJiGA8zA AWbGCUD6eIBZOMDs+AFYPxJgDg4wBweYH2MA+QMA5scbwDZqgAU4wAIcYNEgAMqIABbhAEtwgCWj AajDBVg2IIB9iADLcIAVwwI4hgKwYmQA5/sBVg0O4HonwCocYM0UAO7/BliDA6zDAdbNBOB5O0DO ZADeNwLkzAfgewtA3pQA/lcD5M0KEHgdQMHEAMFXABTgAEXTA4ReBCjCATYgAOFnADY4AJGnADZR ANG/ADZpALHfAbaAAPFfALaYAIkfANtYgOQAYJsMkEpnduAAO3CAXTjALhygBAcowQFKcIASHGAP DrAHB9iHA+zDAQ7gAAdwgEM4wCEcoAwHKMMBKnCAChygAgeowAGO4ABHcIBjOMAxHKAKB6jCAU7g ACdwgFM4wCkc4AwOcAYHOIcDnMMBLuAAF3CAGhygBgeowQFqcIBLOMAlHKAOB6jDAepwgDocoAEH aMABGnCABhzgCg5wBQe4hgNcwwGacIAmHKAFB2jBAdpwgDYcoA0HaMMBOnCADhygAwfowAFu4AA3 cIBbOMAtHOAODnAHB+jCAbpwgC4coAsH6MIBunCAezjAPRygBwfowQF6cIAeHOABDvAAB+jDAfpw gD4coA8H6MMB+nCARzjAIxxAgwNocAANDqDBATQ4gAYH0OAAXwQYADfeglkKDQplbmRzdHJlYW0N ZW5kb2JqDTgyMSAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA5NTQ3L0ZpbHRlci9EQ1RE ZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgNzk0IDAgUi9XaWR0aCA0NzgvSGVp Z2h0IDk3L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJ CAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4cGxckJCcnJCQ1MzMzNTs7Ozs7Ozs7 OzsBDQsLDQ4NEA4OEBQODw4UFBARERAUHRQUFRQUHSUaFxcXFxolICMeHh4jICgoJSUoKDIyMDIy Ozs7Ozs7Ozs7O//AABEIAGEB3gMBIgACEQEDEQH/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUG BwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQME IRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV 4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgEC BAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhai soMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdH V2d3h5ent8f/2gAMAwEAAhEDEQA/APVVnZ31g6RgOLMjIaLBzW2Xu+YbMfNF6u/Ir6ZkvxZN7a3F kczHbzXlJJcSSZJ1JPMqfl8AyWSapjyZOHYPe2fXzpDfoV3Wa9mtA/FyC3/GBgz7sW0DxBaT+ULh 0lbHKYvH7WL3pPo+B9cOj5tradz6LHwGi0AAk9twJC3F44NDI5XpP1V6v+0umNFjpyMeK7Z5P7rv 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 iR/mnRXgAAABAHACdKULJiDr3RGMqAJ27Ofl9GouqqZQ92NZRPpWs+kN30p8ZRcLpWLiNkD1bidz 736vJPJlXEkziNVaeEXdOc3oeJViZONQTX9qnc/kie3bQeCj0/oOHh47qnD1nWNLbHu7tPLQOwWm kjxy7q4I9nCx/qrj03ueL7DS7moHbI8HObyFczehdPzH0usaWigbQ1mgLf3T5LRSSOSRN3qoQjVU 5GR9XMXIzxlWOPpta1ooAhvtEAT4eSWf0BuTl1ZVFzsV1bQw+mIMDjbBEeC10kvcl32FK4I9nF6h 9XWZFONTjWeg2hxJJEk7ol0/vaKwehYpwLMQuc59oBfe73PLhqCSfDwWkklxyoC9lcEddN3Jwfq9 i41VjbXOyLLGGsvd2aRBDRrClkdBx39NHT6XmlgcHF8SSR+9xK1EkuOV3firgjVU51fQ8FmA/Cgl tgHqWH6ZI4M+XZZIxcS25/SOnFzi6Dm5jvcdrT9AH4rd6lXlW4VlWIQLngNDiYgEw4/ch9J6XV03 G9Jh3WO1ss8T/cnCdAknW9B+1aYWQANO7YxcSjEqFVLYHcnUk+JKMkkoybZBopJJJJSkkkklKSSS SUpJJJJSkkkklKSSSSUpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqp JfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qTL5 WSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP1UkvlVJJT9VJL5VSSU/VSS+VUklP8A/9kK DQplbmRzdHJlYW0NZW5kb2JqDTgyMiAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA2OTk3 L0ZpbHRlci9EQ1REZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgNzk0IDAgUi9X aWR0aCAzMTEvSGVpZ2h0IDc3L1R5cGUvWE9iamVjdD4+c3RyZWFtDQr/2P/uAA5BZG9iZQBkgAAA AAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgXEhQUFBQSFxcbHB4cGxckJCcnJCQ1 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 2TomJmUvsu6T1D07cgfRfRXVY2u8SZghzR4yoY/1Z6j9iuzsRv2PrNWXlupL9G30WWvcKbo5Y8GW nsV2aSSnJ+quPfi/Vzp+NkVmq+mhrLK3ctcNCFz1eN1J/wBUOqdF/Z+S3LIyn1lzWhlnq3PexrHb tSWu8F26SSnk/Tyq+h5eP0XAzcfNyfTxw7Le5231PY65u+2yG1gkmIQuj9D610LqTGuFWRhZmMMW 0Ytbq21vob+htsD3ukuEtJHkuxSSU8PgYfWM3onSugP6ddisxH0Pzcy8saGih/qRSGuc5znEROiu YOEynr2XZk4Gcbbc420ZNb3DG2FrA1z2tta06gzLF1iSSniOm9F6pifWE9SyaLr8OzPytlG7Sh1h /R5bawYcHNlpnUcouLj5/wDzjptxem5HTMg5FjuqWsfODfRDttgkw6x52nRoI1ldkkkp4Or6oWn6 v2XPryh1L7U+xuP69grLftW4H0Q/042e7haHVuldQvd9ZRXQ8jNbiDGLYl+xoD9n9VdYkkpo9L6P i9MFxpdZbbkvD7773myx5A2tlzuwGgCNnYWN1DDuwstnqY+Q0ssYe4KsJJKeCxul/Xj6pF1HSGs6 10gEmrHsdstrBMwJj8JHkjWde/xi5zTj4XQmYFjtPtF9gc1s9wDt/iu3SSU8n0P6mZPSundQudle v9YOo1WNdnOmGWOadu0xugO1JSXWJJKf/9kKDQplbmRzdHJlYW0NZW5kb2JqDTgyMyAwIG9iag08 PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCAxMzEzMC9GaWx0ZXIvRmxhdGVEZWNvZGUvQml0c1BlckNv bXBvbmVudCA4L0NvbG9yU3BhY2UgNzk0IDAgUi9XaWR0aCAyNDcvSGVpZ2h0IDY4L1R5cGUvWE9i amVjdD4+c3RyZWFtDQpo3ux723Nc1bkncP6BJDNvUavl5DxNsKdymXkI9jwM7pbazqkajg3BFsWt TgI2MMlLLMvMy0mwZVI1A4RAwGCcqsRcz7zENqcqZFCru+WrZFuS7/IVX0nQ1WCIrd49v+/7rfX1 0u6LLjgV46LZqNq71157rW99l993yze25GdyZRP4m+lKun92NjbnZzjD3+vCUguJmr9iR9xUtrE5 m5S/+J5LNPMn/BPf5Se9390gU3Hv/LUrmcaVb0x/Uajx5VX/Ij/wcLsbMzz9G3CRXJXwZ1MGfwvJ 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 VKUqj8DS07r325LfJHYqUqWTw7ONzSXrnGWHsnJ76KqEAc/SVHm3SueFU03pPVU+GNbOxR4BCjKJ qBN2YEkPPmEvzOx6QkvTro6uX1BaWZfFRZaCEETVOW0vlvue0aun3FHIpSysCtdZayqMsUBK+MEk cCUwT60qNUIXjolV/s+u901vOl1tLA1A/v8FGAAVhCI8Cg0KZW5kc3RyZWFtDWVuZG9iag04MjQg MCBvYmoNPDwvU3VidHlwZS9JbWFnZS9MZW5ndGggMzcxNS9GaWx0ZXIvRENURGVjb2RlL0JpdHNQ ZXJDb21wb25lbnQgOC9Db2xvclNwYWNlIDc5NCAwIFIvV2lkdGggMTAxL0hlaWdodCAxMTMvVHlw ZS9YT2JqZWN0Pj5zdHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsR FQ8MDA8VGBMTFRMTGBcSFBQUFBIXFxscHhwbFyQkJyckJDUzMzM1Ozs7Ozs7Ozs7OwENCwsNDg0Q Dg4QFA4PDhQUEBEREBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMgKCglJSgoMjIwMjI7Ozs7Ozs7Ozs7 /8AAEQgAcQBlAwEiAAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUB AQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJx gTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePz RieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYF NQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNU oxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//a AAwDAQACEQMRAD8A9RXnH+MRjX9fpDhIGK3/AKt69HXAfXSyur62Ydtv82yitz9J0Fj50TOY/mzr W2ra+HAHmsYMeMer0nW/SXkfRp/dCXo0/uhdJTl/VysmxjGsfqPo2HTtHgYCRyPq2Rduaw+qd4AZ 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 mDb9ge2ujPteH2CoxU/0/UfZtdO7Q7LG6u4cNUrRQet6R9YMDrAudittYyh2wvvrNbXmS39GXaP1 b2Vx+ZSzIrxzJdaHkPAljdkSHu/NJnRed1/VnrVuK3Hs6dk1vxsiy5r7Lw9hcSXVvpZu/RgeHiqv TOiZPUTkVY9AvpbdsyX02h7Xlxoc95dIgvDXEjslaaD6n6lYBJe2ANxMjQHgoT8ymvJrxjJfa1zg 4CWt2R9N35s7tF5ufqn9YPSu34tropoa5gFbxbS30R6HusG5zPTJDTA89Vad9T+oloa/Estddbty bHObudU37IG7iH+DH8eaVooPofqV8b2zE8jiJlJeQu6Rmfterp4awZ/2aytwFwNp/Vq2NxyydCBI HiCT2SStNPsCS+WUkVr9TJL5ZSSU/UyS+WUklP1MkvllJJT9TDlc19Rv6J1P/wBOeV/1QXz8kgno /UyS+WUkUPu1X/5RMr+rjf8AtvkpLwlJBc//2QoNCmVuZHN0cmVhbQ1lbmRvYmoNODI1IDAgb2Jq DTw8L1N1YnR5cGUvSW1hZ2UvTGVuZ3RoIDQ5NjAvRmlsdGVyL0RDVERlY29kZS9CaXRzUGVyQ29t cG9uZW50IDgvQ29sb3JTcGFjZSA3OTQgMCBSL1dpZHRoIDE2MC9IZWlnaHQgNjAvVHlwZS9YT2Jq ZWN0Pj5zdHJlYW0NCv/Y/+AAEEpGSUYAAQIAAGQAZAAA/+wAEUR1Y2t5AAEABAAAADwAAP/uAA5B ZG9iZQBkwAAAAAH/2wCEAAYEBAQFBAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwODxAP DgwTExQUExMcGxsbHB8fHx8fHx8fHx8BBwcHDQwNGBAQGBoVERUaHx8fHx8fHx8fHx8fHx8fHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH//AABEIADwAoAMBEQACEQEDEQH/xADEAAAB BQEBAQAAAAAAAAAAAAAAAQQFBgcDCAIBAQACAwEBAAAAAAAAAAAAAAABBAMFBgIHEAABAwMDAgIE CQcCFwAAAAACAQMEEQUGABIHIRMxQVFhItNxgZEyI1OTFAixQjNDc7PDtHXwodHhUoKSY6MkNGSE RVUWJjYXJzdXGBEAAQMCAwMHCAYHCQEAAAAAAQACAxEEIRIFMUEG8FFhcbEiE4GRodEychQVwUJS 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 6F009a27/i8BBgCqcfBNCg0KZW5kc3RyZWFtDWVuZG9iag04MjcgMCBvYmoNPDwvU3RlbVYgMTI0 L0ZvbnROYW1lL0VHQktJQitDYWxpYnJpLUJvbGQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxl MiA4MjYgMCBSL0ZvbnRXZWlnaHQgNzAwL0ZsYWdzIDMyL0Rlc2NlbnQgLTI1MC9Gb250QkJveFst NDkzIC0xOTQgMTIzOSA5NTJdL0FzY2VudCA3NTAvRm9udEZhbWlseShDYWxpYnJpKS9DYXBIZWln aHQgNjI1L1hIZWlnaHQgLTUzMS9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1l bmRvYmoNODI4IDAgb2JqDTw8L0xlbmd0aCAxMTQwL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgx IDI3NzI+PnN0cmVhbQ0KaN7UVk1oG0cU/mYl+f8nTuX4R7EZ4dpxJNV2nf5RXCrbkh3XhzhWmmhN qCtLG1tGslRJNTa0xZdAEG3xqeSQgw859KhQStWUgCkUEkovhh4KhRR6SS/pJT30YNRvxxsht8aY xhQ6w8y87703b99+u/tmIQA0YgM2zFwIDQ5f/DWfouZnjsvRZCSNbMN5oFoCYiS6mpOax9FO+SXa u6+lF5M/LH95k/gSYG9bTKxf815IO4GqW7R7loxI7KfqG7VAnYlfWaLClXfsAo4E8fNLydxad2f7 J8SbxJ8nUtGIiIs49983r5+MrKW1t+ynuf8DYrkSSRoP2htDQA2x2E2nsjnmzVZz1bSnM0b64au3 r3P/a8QRCHwlNuGAXXusPabm/t4qfBjGb9jfRCUYDYwF4YfEnHazNILPtI9BKEqlkjKvYRO38AW+ Ew9RT1sDdfWly+iEkx1FwDddRO1M+I4Qn+pFUbpeRKDra9TCNv/OC0UmIGUwHiiIdwk0HxUeNyWb T04UbL0Ts+EeXeZlfiqWlxNyKRIr2HvVSoOR1wdlAaFwnPOlsLvg111l0dD11xnHbsaxqzh5nRGW rQjLKgID7NLJ4ZuWBVvfTPhiuLARcBX8Ad3ldstgYXsmXNgOuNy6Tq+qcqZcP4y3WzlXM+cqD4Wa vSghxmAIPZ+3kNbnLmzn864870RpetxFAUvBOzV9bL3BovDPKJO/x+0yFT3uHjfz0AOMXeubDoWD zMRtZlJnUur4B6UOi9L6SkobmF69orTxmChtOgqlzUei9MTBlLYw5xMmpScPprTnEELLCv8BDG/s MbxxAMPP7WPYeTjDrZUMn2K2rYrhtmNiuP0oDHccieHOgxl2MedOk+HT/x3DXRUMqxpjVhLWk+/R UZJan+3RqTP7qpBHPKHbg73BtvV0aP3YMVdRwo7mtOSXsSMmiWf3dIyq5PIep8IdlXFUqXuyP/a/ GXxdvPwovd8QOKABXu891mKzAjaxztUQ2dGGkzxbahQC+tCNVhMTCdbWDlrrFdLQRd8W1BHdNes1 qr1/r85b8OAXzNO31q/xeoODQy++Kc5s+d/wtHcpH8cBvfUZu9k062xw8v4oiU6OKhxbq8P/tNn5 DM3Zrvg5r85GzqVvy2ep7Qg3/1HZO1A+hW1oJhLWVZoRsuQqygvmU7DznwI38J4lC75Zf1qyhibR Zsk2dIteS7ZTHrfkKsqR8VR6PRNfXMrJ/uhZORpLLRgytJ7NGcmsnFqJpjLpVCaSM2I+OTw0dG5A jiYSUvlnZcbIGplVIzYQnBybnhr1zl1R2ycOhxhHCmmsI4M4FrGEHAnsRxRnuY4iRusCDMoh+mRp NZDkKjGFFXqluC+t5oiyxeCjbRhD7OcwoGIk2GVF/KxCBleD66raNYAgJjGGacYdhRdzuFJx9QnM cl7E+4wU4Z7DfZ/Faj1tz95Xpb4zs3Wbgr2t/E/GcXXhR99888gf6LA9MtV3b/9eb673Wt7eVBv7 VFV1PH2T/hJgAON6FVMKDQplbmRzdHJlYW0NZW5kb2JqDTgyOSAwIG9iag08PC9TdGVtViA1Ny4y MTIvRm9udE5hbWUvRUdCS0lBK1pXQWRvYmVGL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIg ODI4IDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyAzMi9EZXNjZW50IDAvRm9udEJCb3hbMCAwIDU1 MCA2NTJdL0FzY2VudCA2NTIvRm9udEZhbWlseShaV0Fkb2JlRikvQ2FwSGVpZ2h0IC05NTMvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTgzMCAwIG9iag08PC9MZW5n dGggODY2OS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoMSAyMzc3Nj4+c3RyZWFtDQpo3uybB3hU 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 DQ94jcK03IDXEfcEvAV+RcDb4DfDK3icj3Z/wON89I60k5w0iAbgZxjcRKqiEqqmhVQDyqkWsVS4 alpkfnsQqYJbQP1QM5bm4cdJUxCroErU1ZilMmgZWi/GdylapqLfPLQpRqwKLarMdmXQWvQyWjrR wgktwzhGba0ZNXo74Y3jlqI0H1pNcxFbeLrPH9eW/x9di3FGC8yxjLNxkhulKvMcjOPnwnnMUo15 zAWI9g+cwcIzrqAEpTrU1ppXabTut9M5aMCAYc6JVSXVC2sWltc6UxdWL1pY7amtWrign3PsvHnO KVUVlbU1zillNWXVi8tK+6WPS8nMTklM9cyrKq6u+rNSQJxVNc6yqtrKsmqnx1ldVlFVU1tWXVbq rK32lJbN91TPdS40as4olv/x+TirFjgxjNO9oKoW/XNrPbVlNU7PgtL+GGCheYCShXULaqurymr6 UTqNoxTKpGx8J7Z6wFPMx1iHiPFA/qzl/23d2Un7Pzhpzf+MjJXDQ7uxRuwCGkWgcxmRK1ZdirXF /Echxn+z7/BZZsns8FEnqGOQuUw99Pny5w09lPJJm5MDW2raPGDfiqKxTpnr2H8JMADFor1CCg0K ZW5kc3RyZWFtDWVuZG9iag04MzEgMCBvYmoNPDwvU3RlbVYgODAvRm9udE5hbWUvRUdCSVBCK0Nh bGlicmkvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA4MzAgMCBSL0ZvbnRXZWlnaHQgNDAw L0ZsYWdzIDQvRGVzY2VudCAtMjUwL0ZvbnRCQm94Wy00NzYgLTE5NCAxMjE0IDk1Ml0vQXNjZW50 IDc1MC9Gb250RmFtaWx5KENhbGlicmkpL0NhcEhlaWdodCA2MjUvWEhlaWdodCAtNTMxL1R5cGUv Rm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag04MzIgMCBvYmoNPDwvU3VidHlw ZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgODMxIDAgUi9CYXNlRm9udC9FR0JJUEIrQ2Fs aWJyaS9XWzNbMjI2XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkvQ0lEU3lzdGVtSW5mbzw8L1N1cHBs ZW1lbnQgMC9PcmRlcmluZyhJZGVudGl0eSkvUmVnaXN0cnkoQWRvYmUpPj4vRFcgMTAwMC9UeXBl L0ZvbnQ+Pg1lbmRvYmoNODMzIDAgb2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRlRGVjb2Rl Pj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4tOkh2MxoGinTxkLao3e6KRLsCYkqg5cG/jyQ4CTqQBI88 3JHy2L135CLIL/amxwijI8u4+JUNwhknR1DVYJ2Je1eymXUAmcj9tkScOxo9NI2Q32m4RN7gaRiq F/UM8pMtsqMpIYf65zch/RrCBWekCAraFiyOQh5POnzoGUEW4gMctoBQl77atb3FJWiDrGlCaJRS r+2tINn/8xvrPJo/zeKx/aZakbZ3PPPyTXcfZmVOFsvhxUi24Ajvvwk+ZLUc4irAANRNam8KDQpl bmRzdHJlYW0NZW5kb2JqDTgzNCAwIG9iag08PC9MZW5ndGggMTkzMTEvRmlsdGVyL0ZsYXRlRGVj b2RlL0xlbmd0aDEgMTc3MzAwPj5zdHJlYW0NCmje7HtbzGXJdVb1zPz/ruu+nPPfuqe7p3s8d3su nvZ4PPHEt8Gx4/HYsR0nsRVELMcXkCceIscZW1FsHhEvkR8SJISivOSFF4MMihQU4I1ISEjwhOSI FyJBBBKKeEJKhtqrvlq1Vu3zt9uQFwT/Uf1nn32pXZdVq9b61rfMFWNMMN8195vnPvmZZ5//9//w xrV85p/n8ktf/OY3bg1P3v/fjbly3Zj7/ujLb3zl9Y/93vf+szH3/zBfT1/52re+vHz1d75rzJ/9 fWPsE1/90hd++U/+2P6+ue8Hv5ivv/ur+cSVv3zgXfn+/5p/P/LV17/x5m988b/9PWMemI3503/3 ta9/8Qv3/a2/+Qlj/vxfmit/9PHXv/DmG3/7E/e9Lz//cr7/1q984fUvxf/xua+Y+/5xzHU8+8av fumNox9+8t8Y81/+U77+T3Kbv3vlt8yRsbn9uRVmxvd3TTQfzC2+cuyOr6x/3zX3/Yv3/Nvf+J/5 2lku5vOf+/Ar5gPm1lt/an741g/NI2YtD5h1LIz5NfP9tbXmylv//+//6T/zj8x95o1cHnjrL9/6 j/n3cZY0n2VrzJK2MydZli7MNXPd3FzPXHo933EP77qZP3+c5e56/tz31p+Zz5o75j3mX+X6PmBe ND9pnjcvZ1n9E/Pz5rW8Xh+i8r185du5hV8zXze38udafuPahrVMxnz/iXe8+ulf+PBfe/D27c89 vUr2Kt8k71fMW3+Rj9+CxPPf/T9/ZW2BoTVUy3O53MrlKJeUyzHKO3L5CRwfoZzi+ySXB3JZV+Y5 vj1pmXLe5bJqnQHnnkexeN7iXUe4HsQzI63v9vsO7g3ivEfdCd/y+bXcl8sVtKW253ncH/EOg37L emvdAd/rfe9CH6dcXkB9I+6tz13LZUZb6rUr+LY49xKeX+sZ8zyc5vKxXN6fy+1cHs/la7k8h2es 6M9adrm8He+M6/3ddVuvYX7Cgeu1/+Euxee6P5XLz+XyxVy+kMuv5HIH5bVc3pnLS7m8gPJcLt/E 8cvoSz1er30Ivz+IOn4il+dx7Q6+X0HdP4Vx+Rx+r+c/msvX0a5X8P1JXP9pjOHP4L713CdQ/wfx rvUdH8/l3aj7VXHPev4Wzr8i3vcSnv2QqOs1vOsDOF/H4f24/mQuT+Dc87h/PX8T/fok3vNz6N9H 0Zfnce5nUT4v+vcZHK/nP437XkN5Cf2o47GO8Ys4t77vF3P5LM5/CuWXUOeqHK7m8tdz+deQx9/C 9/tyuchlh7lccvnlXK5hrtbzZzi/nns6l1/HHKxj9nbc96So5wmM/zrWq/x/C/35AOSkjucjKC9j Lh7G+Rnfd7qyvvs62rne/xH83ufyDlz/Fq6/De9/EW35OMozKKuMPYs+3UB5XJTrqONx9O067nkE x/V963z7eyz2r7h8FvP/GcjXxyHvn8L3axiDx++h7CEnBuv7jXv4/U1xLK/L+36c630x/xeUVY6+ je+vd9d+3PP3Ur7VHV8R5f9Elk7x/R+w3s8gE+t6fggyv14Puax7UsJx374R5RGsvY/i9y088wTW 1TXU7bHeH8L62uP+iHOyPIzvW1h3tdzGtfX9j+L3pyDX6/F5Lt/Bu78DXfYdrP/6/Zto13rtBOdf whivff8ern0DfVp1wlMoiygPoo11b3wauvej0EPvQVtfRnuu47lnUNd7MW4PYw7ejnqew5i+Av15 A/r2Nt5Z+/ooxucZnLuDuh4W+rbu49UWeVjotkdR3yoPj4lnT0W5jnef43iCLDyLe2+h7qdx7iba sX7/JPq09vHDOL6J8az31HmufVr3tt/DvvcRjMEzOL6D73eLMX8ZbX8GfXoM5Z1o2y20vdomt9CP d+H300Iv3sZYPYa+3Ea9j8IWeArX3o75/BLsqLpvvAPPvA9yUNfW+7Bv/xTqvYP7bqIt13F/LU+j X3VPexyy8ijG9HHI/PvRh1cxhi/g3KuQvcdw70vo1zOot8rlB1HvO9G359G+R/H7WdRxR8j/K9h7 nhL3PAU5fW93/u0oT2G8XsDvJ9GWOzh+Fu18E7/X9h3dY7kf5QR6Zg95vcC5qxjfFyEH63v+aS7f z+V3c/nDXP4glx/k8tt4Zi2vr7b1qp+yN/iYeTrb9/tsq0dzNXsQY/5cy1Z3ypZ1zGeX/Hv1IH0+ Tvn/6k+WT8q+w5Br+Lp5M5/NWjX7DlP+HJO3N+DbZg8gULlqHiQ/7mr+ZPvc/I385Ou5/IL5pvlN 80nzHfOpXF417zMfM+/NfuRHzEezb/mk+Znsb77TPGven594V/ZJbuXafs38A3PDPJOP32Zu5/Ja vuPL2e+6k7/v5B6t/5/Ln2fyXesdj+V336Fz78w1vJg9qxfyW1/M/1/MXskL+XwpL9I9z2Zv5Dn6 /Xezj/u23C6TPe8PmZ82H86t+rD52dyi13IbPp1/vZnf9mo+t177bP7/ETq6k9u+Hn3HfMt8MI/e U7nNN3Mt3861vpl94tfN75rfzz5a+Vzgc5o/N/M4n+b3n5gf0Ij+M/Pr5vvmD80fmN+muclaKj8x mc+bP6ffU75n/awe/jr66/c6e2sNE83qRDMYaMbWa2O+ss7uPn/WGtb3eZrbX83t9rm/z+VW7PNz qzQ8TFIw5ll4mOqZ6Z0xt+3RfP6MairtCFT3Oe6Y6D0jSVGk51L+vplH4ySfW+9ZqIa1lSd5dtZ3 pDwGY77rOknLRO1b5W+Vzqv5mUC9Kb1Y+7PK25xbEszHc10xn93hiUCtifl4HYsl3xnp42iUErW0 lH2uZ6InbT6uNcy5rPW5/HvOH0+jEQlJsdSfc3pDqSPRSAVqe8Ta8XR/O4rUholW0Dpflj/r8bV8 38RXXP7l6P9aZ/m2mGeHq2uvd/S8VzV5UbPl9wy5LOK3Jbmx3SeIO5x63uKdFm9u9zwg2lDeH9CH dtbR+y1JmXzac20JZ9v7PD3luv7IdjngSuUzb3pjCYetR170bDv+ctweUO2obWnH+ooVPTr8caK+ +9VYF10q7/K0svRIuEvq1J+Bxthjpnx3ra/PX9raIO479GbPxasxcGqULEuxVfW1/umRcbSmassu 77Gcq9KChDcdurt/V+Ra2ko6NKLDPY349u7a4+GSp8s8DGr077+L5PiD73d3lbZ7lRd3ST2ljQ9A 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 fOb5fe/8QhSffVz/Wb/3C9G4K4270sSUzr5Xl7rNkd8cdZtL3eao21zqNpn/lXWbUbfJus1o/d7o mP3HGBux1Rv/wb7KvsSWdJth8/XNjWR9uvHVr3wl/fzn8xeSL+r9+2/8M/sae1G3kVvYOmPb8XQj nrb60PXu79amXuu/rz6y8eoj866s+Y3o0SianY6WR6dnkS4/enp6+sXVPe36wUodkwfq5VcpdejW eu/K86/R/3QtCs2/sz82lhC2fWp7enh9/WCyOdvY3urLf7OsyvlHV6p6+blZXU/fvVzX8z2jPVG0 HH0oisyasYhlN76ur/WX+suy2ZGtra3DRzbsBWfTNk5meVlGo9EfLUu+8ptRXs7i+db2VjOaRYcP rW8fYGO258Y32DfZXxvP/evZ/YxtTelxu4fVz5noItVxujFcm3pubA7Xs3mcHD6ytf2NqP1kG0Uv tJ+8ripV7anrsqzr1bpUzb2V/jcrKqWqQtVVVd+jeLJUpPGnb3nylv2FuuXAlf0rX/7c5z4e1dEB zR0aWnWbby7jybiKJ/prZTe+rZ/+Bd3O7mMP+3epqxAnW9tdLWa2OnFsKrW1tW0reUQ/WDydmsOn W9vx3P6+vWk/Q/B4L6myLO7meVY3e08kBU95m/FsMj6yb28ySbJqNtFPVdfviGZRkedFpV93fawe Z/lKo5/3t4tSFRuNKppnonaUxumRW0bjqllK8tuqpUQmS+PJEuej+Z3zURvdXamiPhi10VvihGdx xVO1lL5db9+p0f87Oae/1tfZl3WfPMKOsRNsg22z1+hv1j1N90CDL7fVbcb+0bfst3StdpvWH46m 0b368tf1Pc68LfrDaCkVKedSxqPoz9uPfuxkc+K65rk8F9PZyaqp6ll5YjZ9U1mqAydvXVXZuDp4 +0OHjq+u/vqa/ndyv/6n25XSNf0ee4ntY69lz7Jf1N/GvvLtzeG6q3GytbmVbOh6mo/VfS1TY/0B qTCbz3dvgaZL7t4ON8z19Qefzcuo0dKq0RJKP2NzJvp4/Iak5nv3paPpshL7p5OkWlU8k1mcFtOU y71pXSe1SBuZ59OiEOVMnzxL2iKf5oVSRS5L/U/qqy3x22T2rKqXs3ePf61Wy9mvLj1a5bP0kWxf ndfV72ZyNcsjyScyTYo0y5Z4xosqi+N8rZ1MrplaWVRVF8EmF4K/vqrjLu5E9/B/Y3+nv/c97DH2 Hnah6+mzLS+Q3Nta39r2z25Elm4R3W9J967WbT9Y9y90ZldxYt+k/1k3kTjp2sZn0xX1gG4b6sT+ sZj/VH7fODp3Wz2byY9E0ZvfvTRZaa5ODk7l0TjO0jgrRZXxepaq7NV6PRFyMjmSzNWeJBFJwsuM L792FH3wrkkeJSsHsj0r6bJalTyd7C32r67oPl3rvrOyvpyNXkiiKhNL4yIvm3is1tp0tD3ODpST 8TjTx/Hup6KUb1+Rxe0rK0y3NHHjX9h3TUs7xR5g53RLs08WJ9N2Y+PU1mZXXl8/vGlb3NawkZlj k0S3RDpJ79yk17hFouyD+UHJk+LoTN4muS6V/HVT/WYOHd+bJqu3ZtneffoFLLd8lMnx5UjV47hc lWOeyu4r7p8nabU3id8wmUmZxDN+sGzSbKmVo+bRIq/Tt2/mE9mcqprbV5OUr66vpONxem/ZnBVN JvK5iEWaPqab2nYbZ20bp3rsUDe+xf6V/S07zrb001JHcmLfSjz9gOu7PZH//vdpgfULuWrKu5N9 R8s8mR5aTQ7t40nSHM7SJJ0XdS0/eGyqxdDtIpUfuCermviMrkZ7eM8klWL/seWH6kzoZ890/fI3 61/OHGvlWB4vE60e6JndjW/qOr6oR5V9WlbdzV6nWy+bz7r7n9o64kfReHrYNmNTdqUjugkb6T33 I82cRNe3omUxjnkZ/Ynuyy9Ft3aD4Yfq6NJodOkPcvXA0ljK0eSs7qWz3yvz37/0ttORSiOZRfnr 31scO64738NSyEx36idzqf/l4vnu1yWuujHmRF2fb1tm/x0EAAAAAAAAAAAAAP9n/Ar4ofESAAAA AAAAAAAAAADgx42oBgAAAAAAAADwE8eL4IfB6IsAAAAAAAAAAAAAAIAfRZaeAOBHj/HnAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAADw/53J3wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA H0fivwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4ySJ4AAAAAAAAAAAAAAAAA8P2SHgUAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAA3gxXs0yxi9t9pjS0vsVxv2fJYlx+kcqzL76JywjbY4/pINs70nhX2CSqP9DU/ T+Ulvf/LVB7r8j9ROdbl7+pypMuM/VJUUTlhl6Lf6srpWO8/Gf0nlRP2jtFtn1q75+KVJ648dXnt scevPXX5nVfWzl69eOGZ69eeunLh6bUz1151fO3Ou+7avOPUyZObx9dOX726dv3K5cefeXrt+sWn L15/7uL7zt5/zxvP3XPskSvvf+DilZffeOv18++7+P7z159cu3bpf77lmcevPHWenWX3s3vYG9k5 /fcYe4RdYe9nD7CLev2w/nuZPcuusvPs+k2O+35++RRb0/u60hOap/R91thj+qNcM+V36n1r+uyr +ogL7Bl9927/FV1+Wu8/o7dexY7r0p3sLr1ssjvYKXZSL5tm72l93lW9vq7PuKyv+Yw567q+1tOa 6+w5/fd97K26dF6vL+o6dc/3pD7mGrv0A6nXGX1Gd/b5dz360CMXP3DhqWfvfGT+4J8+eMel5sE7 Hk+e3XzXuYe+9t5rP/f85ROXs98595arj3zvwosPfeLk6Ca1eky/uYd0c75f1+JnXqYWYR2GT9G1 /Gsfi35WvzJGfeUEu00XzrPP+j2T0UemS9/++feon/4OE7ar/MV9b/lOt/7ShWev3vivG//AbrB/ 1JtS9xVzwH8LMACBmQm/Cg0KZW5kc3RyZWFtDWVuZG9iag04MzUgMCBvYmoNPDwvU3RlbVYgMC9G b250TmFtZS9FR0JKUEIrU2ltSGVpL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgODM0IDAg Ui9Gb250V2VpZ2h0IDQwMC9GbGFncyA1L0Rlc2NlbnQgLTE0MC9Gb250QkJveFstMTIgLTE1NiA5 OTYgODU5XS9Bc2NlbnQgODU5L0ZvbnRGYW1pbHkoU2ltSGVpKS9DYXBIZWlnaHQgMC9UeXBlL0Zv bnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDAvTGFuZy96aC1DTj4+DWVuZG9iag04MzYgMCBvYmoN PDwvU3VidHlwZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgODM1IDAgUi9CYXNlRm9udC9F R0JKUEIrU2ltSGVpL1dbM1s1MDBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZv PDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAx MDAwL1R5cGUvRm9udD4+DWVuZG9iag04MzcgMCBvYmoNPDwvTGVuZ3RoIDMwOC9GaWx0ZXIvRmxh dGVEZWNvZGU+PnN0cmVhbQ0KaN5UkclugzAQhu88xRxb9eCFJSAhpEAaKYcuamjvYA8pUjGWIYe8 fT1umqoHW/pmn39Yc9gdzLgCe3WzOuIKw2i0w2U+O4XQ42k0ICToUa1XCr+aOgvMJx8vy4rTwQwz lGXE3rxzWd0F7to2f+D3wF6cRjeak7ck8v3DW45na79wQrMCh6oCjUPEmqfOPncTAguJf8b2YhFk YHHtPWtcbKfQdeaEUHLO4wrKVHCsAI3+74/89CGtH9Rn56LfcM4lrzwlGVHyKHeBlAyUN0RFn1Ph OJdEOg5tsn2I1IUg2qS1JyFzTtQkW6JYZoH21CEWGdXc1JJqJmKgyLyuKTLp+9RTkW72nn42KIvt Lq8iv8h1YlqJ5L5JpM7OefXCTYJGpM5o8HY2O1sSgl70LcAAB0WLnQoNCmVuZHN0cmVhbQ1lbmRv YmoNODM4IDAgb2JqDTw8L0xlbmd0aCA3NTA2L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDIw MjIwPj5zdHJlYW0NCmje7Jt5XNRV2/+v7zIz7IsByv7FEdJAcMU1HdlEEZFlasBSRkAhRbgH0NRQ 2tQos7QsK5c2yxvNYTKjMlPbF6v7zlbLymzRsmyxxZR5Pud7DYjk/dz+fs/zvJ4/Hgc+8z7nOtdZ vuc633MOLSQRkS81kUID8gpTBs1dU/8zLDuh0rJ59VrCjylXEElRRIZfZtbOqr7/aNoWIlMQkfdF s+YsmHn7od8TiVKPw2d0ZYW9/FDxtq+IJr+A+qmVMPjv9h1DFNQH+T6V1fVXb737/tnIZxMF3zCn psxOhlnoa3gS8sur7VfXBpP8Buo/BH9trr26IuW4OolownYi9ftaR0Vt8N7fNxHFwSe0NylqvLyT DORlWGsYjBHEMJW36WmZvEgONMmKqiqyupHkHyykLSLPJ7dQ0wg/f6pGaifpBdN6OUEj2iDKlN2G ANE7ZoRM64naV9OZz7X4uY9a6Al6mvbQa/QO/Sz5UCndSM/RF3SUfqI/JZJMUqgUJfWj/7ZP+/WG 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 sf3HBg6QguOCdYUEyCaT0WjunSwPvTghdfDgQWPkoUMSzL0DZN02JHXYGGXwoBhZCemwjJFFXlIO nMpTMk/3kRfEjSocaJAS43vGXuTlpcTG+McP1gJzcs2pfSMMqpdRMXiZLk5NM1vnT+z9pk+vi6Oi L+7lA0ZHgaf3GgJO/mQI+PNyNePPnfI3I2xj+hgX+PvKBm+vdX1jQvsMjLo0xz/Q3xAQ2TMiyuQV HOBzSbb99NqI+J4+Pj3jI6LiRVvxp0d5/uu+0Rd0QRd0QRd0QRd0QRd0QRd0QRd0QRd0QRf0Py0K oMfwrej/QKZc/xZpE51EruP/zRwkTfOkFbpIus2TVpF+0JM2Ir3DkzZRo/SqaEX1hiVKzvKkZQqQ Z3jSCiXItZ60ivQaT9qI9E6kJaQxHvmQJ43xKFm0mTQaRAPwk4pULlVRGTmohuqgmVQPWzpSDqrV v+2wVCE1l5JRMo7m4EejAthmUSXK6vRcBVgB73n4LodnOurNgc8M2KrgUaX7VYD1qCU8NXhoYAXa EaX1ulXU1pAW/ZYjVw06aDZsNZ11zl068//pWcSI5uptidFoZEWuSh+D6L8QKbueq9P7nAtrimcE NV2eoAy5BpTW608pvJM3a4MGDEjVcqvKHDV1NTPrtfQaR22Nw15fVTM3WRs3Z45WUDWrsr5OK6io q3DMqyhPzhyfNnFyWmK6fU7VDEdV/7SaOeXnZ/Kktao6raKqvrLCodk1R8Wsqrr6CkdFuVbvsJdX VNsds7UaUdIlO/Pcw9Oq5mpoRrPOrapH/cJ6e31FnWafW56CBmr0DspqGubWO6oq6pIpk8ZTGk2k yfhO7BbvAj2qDbCI+Pxnnv1hq0G+/L/V68IK/x9c4eIfOYv/w5y2Yj/ZAskUhLqlRH5R0jjsQ/q/ KRP/XH//Wj+f6YGjT1C4l76lPfPtNW8I7kn7xudUYHud91HTemTFnqbvef8hwADM+1LhCg0KZW5k c3RyZWFtDWVuZG9iag04MzkgMCBvYmoNPDwvU3RlbVYgMTI0L0ZvbnROYW1lL0VHQkpOQitDYWxp YnJpLUJvbGQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA4MzggMCBSL0ZvbnRXZWlnaHQg NzAwL0ZsYWdzIDQvRGVzY2VudCAtMjUwL0ZvbnRCQm94Wy00OTMgLTE5NCAxMjM5IDk1Ml0vQXNj ZW50IDc1MC9Gb250RmFtaWx5KENhbGlicmkpL0NhcEhlaWdodCA2MjUvWEhlaWdodCAtNTMxL1R5 cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag04NDAgMCBvYmoNPDwvU3Vi dHlwZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgODM5IDAgUi9CYXNlRm9udC9FR0JKTkIr Q2FsaWJyaS1Cb2xkL1dbM1syMjZdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZv PDwvU3VwcGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAx MDAwL1R5cGUvRm9udD4+DWVuZG9iag04NDEgMCBvYmoNPDwvTGVuZ3RoIDIxNy9GaWx0ZXIvRmxh dGVEZWNvZGU+PnN0cmVhbQ0KaN5UULtuwzAM3PUVHFt0kOIWyGIYKNLFQx+oneyKRDsCakqg5cF/ X0lwEmQgCR55uCPlof1oyUWQP+xNhxEGR5Zx9gsbhDOOjmBXgXUmbl3JZtIBZCJ36xxxamnwUNdC /qbhHHmFp77fv6hnkN9skR2NCXmrjqeEdEsIfzghRVDQNGBxEPLwqcOXnhBkId7Bfg0IVel3m7a3 OAdtkDWNCLVS6rW5FiT7OL+yzoO5aBb37XfViLS94ZmXb7r5MAtzslgOL0ayBUd4+03wIavlEP8C DADd+2p7Cg0KZW5kc3RyZWFtDWVuZG9iag04NDIgMCBvYmoNPDwvTGVuZ3RoIDIwODk2L0ZpbHRl ci9GbGF0ZURlY29kZS9MZW5ndGgxIDIxODg1Mj4+c3RyZWFtDQpo3ux7S8wt2XXWWe6+/6mqXa/z /B/32X1vv9Ltbrttd9uO7dhO2nk4ThwnjgkEEsdJbInuuBOc5wC1EBAJEkEyRULKADEgAsQQIaQM kRjADCQjRkgoYsCAIUpT1V47/1dffavOf5MMkOC2dv916rEfa6+19np8a2Wr1Sqt3lk9sfrAj/74 K69+8T/+zn8Y7vybof3s137tWw/WLzzxP1cru7Nave/f/uLbX3/rh/7g9//7avXEt4fnzdff/M1f XI3/7Pf+1/D/6hu/8NWf/0//+2/8vdUTP/mHw+/XvjHceN/qK1fD+/9j+P3oG2996zfe+tev/vFq 9WS/st99+c1vfu2rqye/9rdX9vtDH3/05ltf/Y23f+X4PV8Zvv+d4f0Hv/TVt37hm2/96vD7x98c +rj39q/8wtu3vv2j/34Y79PD8381zPkd+4erW6timP87w53e/76zqlefGWZsZ6snbPw33Hvi+X/w 3lzPxv/95Z9643tXn149ePe/rb797rdXj1Zje3Jl773xrdW/GEdf2bv//9//0/9W/2z1vtXbQ3vy 3T95978Ov88GTqsG3moHTtuu9qvj6mJ1tbqzujfeCZ8Pb9xgrHvDf/9u4Ls7w3/ve/ePV19efWj1 0dUfDf19evX66pOrV1efGHj1v6y+svrCIK/332u/Pzz5rWGGb66+OfDrg2Gk43tzGFu3Wv3L51/6 /Jf+0hvfd/upp37q/e/J6dDe43dbvfsn7/38Dsf/6b+f/OSf3njnT9sHh7YdWjm0zXua4jutHdrr Q0v+LPm9wt8r35PDd1Z3h9YMrfN7nd/v/ZuxfWBoH/J7+fvxm2po7xvak37/1tDWQzvzv+P9C+/3 zN95nze8V/g4+Zsn/Z3c1/juq0Pb+dj3fO0H/+7M5935HFtv4/e3h7b3MS6dNoWvce3rKLyvHsYz oNs45mtD+4TPoRr24WJoPzq0Lw3tqaE9P7SfG9rLQLce2tbbOF49vPfI6ZVboncLmGd+voXft8T3 5dDvj/mcXhraJ4b26aGNfPMRv355aB8f2l8d2qt+/civP+u/x7V8dGiv+e+xnxeG9l1De9bvfe/Q vmdonxvaF4f2V4b2I0P7gaF9eWh/fWg/NLTvH9oPDu3z/vyL/s747RtD+wm/9ym//5mhve7jf9Dv f9zn/oqv47b3Oc7nRX9/XO8z/vtjPt/XfJyP+fpe9Psvequ9jffu+HvjHM59/Dy3z/tej2v5cZ/D T/jaP+f333A6f8rXOd7/YX//R/zZ676O7/NvnvU5f8r7/ILv3Wv+zriXxdC+NrQ/HNrDof3a0J4e 2tXQtr6fI10eDO3u0Da+t2MfIz/sh/bc0JK38d7O6XUc2sjLh6H9rP/9maF9wOnxnNP5jvf9wO89 9OuPefuC0+dlb2/63/zdXbi+49/j70dO89LXe6pVf8HtZ53uP+E8+2N+/QVvX3aa36SNemHlbdyr t2/w+9fgGp/je4/znNvq//L2yNvOefq2twfQWm8f9D1ZAS99yfXGP/F7f9/34R97v//I//5Nf3+U iX/qcv+b/s0nnbc/5TI56oHv9t8v+/Px23vePurff96vH7k8fcT10uv+97tdf90fWu9j9S775z7W Pe/rrsve+PfSn93371/xMZ512uxBtvZOtwfe56W/d9e/v/R22+9fefu4v/PQz7CP+pzPXa6/y/XY 676OH/DrS9+H13zuz3h72cf4jOuXV1wm3vB3X/dxPujvvehjP+u0/5DP9znXRR/xNY/jdX7/JeCV h77u10GX9v689XMr0/M554mvD+2nfV6Zfo/8zMt8d8/X+2lf8/t9nI3P6+jtOWjPOC+84nR46PO/ A3/f8Oevup65DefCZ/z+faDvK8CbH3ceeeB0e+TPjk6T8bsPw/5/1nX3feeP/OyT3vfW1/yyr/fC 13fpfX/YrzO9L3y88btvON3u3VTHZhvR58Ptaf/7AOTrnvPK076PP+Pr/qzT+2mf2+857T/i39+B 777guvzLfv1DTues178f7JIHcIZmeXjoZ+YLvkeZh18Hm+MFt30+7Lz2UeCp18GWed11yev+TZb3 l5y/xvn/rsvdQ5/zqOP+uc/vDV/L5/ys/YqvZ6THzzuNxv3+qtPg0/78B/39n4aW+foltzOyDffb rg8/4Pv8il+vnBf+mtu4b/lcnvI1fd11xQ5k4ZH//YzL5q97X9leeb/3+82h/Zb//SadC497/ybt N+naoBV/jnbwv//ZefmOrxHbB3yfR97+W66Dv+W2xqtOp5fcJh1ltXE9du58OO7J2nVc4/d6f/+B /y7c/vpVv17RPJdsrPz9i36d7eR8dmS6Xfm98fpXfK2jnfFLQ/tl57Ffdj3xNefPn3M5edv58Qec h7/kf/PvF5wXv+g0+z7//mOgrz/k88n65eh8eM954yWw63qXnz9w3ffI9+ENl5mV+8DZt127vzjc H/z+a7+2Ap/7CfcT733HNxy89XdW5+4nPgn9rP26d38yatkXxnZOrfJ3i6A9Qe2W3y/9W2wGvv7e fd/S55ugrWHtT/rf/KwC2qxgDjnG0Dg9Hvg44/0V2HGd82L+3fhebXzvauf3Dt7Pz2v/m/xd/pv7 Tq6Tcl899JVlK/tFrX/76+63Va6rPuFnSQ9yuHHdd/BzsXbefQh+TAPzzHz6OR9753+T99H4vQRz ewr800yfI6yjgjXjO5Xrn+/192t/v/N228e8dLtg57oj07n3sUv/9jbQvvZvkK6dr7F1WuQ11LDW 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 ror92L1D/qE6I2OmPv86Q8dzPj+doWE6I28Eu88p97UWeaZYfgPcCJ5XC1ku5+tvBe/oimW8iS72 Y3EasSeCLBj6cVbM8WfSH/m0wy9w+Zp/nxQ0f9r/F8XSz1QXc1yaFjzmFrffizGGsvD979VijkkJ MtWNjCwj97D0/zYJn5bn/zE+z9N4Hi+W3y5LG3TYI6fJmZd6wKlYn4H7O63thXrHf/fM12MON9UN uh6lu0fV4LBTT6sn1VbdUo3qVauuupwbqna/j6ofqe+rv1R/564fqu+ojTpVX3f333d3P1L/SPnf Ud9Wr1D+TlxnfE1PbN11w7V2pn5Pde5yPXQ1TtV/qm+pb7i7V9Tr6o/VPfU19aJ6Tt1Rf6C+rO6q N9R99Zvqt9VbDr+hfl/9rkt91f2/43rZKqNG19Kgrrs3aLV2/Z5y1y5tXapxv527Hxxal2MpR7u0 pmdrV7+m/OluKu3ozrjymlqynK9V5e5qql3Rk5quKcdQrqF05VJTWUM5FdWoKMfSFdJTiybWM/zG ilDF1v011WhESU21dcwJz9XxXWVso471pt9StFOrE641P13zve+5n5Ut1fQjbdQ1HqmfvzCqVUy3 dHU82y2NsHOzbGn21jSnHc/Alt/Y052l9tc8j9N7B8rzs2Npvip+c0XzV9I7NL/bz5FfcS3mVFP+ NBcDr1VNfZna3LjU1Peec3vqvXG7snJlW9ebtSs/df87guaWH3NX485QzS23cSb8Dph6NY2qp7fU bsdrXjO/t6ZejLxTatf+Ke3d6X1TeuXevXatbym9pbsJ01lpqcfT3DTUo6nGjs7WNI6B5m+k969c jQ3l9+6/pdM3rcB199vQ3SqWTtfo0qMrn34HOpk36TScU72R++BrbKkXUz8H9+7piTWVt672SHO2 odprbmt6j6b/K8ob6a099cr32D9/Rk9N53eaO5+7pfobfsuU3rmygWbKz9bI7Y7U06mvI7UzlRjq yYpaNzy31tGg9Jopg1+nhtZK83/LFKPhtbVxPXXcnTWn/P+wM6feVLHGyHTG75aR96emvRv2t6F3 1TT3XaQLLb+tpPMZdpLlk2RczZFW3N9pelYTBexpr0ynsOEd2fHVcz+beBnqieXRGzrHfoQVnyhD 9WxMGRpFw7RMx1qG9ngbn7FUXlGNjsZl4sk2B65G/Le8MqEkpIbMc3Nf+0X+vGZ+Zi3fzyupmeJo PptzmSY+o3k96kjlDdOdaTUbopNhPRtuv+KZ1ES1LM1B6S65fxrmBJr7qXkvdnRODNG0ibOd0Zj0 4jLJXe7qkvtWzNBEMwaitSs6edeICq6cVLByksOKrnP+XVHdnk9cT/t54r4jtTDG9FTWUduWqO4F 0c/p1E9zMNXtXO5AK9XRzJWUv6WnNdWoYxstzfNAV0O73L/Ll/e0B3p6U0tP99SPnvZfS/N1g0or 4j4Dz2VP/bG0Gy2djI52fssc+kl67xlRkJqoiR9/T/Rk6tFV6vnA9GzkkU9zU1Ldgaj6SOd+ReXz NTBGqjsy1a2pxYZkmXd3NZFCPPg1Sxlb5tMNzZzm/dExNTljqhToWkenMVAOw7SuoRWd8k55Lis6 NYbnfKBZN9S+ZdnKRorVRGoQpAjDJYbWQdMeMY4nWZbcDNewTAnnK0hIhqUZP1ZPycooFxmmru3i 9HTM5Ts+af48+jNX7Z23bjGfXZSZgkQQnllzr3Sk4mWUGwYqa5nGB7pTUY6Jsoshjl5FmjrxhxOe 9SbKbnVcKd9GKSif/99yakXtl/SOkq+K6dIkH3a0g23keCPved/DWoyn4Vk3MTWvg41llqmc5bVM 6ZbkpA2XW6akXZTPbawzU0or+ITluWkEZ9GRzjexhblMJ/xHR95lxK4MJZYpe5AgJZ/Se897HaIR Y0vp8jwLNe/WOqZmXiRnas3t1DTuOuo5I8/P9MRaPB2kad+m4RmtSfryu7OJ+9RE2d7vv4bfYllu 8HvcyxLTTtoQ7w/cpY3nJfT3ceJd68gLV46SrFhG89JkR3kVSaYT1fM7ZMM0xkutXjLekixl6L9/ Pvz3OuCG5OQNPdGSzLhe1JTXSP+1yGnoXRv6b7jOhulVHXfnTDksybPyRNs96VHHnZ7y6XrBw8N8 tXt7oz0oGZnkXLdxV1fi/UasexN7HqTGmlZ1llTD/tFit8/aSsWj7WMty9qPJU4bZGIbtZpZN+ui 5KojZfLadBV36HzZOOs1SQlanIiK57RerErFO7yL9H6Iunm9kIoqfmLDNeRMWj4LYawNy25NnMep ZGRZtI7apWbt2tNS//6KT37DMmq6VxpBGSs+zXYx44F6NjF3nvUVz1JF+3BNPeu4rZLOZLXQUMI+ rFhO6FjTaKjnJs6RZR28Ji7g/5fx5GumxJ53WJKivM5s6X/Pp7YjGclLWEHS6jlnoF9f2++cPkpx Da1fzxTfP9cwN2iElqL5zrJcGPKqWKOOcknI6RZPNrRDAiUPue0iJ6xeyzTfRG7XMMWc92ojaJ6J FiN5ivrIOZq4z6zgCQ2vSytkm5l3LXWlmVYEqmyjjmUFx0q5jRXcKbxDRwnM8vnp+HR18Tx2bNOa 5Yvwv2MbWU2SqxalNe+4Pt5Ztp5JaaXls1wyT6qZKpm4D3tup45UpU7kHSvupufKeFINvbEhvd+w ZGejDceKE9IwzwxWQRulUI+e58dGuXeWbrp4lptIY5p4boOW3kVZKMx9IxDWpU7kgiWlr6JmO1vq ZMqInJLnQ/OZtnvyjWE75iyr+F3bRwuoJZ3JCO4QVijwwSbh9zqZOxslCxt1cR0lUCPaDlL2csRa 9M7T2T7OVxvHJ+etjlzIRCugt3tq6sGKbSUN2YIq1i18Wz1Lv0ZYDDXZPidef4Wp+gmfEBP5UJgZ 31rJHMaQfF3x7tpF21lN9q2WNOuB9EavM+qoGfasjY/MT8LY62itDdzEXiIXHLaqNAvpthHUwh5t oxJSzlwrjL6O61Vz7TCjJT97wnPyGNksz9xc3nK/G9IYvf0u2J5Kpr7T0yfu8ppbFXljw6dTs5Vq WPBWQ5bSM7KLeivhjm1/V9miuiWrxo7SXZQeV2wpnG2/3va6ohZWJIH6dmqSXrduHTdcNlJffV1v G13xsz69YRvC4GpPPd2wLBzsk2t6bs21VyQZbzlnTbthQ5LryDbYka0GI+1ryxSijLQ6yFdBCqni qjWk3428HkFumWlJR73TiTWqEtYyIzQLveAxOu7/WkjNgTLpqJm0QrLWxEFm+TrlJbWQ5jxHCvbZ lk9qn1jwpEw+UyZp9WgFpwzSqk0ovKSDOpGOteC8OlpcZ0qeWliOX6kubKNEfcjaM7ffL/xEkj8Y 2icbltaCPG1Y2unIejfE/en3mmaL/pat6X6HjiRzNrzzBuKlA507E3WdNloBJMUYeFZOuf5APovJ HrKmnvdM7/po4fOW6TFaHFfUpxXbHbtYMrI02ZEUbNmut4rla3rKcN2RrYor4s8dPWGIH6xoL/TU /0BNOpZnLT3b8Rlred4GHllLtq6R6biNunHLUsnMVbdRAvZ2MEtPNcQJPOWa3j+yJKRpjgaWR1rS oNd82oOdRfLKXli6NXO6fY5g9+wZQ/R8GWExqFmfqyOP15FH6oXXcxR2oNmXWicanWE5UMcSKb8N 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA+H+FTv21KpT/e9zBpx9Wrbvz6Ssu/cucLl36o5yu1JPqOVdTXdEu50J9m9MPuTb/lNMP u/zvcfqKS/8Dp0uX/heXLlxauVZ+wulKfbH49SldX3H5f1h8l9Mu/6GzH9z82Jtvfev+3Vdf++bN L33y+eeeffFTN595/eWXvnn/zXt3X3KFH7r59FNPfeSZZ29/+jO3P/DC3TdeePve4Zsv3L/ztZff uHP/GzfffOVAc0/evP3y3a/fvfeqekY9q26rT6vPuP8fUC+ou+oN9/9tdU99Xr2sXnWp19Uddf9I vfdS8gN1U31MvaneUt9ybd9173lNfdPlfUl9Uj3vZu1Z9aL6lLt/xr39ZfWSK7vvat9zNV/iJz/k fp9WT7nrI+oLrvSO+pqr+Qb19Ruu7E31yrts70mXuu1K76qvO9xzffr59rJV5su/9fwLL7/10r23 P/LC7rm/eu6Dr6yf++Br1du/8uXPPv/vX3nzq++8+uFX9Xc/+7nXX/jvl/75+b946qH/s5HRaXjr S8Xrrl+Kz8aH1ftd4s6v/X3MOVHqe3++/cnv9L/6X8r6o/G3f3b7nen3n27/x+d++j8//VeX+2/u tnFngyr8rwADAOsZQFUKDQplbmRzdHJlYW0NZW5kb2JqDTg0MyAwIG9iag08PC9TdGVtViAwL0Zv bnROYW1lL0VHQktMQitTaW1TdW4vRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiA4NDIgMCBS L0ZvbnRXZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMTQwL0ZvbnRCQm94Wy04IC0xNDUgMTAw MCA4NTldL0FzY2VudCA4NTkvRm9udEZhbWlseShTaW1TdW4pL0NhcEhlaWdodCAwL1R5cGUvRm9u dERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMC9MYW5nL3poLUNOPj4NZW5kb2JqDTg0NCAwIG9iag08 PC9TdWJ0eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciA4NDMgMCBSL0Jhc2VGb250L0VH QktMQitTaW1TdW4vV1szWzUwMF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88 PC9TdXBwbGVtZW50IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEw MDAvVHlwZS9Gb250Pj4NZW5kb2JqDTg0NSAwIG9iag08PC9MZW5ndGggMjE1L0ZpbHRlci9GbGF0 ZURlY29kZT4+c3RyZWFtDQpo3lRQMW7DMAzc9QqOLTJIVjMaXtLFQ9KidrsrEu0KqCmBlgf/vpLr JOhAEjzycEfKU/vakk8g3znYDhMMnhzjHBa2CFccPUGlwXmb9m7LdjIRZCZ365xwamkIUNdCfuTh nHiFp76v9EE9g3xjh+xpzNBRf35lpFti/MEJKYGCpgGHg5Cns4kXMyHIP+YD7deIoLe+2tWDwzka i2xoRKiVUi/NrSC5//Mb6zrYb8Pisa1VI/L2jhdeuepuxC7M2eN2+makWPCE9+/EEItaCfErwABw 3WrECg0KZW5kc3RyZWFtDWVuZG9iag0xIDAgb2JqDTw8L0Nyb3BCb3hbMCAwIDU5NS4yMiA4NDJd L1BhcmVudCA3ODYgMCBSL1N0cnVjdFBhcmVudHMgMS9Db250ZW50cyAyIDAgUi9Sb3RhdGUgMC9N ZWRpYUJveFswIDAgNTk1LjIyIDg0Ml0vUmVzb3VyY2VzPDwvQ29sb3JTcGFjZTw8L0NTMCA3OTQg MCBSPj4vRm9udDw8L1RUMCA0NyAwIFIvVFQxIDQ5IDAgUi9UVDIgNTAgMCBSL0MyXzAgMzUgMCBS L0MyXzEgNDAgMCBSL0MyXzIgNDMgMCBSL0MyXzMgNDQgMCBSPj4vUHJvY1NldFsvUERGL1RleHRd L0V4dEdTdGF0ZTw8L0dTMCA3OTcgMCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoNMiAwIG9iag1b MyAwIFIgNCAwIFIgNSAwIFIgNiAwIFIgNyAwIFIgOCAwIFIgOSAwIFIgMTAgMCBSXQ1lbmRvYmoN MyAwIG9iag08PC9MZW5ndGggMTMyMS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KSInEV21r 40YQ/u5fMR+lA232XSsI+RAnHFcId+0J+iEcxTiy4/Ysp7Zzaf99Z0Za2bLlOIGDErzal5nZnZfn 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 y72Nlc7i3qHW7FBf7JLZRK2Qm1xKUWQUCz3kc5Q4Cfa4S54BPk7YsDkYW9gUw6UumVyI5eyCclYX S4lOGd1QF51pbmca54ENp2NB3t5z69vzfbHAb4Jy+rGw4if+3Inf8vVVbsaxdFHcwmJ3f3Otk39O lM2OT1vcey9mMp4yySiTkCUqBw4XI6ZAhekzmXSM1n2gMhhscDXSCwk9pl44EuPjBIBPPO7SJuYu zTASe3riPZbCE9nuzZg+3Z4JAv8ShOx/gBByh0ii6BSEfvbwjZ6TCMvdhE/JHWADvhXEkKro3Ypy 6LTi9K8AAwB4cHgvDQplbmRzdHJlYW0NZW5kb2JqDTExIDAgb2JqDTw8L1N0ZW1WIDEzNS44NC9G b250TmFtZS9BcmlhbC1Cb2xkSXRhbGljTVQvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRXZWlnaHQg NzAwL0ZsYWdzIDk2L0Rlc2NlbnQgLTIxMS9Gb250QkJveFstNTYwIC0zNzYgMTQ4OSAxMDAwXS9B c2NlbnQgOTA1L0ZvbnRGYW1pbHkoQXJpYWwpL0NhcEhlaWdodCA3MTgvWEhlaWdodCA1MTUvVHlw ZS9Gb250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAtMTU+Pg1lbmRvYmoNMTIgMCBvYmoNPDwvTGVu Z3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKji06SHYzGgaK dPGQtqjd7opEuwJiSqDlwb+PJDgJOpAEjzzckfLYvXfkIsgv9qbHCKMjy7j4lQ3CGSdHUNVgnYl7 V7KZdQCZyP22RJw7Gj00jZDfabhE3uBpGKoX9Qzyky2yoykhh/rnNyH9GsIFZ6QICtoWLI5CHk86 fOgZQRbiAxy2gFCXvtq1vcUlaIOsaUJolFKv7a0g2f/zG+s8mj/N4rH9plqRtnc88/JNdx9mZU4W y+HFSLbgCO+/CT5ktRziKsAA1E1qbwoNCmVuZHN0cmVhbQ1lbmRvYmoNMTMgMCBvYmoNPDwvTGVu Z3RoIDIxNS9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKjg0ySHEzGgaK dPHQtKid7opEuwJqSqDlwb+PJDgJOpAEjzzckfLUvrfkIsgv9qbDCIMjyzj7hQ3CFUdHcKjAOhO3 rmQz6QAykbt1jji1NHioayG/03COvMJL31d7tQP5yRbZ0ZiQY3X5SUi3hPCHE1IEBU0DFgchTx86 nPWEIAvxCfZrQKhKf9i0vcU5aIOsaUSolVKvzb0g2f/zO+s6mF/N4rn9phqRtjc88/JNDx9mYU4W y+HFSLbgCB+/CT5ktRziJsAA1epqcQoNCmVuZHN0cmVhbQ1lbmRvYmoNMTQgMCBvYmoNPDwvTGVu Z3RoIDIxNC9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KaN5UUDFuwzAM3PUKjgkySHEzGl6S xUObona6KxLtCqgpgZYH/76S4CToQBI88nBHynN7aclFkJ/sTYcRBkeWcfYLG4Q7jo7gWIF1Jm5d yWbSAWQid+sccWpp8FDXQn6l4Rx5hV3fnw5qD/LKFtnRmJBTdftOSLeE8IsTUgQFTQMWByHP7zp8 6AlBFuIL7NeAUJX+uGl7i3PQBlnTiFArpd6aR0Gy/+cP1n0wP5rFa7tSjUjbG555+aanD7MwJ4vl 8GIkW3CEz98EH7JaDvEnwADUsGpmCg0KZW5kc3RyZWFtDWVuZG9iag0xNSAwIG9iag08PC9Dcm9w Qm94WzAgMCA1OTUuMjIgODQyXS9QYXJlbnQgNzg2IDAgUi9TdHJ1Y3RQYXJlbnRzIDIvQ29udGVu dHMgMTYgMCBSL1JvdGF0ZSAwL01lZGlhQm94WzAgMCA1OTUuMjIgODQyXS9SZXNvdXJjZXM8PC9D b2xvclNwYWNlPDwvQ1MwIDc5NCAwIFI+Pi9Gb250PDwvVFQwIDUxIDAgUi9UVDEgNTQgMCBSL0My XzAgNTIgMCBSL0MyXzEgNTMgMCBSL0MyXzIgNTUgMCBSL0MyXzMgNTYgMCBSPj4vUHJvY1NldFsv UERGL1RleHRdL0V4dEdTdGF0ZTw8L0dTMCA3OTcgMCBSPj4+Pi9UeXBlL1BhZ2U+Pg1lbmRvYmoN MTYgMCBvYmoNWzE3IDAgUiAxOCAwIFIgMTkgMCBSIDIwIDAgUiAyMSAwIFIgMjIgMCBSIDIzIDAg UiAyNCAwIFJdDWVuZG9iag0xNyAwIG9iag08PC9MZW5ndGggMTI0Mi9GaWx0ZXIvRmxhdGVEZWNv ZGU+PnN0cmVhbQ0KSImsV1lPI0cQfvevqMeelabd9yEhpAVWm0RBezBSHpxVRIwxjtY2wazQ7q9P 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 AcJmHgjNmJssFl03oNMMVWTT7DNuZU0LyVOJ17uJt6QzjwOfZ0pYkn+aWhIBr/dkFtC5TC/mQbSJ 4huuG3RYQ3xQyXGXOIvY+CoxYTGeiIGLbI7JReZuTIA27cJ8O0tZ/Ujh5+U6FI/LXgjujC7R2xpu HnnbQjiz8qJ4J2RpDiJARU4W5uLx6J4PXIu976EJT9IKM/1+H6ydfXqwhLu38Zfm8jGfUFdourEb xJXxVBxBU5k8L+4c8vgEHi8+L87heBwyG7qJSJDUi89yWbi4HQEeQ2vaxTjS0cgThky6kw13ghKV 9jyaO2+K8+LGInbNfQWL5mJ1cbhcfDgEwfzhYC6Hmm/92nw4RLhR/68Ph/F+GfPGqx8O9I8AAwAT XY7dDQplbmRzdHJlYW0NZW5kb2JqDTI1IDAgb2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRl RGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4tOkh2MxoGinTxkLao3e6KRLsCYkqg5cG/jyQ4 CTqQBI883JHy2L135CLIL/amxwijI8u4+JUNwhknR1DVYJ2Je1eymXUAmcj9tkScOxo9NI2Q32m4 RN7gaRiqF/UM8pMtsqMpIYf65zch/RrCBWekCAraFiyOQh5POnzoGUEW4gMctoBQl77atb3FJWiD rGlCaJRSr+2tINn/8xvrPJo/zeKx/aZakbZ3PPPyTXcfZmVOFsvhxUi24Ajvvwk+ZLUc4irAANRN am8KDQplbmRzdHJlYW0NZW5kb2JqDTI2IDAgb2JqDTw8L0xlbmd0aCAyMTUvRmlsdGVyL0ZsYXRl RGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4NMkhxMxoGinTx0LSone6KRLsCakqg5cG/jyQ4 CTqQBI883JHy1L635CLIL/amwwiDI8s4+4UNwhVHR3CowDoTt65kM+kAMpG7dY44tTR4qGshv9Nw jrzCS99Xe7UD+ckW2dGYkGN1+UlIt4TwhxNSBAVNAxYHIU8fOpz1hCAL8Qn2a0CoSn/YtL3FOWiD rGlEqJVSr829INn/8zvrOphfzeK5/aYakbY3PPPyTQ8fZmFOFsvhxUi24Agfvwk+ZLUc4ibAANXq anEKDQplbmRzdHJlYW0NZW5kb2JqDTI3IDAgb2JqDTw8L0xlbmd0aCAyMTQvRmlsdGVyL0ZsYXRl RGVjb2RlPj5zdHJlYW0NCmjeVFAxbsMwDNz1Co4JMkhxMxpeksVDm6J2uisS7QqoKYGWB/++kuAk 6EASPPJwR8pze2nJRZCf7E2HEQZHlnH2CxuEO46O4FiBdSZuXclm0gFkInfrHHFqafBQ10J+peEc eYVd358Oag/yyhbZ0ZiQU3X7Tki3hPCLE1IEBU0DFgchz+86fOgJQRbiC+zXgFCV/rhpe4tz0AZZ 04hQK6XemkdBsv/nD9Z9MD+axWu7Uo1I2xueefmmpw+zMCeL5fBiJFtwhM/fBB+yWg7xJ8AA1LBq ZgoNCmVuZHN0cmVhbQ1lbmRvYmoNMjggMCBvYmoNPDwvQ3JvcEJveFswIDAgNTk1LjIyIDg0Ml0v UGFyZW50IDc4NiAwIFIvU3RydWN0UGFyZW50cyAzL0NvbnRlbnRzIDMwIDAgUi9Sb3RhdGUgMC9N ZWRpYUJveFswIDAgNTk1LjIyIDg0Ml0vUmVzb3VyY2VzIDI5IDAgUi9UeXBlL1BhZ2U+Pg1lbmRv YmoNMjkgMCBvYmoNPDwvWE9iamVjdDw8L0ltMSAzMiAwIFI+Pi9Db2xvclNwYWNlPDwvQ3M2IDc5 NCAwIFI+Pi9Gb250PDwvVFQyIDYwIDAgUi9UVDQgNTcgMCBSL1RUNiA1OSAwIFIvVFQ4IDU4IDAg Uj4+L1Byb2NTZXRbL1BERi9UZXh0L0ltYWdlQ10vRXh0R1N0YXRlPDwvR1MxIDc5NyAwIFI+Pj4+ DWVuZG9iag0zMCAwIG9iag08PC9MZW5ndGggNTM3MTIvRmlsdGVyL0ZsYXRlRGVjb2RlPj5zdHJl YW0NCkiJtFdtb9vIEf4uoP9hPxwKqo1ocvkeHA5N7LhN0SRurcN9SPqBllYWa4pUSMqO++v7zMyS omjdHe6A2oD2hbuz8/rMzMVN3nTq++8vPly+v1Ke+uGHt1eXf5hdXLaxWrXYcOPM08rNQt9PVbuq Zhd/vfXVfTvTvhumKgkjN4xVFEVuGqokdWPVmNlm9nY5u1gutfLVcjPzYxc0PPzLTGs30yr1tBuE XqCWuxkozhau5+HjcjXz1PJp5iil5sv/zHDYXpaZXE7wVOjJZa+/nNBlmvhCYLk1SldrdVPmVac+ 5FV+b5pWXdfNYae052VEH2yGlk1vYJNnYeKBwclTR/bsZSvjlM0wCVw/Prk8XPmZ96xkMRSr5cZR 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 X3iX9B+ZSb7wtoP4Lg8BXYc/IVn4HMcQYpdOSUESB2NBRm7DH8QUqlmyfyseBYFJ4vYVGe3Y7SBy onDyrjc83ttQ17KOwVebmzjcW0O6Iztt3lsCoRJ64wBhwTOhedicFVOte3w8Zuw+G75oy2vAP8tP gIvYlsSn0LwFwj8oUrspFu7icgL/TF/iqiSr6tL4moPCe8pcRyszISkUqJ4Q7YNltTv43kII8fzP 39uMmbC4LKjEA8QAlSDbTXo09VKDOkQCLMTb9t16fFuh2sVVq7ynUzWob1ZvtqsGlucfiutGV8IQ GLblubEXghE3lEwghRsUhESAfmEMhbxedfDziTzfLf8WUgDpR6u2I4egp2tihH7Re5xPWw92qtWw p/J4drJip9xwQW+gM9ZC1rL34MOOnVMIb33Bk6P1LbSNsSeq8851Icfe7QredAupvOUW+le4BfeH v9Yt5PEY6fqVZqGfv84stCHlr83CTvze8Qo5Da+Q3rIK/x4NgornMwYBtfmmQWiOw68bhLhuP/dx h9BfcQh9OIQ+HcIU2tcOoX/cIfS9Q5gqH4O7DqHtLULb2YJcXvMIV76gXQ+mS2hfYxPiWlC+H5cn vf0P5AmavHg4BQrY9iMKJX1EoeTmCgWRFEpurlBy+y0KJa4NBuPLJUp3idKnROlvSpT8oELJnxMo roSuFMr52+nPv/74dvpPgAEAeWAcdA0KZW5kc3RyZWFtDWVuZG9iag0zMSAwIG9iag1bL0lDQ0Jh c2VkIDgxNCAwIFJdDWVuZG9iag0zMiAwIG9iag08PC9TdWJ0eXBlL0ltYWdlL0xlbmd0aCA5MzYy L0ZpbHRlci9EQ1REZWNvZGUvQml0c1BlckNvbXBvbmVudCA4L0NvbG9yU3BhY2UgMzEgMCBSL1dp ZHRoIDQ3OS9IZWlnaHQgOTgvVHlwZS9YT2JqZWN0Pj5zdHJlYW0NCv/Y/+4ADkFkb2JlAGSAAAAA Af/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBcSFBQUFBIXFxscHhwbFyQkJyckJDUz MzM1Ozs7Ozs7Ozs7OwENCwsNDg0QDg4QFA4PDhQUEBEREBQdFBQVFBQdJRoXFxcXGiUgIx4eHiMg KCglJSgoMjIwMjI7Ozs7Ozs7Ozs7/8AAEQgAYgHfAwEiAAIRAQMRAf/EAT8AAAEFAQEBAQEBAAAA AAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcG CAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZE k1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5en t8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKS Q1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2 hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A9VVHO6z0zp525eQ2t/OzVzv81slW7S8V PNYl4ado840XkeRZdZfY/IJNznE2F3O6dZU2DCMhNmgPtY8k+HYPeW/XrozJDGXWRxDQAf8AOcFX /wCf+DP9Ft2zzLZj71w6StjlMXifqxe9N9Dxfrt0bIe1jzZjl351jRt+9pct8ODgHAyDqCF46u9+ pPVzlYbsG503Y2rCeTWeP806KDmOWEI8Ubrqvx5STRemSSSVVmUmc5rWlzjDQJJPAATrjvrx1lzY 6VQ6JAdkkeHLWfxKfjxmchELZSERbqZf1y6JjWGsPdeRoTU2RPxJH4Kkfr/0/cIxri3uTtB+6Vwy SvDk8Y3ssBzSe/p+vfR3kCxl1U93NBA/zXErcw87EzqhdiWttr8Wng+BHI+a8kXSfUU5A6q8Vz6J qPreHI2z81Fm5WEYmUSRXQroZZE0Xv0k0gcpg9jjAcCfJU2dkkkmJjUpKXSUQ9jtA4H4KSSlJJJJ KUkkkkpSSSSSlJJJJKUkmlOkpSSSSSlJJJJKUkkomysGC4A/FJTJJMCDqDITpKUkmTpKUkkkkpSS SSSlJJk6SlJJJJKUkmlOkpSSSSSlJJJJKUkkkkpSSSSSlJJJJKUsXrv1awupVWWsYK8yCWWt03Ed n+MraTFGMjEgg0ggEUXx0ggkHkJKx1Bgrz8mscMte0duHEKutiJsA9w0zupW+l9Qt6dnVZdXNZ9z fFp+k35hVEkpAEEHqoGjb6/j31ZFFd9Tt1djQ5rh3BEoi5D6jdX3Vv6Xc73Ml9Ent+c35crr1k5I GEzEtuMuIAtfOzKsHDty7voVNLj5nsPmdF5Tl5NmXk25Npmy5xe75nhdV9euq7n19MqdoyLL/j+Y 3+K5BXeUx1HiO8vyYc0rNdlJJJK0wpcbHfk5NWPX9O57WNnxcYXqXTOmYvTcVuPjMDQAN7+7nfvO Xnv1Xq9Xr2I0iQ1xf/mtLv4L05UOcmeIRvTdsYRoS4H1qwci3HGVXaRXQPfTrBk/SELk6rbKbG21 uLXsILSPELvOu/8AJOT/AFCuBgxujSYntKdypuBBrQ0xZ9JAh9C6ZnMz8KvIbyRDx4OHIXNfWnqb rsv7HU4+jTo8A6F/efgqXSus39Nbcxjd7bW+0E/Rf2cs9xc5xc4kucZJPcnujj5fhyEnb9FU81wA G/VvdFxLcvqNddTzUW+9z28gN8F3y5D6ngftC0+FJ/6pqv8A1iz+psyK8LCa9osaDvYPc4k8NI4h RZwZ5eEUKC/EeHHxamy9AXNBAJgnhJcX1Xol2FhVZd1xsuc4Cxp1gkE6H5I31Y6nktzWYb3l9NgM NcZ2kDd7Uw4PQZxlxUuGb1CMhVvXppXL/WjJ6rReA2w14j9K9hgkx7txGqxcHOzMbINuPL7S1w1l 2hHPy5Rhy5lDiEgqWcRlw0X0KVT6j1bD6ezde/3ke2turj8lxGJlZgza7anvde54jUkuJPB8ZV3r /S34L67X3uvfkFxJcIIiO8nxThy4ExGUt+yDnJiTGOzqdM+smTndTbQ5jK8d+6BqXCASPdP8FqdW Oa7Af+zjN2g0ImO+3zXFdNwTn5bMYP8ATL5O4ieBPkuiZ0rqPSOn5DsK0W2vLSTtAhjQ6du4kTqj lxwjMcJAOnpOyMc5GJsEjuHJp6P13JvD3Cyt0ybbHER58yu1pa5lTGOdvc1oBce5A5Xnd+bl5Bm6 59n9ZxP4LrczJ6hj9Cx7sIAubUw2uOpDdo1AKWeEjwgmOummisUojiIvTu7KS85uzsy94fdc+wgy NxMD4K91i3rF3p5OY01U2Aek1p9o08JOp8037qQQDIap+8CieE6PcJ1x31Y6jkMzmYjnl1NwI2kk wQC6R9y7FRZMZhLhOrJjmJiw0OsYORnYno0XGl0yfBw/ddGq4JwIcQ7kGD8l6WeF5vlf0q7/AIx3 5SrHKG+IHYMPMDYvSfVPAtDDnG0it0sFQ4MdyukWV9V/+Rqfi/8A6orVUGU3OXmzYxUA8d1LD+sO Tl2NsZY9u47A0/o4mBGsLd+r+BmYWK5uW+XPILa53Bg+Pmub6vndZblPoy7XMI/MrMN2niNvPzWj 9UXWmnNLPdYA3YHHTdD4lTZIy9oH01p8o/awwkPcO9+L06S4PqXVOr2XPpyrXVuadrqmHa3/AKPK JiXdZu6XZj4jXHHrcXWWNMOgjVup+eib92lwgmQ1X++LIAL3Eqh1m/qFGIX4DA94+m4wdrQOQDyu IxszJxbW20WOY9vnofIjuF3pt9bp3rRHqU74/rNlNnhOOUbqQJTHJxiVekh4PI6hm5Jm+97/ACJ0 +4aLvun/ANAxpP8Agma/2QvOVt9X6tRkYGJjY9j91bG+rEhujQIPiQVYzYuLgERXkGHFk4eIk29l IWb14dTOGB0+d+79Jt0dt/krB6H0XNymszBkGiuZaWmXHafiIW59YLupUYfqYJADJNztNwbHaVW4 BHIACJa9dmbjMoEkEeTz+F0XrduS212+iCCbXuh35ZXaBeb3ZWTe7dda+w+LnErr+v5fUsXCrtw4 FcfprNC5swBE+MqTPCRlEEx17aLMU4gSIvR2UpXnYz8w5Nd77H22VuDm7iTqDMKz1k9WN4tzw6v1 Na2z7QPBsEpfdTYBkNU/eBRPCdHvElyv1U6je7Idh2vL6y0urDtYI7DyUPrD13L+1WYeM81V1Ha5 zdHOPfXsEz2JcfB+K73o8HF+D1khRtuqpYbLXitjeXOMAfeuQHSS7on7TF9n2jV5E6bQ6I8Z7qhi /aeo5dOLde9zXuiXEugcnkojACCRLSO+iDmIocO+z6ACCAQZB4KdRrrbXW2tujWANA8gIUlAzKSS SSUpMnTJKfJ+qf8AKeZ/x9n/AFZVVWOpOD+o5Thw66wj5uKrrYh8o8mkdypJJJOQmw8q3Dyqsqkx ZU4Ob/d816K76z9Kb0z7cLmFxZIo3D1N/wC5t55XmiShy4I5CCdKXwyGN0lycizJyLMi0zZa4vcf MoSSSlAoUFqkkkkUO39TRPX6PJtn/UFekLzv6k/8uM/4t/5F6Is3m/536Bs4flc36xO29HyTxIA+ 9wWH9X8KvN6XnUH6by3b5ECWn71rde6Vn9RDG49zW1NHuqdIBd2MgFV+h9C6h0/J9W25oqI99TCT uPaZA4QjKIxH1Diu68kSiTkHp0qnlqsa23JbjNH6V79kHsZjVbP1nxqcVuFj1AAV1uB8Tq3U/Eyt +vouPX1V/UQfc4aVxoHHQunzWX1f6udQzcx+Qy9j2u+g15ILR+6IBCkGeMpxJPCIj8WM4iImhZJ/ BpfVKwN6m9p/PqIHyLSrHXvrDlMyn4mI70m1Ha+wfSLu8eEKOH9Vep1XstN7KdpncwuLo8tArXWf qzbl5LsnEe1rrNbGPkCeJBAKUpYjl4ibFfikRyDHQFauTl0Z1nR687Iyn2tsshtLiSB9ITqedELo FjKur47rCA2XCToAS0gLUo+qWW6lzMrI2gSaq2EuaHHuZj8EPG+p+Ubh9qsYKQfdsJLiPKQITvcx 8Eo8Q67Clvtz4onhP1bH1yf+ixmju5x+4D+9Zv1XLR1dgPdjgPjC1Or/AFbzMzKN1Nzdm0NZW+Rt AEQIlUq/qj1MEONtTCDoQXT/ANSmwnjGEw49SmUZ+5xcL01PTOn03G+qhjLT+cBxPh4LD+ufGJ8X /wDfV0VFbqqK63vNjmNDXPPLiByVU6v0qvqeMK3O2WMO6t/MHwI8CoMc6yAk2AzTjcCAKt5L6vXV UdWpfa4MZ7hucYElpAXY2ZmLfj5IptbZ6TDv2mQJaTyuZ/5odS3x6lW396T+TatX/m4aulvxMa4t uuINth0DgPzNOBqpsxxykJCXZjxDJGJHC8au4uc3/m0TOn2UCf7ELE/5odS3R6lUeMu/8itL9gZw 6QcEZXvL9xGuzbH0PGJ1Ts08cuCpDQrccZx4rjuHkF2H1p/5Hr/4xn/UuWY36odSLoNlQHjLj/31 anVOiZ+Xh42PXkNd6DYeHyA5wEB2kpZMmMzgRL5TqqEJiMhw7vPdCdt6vinj3x94IXfLkaPqn1Nt jX+tXU5pBDmlxIjuNAutaCGgEyQNT4qLmZRlIGJtkwRlEEEUo8LzfK/pV39d35Su+6nj5eTiuqxL vQtJHu8u4nsub/5n5/8Apqv+l/cnctOELMpVaM8ZSoAXTrfVWxruksaDqxzgR8Tu/ih9R+sDqOp0 YuPttrJDb41MuMQD4hZw+qHUR9G+sTzBd/crHS/qvkY2ay/KexzKvc0MJMu7TIHCBGLilIy4r2FK ByUIiNeLn/Wkg9WdHZjZV/6mERljv7NP85Cy/qr1K2+y0XstL3TueSHH46FWek/VzOwskXvyGsG0 gtrkzI4MgDQ6p8p4zhEOIWtjGYycXCXC64QerZUf6Qj7l0f1Sj9lWTx6rv8AqWrNv+qfVH2uebq7 C9xLnuLgTPc6FaXTeh52Hg5VH2hrbLxDNoJa08Tr48JZckDjERLXRUITEyTHu8e76R+JXeYlg/YN b3HjG1PwYuf/AOaHU90b6tv70u/8itQdDz29FOAMkeoX7p127f8ARzzHdLNOEhACQ0KscZxMridQ 8crGVg5GKKnWj23MD63DUEET94WoPqh1PdG+qPHc7/yK2qugB3SBgZNnqWNJdXYPzD2DZ7KSXMQF Ub7rI4ZG7FdnC+r3WfsF3o3u/VrTr/Id+9/eun6u5p6TkuBEGp0HsZGi57/mdn/6ar/pf3K676u5 /wCzBhjLl2/cWGdkfuzz5qHIcUpiUZVrroyQ9wRMTHyeTXcdfcP2Dbry1kf5zVif80Opbo9SqPGX f+RWlk9Az7el04TcoOdWSXh07SPzR3PtT8s8cpQIlsVuOM4iQ4dw8ri/0qn/AIxv5Qum+uMfZsbx 3n8ipV/VHqW4F1lTIPILif8AqQtLrXQ8/PNJrva4Us2lr9Jd3doDylPJA5ISEhUd1RhMQkOE6uL9 WHEdYqH7zXg/5s/wUvrOMP8AaTjjum0/z7QNA4efj4q5hfVbqVGRVeb66ix0ksJLh8JACzOr1VW9 YtqwybHWWEEGB+kJ1DT4SnCUZZuKMv0VpEo46I6ujThfWA9M+wNbWMazUWFwkNPujQ8fJXuh9Cpw 7jfbc27IbIDWH2tnQ+crA/YnWoLfs74b2kR+VUa7LarA+txZY0y0jQgpHGZCQjOOup4R+aRIRIJi fq+lpKm3MdXTQb2n1LXMrcB2c9oOvzVllldm7Y4O2uLXR2I5BVIim0DbNJJJBKkx4TqLyGtLjwBK SnyLJdvybXnTc9xj4lF6bQ3I6hjUOEtttY1w8QXAFV3nc4u8SSr3QhPWcH/j6/8Aqgtc6Y/8Fp/p fV6L659CoqxmZ+HU2oVkMvawADafougeB0XHL13Lxq8vFtxrRLLWlp+Y5+S8ny8azEyrca0RZU4s d8u6g5TJxRMSdR+TJmjRsdUSSSStMLo9C6S/qvUGY4ltQ99zx2YP4nhXvrb0XD6VfjjEBay5jtzX EnVpGuvjK6T6m9L+x9LGQ8Rdlw8zyGfmD7tfmsr/ABg/z2F/Vs/KxUxmMs4APpGjNwAY7O7yKSSS uMLt/U7/AJfo/q2f9QV6QvNPqk8M6/ik/nF7fvY5elrO5z+c+jZw/K1syy+v0PRBO65jbIE+wzKr /aM3wP8AS/T+j/gvHj8UfqPUKOn45vuPk1g5cfALB/5w9azJGBiw2Y3AF8f2tGqKEJSF0K7nRdKY BqzfYOv9ozfA/wBL9P6P+C8ePxS+0Zvgf6X6f0f8F48fiskt+uLvfIH8n9Er/QeqZmW67GzWbb8e NzoiZnkeKMoULHDKt6KBOzWovun+15fh/wBq/R+j/g/H/al9ry/D/tX6P0f8F4/7VopKOx2X14ud 9ry/D/tX6P0f8F4/7Uvt2T4D+l+hwf5vxWiklY7Ko93O+3ZPgP6X6HB/m/FL7dk+A/pfocH+b8Vo pJWOyqPdzvt2T4D+l+hwf5vxS+35A5Ddcv7OJB+h488rRSSsdlUe7nftG/8Adb/S/s3B+h488pft G/8Adb/S/s3B+h488rRSSsdlUe7nftG7wb/S/s3B+h488pDqN3drf6X9m7/R8eeVopiAeR5pWOyq PdoftG391v8AS/s3f6Pj8Uv2jb+63+l/Zu/0fH4q/tb4DmfmsnN6wftH2LptQyMqZc78xh4lxToj i2CCa3Kf9o2/ut/pf2bv9Hx+KX7Rs7sH9K+zf2f3viqAu6lidVxMfJyG5H2ncbK2sDQ2OCDErd2M P5o53cd/FKQArS7RE3fg0v2i/wDcH9K+zfL95L9ov/cH9K+zfL95XfTZ+6Od3HfxS9Nn7o53cd/F Nsdl1Hu0v2i/9wf0r7N8v3k/7Rd+4P6V9m57fvK56bP3Rzu47+Kb0qv3G/S38D6X73xSsdlUe7T/ AGi7/Rj+lfZue37yX7Rd/ox/Svs3Pb97hXPSq/cb9LfwPpfvfFL0qv3G/S38D6X73xSsdlUe7U/a J/0f/ar7Nz2/e4S/aX/B/wDan7N9L/pcfgh5PUsGnNpwRWLLrbAXBoEMJ/Pd5q96FH+jb9L1OB9P 974+aJAFWN0A3sdmr+0v+D/7U/Zvpf8AS4/BL9pf8H/2p+zfS/6XH4K16FH+jb9L1OB9P974+aXo Uf6Nv0vU4H0/3vj5oWOyaPdrDqQ71/8Aan7MNf8Apcfgl+0W/uH+kfZue/73Cs/Z6P8ARt+n6nA+ n+98Uvs9H+jb9P1OPz/3vilceytWt+0W/uH+k/Zue/7ycdRb3Yf6R9m57/vKx9no/wBG36fqcfn/ AL3xTHGoP+DH0/V4/P8A3vijceytUH7RZ+4f6R9m+f7yX7RZ+4f6R9m+f7yP9lx/3B9P1f7f7yX2 XH/cH0/V/t/vIensrVB+0WfuH+kfZvn+8l+0WfuH+kfZvn+8j/Zcf9wfT9X+3+8m+y4/7g+n6v8A b/eS9PZWqL9o1fuu/n/s3b6Xj8Fg9U6Rj5WQ/Jxnuqsfkeg5rhINn7wIMgLo/smP+4P5z1u/0/3k vsmP+4P5z1u/0/3k6M+E3GwtlDiFF5c43XTX6ZzTtN/2b6Tp3eMxMI/Tej4GLY27IL77G3+g0QAw WeMbtR/rC6H7Jj/uD+c9bv8AT/eTfYsb9z/C+vyf5z97lOOYkEbXvWiBiF3v5tLKvZcai0EbM5lZ nxaIKC1zmztJE9RIMGNDyEfMqrrdUGCN2axzueXCSUKuqy3dsbu2dQL3eTRyUBVJ6tmrqBG71RP6 0cdhb/0SVdZYywHY4O2ktdHYjkFVaunsG71TunIOQ2NIJ4VsADgR308SmGui4Wuq3UrfR6flWzGy p7geOGko9ljKq3WPO1jAXOJ7ACSVw31i+t7c6izCwWFtL9H3O0LgOzW9pT8WOU5ChsdUTkIjV5dX uhGOs4J/4ev/AKoKipV2PrsbYww9hDmnwI1C1JC4keDUB1t9hXEfXvppZkVdRrb7bR6dx/lD6J+Y /Itb6vfWurqdjcS+v0soglpGrHxqY8DC1eq9PZ1HAuxH6eo32u8HDVp+9ZsDLDkHEK7+TalU46Pl Cv8AROnnqPU6MWDscd1pHZjdXKnfTZRc+m0bbK3Fr2nsQYK7f6i9M9HDs6hYPfkHZXP7jTr95/Ir 2fII4yR12a8I3KnqGta1oa0Q0CABxAXEf4wLJzMSruytzv8AOdH/AH1dV1fqtPSsJ2VaC6CGsYOX OPAleadS6jkdSzH5eQRvfoGjhoHACq8pjkZ8fQM2aQApqpJJLQaze6HaKusYdhO0C5gJ8iYP5V6o vHQSDI0I4K7j6q/Wi/NtZ07NG63afTuHLtomHDxjuqfN4iamOg1ZsMgND1dfrWF021rMrqL3tqp0 DQTtlx8GidVmP6mx9ben9BrcG6mx7RqG99u8jX4rS+sXUBhYJAANtx2MB1A8XfJRwOidMZg1ixjL 3OG91x5JI1h3gq8SBAGVnX0jovkLlUaHc9UmHVnVUCjHobjsHNlz97yTy4tZyf7SIBg9KrdbkWhr 7nTba/l7vgPyBZTsxmL1bHxul2vure4NvpLjYwAkfRLiYgIWRfj5Obdm5799WLaacbDbq57mnmPN LgJ32Oum6uMDzGjvZfU8TEpZda/22x6bRq50+ARsnIrxqH32mGVjcVzuB+udRu6l1J7WsxCGVsn2 tf8Aujxj8SjuzsPqTci66z9HjhzasbWdxBAef3nH80Dj4oHHRA10+ZQyWPydTpfUG9QxBkhvpySC yZiD4wFWvnqOdUMTMAqxHB2RXWTJM+0SNDxCyN9/TeiDCa7bl5VgD2jmsWDTcRwSGq6W0fV7pLxW 4Py7BM+LjpMfutR4ADcepqKuOxr0Fl3RZWXFgcC5v0mg6ifFDoy8bJLxRY2w1Ha/brBXKQWYNrqn ktsIGRkj6V1rtRVWf3ROpR8jZ0bpn2XGfuzL3NF728tkHQeHGiHtdL1ule74aO1k9c6bjW+lZZLg drtgLg0+ZGitZeVViY1mRaYZW0n4+AHxWVX0yqqio5YbRiY5DxVMue8fnWkcn+SEF+bidSoycix8 +k1zKMbWQ5wLWuI/Oc7tHCHANKsgblPGaN1Z2dbpmc3Pw2ZIbs3yCyZggkcwEHL6xVj9Qx8EAPfc YeZjZP0ex5WZjZQ6L0tmNY8NyrXy+fc2rf3dtngCYTZOBjuz8R1FgdXj/p8vKcZmS1wLncS6ERCP Ebvh1pHGaFb9XpUlGt7Xsa9s7XCRIIMHyKB1DLGHh25JE+m2QPE8AfeogLNMhNC3M651S/1W9L6f rlXaPcPzQf4/kSZb036u47arDvybBueWj3OI/IJ0CD9VcV1nrdTvO621xa1x58XH5lSr+rduR1C3 L6lYLGl8sY0nUToHTwI7Kf0R9BNCO9byLF6j6gNTt4BfoePfmZVnWcsQXjbjt8G8SPlotE9Z6aMp uILg65ztoa0EifCQIVXrmW+uqrp+G4MuyHtqkabGu07ccLH6l0/GwsvCwayGMdFl2Q7QnXx7RGgS ERM2dLHpA7BRkYaDXuXrn2MYAXuDQTAJMansh25eNTZXVbY1tlpDa2nkkrm78v8AaHU3O2+saHen h4pkAu5NlgMQByfuT4ONS/Ns6pm3+q2h+xjj+fcP3Gj80fmhN9qtz02T7t7B6DPzasHFfkWcMHtb MbndmhLp+YMzDqyo2eoJLZmI0OuixLcjH6phZGW9/qWkGrGxhMsc7RundzvFDsNmL0/G6My5tdtx cMi2dKwfe5s8d/H8qQxiq/SvXyUchu+lPQUZ+HkCw02teKf5wjgfNVLut437Puy8eXhjzVXIjc/S I8tVh32MfRV0rpntxrbBW+93NrvziPId0fOqx35fT+kYlmyqtxL3t194Ez4bufvR9oA633+g7o9w n+XVsUMqxQcu4eocQF9zxq6zJsEFo/qAws7M69ndS24ddJY2x4Ba0nc4T9EnstrqefV0vCNOKAbW NEDs0Exud5k/eo1WVdJ6RvLg7KtYbTuPufYW7j9yMT+kY2SaigjoJVWskmefVoZ0rFyGY2W5rRsB JIY0agEajRaFWyllVD7Nzw0NBcfc4tGp81idFxasWg9XzbA6/IG5pOsB2sDxc5UcfJszch+aHA5T txYXasxqW8vP8rwQOO7AOketdVwnVHqfyeoOZjDJGL6jfXI3CudYCHm9Rw8Fm7JsDSfot5cfgFgd Nrx8Ki3q9rzZfYHnGY8y4gA+93xhTpqox6W9T6l+tZ+SN1FJ1+l9ENb/AKwh7YvckbeZV7hroP4O 9hZjM3HbkVtexjpgPEHTv3VhYH1efZZfdl5dk35JLKmfyWckAfm9lvpk48MiF8JWLUkkkmrlJJJJ KUkkkkpSSSSSkL8auxwL9dtgtaOIc0QEUADgR/tSTpKUkkkkpHfSy+iyh/0LWljo8HCCvPs/6ndY xrHegwZVM+17CA6PNpMz8F6KkpMWaWO+Hr3WzgJbvlR6F1kf9or/APtt39yJV9W+uWu2tw7B5vAY P+lC9RSU333J2Cz2B3Ly31Z+qmR0/JbnZrgLWtIrqYZguEEuPw8F1KSSrznKcuKW7JGIiKDgdX+q OH1LOGWbHUl0es1oB3x3nsYW3TTXRUympoZXWA1jRwANAiJJGciACbA2UIgGwN3P650lnVsB2K55 rcHB9b+YcJ5HhquHyvqf12hx20i9gOjq3Az8nQfwXpCSfjzzxiht2K2WOMtS+VHoXWR/2iv+THH+ CX7D6z/3Bv8A+23f3L1VJS/fZ/uxWewO5fL6Pq112521uG9vm+GD/pELq/q19VXdNu+2Zb2vyACK 2M4bI1M9z2XSpJmTmZzFGgD2XRxRBvdodW6TT1OlrHuNb2GWPGsTzIWPX9T3zFmX+j8Gt/vcunSU ccs4igdEnHEmyGj0/pGF08H0GS86Osdq4qNfQ8Fme/PDSbXHcGk+1rjy4BaCSHHLU2dd08Edq2cn pv1excK03Ocb7ZlhcIDfMDx80K/6sY78w5NNz8fcdzms01PO13ZbaSPuTu78Fe3GqpzcroeJfgfY 65qAcHiz6Ti4d3TzKHR9XcNmJZj2l1r7gBZcfpQCCA3mBotZJDjlVX4q4I3dOXn9Boy8fHx63mir HOgaJkf3+abM6Bi34DMSk+j6bt7LOTu4Jd4ytVJITlprtqrgjrpu5mD0Y0vbbl3vy7a/5vf9Fp8W tk6qvb9V8Y5f2im6zHa4y5jNDrztd2W2kiMkwSQd1e3Gqpz8jouDdg/Y9uxgO5rh9IO/ek8n4oHT /q9j4hBstfkbTLGO0YD47JiVrpIccqqzRVwRu6Usv6yU2W9IuFepaWvIHcA6/wB61ExAIg8IRPCQ eyZCwR3ea+r3W8DGwBjZL/SdWSQSCQQ4z2laLeqXZ7/S6Yw7Jh+W8Qxv9Vp+kUd3ROkus9Q4zN3P Gn+bwrjGMraGMaGtGgaBACfOUCSQDZ77LIxkBRIodmjd0fHtxRRuc2wO9QXg/pPUH55KWF0fHxib LScrIdBN1vudpxtmYWgkm8Uqq13CLumlV0rFpvyMisEW5M73TxPO3wVfpX1fxenkvLjfaeHuEAD+ S3VaqSXHLUWdVcEezhf81cZuUbqb7Kayf5tmhg8tDvBXMvoeBlY9eOWmtlRlhZodeeZ5WikkckzW p02UIR103cjM+rmJk2Y8PdVTjt2CpvcTPPZP1HoFOU3HGO/7KcfRhYO3PiNVrJI+5PTXZXBHXTdx 8z6vsu6f9mpsi02Cyy6z3Oe4Aj3H5o2L0THpxn1WudfZawsfa/V20iNrZmAFpJIe5KqvrauCN3Tk dN+ruPh2C2yx2Q5v82HCGt8w3XVFHQ8SvAvw8cmsX/Ss5d5eGgWkkkZyJu1CEezm4PQ8PExn0keq 61pZZY7ktP5o8AsqzFw8TI/Z3T912deNjrnnd6VZ5+Gi6LJ9b7PZ6ABu2n0weN0aKj0bo46ex1lr vUyrdbbPxgJ0Z6Ek/TxWyhsAPq2On9Ox8CkV1CXQA6w/SMK2kkmEkmyvAA0CkkkkEqSSSSUpJJJJ SkkkklKSSSSUpJJJJSkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl 8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXy qkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKq SSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp+qkl8qpJKfqpJfKqSSn6qSXyqkkp/9kKDQpl bmRzdHJlYW0NZW5kb2JqDTMzIDAgb2JqDTw8L1N0ZW1WIDIwMC9Gb250TmFtZS9BcmlhbC1CbGFj ay9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udFdlaWdodCA5MDAvRmxhZ3MgMzIvRGVzY2VudCAtMzA5 L0ZvbnRCQm94Wy0xOTQgLTMwNyAxNjg4IDEwODNdL0FzY2VudCAxMTAwL0ZvbnRGYW1pbHkoQXJp YWwpL1hIZWlnaHQgNTE1L0NhcEhlaWdodCA3MTgvVHlwZS9Gb250RGVzY3JpcHRvci9JdGFsaWNB bmdsZSAwPj4NZW5kb2JqDTM0IDAgb2JqDTw8L1N0ZW1WIDEzNi9Gb250TmFtZS9UaW1lc05ld1Jv bWFuUFMtQm9sZE1UL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250V2VpZ2h0IDcwMC9GbGFncyAzNC9E ZXNjZW50IC0yMTYvRm9udEJCb3hbLTU1OCAtMzA3IDIwMDAgMTAyNl0vQXNjZW50IDg5MS9Gb250 RmFtaWx5KFRpbWVzIE5ldyBSb21hbikvWEhlaWdodCAtNTQ2L0NhcEhlaWdodCA2NTYvVHlwZS9G b250RGVzY3JpcHRvci9JdGFsaWNBbmdsZSAwPj4NZW5kb2JqDTM1IDAgb2JqDTw8L1N1YnR5cGUv VHlwZTAvRGVzY2VuZGFudEZvbnRzWzQ4IDAgUl0vQmFzZUZvbnQvRU5ITkFFK0NvbnNvbGFzL1Rv VW5pY29kZSAxMiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNMzYg MCBvYmoNPDwvTGVuZ3RoIDYyMjkzL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgxIDQxOTIzMj4+ c3RyZWFtDQpIiezVbYxcVRkA4PfOzLbLVyOfphjDNKFJa1NaWjAphtiG0jRIWwK0GiWU6e7s7pTu zro7pV1AKUZQEj6topaGNFibgsgPBETCR1RETVowIYSghgREgR8aDYbEKh3fmd1iMf0BMfrDPOfs c+97zj1f9547d6OIiGNiW5Rj4ZpLFiwa/f0TL0Z55rFZu67vqlb13ItPXZHl/ohjtw6MDg5/76yR 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 LvJ0sIfTuuarutJO/LOFPVyeT9AnZ1GbapxpIqf3Ni84Jywlnor1p8jkudffwnecO7J4s137L+Xl GyF3fsfxhqqPqj7ok9OHVfegqioiYq0Y1ooxxlpjrTXGWNM11jDGWGOtGGvFWmttI5aIOHFinHVW RURUxHHiVJwTEVFRdc6pe1J1Tp06fdB9Z17v+3yzDdUHP79/3+/n7/fz/rw/yaPneb+GPs+UruU5 vpfvG+S45L1rkbxK6z03yr9L5GbM+3wkn5st/HVf8jl1XI0Xy8gYRXIKX67D8tvaW9Z5XrmCvcJu 84Gb5K6CDToXrssOOdD7DLGu4Y/r4pvTniKfrqO7Hjl3CJ/ejWk9S7fxeaHw+yVy3e+VE/f7tfhv 7taJ5MG76KoQ211sO0KOZ4uL7JNPQ/T38cWz5pi4W/Yqdm3xfx071shLpch5WQvmdD5jVyN7TI+Y mWdfJL7vIG8L3RX2bXI3H95Gv/tov3jv48MAXzcjufeIveaQ28RnQDyM38aoY2IkDvGAmA6L/58Q 72Ykznsu7UT25wvEuIp93cjZZYPcrJ65jI1nv5+9zBPKb63ieenM2rfpsr53/oeus3rqZ+7/79Xj 7hlQMbsTOc8YC8wLPQv2yMUyunf5VyWn7h8XWDMT2T9P9577wen1w5ji499Or69jWqPiBS/JtfiC OP1n+O0+Jh7Yxi5dwpED/Djikm07xZoRsXcv2kCe+4xrpfGW5w72n0f/Kt9VZxfx8RLrqvyrYON1 4rPCWnNO49IF9qkGhoXOTfZvsl+c6nFMe4pq6yE+Ki/3ImcDydCMoz50ldg9xI5PidMxV58Y699J 5OxmXqJ4DYiv+6Hi0sIX52AhkhOvEgvteZfYuj7N6ZrI0my7Rax+GcnNrdtY7bnUM1IrEmuX+ed+ IJt+i4wx/43f5sQXIjl7HXmz2HAenefR4X7VKOT8IqaYusha6Z2J5A7G4Rpyj8nvPHfXz4TcPZzK OveT00vz6M9j2vtuE0/5vRPJSavk+VfY9R053EW+rkPyovsedknGC2Srxs3frkfOfuadm5F9+CvO gX1rRda7dH0Y2Rs904pPfRHT2nZ9q9d/wnVCzu4j60HkHCg7vj29nkdiUtkz/hVT/naXGA2neRCm CD9e44riK76m869zL0x4yjXk311id4J+xeER9yeFXZ475Nef+DYhr/eJzb/Zq/g+w8cn6L3LP61X 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 UYhHMyuel3Ot9iTkiqi8Dgz2oMYOyjprVkfReR+dTnRKqDM8aBZEZUGGPJUr5D05N+vJeYDFrCfE c4xV+nP72EiO7dubd73bx/Ku+31msW568FpxtId1dwd1/x7+g9iTwcISsxBSd7QnzRj77wDV3ktC DQplbmRzdHJlYW0NZW5kb2JqDTM3IDAgb2JqDTw8L1N0ZW1WIDc2L0ZvbnROYW1lL0VOSE5DRStD b3JiZWwvRm9udFN0cmV0Y2gvTm9ybWFsL0ZvbnRGaWxlMiAzOSAwIFIvRm9udFdlaWdodCA0MDAv RmxhZ3MgNC9EZXNjZW50IC0yNTYvRm9udEJCb3hbLTU1MyAtMjM5IDExMTAgOTQ5XS9Bc2NlbnQg NzQzL0ZvbnRGYW1pbHkoQ29yYmVsKS9DYXBIZWlnaHQgNjU2L1hIZWlnaHQgLTUzMS9UeXBlL0Zv bnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNMzggMCBvYmoNPDwvU3VidHlwZS9D SURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgMzcgMCBSL0Jhc2VGb250L0VOSE5DRStDb3JiZWwv V1szWzIwMF1dL0NJRFRvR0lETWFwL0lkZW50aXR5L0NJRFN5c3RlbUluZm88PC9TdXBwbGVtZW50 IDAvT3JkZXJpbmcoSWRlbnRpdHkpL1JlZ2lzdHJ5KEFkb2JlKT4+L0RXIDEwMDAvVHlwZS9Gb250 Pj4NZW5kb2JqDTM5IDAgb2JqDTw8L0xlbmd0aCA0NzIyL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5n dGgxIDEwOTM2Pj5zdHJlYW0NCkiJ7FdtbFtXGX7vhz8SJ6nbtJ2LRXvcU5uU2HGaNlkastSN7cRp 1jaJU3Fvl7J7Y9/U3pI4ctyqq1opQps6udsATZqGpsHEJLYygY7HqFIJ0JAQ4mNBQ+InPyqBxh8K k0YRWreG95x7HSWlRQJpP5Byzz2+z/u8H+c95z332AYJAHywBAp0nszGu2YDT7wE0PwJskbufIW0 zYR7AVqmAKS9Mwtn56SXW34LsGUJoOGhs7NPzZz87m/+jrY/xv77gmXmb2ZUGSDwMso9BSSaWhuu o/w+yvsKc5ULA7U/nkAZfbbMzpZy5nt733sOY38dwLM8Z15YcH3ceASgzUB7Mm/OWf/4kHTgWBkA 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 dNBqKFarhn6SuZ5yAu1rcZechj5Pk4v7KDsk/LSNaKQL38oCUMpjmpwS/jePadL3qV7+C9U74+ht jhaEne7AfteoQtuNby8B9rp3F26yaJ/AEVBjsdYiGqy2WMIRdyfuQWcdfGsxfHIW9haEXePoKAtR lvIwPc8+pC3wMz/bTN9SXMLnDIwtBAdBELwKngdbQAUoBi+ASvh8OfsIuR9RBbtAy9C20pqvCnZY jPlKUC5Hexngsgm8BDxgB6gC2wBf8wXknGlyDWJ2E2LTBkqSfww2onwG7U/QTLkP787Q4+jnjiA1 UC6IHTf2FcDHbkJbr21sL9r/j7HSwFcD2i5aqH0BFlGSVkVpUYm4NxIoYKNyQr10Ql3AsigXdmvW HsH4RNx9l+GjSVTD7yH1JjXzGA9/T1NqaCe3v7hvs5GHP0OrITewhSCbFrEF8FvenoRvZ6Pos0SL I0P2w+e+i7sxB/efnzwoL0U5V/hbOSXxbAX/IepJBQ7kKl+n+VQG/zwcFU8KSRmr2Oy2qBnSitmN 4tkgnjvEs0o8/eJZKp4l4pkvnnni6RHPLP7M2icZHVJf+JcZtzumTfdM6cjpkLP2SnteS9F370rW 57emt8pyTKveKu9seUpvbnpK97VIGS1RUz2dTaGmnqbfNimN+WV6Q16ZvmNdmb7dW6Zvq0/RY+qk 9LpVdXJD3f46OWarVFXdWN1ZzV5ZNlev8hu6P3OWXuE19DJQiuElGL4OZS/e5+cZeh7er8g29GzU PUaWNwv1ZUu/qWeCmlfn6bUsVf/a1FRdTVW8Ux/AcinR3ikpD3gdKZpXSiHv/Oj06Ibo/dFKSJNi NKmTQgRflWaTFENSVIrTy1JkL+uXuKFVkqRw75p8tzunz0mrc3qcuet7pLaeR/P5MyOvqEdr6yFv 0fqCXknqKOyV5GVreuJz8orMeuu+fZSYmdOTmF9wnm3cmJhZmNPTyMuE5kK3O2D+3JGf5IZvu/H4 72d1IFC9xW1WAm4MCfj4I4AXvbK8LK+gV2FQgKBAQcaMNqPRaDB2GFWG3yg1Sox8I8+ArQy37Vdo r8zw/WcAX/L2mg0KZW5kc3RyZWFtDWVuZG9iag00MCAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rl c2NlbmRhbnRGb250c1szOCAwIFJdL0Jhc2VGb250L0VOSE5DRStDb3JiZWwvVG9Vbmljb2RlIDEz IDAgUi9FbmNvZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag00MSAwIG9iag08PC9M ZW5ndGggNTU1MC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoMSAxNDAwOD4+c3RyZWFtDQpIiexX fXBU1RU/7+1HAiFhSSMJ7Eju+kxImk/yoUABN9ndEAyJJIGZDUbcl+zb7EqSjbtLFCyCCgUXrIhW wVqKVFugLb4gtqG1Vge1Tqt2aGsd/rCFTmntCALOyHQEsv3duy8xAYrTr+k/2bfvvd/5nXPPPR/3 3X1LEhGl0XoyUfltrWUVK/dH/0Y0KQusr7M/xvYf3fcA5BiROTXQ19Uj7ch4l8j2VaIJ2V3dqwOr P1lUB9uXcZ4Paqr/eG0T4LQncLkpCCKtUYL9tLch3xjsid27oWNtEeSzRJbt3eFOdf/U/Y8RSYcg b+1R7+3LeCtnBlHuBtizXrVH63i9+tdEKU7Mf7QvovXdXX0MutzniLKzyExe8BkWO6JPoVyaRe2H SZF2HiyZnD4oVR2y2VKnp7wiVZBMX5KclEqSVOm0meX0HTZbwbSd061PmWoms0Hp+kMF5iclF91y 6Q+X3sXldOacstNS2Qcnfn/Cdu7NKXPKTrzxuxOzyqUpjinizMqQlRRlZmVFdVWprCjVlRUzZKli 6nWcv6FUrq5aIJszLt5q8l4yyytZbVe92W+NbPvy4pVOpTC0U5s1NJg3Kz2bZWbmZmdkZOda7J+d tNgv1Jg7LuySPyxZVjNz18WHSuor7f7K5q5LH1XmGXaZmSwng8TnvvFj/Bg/xo/x4/98EGXQAVxN Yl/2iyvHKXQRkpTcrqlC8hnYRJOl7QY2Az9rYCuwbuAUul/6OfdingBmhjzfwDJlyLcb2AQ+ZGAz 8CYDW4GfB5aAEY98xMCIxzST9hGjCirHUQ3USCHqpAiFKYozQDFwLqAI9YmrCiYE1Eul0NRQNw5G LeC6KAhdVEga7hqs+3H1w9IlRnCP3fDAbULiquEewzhuy6BhuGvwxLUxwfLxDJjP7IfUg3uEVoIL j4y5ujbwL2XDI+oVvng0jJZBCokY+PytQKqQomLOXrBlRgThURl0QloFLY8oJKxL97GK8vJq1hjq jISj4UCMucKRvnBEjYXCvaWsprubtYS6grEoa9GiWqRf85d6muqbajxFrnBvNNytRq8tDt9ZKMq0 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 owweGHBjPdahFCVYizUoRhFWYxVWYDlcKMQyLMUSLMYiLMQCzMc8zEUB8pGHXOQgG1nIxO/IwG/4 FXMwG7/gZ/yEH/EDvo/09+/wLb7B1/gKDuj4Eqn4Ap/jM3yKWZiJT/AxZmA6UvARpuFDfID3MRVT 8B6SYUciJmMSJiIBcYhFDKLxLt7BBLwNK6IQCQ0ReAOv4zWMxziMxat4BS/jJbyIMQjHC1LKIP6c D6Dsg32B/1ch/wgwAIStBwINCmVuZHN0cmVhbQ1lbmRvYmoNNDIgMCBvYmoNPDwvU3RlbVYgODYv Rm9udE5hbWUvRU5ITkFFK0NvbnNvbGFzL0ZvbnRTdHJldGNoL05vcm1hbC9Gb250RmlsZTIgNDEg MCBSL0ZvbnRXZWlnaHQgNDAwL0ZsYWdzIDQvRGVzY2VudCAtMjU3L0ZvbnRCQm94Wy0xMjIgLTIz MCA2MTkgOTUyXS9Bc2NlbnQgNzQyL0ZvbnRGYW1pbHkoQ29uc29sYXMpL0NhcEhlaWdodCA2NDAv WEhlaWdodCAtNTE1L1R5cGUvRm9udERlc2NyaXB0b3IvSXRhbGljQW5nbGUgMD4+DWVuZG9iag00 MyAwIG9iag08PC9TdWJ0eXBlL1R5cGUwL0Rlc2NlbmRhbnRGb250c1s0NiAwIFJdL0Jhc2VGb250 L0VOSE5KRCtBcmlhbFVuaWNvZGVNUy9Ub1VuaWNvZGUgMTQgMCBSL0VuY29kaW5nL0lkZW50aXR5 LUgvVHlwZS9Gb250Pj4NZW5kb2JqDTQ0IDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFu dEZvbnRzWzgxNyAwIFJdL0Jhc2VGb250L0VOSE9GRitXaW5nZGluZ3MtUmVndWxhci9FbmNvZGlu Zy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag00NSAwIG9iag08PC9TdGVtViAwL0ZvbnRO YW1lL0VOSE5KRCtBcmlhbFVuaWNvZGVNUy9Gb250U3RyZXRjaC9Ob3JtYWwvRm9udEZpbGUyIDM2 IDAgUi9Gb250V2VpZ2h0IDQwMC9GbGFncyA0L0Rlc2NlbnQgLTI3MC9Gb250QkJveFstMTAxMSAt MzMwIDIyNjAgMTA3OF0vQXNjZW50IDEwNjgvRm9udEZhbWlseShBcmlhbCBVbmljb2RlIE1TKS9D YXBIZWlnaHQgMC9UeXBlL0ZvbnREZXNjcmlwdG9yL0l0YWxpY0FuZ2xlIDA+Pg1lbmRvYmoNNDYg MCBvYmoNPDwvU3VidHlwZS9DSURGb250VHlwZTIvRm9udERlc2NyaXB0b3IgNDUgMCBSL0Jhc2VG b250L0VOSE5KRCtBcmlhbFVuaWNvZGVNUy9XWzNbMjc4XV0vQ0lEVG9HSURNYXAvSWRlbnRpdHkv Q0lEU3lzdGVtSW5mbzw8L1N1cHBsZW1lbnQgMC9PcmRlcmluZyhJZGVudGl0eSkvUmVnaXN0cnko QWRvYmUpPj4vRFcgMTAwMC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNDcgMCBvYmoNPDwvU3VidHlwZS9U cnVlVHlwZS9Gb250RGVzY3JpcHRvciA3OTYgMCBSL0xhc3RDaGFyIDE1MC9XaWR0aHNbMjc4IDAg MCAwIDAgMCA3MjIgMCAzMzMgMzMzIDAgMCAyNzggMzMzIDI3OCAwIDU1NiA1NTYgNTU2IDU1NiA1 NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiAzMzMgMCAwIDAgMCAwIDAgNzIyIDcyMiA3MjIgNzIyIDY2 NyA2MTEgNzc4IDAgMjc4IDU1NiA3MjIgNjExIDgzMyA3MjIgNzc4IDY2NyAwIDcyMiA2NjcgNjEx IDcyMiAwIDk0NCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgNjExIDU1NiA2MTEgNTU2IDMzMyA2MTEg NjExIDI3OCAwIDU1NiAyNzggODg5IDYxMSA2MTEgNjExIDYxMSAzODkgNTU2IDMzMyA2MTEgNTU2 IDc3OCA1NTYgNTU2IDUwMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCA1NTZdL0Jhc2VGb250L0FyaWFsLUJvbGRNVC9GaXJzdENoYXIgMzIvRW5j b2RpbmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag00OCAwIG9iag08PC9TdWJ0 eXBlL0NJREZvbnRUeXBlMi9Gb250RGVzY3JpcHRvciA0MiAwIFIvQmFzZUZvbnQvRU5ITkFFK0Nv bnNvbGFzL1dbM1s1NTBdXS9DSURUb0dJRE1hcC9JZGVudGl0eS9DSURTeXN0ZW1JbmZvPDwvU3Vw cGxlbWVudCAwL09yZGVyaW5nKElkZW50aXR5KS9SZWdpc3RyeShBZG9iZSk+Pi9EVyAxMDAwL1R5 cGUvRm9udD4+DWVuZG9iag00OSAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBlL0ZvbnREZXNjcmlw dG9yIDgwMyAwIFIvTGFzdENoYXIgMTUwL1dpZHRoc1syNzggMCAwIDAgNTU2IDAgNjY3IDAgMzMz IDMzMyAwIDU4NCAyNzggMzMzIDI3OCAyNzggNTU2IDU1NiA1NTYgMCAwIDU1NiAwIDAgNTU2IDAg Mjc4IDI3OCAwIDAgMCA1NTYgMCA2NjcgNjY3IDcyMiA3MjIgNjY3IDYxMSA3NzggNzIyIDI3OCAw IDAgNTU2IDgzMyA3MjIgNzc4IDY2NyA3NzggNzIyIDY2NyA2MTEgNzIyIDY2NyA5NDQgMCA2Njcg MCAwIDAgMCAwIDAgMCA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAyMjIgNTAw IDIyMiA4MzMgNTU2IDU1NiA1NTYgNTU2IDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1MDAg NTAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMjIgMzMz IDMzMyAwIDU1Nl0vQmFzZUZvbnQvQXJpYWxNVC9GaXJzdENoYXIgMzIvRW5jb2RpbmcvV2luQW5z aUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag01MCAwIG9iag08PC9TdWJ0eXBlL1RydWVUeXBl L0ZvbnREZXNjcmlwdG9yIDExIDAgUi9MYXN0Q2hhciAzMi9XaWR0aHNbMjc4XS9CYXNlRm9udC9B cmlhbC1Cb2xkSXRhbGljTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9U eXBlL0ZvbnQ+Pg1lbmRvYmoNNTEgMCBvYmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3Jp cHRvciA3OTYgMCBSL0xhc3RDaGFyIDE1MC9XaWR0aHNbMjc4IDAgMCAwIDAgMCAwIDAgMzMzIDMz MyAwIDAgMCAwIDI3OCAwIDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDAgNTU2IDU1NiA1NTYgMCAw IDAgMCAwIDYxMSA5NzUgNzIyIDcyMiA3MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggNTU2IDAg NjExIDgzMyA3MjIgNzc4IDY2NyAwIDcyMiA2NjcgNjExIDAgNjY3IDk0NCAwIDY2NyA2MTEgMCAw IDAgMCAwIDAgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMgNjExIDYxMSAyNzggMjc4IDU1NiAyNzgg ODg5IDYxMSA2MTEgNjExIDAgMzg5IDU1NiAzMzMgNjExIDAgNzc4IDU1NiA1NTYgNTAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1Nl0vQmFz ZUZvbnQvQXJpYWwtQm9sZE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmcv VHlwZS9Gb250Pj4NZW5kb2JqDTUyIDAgb2JqDTw8L1N1YnR5cGUvVHlwZTAvRGVzY2VuZGFudEZv bnRzWzQ4IDAgUl0vQmFzZUZvbnQvRUVHRUhPK0NvbnNvbGFzL1RvVW5pY29kZSAyNSAwIFIvRW5j b2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNTMgMCBvYmoNPDwvU3VidHlwZS9U eXBlMC9EZXNjZW5kYW50Rm9udHNbMzggMCBSXS9CYXNlRm9udC9FRUdFTk4rQ29yYmVsL1RvVW5p Y29kZSAyNiAwIFIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNTQgMCBv YmoNPDwvU3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciA4MDMgMCBSL0xhc3RDaGFyIDE0 OC9XaWR0aHNbMjc4IDAgMzU1IDAgMCAwIDY2NyAxOTEgMzMzIDMzMyAwIDAgMjc4IDMzMyAyNzgg Mjc4IDU1NiA1NTYgNTU2IDU1NiAwIDU1NiA1NTYgNTU2IDU1NiA1NTYgMjc4IDAgMCAwIDAgNTU2 IDAgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggNTAwIDY2NyA1NTYgODMzIDcy MiA3NzggNjY3IDc3OCA3MjIgNjY3IDYxMSA3MjIgNjY3IDk0NCAwIDY2NyAwIDAgMCAwIDAgMCAw IDU1NiA1NTYgNTAwIDU1NiA1NTYgMjc4IDU1NiA1NTYgMjIyIDIyMiA1MDAgMjIyIDgzMyA1NTYg NTU2IDU1NiA1NTYgMzMzIDUwMCAyNzggNTU2IDUwMCA3MjIgNTAwIDUwMCA1MDAgMCAwIDAgMCAw IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAyMjIgMjIyIDMzMyAzMzNdL0Jhc2VG b250L0FyaWFsTVQvRmlyc3RDaGFyIDMyL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9UeXBlL0Zv bnQ+Pg1lbmRvYmoNNTUgMCBvYmoNPDwvU3VidHlwZS9UeXBlMC9EZXNjZW5kYW50Rm9udHNbNDYg MCBSXS9CYXNlRm9udC9FRUdGRk0rQXJpYWxVbmljb2RlTVMvVG9Vbmljb2RlIDI3IDAgUi9FbmNv ZGluZy9JZGVudGl0eS1IL1R5cGUvRm9udD4+DWVuZG9iag01NiAwIG9iag08PC9TdWJ0eXBlL1R5 cGUwL0Rlc2NlbmRhbnRGb250c1s4MTcgMCBSXS9CYXNlRm9udC9FRUdGSlArV2luZ2RpbmdzLVJl Z3VsYXIvRW5jb2RpbmcvSWRlbnRpdHktSC9UeXBlL0ZvbnQ+Pg1lbmRvYmoNNTcgMCBvYmoNPDwv U3VidHlwZS9UcnVlVHlwZS9Gb250RGVzY3JpcHRvciA4MDMgMCBSL0xhc3RDaGFyIDE0Ni9XaWR0 aHNbMjc4IDAgMCAwIDAgODg5IDAgMCAzMzMgMzMzIDAgNTg0IDI3OCAzMzMgMjc4IDI3OCA1NTYg NTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgMCA1NTYgNTU2IDI3OCAwIDAgMCAwIDAgMTAxNSA2Njcg NjY3IDcyMiA3MjIgNjY3IDYxMSAwIDcyMiAyNzggMCAwIDU1NiA4MzMgMCAwIDY2NyAwIDAgNjY3 IDYxMSA3MjIgMCA5NDQgNjY3IDY2NyAwIDAgMCAwIDAgMCAwIDU1NiA1NTYgNTAwIDU1NiA1NTYg Mjc4IDU1NiA1NTYgMjIyIDIyMiA1MDAgMjIyIDgzMyA1NTYgNTU2IDU1NiA1NTYgMzMzIDUwMCAy NzggNTU2IDUwMCA3MjIgNTAwIDUwMCA1MDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg MCAwIDAgMCAwIDAgMCAwIDIyMl0vQmFzZUZvbnQvQXJpYWxNVC9GaXJzdENoYXIgMzIvRW5jb2Rp bmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag01OCAwIG9iag08PC9TdWJ0eXBl L1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDM0IDAgUi9MYXN0Q2hhciA1Ny9XaWR0aHNbMjUwIDAg MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDUwMCAwIDUwMCA1MDAgNTAwIDUwMCAwIDAgNTAw IDUwMF0vQmFzZUZvbnQvVGltZXNOZXdSb21hblBTLUJvbGRNVC9GaXJzdENoYXIgMzIvRW5jb2Rp bmcvV2luQW5zaUVuY29kaW5nL1R5cGUvRm9udD4+DWVuZG9iag01OSAwIG9iag08PC9TdWJ0eXBl L1RydWVUeXBlL0ZvbnREZXNjcmlwdG9yIDc5NiAwIFIvTGFzdENoYXIgMTIxL1dpZHRoc1syNzgg MCAwIDAgMCAwIDcyMiAwIDAgMCAwIDAgMCAwIDI3OCAwIDAgMCAwIDAgMCA1NTYgMCAwIDAgMCAz MzMgMCAwIDAgMCAwIDAgMCAwIDcyMiAwIDAgMCAwIDAgMCAwIDAgNjExIDgzMyAwIDc3OCAwIDAg MCA2NjcgNjExIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiA2MTEgNTU2IDYxMSA1NTYgMzMz IDYxMSA2MTEgMjc4IDAgNTU2IDI3OCA4ODkgNjExIDYxMSA2MTEgMCAzODkgNTU2IDMzMyA2MTEg NTU2IDc3OCAwIDU1Nl0vQmFzZUZvbnQvQXJpYWwtQm9sZE1UL0ZpcnN0Q2hhciAzMi9FbmNvZGlu Zy9XaW5BbnNpRW5jb2RpbmcvVHlwZS9Gb250Pj4NZW5kb2JqDTYwIDAgb2JqDTw8L1N1YnR5cGUv VHJ1ZVR5cGUvRm9udERlc2NyaXB0b3IgMzMgMCBSL0xhc3RDaGFyIDEyMi9XaWR0aHNbMzMzIDAg MCAwIDY2NyAwIDAgMCAwIDAgMCA2NjAgMCAwIDAgMCA2NjcgNjY3IDY2NyA2NjcgMCA2NjcgNjY3 IDAgNjY3IDY2NyAzMzMgMCAwIDAgMCAwIDAgNzc4IDc3OCA3NzggNzc4IDcyMiA2NjcgMCAwIDM4 OSAwIDAgNjY3IDk0NCA4MzMgODMzIDcyMiAwIDc3OCA3MjIgNzIyIDgzMyAwIDEwMDAgMCAwIDAg MCAwIDAgMCAwIDAgNjY3IDAgNjY3IDY2NyA2NjcgMzg5IDY2NyA2NjcgMzMzIDAgNjY3IDMzMyAx MDAwIDY2NyA2NjcgNjY3IDY2NyA0NDQgNjExIDQ0NCA2NjcgMCA5NDQgNjY3IDYxMSA1NTZdL0Jh c2VGb250L0FyaWFsLUJsYWNrL0ZpcnN0Q2hhciAzMi9FbmNvZGluZy9XaW5BbnNpRW5jb2Rpbmcv VHlwZS9Gb250Pj4NZW5kb2JqDTYxIDAgb2JqDTw8L0ZpcnN0IDYyIDAgUi9Db3VudCA1L0xhc3Qg NjMgMCBSPj4NZW5kb2JqDTYyIDAgb2JqDTw8L0ZpcnN0IDY1IDAgUi9QYXJlbnQgNjEgMCBSL0Eg NjYgMCBSL05leHQgNjMgMCBSL0NvdW50IDMvTGFzdCA2NyAwIFIvU0UgMjExIDAgUi9UaXRsZShU aGUgMm5kIFBsYW50IE1hbmFnZXJzIEZvcnVtIDIwMDkucGRmKT4+DWVuZG9iag02MyAwIG9iag08 PC9QYXJlbnQgNjEgMCBSL0EgNjQgMCBSL1ByZXYgNjIgMCBSL1NFIDg0IDAgUi9UaXRsZShSZWdp c3RyYXRpb25Gb3JtLVdoaXRuZXkpPj4NZW5kb2JqDTY0IDAgb2JqDTw8L0RbMjggMCBSL0ZpdEgg ODQ2XS9TL0dvVG8+Pg1lbmRvYmoNNjUgMCBvYmoNPDwvUGFyZW50IDYyIDAgUi9BIDcxIDAgUi9O ZXh0IDY5IDAgUi9TRSAyMTQgMCBSL1RpdGxlKHBtLWNvdmVyIHBhZ2UucGRmKT4+DWVuZG9iag02 NiAwIG9iag08PC9EWzc5MSAwIFIvRml0SCA4NDZdL1MvR29Ubz4+DWVuZG9iag02NyAwIG9iag08 PC9QYXJlbnQgNjIgMCBSL0EgNjggMCBSL1ByZXYgNjkgMCBSL1NFIDIwOSAwIFIvVGl0bGUocG0t ZGF5IHR3byk+Pg1lbmRvYmoNNjggMCBvYmoNPDwvRFsxNSAwIFIvRml0SCA4NDZdL1MvR29Ubz4+ DWVuZG9iag02OSAwIG9iag08PC9QYXJlbnQgNjIgMCBSL0EgNzAgMCBSL05leHQgNjcgMCBSL1By ZXYgNjUgMCBSL1NFIDIxNSAwIFIvVGl0bGUocG0tZGF5IG9uZSk+Pg1lbmRvYmoNNzAgMCBvYmoN PDwvRFsxIDAgUi9GaXRIIDg0Nl0vUy9Hb1RvPj4NZW5kb2JqDTcxIDAgb2JqDTw8L0RbNzkxIDAg Ui9GaXRIIDg0Nl0vUy9Hb1RvPj4NZW5kb2JqDTcyIDAgb2JqDTw8L0sgNzMgMCBSL1BhcmVudFRy ZWUgNzQgMCBSL1BhcmVudFRyZWVOZXh0S2V5IDQvUm9sZU1hcCA3NSAwIFIvVHlwZS9TdHJ1Y3RU cmVlUm9vdC9DbGFzc01hcCA3NiAwIFI+Pg1lbmRvYmoNNzMgMCBvYmoNPDwvS1syMTEgMCBSIDg0 IDAgUl0vUCA3MiAwIFIvUy9Eb2N1bWVudD4+DWVuZG9iag03NCAwIG9iag08PC9OdW1zWzBbNTEy IDAgUiA2NDAgMCBSIDYzOCAwIFIgNjM2IDAgUiA2MzQgMCBSIDU3OSAwIFIgNjMwIDAgUiA2MzIg MCBSIDYyNiAwIFIgNjI4IDAgUiA2MjIgMCBSIDYyNCAwIFIgNjE4IDAgUiA2MjAgMCBSIDYxNCAw IFIgNjE2IDAgUiA2MTAgMCBSIDYxMiAwIFIgNjA2IDAgUiA2MDggMCBSIDYwMiAwIFIgNjA0IDAg UiA1OTggMCBSIDYwMCAwIFIgNTk0IDAgUiA1OTYgMCBSIDU4MSAwIFIgNTU1IDAgUiA1NTggMCBS IDU1OSAwIFIgNTYwIDAgUiA1NjAgMCBSIDU2MCAwIFIgNTYwIDAgUiA1NjAgMCBSIDU2MCAwIFIg NTYwIDAgUiA1NjEgMCBSIDU2MSAwIFIgNTYxIDAgUiA1NjEgMCBSIDU2MSAwIFIgNTYxIDAgUiA1 NjIgMCBSIDU2MiAwIFIgNTYyIDAgUiA1NjIgMCBSIDU2MiAwIFIgNTYyIDAgUiA1NjIgMCBSIDU2 MiAwIFIgNTYzIDAgUiA1NjMgMCBSIDU2MyAwIFIgNTYzIDAgUiA1NjMgMCBSIDU2MyAwIFIgNTY0 IDAgUiA1NjUgMCBSIDU2NSAwIFIgNTY1IDAgUiA1NjUgMCBSIDU2NiAwIFIgNTY2IDAgUiA1NjYg MCBSIDU2NiAwIFIgNTY2IDAgUiA1NjcgMCBSIDU2NyAwIFIgNTY3IDAgUiA1NjcgMCBSIDU1NSAw IFIgNTUxIDAgUiA1NTIgMCBSIDU1MiAwIFIgNTUyIDAgUiA1NTIgMCBSIDU1MiAwIFIgNTQ5IDAg UiA1MzEgMCBSIDU0MiAwIFIgNTMyIDAgUiA1NDMgMCBSIDUzMiAwIFIgNTQ0IDAgUiA1MzIgMCBS IDUyMyAwIFIgNTMzIDAgUiA1MjYgMCBSIDUzNCAwIFIgNTM2IDAgUiA1MzQgMCBSIDUzNyAwIFIg NTIzIDAgUiA1MjQgMCBSIDUyNSAwIFIgNTI2IDAgUl0xWzIxNyAwIFIgMzQ1IDAgUiAyMTggMCBS IDIzNyAwIFIgMjM4IDAgUiA1MDEgMCBSIDUwMSAwIFIgNTAxIDAgUiA1MDEgMCBSIDUwMiAwIFIg NTAzIDAgUiA1MDQgMCBSIDQxMSAwIFIgNDEyIDAgUiA0MTMgMCBSIDM0OSAwIFIgNDE0IDAgUiAz NTIgMCBSIDQxNSAwIFIgNDE2IDAgUiA0MTcgMCBSIDQxOCAwIFIgNDE5IDAgUiA0MjAgMCBSIDQy MSAwIFIgNDIyIDAgUiA0MjMgMCBSIDM1OSAwIFIgNDI0IDAgUiA0MjUgMCBSIDQyNiAwIFIgNDI3 IDAgUiA0MjggMCBSIDQyOSAwIFIgNDMwIDAgUiA0MzEgMCBSIDQzMiAwIFIgMjc1IDAgUiAzMzkg MCBSIDQzMyAwIFIgMzQxIDAgUiA0MzQgMCBSIDQzNSAwIFIgNDM2IDAgUiA0MzcgMCBSIDQzOCAw IFIgNDM5IDAgUiAzNjkgMCBSIDQ0MCAwIFIgNDQxIDAgUiAyNDMgMCBSIDQ0MiAwIFIgMzczIDAg UiA0NDMgMCBSIDQ0NCAwIFIgNDQ1IDAgUiA0NDYgMCBSIDQ0NyAwIFIgNDQ4IDAgUiA0NDkgMCBS IDM3NyAwIFIgNDUwIDAgUiAzNzggMCBSIDQ1MSAwIFIgNDUyIDAgUiAzNzkgMCBSIDQ1MyAwIFIg NDU0IDAgUiAzODAgMCBSIDQ1NSAwIFIgMzUxIDAgUiAzNTMgMCBSIDM1NCAwIFIgMzU1IDAgUiAz NTYgMCBSIDM1NyAwIFIgMzU4IDAgUiAzNjAgMCBSIDM2MSAwIFIgMzYyIDAgUiAzNjMgMCBSIDM2 NCAwIFIgMzY1IDAgUiAzNjYgMCBSIDM2NyAwIFIgMzY4IDAgUiAzNzAgMCBSIDM3MSAwIFIgMzcy IDAgUiAzNzQgMCBSIDM3NSAwIFIgMzc2IDAgUiAzODAgMCBSIDM4MCAwIFIgMzQ5IDAgUiAzNDcg MCBSIDI0MyAwIFIgMzQ1IDAgUiAzNDMgMCBSIDM0MyAwIFIgMzQxIDAgUiAzMzkgMCBSIDMzNyAw IFIgMjM5IDAgUiAyNTkgMCBSIDI2MCAwIFIgMjYxIDAgUiAzMzEgMCBSIDMzMyAwIFIgMzI3IDAg UiAzMjkgMCBSIDMyMyAwIFIgMzI1IDAgUiAyNjMgMCBSIDI2NCAwIFIgMjY1IDAgUiAyNjYgMCBS IDI2NyAwIFIgMjY4IDAgUiAyNjkgMCBSIDI3MCAwIFIgMjcxIDAgUiAyNzIgMCBSIDI3MyAwIFIg Mjc0IDAgUiAyNzUgMCBSIDI3NiAwIFIgMjc3IDAgUiAyNzggMCBSIDI3OSAwIFIgMjgwIDAgUiAy ODEgMCBSIDI4MiAwIFIgMjgzIDAgUiAyODQgMCBSIDI4NSAwIFIgMjg2IDAgUiAyODcgMCBSIDI4 OCAwIFIgMjg5IDAgUiAyOTAgMCBSIDI1NyAwIFIgMjU1IDAgUiAyNTMgMCBSIDI1MSAwIFIgMjQ5 IDAgUiAyNDUgMCBSIDI0NiAwIFIgMjQzIDAgUiAyNDMgMCBSXTJbODcgMCBSIDg4IDAgUiA4OSAw IFIgOTAgMCBSIDkxIDAgUiA5MiAwIFIgOTIgMCBSIDkyIDAgUiA5MiAwIFIgOTMgMCBSIDk0IDAg UiA5NSAwIFIgOTYgMCBSIDk3IDAgUiA5OCAwIFIgOTkgMCBSIDEwMCAwIFIgMTAxIDAgUiAxMDIg MCBSIDEwMyAwIFIgMTA0IDAgUiAxMDUgMCBSIDEwNiAwIFIgMTA3IDAgUiAxMDggMCBSIDEwOSAw IFIgMTEwIDAgUiAxMTEgMCBSIDExMiAwIFIgMTEzIDAgUiAxMTQgMCBSIDExNSAwIFIgMTE2IDAg UiAxMTcgMCBSIDExOCAwIFIgMTE5IDAgUiAxMjAgMCBSIDEyMSAwIFIgMTIyIDAgUiAxMjMgMCBS IDEyNCAwIFIgMTI1IDAgUiAxMjYgMCBSIDEyNyAwIFIgMTI4IDAgUiAxMjkgMCBSIDEzMCAwIFIg MTMxIDAgUiAxMzIgMCBSIDEzMyAwIFIgMTM0IDAgUiAxMzUgMCBSIDEzNiAwIFIgMTM3IDAgUiAx MzggMCBSIDEzOSAwIFIgMTQwIDAgUiAxNDEgMCBSIDE0MiAwIFIgMTQzIDAgUiAxNDQgMCBSIDE0 NSAwIFIgMTQ2IDAgUiAxNDcgMCBSIDE0OCAwIFIgMTQ5IDAgUiAxNTAgMCBSIDE1MSAwIFIgMTUy IDAgUiAxNTMgMCBSIDE1NCAwIFIgMTU1IDAgUiAxNTYgMCBSIDE1NyAwIFIgMTU4IDAgUiAxNTkg MCBSIDE2MCAwIFIgMTYxIDAgUiAxNjIgMCBSIDE2MyAwIFIgMTY0IDAgUiAxNjUgMCBSIDE2NiAw IFIgMTY3IDAgUiAxNjggMCBSIDE2OSAwIFIgMTcwIDAgUiAxNzEgMCBSIDE3MiAwIFIgMTczIDAg UiAxNzQgMCBSIDE3NSAwIFIgMTc2IDAgUiAxNzcgMCBSIDE3OCAwIFIgMTc5IDAgUiAxODAgMCBS IDE4MSAwIFIgMTgyIDAgUiAxODMgMCBSIDE4NCAwIFIgMTg1IDAgUiAxODYgMCBSIDE4NyAwIFIg MTg4IDAgUiAxODkgMCBSIDE5MCAwIFIgMTkxIDAgUiAxOTIgMCBSIDE5MyAwIFIgMTk0IDAgUiAx OTUgMCBSIDE5NiAwIFIgMTk3IDAgUiAxOTggMCBSIDE5OSAwIFIgMTEzIDAgUiAxMTcgMCBSIDEy NiAwIFIgOTkgMCBSIDE1MiAwIFIgMTU2IDAgUiA4OCAwIFIgMTE4IDAgUiAxMTggMCBSIDE0MSAw IFIgMTQwIDAgUiAyMDAgMCBSIDIwMSAwIFIgMjAyIDAgUiAyMDMgMCBSIDIwNCAwIFIgMTU1IDAg UiAyMDUgMCBSXTMgODIgMCBSXT4+DWVuZG9iag03NSAwIG9iag08PC9JbmxpbmVTaGFwZS9GaWd1 cmUvRGVmYXVsdC9QL0Ryb3BDYXAvRmlndXJlL091dGxpbmUvU3Bhbi9TdWJzY3JpcHQvU3Bhbi9T dXBlcnNjcmlwdC9TcGFuL1RPQS9UT0MvVE9GL1RPQy9TdHJpa2VvdXQvU3Bhbi9UZXh0Qm94L0Rp di9Ob3JtYWwvUC9FbmRub3RlL05vdGUvRm9vdG5vdGUvTm90ZS9ObyMyMFNwYWNpbmcvUC8jRTYj OTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQvUC9VbmRlcmxpbmUvU3Bhbi9UT0ZJL1RPQ0kvRnJhbWUv RGl2LyNFNiNBRCNBMyNFNiM5NiM4Ny9QL1NoYXBlL0ZpZ3VyZS9UT0FJL1RPQ0k+Pg1lbmRvYmoN NzYgMCBvYmoNPDwvI0U2I0FEI0EzI0U2Izk2Izg3KzEgNzcgMCBSL05vcm1hbCA3OCAwIFIvTm8j MjBTcGFjaW5nIDc5IDAgUi8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQgODAgMCBSLyNFNiNB RCNBMyNFNiM5NiM4NyA4MSAwIFI+Pg1lbmRvYmoNNzcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NzggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTgwIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag04MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag04MiAwIG9iag1b ODMgMCBSXQ1lbmRvYmoNODMgMCBvYmoNPDwvSyAwL1AgODQgMCBSL1MvUGFydC9QZyAyOCAwIFI+ Pg1lbmRvYmoNODQgMCBvYmoNPDwvSW5mbyA4NSAwIFIvSyA4MyAwIFIvUCA3MyAwIFIvUy9QYXJ0 L01ldGFkYXRhIDg2IDAgUj4+DWVuZG9iag04NSAwIG9iag08PC9DcmVhdGlvbkRhdGUoRDoyMDA5 MDMyNjEzMjkwNCswOCcwMCcpL0F1dGhvcihXaGl0bmV5U2hlbikvQ3JlYXRvcihQU2NyaXB0NS5k bGwgVmVyc2lvbiA1LjIuMikvUHJvZHVjZXIoQWNyb2JhdCBEaXN0aWxsZXIgOC4xLjAgXChXaW5k b3dzXCkpL01vZERhdGUoRDoyMDA5MDMyNjEzMjkwNCswOCcwMCcpL1RpdGxlKFJlZ2lzdHJhdGlv bkZvcm0tV2hpdG5leSk+Pg1lbmRvYmoNODYgMCBvYmoNPDwvU3VidHlwZS9YTUwvTGVuZ3RoIDE1 NDUvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBN cENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEv IiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA0LjAtYzMxNiA0NC4yNTM5MjEsIFN1biBPY3QgMDEg MjAwNiAxNzoxNDozOSI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcv MTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFi b3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4w LyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+UFNjcmlwdDUuZGxsIFZlcnNpb24gNS4yLjI8 L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhhcDpNb2RpZnlEYXRlPjIwMDktMDMtMjZUMTM6 Mjk6MDQrMDg6MDA8L3hhcDpNb2RpZnlEYXRlPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAw OS0wMy0yNlQxMzoyOTowNCswODowMDwveGFwOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2Ny aXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4 bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6 Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0PgogICAgICAgICA8ZGM6dGl0bGU+CiAg ICAgICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgICAgICA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRl ZmF1bHQiPlJlZ2lzdHJhdGlvbkZvcm0tV2hpdG5leTwvcmRmOmxpPgogICAgICAgICAgICA8L3Jk ZjpBbHQ+CiAgICAgICAgIDwvZGM6dGl0bGU+CiAgICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAg ICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaT5XaGl0bmV5U2hlbjwvcmRmOmxp PgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgPC9y ZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAg ICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyI+CiAgICAgICAg IDxwZGY6UHJvZHVjZXI+QWNyb2JhdCBEaXN0aWxsZXIgOC4xLjAgKFdpbmRvd3MpPC9wZGY6UHJv ZHVjZXI+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJk ZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94 YXAvMS4wL21tLyI+CiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6NDIzODE0OTgtOWQ3 Yy00YTkzLWJlMjktZjVjYzkwN2NjYjQ4PC94YXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eGFw TU06SW5zdGFuY2VJRD51dWlkOmQwYjc0ZDEzLWU5NzQtNDNmZC1hMjViLWQ2YWU4Y2I2NTZmMDwv eGFwTU06SW5zdGFuY2VJRD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4K PC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9InIiPz4NCmVuZHN0cmVhbQ1lbmRvYmoNODcgMCBv YmoNPDwvQSA3ODUgMCBSL0MvI0U2Izk3I0EwI0U5Izk3I0I0I0U5IzlBIzk0L0sgMC9QIDIwOCAw IFIvUy8jRTYjOTcjQTAjRTkjOTcjQjQjRTkjOUEjOTQvUGcgMTUgMCBSPj4NZW5kb2JqDTg4IDAg b2JqDTw8L0EgNzg0IDAgUi9LWzEgMTIyXS9QIDY0OSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTUgMCBSPj4NZW5kb2JqDTg5IDAgb2JqDTw8L0EgNzgzIDAgUi9LIDIvUCAyMDggMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag05MCAwIG9iag08PC9BIDc4MiAw IFIvSyAzL1AgMjA4IDAgUi9TL1NoYXBlL1BnIDE1IDAgUj4+DWVuZG9iag05MSAwIG9iag08PC9B IDc4MSAwIFIvSyA0L1AgMjA4IDAgUi9TL1NoYXBlL1BnIDE1IDAgUj4+DWVuZG9iag05MiAwIG9i ag08PC9BIDc4MCAwIFIvS1s1IDYgNyA4XS9QIDY0MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTUgMCBSPj4NZW5kb2JqDTkzIDAgb2JqDTw8L0EgNzc5IDAgUi9LIDkvUCA2NDMgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag05NCAwIG9iag08PC9BIDc3OCAw IFIvSyAxMC9QIDY0MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2Jq DTk1IDAgb2JqDTw8L0EgNzc3IDAgUi9LIDExL1AgNjQzIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNOTYgMCBvYmoNPDwvQSA3NzYgMCBSL0sgMTIvUCA2NDQgMCBS L1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag05NyAwIG9iag08PC9BIDc3 NSAwIFIvSyAxMy9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5k b2JqDTk4IDAgb2JqDTw8L0EgNzc0IDAgUi9LIDE0L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNOTkgMCBvYmoNPDwvQSA3NzMgMCBSL0tbMTUgMTE5XS9Q IDY0NyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEwMCAwIG9i ag08PC9BIDc3MiAwIFIvSyAxNi9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUg MCBSPj4NZW5kb2JqDTEwMSAwIG9iag08PC9BIDc3MSAwIFIvSyAxNy9QIDY0NSAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEwMiAwIG9iag08PC9BIDc3MCAwIFIv SyAxOC9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEw MyAwIG9iag08PC9BIDc2OSAwIFIvSyAxOS9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgMTUgMCBSPj4NZW5kb2JqDTEwNCAwIG9iag08PC9BIDc2OCAwIFIvSyAyMC9QIDY0NCAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEwNSAwIG9iag08PC9BIDc2 NyAwIFIvSyAyMS9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5k b2JqDTEwNiAwIG9iag08PC9BIDc2NiAwIFIvSyAyMi9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEwNyAwIG9iag08PC9BIDc2NSAwIFIvSyAyMy9QIDY0 NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEwOCAwIG9iag08 PC9BIDc2NCAwIFIvSyAyNC9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBS Pj4NZW5kb2JqDTEwOSAwIG9iag08PC9BIDc2MyAwIFIvSyAyNS9QIDY0NCAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTExMCAwIG9iag08PC9BIDc2MiAwIFIvSyAy Ni9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTExMSAw IG9iag08PC9LIDI3L1AgNjc5IDAgUi9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNMTEyIDAgb2Jq DTw8L0sgMjgvUCA2ODEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9i ag0xMTMgMCBvYmoNPDwvQSA3NjEgMCBSL0tbMjkgMTE2XS9QIDY0NiAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTExNCAwIG9iag08PC9BIDc2MCAwIFIvSyAzMC9Q IDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTExNSAwIG9i ag08PC9BIDc1OSAwIFIvSyAzMS9QIDY0NCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUg MCBSPj4NZW5kb2JqDTExNiAwIG9iag08PC9BIDc1OCAwIFIvSyAzMi9QIDY0NCAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTExNyAwIG9iag08PC9BIDc1NyAwIFIv S1szMyAxMTddL1AgNjQ2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRv YmoNMTE4IDAgb2JqDTw8L0EgNzU2IDAgUi9LWzM0IDEyMyAxMjRdL1AgNjUwIDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTE5IDAgb2JqDTw8L0EgNzU1IDAgUi9L IDM1L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTIw IDAgb2JqDTw8L0EgNzU0IDAgUi9LIDM2L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyAxNSAwIFI+Pg1lbmRvYmoNMTIxIDAgb2JqDTw8L0EgNzUzIDAgUi9LIDM3L1AgNjQ0IDAgUi9T LyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTIyIDAgb2JqDTw8L0EgNzUy IDAgUi9LIDM4L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRv YmoNMTIzIDAgb2JqDTw8L0EgNzUxIDAgUi9LIDM5L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTI0IDAgb2JqDTw8L0sgNDAvUCA2NTkgMCBSL1MvTGJs L1BnIDE1IDAgUj4+DWVuZG9iag0xMjUgMCBvYmoNPDwvSyA0MS9QIDY2NyAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTEyNiAwIG9iag08PC9BIDc1MCAwIFIvS1s0 MiAxMThdL1AgNjQ2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoN MTI3IDAgb2JqDTw8L0EgNzQ5IDAgUi9LIDQzL1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTI4IDAgb2JqDTw8L0sgNDQvUCA2NjEgMCBSL1MvTGJsL1Bn IDE1IDAgUj4+DWVuZG9iag0xMjkgMCBvYmoNPDwvQSA3NDggMCBSL0sgNDUvUCA2NDQgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzAgMCBvYmoNPDwvQSA3NDcg MCBSL0sgNDYvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9i ag0xMzEgMCBvYmoNPDwvQSA3NDYgMCBSL0sgNDcvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzIgMCBvYmoNPDwvQSA3NDUgMCBSL0sgNDgvUCA2NDQg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzMgMCBvYmoNPDwv QSA3NDQgMCBSL0sgNDkvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+ DWVuZG9iag0xMzQgMCBvYmoNPDwvQSA3NDMgMCBSL0sgNTAvUCA2NDQgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzUgMCBvYmoNPDwvQSA3NDIgMCBSL0sgNTEv UCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzYgMCBv YmoNPDwvQSA3NDEgMCBSL0sgNTIvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1 IDAgUj4+DWVuZG9iag0xMzcgMCBvYmoNPDwvQSA3NDAgMCBSL0sgNTMvUCA2NDQgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xMzggMCBvYmoNPDwvQSA3MzkgMCBS L0sgNTQvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0x MzkgMCBvYmoNPDwvQSA3MzggMCBSL0sgNTUvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDE1IDAgUj4+DWVuZG9iag0xNDAgMCBvYmoNPDwvQSA3MzcgMCBSL0tbNTYgMTI2XS9QIDY1 MiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE0MSAwIG9iag08 PC9BIDczNiAwIFIvS1s1NyAxMjVdL1AgNjUxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx NSAwIFI+Pg1lbmRvYmoNMTQyIDAgb2JqDTw8L0EgNzM1IDAgUi9LIDU4L1AgNjQ0IDAgUi9TLyNF NiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTQzIDAgb2JqDTw8L0EgNzM0IDAg Ui9LIDU5L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoN MTQ0IDAgb2JqDTw8L0EgNzMzIDAgUi9LIDYwL1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTQ1IDAgb2JqDTw8L0EgNzMyIDAgUi9LIDYxL1AgNjQ0IDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTQ2IDAgb2JqDTw8L0Eg NzMxIDAgUi9LIDYyL1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1l bmRvYmoNMTQ3IDAgb2JqDTw8L0EgNzMwIDAgUi9LIDYzL1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTQ4IDAgb2JqDTw8L0EgNzI5IDAgUi9LIDY0L1Ag NjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTQ5IDAgb2Jq DTw8L0EgNzI4IDAgUi9LIDY1L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAw IFI+Pg1lbmRvYmoNMTUwIDAgb2JqDTw8L0EgNzI3IDAgUi9LIDY2L1AgNjQ0IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTUxIDAgb2JqDTw8L0EgNzI2IDAgUi9L IDY3L1AgNjQ0IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTUy IDAgb2JqDTw8L0EgNzI1IDAgUi9LWzY4IDEyMF0vUCA2NDggMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNTMgMCBvYmoNPDwvQSA3MjQgMCBSL0sgNjkvUCA2NDUg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNTQgMCBvYmoNPDwv QSA3MjMgMCBSL0sgNzAvUCA2NDQgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+ DWVuZG9iag0xNTUgMCBvYmoNPDwvQSA3MjIgMCBSL0tbNzEgMTMyXS9QIDIwNyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE1NiAwIG9iag08PC9BIDcyMSAwIFIv S1s3MiAxMjFdL1AgNjQ4IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRv YmoNMTU3IDAgb2JqDTw8L0EgNzIwIDAgUi9LIDczL1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTU4IDAgb2JqDTw8L0EgNzE5IDAgUi9LIDc0L1AgNjQ1 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTU5IDAgb2JqDTw8 L0EgNzE4IDAgUi9LIDc1L1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+ Pg1lbmRvYmoNMTYwIDAgb2JqDTw8L0sgNzYvUCA2NzQgMCBSL1MvTGJsL1BnIDE1IDAgUj4+DWVu ZG9iag0xNjEgMCBvYmoNPDwvSyA3Ny9QIDY5MSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MTUgMCBSPj4NZW5kb2JqDTE2MiAwIG9iag08PC9LIDc4L1AgNjc1IDAgUi9TL0xibC9QZyAxNSAw IFI+Pg1lbmRvYmoNMTYzIDAgb2JqDTw8L0sgNzkvUCA2ODkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNjQgMCBvYmoNPDwvSyA4MC9QIDY3NiAwIFIvUy9MYmwv UGcgMTUgMCBSPj4NZW5kb2JqDTE2NSAwIG9iag08PC9LIDgxL1AgNjg3IDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTY2IDAgb2JqDTw8L0sgODIvUCA2NzcgMCBS L1MvTGJsL1BnIDE1IDAgUj4+DWVuZG9iag0xNjcgMCBvYmoNPDwvSyA4My9QIDY4NSAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE2OCAwIG9iag08PC9LIDg0L1Ag Njc4IDAgUi9TL0xibC9QZyAxNSAwIFI+Pg1lbmRvYmoNMTY5IDAgb2JqDTw8L0sgODUvUCA2ODMg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNzAgMCBvYmoNPDwv QSA3MTcgMCBSL0sgODYvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+ DWVuZG9iag0xNzEgMCBvYmoNPDwvQSA3MTYgMCBSL0sgODcvUCA2NDUgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNzIgMCBvYmoNPDwvQSA3MTUgMCBSL0sgODgv UCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNzMgMCBv YmoNPDwvQSA3MTQgMCBSL0sgODkvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1 IDAgUj4+DWVuZG9iag0xNzQgMCBvYmoNPDwvQSA3MTMgMCBSL0sgOTAvUCA2NDUgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xNzUgMCBvYmoNPDwvQSA3MTIgMCBS L0sgOTEvUCA2NDUgMCBSL1MvRGVmYXVsdC9QZyAxNSAwIFI+Pg1lbmRvYmoNMTc2IDAgb2JqDTw8 L0EgNzExIDAgUi9LIDkyL1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+ Pg1lbmRvYmoNMTc3IDAgb2JqDTw8L0sgOTMvUCA2NTYgMCBSL1MvTGJsL1BnIDE1IDAgUj4+DWVu ZG9iag0xNzggMCBvYmoNPDwvSyA5NC9QIDY3MyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MTUgMCBSPj4NZW5kb2JqDTE3OSAwIG9iag08PC9LIDk1L1AgNjU3IDAgUi9TL0xibC9QZyAxNSAw IFI+Pg1lbmRvYmoNMTgwIDAgb2JqDTw8L0sgOTYvUCA2NzEgMCBSL1MvI0U2I0FEI0EzI0U2Izk2 Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xODEgMCBvYmoNPDwvSyA5Ny9QIDY1OCAwIFIvUy9MYmwv UGcgMTUgMCBSPj4NZW5kb2JqDTE4MiAwIG9iag08PC9LIDk4L1AgNjY5IDAgUi9TLyNFNiNBRCNB MyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTgzIDAgb2JqDTw8L0sgOTkvUCA2NjAgMCBS L1MvTGJsL1BnIDE1IDAgUj4+DWVuZG9iag0xODQgMCBvYmoNPDwvSyAxMDAvUCA2NjUgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xODUgMCBvYmoNPDwvSyAxMDEv UCA2NjMgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xODYgMCBv YmoNPDwvQSA3MTAgMCBSL0sgMTAyL1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAx NSAwIFI+Pg1lbmRvYmoNMTg3IDAgb2JqDTw8L0EgNzA5IDAgUi9LIDEwMy9QIDY0NSAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE4OCAwIG9iag08PC9BIDcwOCAw IFIvSyAxMDQvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9i ag0xODkgMCBvYmoNPDwvQSA3MDcgMCBSL0sgMTA1L1AgNjQ1IDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTkwIDAgb2JqDTw8L0EgNzA2IDAgUi9LIDEwNi9QIDY0 NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE5MSAwIG9iag08 PC9BIDcwNSAwIFIvSyAxMDcvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAg Uj4+DWVuZG9iag0xOTIgMCBvYmoNPDwvQSA3MDQgMCBSL0sgMTA4L1AgNjQ1IDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTkzIDAgb2JqDTw8L0EgNzAzIDAgUi9L IDEwOS9QIDY0NSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTE5 NCAwIG9iag08PC9BIDcwMiAwIFIvSyAxMTAvUCA2NDUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3 L1BnIDE1IDAgUj4+DWVuZG9iag0xOTUgMCBvYmoNPDwvQSA3MDEgMCBSL0sgMTExL1AgNjQ1IDAg Ui9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTk2IDAgb2JqDTw8L0Eg NzAwIDAgUi9LIDExMi9QIDY0NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4N ZW5kb2JqDTE5NyAwIG9iag08PC9BIDY5OSAwIFIvSyAxMTMvUCA2NDYgMCBSL1MvI0U2I0FEI0Ez I0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0xOTggMCBvYmoNPDwvQSA2OTggMCBSL0sgMTE0 L1AgNjQ2IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMTk5IDAg b2JqDTw8L0EgNjk3IDAgUi9LIDExNS9QIDY0NiAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcg MTUgMCBSPj4NZW5kb2JqDTIwMCAwIG9iag08PC9BIDY5NiAwIFIvSyAxMjcvUCA2NTMgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0yMDEgMCBvYmoNPDwvQSA2OTUg MCBSL0sgMTI4L1AgMjA4IDAgUi9TL1NoYXBlL1BnIDE1IDAgUj4+DWVuZG9iag0yMDIgMCBvYmoN PDwvQSA2OTQgMCBSL0sgMTI5L1AgMjA3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyAxNSAw IFI+Pg1lbmRvYmoNMjAzIDAgb2JqDTw8L0EgNjkzIDAgUi9LIDEzMC9QIDIwNyAwIFIvUy8jRTYj QUQjQTMjRTYjOTYjODcvUGcgMTUgMCBSPj4NZW5kb2JqDTIwNCAwIG9iag08PC9BIDY5MiAwIFIv SyAxMzEvUCAyMDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDE1IDAgUj4+DWVuZG9iag0y MDUgMCBvYmoNPDwvQSAyMDYgMCBSL0sgMTMzL1AgMjA3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4 Ny9QZyAxNSAwIFI+Pg1lbmRvYmoNMjA2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTIwNyAwIG9i ag08PC9LWzIwMiAwIFIgMjAzIDAgUiAyMDQgMCBSIDE1NSAwIFIgMjA1IDAgUl0vUCAyMDggMCBS L1MvVGV4dEJveD4+DWVuZG9iag0yMDggMCBvYmoNPDwvS1s4NyAwIFIgODkgMCBSIDY0MyAwIFIg NjQ0IDAgUiA2NDUgMCBSIDY0NiAwIFIgNjQ3IDAgUiA2NDggMCBSIDY0OSAwIFIgNjUwIDAgUiA2 NTEgMCBSIDY1MiAwIFIgNjUzIDAgUiAyMDcgMCBSIDkwIDAgUiA5MSAwIFIgMjAxIDAgUl0vUCAy MDkgMCBSL1MvU2VjdD4+DWVuZG9iag0yMDkgMCBvYmoNPDwvSyAyMDggMCBSL1AgMjEwIDAgUi9T L1BhcnQ+Pg1lbmRvYmoNMjEwIDAgb2JqDTw8L0tbMjE0IDAgUiAyMTUgMCBSIDIwOSAwIFJdL1Ag MjExIDAgUi9TL1BhcnQ+Pg1lbmRvYmoNMjExIDAgb2JqDTw8L0luZm8gMjEyIDAgUi9LIDIxMCAw IFIvUCA3MyAwIFIvUy9QYXJ0L01ldGFkYXRhIDIxMyAwIFI+Pg1lbmRvYmoNMjEyIDAgb2JqDTw8 L0NyZWF0aW9uRGF0ZShEOjIwMDkwNDE0MjI0NzU4KzA4JzAwJykvQXV0aG9yKGFteWhlKS9DcmVh dG9yKEFjcm9iYXQgUERGTWFrZXIgOC4xIGZvciBXb3JkKS9Qcm9kdWNlcihBY3JvYmF0IERpc3Rp bGxlciA4LjEuMCBcKFdpbmRvd3NcKSkvTW9kRGF0ZShEOjIwMDkwNDE0MjI0NzU4KzA4JzAwJykv Q29tcGFueShsaW5raW5nYml6KS9UaXRsZSgpPj4NZW5kb2JqDTIxMyAwIG9iag08PC9TdWJ0eXBl L1hNTC9MZW5ndGggMTQ1MC9UeXBlL01ldGFkYXRhPj5zdHJlYW0NCjw/eHBhY2tldCBiZWdpbj0i 77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0i YWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMC1jMzE2IDQ0LjI1Mzky MSwgU3VuIE9jdCAwMSAyMDA2IDE3OjE0OjM5Ij4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRw Oi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNj cmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRv YmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHhhcDpNb2RpZnlEYXRlPjIwMDktMDQtMTRUMjI6 NDc6NTgrMDg6MDA8L3hhcDpNb2RpZnlEYXRlPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAw OS0wNC0xNFQyMjo0Nzo1OCswODowMDwveGFwOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4YXA6TWV0 YWRhdGFEYXRlPjIwMDktMDQtMTRUMjI6NDc6NTgrMDg6MDA8L3hhcDpNZXRhZGF0YURhdGU+CiAg ICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWNyb2JhdCBQREZNYWtlciA4LjEgZm9yIFdvcmQ8L3hh cDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3Jp cHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcv ZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9k Yzpmb3JtYXQ+CiAgICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgICA8cmRmOlNlcT4KICAg ICAgICAgICAgICAgPHJkZjpsaT5hbXloZTwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+ CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxy ZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRw Oi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+ dXVpZDo1ZDFhZDAzOS05ZWQwLTQwNDEtOWE0ZS03YjMzOWI4ZTMyMTk8L3hhcE1NOkRvY3VtZW50 SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6YzdlOTE1YTEtNTNmNS00M2VmLWIy YzgtYWQxZjJjZTM4NWIwPC94YXBNTTpJbnN0YW5jZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlv bj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6 cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KICAgICAgICAgPHBkZjpQcm9kdWNl cj5BY3JvYmF0IERpc3RpbGxlciA4LjEuMCAoV2luZG93cyk8L3BkZjpQcm9kdWNlcj4KICAgICAg PC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBl bmQ9InIiPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMjE0IDAgb2JqDTw8L0sgNTExIDAgUi9QIDIxMCAw IFIvUy9QYXJ0Pj4NZW5kb2JqDTIxNSAwIG9iag08PC9LIDIxNiAwIFIvUCAyMTAgMCBSL1MvUGFy dD4+DWVuZG9iag0yMTYgMCBvYmoNPDwvS1syMTcgMCBSIDIxOCAwIFIgMjE5IDAgUiAyMjAgMCBS IDIyMSAwIFIgMjIyIDAgUiAyMjMgMCBSIDIyNCAwIFIgMjI1IDAgUiAyMjYgMCBSIDIyNyAwIFIg MjI4IDAgUiAyMjkgMCBSIDIzMCAwIFIgMjMxIDAgUiAyMzIgMCBSIDIzMyAwIFIgMjM0IDAgUiAy MzUgMCBSIDIzNiAwIFIgMjM3IDAgUiAyMzggMCBSIDIzOSAwIFJdL1AgMjE1IDAgUi9TL1NlY3Q+ Pg1lbmRvYmoNMjE3IDAgb2JqDTw8L0EgNTEwIDAgUi9DL05vIzIwU3BhY2luZy9LIDAvUCAyMTYg MCBSL1MvTm8jMjBTcGFjaW5nL1BnIDEgMCBSPj4NZW5kb2JqDTIxOCAwIG9iag08PC9BIDUwOSAw IFIvSyAyL1AgMjE2IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yMTkgMCBvYmoNPDwv S1s1MDEgMCBSIDUwMiAwIFIgNTAzIDAgUiA1MDQgMCBSXS9QIDIxNiAwIFIvUy9UZXh0Qm94Pj4N ZW5kb2JqDTIyMCAwIG9iag08PC9LWzQxMSAwIFIgNDEyIDAgUiA0MTMgMCBSIDQxNCAwIFIgNDE1 IDAgUiA0MTYgMCBSIDQxNyAwIFIgNDE4IDAgUiA0MTkgMCBSIDQyMCAwIFIgNDIxIDAgUiA0MjIg MCBSIDQyMyAwIFIgNDI0IDAgUiA0MjUgMCBSIDQyNiAwIFIgNDI3IDAgUiA0MjggMCBSIDQyOSAw IFIgNDMwIDAgUiA0MzEgMCBSIDQzMiAwIFIgNDMzIDAgUiA0MzQgMCBSIDQzNSAwIFIgNDM2IDAg UiA0MzcgMCBSIDQzOCAwIFIgNDM5IDAgUiA0NDAgMCBSIDQ0MSAwIFIgNDQyIDAgUiA0NDMgMCBS IDQ0NCAwIFIgNDQ1IDAgUiA0NDYgMCBSIDQ0NyAwIFIgNDQ4IDAgUiA0NDkgMCBSIDQ1MCAwIFIg NDUxIDAgUiA0NTIgMCBSIDQ1MyAwIFIgNDU0IDAgUiA0NTUgMCBSXS9QIDIxNiAwIFIvUy9UZXh0 Qm94Pj4NZW5kb2JqDTIyMSAwIG9iag08PC9LWzM1MSAwIFIgMzUyIDAgUiAzNTMgMCBSIDM1NCAw IFIgMzU1IDAgUiAzNTYgMCBSIDM1NyAwIFIgMzU4IDAgUiAzNTkgMCBSIDM2MCAwIFIgMzYxIDAg UiAzNjIgMCBSIDM2MyAwIFIgMzY0IDAgUiAzNjUgMCBSIDM2NiAwIFIgMzY3IDAgUiAzNjggMCBS IDM2OSAwIFIgMzcwIDAgUiAzNzEgMCBSIDM3MiAwIFIgMzczIDAgUiAzNzQgMCBSIDM3NSAwIFIg Mzc2IDAgUiAzNzcgMCBSIDM3OCAwIFIgMzc5IDAgUiAzODAgMCBSXS9QIDIxNiAwIFIvUy9UZXh0 Qm94Pj4NZW5kb2JqDTIyMiAwIG9iag08PC9LIDM0OSAwIFIvUCAyMTYgMCBSL1MvVGV4dEJveD4+ DWVuZG9iag0yMjMgMCBvYmoNPDwvSyAzNDcgMCBSL1AgMjE2IDAgUi9TL1RleHRCb3g+Pg1lbmRv YmoNMjI0IDAgb2JqDTw8L0sgMzQ1IDAgUi9QIDIxNiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIy NSAwIG9iag08PC9LIDM0MyAwIFIvUCAyMTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMjYgMCBv YmoNPDwvSyAzNDEgMCBSL1AgMjE2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjI3IDAgb2JqDTw8 L0sgMzM5IDAgUi9QIDIxNiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIyOCAwIG9iag08PC9LIDMz NyAwIFIvUCAyMTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMjkgMCBvYmoNPDwvS1syNTkgMCBS IDI2MCAwIFIgMjYxIDAgUiAyNjIgMCBSIDI2MyAwIFIgMjY0IDAgUiAyNjUgMCBSIDI2NiAwIFIg MjY3IDAgUiAyNjggMCBSIDI2OSAwIFIgMjcwIDAgUiAyNzEgMCBSIDI3MiAwIFIgMjczIDAgUiAy NzQgMCBSIDI3NSAwIFIgMjc2IDAgUiAyNzcgMCBSIDI3OCAwIFIgMjc5IDAgUiAyODAgMCBSIDI4 MSAwIFIgMjgyIDAgUiAyODMgMCBSIDI4NCAwIFIgMjg1IDAgUiAyODYgMCBSIDI4NyAwIFIgMjg4 IDAgUiAyODkgMCBSIDI5MCAwIFJdL1AgMjE2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjMwIDAg b2JqDTw8L0sgMjU3IDAgUi9QIDIxNiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIzMSAwIG9iag08 PC9LIDI1NSAwIFIvUCAyMTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMzIgMCBvYmoNPDwvSyAy NTMgMCBSL1AgMjE2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjMzIDAgb2JqDTw8L0sgMjUxIDAg Ui9QIDIxNiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIzNCAwIG9iag08PC9LIDI0OSAwIFIvUCAy MTYgMCBSL1MvVGV4dEJveD4+DWVuZG9iag0yMzUgMCBvYmoNPDwvS1syNDUgMCBSIDI0NiAwIFJd L1AgMjE2IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNMjM2IDAgb2JqDTw8L0sgMjQzIDAgUi9QIDIx NiAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTIzNyAwIG9iag08PC9BIDI0MiAwIFIvSyAzL1AgMjE2 IDAgUi9TL1NoYXBlL1BnIDEgMCBSPj4NZW5kb2JqDTIzOCAwIG9iag08PC9BIDI0MSAwIFIvSyA0 L1AgMjE2IDAgUi9TL1NoYXBlL1BnIDEgMCBSPj4NZW5kb2JqDTIzOSAwIG9iag08PC9BIDI0MCAw IFIvSyAxMDMvUCAyMTYgMCBSL1MvU2hhcGUvUGcgMSAwIFI+Pg1lbmRvYmoNMjQwIDAgb2JqDTw8 L1BsYWNlbWVudC9CbG9jay9PL0xheW91dC9FbmRJbmRlbnQgNDY2LjAvU3RhcnRJbmRlbnQgLTcx LjAvQkJveFsxOS4wIDc0Ny4wIDM5LjAgNzUzLjBdPj4NZW5kb2JqDTI0MSAwIG9iag08PC9QbGFj ZW1lbnQvQmxvY2svTy9MYXlvdXQvRW5kSW5kZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JC b3hbMC4wIDc1MC4wIDU5NS4wIDg0Mi4wXT4+DWVuZG9iag0yNDIgMCBvYmoNPDwvUGxhY2VtZW50 L0Jsb2NrL08vTGF5b3V0L0VuZEluZGVudCAtOTAuMC9TdGFydEluZGVudCAtOTAuMC9CQm94WzAu MCAwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTI0MyAwIG9iag08PC9BIDI0NCAwIFIvS1s1MCA5 NiAxNDggMTQ5XS9QIDIzNiAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMjQ0IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0yNDUgMCBvYmoNPDwvQSAyNDggMCBSL0sgMTQ2L1AgMjM1IDAgUi9T L05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNDYgMCBvYmoNPDwvQSAyNDcgMCBSL0sgMTQ3L1Ag MjM1IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNDcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTI0OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNDkgMCBvYmoNPDwvQSAyNTAgMCBSL0sg MTQ1L1AgMjM0IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNTAgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMjUxIDAgb2JqDTw8L0EgMjUyIDAgUi9LIDE0NC9QIDIzMyAwIFIvUy9Ob3Jt YWwvUGcgMSAwIFI+Pg1lbmRvYmoNMjUyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI1MyAwIG9i ag08PC9BIDI1NCAwIFIvSyAxNDMvUCAyMzIgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2Jq DTI1NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yNTUgMCBvYmoNPDwvQSAyNTYgMCBSL0sgMTQy L1AgMjMxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNTYgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMjU3IDAgb2JqDTw8L0EgMjU4IDAgUi9LIDE0MS9QIDIzMCAwIFIvUy9Ob3JtYWwv UGcgMSAwIFI+Pg1lbmRvYmoNMjU4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI1OSAwIG9iag08 PC9BIDMzNiAwIFIvSyAxMDQvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI2 MCAwIG9iag08PC9BIDMzNSAwIFIvSyAxMDUvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4N ZW5kb2JqDTI2MSAwIG9iag08PC9BIDMzNCAwIFIvSyAxMDYvUCAyMjkgMCBSL1MvTm9ybWFsL1Bn IDEgMCBSPj4NZW5kb2JqDTI2MiAwIG9iag08PC9LWzMxOSAwIFIgMzIwIDAgUiAzMjEgMCBSXS9Q IDIyOSAwIFIvUy9MPj4NZW5kb2JqDTI2MyAwIG9iag08PC9BIDMxOCAwIFIvSyAxMTMvUCAyMjkg MCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI2NCAwIG9iag08PC9BIDMxNyAwIFIvSyAx MTQvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI2NSAwIG9iag08PC9BIDMx NiAwIFIvSyAxMTUvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI2NiAwIG9i ag08PC9BIDMxNSAwIFIvSyAxMTYvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2Jq DTI2NyAwIG9iag08PC9BIDMxNCAwIFIvSyAxMTcvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBS Pj4NZW5kb2JqDTI2OCAwIG9iag08PC9BIDMxMyAwIFIvSyAxMTgvUCAyMjkgMCBSL1MvTm9ybWFs L1BnIDEgMCBSPj4NZW5kb2JqDTI2OSAwIG9iag08PC9BIDMxMiAwIFIvSyAxMTkvUCAyMjkgMCBS L1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI3MCAwIG9iag08PC9BIDMxMSAwIFIvSyAxMjAv UCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI3MSAwIG9iag08PC9BIDMxMCAw IFIvSyAxMjEvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI3MiAwIG9iag08 PC9BIDMwOSAwIFIvSyAxMjIvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTI3 MyAwIG9iag08PC9BIDMwOCAwIFIvSyAxMjMvUCAyMjkgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4N ZW5kb2JqDTI3NCAwIG9iag08PC9BIDMwNyAwIFIvSyAxMjQvUCAyMjkgMCBSL1MvTm9ybWFsL1Bn IDEgMCBSPj4NZW5kb2JqDTI3NSAwIG9iag08PC9BIDMwNiAwIFIvS1szNyAxMjVdL1AgMjI5IDAg Ui9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNzYgMCBvYmoNPDwvQSAzMDUgMCBSL0sgMTI2 L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNzcgMCBvYmoNPDwvQSAzMDQg MCBSL0sgMTI3L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yNzggMCBvYmoN PDwvQSAzMDMgMCBSL0sgMTI4L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0y NzkgMCBvYmoNPDwvQSAzMDIgMCBSL0sgMTI5L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+ DWVuZG9iag0yODAgMCBvYmoNPDwvQSAzMDEgMCBSL0sgMTMwL1AgMjI5IDAgUi9TL05vcm1hbC9Q ZyAxIDAgUj4+DWVuZG9iag0yODEgMCBvYmoNPDwvQSAzMDAgMCBSL0sgMTMxL1AgMjI5IDAgUi9T L05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODIgMCBvYmoNPDwvQSAyOTkgMCBSL0sgMTMyL1Ag MjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODMgMCBvYmoNPDwvQSAyOTggMCBS L0sgMTMzL1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODQgMCBvYmoNPDwv QSAyOTcgMCBSL0sgMTM0L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODUg MCBvYmoNPDwvQSAyOTYgMCBSL0sgMTM1L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVu ZG9iag0yODYgMCBvYmoNPDwvQSAyOTUgMCBSL0sgMTM2L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAx IDAgUj4+DWVuZG9iag0yODcgMCBvYmoNPDwvQSAyOTQgMCBSL0sgMTM3L1AgMjI5IDAgUi9TL05v cm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODggMCBvYmoNPDwvQSAyOTMgMCBSL0sgMTM4L1AgMjI5 IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yODkgMCBvYmoNPDwvQSAyOTIgMCBSL0sg MTM5L1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yOTAgMCBvYmoNPDwvQSAy OTEgMCBSL0sgMTQwL1AgMjI5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0yOTEgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTI5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjkzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag0yOTQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTI5NSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNMjk2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0yOTcgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTI5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMjk5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0z MDAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMwMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzAyIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0 SW5kZW50IDAuMD4+DWVuZG9iag0zMDMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMwNCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNMzA1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMDYgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTMwNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzA4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag0zMDkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMxMCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN MzExIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMTIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMxMyAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMzE0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMTUgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTMxNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzE3IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0zMTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMxOSAwIG9iag08PC9BIDMzMCAw IFIvS1szMzEgMCBSIDMzMiAwIFJdL1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTMyMCAwIG9iag08 PC9BIDMyNiAwIFIvS1szMjcgMCBSIDMyOCAwIFJdL1AgMjYyIDAgUi9TL0xJPj4NZW5kb2JqDTMy MSAwIG9iag08PC9BIDMyMiAwIFIvS1szMjMgMCBSIDMyNCAwIFJdL1AgMjYyIDAgUi9TL0xJPj4N ZW5kb2JqDTMyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTQuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDE0LjA+Pg1lbmRvYmoNMzIzIDAgb2JqDTw8L0sgMTExL1Ag MzIxIDAgUi9TL0xibC9QZyAxIDAgUj4+DWVuZG9iag0zMjQgMCBvYmoNPDwvSyAzMjUgMCBSL1Ag MzIxIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTMyNSAwIG9iag08PC9LIDExMi9QIDMyNCAwIFIvUy9O b3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzI2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTQuMD4+DWVuZG9iag0zMjcg MCBvYmoNPDwvSyAxMDkvUCAzMjAgMCBSL1MvTGJsL1BnIDEgMCBSPj4NZW5kb2JqDTMyOCAwIG9i ag08PC9LIDMyOSAwIFIvUCAzMjAgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNMzI5IDAgb2JqDTw8L0sg MTEwL1AgMzI4IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zMzAgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAx NC4wPj4NZW5kb2JqDTMzMSAwIG9iag08PC9LIDEwNy9QIDMxOSAwIFIvUy9MYmwvUGcgMSAwIFI+ Pg1lbmRvYmoNMzMyIDAgb2JqDTw8L0sgMzMzIDAgUi9QIDMxOSAwIFIvUy9MYm9keT4+DWVuZG9i ag0zMzMgMCBvYmoNPDwvSyAxMDgvUCAzMzIgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2Jq DTMzNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzM1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zMzYg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTMzNyAwIG9iag08PC9BIDMzOCAwIFIvSyAxMDIvUCAyMjgg MCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTMzOCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag0zMzkgMCBvYmoNPDwvQSAzNDAgMCBSL0tbMzggMTAxXS9QIDIyNyAwIFIvUy9Ob3JtYWwvUGcg MSAwIFI+Pg1lbmRvYmoNMzQwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zNDEgMCBvYmoNPDwvQSAz NDIgMCBSL0tbNDAgMTAwXS9QIDIyNiAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzQy IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRp bmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM0MyAwIG9iag08PC9BIDM0NCAwIFIvS1s5OCA5OV0v UCAyMjUgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM0NCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag0zNDUgMCBvYmoNPDwvQSAzNDYgMCBSL0tbMSA5N10vUCAyMjQgMCBSL1MvTm9ybWFs L1BnIDEgMCBSPj4NZW5kb2JqDTM0NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v SnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zNDcgMCBvYmoN PDwvQSAzNDggMCBSL0sgOTUvUCAyMjMgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM0 OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzQ5IDAgb2JqDTw8L0EgMzUwIDAgUi9LWzE1IDk0XS9Q IDIyMiAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzUwIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTM1MSAwIG9iag08PC9BIDQxMCAwIFIvSyA3MC9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcg MSAwIFI+Pg1lbmRvYmoNMzUyIDAgb2JqDTw8L0EgNDA5IDAgUi9LIDE3L1AgMjIxIDAgUi9TL05v cm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNTMgMCBvYmoNPDwvQSA0MDggMCBSL0sgNzEvUCAyMjEg MCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM1NCAwIG9iag08PC9BIDQwNyAwIFIvSyA3 Mi9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzU1IDAgb2JqDTw8L0EgNDA2 IDAgUi9LIDczL1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNTYgMCBvYmoN PDwvQSA0MDUgMCBSL0sgNzQvUCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM1 NyAwIG9iag08PC9BIDQwNCAwIFIvSyA3NS9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1l bmRvYmoNMzU4IDAgb2JqDTw8L0EgNDAzIDAgUi9LIDc2L1AgMjIxIDAgUi9TL05vcm1hbC9QZyAx IDAgUj4+DWVuZG9iag0zNTkgMCBvYmoNPDwvQSA0MDIgMCBSL0sgMjcvUCAyMjEgMCBSL1MvTm9y bWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM2MCAwIG9iag08PC9BIDQwMSAwIFIvSyA3Ny9QIDIyMSAw IFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzYxIDAgb2JqDTw8L0EgNDAwIDAgUi9LIDc4 L1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNjIgMCBvYmoNPDwvQSAzOTkg MCBSL0sgNzkvUCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM2MyAwIG9iag08 PC9BIDM5OCAwIFIvSyA4MC9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzY0 IDAgb2JqDTw8L0EgMzk3IDAgUi9LIDgxL1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVu ZG9iag0zNjUgMCBvYmoNPDwvQSAzOTYgMCBSL0sgODIvUCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEg MCBSPj4NZW5kb2JqDTM2NiAwIG9iag08PC9BIDM5NSAwIFIvSyA4My9QIDIyMSAwIFIvUy9Ob3Jt YWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzY3IDAgb2JqDTw8L0EgMzk0IDAgUi9LIDg0L1AgMjIxIDAg Ui9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNjggMCBvYmoNPDwvQSAzOTMgMCBSL0sgODUv UCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM2OSAwIG9iag08PC9BIDM5MiAw IFIvSyA0Ny9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzcwIDAgb2JqDTw8 L0EgMzkxIDAgUi9LIDg2L1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNzEg MCBvYmoNPDwvQSAzOTAgMCBSL0sgODcvUCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5k b2JqDTM3MiAwIG9iag08PC9BIDM4OSAwIFIvSyA4OC9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAw IFI+Pg1lbmRvYmoNMzczIDAgb2JqDTw8L0EgMzg4IDAgUi9LIDUyL1AgMjIxIDAgUi9TL05vcm1h bC9QZyAxIDAgUj4+DWVuZG9iag0zNzQgMCBvYmoNPDwvQSAzODcgMCBSL0sgODkvUCAyMjEgMCBS L1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM3NSAwIG9iag08PC9BIDM4NiAwIFIvSyA5MC9Q IDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNMzc2IDAgb2JqDTw8L0EgMzg1IDAg Ui9LIDkxL1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zNzcgMCBvYmoNPDwv QSAzODQgMCBSL0sgNjAvUCAyMjEgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTM3OCAw IG9iag08PC9BIDM4MyAwIFIvSyA2Mi9QIDIyMSAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRv YmoNMzc5IDAgb2JqDTw8L0EgMzgyIDAgUi9LIDY1L1AgMjIxIDAgUi9TL05vcm1hbC9QZyAxIDAg Uj4+DWVuZG9iag0zODAgMCBvYmoNPDwvQSAzODEgMCBSL0tbNjggOTIgOTNdL1AgMjIxIDAgUi9T L05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag0zODEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM4MiAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNMzgzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zODQgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTM4NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzg2IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag0zODcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM4OCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNMzg5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zOTAgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTM5MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzkyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zOTMg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM5NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNMzk1IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag0zOTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTM5NyAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNMzk4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag0zOTkgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTQwMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDAxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag00MDIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQwMyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDA0 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00MDUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQwNiAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNDA3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00MDggMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTQwOSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDEwIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag00MTEgMCBvYmoNPDwvQSA1MDAgMCBSL0sgMTIvUCAyMjAgMCBSL1MvTm9ybWFsL1Bn IDEgMCBSPj4NZW5kb2JqDTQxMiAwIG9iag08PC9BIDQ5OSAwIFIvSyAxMy9QIDIyMCAwIFIvUy9O b3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDEzIDAgb2JqDTw8L0EgNDk4IDAgUi9LIDE0L1AgMjIw IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00MTQgMCBvYmoNPDwvQSA0OTcgMCBSL0sg MTYvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQxNSAwIG9iag08PC9BIDQ5 NiAwIFIvSyAxOC9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDE2IDAgb2Jq DTw8L0EgNDk1IDAgUi9LIDE5L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00 MTcgMCBvYmoNPDwvQSA0OTQgMCBSL0sgMjAvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4N ZW5kb2JqDTQxOCAwIG9iag08PC9BIDQ5MyAwIFIvSyAyMS9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcg MSAwIFI+Pg1lbmRvYmoNNDE5IDAgb2JqDTw8L0EgNDkyIDAgUi9LIDIyL1AgMjIwIDAgUi9TL05v cm1hbC9QZyAxIDAgUj4+DWVuZG9iag00MjAgMCBvYmoNPDwvQSA0OTEgMCBSL0sgMjMvUCAyMjAg MCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQyMSAwIG9iag08PC9BIDQ5MCAwIFIvSyAy NC9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDIyIDAgb2JqDTw8L0EgNDg5 IDAgUi9LIDI1L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00MjMgMCBvYmoN PDwvQSA0ODggMCBSL0sgMjYvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQy NCAwIG9iag08PC9BIDQ4NyAwIFIvSyAyOC9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1l bmRvYmoNNDI1IDAgb2JqDTw8L0EgNDg2IDAgUi9LIDI5L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAx IDAgUj4+DWVuZG9iag00MjYgMCBvYmoNPDwvQSA0ODUgMCBSL0sgMzAvUCAyMjAgMCBSL1MvTm9y bWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQyNyAwIG9iag08PC9BIDQ4NCAwIFIvSyAzMS9QIDIyMCAw IFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDI4IDAgb2JqDTw8L0EgNDgzIDAgUi9LIDMy L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00MjkgMCBvYmoNPDwvQSA0ODIg MCBSL0sgMzMvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQzMCAwIG9iag08 PC9BIDQ4MSAwIFIvSyAzNC9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDMx IDAgb2JqDTw8L0EgNDgwIDAgUi9LIDM1L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVu ZG9iag00MzIgMCBvYmoNPDwvQSA0NzkgMCBSL0sgMzYvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEg MCBSPj4NZW5kb2JqDTQzMyAwIG9iag08PC9BIDQ3OCAwIFIvSyAzOS9QIDIyMCAwIFIvUy9Ob3Jt YWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDM0IDAgb2JqDTw8L0EgNDc3IDAgUi9LIDQxL1AgMjIwIDAg Ui9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00MzUgMCBvYmoNPDwvQSA0NzYgMCBSL0sgNDIv UCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQzNiAwIG9iag08PC9BIDQ3NSAw IFIvSyA0My9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDM3IDAgb2JqDTw8 L0EgNDc0IDAgUi9LIDQ0L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00Mzgg MCBvYmoNPDwvQSA0NzMgMCBSL0sgNDUvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5k b2JqDTQzOSAwIG9iag08PC9BIDQ3MiAwIFIvSyA0Ni9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAw IFI+Pg1lbmRvYmoNNDQwIDAgb2JqDTw8L0EgNDcxIDAgUi9LIDQ4L1AgMjIwIDAgUi9TL05vcm1h bC9QZyAxIDAgUj4+DWVuZG9iag00NDEgMCBvYmoNPDwvQSA0NzAgMCBSL0sgNDkvUCAyMjAgMCBS L1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQ0MiAwIG9iag08PC9BIDQ2OSAwIFIvSyA1MS9Q IDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDQzIDAgb2JqDTw8L0EgNDY4IDAg Ui9LIDUzL1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00NDQgMCBvYmoNPDwv QSA0NjcgMCBSL0sgNTQvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQ0NSAw IG9iag08PC9BIDQ2NiAwIFIvSyA1NS9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRv YmoNNDQ2IDAgb2JqDTw8L0EgNDY1IDAgUi9LIDU2L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAg Uj4+DWVuZG9iag00NDcgMCBvYmoNPDwvQSA0NjQgMCBSL0sgNTcvUCAyMjAgMCBSL1MvTm9ybWFs L1BnIDEgMCBSPj4NZW5kb2JqDTQ0OCAwIG9iag08PC9BIDQ2MyAwIFIvSyA1OC9QIDIyMCAwIFIv Uy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDQ5IDAgb2JqDTw8L0EgNDYyIDAgUi9LIDU5L1Ag MjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00NTAgMCBvYmoNPDwvQSA0NjEgMCBS L0sgNjEvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBSPj4NZW5kb2JqDTQ1MSAwIG9iag08PC9B IDQ2MCAwIFIvSyA2My9QIDIyMCAwIFIvUy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNDUyIDAg b2JqDTw8L0EgNDU5IDAgUi9LIDY0L1AgMjIwIDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9i ag00NTMgMCBvYmoNPDwvQSA0NTggMCBSL0sgNjYvUCAyMjAgMCBSL1MvTm9ybWFsL1BnIDEgMCBS Pj4NZW5kb2JqDTQ1NCAwIG9iag08PC9BIDQ1NyAwIFIvSyA2Ny9QIDIyMCAwIFIvUy9Ob3JtYWwv UGcgMSAwIFI+Pg1lbmRvYmoNNDU1IDAgb2JqDTw8L0EgNDU2IDAgUi9LIDY5L1AgMjIwIDAgUi9T L05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag00NTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ1NyAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNDU4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NTkgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTQ2MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDYxIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag00NjIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ2MyAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNDY0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NjUgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTQ2NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDY3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00Njgg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ2OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDcwIDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag00NzEgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ3MiAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNDczIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00NzQgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNDc1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ3NiAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNl QmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag00NzcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDc4IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTQ3OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJ bmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00ODAgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNDgxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ4MiAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag00ODMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDg0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTQ4NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3NS4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ4NiAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag00ODcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDg4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTQ4OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00OTAgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNDkxIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ5MiAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag00OTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQv V3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNDk0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4w L1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTQ5NSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00OTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NDk3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTQ5OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag00 OTkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTAwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUw MSAwIG9iag08PC9BIDUwOCAwIFIvS1s1IDYgNyA4XS9QIDIxOSAwIFIvUy9Ob3JtYWwvUGcgMSAw IFI+Pg1lbmRvYmoNNTAyIDAgb2JqDTw8L0EgNTA3IDAgUi9LIDkvUCAyMTkgMCBSL1MvTm9ybWFs L1BnIDEgMCBSPj4NZW5kb2JqDTUwMyAwIG9iag08PC9BIDUwNiAwIFIvSyAxMC9QIDIxOSAwIFIv Uy9Ob3JtYWwvUGcgMSAwIFI+Pg1lbmRvYmoNNTA0IDAgb2JqDTw8L0EgNTA1IDAgUi9LIDExL1Ag MjE5IDAgUi9TL05vcm1hbC9QZyAxIDAgUj4+DWVuZG9iag01MDUgMCBvYmoNPDwvU3BhY2VBZnRl ciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAyNy4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTUwNiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3LjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTA3IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+ DWVuZG9iag01MDggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTA5IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag01MTAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUxMSAwIG9iag08PC9LWzUxMiAwIFIgNTEz IDAgUiA1MTQgMCBSIDUxNSAwIFIgNTE2IDAgUiA1MTcgMCBSIDUxOCAwIFIgNTE5IDAgUiA1MjAg MCBSIDUyMSAwIFIgNTIyIDAgUl0vUCAyMTQgMCBSL1MvU2VjdD4+DWVuZG9iag01MTIgMCBvYmoN PDwvQSA2NDIgMCBSL0MvI0U2I0FEI0EzI0U2Izk2Izg3L0sgMC9QIDUxMSAwIFIvUy8jRTYjQUQj QTMjRTYjOTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag01MTMgMCBvYmoNPDwvSyA2NDAgMCBSL1Ag NTExIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTE0IDAgb2JqDTw8L0sgNjM2IDAgUi9QIDUxMSAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTUxNSAwIG9iag08PC9LIDYzNCAwIFIvUCA1MTEgMCBSL1Mv VGV4dEJveD4+DWVuZG9iag01MTYgMCBvYmoNPDwvS1s1NzkgMCBSIDU4MCAwIFIgNTgxIDAgUl0v UCA1MTEgMCBSL1MvVGV4dEJveD4+DWVuZG9iag01MTcgMCBvYmoNPDwvS1s1NTcgMCBSIDU1OCAw IFIgNTU5IDAgUiA1NjAgMCBSIDU2MSAwIFIgNTYyIDAgUiA1NjMgMCBSIDU2NCAwIFIgNTY1IDAg UiA1NjYgMCBSIDU2NyAwIFJdL1AgNTExIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTE4IDAgb2Jq DTw8L0sgNTU1IDAgUi9QIDUxMSAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTUxOSAwIG9iag08PC9L WzU1MSAwIFIgNTUyIDAgUl0vUCA1MTEgMCBSL1MvVGV4dEJveD4+DWVuZG9iag01MjAgMCBvYmoN PDwvSyA1NDkgMCBSL1AgNTExIDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNTIxIDAgb2JqDTw8L0tb NTMxIDAgUiA1MzIgMCBSIDUzMyAwIFIgNTM0IDAgUl0vUCA1MTEgMCBSL1MvVGV4dEJveD4+DWVu ZG9iag01MjIgMCBvYmoNPDwvS1s1MjMgMCBSIDUyNCAwIFIgNTI1IDAgUiA1MjYgMCBSXS9QIDUx MSAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTUyMyAwIG9iag08PC9BIDUzMCAwIFIvS1s4NiA5M10v UCA1MjIgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTI0IDAg b2JqDTw8L0EgNTI5IDAgUi9LIDk0L1AgNTIyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3 OTEgMCBSPj4NZW5kb2JqDTUyNSAwIG9iag08PC9BIDUyOCAwIFIvSyA5NS9QIDUyMiAwIFIvUy8j RTYjQUQjQTMjRTYjOTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag01MjYgMCBvYmoNPDwvQSA1Mjcg MCBSL0tbODggOTZdL1AgNTIyIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4N ZW5kb2JqDTUyNyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTI4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag01MjkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTUzMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTMx IDAgb2JqDTw8L0EgNTQ4IDAgUi9LIDc5L1AgNTIxIDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9Q ZyA3OTEgMCBSPj4NZW5kb2JqDTUzMiAwIG9iag08PC9BIDU0MSAwIFIvS1s1NDIgMCBSIDgxIDU0 MyAwIFIgODMgNTQ0IDAgUiA4NV0vUCA1MjEgMCBSL1MvRGVmYXVsdC9QZyA3OTEgMCBSPj4NZW5k b2JqDTUzMyAwIG9iag08PC9BIDU0MCAwIFIvSyA4Ny9QIDUyMSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag01MzQgMCBvYmoNPDwvQSA1MzUgMCBSL0tbODkgNTM2 IDAgUiA5MSA1MzcgMCBSXS9QIDUyMSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNzkxIDAg Uj4+DWVuZG9iag01MzUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTM2IDAgb2JqDTw8L0EgNTM5 IDAgUi9LIDkwL1AgNTM0IDAgUi9TL0lubGluZVNoYXBlL1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTM3 IDAgb2JqDTw8L0EgNTM4IDAgUi9LIDkyL1AgNTM0IDAgUi9TL0lubGluZVNoYXBlL1BnIDc5MSAw IFI+Pg1lbmRvYmoNNTM4IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0 MjAuMCA0Ny4wIDUwNi4wIDc5LjBdPj4NZW5kb2JqDTUzOSAwIG9iag08PC9QbGFjZW1lbnQvSW5s aW5lL08vTGF5b3V0L0JCb3hbMzExLjAgNDcuMCAzNjAuMCAxMDEuMF0+Pg1lbmRvYmoNNTQwIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU0MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTQyIDAgb2Jq DTw8L0EgNTQ3IDAgUi9LIDgwL1AgNTMyIDAgUi9TL0lubGluZVNoYXBlL1BnIDc5MSAwIFI+Pg1l bmRvYmoNNTQzIDAgb2JqDTw8L0EgNTQ2IDAgUi9LIDgyL1AgNTMyIDAgUi9TL0lubGluZVNoYXBl L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTQ0IDAgb2JqDTw8L0EgNTQ1IDAgUi9LIDg0L1AgNTMyIDAg Ui9TL0lubGluZVNoYXBlL1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTQ1IDAgb2JqDTw8L1BsYWNlbWVu dC9JbmxpbmUvTy9MYXlvdXQvQkJveFs0MjcuMCAxNDAuMCA1MTUuMCAxNzIuMF0+Pg1lbmRvYmoN NTQ2IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFsyMzYuMCAxNDAuMCAz ODUuMCAxNzYuMF0+Pg1lbmRvYmoNNTQ3IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlv dXQvQkJveFsyMy4wIDE0MC4wIDE4Mi4wIDE3OS4wXT4+DWVuZG9iag01NDggMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNTQ5IDAgb2JqDTw8L0EgNTUwIDAgUi9LIDc4L1AgNTIwIDAgUi9TLyNFNiNB RCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTU1MCAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDIzLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNTUxIDAgb2JqDTw8L0EgNTU0IDAgUi9LIDcyL1AgNTE5IDAgUi9TLyNFNiNBRCNBMyNF NiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTU1MiAwIG9iag08PC9BIDU1MyAwIFIvS1s3MyA3 NCA3NSA3NiA3N10vUCA1MTkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1l bmRvYmoNNTUzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9DZW50ZXIvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTU0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9DZW50ZXIvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNTU1IDAgb2JqDTw8L0EgNTU2IDAgUi9LWzI3IDcxXS9QIDUxOCAwIFIvUy8jRTYjQUQjQTMj RTYjOTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag01NTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL0NlbnRlci9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAu MC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01 NTcgMCBvYmoNPDwvQSA1NzggMCBSL1AgNTE3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Nz4+DWVu ZG9iag01NTggMCBvYmoNPDwvQSA1NzcgMCBSL0sgMjgvUCA1MTcgMCBSL1MvI0U2I0FEI0EzI0U2 Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTU5IDAgb2JqDTw8L0EgNTc2IDAgUi9LIDI5L1Ag NTE3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTU2MCAwIG9i ag08PC9BIDU3NSAwIFIvS1szMCAzMSAzMiAzMyAzNCAzNSAzNl0vUCA1MTcgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTYxIDAgb2JqDTw8L0EgNTc0IDAgUi9L WzM3IDM4IDM5IDQwIDQxIDQyXS9QIDUxNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNzkx IDAgUj4+DWVuZG9iag01NjIgMCBvYmoNPDwvQSA1NzMgMCBSL0tbNDMgNDQgNDUgNDYgNDcgNDgg NDkgNTBdL1AgNTE3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2Jq DTU2MyAwIG9iag08PC9BIDU3MiAwIFIvS1s1MSA1MiA1MyA1NCA1NSA1Nl0vUCA1MTcgMCBSL1Mv I0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTY0IDAgb2JqDTw8L0EgNTcx IDAgUi9LIDU3L1AgNTE3IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5k b2JqDTU2NSAwIG9iag08PC9BIDU3MCAwIFIvS1s1OCA1OSA2MCA2MV0vUCA1MTcgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTY2IDAgb2JqDTw8L0EgNTY5IDAg Ui9LWzYyIDYzIDY0IDY1IDY2XS9QIDUxNyAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNzkx IDAgUj4+DWVuZG9iag01NjcgMCBvYmoNPDwvQSA1NjggMCBSL0tbNjcgNjggNjkgNzBdL1AgNTE3 IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTU2OCAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag01NjkgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1 c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTcwIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTU3MSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01NzIgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNNTczIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTU3NCAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag01NzUgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNTc2IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTU3NyAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01NzggMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNTc5IDAgb2JqDTw8L0EgNjMzIDAgUi9LIDUvUCA1MTYgMCBSL1MvI0U2I0FE I0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTgwIDAgb2JqDTw8L0tbNTgzIDAgUiA1 ODQgMCBSIDU4NSAwIFIgNTg2IDAgUiA1ODcgMCBSIDU4OCAwIFIgNTg5IDAgUiA1OTAgMCBSIDU5 MSAwIFIgNTkyIDAgUl0vUCA1MTYgMCBSL1MvTD4+DWVuZG9iag01ODEgMCBvYmoNPDwvQSA1ODIg MCBSL0sgMjYvUCA1MTYgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRv YmoNNTgyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag01ODMgMCBvYmoNPDwvQSA2MjkgMCBSL0tbNjMw IDAgUiA2MzEgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01ODQgMCBvYmoNPDwvQSA2MjUg MCBSL0tbNjI2IDAgUiA2MjcgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01ODUgMCBvYmoN PDwvQSA2MjEgMCBSL0tbNjIyIDAgUiA2MjMgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01 ODYgMCBvYmoNPDwvQSA2MTcgMCBSL0tbNjE4IDAgUiA2MTkgMCBSXS9QIDU4MCAwIFIvUy9MST4+ DWVuZG9iag01ODcgMCBvYmoNPDwvQSA2MTMgMCBSL0tbNjE0IDAgUiA2MTUgMCBSXS9QIDU4MCAw IFIvUy9MST4+DWVuZG9iag01ODggMCBvYmoNPDwvQSA2MDkgMCBSL0tbNjEwIDAgUiA2MTEgMCBS XS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01ODkgMCBvYmoNPDwvQSA2MDUgMCBSL0tbNjA2IDAg UiA2MDcgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01OTAgMCBvYmoNPDwvQSA2MDEgMCBS L0tbNjAyIDAgUiA2MDMgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01OTEgMCBvYmoNPDwv QSA1OTcgMCBSL0tbNTk4IDAgUiA1OTkgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVuZG9iag01OTIg MCBvYmoNPDwvQSA1OTMgMCBSL0tbNTk0IDAgUiA1OTUgMCBSXS9QIDU4MCAwIFIvUy9MST4+DWVu ZG9iag01OTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAzNS4wPj4NZW5kb2JqDTU5NCAwIG9iag08PC9LIDI0L1AgNTky IDAgUi9TL0xibC9QZyA3OTEgMCBSPj4NZW5kb2JqDTU5NSAwIG9iag08PC9LIDU5NiAwIFIvUCA1 OTIgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNTk2IDAgb2JqDTw8L0sgMjUvUCA1OTUgMCBSL1MvI0U2 I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNTk3IDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzUuMD4+ DWVuZG9iag01OTggMCBvYmoNPDwvSyAyMi9QIDU5MSAwIFIvUy9MYmwvUGcgNzkxIDAgUj4+DWVu ZG9iag01OTkgMCBvYmoNPDwvSyA2MDAgMCBSL1AgNTkxIDAgUi9TL0xib2R5Pj4NZW5kb2JqDTYw MCAwIG9iag08PC9LIDIzL1AgNTk5IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBS Pj4NZW5kb2JqDTYwMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTQuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM1LjA+Pg1lbmRvYmoNNjAyIDAgb2JqDTw8L0sgMjAv UCA1OTAgMCBSL1MvTGJsL1BnIDc5MSAwIFI+Pg1lbmRvYmoNNjAzIDAgb2JqDTw8L0sgNjA0IDAg Ui9QIDU5MCAwIFIvUy9MYm9keT4+DWVuZG9iag02MDQgMCBvYmoNPDwvSyAyMS9QIDYwMyAwIFIv Uy8jRTYjQUQjQTMjRTYjOTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag02MDUgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAz NS4wPj4NZW5kb2JqDTYwNiAwIG9iag08PC9LIDE4L1AgNTg5IDAgUi9TL0xibC9QZyA3OTEgMCBS Pj4NZW5kb2JqDTYwNyAwIG9iag08PC9LIDYwOCAwIFIvUCA1ODkgMCBSL1MvTGJvZHk+Pg1lbmRv YmoNNjA4IDAgb2JqDTw8L0sgMTkvUCA2MDcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5 MSAwIFI+Pg1lbmRvYmoNNjA5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFy dC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0x NC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMzUuMD4+DWVuZG9iag02MTAgMCBvYmoNPDwv SyAxNi9QIDU4OCAwIFIvUy9MYmwvUGcgNzkxIDAgUj4+DWVuZG9iag02MTEgMCBvYmoNPDwvSyA2 MTIgMCBSL1AgNTg4IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTYxMiAwIG9iag08PC9LIDE3L1AgNjEx IDAgUi9TLyNFNiNBRCNBMyNFNiM5NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTYxMyAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDM1LjA+Pg1lbmRvYmoNNjE0IDAgb2JqDTw8L0sgMTQvUCA1ODcgMCBSL1MvTGJsL1BnIDc5 MSAwIFI+Pg1lbmRvYmoNNjE1IDAgb2JqDTw8L0sgNjE2IDAgUi9QIDU4NyAwIFIvUy9MYm9keT4+ DWVuZG9iag02MTYgMCBvYmoNPDwvSyAxNS9QIDYxNSAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgNzkxIDAgUj4+DWVuZG9iag02MTcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgLTE0LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAzNS4wPj4NZW5kb2JqDTYxOCAwIG9i ag08PC9LIDEyL1AgNTg2IDAgUi9TL0xibC9QZyA3OTEgMCBSPj4NZW5kb2JqDTYxOSAwIG9iag08 PC9LIDYyMCAwIFIvUCA1ODYgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjIwIDAgb2JqDTw8L0sgMTMv UCA2MTkgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNjIxIDAg b2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9k ZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMzUuMD4+DWVuZG9iag02MjIgMCBvYmoNPDwvSyAxMC9QIDU4NSAwIFIvUy9MYmwv UGcgNzkxIDAgUj4+DWVuZG9iag02MjMgMCBvYmoNPDwvSyA2MjQgMCBSL1AgNTg1IDAgUi9TL0xi b2R5Pj4NZW5kb2JqDTYyNCAwIG9iag08PC9LIDExL1AgNjIzIDAgUi9TLyNFNiNBRCNBMyNFNiM5 NiM4Ny9QZyA3OTEgMCBSPj4NZW5kb2JqDTYyNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0 QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4 dEluZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDM1LjA+Pg1lbmRvYmoNNjI2 IDAgb2JqDTw8L0sgOC9QIDU4NCAwIFIvUy9MYmwvUGcgNzkxIDAgUj4+DWVuZG9iag02MjcgMCBv YmoNPDwvSyA2MjggMCBSL1AgNTg0IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTYyOCAwIG9iag08PC9L IDkvUCA2MjcgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNjI5 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAv U3RhcnRJbmRlbnQgMzUuMD4+DWVuZG9iag02MzAgMCBvYmoNPDwvSyA2L1AgNTgzIDAgUi9TL0xi bC9QZyA3OTEgMCBSPj4NZW5kb2JqDTYzMSAwIG9iag08PC9LIDYzMiAwIFIvUCA1ODMgMCBSL1Mv TGJvZHk+Pg1lbmRvYmoNNjMyIDAgb2JqDTw8L0sgNy9QIDYzMSAwIFIvUy8jRTYjQUQjQTMjRTYj OTYjODcvUGcgNzkxIDAgUj4+DWVuZG9iag02MzMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjM0 IDAgb2JqDTw8L0EgNjM1IDAgUi9LIDQvUCA1MTUgMCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1Bn IDc5MSAwIFI+Pg1lbmRvYmoNNjM1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9K dXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgNDUuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02MzYgMCBvYmoN PDwvQSA2MzcgMCBSL0tbNjM4IDAgUiAzXS9QIDUxNCAwIFIvUy8jRTYjQUQjQTMjRTYjOTYjODcv UGcgNzkxIDAgUj4+DWVuZG9iag02MzcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWdu L1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRl bnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTYzOCAwIG9iag08 PC9BIDYzOSAwIFIvSyAyL1AgNjM2IDAgUi9TL0lubGluZVNoYXBlL1BnIDc5MSAwIFI+Pg1lbmRv YmoNNjM5IDAgb2JqDTw8L1BsYWNlbWVudC9JbmxpbmUvTy9MYXlvdXQvQkJveFstMTYuMCA0ODAu MCA0MjcuMCA4NjEuMF0+Pg1lbmRvYmoNNjQwIDAgb2JqDTw8L0EgNjQxIDAgUi9LIDEvUCA1MTMg MCBSL1MvI0U2I0FEI0EzI0U2Izk2Izg3L1BnIDc5MSAwIFI+Pg1lbmRvYmoNNjQxIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9DZW50ZXIvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNNjQyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY0MyAwIG9iag08PC9L WzkyIDAgUiA5MyAwIFIgOTQgMCBSIDk1IDAgUl0vUCAyMDggMCBSL1MvVGV4dEJveD4+DWVuZG9i ag02NDQgMCBvYmoNPDwvS1s5NiAwIFIgOTcgMCBSIDk4IDAgUiAxMDAgMCBSIDEwMiAwIFIgMTAz IDAgUiAxMDQgMCBSIDEwNSAwIFIgMTA2IDAgUiAxMDcgMCBSIDEwOCAwIFIgMTA5IDAgUiAxMTAg MCBSIDExNCAwIFIgMTE1IDAgUiAxMTYgMCBSIDExOSAwIFIgMTIwIDAgUiAxMjEgMCBSIDEyMiAw IFIgMTIzIDAgUiAxMjcgMCBSIDEyOSAwIFIgMTMwIDAgUiAxMzEgMCBSIDEzMiAwIFIgMTMzIDAg UiAxMzQgMCBSIDEzNSAwIFIgMTM3IDAgUiAxMzggMCBSIDEzOSAwIFIgMTQyIDAgUiAxNDMgMCBS IDE0NCAwIFIgMTQ1IDAgUiAxNDYgMCBSIDE0OCAwIFIgMTQ5IDAgUiAxNTAgMCBSIDE1MSAwIFIg MTU0IDAgUl0vUCAyMDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NDUgMCBvYmoNPDwvS1sxNTcg MCBSIDEwMSAwIFIgMTU4IDAgUiAxNTkgMCBSIDY1NCAwIFIgMTcwIDAgUiAxNzEgMCBSIDE3MiAw IFIgMTczIDAgUiAxNzQgMCBSIDE3NSAwIFIgMTc2IDAgUiA2NTUgMCBSIDE4NiAwIFIgMTg3IDAg UiAxODggMCBSIDEzNiAwIFIgMTg5IDAgUiAxOTAgMCBSIDE5MSAwIFIgMTkyIDAgUiAxOTMgMCBS IDE0NyAwIFIgMTk0IDAgUiAxNTMgMCBSIDE5NSAwIFJdL1AgMjA4IDAgUi9TL1RleHRCb3g+Pg1l bmRvYmoNNjQ2IDAgb2JqDTw8L0tbMTk2IDAgUiAxOTcgMCBSIDE5OCAwIFIgMTk5IDAgUiAxMTMg MCBSIDExNyAwIFIgMTI2IDAgUl0vUCAyMDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NDcgMCBv YmoNPDwvSyA5OSAwIFIvUCAyMDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NDggMCBvYmoNPDwv S1sxNTIgMCBSIDE1NiAwIFJdL1AgMjA4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjQ5IDAgb2Jq DTw8L0sgODggMCBSL1AgMjA4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjUwIDAgb2JqDTw8L0sg MTE4IDAgUi9QIDIwOCAwIFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTY1MSAwIG9iag08PC9LIDE0MSAw IFIvUCAyMDggMCBSL1MvVGV4dEJveD4+DWVuZG9iag02NTIgMCBvYmoNPDwvSyAxNDAgMCBSL1Ag MjA4IDAgUi9TL1RleHRCb3g+Pg1lbmRvYmoNNjUzIDAgb2JqDTw8L0sgMjAwIDAgUi9QIDIwOCAw IFIvUy9UZXh0Qm94Pj4NZW5kb2JqDTY1NCAwIG9iag08PC9LWzY3NCAwIFIgNjc1IDAgUiA2NzYg MCBSIDY3NyAwIFIgNjc4IDAgUiA2NzkgMCBSXS9QIDY0NSAwIFIvUy9MPj4NZW5kb2JqDTY1NSAw IG9iag08PC9LWzY1NiAwIFIgNjU3IDAgUiA2NTggMCBSIDY1OSAwIFIgNjYwIDAgUiA2NjEgMCBS XS9QIDY0NSAwIFIvUy9MPj4NZW5kb2JqDTY1NiAwIG9iag08PC9BIDY3MiAwIFIvS1sxNzcgMCBS IDY3MyAwIFJdL1AgNjU1IDAgUi9TL0xJPj4NZW5kb2JqDTY1NyAwIG9iag08PC9BIDY3MCAwIFIv S1sxNzkgMCBSIDY3MSAwIFJdL1AgNjU1IDAgUi9TL0xJPj4NZW5kb2JqDTY1OCAwIG9iag08PC9B IDY2OCAwIFIvS1sxODEgMCBSIDY2OSAwIFJdL1AgNjU1IDAgUi9TL0xJPj4NZW5kb2JqDTY1OSAw IG9iag08PC9BIDY2NiAwIFIvS1sxMjQgMCBSIDY2NyAwIFJdL1AgNjU1IDAgUi9TL0xJPj4NZW5k b2JqDTY2MCAwIG9iag08PC9BIDY2NCAwIFIvS1sxODMgMCBSIDY2NSAwIFJdL1AgNjU1IDAgUi9T L0xJPj4NZW5kb2JqDTY2MSAwIG9iag08PC9BIDY2MiAwIFIvS1sxMjggMCBSIDY2MyAwIFJdL1Ag NjU1IDAgUi9TL0xJPj4NZW5kb2JqDTY2MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDE0LjA+Pg1lbmRvYmoNNjYzIDAg b2JqDTw8L0sgMTg1IDAgUi9QIDY2MSAwIFIvUy9MYm9keT4+DWVuZG9iag02NjQgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVu dCAxNC4wPj4NZW5kb2JqDTY2NSAwIG9iag08PC9LIDE4NCAwIFIvUCA2NjAgMCBSL1MvTGJvZHk+ Pg1lbmRvYmoNNjY2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xh eW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IC0xNC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTQuMD4+DWVuZG9iag02NjcgMCBvYmoNPDwvSyAxMjUg MCBSL1AgNjU5IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY2OCAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDE0LjA+Pg1lbmRv YmoNNjY5IDAgb2JqDTw8L0sgMTgyIDAgUi9QIDY1OCAwIFIvUy9MYm9keT4+DWVuZG9iag02NzAg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAxNC4wPj4NZW5kb2JqDTY3MSAwIG9iag08PC9LIDE4MCAwIFIvUCA2NTcgMCBS L1MvTGJvZHk+Pg1lbmRvYmoNNjcyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IC0xNC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTQuMD4+DWVuZG9iag02NzMgMCBvYmoN PDwvSyAxNzggMCBSL1AgNjU2IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY3NCAwIG9iag08PC9BIDY5 MCAwIFIvS1sxNjAgMCBSIDY5MSAwIFJdL1AgNjU0IDAgUi9TL0xJPj4NZW5kb2JqDTY3NSAwIG9i ag08PC9BIDY4OCAwIFIvS1sxNjIgMCBSIDY4OSAwIFJdL1AgNjU0IDAgUi9TL0xJPj4NZW5kb2Jq DTY3NiAwIG9iag08PC9BIDY4NiAwIFIvS1sxNjQgMCBSIDY4NyAwIFJdL1AgNjU0IDAgUi9TL0xJ Pj4NZW5kb2JqDTY3NyAwIG9iag08PC9BIDY4NCAwIFIvS1sxNjYgMCBSIDY4NSAwIFJdL1AgNjU0 IDAgUi9TL0xJPj4NZW5kb2JqDTY3OCAwIG9iag08PC9BIDY4MiAwIFIvS1sxNjggMCBSIDY4MyAw IFJdL1AgNjU0IDAgUi9TL0xJPj4NZW5kb2JqDTY3OSAwIG9iag08PC9BIDY4MCAwIFIvS1sxMTEg MCBSIDY4MSAwIFJdL1AgNjU0IDAgUi9TL0xJPj4NZW5kb2JqDTY4MCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDE0LjA+ Pg1lbmRvYmoNNjgxIDAgb2JqDTw8L0sgMTEyIDAgUi9QIDY3OSAwIFIvUy9MYm9keT4+DWVuZG9i ag02ODIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAvRW5kSW5kZW50 IDAuMC9TdGFydEluZGVudCAxNC4wPj4NZW5kb2JqDTY4MyAwIG9iag08PC9LIDE2OSAwIFIvUCA2 NzggMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjg0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTQuMD4+DWVuZG9iag02ODUg MCBvYmoNPDwvSyAxNjcgMCBSL1AgNjc3IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY4NiAwIG9iag08 PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJU Yi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAtMTQuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDE0LjA+Pg1lbmRvYmoNNjg3IDAgb2JqDTw8L0sgMTY1IDAgUi9QIDY3NiAwIFIvUy9MYm9k eT4+DWVuZG9iag02ODggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgLTE0LjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAxNC4wPj4NZW5kb2JqDTY4OSAwIG9iag08PC9LIDE2 MyAwIFIvUCA2NzUgMCBSL1MvTGJvZHk+Pg1lbmRvYmoNNjkwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IC0xNC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMTQuMD4+DWVu ZG9iag02OTEgMCBvYmoNPDwvSyAxNjEgMCBSL1AgNjc0IDAgUi9TL0xib2R5Pj4NZW5kb2JqDTY5 MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjkzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag02OTQgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTY5NSAwIG9iag08PC9QbGFjZW1lbnQvQmxvY2svTy9MYXlvdXQv RW5kSW5kZW50IDQ2Ni4wL1N0YXJ0SW5kZW50IC03MS4wL0JCb3hbMTkuMCA3NDcuMCAzOS4wIDc1 My4wXT4+DWVuZG9iag02OTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNjk3IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag02OTggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTY5OSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNzAwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MDEgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUg MC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2Jq DTcwMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3Jp dGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAu MC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzAzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1Rl eHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9U ZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MDQg MCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdN b2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3Rh cnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcwNSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxp Z24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dElu ZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzA2IDAgb2Jq DTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9M clRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5k ZW50IDAuMD4+DWVuZG9iag03MDcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0 YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg MC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcwOCAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNzA5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MTAgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VC ZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4N ZW5kb2JqDTcxMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzEyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3Jl IDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9i ag03MTMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dy aXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAw LjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcxNCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9U ZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAv VGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzE1 IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5n TW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0 YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MTYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFs aWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJ bmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcxNyAwIG9i ag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNzE4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MTkgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTcyMCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzIxIDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTcyMiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9M YXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5k SW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzIzIDAgb2JqDTw8L1NwYWNlQWZ0 ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag03MjQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0 L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVu dCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcyNSAwIG9iag08PC9TcGFjZUFmdGVyIDAu MC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAw LjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoN NzI2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0 aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4w L1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MjcgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4 dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1Rl eHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcyOCAw IG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01v ZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFy dEluZGVudCAwLjA+Pg1lbmRvYmoNNzI5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MzAgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTczMSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3Rh cnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzMyIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag03MzMgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTczNCAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNzM1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MzYgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRv YmoNNzM3IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9X cml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQg MC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03MzggMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAv VGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4w L1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTcz OSAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGlu Z01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9T dGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzQwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRB bGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0 SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NDEgMCBv YmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2Rl L0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJ bmRlbnQgMC4wPj4NZW5kb2JqDTc0MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24v U3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVu dCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzQzIDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag03NDQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzQ1IDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTc0NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NDcgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNzQ4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc0OSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag03NTAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAtMC45OTk5ODUvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc1MSAwIG9iag08PC9T cGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRi L1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50 IDAuMD4+DWVuZG9iag03NTIgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3Rp ZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAw LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzUzIDAgb2JqDTw8L1Nw YWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTc1NCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NTUgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNzU2IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc1NyAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IC0wLjk5OTk4NS9TdGFydEluZGVu dCAwLjA+Pg1lbmRvYmoNNzU4IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0 aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQg Mjc1LjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzU5IDAgb2JqDTw8 L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xy VGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRl bnQgMC4wPj4NZW5kb2JqDTc2MCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVz dGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NjEgMCBvYmoNPDwv U3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL1N0YXJ0L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIv U3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQg MC4wPj4NZW5kb2JqDTc2MiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlm eS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAu MC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NjMgMCBvYmoNPDwvU3Bh Y2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9T cGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAw LjA+Pg1lbmRvYmoNNzY0IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5 L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4w L0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc2NSAwIG9iag08PC9TcGFj ZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1Nw YWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAu MD4+DWVuZG9iag03NjYgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkv Ty9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAv RW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzY3IDAgb2JqDTw8L1NwYWNl QWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3Bh Y2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4w Pj4NZW5kb2JqDTc2OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9P L0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9F bmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NjkgMCBvYmoNPDwvU3BhY2VB ZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFj ZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+ Pg1lbmRvYmoNNzcwIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08v TGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0Vu ZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc3MSAwIG9iag08PC9TcGFjZUFm dGVyIDAuMC9UZXh0QWxpZ24vU3RhcnQvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJl Zm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1l bmRvYmoNNzcyIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5 b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZvcmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZElu ZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5kb2JqDTc3MyAwIG9iag08PC9TcGFjZUFmdGVy IDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVm b3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag03NzQgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzc1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMC4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTc3NiAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDAuMC9FbmRJbmRl bnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03NzcgMCBvYmoNPDwvU3BhY2VBZnRlciAw LjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9y ZSAwLjAvVGV4dEluZGVudCAyNy4wL0VuZEluZGVudCAwLjAvU3RhcnRJbmRlbnQgMC4wPj4NZW5k b2JqDTc3OCAwIG9iag08PC9TcGFjZUFmdGVyIDAuMC9UZXh0QWxpZ24vSnVzdGlmeS9PL0xheW91 dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50IDI3LjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzc5IDAgb2JqDTw8L1NwYWNlQWZ0ZXIg MC4wL1RleHRBbGlnbi9KdXN0aWZ5L08vTGF5b3V0L1dyaXRpbmdNb2RlL0xyVGIvU3BhY2VCZWZv cmUgMC4wL1RleHRJbmRlbnQgMjcuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVu ZG9iag03ODAgMCBvYmoNPDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlv dXQvV3JpdGluZ01vZGUvTHJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5k ZW50IDAuMC9TdGFydEluZGVudCAwLjA+Pg1lbmRvYmoNNzgxIDAgb2JqDTw8L1BsYWNlbWVudC9C bG9jay9PL0xheW91dC9FbmRJbmRlbnQgLTkwLjAvU3RhcnRJbmRlbnQgLTkwLjAvQkJveFswLjAg NzUwLjAgNTk1LjAgODQyLjBdPj4NZW5kb2JqDTc4MiAwIG9iag08PC9QbGFjZW1lbnQvQmxvY2sv Ty9MYXlvdXQvRW5kSW5kZW50IC05MC4wL1N0YXJ0SW5kZW50IC05MC4wL0JCb3hbMC4wIDAuMCA1 OTUuMCA4NDIuMF0+Pg1lbmRvYmoNNzgzIDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGln bi9TdGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5k ZW50IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03ODQgMCBvYmoN PDwvU3BhY2VBZnRlciAwLjAvVGV4dEFsaWduL0p1c3RpZnkvTy9MYXlvdXQvV3JpdGluZ01vZGUv THJUYi9TcGFjZUJlZm9yZSAwLjAvVGV4dEluZGVudCAwLjAvRW5kSW5kZW50IDAuMC9TdGFydElu ZGVudCAwLjA+Pg1lbmRvYmoNNzg1IDAgb2JqDTw8L1NwYWNlQWZ0ZXIgMC4wL1RleHRBbGlnbi9T dGFydC9PL0xheW91dC9Xcml0aW5nTW9kZS9MclRiL1NwYWNlQmVmb3JlIDAuMC9UZXh0SW5kZW50 IDAuMC9FbmRJbmRlbnQgMC4wL1N0YXJ0SW5kZW50IDAuMD4+DWVuZG9iag03ODYgMCBvYmoNPDwv Q291bnQgNC9UeXBlL1BhZ2VzL0tpZHNbNzkxIDAgUiAxIDAgUiAxNSAwIFIgMjggMCBSXT4+DWVu ZG9iag03ODcgMCBvYmoNPDwvU3VidHlwZS9YTUwvTGVuZ3RoIDM1MDAvVHlwZS9NZXRhZGF0YT4+ c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5 ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBY TVAgQ29yZSA0LjAtYzMxNiA0NC4yNTM5MjEsIFN1biBPY3QgMDEgMjAwNiAxNzoxNDozOSI+CiAg IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3lu dGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAg IHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6 TW9kaWZ5RGF0ZT4yMDA5LTA0LTE1VDA4OjIzOjI2KzA4OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAg ICAgICAgPHhhcDpDcmVhdGVEYXRlPjIwMDktMDQtMTVUMDg6MjM6MjYrMDg6MDA8L3hhcDpDcmVh dGVEYXRlPgogICAgICAgICA8eGFwOk1ldGFkYXRhRGF0ZT4yMDA5LTA0LTE1VDA4OjIzOjI2KzA4 OjAwPC94YXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eGFwOkNyZWF0b3JUb29sPkFkb2JlIEFj cm9iYXQgOC4xIENvbWJpbmUgRmlsZXM8L3hhcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVz Y3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAg IHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgICAgICAgIDxk Yzpmb3JtYXQ+YXBwbGljYXRpb24vcGRmPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxkYzpjcmVhdG9y PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaT5hbXloZTwvcmRm OmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAg PC9yZGY6RGVzY3JpcHRpb24+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg ICAgICAgICAgIHhtbG5zOnhhcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4K ICAgICAgICAgPHhhcE1NOkRvY3VtZW50SUQ+dXVpZDowNmYyNGI1Zi0yMmM5LTQwY2QtYWU3Mi1l MmRkZjc5MTc5ZjE8L3hhcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlE PnV1aWQ6OTgxOWJkYzYtMjlhMi00YzM5LWIxZTQtODAyNTFiYjI5M2EwPC94YXBNTTpJbnN0YW5j ZUlEPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6 YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8x LjMvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA4LjEuMCAoV2lu ZG93cyk8L3BkZjpQcm9kdWNlcj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJE Rj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pg0KZW5kc3RyZWFtDWVuZG9iag03ODggMCBv YmoNPDwvQ3JlYXRpb25EYXRlKEQ6MjAwOTA0MTUwODIzMjYrMDgnMDAnKS9BdXRob3IoYW15aGUp L0NyZWF0b3IoQWRvYmUgQWNyb2JhdCA4LjEgQ29tYmluZSBGaWxlcykvUHJvZHVjZXIoQWNyb2Jh dCBEaXN0aWxsZXIgOC4xLjAgXChXaW5kb3dzXCkpL01vZERhdGUoRDoyMDA5MDQxNTA4MjMyNisw OCcwMCcpPj4NZW5kb2JqDXhyZWYNCjAgNzg5DQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAyMjU2 ODYgMDAwMDAgbg0KMDAwMDIyNTk5NiAwMDAwMCBuDQowMDAwMjI2MDYyIDAwMDAwIG4NCjAwMDAy Mjc0NTMgMDAwMDAgbg0KMDAwMDIyOTA3NSAwMDAwMCBuDQowMDAwMjMwODYzIDAwMDAwIG4NCjAw MDAyMzI3MDIgMDAwMDAgbg0KMDAwMDIzNDIyMCAwMDAwMCBuDQowMDAwMjM1OTAzIDAwMDAwIG4N CjAwMDAyMzc2MTkgMDAwMDAgbg0KMDAwMDIzOTIwMyAwMDAwMCBuDQowMDAwMjM5NDQyIDAwMDAw IG4NCjAwMDAyMzk3MjcgMDAwMDAgbg0KMDAwMDI0MDAxMiAwMDAwMCBuDQowMDAwMjQwMjk2IDAw MDAwIG4NCjAwMDAyNDA1OTcgMDAwMDAgbg0KMDAwMDI0MDY3MSAwMDAwMCBuDQowMDAwMjQxOTg0 IDAwMDAwIG4NCjAwMDAyNDM0MzUgMDAwMDAgbg0KMDAwMDI0NTEzMSAwMDAwMCBuDQowMDAwMjQ2 Nzc2IDAwMDAwIG4NCjAwMDAyNDgzMzQgMDAwMDAgbg0KMDAwMDI0OTgyOSAwMDAwMCBuDQowMDAw MjUxMzU1IDAwMDAwIG4NCjAwMDAyNTI5MzEgMDAwMDAgbg0KMDAwMDI1MzIxNiAwMDAwMCBuDQow MDAwMjUzNTAxIDAwMDAwIG4NCjAwMDAyNTM3ODUgMDAwMDAgbg0KMDAwMDI1MzkzOCAwMDAwMCBu DQowMDAwMjU0MTE0IDAwMDAwIG4NCjAwMDAzMDc4OTggMDAwMDAgbg0KMDAwMDMwNzkzNCAwMDAw MCBuDQowMDAwMzE3NDQ5IDAwMDAwIG4NCjAwMDAzMTc2NzcgMDAwMDAgbg0KMDAwMDMxNzkyNiAw MDAwMCBuDQowMDAwMzE4MDU3IDAwMDAwIG4NCjAwMDAzODA0MzcgMDAwMDAgbg0KMDAwMDM4MDY4 MiAwMDAwMCBuDQowMDAwMzgwODg0IDAwMDAwIG4NCjAwMDAzODU2OTEgMDAwMDAgbg0KMDAwMDM4 NTgyMCAwMDAwMCBuDQowMDAwMzkxNDU1IDAwMDAwIG4NCjAwMDAzOTE3MDMgMDAwMDAgbg0KMDAw MDM5MTg0MCAwMDAwMCBuDQowMDAwMzkxOTY0IDAwMDAwIG4NCjAwMDAzOTIyMTQgMDAwMDAgbg0K MDAwMDM5MjQyNCAwMDAwMCBuDQowMDAwMzkyOTQyIDAwMDAwIG4NCjAwMDAzOTMxNDYgMDAwMDAg bg0KMDAwMDM5MzY3MSAwMDAwMCBuDQowMDAwMzkzODMxIDAwMDAwIG4NCjAwMDAzOTQzNDUgMDAw MDAgbg0KMDAwMDM5NDQ3NiAwMDAwMCBuDQowMDAwMzk0NjA1IDAwMDAwIG4NCjAwMDAzOTUxMzYg MDAwMDAgbg0KMDAwMDM5NTI3MyAwMDAwMCBuDQowMDAwMzk1Mzk3IDAwMDAwIG4NCjAwMDAzOTU5 MDMgMDAwMDAgbg0KMDAwMDM5NjEzMSAwMDAwMCBuDQowMDAwMzk2NTI5IDAwMDAwIG4NCjAwMDAz OTY5NjcgMDAwMDAgbg0KMDAwMDM5NzAyMSAwMDAwMCBuDQowMDAwMzk3MTY2IDAwMDAwIG4NCjAw MDAzOTcyNjQgMDAwMDAgbg0KMDAwMDM5NzMxMSAwMDAwMCBuDQowMDAwMzk3NDAzIDAwMDAwIG4N CjAwMDAzOTc0NTEgMDAwMDAgbg0KMDAwMDM5NzUzNiAwMDAwMCBuDQowMDAwMzk3NTgzIDAwMDAw IG4NCjAwMDAzOTc2ODAgMDAwMDAgbg0KMDAwMDM5NzcyNiAwMDAwMCBuDQowMDAwMzk3Nzc0IDAw MDAwIG4NCjAwMDAzOTc4OTMgMDAwMDAgbg0KMDAwMDM5Nzk1MiAwMDAwMCBuDQowMDAwNDAxMDI0 IDAwMDAwIG4NCjAwMDA0MDEzMzcgMDAwMDAgbg0KMDAwMDQwMTQ4MSAwMDAwMCBuDQowMDAwNDAx NjIyIDAwMDAwIG4NCjAwMDA0MDE3NjMgMDAwMDAgbg0KMDAwMDQwMTkwMiAwMDAwMCBuDQowMDAw NDAyMDQxIDAwMDAwIG4NCjAwMDA0MDIxODIgMDAwMDAgbg0KMDAwMDQwMjIwNyAwMDAwMCBuDQow MDAwNDAyMjU4IDAwMDAwIG4NCjAwMDA0MDIzMzIgMDAwMDAgbg0KMDAwMDQwMjU1OCAwMDAwMCBu DQowMDAwNDA0MTgxIDAwMDAwIG4NCjAwMDA0MDQyOTYgMDAwMDAgbg0KMDAwMDQwNDM3NyAwMDAw MCBuDQowMDAwNDA0NDUzIDAwMDAwIG4NCjAwMDA0MDQ1MTYgMDAwMDAgbg0KMDAwMDQwNDU3OSAw MDAwMCBuDQowMDAwNDA0NjYyIDAwMDAwIG4NCjAwMDA0MDQ3MzggMDAwMDAgbg0KMDAwMDQwNDgx NSAwMDAwMCBuDQowMDAwNDA0ODkyIDAwMDAwIG4NCjAwMDA0MDQ5NjkgMDAwMDAgbg0KMDAwMDQw NTA0NiAwMDAwMCBuDQowMDAwNDA1MTIzIDAwMDAwIG4NCjAwMDA0MDUyMDUgMDAwMDAgbg0KMDAw MDQwNTI4MyAwMDAwMCBuDQowMDAwNDA1MzYxIDAwMDAwIG4NCjAwMDA0MDU0MzkgMDAwMDAgbg0K MDAwMDQwNTUxNyAwMDAwMCBuDQowMDAwNDA1NTk1IDAwMDAwIG4NCjAwMDA0MDU2NzMgMDAwMDAg bg0KMDAwMDQwNTc1MSAwMDAwMCBuDQowMDAwNDA1ODI5IDAwMDAwIG4NCjAwMDA0MDU5MDcgMDAw MDAgbg0KMDAwMDQwNTk4NSAwMDAwMCBuDQowMDAwNDA2MDYzIDAwMDAwIG4NCjAwMDA0MDYxMTYg MDAwMDAgbg0KMDAwMDQwNjE4NCAwMDAwMCBuDQowMDAwNDA2MjY3IDAwMDAwIG4NCjAwMDA0MDYz NDUgMDAwMDAgbg0KMDAwMDQwNjQyMyAwMDAwMCBuDQowMDAwNDA2NTAxIDAwMDAwIG4NCjAwMDA0 MDY1ODQgMDAwMDAgbg0KMDAwMDQwNjY3MSAwMDAwMCBuDQowMDAwNDA2NzQ5IDAwMDAwIG4NCjAw MDA0MDY4MjcgMDAwMDAgbg0KMDAwMDQwNjkwNSAwMDAwMCBuDQowMDAwNDA2OTgzIDAwMDAwIG4N CjAwMDA0MDcwNjEgMDAwMDAgbg0KMDAwMDQwNzExNCAwMDAwMCBuDQowMDAwNDA3MTgyIDAwMDAw IG4NCjAwMDA0MDcyNjUgMDAwMDAgbg0KMDAwMDQwNzM0MyAwMDAwMCBuDQowMDAwNDA3Mzk2IDAw MDAwIG4NCjAwMDA0MDc0NzQgMDAwMDAgbg0KMDAwMDQwNzU1MiAwMDAwMCBuDQowMDAwNDA3NjMw IDAwMDAwIG4NCjAwMDA0MDc3MDggMDAwMDAgbg0KMDAwMDQwNzc4NiAwMDAwMCBuDQowMDAwNDA3 ODY0IDAwMDAwIG4NCjAwMDA0MDc5NDIgMDAwMDAgbg0KMDAwMDQwODAyMCAwMDAwMCBuDQowMDAw NDA4MDk4IDAwMDAwIG4NCjAwMDA0MDgxNzYgMDAwMDAgbg0KMDAwMDQwODI1NCAwMDAwMCBuDQow MDAwNDA4MzM3IDAwMDAwIG4NCjAwMDA0MDg0MjAgMDAwMDAgbg0KMDAwMDQwODQ5OCAwMDAwMCBu DQowMDAwNDA4NTc2IDAwMDAwIG4NCjAwMDA0MDg2NTQgMDAwMDAgbg0KMDAwMDQwODczMiAwMDAw MCBuDQowMDAwNDA4ODEwIDAwMDAwIG4NCjAwMDA0MDg4ODggMDAwMDAgbg0KMDAwMDQwODk2NiAw MDAwMCBuDQowMDAwNDA5MDQ0IDAwMDAwIG4NCjAwMDA0MDkxMjIgMDAwMDAgbg0KMDAwMDQwOTIw MCAwMDAwMCBuDQowMDAwNDA5MjgzIDAwMDAwIG4NCjAwMDA0MDkzNjEgMDAwMDAgbg0KMDAwMDQw OTQzOSAwMDAwMCBuDQowMDAwNDA5NTIyIDAwMDAwIG4NCjAwMDA0MDk2MDUgMDAwMDAgbg0KMDAw MDQwOTY4MyAwMDAwMCBuDQowMDAwNDA5NzYxIDAwMDAwIG4NCjAwMDA0MDk4MzkgMDAwMDAgbg0K MDAwMDQwOTg5MiAwMDAwMCBuDQowMDAwNDA5OTYwIDAwMDAwIG4NCjAwMDA0MTAwMTMgMDAwMDAg bg0KMDAwMDQxMDA4MSAwMDAwMCBuDQowMDAwNDEwMTM0IDAwMDAwIG4NCjAwMDA0MTAyMDIgMDAw MDAgbg0KMDAwMDQxMDI1NSAwMDAwMCBuDQowMDAwNDEwMzIzIDAwMDAwIG4NCjAwMDA0MTAzNzYg MDAwMDAgbg0KMDAwMDQxMDQ0NCAwMDAwMCBuDQowMDAwNDEwNTIyIDAwMDAwIG4NCjAwMDA0MTA2 MDAgMDAwMDAgbg0KMDAwMDQxMDY3OCAwMDAwMCBuDQowMDAwNDEwNzU2IDAwMDAwIG4NCjAwMDA0 MTA4MzQgMDAwMDAgbg0KMDAwMDQxMDkwMSAwMDAwMCBuDQowMDAwNDEwOTc5IDAwMDAwIG4NCjAw MDA0MTEwMzIgMDAwMDAgbg0KMDAwMDQxMTEwMCAwMDAwMCBuDQowMDAwNDExMTUzIDAwMDAwIG4N CjAwMDA0MTEyMjEgMDAwMDAgbg0KMDAwMDQxMTI3NCAwMDAwMCBuDQowMDAwNDExMzQyIDAwMDAw IG4NCjAwMDA0MTEzOTUgMDAwMDAgbg0KMDAwMDQxMTQ2NCAwMDAwMCBuDQowMDAwNDExNTMzIDAw MDAwIG4NCjAwMDA0MTE2MTIgMDAwMDAgbg0KMDAwMDQxMTY5MSAwMDAwMCBuDQowMDAwNDExNzcw IDAwMDAwIG4NCjAwMDA0MTE4NDkgMDAwMDAgbg0KMDAwMDQxMTkyOCAwMDAwMCBuDQowMDAwNDEy MDA3IDAwMDAwIG4NCjAwMDA0MTIwODYgMDAwMDAgbg0KMDAwMDQxMjE2NSAwMDAwMCBuDQowMDAw NDEyMjQ0IDAwMDAwIG4NCjAwMDA0MTIzMjMgMDAwMDAgbg0KMDAwMDQxMjQwMiAwMDAwMCBuDQow MDAwNDEyNDgxIDAwMDAwIG4NCjAwMDA0MTI1NjAgMDAwMDAgbg0KMDAwMDQxMjYzOSAwMDAwMCBu DQowMDAwNDEyNzE4IDAwMDAwIG4NCjAwMDA0MTI3ODQgMDAwMDAgbg0KMDAwMDQxMjg2MyAwMDAw MCBuDQowMDAwNDEyOTQyIDAwMDAwIG4NCjAwMDA0MTMwMjEgMDAwMDAgbg0KMDAwMDQxMzEwMCAw MDAwMCBuDQowMDAwNDEzMjQyIDAwMDAwIG4NCjAwMDA0MTMzMjcgMDAwMDAgbg0KMDAwMDQxMzUw MSAwMDAwMCBuDQowMDAwNDEzNTUwIDAwMDAwIG4NCjAwMDA0MTM2MTYgMDAwMDAgbg0KMDAwMDQx MzY5NCAwMDAwMCBuDQowMDAwNDEzOTE0IDAwMDAwIG4NCjAwMDA0MTU0NDMgMDAwMDAgbg0KMDAw MDQxNTQ5MiAwMDAwMCBuDQowMDAwNDE1NTQxIDAwMDAwIG4NCjAwMDA0MTU3NjcgMDAwMDAgbg0K MDAwMDQxNTg1MiAwMDAwMCBuDQowMDAwNDE1OTE2IDAwMDAwIG4NCjAwMDA0MTU5OTMgMDAwMDAg bg0KMDAwMDQxNjM5OCAwMDAwMCBuDQowMDAwNDE2NjgzIDAwMDAwIG4NCjAwMDA0MTY3MzUgMDAw MDAgbg0KMDAwMDQxNjc4NyAwMDAwMCBuDQowMDAwNDE2ODM5IDAwMDAwIG4NCjAwMDA0MTY4OTEg MDAwMDAgbg0KMDAwMDQxNjk0MyAwMDAwMCBuDQowMDAwNDE2OTk1IDAwMDAwIG4NCjAwMDA0MTcw NDcgMDAwMDAgbg0KMDAwMDQxNzM0OCAwMDAwMCBuDQowMDAwNDE3NDAwIDAwMDAwIG4NCjAwMDA0 MTc0NTIgMDAwMDAgbg0KMDAwMDQxNzUwNCAwMDAwMCBuDQowMDAwNDE3NTU2IDAwMDAwIG4NCjAw MDA0MTc2MDggMDAwMDAgbg0KMDAwMDQxNzY2OSAwMDAwMCBuDQowMDAwNDE3NzIxIDAwMDAwIG4N CjAwMDA0MTc3ODQgMDAwMDAgbg0KMDAwMDQxNzg0NyAwMDAwMCBuDQowMDAwNDE3OTEyIDAwMDAw IG4NCjAwMDA0MTgwMjEgMDAwMDAgbg0KMDAwMDQxODEzMCAwMDAwMCBuDQowMDAwNDE4MjM3IDAw MDAwIG4NCjAwMDA0MTgzMTQgMDAwMDAgbg0KMDAwMDQxODQ1NCAwMDAwMCBuDQowMDAwNDE4NTIw IDAwMDAwIG4NCjAwMDA0MTg1ODYgMDAwMDAgbg0KMDAwMDQxODcyNiAwMDAwMCBuDQowMDAwNDE4 ODY4IDAwMDAwIG4NCjAwMDA0MTg5MzQgMDAwMDAgbg0KMDAwMDQxOTA3NiAwMDAwMCBuDQowMDAw NDE5MTQyIDAwMDAwIG4NCjAwMDA0MTkyODQgMDAwMDAgbg0KMDAwMDQxOTM1MCAwMDAwMCBuDQow MDAwNDE5NDkyIDAwMDAwIG4NCjAwMDA0MTk1NTggMDAwMDAgbg0KMDAwMDQxOTcwMCAwMDAwMCBu DQowMDAwNDE5NzY2IDAwMDAwIG4NCjAwMDA0MTk5MDggMDAwMDAgbg0KMDAwMDQxOTk3NCAwMDAw MCBuDQowMDAwNDIwMDQwIDAwMDAwIG4NCjAwMDA0MjAxMDYgMDAwMDAgbg0KMDAwMDQyMDE2OSAw MDAwMCBuDQowMDAwNDIwMjM1IDAwMDAwIG4NCjAwMDA0MjAzMDEgMDAwMDAgbg0KMDAwMDQyMDM2 NyAwMDAwMCBuDQowMDAwNDIwNDMzIDAwMDAwIG4NCjAwMDA0MjA0OTkgMDAwMDAgbg0KMDAwMDQy MDU2NSAwMDAwMCBuDQowMDAwNDIwNjMxIDAwMDAwIG4NCjAwMDA0MjA2OTcgMDAwMDAgbg0KMDAw MDQyMDc2MyAwMDAwMCBuDQowMDAwNDIwODI5IDAwMDAwIG4NCjAwMDA0MjA4OTUgMDAwMDAgbg0K MDAwMDQyMDk2MSAwMDAwMCBuDQowMDAwNDIxMDMxIDAwMDAwIG4NCjAwMDA0MjEwOTcgMDAwMDAg bg0KMDAwMDQyMTE2MyAwMDAwMCBuDQowMDAwNDIxMjI5IDAwMDAwIG4NCjAwMDA0MjEyOTUgMDAw MDAgbg0KMDAwMDQyMTM2MSAwMDAwMCBuDQowMDAwNDIxNDI3IDAwMDAwIG4NCjAwMDA0MjE0OTMg MDAwMDAgbg0KMDAwMDQyMTU1OSAwMDAwMCBuDQowMDAwNDIxNjI1IDAwMDAwIG4NCjAwMDA0MjE2 OTEgMDAwMDAgbg0KMDAwMDQyMTc1NyAwMDAwMCBuDQowMDAwNDIxODIzIDAwMDAwIG4NCjAwMDA0 MjE4ODkgMDAwMDAgbg0KMDAwMDQyMTk1NSAwMDAwMCBuDQowMDAwNDIyMDIxIDAwMDAwIG4NCjAw MDA0MjIxNjEgMDAwMDAgbg0KMDAwMDQyMjMwMSAwMDAwMCBuDQowMDAwNDIyNDQxIDAwMDAwIG4N CjAwMDA0MjI1ODEgMDAwMDAgbg0KMDAwMDQyMjcyMSAwMDAwMCBuDQowMDAwNDIyODYxIDAwMDAw IG4NCjAwMDA0MjMwMDEgMDAwMDAgbg0KMDAwMDQyMzE0MSAwMDAwMCBuDQowMDAwNDIzMjgxIDAw MDAwIG4NCjAwMDA0MjM0MjEgMDAwMDAgbg0KMDAwMDQyMzU2MSAwMDAwMCBuDQowMDAwNDIzNzAx IDAwMDAwIG4NCjAwMDA0MjM4NDEgMDAwMDAgbg0KMDAwMDQyMzk4MSAwMDAwMCBuDQowMDAwNDI0 MTIxIDAwMDAwIG4NCjAwMDA0MjQyNjEgMDAwMDAgbg0KMDAwMDQyNDQwMSAwMDAwMCBuDQowMDAw NDI0NTQxIDAwMDAwIG4NCjAwMDA0MjQ2ODEgMDAwMDAgbg0KMDAwMDQyNDgyMSAwMDAwMCBuDQow MDAwNDI0OTYxIDAwMDAwIG4NCjAwMDA0MjUxMDEgMDAwMDAgbg0KMDAwMDQyNTI0MSAwMDAwMCBu DQowMDAwNDI1MzgxIDAwMDAwIG4NCjAwMDA0MjU1MjEgMDAwMDAgbg0KMDAwMDQyNTY2MSAwMDAw MCBuDQowMDAwNDI1ODAxIDAwMDAwIG4NCjAwMDA0MjU5NDEgMDAwMDAgbg0KMDAwMDQyNjAwNyAw MDAwMCBuDQowMDAwNDI2MDczIDAwMDAwIG4NCjAwMDA0MjYxMzkgMDAwMDAgbg0KMDAwMDQyNjI4 MiAwMDAwMCBuDQowMDAwNDI2MzM1IDAwMDAwIG4NCjAwMDA0MjYzODUgMDAwMDAgbg0KMDAwMDQy NjQ0MSAwMDAwMCBuDQowMDAwNDI2NTg0IDAwMDAwIG4NCjAwMDA0MjY2MzcgMDAwMDAgbg0KMDAw MDQyNjY4NyAwMDAwMCBuDQowMDAwNDI2NzQzIDAwMDAwIG4NCjAwMDA0MjY4ODYgMDAwMDAgbg0K MDAwMDQyNjkzOSAwMDAwMCBuDQowMDAwNDI2OTg5IDAwMDAwIG4NCjAwMDA0MjcwNDUgMDAwMDAg bg0KMDAwMDQyNzE4NSAwMDAwMCBuDQowMDAwNDI3MzI1IDAwMDAwIG4NCjAwMDA0Mjc0NjUgMDAw MDAgbg0KMDAwMDQyNzUzMSAwMDAwMCBuDQowMDAwNDI3NjczIDAwMDAwIG4NCjAwMDA0Mjc3NDMg MDAwMDAgbg0KMDAwMDQyNzg4MyAwMDAwMCBuDQowMDAwNDI3OTUzIDAwMDAwIG4NCjAwMDA0Mjgw OTUgMDAwMDAgbg0KMDAwMDQyODE2NCAwMDAwMCBuDQowMDAwNDI4MzA2IDAwMDAwIG4NCjAwMDA0 MjgzNzQgMDAwMDAgbg0KMDAwMDQyODUxNiAwMDAwMCBuDQowMDAwNDI4NTgxIDAwMDAwIG4NCjAw MDA0Mjg3MjEgMDAwMDAgbg0KMDAwMDQyODc5MCAwMDAwMCBuDQowMDAwNDI4OTMyIDAwMDAwIG4N CjAwMDA0Mjg5OTcgMDAwMDAgbg0KMDAwMDQyOTA2MiAwMDAwMCBuDQowMDAwNDI5MTI3IDAwMDAw IG4NCjAwMDA0MjkxOTIgMDAwMDAgbg0KMDAwMDQyOTI1NyAwMDAwMCBuDQowMDAwNDI5MzIyIDAw MDAwIG4NCjAwMDA0MjkzODcgMDAwMDAgbg0KMDAwMDQyOTQ1MiAwMDAwMCBuDQowMDAwNDI5NTE3 IDAwMDAwIG4NCjAwMDA0Mjk1ODIgMDAwMDAgbg0KMDAwMDQyOTY0NyAwMDAwMCBuDQowMDAwNDI5 NzEyIDAwMDAwIG4NCjAwMDA0Mjk3NzcgMDAwMDAgbg0KMDAwMDQyOTg0MiAwMDAwMCBuDQowMDAw NDI5OTA3IDAwMDAwIG4NCjAwMDA0Mjk5NzIgMDAwMDAgbg0KMDAwMDQzMDAzNyAwMDAwMCBuDQow MDAwNDMwMTAyIDAwMDAwIG4NCjAwMDA0MzAxNjcgMDAwMDAgbg0KMDAwMDQzMDIzMiAwMDAwMCBu DQowMDAwNDMwMjk3IDAwMDAwIG4NCjAwMDA0MzAzNjIgMDAwMDAgbg0KMDAwMDQzMDQyNyAwMDAw MCBuDQowMDAwNDMwNDkyIDAwMDAwIG4NCjAwMDA0MzA1NTcgMDAwMDAgbg0KMDAwMDQzMDYyMiAw MDAwMCBuDQowMDAwNDMwNjg3IDAwMDAwIG4NCjAwMDA0MzA3NTIgMDAwMDAgbg0KMDAwMDQzMDgx NyAwMDAwMCBuDQowMDAwNDMwODg5IDAwMDAwIG4NCjAwMDA0MzEwMjkgMDAwMDAgbg0KMDAwMDQz MTE2OSAwMDAwMCBuDQowMDAwNDMxMzA5IDAwMDAwIG4NCjAwMDA0MzE0NDkgMDAwMDAgbg0KMDAw MDQzMTU4OSAwMDAwMCBuDQowMDAwNDMxNzI5IDAwMDAwIG4NCjAwMDA0MzE4NjkgMDAwMDAgbg0K MDAwMDQzMjAwOSAwMDAwMCBuDQowMDAwNDMyMTQ5IDAwMDAwIG4NCjAwMDA0MzIyODkgMDAwMDAg bg0KMDAwMDQzMjQyOSAwMDAwMCBuDQowMDAwNDMyNTY5IDAwMDAwIG4NCjAwMDA0MzI3MDkgMDAw MDAgbg0KMDAwMDQzMjg0OSAwMDAwMCBuDQowMDAwNDMyOTg5IDAwMDAwIG4NCjAwMDA0MzMxMjkg MDAwMDAgbg0KMDAwMDQzMzI2OSAwMDAwMCBuDQowMDAwNDMzNDA5IDAwMDAwIG4NCjAwMDA0MzM1 NDkgMDAwMDAgbg0KMDAwMDQzMzY4OSAwMDAwMCBuDQowMDAwNDMzODI5IDAwMDAwIG4NCjAwMDA0 MzM5NjkgMDAwMDAgbg0KMDAwMDQzNDEwOSAwMDAwMCBuDQowMDAwNDM0MjQ5IDAwMDAwIG4NCjAw MDA0MzQzODkgMDAwMDAgbg0KMDAwMDQzNDUyOSAwMDAwMCBuDQowMDAwNDM0NjY5IDAwMDAwIG4N CjAwMDA0MzQ4MDkgMDAwMDAgbg0KMDAwMDQzNDk0OSAwMDAwMCBuDQowMDAwNDM1MDg5IDAwMDAw IG4NCjAwMDA0MzUxNTQgMDAwMDAgbg0KMDAwMDQzNTIxOSAwMDAwMCBuDQowMDAwNDM1Mjg0IDAw MDAwIG4NCjAwMDA0MzUzNDkgMDAwMDAgbg0KMDAwMDQzNTQxNCAwMDAwMCBuDQowMDAwNDM1NDc5 IDAwMDAwIG4NCjAwMDA0MzU1NDQgMDAwMDAgbg0KMDAwMDQzNTYwOSAwMDAwMCBuDQowMDAwNDM1 Njc0IDAwMDAwIG4NCjAwMDA0MzU3MzkgMDAwMDAgbg0KMDAwMDQzNTgwNCAwMDAwMCBuDQowMDAw NDM1ODY5IDAwMDAwIG4NCjAwMDA0MzU5MzQgMDAwMDAgbg0KMDAwMDQzNTk5OSAwMDAwMCBuDQow MDAwNDM2MDY0IDAwMDAwIG4NCjAwMDA0MzYxMjkgMDAwMDAgbg0KMDAwMDQzNjE5NCAwMDAwMCBu DQowMDAwNDM2MjU5IDAwMDAwIG4NCjAwMDA0MzYzMjQgMDAwMDAgbg0KMDAwMDQzNjM4OSAwMDAw MCBuDQowMDAwNDM2NDU0IDAwMDAwIG4NCjAwMDA0MzY1MTkgMDAwMDAgbg0KMDAwMDQzNjU4NCAw MDAwMCBuDQowMDAwNDM2NjQ5IDAwMDAwIG4NCjAwMDA0MzY3MTQgMDAwMDAgbg0KMDAwMDQzNjc3 OSAwMDAwMCBuDQowMDAwNDM2ODQ0IDAwMDAwIG4NCjAwMDA0MzY5MDkgMDAwMDAgbg0KMDAwMDQz Njk3NCAwMDAwMCBuDQowMDAwNDM3MDM5IDAwMDAwIG4NCjAwMDA0MzcxMDQgMDAwMDAgbg0KMDAw MDQzNzE2OSAwMDAwMCBuDQowMDAwNDM3MjM0IDAwMDAwIG4NCjAwMDA0MzcyOTkgMDAwMDAgbg0K MDAwMDQzNzM2NCAwMDAwMCBuDQowMDAwNDM3NDI5IDAwMDAwIG4NCjAwMDA0Mzc0OTQgMDAwMDAg bg0KMDAwMDQzNzU1OSAwMDAwMCBuDQowMDAwNDM3NjI0IDAwMDAwIG4NCjAwMDA0Mzc2ODkgMDAw MDAgbg0KMDAwMDQzNzc1NCAwMDAwMCBuDQowMDAwNDM3ODE5IDAwMDAwIG4NCjAwMDA0Mzc4ODQg MDAwMDAgbg0KMDAwMDQzNzk0OSAwMDAwMCBuDQowMDAwNDM4MDE0IDAwMDAwIG4NCjAwMDA0Mzgx NTQgMDAwMDAgbg0KMDAwMDQzODI5NCAwMDAwMCBuDQowMDAwNDM4NDM0IDAwMDAwIG4NCjAwMDA0 Mzg1NzQgMDAwMDAgbg0KMDAwMDQzODcxNCAwMDAwMCBuDQowMDAwNDM4ODU0IDAwMDAwIG4NCjAw MDA0Mzg5OTQgMDAwMDAgbg0KMDAwMDQzOTEzNCAwMDAwMCBuDQowMDAwNDM5Mjc0IDAwMDAwIG4N CjAwMDA0Mzk0MTQgMDAwMDAgbg0KMDAwMDQzOTU1NCAwMDAwMCBuDQowMDAwNDM5Njk0IDAwMDAw IG4NCjAwMDA0Mzk4MzQgMDAwMDAgbg0KMDAwMDQzOTk3NCAwMDAwMCBuDQowMDAwNDQwMTE0IDAw MDAwIG4NCjAwMDA0NDAyNTQgMDAwMDAgbg0KMDAwMDQ0MDM5NCAwMDAwMCBuDQowMDAwNDQwNTM0 IDAwMDAwIG4NCjAwMDA0NDA2NzYgMDAwMDAgbg0KMDAwMDQ0MDgxOCAwMDAwMCBuDQowMDAwNDQw OTYwIDAwMDAwIG4NCjAwMDA0NDExMDIgMDAwMDAgbg0KMDAwMDQ0MTI0NCAwMDAwMCBuDQowMDAw NDQxMzg2IDAwMDAwIG4NCjAwMDA0NDE1MjggMDAwMDAgbg0KMDAwMDQ0MTY3MCAwMDAwMCBuDQow MDAwNDQxODEyIDAwMDAwIG4NCjAwMDA0NDE5NTQgMDAwMDAgbg0KMDAwMDQ0MjA5NiAwMDAwMCBu DQowMDAwNDQyMjQwIDAwMDAwIG4NCjAwMDA0NDIzODIgMDAwMDAgbg0KMDAwMDQ0MjUyNCAwMDAw MCBuDQowMDAwNDQyNjY2IDAwMDAwIG4NCjAwMDA0NDI4MDggMDAwMDAgbg0KMDAwMDQ0Mjk1MCAw MDAwMCBuDQowMDAwNDQzMDkyIDAwMDAwIG4NCjAwMDA0NDMyMzQgMDAwMDAgbg0KMDAwMDQ0MzM3 NiAwMDAwMCBuDQowMDAwNDQzNTE4IDAwMDAwIG4NCjAwMDA0NDM2NjAgMDAwMDAgbg0KMDAwMDQ0 MzgwMiAwMDAwMCBuDQowMDAwNDQzOTQ0IDAwMDAwIG4NCjAwMDA0NDQwODYgMDAwMDAgbg0KMDAw MDQ0NDIyOCAwMDAwMCBuDQowMDAwNDQ0MzcwIDAwMDAwIG4NCjAwMDA0NDQ0NDEgMDAwMDAgbg0K MDAwMDQ0NDUwNSAwMDAwMCBuDQowMDAwNDQ0NTcwIDAwMDAwIG4NCjAwMDA0NDQ2MzUgMDAwMDAg bg0KMDAwMDQ0NDc3OCAwMDAwMCBuDQowMDAwNDQ0OTIxIDAwMDAwIG4NCjAwMDA0NDUwNjQgMDAw MDAgbg0KMDAwMDQ0NTIwNiAwMDAwMCBuDQowMDAwNDQ1MzQ2IDAwMDAwIG4NCjAwMDA0NDU0ODYg MDAwMDAgbg0KMDAwMDQ0NTYxNiAwMDAwMCBuDQowMDAwNDQ1NzE1IDAwMDAwIG4NCjAwMDA0NDU3 NjcgMDAwMDAgbg0KMDAwMDQ0NTgxOSAwMDAwMCBuDQowMDAwNDQ1ODcxIDAwMDAwIG4NCjAwMDA0 NDU5NDAgMDAwMDAgbg0KMDAwMDQ0NjA3MyAwMDAwMCBuDQowMDAwNDQ2MTI1IDAwMDAwIG4NCjAw MDA0NDYxODYgMDAwMDAgbg0KMDAwMDQ0NjIzOCAwMDAwMCBuDQowMDAwNDQ2MzE1IDAwMDAwIG4N CjAwMDA0NDYzOTIgMDAwMDAgbg0KMDAwMDQ0NjQ3NSAwMDAwMCBuDQowMDAwNDQ2NTU0IDAwMDAw IG4NCjAwMDA0NDY2MzMgMDAwMDAgbg0KMDAwMDQ0NjcxNiAwMDAwMCBuDQowMDAwNDQ2ODU2IDAw MDAwIG4NCjAwMDA0NDY5OTYgMDAwMDAgbg0KMDAwMDQ0NzEzNiAwMDAwMCBuDQowMDAwNDQ3Mjc2 IDAwMDAwIG4NCjAwMDA0NDczNTUgMDAwMDAgbg0KMDAwMDQ0NzQ1NCAwMDAwMCBuDQowMDAwNDQ3 NTMzIDAwMDAwIG4NCjAwMDA0NDc2MzIgMDAwMDAgbg0KMDAwMDQ0Nzc3NCAwMDAwMCBuDQowMDAw NDQ3ODQ2IDAwMDAwIG4NCjAwMDA0NDc5MTggMDAwMDAgbg0KMDAwMDQ0Nzk5NCAwMDAwMCBuDQow MDAwNDQ4MDcxIDAwMDAwIG4NCjAwMDA0NDgyMTMgMDAwMDAgbg0KMDAwMDQ0ODM1MyAwMDAwMCBu DQowMDAwNDQ4NDI1IDAwMDAwIG4NCjAwMDA0NDg0OTcgMDAwMDAgbg0KMDAwMDQ0ODU2OSAwMDAw MCBuDQowMDAwNDQ4NjQ3IDAwMDAwIG4NCjAwMDA0NDg3MjUgMDAwMDAgbg0KMDAwMDQ0ODgwMiAw MDAwMCBuDQowMDAwNDQ4OTQ0IDAwMDAwIG4NCjAwMDA0NDkwMjMgMDAwMDAgbg0KMDAwMDQ0OTE2 NiAwMDAwMCBuDQowMDAwNDQ5MjQ1IDAwMDAwIG4NCjAwMDA0NDkzMzcgMDAwMDAgbg0KMDAwMDQ0 OTQ3OCAwMDAwMCBuDQowMDAwNDQ5NjE5IDAwMDAwIG4NCjAwMDA0NDk3MDIgMDAwMDAgbg0KMDAw MDQ0OTg0MyAwMDAwMCBuDQowMDAwNDQ5OTA2IDAwMDAwIG4NCjAwMDA0NDk5ODUgMDAwMDAgbg0K MDAwMDQ1MDA2NCAwMDAwMCBuDQowMDAwNDUwMTYyIDAwMDAwIG4NCjAwMDA0NTAyNTcgMDAwMDAg bg0KMDAwMDQ1MDM1OCAwMDAwMCBuDQowMDAwNDUwNDUzIDAwMDAwIG4NCjAwMDA0NTA1MzIgMDAw MDAgbg0KMDAwMDQ1MDYyMSAwMDAwMCBuDQowMDAwNDUwNzEzIDAwMDAwIG4NCjAwMDA0NTA4MDIg MDAwMDAgbg0KMDAwMDQ1MDk0NCAwMDAwMCBuDQowMDAwNDUxMDg2IDAwMDAwIG4NCjAwMDA0NTEy MjggMDAwMDAgbg0KMDAwMDQ1MTM3MCAwMDAwMCBuDQowMDAwNDUxNTEyIDAwMDAwIG4NCjAwMDA0 NTE2NTQgMDAwMDAgbg0KMDAwMDQ1MTc5NiAwMDAwMCBuDQowMDAwNDUxOTM4IDAwMDAwIG4NCjAw MDA0NTIwODAgMDAwMDAgbg0KMDAwMDQ1MjIyMiAwMDAwMCBuDQowMDAwNDUyMzY0IDAwMDAwIG4N CjAwMDA0NTI0NDIgMDAwMDAgbg0KMDAwMDQ1MjU2MSAwMDAwMCBuDQowMDAwNDUyNjQwIDAwMDAw IG4NCjAwMDA0NTI3ODAgMDAwMDAgbg0KMDAwMDQ1Mjg0NiAwMDAwMCBuDQowMDAwNDUyOTEyIDAw MDAwIG4NCjAwMDA0NTI5NzggMDAwMDAgbg0KMDAwMDQ1MzA0NCAwMDAwMCBuDQowMDAwNDUzMTEw IDAwMDAwIG4NCjAwMDA0NTMxNzYgMDAwMDAgbg0KMDAwMDQ1MzI0MiAwMDAwMCBuDQowMDAwNDUz MzA4IDAwMDAwIG4NCjAwMDA0NTMzNzQgMDAwMDAgbg0KMDAwMDQ1MzQ0MCAwMDAwMCBuDQowMDAw NDUzNTgzIDAwMDAwIG4NCjAwMDA0NTM2MzcgMDAwMDAgbg0KMDAwMDQ1MzY4NyAwMDAwMCBuDQow MDAwNDUzNzU2IDAwMDAwIG4NCjAwMDA0NTM4OTkgMDAwMDAgbg0KMDAwMDQ1Mzk1MyAwMDAwMCBu DQowMDAwNDU0MDAzIDAwMDAwIG4NCjAwMDA0NTQwNzIgMDAwMDAgbg0KMDAwMDQ1NDIxNSAwMDAw MCBuDQowMDAwNDU0MjY5IDAwMDAwIG4NCjAwMDA0NTQzMTkgMDAwMDAgbg0KMDAwMDQ1NDM4OCAw MDAwMCBuDQowMDAwNDU0NTMxIDAwMDAwIG4NCjAwMDA0NTQ1ODUgMDAwMDAgbg0KMDAwMDQ1NDYz NSAwMDAwMCBuDQowMDAwNDU0NzA0IDAwMDAwIG4NCjAwMDA0NTQ4NDcgMDAwMDAgbg0KMDAwMDQ1 NDkwMSAwMDAwMCBuDQowMDAwNDU0OTUxIDAwMDAwIG4NCjAwMDA0NTUwMjAgMDAwMDAgbg0KMDAw MDQ1NTE2MyAwMDAwMCBuDQowMDAwNDU1MjE3IDAwMDAwIG4NCjAwMDA0NTUyNjcgMDAwMDAgbg0K MDAwMDQ1NTMzNiAwMDAwMCBuDQowMDAwNDU1NDc5IDAwMDAwIG4NCjAwMDA0NTU1MzMgMDAwMDAg bg0KMDAwMDQ1NTU4MyAwMDAwMCBuDQowMDAwNDU1NjUyIDAwMDAwIG4NCjAwMDA0NTU3OTUgMDAw MDAgbg0KMDAwMDQ1NTg0OSAwMDAwMCBuDQowMDAwNDU1ODk5IDAwMDAwIG4NCjAwMDA0NTU5Njgg MDAwMDAgbg0KMDAwMDQ1NjExMSAwMDAwMCBuDQowMDAwNDU2MTY0IDAwMDAwIG4NCjAwMDA0NTYy MTQgMDAwMDAgbg0KMDAwMDQ1NjI4MiAwMDAwMCBuDQowMDAwNDU2NDI1IDAwMDAwIG4NCjAwMDA0 NTY0NzggMDAwMDAgbg0KMDAwMDQ1NjUyOCAwMDAwMCBuDQowMDAwNDU2NTk2IDAwMDAwIG4NCjAw MDA0NTY3MzggMDAwMDAgbg0KMDAwMDQ1NjgxNiAwMDAwMCBuDQowMDAwNDU2OTU5IDAwMDAwIG4N CjAwMDA0NTcwNDYgMDAwMDAgbg0KMDAwMDQ1NzE4NiAwMDAwMCBuDQowMDAwNDU3MjU3IDAwMDAw IG4NCjAwMDA0NTczMzUgMDAwMDAgbg0KMDAwMDQ1NzQxMyAwMDAwMCBuDQowMDAwNDU3NTU0IDAw MDAwIG4NCjAwMDA0NTc2OTYgMDAwMDAgbg0KMDAwMDQ1Nzc2OSAwMDAwMCBuDQowMDAwNDU4MTQ3 IDAwMDAwIG4NCjAwMDA0NTg0MDAgMDAwMDAgbg0KMDAwMDQ1ODUwMSAwMDAwMCBuDQowMDAwNDU4 NTUyIDAwMDAwIG4NCjAwMDA0NTg2MTMgMDAwMDAgbg0KMDAwMDQ1ODY2NCAwMDAwMCBuDQowMDAw NDU4NzE2IDAwMDAwIG4NCjAwMDA0NTg3NjggMDAwMDAgbg0KMDAwMDQ1ODgyMCAwMDAwMCBuDQow MDAwNDU4ODcyIDAwMDAwIG4NCjAwMDA0NTg5NTkgMDAwMDAgbg0KMDAwMDQ1OTA0NiAwMDAwMCBu DQowMDAwNDU5MTEyIDAwMDAwIG4NCjAwMDA0NTkxNzggMDAwMDAgbg0KMDAwMDQ1OTI0NCAwMDAw MCBuDQowMDAwNDU5MzEwIDAwMDAwIG4NCjAwMDA0NTkzNzYgMDAwMDAgbg0KMDAwMDQ1OTQ0MiAw MDAwMCBuDQowMDAwNDU5NTg1IDAwMDAwIG4NCjAwMDA0NTk2MzUgMDAwMDAgbg0KMDAwMDQ1OTc3 OCAwMDAwMCBuDQowMDAwNDU5ODI4IDAwMDAwIG4NCjAwMDA0NTk5NzEgMDAwMDAgbg0KMDAwMDQ2 MDAyMSAwMDAwMCBuDQowMDAwNDYwMTY0IDAwMDAwIG4NCjAwMDA0NjAyMTQgMDAwMDAgbg0KMDAw MDQ2MDM1NyAwMDAwMCBuDQowMDAwNDYwNDA3IDAwMDAwIG4NCjAwMDA0NjA1NTAgMDAwMDAgbg0K MDAwMDQ2MDYwMCAwMDAwMCBuDQowMDAwNDYwNjY2IDAwMDAwIG4NCjAwMDA0NjA3MzIgMDAwMDAg bg0KMDAwMDQ2MDc5OCAwMDAwMCBuDQowMDAwNDYwODY0IDAwMDAwIG4NCjAwMDA0NjA5MzAgMDAw MDAgbg0KMDAwMDQ2MDk5NiAwMDAwMCBuDQowMDAwNDYxMTM5IDAwMDAwIG4NCjAwMDA0NjExODkg MDAwMDAgbg0KMDAwMDQ2MTMzMiAwMDAwMCBuDQowMDAwNDYxMzgyIDAwMDAwIG4NCjAwMDA0NjE1 MjUgMDAwMDAgbg0KMDAwMDQ2MTU3NSAwMDAwMCBuDQowMDAwNDYxNzE4IDAwMDAwIG4NCjAwMDA0 NjE3NjggMDAwMDAgbg0KMDAwMDQ2MTkxMSAwMDAwMCBuDQowMDAwNDYxOTYxIDAwMDAwIG4NCjAw MDA0NjIxMDQgMDAwMDAgbg0KMDAwMDQ2MjE1NCAwMDAwMCBuDQowMDAwNDYyMjk0IDAwMDAwIG4N CjAwMDA0NjI0MzQgMDAwMDAgbg0KMDAwMDQ2MjU3NCAwMDAwMCBuDQowMDAwNDYyNjgzIDAwMDAw IG4NCjAwMDA0NjI4MjUgMDAwMDAgbg0KMDAwMDQ2Mjk2NSAwMDAwMCBuDQowMDAwNDYzMTA1IDAw MDAwIG4NCjAwMDA0NjMyNDUgMDAwMDAgbg0KMDAwMDQ2MzM4NSAwMDAwMCBuDQowMDAwNDYzNTI1 IDAwMDAwIG4NCjAwMDA0NjM2NjUgMDAwMDAgbg0KMDAwMDQ2MzgwNSAwMDAwMCBuDQowMDAwNDYz OTQ1IDAwMDAwIG4NCjAwMDA0NjQwODUgMDAwMDAgbg0KMDAwMDQ2NDIyNSAwMDAwMCBuDQowMDAw NDY0MzY1IDAwMDAwIG4NCjAwMDA0NjQ1MDUgMDAwMDAgbg0KMDAwMDQ2NDY0NSAwMDAwMCBuDQow MDAwNDY0Nzg1IDAwMDAwIG4NCjAwMDA0NjQ5MjUgMDAwMDAgbg0KMDAwMDQ2NTA2NSAwMDAwMCBu DQowMDAwNDY1MjA1IDAwMDAwIG4NCjAwMDA0NjUzNDUgMDAwMDAgbg0KMDAwMDQ2NTQ4NSAwMDAw MCBuDQowMDAwNDY1NjI1IDAwMDAwIG4NCjAwMDA0NjU3NjUgMDAwMDAgbg0KMDAwMDQ2NTkwNSAw MDAwMCBuDQowMDAwNDY2MDQ1IDAwMDAwIG4NCjAwMDA0NjYxODUgMDAwMDAgbg0KMDAwMDQ2NjMy NyAwMDAwMCBuDQowMDAwNDY2NDY3IDAwMDAwIG4NCjAwMDA0NjY2MDcgMDAwMDAgbg0KMDAwMDQ2 Njc0NyAwMDAwMCBuDQowMDAwNDY2ODg3IDAwMDAwIG4NCjAwMDA0NjcwMjcgMDAwMDAgbg0KMDAw MDQ2NzE2NyAwMDAwMCBuDQowMDAwNDY3MzA3IDAwMDAwIG4NCjAwMDA0Njc0NDcgMDAwMDAgbg0K MDAwMDQ2NzU4NyAwMDAwMCBuDQowMDAwNDY3NzI3IDAwMDAwIG4NCjAwMDA0Njc4NjcgMDAwMDAg bg0KMDAwMDQ2ODAwNyAwMDAwMCBuDQowMDAwNDY4MTQ3IDAwMDAwIG4NCjAwMDA0NjgyODcgMDAw MDAgbg0KMDAwMDQ2ODQyOSAwMDAwMCBuDQowMDAwNDY4NTY5IDAwMDAwIG4NCjAwMDA0Njg3MDkg MDAwMDAgbg0KMDAwMDQ2ODg0OSAwMDAwMCBuDQowMDAwNDY4OTg5IDAwMDAwIG4NCjAwMDA0Njkx MjkgMDAwMDAgbg0KMDAwMDQ2OTI2OSAwMDAwMCBuDQowMDAwNDY5NDA5IDAwMDAwIG4NCjAwMDA0 Njk1NTEgMDAwMDAgbg0KMDAwMDQ2OTY5MyAwMDAwMCBuDQowMDAwNDY5ODM1IDAwMDAwIG4NCjAw MDA0Njk5NzcgMDAwMDAgbg0KMDAwMDQ3MDExOSAwMDAwMCBuDQowMDAwNDcwMjYxIDAwMDAwIG4N CjAwMDA0NzA0MDcgMDAwMDAgbg0KMDAwMDQ3MDU0OSAwMDAwMCBuDQowMDAwNDcwNjkxIDAwMDAw IG4NCjAwMDA0NzA4MzMgMDAwMDAgbg0KMDAwMDQ3MDk3NSAwMDAwMCBuDQowMDAwNDcxMTE3IDAw MDAwIG4NCjAwMDA0NzEyNTkgMDAwMDAgbg0KMDAwMDQ3MTQwNSAwMDAwMCBuDQowMDAwNDcxNTQ5 IDAwMDAwIG4NCjAwMDA0NzE2OTEgMDAwMDAgbg0KMDAwMDQ3MTgzMyAwMDAwMCBuDQowMDAwNDcx OTczIDAwMDAwIG4NCjAwMDA0NzIxMTUgMDAwMDAgbg0KMDAwMDQ3MjI1NyAwMDAwMCBuDQowMDAw NDcyMzk5IDAwMDAwIG4NCjAwMDA0NzI1NDEgMDAwMDAgbg0KMDAwMDQ3MjY4MyAwMDAwMCBuDQow MDAwNDcyODI1IDAwMDAwIG4NCjAwMDA0NzI5NjcgMDAwMDAgbg0KMDAwMDQ3MzEwOSAwMDAwMCBu DQowMDAwNDczMjUxIDAwMDAwIG4NCjAwMDA0NzMzOTEgMDAwMDAgbg0KMDAwMDQ3MzUzMyAwMDAw MCBuDQowMDAwNDczNjc1IDAwMDAwIG4NCjAwMDA0NzM4MTcgMDAwMDAgbg0KMDAwMDQ3Mzk1OSAw MDAwMCBuDQowMDAwNDc0MTAxIDAwMDAwIG4NCjAwMDA0NzQyNDQgMDAwMDAgbg0KMDAwMDQ3NDM4 NyAwMDAwMCBuDQowMDAwNDc0NTMwIDAwMDAwIG4NCjAwMDA0NzQ2NzIgMDAwMDAgbg0KMDAwMDQ3 NDc4MSAwMDAwMCBuDQowMDAwNDc0ODg4IDAwMDAwIG4NCjAwMDA0NzUwMjggMDAwMDAgbg0KMDAw MDQ3NTE3MCAwMDAwMCBuDQowMDAwNDc1MzEwIDAwMDAwIG4NCjAwMDA0NzUzODUgMDAwMDAgbg0K MDAwMDQ3ODk2NCAwMDAwMCBuDQp0cmFpbGVyDQo8PC9TaXplIDc4OT4+DQpzdGFydHhyZWYNCjEx Ng0KJSVFT0YNCg== ------=_NextPart_000_044C_01C9BE74.A5CC8E60-- From sandeen@sandeen.net Wed Apr 15 23:42:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3G4g7X8044536 for ; Wed, 15 Apr 2009 23:42:17 -0500 X-ASG-Debug-ID: 1239857021-2e1101590000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ED99C1426272 for ; Wed, 15 Apr 2009 21:43:42 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id tXShTf91KdNg19DJ for ; Wed, 15 Apr 2009 21:43:42 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 30003A9B0AF; Wed, 15 Apr 2009 23:41:28 -0500 (CDT) Message-ID: <49E6B6F7.6030500@sandeen.net> Date: Wed, 15 Apr 2009 23:41:27 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: future of xfs, oss.sgi.com after sgi purchased? Subject: Re: future of xfs, oss.sgi.com after sgi purchased? References: <49E65044.8080802@tlinx.org> In-Reply-To: <49E65044.8080802@tlinx.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: 1239857042 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23302 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linda A. Walsh wrote: > Not one to beat about the bush, but curious from a practical sense, > > If sgi is being bought by another company, is there any idea about the plans > for the xfs file system or the source code on 'oss.sgi.com'? > > I'm _guessing_ that there is some interest in users and developers to keep xfs > alive after the 'sgi' moniker is purchased, but that begs the question about the > new company wanting to support the old 'sgi.com' websites including > oss.sgi.com. > > Is there a danger of oss.sgi.com suddenly being yanked offline with little to no > warning, such that community members should start keeping up-to-date, or is it > already mirrored? I'm assuming that the current source code repository only > exists on oss.sgi.com? Should it be mirrored on some other external open-source > site? sourceforge? google? mozilla? While I doubt that oss.sgi.com would abruptly vanish, there are nonetheless already git repos on kernel.org, which are sometimes even ahead of what's on oss.sgi.com ... xfs.org has a lot of content as well. Mailing list archives exist at various other sites. There are also ftp mirrors around, though I think that's less important. > Is completely worthless to discuss new, desired features in some of the utils? > Will it be possible to support the xfs codebase if its development no longer > becomes necessary to sgi (or its parent company)? If you look at commit logs or carefully read the mailing list over the last 6 months or so, I think you'll find that xfs maintenance and development is not wholly dependent on contributions from sgi employees. http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=history;f=fs/xfs;hb=HEAD -Eric From felixb@sgi.com Thu Apr 16 01:08:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3G6878E050625 for ; Thu, 16 Apr 2009 01:08:17 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id AC5748F80C6 for ; Wed, 15 Apr 2009 23:07:51 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id D4CFE700016A; Thu, 16 Apr 2009 01:05:12 -0500 (CDT) Cc: xfs-oss Message-Id: From: Felix Blyakher To: "Linda A. Walsh" In-Reply-To: <49E65044.8080802@tlinx.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: future of xfs, oss.sgi.com after sgi purchased? Date: Thu, 16 Apr 2009 01:05:00 -0500 References: <49E65044.8080802@tlinx.org> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 15, 2009, at 4:23 PM, Linda A. Walsh wrote: > Not one to beat about the bush, but curious from a practical sense, > > If sgi is being bought by another company, is there any idea about > the plans > for the xfs file system or the source code on 'oss.sgi.com'? The rumors of the death of xfs team at SGI are a little bit premature. > I'm _guessing_ that there is some interest in users and developers > to keep xfs alive after the 'sgi' moniker is purchased, but that > begs the question about the new company wanting to support the old > 'sgi.com' websites including > oss.sgi.com. > > Is there a danger of oss.sgi.com suddenly being yanked offline with > little to no warning, I doubt it'll happen in any circumstances. > such that community members should start keeping up-to-date, or is > it already mirrored? I'm assuming that the current source code > repository only exists on oss.sgi.com? There is nothing on oss.sgi.com xfs-wise that is not in Linus' tree. > Should it be mirrored on some other external open-source site? > sourceforge? google? mozilla? With git you don't really need a true mirror. And official clones of both kernel and the userland xfs already exist on kernel.org. > Is completely worthless to discuss new, desired features in some of > the utils? Will it be possible to support the xfs codebase if its > development no longer becomes necessary to sgi (or its parent > company)? I hope that wouldn't happen. Though, while it'll be loss for xfs in this unlikely scenario, I think, there is enough critical mass outside of sgi to continue support and move forward xfs. Felix xfs maintainer, still at sgi From xfs@tlinx.org Thu Apr 16 03:35:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3G8YtAu064742 for ; Thu, 16 Apr 2009 03:35:05 -0500 X-ASG-Debug-ID: 1239870857-0d2b01920000-NocioJ 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 A3A3A21AFC2 for ; Thu, 16 Apr 2009 01:34:17 -0700 (PDT) Received: from ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id AfFp7GZAYdrOHXZM for ; Thu, 16 Apr 2009 01:34: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 n3G8YHen021912 for ; Thu, 16 Apr 2009 01:34:17 -0700 Message-ID: <49E6ED88.5020008@tlinx.org> Date: Thu, 16 Apr 2009 01:34:16 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: future of xfs, oss.sgi.com after sgi purchased? Subject: Re: future of xfs, oss.sgi.com after sgi purchased? References: <49E65044.8080802@tlinx.org> <49E6B6F7.6030500@sandeen.net> In-Reply-To: <49E6B6F7.6030500@sandeen.net> X-Stationery: 0.4.8.14 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: 1239870878 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23316 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Linda A. Walsh wrote: > > If sgi is being bought by another company, is there any idea about the plans > > for the xfs file system or the source code on 'oss.sgi.com'? > > While I doubt that oss.sgi.com would abruptly vanish, there are > nonetheless already git repos on kernel.org, which are sometimes even > ahead of what's on oss.sgi.com ... xfs.org has a lot of content as well. > Mailing list archives exist at various other sites. --- Would hope not -- but have seen companies pull real bonehead maneuvers. I can understand that for kernel work, but what about the xfs utils? (dump/restore et al.) They have had a pretty static feature set from what little I've noticed, but I may just not be getting updates. I don't know if it would be of any benefit, but apparently the sgi xfsdump used to be multi-threaded? (Just as a random example). Thanks for allaying some concerns. Felix Blyakher wrote: >> I'm _guessing_ that there is some interest in users and developers to >> keep xfs alive after the 'sgi' moniker is purchased, but that begs the >> question about the new company wanting to support the old 'sgi.com' >> websites including oss.sgi.com. >> >> Is there a danger of oss.sgi.com suddenly being yanked offline with >> little to no warning, > > I doubt it'll happen in any circumstances. --- There have been precedents at sgi. Other systems from sgi pulled on a policy change: Internal news, external employee web-pages (reality being yanked). All based on some policy or organizational change that gave very little advance warning. > I hope that wouldn't happen. Though, while it'll be loss for xfs > in this unlikely scenario, I think, there is enough critical mass > outside of sgi to continue support and move forward xfs. --- I'd like to think so, but for whatever reason(s), it's seems to be one of the larger (in terms of lines of code) filesystems -- making more difficult to support -- not that those lines aren't there for good use/good features. Just that XFS was well developed when it was being ported too linux. Was no easy task. I'd love to see XFS ported to the Windows environment -- and then give MS some competition for their NT file system. Since Fat32 has more significantly important limitations, Can't always use a FAT32 as a common files system between OS's. And MS isn't exactly open about NTFS. > Felix > xfs maintainer, still at sgi ---- Congrats...on making this far... -l From sandeen@sandeen.net Thu Apr 16 09:55:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_00,HEADER_ESQ autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GEsjRG075983 for ; Thu, 16 Apr 2009 09:54:55 -0500 X-ASG-Debug-ID: 1239893804-616a02e80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2F9891427F3B for ; Thu, 16 Apr 2009 07:56:44 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id fbFpfcnhKQNEEzwK for ; Thu, 16 Apr 2009 07:56:44 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3GEsRbu017169; Thu, 16 Apr 2009 10:54:28 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3GEsQMj016944; Thu, 16 Apr 2009 10:54:26 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3GEsOAF018407; Thu, 16 Apr 2009 10:54:25 -0400 Message-ID: <49E746A0.5020008@sandeen.net> Date: Thu, 16 Apr 2009 09:54:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: future of xfs, oss.sgi.com after sgi purchased? Subject: Re: future of xfs, oss.sgi.com after sgi purchased? References: <49E65044.8080802@tlinx.org> <49E6B6F7.6030500@sandeen.net> <49E6ED88.5020008@tlinx.org> In-Reply-To: <49E6ED88.5020008@tlinx.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239893804 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23341 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linda A. Walsh wrote: > Eric Sandeen wrote: >> Linda A. Walsh wrote: >>> If sgi is being bought by another company, is there any idea about the plans >>> for the xfs file system or the source code on 'oss.sgi.com'? >> While I doubt that oss.sgi.com would abruptly vanish, there are >> nonetheless already git repos on kernel.org, which are sometimes even >> ahead of what's on oss.sgi.com ... xfs.org has a lot of content as well. >> Mailing list archives exist at various other sites. > --- > Would hope not -- but have seen companies pull real bonehead maneuvers. > > I can understand that for kernel work, but what about the xfs utils? Again, just look at the git logs. -Eric From cattelan@thebarn.com Thu Apr 16 10:55:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GFssUx078011 for ; Thu, 16 Apr 2009 10:55:09 -0500 X-ASG-Debug-ID: 1239897257-1ab6016d0000-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 2307D1CC731C for ; Thu, 16 Apr 2009 08:54:17 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id MlWPoLe5eP0rNbxW for ; Thu, 16 Apr 2009 08:54:17 -0700 (PDT) Received: from Russell-Cattelans-MacBook.local (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3GFs8i8099192; Thu, 16 Apr 2009 10:54:16 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <49E754A0.30608@thebarn.com> Date: Thu, 16 Apr 2009 10:54:08 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: future of xfs, oss.sgi.com after sgi purchased? Subject: Re: future of xfs, oss.sgi.com after sgi purchased? References: <49E65044.8080802@tlinx.org> In-Reply-To: <49E65044.8080802@tlinx.org> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1239897278 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23346 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Linda A. Walsh wrote: > Not one to beat about the bush, but curious from a practical sense, > > If sgi is being bought by another company, is there any idea about > the plans > for the xfs file system or the source code on 'oss.sgi.com'? > > I'm _guessing_ that there is some interest in users and developers > to keep xfs alive after the 'sgi' moniker is purchased, but that > begs the question about the new company wanting to support the old > 'sgi.com' websites including > oss.sgi.com. It is probably to soon to actually speculate as to what is going to happen with oss.sgi.com once the sale of SGI happens. But is it probably worth while to understand oss has been primarily a volunteer effort for probably the last 5 years or more. There is nobody at SGI officially responsible for oss, most of the system maintenance is handled by Trevor Hurst (who does work at sgi) and myself (who does not), and the efforts of other external volunteers. The system itself is 2 processor Altix owned and housed by SGI in one of their data centers in Chippewa Falls Wisconsin. The XFS project also has xfs.org, which I also maintain independent of SGI systems and I will continue to do so for as long as XFS is alive and kicking. > > Is there a danger of oss.sgi.com suddenly being yanked offline with > little to no warning, such that community members should start > keeping up-to-date, or is it already mirrored? I'm assuming that > the current source code repository only exists on oss.sgi.com? > Should it be mirrored on some other external open-source site? > sourceforge? google? mozilla? Most things (git, cvs, mail list/archives etc) are being mirrored at xfs.org as a precautionary measure against any sort of outage for quite some time now. I highly doubt there will be any sudden "yanking" of systems. > > Is completely worthless to discuss new, desired features in some of > the utils? Will it be possible to support the xfs codebase if its > development no longer becomes necessary to sgi (or its parent company)? Well that is up to you I suppose, but given the number of external people willing to keep XFS going I suspect you will be able to find more than enough conversation about future development. > > *sigh*, > -linda > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJ51SgNRmM+OaGhBgRAl42AJ9E1KHX90q7rhqWMJBv9rFAImB2agCcCbuQ /0PfKtwNbNeGz3xR7CY5SsU= =5Vv2 -----END PGP SIGNATURE----- From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 11:29:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GGTTGS079278 for ; Thu, 16 Apr 2009 11:29:46 -0500 X-ASG-Debug-ID: 1239899489-1fbf036e0000-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 7F35B142875F for ; Thu, 16 Apr 2009 09:31:29 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id OMG4CcIAt4DasWbR for ; Thu, 16 Apr 2009 09:31:29 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuUSf-0004tO-MK for xfs@oss.sgi.com; Thu, 16 Apr 2009 16:29:13 +0000 Date: Thu, 16 Apr 2009 12:29:13 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfsprogs: set default prefix to /usr Subject: [PATCH] xfsprogs: set default prefix to /usr Message-ID: <20090416162913.GA493@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239899489 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Make sure the installation defaults to /usr like all the other xfs tools. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/configure.in =================================================================== --- xfsprogs-dev.orig/configure.in 2009-04-16 18:27:53.870074796 +0200 +++ xfsprogs-dev/configure.in 2009-04-16 18:27:57.850950773 +0200 @@ -2,6 +2,7 @@ AC_INIT(include/libxfs.h) AC_CONFIG_AUX_DIR([.]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADER(include/platform_defs.h) +AC_PREFIX_DEFAULT(/usr) AC_PROG_LIBTOOL From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 11:34:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GGY9uY079445 for ; Thu, 16 Apr 2009 11:34:24 -0500 X-ASG-Debug-ID: 1239899612-79ab02a40000-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 76BE321CB51 for ; Thu, 16 Apr 2009 09:33:33 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id iOZTbkGnE6OxyINK for ; Thu, 16 Apr 2009 09:33:33 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuUWq-0003qN-Or for xfs@oss.sgi.com; Thu, 16 Apr 2009 16:33:32 +0000 Date: Thu, 16 Apr 2009 12:33:32 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfsprogs: bump version and updates CHANGES Subject: [PATCH] xfsprogs: bump version and updates CHANGES Message-ID: <20090416163332.GA4810@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239899633 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Signed-off-by: Christoph Hellwig Index: xfsprogs/VERSION =================================================================== --- xfsprogs/VERSION 2009-03-24 08:32:06.768852982 +0100 +++ xfsprogs/VERSION 2009-03-24 08:32:11.615853562 +0100 @@ -3,5 +3,5 @@ # PKG_MAJOR=3 PKG_MINOR=0 -PKG_REVISION=0 +PKG_REVISION=1 PKG_BUILD=1 Index: xfsprogs/doc/CHANGES =================================================================== --- xfsprogs/doc/CHANGES 2009-03-24 08:32:14.169852820 +0100 +++ xfsprogs/doc/CHANGES 2009-03-24 08:40:26.653853642 +0100 @@ -1,3 +1,14 @@ +xfsprogs-3.0.1 + - Update the Makepkgs script to generate proper source tarballs. + - New project(5) and projid(5) man pages. + - Fix extent array reallocation in the xfs_io bmap command, + thanks to Tomasz Majkowski. + - Small specfile improvements, thanks to Jan Engelhardt. + - Allow xfs_freeze to freeze non-XFS filesystems. + - Fix the xfs_db bmbta command. + - Fix parallel builds, thanks to Mike Frysinger. + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. + xfsprogs-3.0.0 (4 February 2009) - Various smaller xfs_repair improvements. - Various gettext improvements, thanks to Jakub Bogusz. From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 11:34:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GGYHs7079450 for ; Thu, 16 Apr 2009 11:34:32 -0500 X-ASG-Debug-ID: 1239899641-799402a20000-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 120BF21CB56 for ; Thu, 16 Apr 2009 09:34:01 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id X9dfLxdqWlth9Yuy for ; Thu, 16 Apr 2009 09:34:01 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuUXJ-00041e-NS for xfs@oss.sgi.com; Thu, 16 Apr 2009 16:34:01 +0000 Date: Thu, 16 Apr 2009 12:34:01 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfsdump: bump version and updates CHANGES Subject: [PATCH] xfsdump: bump version and updates CHANGES Message-ID: <20090416163401.GB4810@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239899642 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Signed-off-by: Christoph Hellwig Index: xfsdump-dev/VERSION =================================================================== --- xfsdump-dev.orig/VERSION 2009-03-24 08:42:11.493978789 +0100 +++ xfsdump-dev/VERSION 2009-03-24 08:42:14.581862276 +0100 @@ -3,5 +3,5 @@ # PKG_MAJOR=3 PKG_MINOR=0 -PKG_REVISION=0 +PKG_REVISION=1 PKG_BUILD=1 Index: xfsdump-dev/doc/CHANGES =================================================================== --- xfsdump-dev.orig/doc/CHANGES 2009-03-24 08:42:17.092978894 +0100 +++ xfsdump-dev/doc/CHANGES 2009-03-24 08:43:05.809856251 +0100 @@ -1,3 +1,9 @@ +xfsdump-3.0.1 + - Update the Makepkgs script to generate proper source tarballs. + - Small specfile improvements, thanks to Jan Engelhardt. + - Fix parallel builds, thanks to Mike Frysinger. + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. + xfsdump-3.0.0 (4 February 2009) - Bump major package version number to signify changed dependencies and moved binaries (xfs_fsr and estimate From felixb@sgi.com Thu Apr 16 11:37:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GGbUxE079573 for ; Thu, 16 Apr 2009 11:37:40 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3C7AE30407B for ; Thu, 16 Apr 2009 09:37:15 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id 43AF17000103; Thu, 16 Apr 2009 11:05:47 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090409171412.GB25303@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 2/2] xfs: fix getbmap vs mmap deadlock Date: Thu, 16 Apr 2009 11:05:46 -0500 References: <20090224133902.GC15820@infradead.org> <2B47193B-9486-4500-80C4-E96750BEA54B@sgi.com> <20090409171412.GB25303@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 9, 2009, at 12:14 PM, Christoph Hellwig wrote: > On Mon, Apr 06, 2009 at 07:42:57PM -0500, Felix Blyakher wrote: >> Actually with the patch we either get all requested extents, or none >> if we fail to get memory for them. >> Should we teach the callers to expect ENOMEM and repeat the call >> to xfs_getbmap with smaller number of extents? > > The problem with any of that is that we don't actually get the exact > extent list but always a racy version. Agree, but the alternative is ENOMEM, i.e. no bmap at all. Since the callers of xfs_getbmap are only ioctl's from the user apps, we can move the logic of retrying the call with the smaller number of extents to the app with the understanding that it may not be exact snapshot of the file's extents on a very active file. That would mean that your change in kernel is good as is, but the API for the GETBMAP[X] is changing by allowing ENOMEM returned. We'll need to update the man page, and add ENOMEM handling to xfs_bmap/xfs_io. Felix From sandeen@sandeen.net Thu Apr 16 11:53:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GGraYf080186 for ; Thu, 16 Apr 2009 11:53:46 -0500 X-ASG-Debug-ID: 1239900799-79b8031a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5BE9121CD1E for ; Thu, 16 Apr 2009 09:53:19 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id WPAIRy14Mjm1vDy5 for ; Thu, 16 Apr 2009 09:53:19 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3GGr4id004829; Thu, 16 Apr 2009 12:53:04 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3GGr375001341; Thu, 16 Apr 2009 12:53:03 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3GGr2PA016436; Thu, 16 Apr 2009 12:53:03 -0400 Message-ID: <49E7626E.8040207@sandeen.net> Date: Thu, 16 Apr 2009 11:53:02 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: set default prefix to /usr Subject: Re: [PATCH] xfsprogs: set default prefix to /usr References: <20090416162913.GA493@infradead.org> In-Reply-To: <20090416162913.GA493@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239900800 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23350 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Make sure the installation defaults to /usr like all the other xfs > tools. > > Signed-off-by: Christoph Hellwig > > Index: xfsprogs-dev/configure.in > =================================================================== > --- xfsprogs-dev.orig/configure.in 2009-04-16 18:27:53.870074796 +0200 > +++ xfsprogs-dev/configure.in 2009-04-16 18:27:57.850950773 +0200 > @@ -2,6 +2,7 @@ AC_INIT(include/libxfs.h) > AC_CONFIG_AUX_DIR([.]) > AC_CONFIG_MACRO_DIR([m4]) > AC_CONFIG_HEADER(include/platform_defs.h) > +AC_PREFIX_DEFAULT(/usr) > > AC_PROG_LIBTOOL ACK -Eric From sandeen@sandeen.net Thu Apr 16 12:37:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GHbHSp081826 for ; Thu, 16 Apr 2009 12:37:27 -0500 X-ASG-Debug-ID: 1239903421-422100680000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B4E6B21D05E for ; Thu, 16 Apr 2009 10:37:01 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id YaRuVwNtuq57NkOo for ; Thu, 16 Apr 2009 10:37:01 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3GHaqq3016490; Thu, 16 Apr 2009 13:36:52 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3GHapDr015678; Thu, 16 Apr 2009 13:36:52 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3GHapvI029645; Thu, 16 Apr 2009 13:36:51 -0400 Message-ID: <49E76CB2.2090702@sandeen.net> Date: Thu, 16 Apr 2009 12:36:50 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: bump version and updates CHANGES Subject: Re: [PATCH] xfsprogs: bump version and updates CHANGES References: <20090416163332.GA4810@infradead.org> In-Reply-To: <20090416163332.GA4810@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239903421 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23352 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig ACK, let's get that out there! :) > Index: xfsprogs/VERSION > =================================================================== > --- xfsprogs/VERSION 2009-03-24 08:32:06.768852982 +0100 > +++ xfsprogs/VERSION 2009-03-24 08:32:11.615853562 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsprogs/doc/CHANGES > =================================================================== > --- xfsprogs/doc/CHANGES 2009-03-24 08:32:14.169852820 +0100 > +++ xfsprogs/doc/CHANGES 2009-03-24 08:40:26.653853642 +0100 > @@ -1,3 +1,14 @@ > +xfsprogs-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - New project(5) and projid(5) man pages. > + - Fix extent array reallocation in the xfs_io bmap command, > + thanks to Tomasz Majkowski. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Allow xfs_freeze to freeze non-XFS filesystems. > + - Fix the xfs_db bmbta command. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. > + > xfsprogs-3.0.0 (4 February 2009) > - Various smaller xfs_repair improvements. > - Various gettext improvements, thanks to Jakub Bogusz. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From felixb@sgi.com Thu Apr 16 13:11:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GIAqKB083313 for ; Thu, 16 Apr 2009 13:11:02 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id A906E3040F0 for ; Thu, 16 Apr 2009 11:10:36 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id 9A34570001C8; Thu, 16 Apr 2009 13:10:36 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <1949F5CB-F6F9-4976-8E92-002D8F2A73F2@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090416163401.GB4810@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfsdump: bump version and updates CHANGES Date: Thu, 16 Apr 2009 13:10:35 -0500 References: <20090416163401.GB4810@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 16, 2009, at 11:34 AM, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig Acked-by: Felix Blyakher > > > Index: xfsdump-dev/VERSION > =================================================================== > --- xfsdump-dev.orig/VERSION 2009-03-24 08:42:11.493978789 +0100 > +++ xfsdump-dev/VERSION 2009-03-24 08:42:14.581862276 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsdump-dev/doc/CHANGES > =================================================================== > --- xfsdump-dev.orig/doc/CHANGES 2009-03-24 08:42:17.092978894 +0100 > +++ xfsdump-dev/doc/CHANGES 2009-03-24 08:43:05.809856251 +0100 > @@ -1,3 +1,9 @@ > +xfsdump-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. > + > xfsdump-3.0.0 (4 February 2009) > - Bump major package version number to signify changed > dependencies and moved binaries (xfs_fsr and estimate > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Thu Apr 16 13:21:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GILVf9083845 for ; Thu, 16 Apr 2009 13:21:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 62318AC013 for ; Thu, 16 Apr 2009 11:21:16 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id 5CD837000103; Thu, 16 Apr 2009 13:02:23 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <8025F839-AF9B-43D1-A3C2-335F71C69120@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090416163332.GA4810@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfsprogs: bump version and updates CHANGES Date: Thu, 16 Apr 2009 13:02:22 -0500 References: <20090416163332.GA4810@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 16, 2009, at 11:33 AM, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig Acked-by: Felix Blyakher > > > Index: xfsprogs/VERSION > =================================================================== > --- xfsprogs/VERSION 2009-03-24 08:32:06.768852982 +0100 > +++ xfsprogs/VERSION 2009-03-24 08:32:11.615853562 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsprogs/doc/CHANGES > =================================================================== > --- xfsprogs/doc/CHANGES 2009-03-24 08:32:14.169852820 +0100 > +++ xfsprogs/doc/CHANGES 2009-03-24 08:40:26.653853642 +0100 > @@ -1,3 +1,14 @@ > +xfsprogs-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - New project(5) and projid(5) man pages. > + - Fix extent array reallocation in the xfs_io bmap command, > + thanks to Tomasz Majkowski. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Allow xfs_freeze to freeze non-XFS filesystems. > + - Fix the xfs_db bmbta command. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. > + > xfsprogs-3.0.0 (4 February 2009) > - Various smaller xfs_repair improvements. > - Various gettext improvements, thanks to Jakub Bogusz. > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From xfs@tlinx.org Thu Apr 16 13:37:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GIbZSx084451 for ; Thu, 16 Apr 2009 13:37:45 -0500 X-ASG-Debug-ID: 1239907018-67bc003b0000-NocioJ 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 3BCFE1CC792E for ; Thu, 16 Apr 2009 11:36:58 -0700 (PDT) Received: from ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id asYDNezUQJqeVC4j for ; Thu, 16 Apr 2009 11:36:58 -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 n3GIauPP031817 for ; Thu, 16 Apr 2009 11:36:56 -0700 Message-ID: <49E77ACA.9060301@tlinx.org> Date: Thu, 16 Apr 2009 11:36:58 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: Re: getting changes (fixes or enhancements) to xfs-tools Subject: Re: getting changes (fixes or enhancements) to xfs-tools References: <49E65044.8080802@tlinx.org> <49E6B6F7.6030500@sandeen.net> <49E6ED88.5020008@tlinx.org> <49E746A0.5020008@sandeen.net> In-Reply-To: <49E746A0.5020008@sandeen.net> X-Stationery: 0.4.8.14 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: 1239907039 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23356 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Linda A. Walsh wrote: >> I can understand that for kernel work, but what about the xfs utils? > Again, just look at the git logs. > -Eric ---- I understand you want people to see the work that has gone into the kernel, but telling someone to search through 1327 entries just to find an answer of 'no', seems a bit ...something. FWIW: I copied all 1327 entries to a text file and searched for any string "xfs[a-z]" to search for any comments about utility changes. Only strings found were for the daemons that are run. Now that I've determined that the xfs utils are not in the kernel source tree (I wouldn't have expected them to be), maybe I can more be less indirect and ask: Who is managing the the xfs_utils, Where are they kept and What is the procedure for trying to get changes (fixes or enhancements) to them? (I prefer direct questioning, but too many people, even in the engineering/sw community, find it rude or abrupt, so it's not usually my 1st choice). In other words, does one: (I) suggest new ideas and if the keeper(s) likes them, they are implemented and redistributed? OR (II.1) suggest new ideas and see if keeper(s) approve of 'project' so one can then go and (i) implement the changes in a local version, and then? (a) check them in? OR (b) submit for approval so they can be approved for inclusion (or fixing any found problems) OR (III) just go off and implement the code, then come back and say, hey, here are my changes for this idea, and just expect to be greeted with open arms? ;^/ --- (I hope I got the indentation and syntax correct in that, English syntax isn't always the easiest language to express nested options in...:-)) I'm trying to get clear on process. If they are in the kernel tree, there may be no way for me to get from A->B, othewise, I'm trying to find out where one might have hope of bouncing ideas that might get implemented or that if sufficiently positively received might spure someone to try implementing the changes themselves (and possibly (and possibly get in completely over their head....or not.) :-) thanks! -linda From sandeen@sandeen.net Thu Apr 16 13:44:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GIi1fv084746 for ; Thu, 16 Apr 2009 13:44:11 -0500 X-ASG-Debug-ID: 1239907540-706900a60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2574F1428875 for ; Thu, 16 Apr 2009 11:45:40 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id O1r2o28Iztp6bYXo for ; Thu, 16 Apr 2009 11:45:40 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3GIh5Jw002348; Thu, 16 Apr 2009 14:43:05 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3GIh5ej002045; Thu, 16 Apr 2009 14:43:05 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3GIh42Z013983; Thu, 16 Apr 2009 14:43:04 -0400 Message-ID: <49E77C38.8000906@sandeen.net> Date: Thu, 16 Apr 2009 13:43:04 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsdump: bump version and updates CHANGES Subject: Re: [PATCH] xfsdump: bump version and updates CHANGES References: <20090416163401.GB4810@infradead.org> In-Reply-To: <20090416163401.GB4810@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239907561 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23357 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig ACK to that, too. > Index: xfsdump-dev/VERSION > =================================================================== > --- xfsdump-dev.orig/VERSION 2009-03-24 08:42:11.493978789 +0100 > +++ xfsdump-dev/VERSION 2009-03-24 08:42:14.581862276 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsdump-dev/doc/CHANGES > =================================================================== > --- xfsdump-dev.orig/doc/CHANGES 2009-03-24 08:42:17.092978894 +0100 > +++ xfsdump-dev/doc/CHANGES 2009-03-24 08:43:05.809856251 +0100 > @@ -1,3 +1,9 @@ > +xfsdump-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. > + > xfsdump-3.0.0 (4 February 2009) > - Bump major package version number to signify changed > dependencies and moved binaries (xfs_fsr and estimate > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 14:53:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GJrSJU088203 for ; Thu, 16 Apr 2009 14:53:43 -0500 X-ASG-Debug-ID: 1239911592-328000680000-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 AB7EB1CC83D7 for ; Thu, 16 Apr 2009 12:53:12 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id iA5ejtbewvU6WH9o for ; Thu, 16 Apr 2009 12:53:12 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuXe3-0008Tq-Hf for xfs@oss.sgi.com; Thu, 16 Apr 2009 19:53:11 +0000 Date: Thu, 16 Apr 2009 15:53:11 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfsprogs: add .gitignore file Subject: [PATCH] xfsprogs: add .gitignore file Message-ID: <20090416195311.GA22431@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239911592 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/.gitignore =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfsprogs-dev/.gitignore 2009-04-16 21:50:04.101077123 +0200 @@ -0,0 +1,58 @@ +# object files +*.o + +# build system +.census +Logs/ +include/platform_defs.h +include/builddefs +install-sh + +# magic diretory symlinks +include/disk +include/xfs + +# Makepgs +build/src-manifest +build/xfsprogs-*.tar.gz +doc/CHANGES.gz +xfsprogs-* + +# autoconf generated files +aclocal.m4 +autom4te.cache/ +config.guess +config.log +config.status +config.sub +configure + +# libtool +libtool +ltmain.sh +*.lo +*.la +.libs + +# gettext +po/pl.mo +po/xfsprogs.pot + +# quilt stuff +.pc/ +patches/ + +# binaries +copy/xfs_copy +db/xfs_db +estimate/xfs_estimate +fsr/xfs_fsr +growfs/xfs_growfs +io/xfs_io +logprint/xfs_logprint +mdrestore/xfs_mdrestore +mkfs/fstyp +mkfs/mkfs.xfs +quota/xfs_quota +repair/xfs_repair +rtcp/xfs_rtcp From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 14:57:56 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_65,J_CHICKENPOX_66 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GJvVc2088393 for ; Thu, 16 Apr 2009 14:57:46 -0500 X-ASG-Debug-ID: 1239911971-26b200bd0000-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 B96C71429700 for ; Thu, 16 Apr 2009 12:59:31 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 9W0Macjkz4NHMfPT for ; Thu, 16 Apr 2009 12:59:31 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuXhy-0000Ty-8y; Thu, 16 Apr 2009 19:57:14 +0000 Date: Thu, 16 Apr 2009 15:57:14 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com Cc: Andreas Gruenbacher X-ASG-Orig-Subj: [PATCH] xfsprogs: keep autoconf-generated files over make distclean Subject: [PATCH] xfsprogs: keep autoconf-generated files over make distclean Message-ID: <20090416195713.GB22431@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239911971 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean We do want to ship the autoconf-generated files over make distclean and pick them up in Makepkgs so that a user compiling the program doesn't require autoconf. For that split up make distclean from make realclean and exclude the files we want to keep form the former. To make this easier to maintain adher to stricter rules of use for CONFIGURE and LDIRT. CONFIGURE now includes all generated files from autoconf (or for it like our copied install-sh) and gets only removed on make realclean, but added to LSRCFILES so that Makepkgs can pick it up. Everything else than needs to be removed on a realclean gets assigned to LDIRT. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/Makefile =================================================================== --- xfsprogs-dev.orig/Makefile 2009-04-16 21:33:57.186074648 +0200 +++ xfsprogs-dev/Makefile 2009-04-16 21:37:48.950076935 +0200 @@ -10,13 +10,14 @@ include $(TOPDIR)/include/builddefs endif CONFIGURE = aclocal.m4 configure config.guess config.sub \ + libtool configure install-sh \ + include/builddefs include/platform_defs.h \ ltmain.sh m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 \ - m4/ltversion.m4 m4/lt~obsolete.m4 \ - include/builddefs include/platform_defs.h -LSRCFILES = configure.in Makepkgs install-sh README VERSION $(CONFIGURE) + m4/ltversion.m4 m4/lt~obsolete.m4 +LSRCFILES = configure.in Makepkgs README VERSION $(CONFIGURE) LDIRT = config.log .dep config.status config.cache confdefs.h conftest* \ - Logs/* built .census install.* install-dev.* *.gz + Logs/* built .census install.* install-dev.* *.gz autom4te.cache/* LIB_SUBDIRS = libxfs libxlog libxcmd libhandle libdisk TOOL_SUBDIRS = copy db estimate fsck fsr growfs io logprint mkfs quota \ @@ -96,7 +97,8 @@ install-qa: install $(addsuffix -install %-install-qa: $(MAKE) -C $* install-qa -realclean distclean: clean - rm -f $(LDIRT) $(CONFIGURE) - rm -f include/builddefs include/config.h install-sh libtool - rm -rf autom4te.cache Logs +distclean: clean + rm -f $(LDIRT) + +realclean: distclean + rm -f $(CONFIGURE) From BATV+6eee31ad6c1c9d84e043+2062+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 16 15:15:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GKEvKr089264 for ; Thu, 16 Apr 2009 15:15:12 -0500 X-ASG-Debug-ID: 1239913017-576600250000-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 15328142924E for ; Thu, 16 Apr 2009 13:16:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HKiMp7mpVyAiXjw0 for ; Thu, 16 Apr 2009 13:16:57 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LuXyc-0001pV-Qb; Thu, 16 Apr 2009 20:14:27 +0000 Date: Thu, 16 Apr 2009 16:14:26 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com, linux-kernel@vger.kernel.org X-ASG-Orig-Subj: XFS status update for March 2009 Subject: XFS status update for March 2009 Message-ID: <20090416201426.GA6035@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1239913018 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linux 2.6.29 has been released which includes major XFS updates like the new generic btree code, a fully functional 32bit compat ioctl implementation and the new combined XFS and Linux inode. (See previous status reports for more details). A patch series to improve correctness and performance has been posted but not yet applied. Various minor fixes and cleanups have been sent to Linus for 2.6.30 which looks like it will be a minor release for XFS after the big churn in 2.6.29. On userspace a lot of time has been spent on fixing and improving the build system shared by the various XFS utilities as well as various smaller improvements leading to the xfsprogs and xfsdump 3.0.1 releases which are still outstanding. From sandeen@sandeen.net Thu Apr 16 15:51:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GKpTEn091016 for ; Thu, 16 Apr 2009 15:51:39 -0500 X-ASG-Debug-ID: 1239915187-58ec00a70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6738514294DD for ; Thu, 16 Apr 2009 13:53:07 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id Sr7HmyJd2JCvDCPt for ; Thu, 16 Apr 2009 13:53:07 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3GKoooT006804; Thu, 16 Apr 2009 16:50:50 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3GKonXF002172; Thu, 16 Apr 2009 16:50:49 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3GKomZI026878; Thu, 16 Apr 2009 16:50:49 -0400 Message-ID: <49E79A28.2070302@sandeen.net> Date: Thu, 16 Apr 2009 15:50:48 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: getting changes (fixes or enhancements) to xfs-tools Subject: Re: getting changes (fixes or enhancements) to xfs-tools References: <49E65044.8080802@tlinx.org> <49E6B6F7.6030500@sandeen.net> <49E6ED88.5020008@tlinx.org> <49E746A0.5020008@sandeen.net> <49E77ACA.9060301@tlinx.org> In-Reply-To: <49E77ACA.9060301@tlinx.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239915209 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0126 1.0000 -1.9388 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.94 X-Barracuda-Spam-Status: No, SCORE=-1.94 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23365 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linda A. Walsh wrote: > Eric Sandeen wrote: >> Linda A. Walsh wrote: >>> I can understand that for kernel work, but what about the xfs utils? >> Again, just look at the git logs. >> -Eric > ---- > > I understand you want people to see the work that has gone into the > kernel, but telling someone to search through 1327 entries just to find > an answer of 'no', seems a bit ...something. You originally asked, as far as I understood it, whether xfs can survive if sgi does not. I suggested that you read the list and look at the changelogs, and see how much work is being done on xfs from -outside- sgi, as this may help to answer your question. > FWIW: I copied all 1327 entries to a text file and searched for > any string "xfs[a-z]" to search for any comments about utility changes. > Only strings found were for the daemons that are run. > > Now that I've determined that the xfs utils are not in the kernel > source tree (I wouldn't have expected them to be), maybe I can more > be less indirect and ask: Who is managing the the xfs_utils, Where are > they kept and What is the procedure for trying to get changes (fixes > or enhancements) to them? (I prefer direct questioning, but too many > people, even in the engineering/sw community, find it rude or abrupt, > so it's not usually my 1st choice). Changes happen as they always have; patches are sent to the xfs development mailing list. There are git trees on kernel.org as well as on oss.sgi.com, though I'm not sure the exact details matter too terribly much here. It all ultimately, eventually flows to a tarball on oss.sgi.com. http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/xfs.git;a=summary http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfsprogs.git;a=summary http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfsdump.git;a=summary http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/dmapi.git;a=summary http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs/cmds/xfstests.git;a=summary http://git.kernel.org/?p=fs/xfs/xfs.git;a=summary http://git.kernel.org/?p=fs/xfs/xfsprogs-dev.git;a=summary http://git.kernel.org/?p=fs/xfs/xfsdump-dev.git;a=summary http://git.kernel.org/?p=fs/xfs/dmapi-dev.git;a=summary http://git.kernel.org/?p=fs/xfs/xfstests-dev.git;a=summary ftp://oss.sgi.com/projects/xfs/cmd_tars/ > In other words, does one: > > (I) suggest new ideas and if the keeper(s) likes them, they are > implemented and redistributed? You could try that, though there is always the resource issue. Many people are full of good ideas; fewer people can implement them :) > (II.1) suggest new ideas and see if keeper(s) approve of 'project' so > one can then go and > (i) implement the changes in a local version, and then? > (a) check them in? no, you can't check them in upstream, the maintainers do that ... > OR > (b) submit for approval so they can be approved for > inclusion (or fixing any found problems) yes, send them to the list as has always been done. > (III) just go off and implement the code, then come back and say, hey, > here are my changes for this idea, and just expect to be greeted > with open arms? ;^/ subject to review of course. It'd always be better to float the plan on the list first before you go off and do a bunch of work. > --- > (I hope I got the indentation and syntax correct in that, English > syntax isn't always the easiest language to express nested options > in...:-)) > > I'm trying to get clear on process. If they are in the kernel > tree, there may be no way for me to get from A->B, othewise, I'm > trying to find out where one might have hope of bouncing ideas that > might get implemented or that if sufficiently positively received > might spure someone to try implementing the changes themselves (and > possibly (and possibly get in completely over their head....or not.) Basically, everything starts on the list, and ends in the git trees or tarballs. This will continue to be true even if, for any reason, sgi were to disappear, we'd just have potentially new URLs and fewer resources. -Eric From nscott@aconex.com Thu Apr 16 16:42:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GLfkwF095185 for ; Thu, 16 Apr 2009 16:41:56 -0500 X-ASG-Debug-ID: 1239917460-762001120000-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 64A191429C91 for ; Thu, 16 Apr 2009 14:31:00 -0700 (PDT) Received: from postoffice2.aconex.com (mail.aconex.com [203.89.202.182]) by cuda.sgi.com with ESMTP id u5uyOo5yJlUZTZHX for ; Thu, 16 Apr 2009 14:31:00 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 96A0A750336; Fri, 17 Apr 2009 07:28:42 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.102.1]) by postoffice2.aconex.com with ESMTP id S5zkbDKD3MWzBUz9; Fri, 17 Apr 2009 07:28:42 +1000 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.102.10]) by postoffice.aconex.com (Postfix) with ESMTP id 87D9492C2F5; Fri, 17 Apr 2009 07:28:42 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 9D10D4FDA2; Fri, 17 Apr 2009 07:30:05 +1000 (EST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at gatekeeper.yarra.acx Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id k-Qup7pRnz0K; Fri, 17 Apr 2009 07:30:00 +1000 (EST) Received: from mail-au.aconex.com (mail-au.aconex.com [192.168.102.12]) by gatekeeper.aconex.com (Postfix) with ESMTP id D54274FD99; Fri, 17 Apr 2009 07:30:00 +1000 (EST) Date: Fri, 17 Apr 2009 07:28:37 +1000 (EST) From: Nathan Scott To: "Linda A. Walsh" Cc: xfs-oss Message-ID: <615709150.3493811239917317690.JavaMail.root@mail-au.aconex.com> In-Reply-To: <907831127.3493791239917257256.JavaMail.root@mail-au.aconex.com> X-ASG-Orig-Subj: Re: getting changes (fixes or enhancements) to xfs-tools Subject: Re: getting changes (fixes or enhancements) to xfs-tools MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [210.49.186.156] X-Mailer: Zimbra 5.0.13_GA_2791.RHEL5_64 (ZimbraWebClient - SAF3 (Mac)/5.0.13_GA_2791.RHEL5_64) X-Barracuda-Connect: mail.aconex.com[203.89.202.182] X-Barracuda-Start-Time: 1239917461 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0027 1.0000 -2.0032 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.2, rules version 3.2.1.23367 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean ----- "Linda A. Walsh" wrote: > Eric Sandeen wrote: > > Linda A. Walsh wrote: > >> I can understand that for kernel work, but what about the xfs > utils? > > Again, just look at the git logs. > > -Eric > ---- > > I understand you want people to see the work that has gone into > the > kernel, but telling someone to search through 1327 entries just to > find > an answer of 'no', seems a bit ...something. http://git.kernel.org/ fs/xfs/xfsdump-dev.git fs/xfs/xfsprogs-dev.git fs/xfs/xfstests-dev.git fs/xfs/dmapi-dev.git -- Nathan From felixb@sgi.com Thu Apr 16 17:27:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3GMRbfQ097964 for ; Thu, 16 Apr 2009 17:27:47 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id BC5AC8F8096 for ; Thu, 16 Apr 2009 15:27:21 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id 064A570001D2; Thu, 16 Apr 2009 16:36:04 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <02D38720-DD97-45F9-B742-8EE9628C3A02@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090416195311.GA22431@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfsprogs: add .gitignore file Date: Thu, 16 Apr 2009 16:36:03 -0500 References: <20090416195311.GA22431@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 16, 2009, at 2:53 PM, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig Reviewed-by: Felix Blyakher > > > Index: xfsprogs-dev/.gitignore > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsprogs-dev/.gitignore 2009-04-16 21:50:04.101077123 +0200 > @@ -0,0 +1,58 @@ > +# object files > +*.o > + > +# build system > +.census > +Logs/ > +include/platform_defs.h > +include/builddefs > +install-sh > + > +# magic diretory symlinks > +include/disk > +include/xfs > + > +# Makepgs > +build/src-manifest > +build/xfsprogs-*.tar.gz > +doc/CHANGES.gz > +xfsprogs-* > + > +# autoconf generated files > +aclocal.m4 > +autom4te.cache/ > +config.guess > +config.log > +config.status > +config.sub > +configure > + > +# libtool > +libtool > +ltmain.sh > +*.lo > +*.la > +.libs > + > +# gettext > +po/pl.mo > +po/xfsprogs.pot > + > +# quilt stuff > +.pc/ > +patches/ > + > +# binaries > +copy/xfs_copy > +db/xfs_db > +estimate/xfs_estimate > +fsr/xfs_fsr > +growfs/xfs_growfs > +io/xfs_io > +logprint/xfs_logprint > +mdrestore/xfs_mdrestore > +mkfs/fstyp > +mkfs/mkfs.xfs > +quota/xfs_quota > +repair/xfs_repair > +rtcp/xfs_rtcp > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Fri Apr 17 09:38:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00, DATE_IN_PAST_12_24 autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HEcB6r141516 for ; Fri, 17 Apr 2009 09:38:22 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id A70058F80E7 for ; Fri, 17 Apr 2009 07:37:56 -0700 (PDT) Received: from eagdhcp-232-152.americas.sgi.com (eagdhcp-232-152.americas.sgi.com [128.162.232.152]) by estes.americas.sgi.com (Postfix) with ESMTP id 898567000103; Thu, 16 Apr 2009 16:15:35 -0500 (CDT) Cc: xfs-oss Message-Id: <38A1E278-0C68-4301-A68D-C326E945399B@sgi.com> From: Felix Blyakher To: "Linda A. Walsh" In-Reply-To: <49E77ACA.9060301@tlinx.org> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: getting changes (fixes or enhancements) to xfs-tools Date: Thu, 16 Apr 2009 16:15:35 -0500 References: <49E65044.8080802@tlinx.org> <49E6B6F7.6030500@sandeen.net> <49E6ED88.5020008@tlinx.org> <49E746A0.5020008@sandeen.net> <49E77ACA.9060301@tlinx.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 16, 2009, at 1:36 PM, Linda A. Walsh wrote: > Eric Sandeen wrote: >> Linda A. Walsh wrote: >>> I can understand that for kernel work, but what about the xfs utils? >> Again, just look at the git logs. >> -Eric > ---- > > I understand you want people to see the work that has gone into the > kernel, but telling someone to search through 1327 entries just to > find > an answer of 'no', seems a bit ...something. Eric responded about xfs utilities, which are not in the kernel. > FWIW: I copied all 1327 entries to a text file and searched for > any string "xfs[a-z]" to search for any comments about utility > changes. > Only strings found were for the daemons that are run. Wrong log. > Now that I've determined that the xfs utils are not in the kernel > source tree (I wouldn't have expected them to be), maybe I can more > be less indirect and ask: Who is managing the the xfs_utils, Me, as well as Christoph in a (cloned) kernel.org tree. > Where are > they kept and on oss as tarballs: ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsprogs-3.0.0.tar.gz ftp://oss.sgi.com/projects/xfs/cmd_tars/xfsdump-3.0.0.tar.gz The tarballs release announcement was posted to this list. Or in the git repositories on oss: git://oss.sgi.com/xfs/cmds/xfsprogs.git git://oss.sgi.com/xfs/cmds/xfsdump.git and kernel.org: git://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git git://git.kernel.org/pub/scm/fs/xfs/xfsdump-dev.git > What is the procedure for trying to get changes (fixes > or enhancements) to them? (I prefer direct questioning, but too many > people, even in the engineering/sw community, find it rude or abrupt, > so it's not usually my 1st choice). > > In other words, does one: > > (I) suggest new ideas and if the keeper(s) likes them, they are > implemented and redistributed? You mean implemented by maintainer? Others? Sure, they well may be, but it would depend on priorities. > OR > (II.1) suggest new ideas and see if keeper(s) approve of 'project' so Yes, it prudent to get the nod from others about goodness of the idea before implementing it. > one can then go and > (i) implement the changes in a local version, and then? > (a) check them in? into your local tree ... > > OR > (b) submit for approval so they can be approved for > inclusion (or fixing any found problems) That would be the right way to get it into the tree. See Documentation/SubmittingPatches. The idea applies to patches in the userland as well. Actually, we treat utilities exactly the same way as the kernel xfs. > OR > (III) just go off and implement the code, then come back and say, hey, > here are my changes for this idea, and just expect to be greeted > with open arms? ;^/ That may well be the case. But it also could be just the opposite. So, it's prudent to check the idea first. > --- > (I hope I got the indentation and syntax correct in that, English > syntax isn't always the easiest language to express nested options > in...:-)) > > I'm trying to get clear on process. If they are in the kernel > tree, there may be no way for me to get from A->B, othewise, I'm > trying to find out where one might have hope of bouncing ideas I guess, you're already aware about the xfs mailing list. Post them there. Hope that helps. Felix > that > might get implemented or that if sufficiently positively received > might spure someone to try implementing the changes themselves (and > possibly (and possibly get in completely over their head....or not.) > > :-) > thanks! > -linda > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From stuart.menefy@st.com Fri Apr 17 10:30:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_42 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HFUYAb144758 for ; Fri, 17 Apr 2009 10:30:45 -0500 X-ASG-Debug-ID: 1239982353-650200a90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from eu1sys200aog110.obsmtp.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B436B142D3CC for ; Fri, 17 Apr 2009 08:32:34 -0700 (PDT) Received: from eu1sys200aog110.obsmtp.com (eu1sys200aog110.obsmtp.com [207.126.144.129]) by cuda.sgi.com with ESMTP id DHOeY2FGCXKFB8ZN for ; Fri, 17 Apr 2009 08:32:34 -0700 (PDT) Received: from source ([164.129.1.35]) (using TLSv1) by eu1sys200aob110.postini.com ([207.126.147.11]) with SMTP ID DSNKSeighL5xrtgKIYTodKG7fykssZuNeLci@postini.com; Fri, 17 Apr 2009 15:30:18 UTC Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id A167BDAA5; Fri, 17 Apr 2009 15:29:00 +0000 (GMT) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id E33374C747; Fri, 17 Apr 2009 15:30:10 +0000 (GMT) Received: from adelie.bri.st.com (adelie.bri.st.com [164.129.14.72]) by mail1.bri.st.com (MOS 3.8.7a) with ESMTP id CLP19685 (AUTH stuart); Fri, 17 Apr 2009 16:30:10 +0100 (BST) Message-ID: <49E8A081.7020200@st.com> Date: Fri, 17 Apr 2009 16:30:09 +0100 From: Stuart MENEFY User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: Russell Cattelan Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> In-Reply-To: <49E4DF8C.4050800@thebarn.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: eu1sys200aog110.obsmtp.com[207.126.144.129] X-Barracuda-Start-Time: 1239982359 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0181 1.0000 -1.9036 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.80 X-Barracuda-Spam-Status: No, SCORE=-0.80 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23439 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Thanks for getting back to me. Russell Cattelan wrote: > Stuart MENEFY wrote: >> Folks >> >> For the last few days I've been trying to debug an apparent use >> after free in XFS code. This is in a 2.6.23.17 kernel on an SH4 >> processor, so this could easily be an XFS problem which has already >> been solved, or an architecture problem. This started because I've >> been trying to work around the D-cache aliasing problems which the >> SH4 suffers from because of XFS's use of vmap, so its also possible >> this is an obscure aliasing problem. I've also been unable to >> reproduce it on an x86_64, albeit with a slightly later kernel. >> >> The problem occurs when running a loop which is essentially: mount >> /dev/sda1 /mnt bonnie++ -u root -f -s0 -n16:1024:1024 -b -d /mnt >> umount /mnt on an otherwise clean partition, and usually takes at >> least 24 hours to appear. The problem only occurs with SLAB >> poisoning enabled, and results in a misaligned access because the >> poison value when treated as a pointer is an illegal misaligned: >> >> Unaligned kernel access on behalf of "bonnie++" pid=22419 >> pc=0x841a6c6c ins=0x8433 Pid : 22419, Comm: bonnie++ PC >> is at xfs_trans_unlocked_item+0xc/0x60 PC : 841a6c6c SP : >> 87f29d3c SR : 40008000 TEA : 00402ebe Not tainted R0 : >> 00000000 R1 : 841a6c60 R2 : 87f28000 R3 : 00000001 R4 : >> 6b6b6b6b R5 : 6b6b6b6b R6 : 843342ac R7 : 840139c0 R8 : >> 6b6b6b6b R9 : 6b6b6b6b R10 : 878cb000 R11 : 8452eb8c R12 : >> 00003255 R13 : 00000625 R14 : 87f29d4c MACH: 00000000 MACL: >> 0df75800 GBR : 297f9658 PR : 84189d20 >> >> Call trace: [<84189d20>] xfs_iunlock+0x60/0xc0 [<841915da>] >> xfs_inode_item_push+0x1a/0x40 [<841a6ff4>] >> xfs_trans_push_ail+0x1b4/0x240 [<841971b6>] >> xlog_grant_push_ail+0xf6/0x180 [<8419961c>] >> xfs_log_reserve+0x3c/0xc0 [<841a540a>] xfs_trans_reserve+0x8a/0x220 >> [<8418d6f0>] xfs_itruncate_finish+0x170/0x420 [<841a7de0>] >> xfs_trans_ihold+0x0/0x20 [<841a7de0>] xfs_trans_ihold+0x0/0x20 >> [<841a7e60>] xfs_trans_ijoin+0x0/0xa0 [<841b112a>] >> xfs_inactive+0x3ea/0x500 [<84189da0>] xfs_ilock+0x0/0xe0 >> [<841bf75c>] xfs_fs_clear_inode+0x3c/0xa0 [<843379a0>] >> _spin_unlock+0x0/0x60 [<840818da>] clear_inode+0x5a/0x140 >> [<84081a92>] generic_delete_inode+0xd2/0x120 [<84081bc6>] >> generic_drop_inode+0xe6/0x1c0 [<84080e2e>] iput+0x4e/0x80 >> [<840764ba>] do_unlinkat+0xfa/0x1a0 [<8408fdba>] do_fsync+0x7a/0xe0 >> [<8408fe40>] __do_fsync+0x20/0x60 [<8407656e>] sys_unlink+0xe/0x20 >> [<84076560>] sys_unlink+0x0/0x20 [<840088f8>] syscall_call+0xa/0xe >> >> >> (Note that due to the way backtrace is implemented on SH >> architectures there are spurious values in this backtrace, so it is >> probably safe to ignore any entries of the form FN+0x0.) >> >> The problem is caused by the "xfs_inode_t" which is passed into >> xfs_iunlock() having already been freed at the SLAB level. Putting >> some additional tracing code into the free path, this structure is >> being freed by xfs_inode_item_destroy(), which is called from from >> xfs_idestroy() which is called from xfs_ireclaim(). > > I guess the first question is which thread has actually free'ed the > inode? it sounds like a race > that seems unlikely unless you are on a multi processor system. I > don't know anything about the SH4 architecture > but I assume this is a single processor system? Correct, its a simple, in-order, uni-processor system. > If you can instrument actually free that is causing the problem it > would be good to print out the > actually pid doing the free and as many return addresses that you can, > so we can get an > idea of the actual call chain. The free is coming from the xfssyncd thread, the back trace looks like: [<8418d0e2>] xfs_idestroy+0x22/0x100 [<8418a1b0>] xfs_ireclaim+0x50/0x80 [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 [<8418a780>] xfs_ilock_nowait+0x0/0x160 [<841a9df2>] xfs_syncsub+0x52/0x360 [<84335108>] schedule_timeout+0x48/0x100 [<841ab684>] xfs_sync+0x24/0x40 [<841e0ce0>] list_add+0x0/0x20 [<841c041c>] vfs_sync+0x1c/0x40 [<841bf37c>] vfs_sync_worker+0x1c/0x60 [<841bf6b6>] xfssyncd+0xb6/0x140 [<8402f0dc>] kthread+0x3c/0x80 [<84012440>] complete+0x0/0x60 [<841bf600>] xfssyncd+0x0/0x140 [<8402f060>] kthread_should_stop+0x0/0x20 [<84003984>] kernel_thread_helper+0x4/0x20 [<8402f0a0>] kthread+0x0/0x80 [<84003980>] kernel_thread_helper+0x0/0x20 with the same warning that there are probably some spurious entries here. As before, any suggestions welcome. Stuart From niemayer@isg.de Fri Apr 17 11:10:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HGA3Ul146536 for ; Fri, 17 Apr 2009 11:10:14 -0500 X-ASG-Debug-ID: 1239984587-5bb700df0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.isg.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 323C722164E for ; Fri, 17 Apr 2009 09:09:47 -0700 (PDT) Received: from mail.isg.de (rzfoobar.is-asp.com [217.11.194.155]) by cuda.sgi.com with ESMTP id B7zvDU7vtgH3Rcgv for ; Fri, 17 Apr 2009 09:09:47 -0700 (PDT) Received: from embargo.is-teledata.com (unknown [192.168.5.53]) by mail.isg.de (Postfix) with ESMTP id 04C861AB6062; Fri, 17 Apr 2009 18:09:45 +0200 (CEST) Message-ID: <49E8A9C8.5030705@isg.de> Date: Fri, 17 Apr 2009 18:09:44 +0200 From: Peter Niemayer User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14 MIME-Version: 1.0 To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rzfoobar.is-asp.com[217.11.194.155] X-Barracuda-Start-Time: 1239984588 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4847 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23442 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Update: In a recent forum entry ( http://www.ocztechnologyforum.com/forum/showthread.php?t=54379&page=11 ) Mark Lord (the maintainer of the "hdparm" tool) states that according to his tests the newly added support for discarding sectors works in the Linux "ext4" filesystem. (Support in GFS2 and swap filesystems has already been available before). Isn't that another good reason enable XFS to do that, too? :-) Regards, Peter Niemayer From sandeen@sandeen.net Fri Apr 17 11:53:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HGrBKv148200 for ; Fri, 17 Apr 2009 11:53:22 -0500 X-ASG-Debug-ID: 1239987295-546e00ac0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C32AF142D78E; Fri, 17 Apr 2009 09:54:55 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id mP95lhUUBwxncco8; Fri, 17 Apr 2009 09:54:55 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3HGouGm021126; Fri, 17 Apr 2009 12:50:57 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3HGotR0002983; Fri, 17 Apr 2009 12:50:56 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3HGosbc029809; Fri, 17 Apr 2009 12:50:55 -0400 Message-ID: <49E8B36E.1080508@sandeen.net> Date: Fri, 17 Apr 2009 11:50:54 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Peter Niemayer CC: Felix Blyakher , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> <49E8A9C8.5030705@isg.de> In-Reply-To: <49E8A9C8.5030705@isg.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1239987316 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0974 1.0000 -1.4082 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.41 X-Barracuda-Spam-Status: No, SCORE=-1.41 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23445 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Peter Niemayer wrote: > Update: In a recent forum entry > ( http://www.ocztechnologyforum.com/forum/showthread.php?t=54379&page=11 ) > Mark Lord (the maintainer of the "hdparm" tool) states that according > to his tests the newly added support for discarding sectors works in > the Linux "ext4" filesystem. > (Support in GFS2 and swap filesystems has already been available before). > > Isn't that another good reason enable XFS to do that, too? :-) I don't think anyone disagrees that it's a good idea; it's a question of resources and priorities, is all. -Eric From xfs@tlinx.org Fri Apr 17 14:03:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HJ3vbq151942 for ; Fri, 17 Apr 2009 14:03:57 -0500 X-ASG-Debug-ID: 1239995170-0ecd02340000-NocioJ 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 5ACFE142E0DF for ; Fri, 17 Apr 2009 12:06:10 -0700 (PDT) Received: from ishtar.tlinx.org (ishtar.tlinx.org [64.81.245.74]) by cuda.sgi.com with ESMTP id jLaOF37GMr9r2v7g for ; Fri, 17 Apr 2009 12:06:10 -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 n3HJ3hrK024479; Fri, 17 Apr 2009 12:03:44 -0700 Message-ID: <49E8D28F.9000500@tlinx.org> Date: Fri, 17 Apr 2009 12:03:43 -0700 From: "Linda A. Walsh" User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: Nathan Scott , xfs-oss X-ASG-Orig-Subj: Re: getting changes (fixes or enhancements) to xfs-tools Subject: Re: getting changes (fixes or enhancements) to xfs-tools References: <615709150.3493811239917317690.JavaMail.root@mail-au.aconex.com> In-Reply-To: <615709150.3493811239917317690.JavaMail.root@mail-au.aconex.com> X-Stationery: 0.4.8.14 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: 1239995172 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0075 1.0000 -1.9724 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.97 X-Barracuda-Spam-Status: No, SCORE=-1.97 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23454 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Nathan Scott wrote: >> I understand you want people to see the work that has gone into >> the >> kernel, but telling someone to search through 1327 entries just to >> find >> an answer of 'no', seems a bit ...something. > > http://git.kernel.org/ > fs/xfs/xfsdump-dev.git > fs/xfs/xfsprogs-dev.git > fs/xfs/xfstests-dev.git > fs/xfs/dmapi-dev.git --- Those are files from the actual utilities? I.e. the source code for the utilities is stored in the kernel tree? That the support routines for the utilities have changes doesn't imply that one would expect to find source-changes for the utils there unless the utils are in the kernel tree -- but I don't think so(?) Like the 'util-linux' utils, I have the impression they are stored outside of the kernel tree. No need to answer to tell me the util sources are not stored in the kernel (if that's the case), as that's my current "world view" :-). But if I need to update my current world view (again), I hope you'll _gently_ let me know. :-) linda From felixb@sgi.com Fri Apr 17 16:12:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3HLCrwh155667 for ; Fri, 17 Apr 2009 16:12:53 -0500 Received: from attica.americas.sgi.com (attica.americas.sgi.com [128.162.236.44]) by relay2.corp.sgi.com (Postfix) with ESMTP id D23D23040F7; Fri, 17 Apr 2009 14:12:45 -0700 (PDT) Received: by attica.americas.sgi.com (Postfix, from userid 29043) id 91DF5A8577FF; Fri, 17 Apr 2009 16:12:45 -0500 (CDT) From: Felix Blyakher To: xfs@oss.sgi.com Cc: Felix Blyakher Subject: [PATCH] xfs: add more checks to superblock validation Date: Fri, 17 Apr 2009 16:12:45 -0500 Message-Id: <1240002765-20279-1-git-send-email-felixb@sgi.com> X-Mailer: git-send-email 1.5.4.rc3 X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean From: Olaf Weber There had been reports where xfs filesystem was randomly corrupted with fsfuzzer, and xfs failed to handle it gracefully. This patch fixes couple of reported problem by providing additional checks in the superblock validation routine. Signed-off-by: Felix Blyakher --- fs/xfs/xfs_mount.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index b101990..65a9972 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -291,14 +291,17 @@ xfs_mount_validate_sb( sbp->sb_sectsize > XFS_MAX_SECTORSIZE || sbp->sb_sectlog < XFS_MIN_SECTORSIZE_LOG || sbp->sb_sectlog > XFS_MAX_SECTORSIZE_LOG || + sbp->sb_sectsize != (1 << sbp->sb_sectlog) || sbp->sb_blocksize < XFS_MIN_BLOCKSIZE || sbp->sb_blocksize > XFS_MAX_BLOCKSIZE || sbp->sb_blocklog < XFS_MIN_BLOCKSIZE_LOG || sbp->sb_blocklog > XFS_MAX_BLOCKSIZE_LOG || + sbp->sb_blocksize != (1 << sbp->sb_blocklog) || sbp->sb_inodesize < XFS_DINODE_MIN_SIZE || sbp->sb_inodesize > XFS_DINODE_MAX_SIZE || sbp->sb_inodelog < XFS_DINODE_MIN_LOG || sbp->sb_inodelog > XFS_DINODE_MAX_LOG || + sbp->sb_inodesize != (1 << sbp->sb_inodelog) || (sbp->sb_blocklog - sbp->sb_inodelog != sbp->sb_inopblog) || (sbp->sb_rextsize * sbp->sb_blocksize > XFS_MAX_RTEXTSIZE) || (sbp->sb_rextsize * sbp->sb_blocksize < XFS_MIN_RTEXTSIZE) || -- 1.5.4.rc3 From jeffpc@josefsipek.net Sat Apr 18 00:05:53 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3I55pY4174936 for ; Sat, 18 Apr 2009 00:05:53 -0500 X-ASG-Debug-ID: 1240031288-052303180000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4BE00142F448 for ; Fri, 17 Apr 2009 22:08:08 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id ijItv6Sr0bRYG5DG for ; Fri, 17 Apr 2009 22:08:08 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id F1A821C00DEC; Sat, 18 Apr 2009 01:05:44 -0400 (EDT) Date: Sat, 18 Apr 2009 01:05:44 -0400 From: "Josef 'Jeff' Sipek" To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs: add more checks to superblock validation Subject: Re: [PATCH] xfs: add more checks to superblock validation Message-ID: <20090418050544.GQ3709@josefsipek.net> References: <1240002765-20279-1-git-send-email-felixb@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1240002765-20279-1-git-send-email-felixb@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240031289 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0019 1.0000 -2.0083 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.2, rules version 3.2.1.23493 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Apr 17, 2009 at 04:12:45PM -0500, Felix Blyakher wrote: > From: Olaf Weber > > There had been reports where xfs filesystem was randomly > corrupted with fsfuzzer, and xfs failed to handle it > gracefully. This patch fixes couple of reported problem > by providing additional checks in the superblock > validation routine. > > Signed-off-by: Felix Blyakher Since this patch is from Olaf, shouldn't he have a s-o-b line as well? I'm not really familiar with this part of the code...but it looks fine to me. Josef 'Jeff' Sipek. -- Fact: 29.6% of all statistics are generated randomly. From SRS0+vfhd+43+fromorbit.com=david@internode.on.net Sun Apr 19 03:17:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3J8HDQ1234659 for ; Sun, 19 Apr 2009 03:17:14 -0500 X-ASG-Debug-ID: 1240129175-2ba703520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5A28F142AE64 for ; Sun, 19 Apr 2009 01:19:35 -0700 (PDT) Received: from mail.internode.on.net (bld-mail11.adl2.internode.on.net [203.16.214.75]) by cuda.sgi.com with ESMTP id FgwzMCDxG2DYa8pV for ; Sun, 19 Apr 2009 01:19:35 -0700 (PDT) Received: from discord (unverified [121.44.55.79]) by mail.internode.on.net (SurgeMail 3.8f2) with ESMTP id 49488359-1927428 for multiple; Sun, 19 Apr 2009 17:47:04 +0930 (CST) Received: from dave by discord with local (Exim 4.69) (envelope-from ) id 1LvSD0-0001Nm-Mv; Sun, 19 Apr 2009 18:17:02 +1000 Date: Sun, 19 Apr 2009 18:17:02 +1000 From: Dave Chinner To: Stuart MENEFY Cc: Russell Cattelan , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free Message-ID: <20090419081702.GD16929@discord.disaster> References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> <49E8A081.7020200@st.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49E8A081.7020200@st.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: bld-mail11.adl2.internode.on.net[203.16.214.75] X-Barracuda-Start-Time: 1240129178 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: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23597 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Apr 17, 2009 at 04:30:09PM +0100, Stuart MENEFY wrote: > > If you can instrument actually free that is causing the problem it > > would be good to print out the > > actually pid doing the free and as many return addresses that you can, > > so we can get an > > idea of the actual call chain. > > The free is coming from the xfssyncd thread, the back trace looks like: > > [<8418d0e2>] xfs_idestroy+0x22/0x100 > [<8418a1b0>] xfs_ireclaim+0x50/0x80 > [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 > [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 > [<8418a780>] xfs_ilock_nowait+0x0/0x160 > [<841a9df2>] xfs_syncsub+0x52/0x360 > [<84335108>] schedule_timeout+0x48/0x100 > [<841ab684>] xfs_sync+0x24/0x40 > [<841e0ce0>] list_add+0x0/0x20 > [<841c041c>] vfs_sync+0x1c/0x40 > [<841bf37c>] vfs_sync_worker+0x1c/0x60 > [<841bf6b6>] xfssyncd+0xb6/0x140 > [<8402f0dc>] kthread+0x3c/0x80 > [<84012440>] complete+0x0/0x60 > [<841bf600>] xfssyncd+0x0/0x140 > [<8402f060>] kthread_should_stop+0x0/0x20 > [<84003984>] kernel_thread_helper+0x4/0x20 > [<8402f0a0>] kthread+0x0/0x80 > [<84003980>] kernel_thread_helper+0x0/0x20 There were some use-after-free fixes in .27 timeframe to the inode reclaim code. Can you reeetest with a more recent kernel? Cheers, Dave. -- Dave Chinner dgc@evostor.com From SRS0+i9t1+43+fromorbit.com=david@internode.on.net Sun Apr 19 03:19:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3J8JZek234780 for ; Sun, 19 Apr 2009 03:19:35 -0500 X-ASG-Debug-ID: 1240129319-2b7f03600000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 68E861431808 for ; Sun, 19 Apr 2009 01:21:59 -0700 (PDT) Received: from mail.internode.on.net (bld-mail02.adl2.internode.on.net [203.16.214.66]) by cuda.sgi.com with ESMTP id eqPNCJGD5MTciv6G for ; Sun, 19 Apr 2009 01:21:59 -0700 (PDT) Received: from discord (unverified [121.44.55.79]) by mail.internode.on.net (SurgeMail 3.8f2) with ESMTP id 357752279-1927428 for multiple; Sun, 19 Apr 2009 17:49:28 +0930 (CST) Received: from dave by discord with local (Exim 4.69) (envelope-from ) id 1LvSFL-0001Nw-D9; Sun, 19 Apr 2009 18:19:27 +1000 Date: Sun, 19 Apr 2009 18:19:27 +1000 From: Dave Chinner To: Felix Blyakher Cc: Peter Niemayer , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? Message-ID: <20090419081927.GE16929@discord.disaster> References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: bld-mail02.adl2.internode.on.net[203.16.214.66] X-Barracuda-Start-Time: 1240129320 X-Barracuda-Bayes: INNOCENT GLOBAL 0.1738 1.0000 -0.9686 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.97 X-Barracuda-Spam-Status: No, SCORE=-0.97 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23597 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 14, 2009 at 01:32:35PM -0500, Felix Blyakher wrote: > > On Apr 14, 2009, at 9:44 AM, Peter Niemayer wrote: > >> Dear Felix Blyakher, > > Hi Peter, > >> do you know whether there are plans to support the ATA TRIM command / >> blkdev_issue_discard() call in XFS for Linux anytime soon? > > This topic was indeed brought up in xfs discussions. > Though, we don't have any definite plans on supporting it yet. I did some initial work on tracking extents being freed, but then the TRIM request morphed into a "tell the largest free space around the area just freed" and that is much harder to do than simply to issue a "we just freed this bit" command. Cheers, Dave. -- Dave Chinner dgc@evostor.com From raziebe@gmail.com Sun Apr 19 04:07:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3J97xb0236739 for ; Sun, 19 Apr 2009 04:07:59 -0500 X-ASG-Debug-ID: 1240132072-29e2009a0000-w1Z2WR X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qw-out-1920.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 835811CCFE02 for ; Sun, 19 Apr 2009 02:07:52 -0700 (PDT) Received: from qw-out-1920.google.com (qw-out-1920.google.com [74.125.92.148]) by cuda.sgi.com with ESMTP id TaNTIXtBpthfFMkH for ; Sun, 19 Apr 2009 02:07:52 -0700 (PDT) Received: by qw-out-1920.google.com with SMTP id 4so253379qwk.32 for ; Sun, 19 Apr 2009 02:07:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:from:date:message-id :subject:to:content-type:content-transfer-encoding; bh=lOrDY6sBSUjbBqognc3nbuXMyo1FDH3f3QKo4DQ2GOw=; b=TVe2tN/3CiEKPfqK2jisn/hCO7fzuk2ed9dKd3wEwUVyt0ngMgVdCravIkIIN3YIVE AJijRcYzCS/63QxBdtpgALUWN9Ukkr9OlNqekYx/jYstNQsEFVzDxMTtmaIpjxRmaqO/ APLzQ0Nc9gF7CbbY8YSM1nOZKTIeQstn27eSs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type :content-transfer-encoding; b=qZRaYHaYQn7GLVx3bOz/EEeYDRMHXWtFgffJI687pr+EUtX1GMUVztcXr02z3Eeo7V ruEvOgbsVJunogQiStZwlEW/w8TQNs2cjRaoZPvtrEz7UD3zDf6ARCDTX2dj2a7IM3qo Y8ghHB0431uHh5F7Fr1rrUUvX3GNi/i3Vys+U= MIME-Version: 1.0 Received: by 10.220.72.74 with SMTP id l10mr4531685vcj.71.1240132072168; Sun, 19 Apr 2009 02:07:52 -0700 (PDT) From: Raz Date: Sun, 19 Apr 2009 12:07:37 +0300 Message-ID: <5d96567b0904190207o16e86bedy4583d6aa0dea384@mail.gmail.com> X-ASG-Orig-Subj: what is the status of XFS ? Subject: what is the status of XFS ? To: linux-xfs@oss.sgi.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: qw-out-1920.google.com[74.125.92.148] X-Barracuda-Start-Time: 1240132074 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4747 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23600 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean for the best of my knowledge, SGI was purchased not too long ago. What does it mean for XFS ? thank you raz From felixb@sgi.com Sun Apr 19 10:36:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JFaLQe257818 for ; Sun, 19 Apr 2009 10:36:21 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 1CF9D8F8074 for ; Sun, 19 Apr 2009 08:36:14 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id C42767000103; Sun, 19 Apr 2009 10:36:13 -0500 (CDT) Cc: linux-xfs@oss.sgi.com Message-Id: <2B7D5B9A-6FF6-4A6F-A9E3-C9A3BEE09F7A@sgi.com> From: Felix Blyakher To: Raz In-Reply-To: <5d96567b0904190207o16e86bedy4583d6aa0dea384@mail.gmail.com> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: what is the status of XFS ? Date: Sun, 19 Apr 2009 10:36:11 -0500 References: <5d96567b0904190207o16e86bedy4583d6aa0dea384@mail.gmail.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 19, 2009, at 4:07 AM, Raz wrote: > for the best of my knowledge, SGI was purchased not too long ago. Not quite yet. > What does it mean for XFS ? This had been recently discussed on this mailing list: http://oss.sgi.com/archives/xfs/2009-04/msg00083.html Felix From sandeen@sandeen.net Sun Apr 19 10:51:35 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JFpYbQ258284 for ; Sun, 19 Apr 2009 10:51:34 -0500 X-ASG-Debug-ID: 1240156438-2b5e03470000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E664C1432290 for ; Sun, 19 Apr 2009 08:53:58 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id n2UXMgDt6DmqtewH for ; Sun, 19 Apr 2009 08: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 mail.sandeen.net (Postfix) with ESMTP id 98E2EAC358C; Sun, 19 Apr 2009 10:51:24 -0500 (CDT) Message-ID: <49EB487C.1020205@sandeen.net> Date: Sun, 19 Apr 2009 10:51:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Dave Chinner CC: Felix Blyakher , Peter Niemayer , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> <20090419081927.GE16929@discord.disaster> In-Reply-To: <20090419081927.GE16929@discord.disaster> 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: 1240156440 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23627 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Tue, Apr 14, 2009 at 01:32:35PM -0500, Felix Blyakher wrote: >> On Apr 14, 2009, at 9:44 AM, Peter Niemayer wrote: >> >>> Dear Felix Blyakher, >> Hi Peter, >> >>> do you know whether there are plans to support the ATA TRIM command / >>> blkdev_issue_discard() call in XFS for Linux anytime soon? >> This topic was indeed brought up in xfs discussions. >> Though, we don't have any definite plans on supporting it yet. > > I did some initial work on tracking extents being freed, but then > the TRIM request morphed into a "tell the largest free space around > the area just freed" and that is much harder to do than simply to > issue a "we just freed this bit" command. FWIW, ext[34] is still doing it block by block. At least for SSDs, I think that's fine, isn't it? For think provisioning it might be different. I think (?) the simply block-by-block free is still relevant, no? -Eric From felixb@sgi.com Sun Apr 19 11:39:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JGdTk0260387 for ; Sun, 19 Apr 2009 11:39:30 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 8F430AC005 for ; Sun, 19 Apr 2009 09:39:22 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 23A057000103; Sun, 19 Apr 2009 11:39:22 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <81FBAD0F-AE2A-4780-BC8B-135C4CCE8D3A@sgi.com> From: Felix Blyakher To: "Josef 'Jeff' Sipek" In-Reply-To: <20090418050544.GQ3709@josefsipek.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] xfs: add more checks to superblock validation Date: Sun, 19 Apr 2009 11:39:20 -0500 References: <1240002765-20279-1-git-send-email-felixb@sgi.com> <20090418050544.GQ3709@josefsipek.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 18, 2009, at 12:05 AM, Josef 'Jeff' Sipek wrote: > On Fri, Apr 17, 2009 at 04:12:45PM -0500, Felix Blyakher wrote: >> From: Olaf Weber >> >> There had been reports where xfs filesystem was randomly >> corrupted with fsfuzzer, and xfs failed to handle it >> gracefully. This patch fixes couple of reported problem >> by providing additional checks in the superblock >> validation routine. >> >> Signed-off-by: Felix Blyakher > > Since this patch is from Olaf, shouldn't he have a s-o-b line as well? I was following the guidelines from the SubmittingPatches: The "from" line must be the very first line in the message body, and has the form: From: Original Author The "from" line specifies who will be credited as the author of the patch in the permanent changelog. If the "from" line is missing, then the "From:" line from the email header will be used to determine the patch author in the changelog. So, is "From:" enough here, or "Signed-off-by" is needed as well? Felix > I'm not really familiar with this part of the code...but it looks > fine to > me. > > Josef 'Jeff' Sipek. > > -- > Fact: 29.6% of all statistics are generated randomly. From jeffpc@josefsipek.net Sun Apr 19 13:14:16 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JIEGbY002550 for ; Sun, 19 Apr 2009 13:14:16 -0500 X-ASG-Debug-ID: 1240164850-393c011f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 886DD2253BD for ; Sun, 19 Apr 2009 11:14:10 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id rEvFVXNamoyyf1xv for ; Sun, 19 Apr 2009 11:14:10 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 48F461C00DF2; Sun, 19 Apr 2009 14:14:10 -0400 (EDT) Date: Sun, 19 Apr 2009 14:14:10 -0400 From: "Josef 'Jeff' Sipek" To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs: add more checks to superblock validation Subject: Re: [PATCH] xfs: add more checks to superblock validation Message-ID: <20090419181410.GS3709@josefsipek.net> References: <1240002765-20279-1-git-send-email-felixb@sgi.com> <20090418050544.GQ3709@josefsipek.net> <81FBAD0F-AE2A-4780-BC8B-135C4CCE8D3A@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <81FBAD0F-AE2A-4780-BC8B-135C4CCE8D3A@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240164851 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2960 1.0000 -0.3655 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.37 X-Barracuda-Spam-Status: No, SCORE=-0.37 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23636 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 19, 2009 at 11:39:20AM -0500, Felix Blyakher wrote: > > On Apr 18, 2009, at 12:05 AM, Josef 'Jeff' Sipek wrote: > >> On Fri, Apr 17, 2009 at 04:12:45PM -0500, Felix Blyakher wrote: >>> From: Olaf Weber >>> >>> There had been reports where xfs filesystem was randomly >>> corrupted with fsfuzzer, and xfs failed to handle it >>> gracefully. This patch fixes couple of reported problem >>> by providing additional checks in the superblock >>> validation routine. >>> >>> Signed-off-by: Felix Blyakher >> >> Since this patch is from Olaf, shouldn't he have a s-o-b line as well? > > I was following the guidelines from the SubmittingPatches: > > The "from" line must be the very first line in the message body, > and has the form: > > From: Original Author > > The "from" line specifies who will be credited as the author of the > patch in the permanent changelog. If the "from" line is missing, > then the "From:" line from the email header will be used to determine > the patch author in the changelog. > > > So, is "From:" enough here, or "Signed-off-by" is needed as well? The From line determines author-ship. If this is Olaf's patch, then the From is right. My understanding is that s-o-b is intended as a "I didn't do anything stupid (e.g., incorporate licensed code, etc.) while working on this patch/handling this patch." This makes me believe that the author should include a s-o-b line as well. So, for example, whenever _I_ send a patch that I authored, I have both a >From and a s-o-b. If someone picks it up (e.g., akpm), he'd add his s-o-b, so when he resends it, it'd have my from, my s-o-b, and his s-o-b. As far as I know, other kernel folks do the same. Jeff. -- My public GPG key can be found at http://www.josefsipek.net/gpg/public-0xC7958FFE.txt From sandeen@sandeen.net Sun Apr 19 15:54:48 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JKsloT008673 for ; Sun, 19 Apr 2009 15:54:47 -0500 X-ASG-Debug-ID: 1240174481-48f402710000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 953AC2254B5 for ; Sun, 19 Apr 2009 13:54:41 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Ep9jaEewXVUrsB0P for ; Sun, 19 Apr 2009 13:54:41 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 5AB1CAC358C for ; Sun, 19 Apr 2009 15:54:41 -0500 (CDT) Message-ID: <49EB8F90.20705@sandeen.net> Date: Sun, 19 Apr 2009 15:54:40 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] xfstests: skip dump tests if dump utils not found Subject: [PATCH] xfstests: skip dump tests if dump utils not found 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: 1240174482 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23648 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I was running xfstests on a NAS box which had no xfsdump, and any tests which required xfsdump were failing in not-so-nice ways: > xfsdump not found 038 [failed, exit status 1] - output mismatch (see 038.out.bad) I think using _notrun is a lot better: 038 [not run] xfsdump not found Signed-off-by: Eric Sandeen --- diff --git a/common.dump b/common.dump index 6d2f120..fcc4945 100644 --- a/common.dump +++ b/common.dump @@ -23,9 +23,9 @@ if [ -n "$DEBUGDUMP" ]; then [ -x $here/xfsinvutil ] && echo "Using xfstests' xfsinvutil for debug" fi -[ "$XFSDUMP_PROG" = "" ] && _fatal "xfsdump not found" -[ "$XFSRESTORE_PROG" = "" ] && _fatal "xfsrestore not found" -[ "$XFSINVUTIL_PROG" = "" ] && _fatal "xfsinvutil not found" +[ "$XFSDUMP_PROG" = "" ] && _notrun "xfsdump not found" +[ "$XFSRESTORE_PROG" = "" ] && _notrun "xfsrestore not found" +[ "$XFSINVUTIL_PROG" = "" ] && _notrun "xfsinvutil not found" # status returned for not run tests NOTRUNSTS=2 From klaus.strebel@gmx.net Sun Apr 19 15:55:24 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JKtOlG008705 for ; Sun, 19 Apr 2009 15:55:24 -0500 X-ASG-Debug-ID: 1240174516-48fa02860000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.gmx.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 9FCB62254B7 for ; Sun, 19 Apr 2009 13:55:16 -0700 (PDT) Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by cuda.sgi.com with SMTP id JQWdUquRGqFTPfVQ for ; Sun, 19 Apr 2009 13:55:16 -0700 (PDT) Received: (qmail invoked by alias); 19 Apr 2009 20:55:15 -0000 Received: from p57B2A210.dip0.t-ipconnect.de (EHLO [192.168.1.11]) [87.178.162.16] by mail.gmx.net (mp069) with SMTP; 19 Apr 2009 22:55:15 +0200 X-Authenticated: #2703930 X-Provags-ID: V01U2FsdGVkX19/xmxobjV/kpnOsL6/bx7KNkxD3d9XI37jIwRLwt BL9RRS26DMpHps Message-ID: <49EB8FAF.9060006@gmx.net> Date: Sun, 19 Apr 2009 22:55:11 +0200 From: Klaus Strebel User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 To: "Linda A. Walsh" CC: xfs-oss X-ASG-Orig-Subj: Re: getting changes (fixes or enhancements) to xfs-tools Subject: Re: getting changes (fixes or enhancements) to xfs-tools References: <615709150.3493811239917317690.JavaMail.root@mail-au.aconex.com> <49E8D28F.9000500@tlinx.org> In-Reply-To: <49E8D28F.9000500@tlinx.org> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-FuHaFi: 0.6 X-Barracuda-Connect: mail.gmx.net[213.165.64.20] X-Barracuda-Start-Time: 1240174517 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0125 1.0000 -1.9393 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.94 X-Barracuda-Spam-Status: No, SCORE=-1.94 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23648 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Linda A. Walsh schrieb: > Nathan Scott wrote: >>> I understand you want people to see the work that has gone into >>> the >>> kernel, but telling someone to search through 1327 entries just to >>> find >>> an answer of 'no', seems a bit ...something. >> >> http://git.kernel.org/ >> fs/xfs/xfsdump-dev.git >> fs/xfs/xfsprogs-dev.git >> fs/xfs/xfstests-dev.git >> fs/xfs/dmapi-dev.git > --- > Those are files from the actual utilities? I.e. the > source code for the utilities is stored in the kernel tree? That the > support routines for the utilities have changes doesn't imply that > one would expect to find source-changes for the utils there unless > the utils are in the kernel tree -- but I don't think so(?) Like the > 'util-linux' utils, I have the impression they are stored outside of > the kernel tree. > > No need to answer to tell me the util sources are not stored > in the kernel (if that's the case), as that's my current "world view" > :-). > But if I need to update my current world view (again), I hope you'll > _gently_ let me know. :-) > Hi Linda, your misunderstanding, git.kernel.org is a site where several git repositories are hosted, no the kernel source tree ;-). The fs/xfs/xxx.git is the path of the git-repository of the xfs-tools, i doesn't mean it's in the kernel source in the directory fs/xfs ... Even the sources for ext2 ( 3, 4 ), btrfs, jfs, reiserfs et al. are not part of the Linux source tree, so what made you thinking that? Cheers Klaus From BATV+ce2d782d2ad0c7c04d0e+2065+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 19 16:37:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JLbsLt010729 for ; Sun, 19 Apr 2009 16:37:55 -0500 X-ASG-Debug-ID: 1240177222-3fe602cd0000-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 DEFA314327E3; Sun, 19 Apr 2009 14:40:22 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id IZIpX92NN9Fz05Ta; Sun, 19 Apr 2009 14:40:22 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lvehw-0002f6-U8; Sun, 19 Apr 2009 21:37:48 +0000 Date: Sun, 19 Apr 2009 17:37:48 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs: add more checks to superblock validation Subject: Re: [PATCH] xfs: add more checks to superblock validation Message-ID: <20090419213748.GA10191@infradead.org> References: <1240002765-20279-1-git-send-email-felixb@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1240002765-20279-1-git-send-email-felixb@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240177222 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Fri, Apr 17, 2009 at 04:12:45PM -0500, Felix Blyakher wrote: > From: Olaf Weber > > There had been reports where xfs filesystem was randomly > corrupted with fsfuzzer, and xfs failed to handle it > gracefully. This patch fixes couple of reported problem > by providing additional checks in the superblock > validation routine. Looks good. From BATV+ce2d782d2ad0c7c04d0e+2065+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 19 16:38:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JLcBvE010750 for ; Sun, 19 Apr 2009 16:38:11 -0500 X-ASG-Debug-ID: 1240177085-43f503ac0000-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 EB5881CD0AFA for ; Sun, 19 Apr 2009 14:38:05 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id HiP1LUDcatF3arpE for ; Sun, 19 Apr 2009 14:38:05 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LveiC-0002fO-ST; Sun, 19 Apr 2009 21:38:04 +0000 Date: Sun, 19 Apr 2009 17:38:04 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: skip dump tests if dump utils not found Subject: Re: [PATCH] xfstests: skip dump tests if dump utils not found Message-ID: <20090419213804.GB10191@infradead.org> References: <49EB8F90.20705@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EB8F90.20705@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240177086 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 19, 2009 at 03:54:40PM -0500, Eric Sandeen wrote: > I was running xfstests on a NAS box which had no xfsdump, > and any tests which required xfsdump were failing in not-so-nice > ways: > > > xfsdump not found > 038 [failed, exit status 1] - output mismatch (see 038.out.bad) > > I think using _notrun is a lot better: > > 038 [not run] xfsdump not found > > Signed-off-by: Eric Sandeen Looks good. From jeffpc@josefsipek.net Sun Apr 19 16:43:20 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JLhKCf010921 for ; Sun, 19 Apr 2009 16:43:20 -0500 X-ASG-Debug-ID: 1240177395-443e03c10000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 89DB11CD0C2D for ; Sun, 19 Apr 2009 14:43:15 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id 7R03oQR4nBwU96Ir for ; Sun, 19 Apr 2009 14:43:15 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 415501C00DF2; Sun, 19 Apr 2009 17:43:15 -0400 (EDT) Date: Sun, 19 Apr 2009 17:43:15 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: skip dump tests if dump utils not found Subject: Re: [PATCH] xfstests: skip dump tests if dump utils not found Message-ID: <20090419214315.GT3709@josefsipek.net> References: <49EB8F90.20705@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EB8F90.20705@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240177395 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23650 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 19, 2009 at 03:54:40PM -0500, Eric Sandeen wrote: > I was running xfstests on a NAS box which had no xfsdump, > and any tests which required xfsdump were failing in not-so-nice > ways: > > > xfsdump not found > 038 [failed, exit status 1] - output mismatch (see 038.out.bad) > > I think using _notrun is a lot better: > > 038 [not run] xfsdump not found > > Signed-off-by: Eric Sandeen Sounds good. Josef 'Jeff' Sipek. -- Bad pun of the week: The formula 1 control computer suffered from a race condition From sandeen@sandeen.net Sun Apr 19 16:51:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JLp6ht011215 for ; Sun, 19 Apr 2009 16:51:06 -0500 X-ASG-Debug-ID: 1240178012-7a42004b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A268D14328DC for ; Sun, 19 Apr 2009 14:53:33 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Av3g2YRFPT14FpHQ for ; Sun, 19 Apr 2009 14:53:33 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id F20EAAC358C for ; Sun, 19 Apr 2009 16:50:59 -0500 (CDT) Message-ID: <49EB9CC3.1000305@sandeen.net> Date: Sun, 19 Apr 2009 16:50:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] xfstests: skip fsr tests if xfs_fsr utils not found Subject: [PATCH] xfstests: skip fsr tests if xfs_fsr utils not found References: <49EB8F90.20705@sandeen.net> In-Reply-To: <49EB8F90.20705@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: 1240178013 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23651 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Similar to the xfsdump-related patch; gracefully fail if no xfs_fsr is found. I'll probably send another for the acl & attr userspace, it's actually not always installed on minimal boxes. Signed-off-by: Eric Sandeen --- diff --git a/042 b/042 index 7c2bcac..6628040 100755 --- a/042 +++ b/042 @@ -37,6 +37,8 @@ _supported_os IRIX Linux _require_scratch +[ "$XFS_FSR_PROG" = "" ] && _notrun "xfs_fsr not found" + _cull_files() { perl -e "\$manifest=\"$tmp.manifest\";" -e ' diff --git a/111 b/111 index 060c0bc..3ce4ee1 100755 --- a/111 +++ b/111 @@ -27,6 +27,8 @@ _supported_fs xfs _supported_os Linux _require_scratch +[ "$XFS_FSR_PROG" = "" ] && _notrun "xfs_fsr not found" + # real QA test starts here umount $SCRATCH_DEV 2>/dev/null MKFS_OPTIONS="-bsize=4096" From felixb@sgi.com Sun Apr 19 17:14:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JME6Kb012343 for ; Sun, 19 Apr 2009 17:14:06 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 8FE198F8050 for ; Sun, 19 Apr 2009 15:13:59 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 53A5F7000103; Sun, 19 Apr 2009 17:13:59 -0500 (CDT) Cc: xfs-oss Message-Id: <4A888B06-6722-49B2-BE3D-84F0DB6DA5D6@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <49EB8F90.20705@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] xfstests: skip dump tests if dump utils not found Date: Sun, 19 Apr 2009 17:13:58 -0500 References: <49EB8F90.20705@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 19, 2009, at 3:54 PM, Eric Sandeen wrote: > I was running xfstests on a NAS box which had no xfsdump, > and any tests which required xfsdump were failing in not-so-nice > ways: > >> xfsdump not found > 038 [failed, exit status 1] - output mismatch (see 038.out.bad) > > I think using _notrun is a lot better: > > 038 [not run] xfsdump not found > > Signed-off-by: Eric Sandeen Seems good. Felix From felixb@sgi.com Sun Apr 19 17:14:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3JMEvlZ012393 for ; Sun, 19 Apr 2009 17:14:57 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 59A2130408C for ; Sun, 19 Apr 2009 15:14:50 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 2E1647000103; Sun, 19 Apr 2009 17:14:50 -0500 (CDT) Cc: xfs-oss Message-Id: <0919D52D-307F-4259-B4A6-2A585E2141A5@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <49EB9CC3.1000305@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] xfstests: skip fsr tests if xfs_fsr utils not found Date: Sun, 19 Apr 2009 17:14:49 -0500 References: <49EB8F90.20705@sandeen.net> <49EB9CC3.1000305@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 19, 2009, at 4:50 PM, Eric Sandeen wrote: > Similar to the xfsdump-related patch; gracefully fail > if no xfs_fsr is found. > > I'll probably send another for the acl & attr userspace, > it's actually not always installed on minimal boxes. > > Signed-off-by: Eric Sandeen Looks good. Felix From SRS0+MQ0p+44+fromorbit.com=david@internode.on.net Sun Apr 19 20:02:50 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K12oJ1018367 for ; Sun, 19 Apr 2009 20:02:50 -0500 X-ASG-Debug-ID: 1240189362-51d1036f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.internode.on.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 89F6C1CD0F91; Sun, 19 Apr 2009 18:02:43 -0700 (PDT) Received: from mail.internode.on.net (bld-mail11.adl2.internode.on.net [203.16.214.75]) by cuda.sgi.com with ESMTP id HUCVRyncEJDOIfGn; Sun, 19 Apr 2009 18:02:43 -0700 (PDT) Received: from discord (unverified [121.44.55.79]) by mail.internode.on.net (SurgeMail 3.8f2) with ESMTP id 49545023-1927428 for multiple; Mon, 20 Apr 2009 10:32:38 +0930 (CST) Received: from dave by discord with local (Exim 4.69) (envelope-from ) id 1Lvhu9-0002EW-3W; Mon, 20 Apr 2009 11:02:37 +1000 Date: Mon, 20 Apr 2009 11:02:37 +1000 From: Dave Chinner To: Nikanth Karthikesan Cc: xfs-masters@oss.sgi.com, Christoph Hellwig , Jens Axboe , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [xfs-masters] [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Subject: Re: [xfs-masters] [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Message-ID: <20090420010237.GF16929@discord.disaster> References: <200904151609.30677.knikanth@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200904151609.30677.knikanth@suse.de> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: bld-mail11.adl2.internode.on.net[203.16.214.75] X-Barracuda-Start-Time: 1240189365 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0115 1.0000 -1.9463 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.95 X-Barracuda-Spam-Status: No, SCORE=-1.95 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23664 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 15, 2009 at 04:09:30PM +0530, Nikanth Karthikesan wrote: > Resending as I accidentally missed Jens earlier. > > Jens, can you merge this as well. > > Thanks > Nikanth > > Remove code handling bio_alloc failure with __GFP_WAIT. > GFP_NOIO implies __GFP_WAIT. Not sure that is right. The intent of the code is that if we can't get a large bio immediately, try a smaller one which is more likely to succeed when we are under memory pressure. i.e. we will get IO moving faster than if we waited for a maximally sized biovec to be allocated. IOWs, I don't think __GFP_WAIT is implied by this code, regardless of what GFP_NOIO actually means now. The same code fragment can be found in NILFS, and it uses GFP_NOWAIT, not GFP_NOIO. I suspect that this is what this XFS code should be changed to use to retain the original intent of the code.... Cheers, Dave. -- Dave Chinner dgc@evostor.com From sandeen@sandeen.net Sun Apr 19 21:34:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K2YViH021160 for ; Sun, 19 Apr 2009 21:34:31 -0500 X-ASG-Debug-ID: 1240195019-1f7901fb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 725081432FBB for ; Sun, 19 Apr 2009 19:36:59 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 9WEfuR23OGx7C6pY for ; Sun, 19 Apr 2009 19:36:59 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 784D5A9ABC2 for ; Sun, 19 Apr 2009 21:34:24 -0500 (CDT) Message-ID: <49EBDF30.90702@sandeen.net> Date: Sun, 19 Apr 2009 21:34:24 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH, RFC] put xfs build features into the stats file Subject: [PATCH, RFC] put xfs build features into the stats file 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: 1240195020 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23671 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Running xfstests on an xfs build w/o xattrs enabled, I realized there's no reliable way to see if the running xfs has various features other than debug (which is shown in /proc/fs/xfs/stat) What do folks think of adding the BUILD_OPTIONS to this file as well? # cat /proc/fs/xfs/stat extent_alloc 0 0 0 0 ... xpc 0 0 0 debug 0 features security attributes, large block numbers, no debug Signed-off-by: Eric Sandeen --- Index: linux-2.6/fs/xfs/linux-2.6/xfs_stats.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_stats.c +++ linux-2.6/fs/xfs/linux-2.6/xfs_stats.c @@ -89,6 +89,8 @@ xfs_read_xfsstats( 0); #endif + len += sprintf(buffer + len, "features " XFS_BUILD_OPTIONS "\n"); + if (offset >= len) { *start = buffer; *eof = 1; From nscott@aconex.com Sun Apr 19 21:59:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K2xc8N022255 for ; Sun, 19 Apr 2009 21:59:39 -0500 X-ASG-Debug-ID: 1240196527-1f7502a90000-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 846E3143322D for ; Sun, 19 Apr 2009 20:02:07 -0700 (PDT) Received: from postoffice2.aconex.com (mail.aconex.com [203.89.202.182]) by cuda.sgi.com with ESMTP id xdVw5WfIWKBCpecv for ; Sun, 19 Apr 2009 20:02:07 -0700 (PDT) Received: from postoffice.aconex.com (localhost [127.0.0.1]) by postoffice2.aconex.com (Spam Firewall) with ESMTP id 667D84A98B1; Mon, 20 Apr 2009 12:59:32 +1000 (EST) Received: from postoffice.aconex.com (postoffice.yarra.acx [192.168.102.1]) by postoffice2.aconex.com with ESMTP id f4AkHmkpxoRsbPck; Mon, 20 Apr 2009 12:59:32 +1000 (EST) Received: from gatekeeper.aconex.com (gatekeeper.yarra.acx [192.168.102.10]) by postoffice.aconex.com (Postfix) with ESMTP id 42B1692C309; Mon, 20 Apr 2009 12:59:32 +1000 (EST) Received: from localhost (localhost.localdomain [127.0.0.1]) by gatekeeper.aconex.com (Postfix) with ESMTP id 1B1E84FDA1; Mon, 20 Apr 2009 13:01:21 +1000 (EST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at gatekeeper.yarra.acx Received: from gatekeeper.aconex.com ([127.0.0.1]) by localhost (gatekeeper.aconex.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rAExL0wCszlF; Mon, 20 Apr 2009 13:01:17 +1000 (EST) Received: from mail-au.aconex.com (mail-au.aconex.com [192.168.102.12]) by gatekeeper.aconex.com (Postfix) with ESMTP id 1990C4FD99; Mon, 20 Apr 2009 13:01:17 +1000 (EST) Date: Mon, 20 Apr 2009 12:59:28 +1000 (EST) From: Nathan Scott To: Eric Sandeen Cc: xfs-oss Message-ID: <1520890652.3597921240196368192.JavaMail.root@mail-au.aconex.com> In-Reply-To: <49EBDF30.90702@sandeen.net> X-ASG-Orig-Subj: Re: [PATCH, RFC] put xfs build features into the stats file Subject: Re: [PATCH, RFC] put xfs build features into the stats file MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [203.89.192.141] X-Mailer: Zimbra 5.0.13_GA_2791.RHEL5_64 (ZimbraWebClient - [unknown] (Linux)/5.0.13_GA_2791.RHEL5_64) X-Barracuda-Connect: mail.aconex.com[203.89.202.182] X-Barracuda-Start-Time: 1240196528 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23671 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Status: Clean Separate file? That line uses a comma separator ... differs to every other line in that stats file, painful for parsers. And no risk of breaking anything if its a separate file. cheers. ----- "Eric Sandeen" wrote: > Running xfstests on an xfs build w/o xattrs enabled, I realized > there's no reliable way to see if the running xfs has various > features other than debug (which is shown in /proc/fs/xfs/stat) > > What do folks think of adding the BUILD_OPTIONS to this file > as well? > > # cat /proc/fs/xfs/stat > extent_alloc 0 0 0 0 > ... > xpc 0 0 0 > debug 0 > features security attributes, large block numbers, no debug > > Signed-off-by: Eric Sandeen > --- > > Index: linux-2.6/fs/xfs/linux-2.6/xfs_stats.c > =================================================================== > --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_stats.c > +++ linux-2.6/fs/xfs/linux-2.6/xfs_stats.c > @@ -89,6 +89,8 @@ xfs_read_xfsstats( > 0); > #endif > > + len += sprintf(buffer + len, "features " XFS_BUILD_OPTIONS "\n"); > + > if (offset >= len) { > *start = buffer; > *eof = 1; > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -- Nathan From sandeen@sandeen.net Sun Apr 19 22:01:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K314ds022364 for ; Sun, 19 Apr 2009 22:01:04 -0500 X-ASG-Debug-ID: 1240196459-383e02820000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2F71D1CD1182 for ; Sun, 19 Apr 2009 20:00:59 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id CTTldFx7CWDGn0a0 for ; Sun, 19 Apr 2009 20:00:59 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 7FD77A9BF2B; Sun, 19 Apr 2009 22:00:59 -0500 (CDT) Message-ID: <49EBE56A.1070906@sandeen.net> Date: Sun, 19 Apr 2009 22:00:58 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Nathan Scott CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] put xfs build features into the stats file Subject: Re: [PATCH, RFC] put xfs build features into the stats file References: <1520890652.3597921240196368192.JavaMail.root@mail-au.aconex.com> In-Reply-To: <1520890652.3597921240196368192.JavaMail.root@mail-au.aconex.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: sandeen.net[209.173.210.139] X-Barracuda-Start-Time: 1240196460 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23672 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Nathan Scott wrote: > Separate file? That line uses a comma separator ... differs to > every other line in that stats file, painful for parsers. And > no risk of breaking anything if its a separate file. > > cheers. Hm good point. Might do; not that big a deal, just wanted to be able to gracefully skip acl/attr xfstests if the xfs build didn't support it :) -Eric From SEMA-CR-1-47ERCL@ptcmarketing.com Mon Apr 20 01:34:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.6 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K6YqJo034331 for ; Mon, 20 Apr 2009 01:34:54 -0500 X-ASG-Debug-ID: 1240209287-180300d00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 597EE1CD175D for ; Sun, 19 Apr 2009 23:34:47 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id CN0RLPd3FAHrzIHE for ; Sun, 19 Apr 2009 23:34:47 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.40,215,1238990400"; d="scan'208,217";a="296814739" Received: from unknown (HELO HQCRMINT1.ptcnet.ptc.com) ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 20 Apr 2009 02:33:40 -0400 Date: Mon, 20 Apr 2009 02:30:04 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: Are you wasting valuable design time preparing CAD data for documentation? Subject: Are you wasting valuable design time preparing CAD data for documentation? Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1240209020907_277493686 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1240209288 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1240209020907_277493686 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Learn how to save time and lighten your workload to meet deadlines with Arbo= rtext IsoDraw for technical illustration. This must-have tool gives illustra= tors the ability to quickly and easily create complex, technical illustratio= ns directly from your CAD models. Even better, these illustrations can be as= sociative, enabling them to automatically update whenever a CAD design change occurs. See for yourself how much time Arbortext IsoDraw can save in this flash demo= ! Learn how Arbortext IsoDraw can: (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-473IUT= &o=3D= 1-477NF9= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D85449)=20 * Eliminate the need to use engineers to prepare CAD data for documentatio= n * Link technical publications, marketing requirements, and catalogs direct= ly to MCAD data * Automatically update illustrations whenever the original CAD designs cha= nge Many manufacturing companies around the world are successfully using Arborte= xt IsoDraw to quickly and easily create technical illustrations =E2=80=93 sa= ving time for engineers and illustrators and drastically reducing the time t= o market for their products. Click here to access the flash demo. (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-473IUT= &o=3D= 1-477NF9= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D85449) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-477NF9= &campd=3D= 1-473IUT= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-477NF9= &campd=3D= 1-473IUT= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= . --BF_1240209020907_277493686 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Jigsaw Email Promo IsoDraw Intro Flash Demo NA FY09
3D"PTC.com"
3D"

Learn how to save time and lighten your workload to meet deadlines with Arbo= rtext IsoDraw for technical illustration. This must-have tool gives illustra= tors the ability to quickly and easily create complex, technical illustratio= ns directly from your CAD models. Even better, these illustrations can be as= sociative, enabling them to automatically update whenever a CAD design chang= e occurs.=20

See for yoursel= f how much time Arbortext IsoDraw can save in this flash demo! Learn how= Arbortext IsoDraw can:

  • Eliminate the need to use engineers to prepare CAD data for documentati= on
  • Link technical publications, marketing requirements, and catalogs direc= tly to MCAD data
  • Automatically update illustrations whenever the original CAD designs ch= ange

Many manufacturing companies around the world are successfully using Arbo= rtext IsoDraw to quickly and easily create technical illustrations – s= aving time for engineers and illustrators and drastically reducing the time = to market for their products.

Click here to a= ccess the flash demo

3D""
contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1240209020907_277493686-- From a.beregalov@gmail.com Mon Apr 20 02:42:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K7gUGm038745 for ; Mon, 20 Apr 2009 02:42:31 -0500 X-ASG-Debug-ID: 1240213345-66a501310000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail-gx0-f167.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 798EC22631C for ; Mon, 20 Apr 2009 00:42:25 -0700 (PDT) Received: from mail-gx0-f167.google.com (mail-gx0-f167.google.com [209.85.217.167]) by cuda.sgi.com with ESMTP id FQ6F8JK4WoWmZ9TL for ; Mon, 20 Apr 2009 00:42:25 -0700 (PDT) Received: by gxk11 with SMTP id 11so2260523gxk.20 for ; Mon, 20 Apr 2009 00:42:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=C0iAL/4Rh6K/lRkgh0ny0WYvnV5fS8S/XopMBn6hFW8=; b=M+ZIIg0uHK5RdFVYSyuWgcHgtbM9ayWbM3TO5+Fry3xSUyo+Thp3z7/Af88Dl6DVzu imZm6m3qvuSdBCMI1/NRY11W8WzR3twWnnXbwzjNZREKuejyMLQ18TIywycEXj4c/UQs IFYPOneLJ5pN8s98GQDjxqhy5ytpE6JVJPaKo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=hGkoL+4jDHtmh+DA7fZSjRf/qK+HvzrNoz17xUBzE+/VO3uWERWv3b0orKbdDLd7NI Rk5YDd8EBNEKKHi/r+QWR5qNMfOoetZ9GVkmOAjx0iwK60Cct4YAj0A6NPrFFwKaRvpz OdXdHtugx/k/PDhQP8zZTWhUPAwFNQpq5/pt4= MIME-Version: 1.0 Received: by 10.150.52.2 with SMTP id z2mr747750ybz.45.1240213345348; Mon, 20 Apr 2009 00:42:25 -0700 (PDT) In-Reply-To: References: Date: Mon, 20 Apr 2009 11:42:25 +0400 Message-ID: X-ASG-Orig-Subj: Re: 2.6.30-rc2: BUG: MAX_LOCKDEP_ENTRIES too low! when mounting rootfs Subject: Re: 2.6.30-rc2: BUG: MAX_LOCKDEP_ENTRIES too low! when mounting rootfs From: Alexander Beregalov To: LKML , Kernel Testers List , Ingo Molnar , Alexander Viro , linux-fsdevel@vger.kernel.org, Peter Zijlstra , xfs@oss.sgi.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Barracuda-Connect: mail-gx0-f167.google.com[209.85.217.167] X-Barracuda-Start-Time: 1240213346 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23690 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean 2009/4/15 Alexander Beregalov : > Hi > > bnx2: eth0 NIC Copper Link is Up, 1000 Mbps full duplex, receive & > transmit flow control ON > BUG: MAX_LOCKDEP_ENTRIES too low! > turning off the locking correctness validator. > Pid: 2382, comm: mount Tainted: G =C2=A0 =C2=A0 =C2=A0 =C2=A0W =C2=A02.6.= 30-rc2-dirty #121 > Call Trace: > =C2=A0[] add_lock_to_list+0xf7/0x110 > =C2=A0[] ? check_irq_usage+0xb1/0x110 > =C2=A0[] ? lock_super+0x3c/0x60 > =C2=A0[] __lock_acquire+0xe80/0x12b0 > =C2=A0[] ? lock_super+0x3c/0x60 > =C2=A0[] lock_acquire+0xa0/0xe0 > =C2=A0[] ? lock_super+0x3c/0x60 > =C2=A0[] ? usbfs_fill_super+0x0/0xe0 > =C2=A0[] __mutex_lock_common+0x68/0x500 > =C2=A0[] ? lock_super+0x3c/0x60 > =C2=A0[] ? lock_super+0x3c/0x60 > =C2=A0[] ? usbfs_fill_super+0x0/0xe0 > =C2=A0[] mutex_lock_nested+0x48/0x70 > =C2=A0[] lock_super+0x3c/0x60 > =C2=A0[] __fsync_super+0x2a/0xa0 > =C2=A0[] fsync_super+0x20/0x50 > =C2=A0[] ? shrink_dcache_sb+0x20/0x40 > =C2=A0[] do_remount_sb+0x4c/0x250 > =C2=A0[] get_sb_single+0x75/0x100 > =C2=A0[] usb_get_sb+0x29/0x50 > =C2=A0[] vfs_kern_mount+0x67/0xf0 > =C2=A0[] ? get_fs_type+0x4d/0xf0 > =C2=A0[] do_kern_mount+0x5d/0x130 > =C2=A0[] do_mount+0x2e8/0x930 > =C2=A0[] ? __get_free_pages+0x2e/0x80 > =C2=A0[] sys_mount+0xe0/0x120 > =C2=A0[] system_call_fastpath+0x16/0x1b Another one with XFS BUG: MAX_LOCKDEP_ENTRIES too low! turning off the locking correctness validator. Pid: 1717, comm: mv Tainted: G W 2.6.30-rc2-00429-gd91dfbb-dirty #3= 8 Call Trace: [] add_lock_to_list+0xf7/0x110 [] ? check_irq_usage+0xb1/0x110 [] ? xfs_mod_incore_sb_batch+0x42/0x180 [] __lock_acquire+0xe60/0x1290 [] ? debug_check_no_obj_freed+0xae/0x210 [] ? __lock_acquire+0x2d7/0x1290 [] ? xfs_mod_incore_sb_batch+0x42/0x180 [] lock_acquire+0xa0/0xe0 [] ? xfs_mod_incore_sb_batch+0x42/0x180 [] ? debug_check_no_obj_freed+0x19c/0x210 [] _spin_lock+0x4b/0xa0 [] ? xfs_mod_incore_sb_batch+0x42/0x180 [] ? trace_hardirqs_off+0x20/0x40 [] xfs_mod_incore_sb_batch+0x42/0x180 [] xfs_trans_unreserve_and_mod_sb+0x260/0x310 [] ? trace_hardirqs_on+0x20/0x40 [] ? xfs_log_ticket_put+0x57/0x80 [] ? xfs_log_ticket_put+0x57/0x80 [] ? xfs_log_done+0x89/0xf0 [] _xfs_trans_commit+0x229/0x450 [] xfs_rename+0x563/0x7c0 [] ? trace_hardirqs_on_caller+0x18d/0x1f0 [] ? vfs_rename+0x14e/0x410 [] xfs_vn_rename+0x74/0xa0 [] vfs_rename+0x1b8/0x410 [] ? _spin_unlock+0x3f/0x80 [] sys_renameat+0x23b/0x280 [] ? _spin_unlock_irqrestore+0x55/0xb0 [] ? __up_read+0x90/0xd0 [] ? retint_swapgs+0xe/0x13 [] ? trace_hardirqs_on_caller+0x18d/0x1f0 [] sys_rename+0x29/0x50 [] system_call_fastpath+0x16/0x1b From knikanth@suse.de Mon Apr 20 03:35:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3K8ZsXi043079 for ; Mon, 20 Apr 2009 03:35:55 -0500 X-ASG-Debug-ID: 1240215957-66b002d20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx1.suse.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C8F1A2264F6; Mon, 20 Apr 2009 01:25:58 -0700 (PDT) Received: from mx1.suse.de (cantor.suse.de [195.135.220.2]) by cuda.sgi.com with ESMTP id S5aRFJST2as1X65K; Mon, 20 Apr 2009 01:25:58 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation Received: from Relay2.suse.de (mail2.suse.de [195.135.221.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.suse.de (Postfix) with ESMTP id B385793717; Mon, 20 Apr 2009 10:25:54 +0200 (CEST) From: Nikanth Karthikesan Organization: suse.de To: Dave Chinner X-ASG-Orig-Subj: Re: [xfs-masters] [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Subject: Re: [xfs-masters] [RESEND][PATCH 6/7] xfs: Remove code handling bio_alloc failure with __GFP_WAIT Date: Mon, 20 Apr 2009 13:53:35 +0530 User-Agent: KMail/1.11.1 (Linux/2.6.27.21-0.1-default; KDE/4.2.1; x86_64; ; ) Cc: xfs-masters@oss.sgi.com, Christoph Hellwig , Jens Axboe , xfs@oss.sgi.com References: <200904151609.30677.knikanth@suse.de> <20090420010237.GF16929@discord.disaster> In-Reply-To: <20090420010237.GF16929@discord.disaster> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904201353.35858.knikanth@suse.de> X-Barracuda-Connect: cantor.suse.de[195.135.220.2] X-Barracuda-Start-Time: 1240215958 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Monday 20 April 2009 06:32:37 Dave Chinner wrote: > On Wed, Apr 15, 2009 at 04:09:30PM +0530, Nikanth Karthikesan wrote: > > Resending as I accidentally missed Jens earlier. > > > > Jens, can you merge this as well. > > > > Thanks > > Nikanth > > > > Remove code handling bio_alloc failure with __GFP_WAIT. > > GFP_NOIO implies __GFP_WAIT. > > Not sure that is right. The intent of the code is that if we can't > get a large bio immediately, try a smaller one which is more likely > to succeed when we are under memory pressure. i.e. we will get IO > moving faster than if we waited for a maximally sized biovec to be > allocated. > > IOWs, I don't think __GFP_WAIT is implied by this code, regardless > of what GFP_NOIO actually means now. The same code fragment can be > found in NILFS, and it uses GFP_NOWAIT, not GFP_NOIO. I suspect that > this is what this XFS code should be changed to use to retain the > original intent of the code.... > Yes, if that is the intent, it needs to be changed as GFP_NOWAIT. Otherwise the first attempt to get a larger bio itself would return only after it succeeds, which makes the logic useless. Thanks Nikanth From Martin@lichtvoll.de Mon Apr 20 08:24:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3KDOu0O064938 for ; Mon, 20 Apr 2009 08:24:56 -0500 X-ASG-Debug-ID: 1240233889-68cf01520000-NocioJ 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 C97B91CD2822 for ; Mon, 20 Apr 2009 06:24:50 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id Dv6sD28EEVtHf25q for ; Mon, 20 Apr 2009 06:24:50 -0700 (PDT) Received: from nb27steigerwald.qs.de (unknown [212.204.70.254]) by mail.lichtvoll.de (Postfix) with ESMTPSA id 0198D5AEA3; Mon, 20 Apr 2009 15:24:49 +0200 (CEST) From: Martin Steigerwald To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsdump: bump version and updates CHANGES Subject: Re: [PATCH] xfsdump: bump version and updates CHANGES Date: Mon, 20 Apr 2009 15:25:34 +0200 User-Agent: KMail/1.9.9 Cc: Christoph Hellwig References: <20090416163401.GB4810@infradead.org> (sfid-20090416_202541_290450_EFB7012F) In-Reply-To: <20090416163401.GB4810@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904201525.34952.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1240233890 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23713 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Am Donnerstag 16 April 2009 schrieb Christoph Hellwig: > Signed-off-by: Christoph Hellwig > > Index: xfsdump-dev/VERSION > =================================================================== > --- xfsdump-dev.orig/VERSION 2009-03-24 08:42:11.493978789 +0100 > +++ xfsdump-dev/VERSION 2009-03-24 08:42:14.581862276 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsdump-dev/doc/CHANGES > =================================================================== > --- xfsdump-dev.orig/doc/CHANGES 2009-03-24 08:42:17.092978894 +0100 > +++ xfsdump-dev/doc/CHANGES 2009-03-24 08:43:05.809856251 +0100 > @@ -1,3 +1,9 @@ > +xfsdump-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. minor typo: libtoool => libtool Please tell me when you consider those feedbacks more noise than helpful. > + > xfsdump-3.0.0 (4 February 2009) > - Bump major package version number to signify changed > dependencies and moved binaries (xfs_fsr and estimate -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From Martin@lichtvoll.de Mon Apr 20 08:25:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3KDPHo5064972 for ; Mon, 20 Apr 2009 08:25:18 -0500 X-ASG-Debug-ID: 1240233912-73e502c40000-NocioJ 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 5C32B22719C for ; Mon, 20 Apr 2009 06:25:13 -0700 (PDT) Received: from mail.lichtvoll.de (mondschein.lichtvoll.de [194.150.191.11]) by cuda.sgi.com with ESMTP id 8tB6YvLeae4v3voW for ; Mon, 20 Apr 2009 06:25:13 -0700 (PDT) Received: from nb27steigerwald.qs.de (unknown [212.204.70.254]) by mail.lichtvoll.de (Postfix) with ESMTPSA id 1D4735AEA3; Mon, 20 Apr 2009 15:25:12 +0200 (CEST) From: Martin Steigerwald To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsprogs: bump version and updates CHANGES Subject: Re: [PATCH] xfsprogs: bump version and updates CHANGES Date: Mon, 20 Apr 2009 15:26:03 +0200 User-Agent: KMail/1.9.9 Cc: Christoph Hellwig References: <20090416163332.GA4810@infradead.org> (sfid-20090416_202528_542304_BE0332B9) In-Reply-To: <20090416163332.GA4810@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904201526.04156.Martin@lichtvoll.de> X-Barracuda-Connect: mondschein.lichtvoll.de[194.150.191.11] X-Barracuda-Start-Time: 1240233913 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23713 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Am Donnerstag 16 April 2009 schrieb Christoph Hellwig: > Signed-off-by: Christoph Hellwig > > Index: xfsprogs/VERSION > =================================================================== > --- xfsprogs/VERSION 2009-03-24 08:32:06.768852982 +0100 > +++ xfsprogs/VERSION 2009-03-24 08:32:11.615853562 +0100 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=3 > PKG_MINOR=0 > -PKG_REVISION=0 > +PKG_REVISION=1 > PKG_BUILD=1 > Index: xfsprogs/doc/CHANGES > =================================================================== > --- xfsprogs/doc/CHANGES 2009-03-24 08:32:14.169852820 +0100 > +++ xfsprogs/doc/CHANGES 2009-03-24 08:40:26.653853642 +0100 > @@ -1,3 +1,14 @@ > +xfsprogs-3.0.1 > + - Update the Makepkgs script to generate proper source tarballs. > + - New project(5) and projid(5) man pages. > + - Fix extent array reallocation in the xfs_io bmap command, > + thanks to Tomasz Majkowski. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Allow xfs_freeze to freeze non-XFS filesystems. > + - Fix the xfs_db bmbta command. > + - Fix parallel builds, thanks to Mike Frysinger. > + - Various autoconf/libtoool fixes, thanks to Andreas Gruenbacher. minor typo: libtoool => libtool Please tell me when you consider those feedbacks more noise than helpful. > + > xfsprogs-3.0.0 (4 February 2009) > - Various smaller xfs_repair improvements. > - Various gettext improvements, thanks to Jakub Bogusz. -- Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7 From niemayer@isg.de Mon Apr 20 13:45:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3KIjcPW079505 for ; Mon, 20 Apr 2009 13:45:38 -0500 X-ASG-Debug-ID: 1240253132-5cf100da0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.isg.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C38641CD3E72 for ; Mon, 20 Apr 2009 11:45:32 -0700 (PDT) Received: from mail.isg.de (rzfoobar.is-asp.com [217.11.194.155]) by cuda.sgi.com with ESMTP id HJ34ipwjh1XJrhPc for ; Mon, 20 Apr 2009 11:45:32 -0700 (PDT) Received: from embargo.is-teledata.com (unknown [192.168.5.53]) by mail.isg.de (Postfix) with ESMTP id 9936A1AAE0A9; Mon, 20 Apr 2009 20:45:30 +0200 (CEST) Message-ID: <49ECC2CA.20108@isg.de> Date: Mon, 20 Apr 2009 20:45:30 +0200 From: Peter Niemayer User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.19) Gecko/20081204 SeaMonkey/1.1.14 MIME-Version: 1.0 To: Eric Sandeen Cc: Dave Chinner , Felix Blyakher , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> <20090419081927.GE16929@discord.disaster> <49EB487C.1020205@sandeen.net> In-Reply-To: <49EB487C.1020205@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: rzfoobar.is-asp.com[217.11.194.155] X-Barracuda-Start-Time: 1240253132 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0001 1.0000 -2.0203 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23733 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > Dave Chinner wrote: >> I did some initial work on tracking extents being freed, but then >> the TRIM request morphed into a "tell the largest free space around >> the area just freed" and that is much harder to do than simply to >> issue a "we just freed this bit" command. > > FWIW, ext[34] is still doing it block by block. At least for SSDs, I > think that's fine, isn't it? Well, theoretically, if there was a SSD that on one hand was sophisticated enough to provide TRIM support, but would otherwise not use an intelligent controller or cache memory and thus could pre-erase blocks only if the TRIM was applied to a whole erase block at once, then even a SSD could benefit from "telling the largest free space around the area just freed". In practice, I don't think there will ever be a SSD like that on the market, the primitive ones do not support TRIM, the sophisticated ones will keep book of unused sectors internally and will notice when a whole erase-block became empty and thus ready for proactive erasing. And I did not find any requirement or hint to "tell the largest free space around the area just freed" in http://www.t13.org/Documents/UploadedDocuments/docs2008/e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc Regards, Peter Niemayer From martin.petersen@oracle.com Mon Apr 20 14:13:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00, UNPARSEABLE_RELAY autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3KJDLBh080713 for ; Mon, 20 Apr 2009 14:13:21 -0500 X-ASG-Debug-ID: 1240254952-1fd901410000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from rgminet12.oracle.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6FBE71435A91 for ; Mon, 20 Apr 2009 12:15:52 -0700 (PDT) Received: from rgminet12.oracle.com (rcsinet12.oracle.com [148.87.113.124]) by cuda.sgi.com with ESMTP id CF711snyCS9q5xQm for ; Mon, 20 Apr 2009 12:15:52 -0700 (PDT) Received: from rgminet15.oracle.com (rcsinet15.oracle.com [148.87.113.117]) by rgminet12.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n3KJBQLA023354 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 20 Apr 2009 19:11:27 GMT Received: from acsmt704.oracle.com (acsmt704.oracle.com [141.146.40.82]) by rgminet15.oracle.com (Switch-3.3.1/Switch-3.3.1) with ESMTP id n3KJBNuB007492; Mon, 20 Apr 2009 19:11:24 GMT Received: from groovelator.mkp.net (/209.217.122.111) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 20 Apr 2009 12:11:21 -0700 To: Peter Niemayer Cc: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: XFS support for TRIM / blkdev_issue_discard? Subject: Re: XFS support for TRIM / blkdev_issue_discard? From: "Martin K. Petersen" Organization: Oracle References: <20090331053013.7642414167108@attica.americas.sgi.com> <49E4A131.5040309@isg.de> <20090419081927.GE16929@discord.disaster> <49EB487C.1020205@sandeen.net> <49ECC2CA.20108@isg.de> Date: Mon, 20 Apr 2009 15:11:19 -0400 In-Reply-To: <49ECC2CA.20108@isg.de> (Peter Niemayer's message of "Mon, 20 Apr 2009 20:45:30 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.91 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Source-IP: acsmt704.oracle.com [141.146.40.82] X-Auth-Type: Internal IP X-CT-RefId: str=0001.0A09020B.49ECC8DD.0035:SCFMA4539814,ss=1,fgs=0 X-Barracuda-Connect: rcsinet12.oracle.com[148.87.113.124] X-Barracuda-Start-Time: 1240254954 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0229 1.0000 -1.8725 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.87 X-Barracuda-Spam-Status: No, SCORE=-1.87 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23736 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean >>>>> "Peter" == Peter Niemayer writes: Peter> And I did not find any requirement or hint to "tell the largest Peter> free space around the area just freed" in Peter> http://www.t13.org/Documents/UploadedDocuments/docs2008/e07154r6-Data_Set_Management_Proposal_for_ATA-ACS2.doc This was never an issue with SSDs. The requirement comes from thin-provisioned SCSI disk arrays that would like us to do unmaps (trims) in units of their internal block size. There was a huge pushback from the industry about this. This is clearly something the array firmware should have to keep track of and not the operating system. As a result the unmap granularity size proposal was pulled and for a while it looked like everything was going to be fine. Unfortunately yet another array vendor recently discovered that thin provisioning is hard and sent out a request to have the granularity brain damage reinstated in the latest protocol draft. I'm just hoping that all the vendors who came around on the issue will stay that way... -- Martin K. Petersen Oracle Linux Engineering From SEMA-CR-1-47PPXW@ptcmarketing.com Tue Apr 21 05:39:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.7 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER,MIME_QP_LONG_LINE autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LAdTuS123416 for ; Tue, 21 Apr 2009 05:39:29 -0500 X-ASG-Debug-ID: 1240310364-6f83031c0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id BDE7C22B0FB for ; Tue, 21 Apr 2009 03:39:24 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id Aa1ddL2zfdWhm0Mk for ; Tue, 21 Apr 2009 03:39:24 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.40,223,1238990400"; d="scan'208,217";a="297170255" Received: from unknown (HELO HQCRMINT1.ptcnet.ptc.com) ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 21 Apr 2009 05:47:04 -0400 Date: Tue, 21 Apr 2009 05:45:46 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: Early bird registration ends soon =?utf-8?q?=E2=80=93?= PTC/USER World Event 2009 Subject: Early bird registration ends soon =?utf-8?q?=E2=80=93?= PTC/USER World Event 2009 Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1240304803731_287232119 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1240310365 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1240304803731_287232119 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Early bird registration ends soon! Join us in Orlando and celebrate the 20th Anniversary of the PTC/USER World = Event. If you've attended this event in the past, you know what to expect - = new skills, new solutions, renewed energy and the chance to extend your netw= ork of peers. Here are a few more highlights from this year's event: * Come Early or Stay Late at a great $99 rate! Instead of choosing between a= business trip or a family vacation, why not choose both? * Product Updates, Roadmaps & Ask the Expert Panels across all PTC product f= amilies (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fpubs.html) * Keynote presentations from PTC Management Team, John Abele, founder of Bos= ton Scientific and Chair of the FIRST and Harald Pl=C3=B6ckinger, CTO at KTM= - PTC Customer and leading innovator of off-road racing bikes * User experience evaluations where PTC product designers work in an intera= ctive, one-on-one, task-based setting, to validate new concepts and approach= es to our application user interface and you can contribute your thoughts on= new ideas for PTC products (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fusability.html) * PTC Learning Centers on Windchill, ProductView, Product Information Delive= ry, Environmental compliance and more, where you can learn about PTC's newes= t products and capabilities and how your company can benefit (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Flc.html) * Pro/ENGINEER Hands-On Workshops giving you the opportunity to experience t= he most exciting enhancements in the latest releases of Pro/ENGINEER (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fhow.html) * Windchill Hands-On Workshops focused on Installing Windchill for Pro/INTR= ALINK 3.x Administrators and Windchill System Monitoring Featuring JMX (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fhow.html) * Increased PTC University training (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fprecision.html) opportunities wit= h 160 hours of free instructor led hands on training and if you arrive early= you can take advantage of new Sunday sessions helping you to avoid schedule conflicts during the main event. And back by popular demand- post event 1-da= y courses (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fposttraining.html) discounted 40%= for event attendees only. Sign up for all training is in advance and on a f= irst come first serve basis so make sure to register for the event early! * Multiple networking activities including topic table breakfasts, lunches a= nd evening receptions giving you plenty of opportunities to connect with you= r peers and extend your network * Extensive exhibit hall featuring the latest in products and services from= PTC and Partner exhibits (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fexhibits.html) * New tools for justifying your attendance. (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fjustify.html) We know that curren= t economic difficulties might make it hard to get approval to attend so make= sure to read our new top 10 reasons (http://www.ptc.com/read?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fwhy.html) why you should come to = Orlando and check out these strategies to get funding (http://www.ptc.com/re= ad?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fjustify.html) for your conference= attendance. We also have a new letter to your boss (http://www.ptc.com/read= ?&u=3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009%2Fbossltr.html) that you can e-mail= today. In a tough economy, the companies that survive are those who stay ahead of t= he pack - those who streamline their processes, implement solutions before t= heir competitors do, and keep their customers satisfied. This conference wil= l give you the tools you need to help your company do just that. Visit the PTC/USER World Event 2009 website at (http://www.ptc.com/read?&u= =3D= 1-5LWLN-2077= &c=3D= 1-3P40S9= &o=3D= 1-47EI41= &w=3D= 2354034= &t=3Dhttp%3A%2F%2Fwww.ptcuser.org%2F2009) to learn more and register. We look forward to seeing you in Orlando! =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-47EI41= &campd=3D= 1-3P40S9= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=3D= 1-47EI41= &campd=3D= 1-3P40S9= &conud=3D= 1-5LWLN-2077= &mailkey=3D= 2354034= &email=3D= xfs@oss.sgi.com= edit profile http://www.ptc.com/read?&w=3D= 2354034= &t=3D/common/account/index.htm ----------------------------------------------------------------------------= --- This email was sent to: = xfs@oss.sgi.com= PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to= unsubscribe@ptc.com. --BF_1240304803731_287232119 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: Quoted-Printable Registration reminder Email FY09Q3 PTCUSER World Event
3D"PTC.com"
3D"

Early bird registration ends soon!

Join us in Orlando and celebrate the 20th Anniversary of the P= TC/USER World Event.  If you've attended this event in the past, you kn= ow what to expect – new skills, new solutions, renewed energy and the = chance to extend your network of peers.

Here are a few more highlights from this year's event:

  • Come Earl= y or Stay Late at a great $99 rate! Instead of choosing between= a business trip or a family vacation, why not choose both?

  • Product Up= dates, Roadmaps & Ask the Expert Panels across all PTC prod= uct families

  • Keynote presentations from PTC= Management Team, John Abele, founder of Boston Scientific and Chair of the = FIRST and Harald Plöckinger, CTO at KTM- PTC Customer and leading innov= ator of off-road racing bikes

  • User = experience evaluations where PTC product designers work in = ;an interactive, one-on-one, task-based setting, to validate new concep= ts and approaches to our application user interface and you can contribute y= our thoughts on new ideas for PTC products

  • PTC Learning= Centers on Windchill, ProductView, Product Information Deliver= y, Environmental compliance and more, where you can learn about PTC's newest= products and capabilities and how your company can benefit

  • Pro/ENGINEE= R Hands-On Workshops giving you the opportunity to experience t= he most exciting enhancements in the latest releases of Pro/ENGINEER

  • Windchill H= ands-On Workshops focused on Installing Windchill for Pro/INTRA= LINK 3.x Administrators and Windchill System Monitoring Featuring JMX

  • Increased PTC U= niversity training opportunities with 160 hours of free instruc= tor led hands on training and if you arrive early you can take advantage of = new Sunday sessions helping you to avoid schedule conflicts during the main = event. And back by popular demand- post event= 1-day courses discounted 40% for event attendees only.   Sign= up for all training is in advance and on a first come first serve basis so = make sure to register for the event early!

  • Multiple networking activities= including topic table breakfasts, lunches and evening receptions giving you= plenty of opportunities to connect with your peers and extend your network<= br />
  • Extens= ive exhibit hall featuring the latest in products and services = from PTC and Partner exhibits

  • New too= ls for justifying your attendance. We know that current economi= c difficulties might make it hard to get approval to attend so make sure to = read our new top 10 reasons = why you should come to Orlando and check out these strategies to get funding for your conference attendance. We also hav= e a new letter to your boss that you can e-mail today.

In a tough economy, the companies that survive are those who stay ahead o= f the pack – those who streamline their processes, implement solutions= before their competitors do, and keep their customers satisfied. This confe= rence will give you the tools you need to help your company do just that.= 60;

Visit the PTC/USER World Event 2009 website at www.ptcuser.org/2009 to le= arn more and register. 

We look forward to seeing you in Orlando!

3D""
contact PTC | privacy policy | edit profile
This email was sent to: = xfs@oss.sgi.com=     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank ema= il to unsubscribe@ptc.com.
--BF_1240304803731_287232119-- From BATV+965a0d2c6a2e904b1902+2067+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 21 09:14:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LEEtxG131638 for ; Tue, 21 Apr 2009 09:14:58 -0500 X-ASG-Debug-ID: 1240323291-7e04002a0000-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 238A322BE73 for ; Tue, 21 Apr 2009 07:14:52 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 6w4sxRuxPHKzuEmE for ; Tue, 21 Apr 2009 07:14:52 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LwGkN-0006sd-MQ; Tue, 21 Apr 2009 14:14:51 +0000 Date: Tue, 21 Apr 2009 10:14:51 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: skip fsr tests if xfs_fsr utils not found Subject: Re: [PATCH] xfstests: skip fsr tests if xfs_fsr utils not found Message-ID: <20090421141451.GA26214@infradead.org> References: <49EB8F90.20705@sandeen.net> <49EB9CC3.1000305@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EB9CC3.1000305@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240323292 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 19, 2009 at 04:50:59PM -0500, Eric Sandeen wrote: > Similar to the xfsdump-related patch; gracefully fail > if no xfs_fsr is found. > > I'll probably send another for the acl & attr userspace, > it's actually not always installed on minimal boxes. Looks good, too. From BATV+965a0d2c6a2e904b1902+2067+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 21 09:15:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LEFneL131696 for ; Tue, 21 Apr 2009 09:15:49 -0500 X-ASG-Debug-ID: 1240323345-7dd100310000-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 1495E22BE8A for ; Tue, 21 Apr 2009 07:15:45 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id p9yNjGvncvbqWayg for ; Tue, 21 Apr 2009 07:15:45 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LwGlF-0000k9-Om; Tue, 21 Apr 2009 14:15:45 +0000 Date: Tue, 21 Apr 2009 10:15:45 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] put xfs build features into the stats file Subject: Re: [PATCH, RFC] put xfs build features into the stats file Message-ID: <20090421141545.GB26214@infradead.org> References: <49EBDF30.90702@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EBDF30.90702@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240323346 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 19, 2009 at 09:34:24PM -0500, Eric Sandeen wrote: > Running xfstests on an xfs build w/o xattrs enabled How did you disable xattrs? Should probably be a separate file, though. From BATV+965a0d2c6a2e904b1902+2067+infradead.org+hch@bombadil.srs.infradead.org Tue Apr 21 09:17:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LEH99P131749 for ; Tue, 21 Apr 2009 09:17:09 -0500 X-ASG-Debug-ID: 1240323425-7dd700310000-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 16FF422BEA2 for ; Tue, 21 Apr 2009 07:17:05 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 8qkowuENYkWKgQba for ; Tue, 21 Apr 2009 07:17:05 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LwGmX-000219-Em; Tue, 21 Apr 2009 14:17:05 +0000 Date: Tue, 21 Apr 2009 10:17:05 -0400 From: Christoph Hellwig To: Martin Steigerwald Cc: xfs@oss.sgi.com, Christoph Hellwig X-ASG-Orig-Subj: Re: [PATCH] xfsdump: bump version and updates CHANGES Subject: Re: [PATCH] xfsdump: bump version and updates CHANGES Message-ID: <20090421141705.GC26214@infradead.org> References: <20090416163401.GB4810@infradead.org> <200904201525.34952.Martin@lichtvoll.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200904201525.34952.Martin@lichtvoll.de> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240323426 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Mon, Apr 20, 2009 at 03:25:34PM +0200, Martin Steigerwald wrote: > minor typo: libtoool => libtool > > Please tell me when you consider those feedbacks more noise than helpful. Every kind of productive feedback is highly encouraged, and that certainly includes spelling fixes. I'll fix this up in the git repo as the patch has already been commited. From mike@fysh.org Tue Apr 21 09:23:39 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=BAYES_00,J_CHICKENPOX_210, J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LENccY132181 for ; Tue, 21 Apr 2009 09:23:38 -0500 X-ASG-Debug-ID: 1240323814-7df700370000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pond.fysh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id ECC5822BCAD for ; Tue, 21 Apr 2009 07:23:34 -0700 (PDT) Received: from pond.fysh.org (pond.fysh.org [166.84.7.109]) by cuda.sgi.com with ESMTP id 2LwYHOScO7GurXKc for ; Tue, 21 Apr 2009 07:23:34 -0700 (PDT) Received: from mike by pond.fysh.org with local (Exim 4.69 #1 (Debian)) id 1LwGso-0002Ku-2D for xfs@oss.sgi.com; Tue, 21 Apr 2009 15:23:34 +0100 Date: Tue, 21 Apr 2009 15:23:34 +0100 From: Mike Ashton To: xfs@oss.sgi.com X-ASG-Orig-Subj: fsck.xfs proposed improvements Subject: fsck.xfs proposed improvements Message-ID: <20090421142333.GA5197@fysh.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: pond.fysh.org[166.84.7.109] X-Barracuda-Start-Time: 1240323814 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4999 1.0000 0.0000 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=BSF_RULE_7580B X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23808 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.75 BSF_RULE_7580B BODY: Custom Rule 7580B X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hello folks, I've been using XFS as my filesystem of choice for many, many years now and for all the years of, er, joy, I have encountered a few difficulties with filesystem recovery after machine crashes/hard reboots and so on. Google confirms that I'm not alone in this. You're all probably perfectly well aware that fsck.xfs is a shell script that does nothing much, on the premise that XFS has a journal and therefore doesn't suffer from the routine corruption of more primitive filesystems. However, I have found that the journal itself is prone to corruption (bad clientid, and friends) on contemporary, even enterprise class, hardware. Now I don't doubt this is due to stupidities in the underlying hardware - SATA disks' naughty non-battery write caches or what have you - and XFS is not to blame, but I feel we maybe need to be more pragmatic about these annoying realities. I'm also sure that this is not the first time this design decision has been challenged, although a search of the list archives implies that it hasn't been suggested in the forum. Forgive me if I'm wrong there. I'm here to make the case for fsck.xfs being enhanced to verify the journal and invoke xfs_repair -L in the event that it's screwed. Now, I'm sure half of you just sprayed coffee at the screen and are already firing up an angry reply, but bear with me. Automatic filesystem repair is a normal, everyday necessity. It's what non-journaling filesystems do all the time; the days of offering the sysadmin the choice of whether to repair this inode count, or that dnode entry are long gone. A filesystem with a corrupted journal is no use to me; I'm not going to be able to repair the journal. All I'm going to do is invoke xfs_repair -L and pray. I'm happy for that, *as an option* ( as it is on all fsck invocations) to happen on boot without my intervention. I'd like that to happen. I do not accept that fsck.xfs has a null function. The filesystem is kept consistent by the journal, but the journal needs to be verified and the filesystem repaired otherwise. Otherwise, fsck passes, mount fails, my computer doesn't boot and that makes me a sad panda. Thankfully this would be a pretty quick operation - I'm sure there's a lot of cleverness that could be incorporated into a binary fsck.xfs that could detect, report on and repair all sorts of exciting situations, but you can even do it primitively in shell by simply trying to mount it. I've included an example of what I mean at the end. Hopefully, you'll give this some serious consideration. I'm quite sure this is going to end up being a bun-fight issue, but I'm in no way implying that you didn't think about what you were doing when you made the decision to make mkfs.xfs do nothing. I'm just asking that you consider again whether it now needs to do something, because that hasn't worked as a strategy, even if that is due to hardware manufacturers cutting corners. Thanks, Mike. #!/bin/sh -f # # Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. # AUTO=false while getopts ":aApy" c do case $c in a|A|p|y) AUTO=true;; esac done eval DEV=\${$#} if [ ! -e $DEV ]; then echo "$0: $DEV does not exist" exit 8 fi if $AUTO; then # rw initrd should allow mkdir but direct mounting of / read-only, we require to have a /mnt already mkdir -p /mnt if [ ! -d /mnt ] then echo no /mnt to test XFS journal recovery exit 0 fi if mount -t xfs "$DEV" /mnt -o ro,norecovery then umount /mnt echo "$DEV is an xfs filesystem" if mount -t xfs "$DEV" /mnt then echo "Recovery by journal successful" umount /mnt else echo "writable mount of $DEV failed - invoking xfs_repair" xfs_repair -L "$DEV" fi else echo "$DEV appears not to be an xfs filesystem" fi else echo "If you wish to check the consistency of an XFS filesystem or" echo "repair a damaged filesystem, see xfs_check(8) and xfs_repair(8)." fi exit 0 From sandeen@sandeen.net Tue Apr 21 10:21:14 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LFLDiQ134888 for ; Tue, 21 Apr 2009 10:21:14 -0500 X-ASG-Debug-ID: 1240327269-65ad01d60000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8287B22C1BE for ; Tue, 21 Apr 2009 08:21:10 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id d6JLtogamO2mi60G for ; Tue, 21 Apr 2009 08:21:10 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3LFKmup032453; Tue, 21 Apr 2009 11:20:48 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3LFKkGX022035; Tue, 21 Apr 2009 11:20:47 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3LFKiL6006496; Tue, 21 Apr 2009 11:20:45 -0400 Message-ID: <49EDE44C.9010804@sandeen.net> Date: Tue, 21 Apr 2009 10:20:44 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH, RFC] put xfs build features into the stats file Subject: Re: [PATCH, RFC] put xfs build features into the stats file References: <49EBDF30.90702@sandeen.net> <20090421141545.GB26214@infradead.org> In-Reply-To: <20090421141545.GB26214@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240327270 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.42 X-Barracuda-Spam-Status: No, SCORE=-1.42 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=COMMA_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23812 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 COMMA_SUBJECT Subject is like 'Re: FDSDS, this is a subject' X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Sun, Apr 19, 2009 at 09:34:24PM -0500, Eric Sandeen wrote: >> Running xfstests on an xfs build w/o xattrs enabled > > How did you disable xattrs? Oh sorry, meant acls, with CONFIG_XFS_POSIX_ACL > Should probably be a separate file, though. Yeah, you're right, I'll go study up on sysfs. :) -Eric From felixb@sgi.com Tue Apr 21 10:47:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LFlb2V135933 for ; Tue, 21 Apr 2009 10:47:37 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay1.corp.sgi.com (Postfix) with ESMTP id 41EA78F8078 for ; Tue, 21 Apr 2009 08:47:31 -0700 (PDT) Received: from eagdhcp-233-148.americas.sgi.com (eagdhcp-233-148.americas.sgi.com [128.162.233.148]) by estes.americas.sgi.com (Postfix) with ESMTP id 1AF437000103; Tue, 21 Apr 2009 10:47:31 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <3296B35F-1364-4E7B-856B-041AF746BFFC@sgi.com> From: Felix Blyakher To: "Josef 'Jeff' Sipek" In-Reply-To: <20090419181410.GS3709@josefsipek.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfs: add more checks to superblock validation Date: Tue, 21 Apr 2009 10:47:30 -0500 References: <1240002765-20279-1-git-send-email-felixb@sgi.com> <20090418050544.GQ3709@josefsipek.net> <81FBAD0F-AE2A-4780-BC8B-135C4CCE8D3A@sgi.com> <20090419181410.GS3709@josefsipek.net> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 19, 2009, at 1:14 PM, Josef 'Jeff' Sipek wrote: > On Sun, Apr 19, 2009 at 11:39:20AM -0500, Felix Blyakher wrote: >> >> On Apr 18, 2009, at 12:05 AM, Josef 'Jeff' Sipek wrote: >> >>> On Fri, Apr 17, 2009 at 04:12:45PM -0500, Felix Blyakher wrote: >>>> From: Olaf Weber >>>> >>>> There had been reports where xfs filesystem was randomly >>>> corrupted with fsfuzzer, and xfs failed to handle it >>>> gracefully. This patch fixes couple of reported problem >>>> by providing additional checks in the superblock >>>> validation routine. >>>> >>>> Signed-off-by: Felix Blyakher >>> >>> Since this patch is from Olaf, shouldn't he have a s-o-b line as >>> well? >> >> I was following the guidelines from the SubmittingPatches: >> >> The "from" line must be the very first line in the message body, >> and has the form: >> >> From: Original Author >> >> The "from" line specifies who will be credited as the author of the >> patch in the permanent changelog. If the "from" line is missing, >> then the "From:" line from the email header will be used to determine >> the patch author in the changelog. >> >> >> So, is "From:" enough here, or "Signed-off-by" is needed as well? > > The From line determines author-ship. If this is Olaf's patch, then > the From > is right. My understanding is that s-o-b is intended as a "I didn't do > anything stupid (e.g., incorporate licensed code, etc.) while > working on > this patch/handling this patch." That what I did before creating (from the proposed changes) and submitting the patch (and making sure the author get the credit). > This makes me believe that the author > should include a s-o-b line as well. > > So, for example, whenever _I_ send a patch that I authored, I have > both a >> From and a s-o-b. That seems redundant based on the following excerpt from the SubmittingPatches: If the "from" line is missing, then the "From:" line from the email header will be used to determine the patch author in the changelog. >> If someone picks it up (e.g., akpm), he'd add his s-o-b, > so when he resends it, it'd have my from, my s-o-b, and his s-o-b. > As far as > I know, other kernel folks do the same. That's definitely not usual case for submitting the patch on somebody else behalf, but I found the following entry in the log: commit 55643171de7ba429fbf2cb72fb1f2c6f2df0dcf3 Author: Ashwin Ganti Date: Tue Feb 24 19:48:44 2009 -0800 Staging: add p9auth driver This is a driver that adds Plan 9 style capability device implementation. From: Ashwin Ganti Signed-off-by: Greg Kroah-Hartman But at the end, I don't mind to follow any established guidelines here. Just need clarifications. Felix From jeffpc@josefsipek.net Tue Apr 21 11:52:28 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LGqSHV142627 for ; Tue, 21 Apr 2009 11:52:28 -0500 X-ASG-Debug-ID: 1240332905-59c000170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 00FC6143A020 for ; Tue, 21 Apr 2009 09:55:05 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id 2IRxL8BWD60vXM2y for ; Tue, 21 Apr 2009 09:55:05 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 9F4241C00E0E; Tue, 21 Apr 2009 12:52:18 -0400 (EDT) Date: Tue, 21 Apr 2009 12:52:18 -0400 From: "Josef 'Jeff' Sipek" To: Felix Blyakher Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs: add more checks to superblock validation Subject: Re: [PATCH] xfs: add more checks to superblock validation Message-ID: <20090421165218.GX3709@josefsipek.net> References: <1240002765-20279-1-git-send-email-felixb@sgi.com> <20090418050544.GQ3709@josefsipek.net> <81FBAD0F-AE2A-4780-BC8B-135C4CCE8D3A@sgi.com> <20090419181410.GS3709@josefsipek.net> <3296B35F-1364-4E7B-856B-041AF746BFFC@sgi.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3296B35F-1364-4E7B-856B-041AF746BFFC@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240332907 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23817 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 10:47:30AM -0500, Felix Blyakher wrote: ... >> This makes me believe that the author >> should include a s-o-b line as well. >> >> So, for example, whenever _I_ send a patch that I authored, I have >> both a From and a s-o-b. > > That seems redundant based on the following excerpt from the > SubmittingPatches: > > If the "from" line is missing, > then the "From:" line from the email header will be used to determine > the patch author in the changelog. If you look at the "sign your work" section in that doc, the example it provides shows the original patch author having a s-o-b as well. ;) Anyway, enough of this...time to hack on xfs some more :) Jeff. -- *NOTE: This message is ROT-13 encrypted twice for extra protection* From sandeen@sandeen.net Tue Apr 21 15:02:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_51, J_CHICKENPOX_61,J_CHICKENPOX_71,J_CHICKENPOX_91 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LK2uYW150226 for ; Tue, 21 Apr 2009 15:02:56 -0500 X-ASG-Debug-ID: 1240344330-512a02740000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E700B135A8BC for ; Tue, 21 Apr 2009 13:05:31 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id PcZSKP44Cfjv0AdM for ; Tue, 21 Apr 2009 13:05:31 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3LK2kJw011185 for ; Tue, 21 Apr 2009 16:02:46 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3LK2jKM010981 for ; Tue, 21 Apr 2009 16:02:46 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3LK2i9o011662 for ; Tue, 21 Apr 2009 16:02:45 -0400 Message-ID: <49EE2664.7030701@sandeen.net> Date: Tue, 21 Apr 2009 15:02:44 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfstests: filter out imaxpct value in test 096 Subject: [PATCH] xfstests: filter out imaxpct value in test 096 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240344333 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23830 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean xfstests: filter out imaxpct value in test 096 On large filesystems, imaxpc drops from 25 to 5 Signed-off-by: Eric Sandeen --- iff --git a/096 b/096 index 369d95d..a0560b1 100755 --- a/096 +++ b/096 @@ -55,6 +55,7 @@ _mkfs_filter() sed \ -e 's/extsz=[0-9][0-9]*[ ]*/extsz=N, /' \ -e 's/blocks=[0-9][0-9]*/blocks=N/' \ + -e 's/imaxpct=[0-9][0-9]*/imaxpct=N/' \ -e 's/agsize=[0-9][0-9]*/agsize=N/' \ -e 's/agcount=[0-9][0-9]*/agcount=N/' \ -e 's/swidth=[0-9][0-9]* blks$/&, unwritten=1/' \ diff --git a/096.external b/096.external index 7d68373..989a7bd 100644 --- a/096.external +++ b/096.external @@ -10,7 +10,7 @@ log stripe unit (262656) must be a multiple of the block size (4096) log stripe unit (266240 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=2 @@ -21,7 +21,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N # same test but get log stripe from data stripe --- mkfs=-l version=2 -d su=266240,sw=1 --- meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=2 @@ -32,7 +32,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N # test out data stripe --- mkfs=-d su=266240,sw=1 --- meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=1 @@ -43,7 +43,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N # test out data stripe the same but using sunit & swidth --- mkfs=-d sunit=520,swidth=520 --- meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=1 diff --git a/096.internal b/096.internal index e0e1ee4..cf75037 100644 --- a/096.internal +++ b/096.internal @@ -10,7 +10,7 @@ log stripe unit (262656) must be a multiple of the block size (4096) log stripe unit (266240 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=2 @@ -23,7 +23,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N log stripe unit (266240 bytes) is too large (maximum is 256KiB) log stripe unit adjusted to 32KiB meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=2 @@ -34,7 +34,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N # test out data stripe --- mkfs=-l version=1 -d su=266240,sw=1 --- meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=1 @@ -45,7 +45,7 @@ realtime =REALTIME extsz=N, blocks=N, rtextents=N # test out data stripe the same but using sunit & swidth --- mkfs=-l version=1 -d sunit=520,swidth=520 --- meta-data=DEV isize=256 agcount=N, agsize=N blks -data = bsize=4096 blocks=N, imaxpct=25 +data = bsize=4096 blocks=N, imaxpct=N = sunit=65 swidth=65 blks, unwritten=1 naming =version 2 bsize=4096 log =LOG bsize=4096 blocks=N, version=1 From sandeen@sandeen.net Tue Apr 21 15:13:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_44, J_CHICKENPOX_46 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LKDa1I150596 for ; Tue, 21 Apr 2009 15:13:36 -0500 X-ASG-Debug-ID: 1240344812-374902030000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id F0C3A22DB43 for ; Tue, 21 Apr 2009 13:13:32 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id wMj6pLJfyjARZl5f for ; Tue, 21 Apr 2009 13:13:32 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3LKDVSY013793 for ; Tue, 21 Apr 2009 16:13:31 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3LKDVOW013593 for ; Tue, 21 Apr 2009 16:13:31 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3LKDUsq016447 for ; Tue, 21 Apr 2009 16:13:30 -0400 Message-ID: <49EE28EA.4010409@sandeen.net> Date: Tue, 21 Apr 2009 15:13:30 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Subject: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240344812 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23829 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean I was experimenting w/ default lazy-count=1, and it broke a few tests. Seems simplest to enforce lazy-count=0 in the common.log routines for now, and fix up the output? (vs. updating all the expected output for these tests...) Signed-off-by: Eric Sandeen --- diff --git a/common.log b/common.log index b651ceb..edfd5c1 100644 --- a/common.log +++ b/common.log @@ -272,7 +272,7 @@ _mkfs_log() { # create the FS # mkfs options to append to log size otion can be specified ($*) - export MKFS_OPTIONS="-l size=2000b $*" + export MKFS_OPTIONS="-l size=2000b -l lazy-count=0 $*" _full "mkfs" _scratch_mkfs_xfs >>$seq.full 2>&1 if [ $? -ne 0 ] ; then diff --git a/018.out b/018.out index 53840f0..3118b6e 100644 --- a/018.out +++ b/018.out @@ -1,17 +1,17 @@ QA output created by 018 *** init FS -*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=1.filtered -*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=1.filtered -*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=1.filtered -*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-lversion=2.filtered -*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-lversion=2.filtered +*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=1.filtered +*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=1.filtered +*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=1.filtered +*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=64k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=128k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.op with 018.fulldir/op.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_inode with 018.fulldir/trans_inode.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered +*** compare logprint: 018.trans_buf with 018.fulldir/trans_buf.mnt-onoalign,logbsize=256k.mkfs-lsize=2000b-llazy-count=0-lversion=2.filtered diff --git a/081.out b/081.out index bf533a4..efc6211 100644 --- a/081.out +++ b/081.out @@ -1,4 +1,4 @@ QA output created by 081 *** init FS -*** compare logprint: 081.ugquota.trans_inode with 081.fulldir/trans_inode.mnt-oquota,gquota.mkfs-lsize=2000b-lversion=1.filtered +*** compare logprint: 081.ugquota.trans_inode with 081.fulldir/trans_inode.mnt-oquota,gquota.mkfs-lsize=2000b-llazy-count=0-lversion=1.filtered *** unmount diff --git a/082.out b/082.out index e875ab5..edd6b2b 100644 --- a/082.out +++ b/082.out @@ -1,39 +1,39 @@ QA output created by 082 *** init FS --- mkfs=version=2, mnt=logbsize=32k, sync=sync --- -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2.sync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2.sync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.sync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.sync.filtered --- mkfs=version=2,su=4096, mnt=logbsize=32k, sync=sync --- -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=4096.sync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=4096.sync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=4096.sync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=4096.sync.filtered --- mkfs=version=2,su=32768, mnt=logbsize=32k, sync=sync --- -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=32768.sync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=32768.sync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=32768.sync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=32768.sync.filtered --- mkfs=version=2,su=36864, mnt=logbsize=32k, sync=sync --- -*** Cannot mkfs for this test using option specified: -l size=2000b -l version=2,su=36864 *** +*** Cannot mkfs for this test using option specified: -l size=2000b -l lazy-count=0 -l version=2,su=36864 *** --- mkfs=version=2,su=5120, mnt=logbsize=32k, sync=sync --- -*** Cannot mkfs for this test using option specified: -l size=2000b -l version=2,su=5120 *** +*** Cannot mkfs for this test using option specified: -l size=2000b -l lazy-count=0 -l version=2,su=5120 *** --- mkfs=version=2, mnt=logbsize=32k, sync=nosync --- -*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2.nosync.filtered -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2.nosync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2.nosync.filtered +*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.nosync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.nosync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2.nosync.filtered --- mkfs=version=2,su=4096, mnt=logbsize=32k, sync=nosync --- -*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=4096.nosync.filtered -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=4096.nosync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=4096.nosync.filtered +*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=4096.nosync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=4096.nosync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=4096.nosync.filtered --- mkfs=version=2,su=32768, mnt=logbsize=32k, sync=nosync --- -*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=32768.nosync.filtered -*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=32768.nosync.filtered -*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-lversion=2,su=32768.nosync.filtered +*** compare logprint: 082.op with 082.fulldir/op.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=32768.nosync.filtered +*** compare logprint: 082.trans_inode with 082.fulldir/trans_inode.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=32768.nosync.filtered +*** compare logprint: 082.trans_buf with 082.fulldir/trans_buf.mnt-ologbsize=32k.mkfs-lsize=2000b-llazy-count=0-lversion=2,su=32768.nosync.filtered --- mkfs=version=2,su=36864, mnt=logbsize=32k, sync=nosync --- -*** Cannot mkfs for this test using option specified: -l size=2000b -l version=2,su=36864 *** +*** Cannot mkfs for this test using option specified: -l size=2000b -l lazy-count=0 -l version=2,su=36864 *** --- mkfs=version=2,su=5120, mnt=logbsize=32k, sync=nosync --- -*** Cannot mkfs for this test using option specified: -l size=2000b -l version=2,su=5120 *** +*** Cannot mkfs for this test using option specified: -l size=2000b -l lazy-count=0 -l version=2,su=5120 *** From sandeen@sandeen.net Tue Apr 21 15:25:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LKPcTo151234 for ; Tue, 21 Apr 2009 15:25:38 -0500 X-ASG-Debug-ID: 1240345533-626f00c70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4C26D1CD8D94 for ; Tue, 21 Apr 2009 13:25:33 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id EML6Wyx01iR0nKac for ; Tue, 21 Apr 2009 13:25:33 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3LKPXJk016708 for ; Tue, 21 Apr 2009 16:25:33 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3LKPWrm016807 for ; Tue, 21 Apr 2009 16:25:32 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3LKPVrJ018520 for ; Tue, 21 Apr 2009 16:25:32 -0400 Message-ID: <49EE2BBB.3070008@sandeen.net> Date: Tue, 21 Apr 2009 15:25:31 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfstests: fix up features2 tests for lazy-count=1 Subject: [PATCH] xfstests: fix up features2 tests for lazy-count=1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240345534 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23831 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean A few more tests are unhappy with a lazy-count=1 change; specify lazy-count=0 in them for these tests. Signed-off-by: Eric Sandeen --- diff --git a/186 b/186 index e8706e4..3e487ab 100755 --- a/186 +++ b/186 @@ -135,7 +135,7 @@ _supported_os Linux _require_scratch rm -f $seq.full -_scratch_mkfs -i attr=2,size=512 >/dev/null 2>&1 +_scratch_mkfs -i attr=2,size=512 -l lazy-count=0 >/dev/null 2>&1 # set inum to root dir ino # we'll add in dirents and EAs into the root directory diff --git a/187 b/187 index 4e79055..8ae3ef9 100755 --- a/187 +++ b/187 @@ -54,7 +54,7 @@ export MOUNT_OPTIONS="" # Make sure that when we think we are testing with morebits off # that we really are. # Trying to future-proof in case mkfs defaults change. -_scratch_mkfs -i attr=1 >/dev/null 2>&1 +_scratch_mkfs -i attr=1 -l lazy-count=0 >/dev/null 2>&1 $XFS_DB_PROG -c version $SCRATCH_DEV 2>&1 >$tmp.db if grep -i morebits $tmp.db then diff --git a/199 b/199 index 099cc1c..c7dcbdd 100644 --- a/199 +++ b/199 @@ -35,7 +35,7 @@ _supported_os Linux _require_scratch -_scratch_mkfs_xfs >/dev/null 2>&1 +_scratch_mkfs_xfs -l lazy-count=0>/dev/null 2>&1 # # Print the current flags. Just a dummy so that the test breaks From sandeen@sandeen.net Tue Apr 21 16:47:20 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LLlJbq154673 for ; Tue, 21 Apr 2009 16:47:19 -0500 X-ASG-Debug-ID: 1240350595-53c602100000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 1188E143B008 for ; Tue, 21 Apr 2009 14:49:56 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id H86G4FFrIPr3Hsgw for ; Tue, 21 Apr 2009 14:49:56 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3LLlBUK004392 for ; Tue, 21 Apr 2009 17:47:11 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3LLlAnG006331 for ; Tue, 21 Apr 2009 17:47:10 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3LLl9CI007362 for ; Tue, 21 Apr 2009 17:47:10 -0400 Message-ID: <49EE3EDD.1090305@sandeen.net> Date: Tue, 21 Apr 2009 16:47:09 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] make lazy-count=1 the default Subject: [PATCH] make lazy-count=1 the default Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240350599 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23836 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean If folks think it's been out there long enough, let's make lazy-count=1 the mkfs default going forward? Signed-off-by: Eric Sandeen --- Index: xfsprogs-2.10.2/mkfs/xfs_mkfs.c =================================================================== --- xfsprogs-2.10.2.orig/mkfs/xfs_mkfs.c +++ xfsprogs-2.10.2/mkfs/xfs_mkfs.c @@ -733,7 +733,7 @@ main( nodsflag = norsflag = 0; force_overwrite = 0; worst_freelist = 0; - lazy_sb_counters = 0; + lazy_sb_counters = 1; memset(&fsx, 0, sizeof(fsx)); memset(&xi, 0, sizeof(xi)); Index: xfsprogs-2.10.2/man/man8/mkfs.xfs.8 =================================================================== --- xfsprogs-2.10.2.orig/man/man8/mkfs.xfs.8 +++ xfsprogs-2.10.2/man/man8/mkfs.xfs.8 @@ -455,9 +455,10 @@ counter values without needed to keep th This gives significant improvements in performance on some configurations. The default .I value -is 0 (off) so you must specify -.B lazy-count=1 -if you want to make use of this feature. +is 1 (on) so you must specify +.B lazy-count=0 +if you want to disable this feature for older kernels which don't support +it. .RE .TP .BI \-n " naming_options" From cattelan@thebarn.com Tue Apr 21 17:11:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210, J_CHICKENPOX_43,J_CHICKENPOX_45 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3LMBACc155874 for ; Tue, 21 Apr 2009 17:11:11 -0500 X-ASG-Debug-ID: 1240351866-0ee800dd0000-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 C6A2622E1AA for ; Tue, 21 Apr 2009 15:11:06 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id LIJs7I1PSmzCklC4 for ; Tue, 21 Apr 2009 15:11:06 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3LM9YEE088262; Tue, 21 Apr 2009 17:09:35 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <49EE441E.6040606@thebarn.com> Date: Tue, 21 Apr 2009 17:09:34 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Mike Ashton CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements References: <20090421142333.GA5197@fysh.org> In-Reply-To: <20090421142333.GA5197@fysh.org> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1240351866 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0020 1.0000 -2.0079 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.26 X-Barracuda-Spam-Status: No, SCORE=-1.26 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE_7580B X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23837 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.75 BSF_RULE_7580B BODY: Custom Rule 7580B X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Mike Ashton wrote: > Hello folks, > > I've been using XFS as my filesystem of choice for many, many years > now and for all the years of, er, joy, I have encountered a few > difficulties with filesystem recovery after machine crashes/hard > reboots and so on. Google confirms that I'm not alone in this. > > You're all probably perfectly well aware that fsck.xfs is a shell > script that does nothing much, on the premise that XFS has a journal > and therefore doesn't suffer from the routine corruption of more > primitive filesystems. However, I have found that the journal itself > is prone to corruption (bad clientid, and friends) on contemporary, > even enterprise class, hardware. Now I don't doubt this is due to > stupidities in the underlying hardware - SATA disks' naughty > non-battery write caches or what have you - and XFS is not to blame, > but I feel we maybe need to be more pragmatic about these annoying > realities. > > I'm also sure that this is not the first time this design decision has > been challenged, although a search of the list archives implies that > it hasn't been suggested in the forum. Forgive me if I'm wrong there. > > I'm here to make the case for fsck.xfs being enhanced to verify the > journal and invoke xfs_repair -L in the event that it's screwed. Now, > I'm sure half of you just sprayed coffee at the screen and are already > firing up an angry reply, but bear with me. Automatic filesystem > repair is a normal, everyday necessity. It's what non-journaling > filesystems do all the time; the days of offering the sysadmin the > choice of whether to repair this inode count, or that dnode entry are > long gone. A filesystem with a corrupted journal is no use to me; I'm > not going to be able to repair the journal. All I'm going to do is > invoke xfs_repair -L and pray. I'm happy for that, *as an option* ( > as it is on all fsck invocations) to happen on boot without my > intervention. > > I'd like that to happen. I do not accept that fsck.xfs has a null > function. The filesystem is kept consistent by the journal, but the > journal needs to be verified and the filesystem repaired otherwise. > Otherwise, fsck passes, mount fails, my computer doesn't boot and that > makes me a sad panda. Thankfully this would be a pretty quick > operation - I'm sure there's a lot of cleverness that could be > incorporated into a binary fsck.xfs that could detect, report on and > repair all sorts of exciting situations, but you can even do it > primitively in shell by simply trying to mount it. I've included an > example of what I mean at the end. > > Hopefully, you'll give this some serious consideration. I'm quite > sure this is going to end up being a bun-fight issue, but I'm in no > way implying that you didn't think about what you were doing when you > made the decision to make mkfs.xfs do nothing. I'm just asking that > you consider again whether it now needs to do something, because that > hasn't worked as a strategy, even if that is due to hardware > manufacturers cutting corners. Well step back a bit, fsck.xfs exists simply to satisfy the initial boot scripts that invokes fsck -t $fs_type. The reason fsck.xfs does nothing and should continue to do nothing is that by the time you have access to the boot scripts and the fsck.xfs program the root filesystem has already been mounted. Which means the root file system has successfully made it through either a clean mount or a log replay mount, neither of which needs additional verification. It would not be unreasonable to do what you are suggesting in an initrd startup script, provided xfs_repair was included in the initrd (which has size and library requirements). This would probably be a matter of first implementing it and then convincing the mkinitrd maintainers to add the support. - -Russell Cattelan > > Thanks, > Mike. > > #!/bin/sh -f > # > # Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. > # > > AUTO=false > while getopts ":aApy" c > do > case $c in > a|A|p|y) AUTO=true;; > esac > done > eval DEV=\${$#} > if [ ! -e $DEV ]; then > echo "$0: $DEV does not exist" > exit 8 > fi > if $AUTO; then > # rw initrd should allow mkdir but direct mounting of / read-only, we require to have a /mnt already > mkdir -p /mnt > if [ ! -d /mnt ] > then > echo no /mnt to test XFS journal recovery > exit 0 > fi > if mount -t xfs "$DEV" /mnt -o ro,norecovery > then > umount /mnt > echo "$DEV is an xfs filesystem" > if mount -t xfs "$DEV" /mnt > then > echo "Recovery by journal successful" > umount /mnt > else > echo "writable mount of $DEV failed - invoking xfs_repair" > xfs_repair -L "$DEV" > fi > else > echo "$DEV appears not to be an xfs filesystem" > fi > else > echo "If you wish to check the consistency of an XFS filesystem or" > echo "repair a damaged filesystem, see xfs_check(8) and xfs_repair(8)." > fi > exit 0 > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJ7kQeNRmM+OaGhBgRAr5CAJ9jIct6ae0NpY/VRazObuW2C3gKIwCfeItG hF1kk8ymY6CwLg/N8pNlD1o= =7hvb -----END PGP SIGNATURE----- From kevin@kevinjamieson.com Tue Apr 21 19:54:59 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M0swLM162333 for ; Tue, 21 Apr 2009 19:54:58 -0500 X-ASG-Debug-ID: 1240361858-5274032e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from idcmail-mo1so.shaw.ca (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9A3FC143BAA0 for ; Tue, 21 Apr 2009 17:57:38 -0700 (PDT) Received: from idcmail-mo1so.shaw.ca (idcmail-mo1so.shaw.ca [24.71.223.10]) by cuda.sgi.com with ESMTP id 3UfzXrhu0gZ1GLIi for ; Tue, 21 Apr 2009 17:57:38 -0700 (PDT) Received: from pd3ml1so-ssvc.prod.shaw.ca ([10.0.141.140]) by pd4mo1so-svcs.prod.shaw.ca with ESMTP; 21 Apr 2009 18:54:53 -0600 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.0 c=0 a=eJfxgxciAAAA:8 a=13AKRi5klqKkBjPteacA:9 a=hMd0vjwpnmwb5PTSDDP08MchEasA:4 a=T6zWE12s9mEA:10 a=p0z0BktFnWsA:10 a=M8wPuokCQ-QA:10 Received: from s0106002078c6464f.vn.shawcable.net (HELO mail.kevinjamieson.com) ([24.87.84.75]) by pd3ml1so-dmz.prod.shaw.ca with ESMTP; 21 Apr 2009 18:54:53 -0600 Received: by mail.kevinjamieson.com (Postfix, from userid 1102) id 27A8420200; Tue, 21 Apr 2009 17:54:53 -0700 (PDT) Received: from squirrel.kevinjamieson.com (localhost [127.0.0.1]) by mail.kevinjamieson.com (Postfix) with ESMTP id 5D71420058; Tue, 21 Apr 2009 17:54:52 -0700 (PDT) Received: from 24.80.224.145 (SquirrelMail authenticated user kevin) by squirrel.kevinjamieson.com with HTTP; Tue, 21 Apr 2009 17:54:52 -0700 (PDT) Message-ID: <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> In-Reply-To: <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> Date: Tue, 21 Apr 2009 17:54:52 -0700 (PDT) X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 From: "Kevin Jamieson" To: kevin@kevinjamieson.com Cc: xfs@oss.sgi.com Reply-To: kevin@kevinjamieson.com User-Agent: SquirrelMail/1.4.9a MIME-Version: 1.0 Content-Type: text/plain;charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Priority: 3 (Normal) Importance: Normal X-Barracuda-Connect: idcmail-mo1so.shaw.ca[24.71.223.10] X-Barracuda-Start-Time: 1240361858 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0069 1.0000 -1.9760 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.48 X-Barracuda-Spam-Status: No, SCORE=-1.48 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_SC0_SA_TO_FROM_ADDR_MATCH X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23848 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_SC0_SA_TO_FROM_ADDR_MATCH Sender Address Matches Recipient Address X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: > On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: > >> For SLES that usually is the best route... >> >> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html looks >> applicable... don't think it ever got merged though. >> >> perhaps you could test it? > > Thanks, Eric. I will test Lachlan's patch on our system. To follow this up, since applying the patch from the above thread there have been no re-occurrences of the issue on our test servers over the past month. Regards, Kevin From sandeen@sandeen.net Tue Apr 21 21:17:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M2H1Y2165048 for ; Tue, 21 Apr 2009 21:17:02 -0500 X-ASG-Debug-ID: 1240366617-1ea701d70000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6DC8022E711 for ; Tue, 21 Apr 2009 19:16:57 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Ep2fLvo3rqDpRIbj for ; Tue, 21 Apr 2009 19:16: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 mail.sandeen.net (Postfix) with ESMTP id 80A92AC358C; Tue, 21 Apr 2009 21:16:55 -0500 (CDT) Message-ID: <49EE7E17.8050006@sandeen.net> Date: Tue, 21 Apr 2009 21:16:55 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: kevin@kevinjamieson.com CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> In-Reply-To: <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.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: 1240366618 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23851 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Kevin Jamieson wrote: > On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: >> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: >> >>> For SLES that usually is the best route... >>> >>> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html looks >>> applicable... don't think it ever got merged though. >>> >>> perhaps you could test it? >> Thanks, Eric. I will test Lachlan's patch on our system. > > To follow this up, since applying the patch from the above thread there > have been no re-occurrences of the issue on our test servers over the past > month. And you hit it pretty reliably before, right? Sounds like we need to give that a pretty strong eyeball and get it merged, perhaps. -Eric From felixb@sgi.com Tue Apr 21 21:31:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M2VnkT165886 for ; Tue, 21 Apr 2009 21:31:49 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 82DC5304053 for ; Tue, 21 Apr 2009 19:31:43 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id DF77D7000103; Tue, 21 Apr 2009 21:31:42 -0500 (CDT) Cc: kevin@kevinjamieson.com, xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Eric Sandeen In-Reply-To: <49EE7E17.8050006@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Date: Tue, 21 Apr 2009 21:31:40 -0500 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 21, 2009, at 9:16 PM, Eric Sandeen wrote: > Kevin Jamieson wrote: >> On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: >>> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: >>> >>>> For SLES that usually is the best route... >>>> >>>> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html >>>> looks >>>> applicable... don't think it ever got merged though. >>>> >>>> perhaps you could test it? >>> Thanks, Eric. I will test Lachlan's patch on our system. >> >> To follow this up, since applying the patch from the above thread >> there >> have been no re-occurrences of the issue on our test servers over >> the past >> month. > > And you hit it pretty reliably before, right? Sounds like we need to > give that a pretty strong eyeball and get it merged, perhaps. I was looking at this patch too. But I could never reproduce the problem, even with Lachlan's test program. Kevin, any idea what kind of io load triggered this problem? The patch looks right, but I really want to prove the problem exists, and the patch addresses it. Felix From sandeen@sandeen.net Tue Apr 21 21:33:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M2X4O1165947 for ; Tue, 21 Apr 2009 21:33:05 -0500 X-ASG-Debug-ID: 1240367581-1e9d02450000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 84BC422E8BF for ; Tue, 21 Apr 2009 19:33:01 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id eZW8aAAzbc7Ydx3b for ; Tue, 21 Apr 2009 19:33:01 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id ECB00AC358C; Tue, 21 Apr 2009 21:33:00 -0500 (CDT) Message-ID: <49EE81DB.7040304@sandeen.net> Date: Tue, 21 Apr 2009 21:32:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Felix Blyakher CC: kevin@kevinjamieson.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> 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: 1240367581 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23852 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: > On Apr 21, 2009, at 9:16 PM, Eric Sandeen wrote: > >> Kevin Jamieson wrote: >>> On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: >>>> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: >>>> >>>>> For SLES that usually is the best route... >>>>> >>>>> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html >>>>> looks >>>>> applicable... don't think it ever got merged though. >>>>> >>>>> perhaps you could test it? >>>> Thanks, Eric. I will test Lachlan's patch on our system. >>> To follow this up, since applying the patch from the above thread >>> there >>> have been no re-occurrences of the issue on our test servers over >>> the past >>> month. >> And you hit it pretty reliably before, right? Sounds like we need to >> give that a pretty strong eyeball and get it merged, perhaps. > > I was looking at this patch too. > But I could never reproduce the problem, even with Lachlan's test > program. Kevin, any idea what kind of io load triggered this problem? > The patch looks right, but I really want to prove the problem > exists, and the patch addresses it. > > Felix > FWIW I can't reproduce either, with the stated commandline. Should try it with a 1k blocksize, though - maybe Lachlan tested 4k on 16k page ia64? -Eric From felixb@sgi.com Tue Apr 21 21:35:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M2ZglQ166069 for ; Tue, 21 Apr 2009 21:35:42 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 73E0430405F for ; Tue, 21 Apr 2009 19:35:39 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 0AB307000103; Tue, 21 Apr 2009 21:35:39 -0500 (CDT) Cc: kevin@kevinjamieson.com, xfs@oss.sgi.com Message-Id: <53FCDA81-0C62-4B16-AAA7-C2FF03C78D01@sgi.com> From: Felix Blyakher To: Eric Sandeen In-Reply-To: <49EE81DB.7040304@sandeen.net> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Date: Tue, 21 Apr 2009 21:35:38 -0500 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> <49EE81DB.7040304@sandeen.net> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 21, 2009, at 9:32 PM, Eric Sandeen wrote: > Felix Blyakher wrote: >> On Apr 21, 2009, at 9:16 PM, Eric Sandeen wrote: >> >>> Kevin Jamieson wrote: >>>> On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: >>>>> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: >>>>> >>>>>> For SLES that usually is the best route... >>>>>> >>>>>> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html >>>>>> looks >>>>>> applicable... don't think it ever got merged though. >>>>>> >>>>>> perhaps you could test it? >>>>> Thanks, Eric. I will test Lachlan's patch on our system. >>>> To follow this up, since applying the patch from the above thread >>>> there >>>> have been no re-occurrences of the issue on our test servers over >>>> the past >>>> month. >>> And you hit it pretty reliably before, right? Sounds like we need >>> to >>> give that a pretty strong eyeball and get it merged, perhaps. >> >> I was looking at this patch too. >> But I could never reproduce the problem, even with Lachlan's test >> program. Kevin, any idea what kind of io load triggered this problem? >> The patch looks right, but I really want to prove the problem >> exists, and the patch addresses it. >> >> Felix >> > > FWIW I can't reproduce either, with the stated commandline. > > Should try it with a 1k blocksize, though - maybe Lachlan tested 4k on > 16k page ia64? That's what I've tested on. Felix From sandeen@sandeen.net Tue Apr 21 21:38:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M2cBvh166206 for ; Tue, 21 Apr 2009 21:38:11 -0500 X-ASG-Debug-ID: 1240368051-0725003e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 245F4143BF5B for ; Tue, 21 Apr 2009 19:40:51 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id qMfdvqTjOxj2kgsW for ; Tue, 21 Apr 2009 19:40:51 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id B4756AC358C; Tue, 21 Apr 2009 21:38:06 -0500 (CDT) Message-ID: <49EE830E.6020808@sandeen.net> Date: Tue, 21 Apr 2009 21:38:06 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Felix Blyakher CC: kevin@kevinjamieson.com, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> <49EE81DB.7040304@sandeen.net> <53FCDA81-0C62-4B16-AAA7-C2FF03C78D01@sgi.com> In-Reply-To: <53FCDA81-0C62-4B16-AAA7-C2FF03C78D01@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: 1240368052 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23853 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: > On Apr 21, 2009, at 9:32 PM, Eric Sandeen wrote: > >> Felix Blyakher wrote: >>> On Apr 21, 2009, at 9:16 PM, Eric Sandeen wrote: >>> >>>> Kevin Jamieson wrote: >>>>> On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: >>>>>> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: >>>>>> >>>>>>> For SLES that usually is the best route... >>>>>>> >>>>>>> However, http://oss.sgi.com/archives/xfs/2009-02/msg00220.html >>>>>>> looks >>>>>>> applicable... don't think it ever got merged though. >>>>>>> >>>>>>> perhaps you could test it? >>>>>> Thanks, Eric. I will test Lachlan's patch on our system. >>>>> To follow this up, since applying the patch from the above thread >>>>> there >>>>> have been no re-occurrences of the issue on our test servers over >>>>> the past >>>>> month. >>>> And you hit it pretty reliably before, right? Sounds like we need >>>> to >>>> give that a pretty strong eyeball and get it merged, perhaps. >>> I was looking at this patch too. >>> But I could never reproduce the problem, even with Lachlan's test >>> program. Kevin, any idea what kind of io load triggered this problem? >>> The patch looks right, but I really want to prove the problem >>> exists, and the patch addresses it. >>> >>> Felix >>> >> FWIW I can't reproduce either, with the stated commandline. >> >> Should try it with a 1k blocksize, though - maybe Lachlan tested 4k on >> 16k page ia64? > > That's what I've tested on. Ah, well, I just spoke with Lachlan and he said he tested on x86_64, 4k/4k. So hrm... -Eric From lmcilroy@redhat.com Tue Apr 21 22:07:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M37UqV167779 for ; Tue, 21 Apr 2009 22:07:32 -0500 X-ASG-Debug-ID: 1240369644-1e9d03060000-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 C16DB22E970 for ; Tue, 21 Apr 2009 20:07:24 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id b7xWsAH0DQA1rkkP for ; Tue, 21 Apr 2009 20:07:24 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3M36wGm005016; Tue, 21 Apr 2009 23:07:21 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3M36udZ005658; Tue, 21 Apr 2009 23:06:57 -0400 Date: Tue, 21 Apr 2009 23:06:56 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Eric Sandeen Cc: xfs@oss.sgi.com, Felix Blyakher Message-ID: <811197347.242901240369616266.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <1416563271.242851240369384712.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1240369644 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23854 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Eric Sandeen" wrote: > Felix Blyakher wrote: > > On Apr 21, 2009, at 9:32 PM, Eric Sandeen wrote: > > > >> Felix Blyakher wrote: > >>> On Apr 21, 2009, at 9:16 PM, Eric Sandeen wrote: > >>> > >>>> Kevin Jamieson wrote: > >>>>> On Thu, March 12, 2009 4:13 pm, Kevin Jamieson wrote: > >>>>>> On Thu, March 12, 2009 12:23 pm, Eric Sandeen wrote: > >>>>>> > >>>>>>> For SLES that usually is the best route... > >>>>>>> > >>>>>>> However, > http://oss.sgi.com/archives/xfs/2009-02/msg00220.html > >>>>>>> looks > >>>>>>> applicable... don't think it ever got merged though. > >>>>>>> > >>>>>>> perhaps you could test it? > >>>>>> Thanks, Eric. I will test Lachlan's patch on our system. > >>>>> To follow this up, since applying the patch from the above > thread > >>>>> there > >>>>> have been no re-occurrences of the issue on our test servers > over > >>>>> the past > >>>>> month. > >>>> And you hit it pretty reliably before, right? Sounds like we > need > >>>> to > >>>> give that a pretty strong eyeball and get it merged, perhaps. > >>> I was looking at this patch too. > >>> But I could never reproduce the problem, even with Lachlan's test > >>> program. Kevin, any idea what kind of io load triggered this > problem? > >>> The patch looks right, but I really want to prove the problem > >>> exists, and the patch addresses it. > >>> > >>> Felix > >>> > >> FWIW I can't reproduce either, with the stated commandline. > >> > >> Should try it with a 1k blocksize, though - maybe Lachlan tested 4k > on > >> 16k page ia64? > > > > That's what I've tested on. > > Ah, well, I just spoke with Lachlan and he said he tested on x86_64, > 4k/4k. So hrm... You'll probably need to tweak the arguments to the test program to generate the precise senario to trigger the race. I remember having to play around with them until I got it to crash reliably. It will depend on how fast your CPUs are, how much of the file is cached before it is paged to disk, how fast the disks are, etc... The race requires a thread to be executing xfs_file_last_byte() while another thread is modifying the file's extent map - in particular shrinking the extent map by merging extents. > > -Eric > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From knikanth@suse.de Wed Apr 22 01:47:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=unavailable version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M6lhax186658 for ; Wed, 22 Apr 2009 01:47:44 -0500 X-ASG-Debug-ID: 1240383023-490100650000-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 7A868143C4C4; Tue, 21 Apr 2009 23:50:23 -0700 (PDT) Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by cuda.sgi.com with ESMTP id Yw4LOAlpdyo8fYZ2; Tue, 21 Apr 2009 23:50:23 -0700 (PDT) Received: from Relay1.suse.de (mail2.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 50D6E79727; Wed, 22 Apr 2009 08:47:36 +0200 (CEST) From: Nikanth Karthikesan Organization: suse.de To: Dave Chinner X-ASG-Orig-Subj: [PATCH] xfs: fix xfs_alloc_ioend_bio code to try and get atleast a smaller bio Subject: [PATCH] xfs: fix xfs_alloc_ioend_bio code to try and get atleast a smaller bio Date: Wed, 22 Apr 2009 12:15:17 +0530 User-Agent: KMail/1.11.1 (Linux/2.6.27.21-0.1-default; KDE/4.2.1; x86_64; ; ) Cc: xfs-masters@oss.sgi.com, Christoph Hellwig , Jens Axboe , xfs@oss.sgi.com References: <200904151609.30677.knikanth@suse.de> <20090420010237.GF16929@discord.disaster> In-Reply-To: <20090420010237.GF16929@discord.disaster> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904221215.18335.knikanth@suse.de> X-Barracuda-Connect: cantor2.suse.de[195.135.220.15] X-Barracuda-Start-Time: 1240383025 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23869 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The intent of the code in xfs_alloc_ioend_bio() is that if we can't get a large bio immediately, try a smaller one which is more likely to succeed when we are under memory pressure. i.e. we will get IO moving faster than if we waited for a maximally sized biovec to be allocated. But GFP_NOIO implies __GFP_WAIT which would return only if it can allocate the bio. So the first attempt to get a larger bio itself would return only after it succeeds, which makes the logic useless. Change it to try with GFP_NOWAIT for a bio. If not possible wait for it. See http://oss.sgi.com/archives/xfs-masters/2009-04/msg00027.html for the discussion. Signed-off-by: Nikanth Karthikesan --- diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 7ec89fc..002ce7f 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@ -419,12 +419,15 @@ xfs_alloc_ioend_bio( struct buffer_head *bh) { struct bio *bio; - int nvecs = bio_get_nr_vecs(bh->b_bdev); + int nr_iovecs = bio_get_nr_vecs(bh->b_bdev); + int nvecs = nr_iovecs; do { - bio = bio_alloc(GFP_NOIO, nvecs); - nvecs >>= 1; - } while (!bio); + bio = bio_alloc(GFP_NOWAIT, nvecs); + } while (!bio && (nvecs >>= 1)); + + if (unlikely(!bio)) + bio = bio_alloc(GFP_NOIO, nr_iovecs); ASSERT(bio->bi_private == NULL); bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9); From mike@fysh.org Wed Apr 22 04:45:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3M9jXFc192114 for ; Wed, 22 Apr 2009 04:45:33 -0500 X-ASG-Debug-ID: 1240393528-3d1e007d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pond.fysh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 020F722F99C for ; Wed, 22 Apr 2009 02:45:28 -0700 (PDT) Received: from pond.fysh.org (pond.fysh.org [166.84.7.109]) by cuda.sgi.com with ESMTP id svqsscZZQFo0GtqR for ; Wed, 22 Apr 2009 02:45:28 -0700 (PDT) Received: from mike by pond.fysh.org with local (Exim 4.69 #1 (Debian)) id 1LwZ1D-0006gN-Um for xfs@oss.sgi.com; Wed, 22 Apr 2009 10:45:28 +0100 Date: Wed, 22 Apr 2009 10:45:27 +0100 From: Mike Ashton To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements Message-ID: <20090422094527.GA16600@fysh.org> References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE441E.6040606@thebarn.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: pond.fysh.org[166.84.7.109] X-Barracuda-Start-Time: 1240393530 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0040 1.0000 -1.9949 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.99 X-Barracuda-Spam-Status: No, SCORE=-1.99 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23879 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 05:09:34PM -0500, Russell Cattelan wrote: Hi Russell (and others reading), and thanks for your reply. > Well step back a bit, fsck.xfs exists simply to satisfy the initial > boot scripts that invokes fsck -t $fs_type. The reason fsck.xfs > does nothing and should continue to do nothing is that by the time > you have access to the boot scripts and the fsck.xfs program the > root filesystem has already been mounted. Which means the root file > system has successfully made it through either a clean mount or a > log replay mount, neither of which needs additional verification. Now that's an interesting point; I hadn't seen it quite like that before. It's now very clear to me that there's a semantic inconsistency between xfs and, say, ext2 in that the initial read only mount of ext2 is more directly analogous to a read-only _norecovery_ mount of xfs. The filesystem at that stage might be in an inconsistent state, but there's an expectation that you'll be able to read fsck (/xfs_repair) from it. By handling the "fsck stage" at the time of the initial read only mount, some fragility has been introduced into the process. The filesystem now only mounts if it's in a consistent state (bad!), even though we've redefined what "consistent" means to refer to journal integrity rather than the underlying filesystem integrity (good). With badly behaved hardware, which seem prevalent, or any bugs which do get into xfs we could actually end up with xfs being less fault tolerant and less reliable in general use than other filesystems, which would be a bit of a shame. > It would not be unreasonable to do what you are suggesting in an > initrd startup script, provided xfs_repair was included in the > initrd (which has size and library requirements). I think we can do it on direct mounts, but only if we can get to the bottom of readonly/norecovery semantics. Obviously we don't necessarily want readonly mounts to be non recovered by default (although there is an argument for that). Would it be crazy to propose a filesystem flag to control which default recovery behaviour a filesystem has? A root filesystem isn't mounted read-only except a) on boot and b) when being tinkered with by someone competent, so I think it would be useful to be able to tell such a filesystem that it shouldn't attempt journal recovery on readonly mount, which would enable a meaningful use of a meaningful fsck. What do you think about that? > This would probably be a matter of first implementing it and then > convincing the mkinitrd maintainers to add the support. I'm a bit out of my depth with the politics of that. This would be a different person for each distribution? Mike. From jeffpc@josefsipek.net Wed Apr 22 14:08:21 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3MJ8K2m219259 for ; Wed, 22 Apr 2009 14:08:21 -0500 X-ASG-Debug-ID: 1240427296-167502ea0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id EF4291CDD316 for ; Wed, 22 Apr 2009 12:08:16 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id EG1LN59a4MEcZHyy for ; Wed, 22 Apr 2009 12:08:16 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 417CC1C00E0E; Wed, 22 Apr 2009 15:08:16 -0400 (EDT) Date: Wed, 22 Apr 2009 15:08:16 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] make lazy-count=1 the default Subject: Re: [PATCH] make lazy-count=1 the default Message-ID: <20090422190816.GZ3709@josefsipek.net> References: <49EE3EDD.1090305@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE3EDD.1090305@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240427296 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23917 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 04:47:09PM -0500, Eric Sandeen wrote: > If folks think it's been out there long enough, let's make > lazy-count=1 the mkfs default going forward? > > Signed-off-by: Eric Sandeen Sounds good! It may be worth mentioning the kernel version that introduced lazy-count in the manpage. Josef 'Jeff' Sipek. -- It used to be said [...] that AIX looks like one space alien discovered Unix, and described it to another different space alien who then implemented AIX. But their universal translators were broken and they'd had to gesture a lot. - Paul Tomblin From jeffpc@josefsipek.net Wed Apr 22 14:10:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3MJA9VQ219370 for ; Wed, 22 Apr 2009 14:10:09 -0500 X-ASG-Debug-ID: 1240427573-768f02100000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 057A4143F54F for ; Wed, 22 Apr 2009 12:12:53 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id VHpkc82AZnFw01LE for ; Wed, 22 Apr 2009 12:12:53 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 062D41C00E0E; Wed, 22 Apr 2009 15:10:05 -0400 (EDT) Date: Wed, 22 Apr 2009 15:10:04 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: filter out imaxpct value in test 096 Subject: Re: [PATCH] xfstests: filter out imaxpct value in test 096 Message-ID: <20090422191004.GA3709@josefsipek.net> References: <49EE2664.7030701@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE2664.7030701@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240427574 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23918 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 03:02:44PM -0500, Eric Sandeen wrote: > xfstests: filter out imaxpct value in test 096 > > On large filesystems, imaxpc drops from 25 to 5 > > Signed-off-by: Eric Sandeen Makes sense. Josef 'Jeff' Sipek. -- What is the difference between Mechanical Engineers and Civil Engineers? Mechanical Engineers build weapons, Civil Engineers build targets. From jeffpc@josefsipek.net Wed Apr 22 14:12:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3MJCT9M219461 for ; Wed, 22 Apr 2009 14:12:30 -0500 X-ASG-Debug-ID: 1240427546-1664030e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C4FAA1CDD35A for ; Wed, 22 Apr 2009 12:12:26 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id 7gUpCHKxm4EbYmZY for ; Wed, 22 Apr 2009 12:12:26 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 9753E1C00E0E; Wed, 22 Apr 2009 15:12:26 -0400 (EDT) Date: Wed, 22 Apr 2009 15:12:26 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Subject: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Message-ID: <20090422191226.GB3709@josefsipek.net> References: <49EE28EA.4010409@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE28EA.4010409@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240427546 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23917 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 03:13:30PM -0500, Eric Sandeen wrote: > I was experimenting w/ default lazy-count=1, and it broke a few tests. > Seems simplest to enforce lazy-count=0 in the common.log routines > for now, and fix up the output? (vs. updating all the expected > output for these tests...) > > Signed-off-by: Eric Sandeen Hrm...are there any tests that explicitly check lazy-count=1? Josef 'Jeff' Sipek. -- Mankind invented the atomic bomb, but no mouse would ever construct a mousetrap. - Albert Einstein From sandeen@sandeen.net Wed Apr 22 14:23:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3MJNBYv220175 for ; Wed, 22 Apr 2009 14:23:11 -0500 X-ASG-Debug-ID: 1240428187-166d03e00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 9D7521CDD1BD for ; Wed, 22 Apr 2009 12:23:07 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id Ztb6X0QThFTmNMmS for ; Wed, 22 Apr 2009 12:23:07 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3MJN5Sc021508; Wed, 22 Apr 2009 15:23:05 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3MJN26U009231; Wed, 22 Apr 2009 15:23:03 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3MJN0cL016338; Wed, 22 Apr 2009 15:23:02 -0400 Message-ID: <49EF6E93.1050204@sandeen.net> Date: Wed, 22 Apr 2009 14:22:59 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: "Josef 'Jeff' Sipek" CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Subject: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 References: <49EE28EA.4010409@sandeen.net> <20090422191226.GB3709@josefsipek.net> In-Reply-To: <20090422191226.GB3709@josefsipek.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240428187 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23918 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Josef 'Jeff' Sipek wrote: > On Tue, Apr 21, 2009 at 03:13:30PM -0500, Eric Sandeen wrote: >> I was experimenting w/ default lazy-count=1, and it broke a few tests. >> Seems simplest to enforce lazy-count=0 in the common.log routines >> for now, and fix up the output? (vs. updating all the expected >> output for these tests...) >> >> Signed-off-by: Eric Sandeen > > Hrm...are there any tests that explicitly check lazy-count=1? not that I know of, but you can set it in MKFS_OPTIONS or something like that, IIRC. -Eric From andi@firstfloor.org Wed Apr 22 16:45:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3MLjNPM226006 for ; Wed, 22 Apr 2009 16:45:24 -0500 X-ASG-Debug-ID: 1240436719-117100d90000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from one.firstfloor.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B2BBF232879 for ; Wed, 22 Apr 2009 14:45:19 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id kDz8CIGhseAzxyUX for ; Wed, 22 Apr 2009 14:45:19 -0700 (PDT) Received: from basil.firstfloor.org (p5B3CB5F5.dip0.t-ipconnect.de [91.60.181.245]) by one.firstfloor.org (Postfix) with ESMTP id D64631890294; Wed, 22 Apr 2009 23:48:49 +0200 (CEST) Received: by basil.firstfloor.org (Postfix, from userid 1000) id 293BB1D023D; Wed, 22 Apr 2009 23:45:12 +0200 (CEST) To: Mike Ashton Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements From: Andi Kleen References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> Date: Wed, 22 Apr 2009 23:45:11 +0200 In-Reply-To: <20090422094527.GA16600@fysh.org> (Mike Ashton's message of "Wed, 22 Apr 2009 10:45:27 +0100") Message-ID: <87ws9cnz14.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1240436720 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23926 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Mike Ashton writes: > With badly behaved hardware, > which seem prevalent, or any bugs which do get into xfs we could > actually end up with xfs being less fault tolerant and less reliable > in general use than other filesystems, which would be a bit of a > shame. Most Linux file systems are not very fault tolerant in this sense; e.g. on ext3 you have have to press return and accept lots of scary messages to get through fsck. -Andi -- ak@linux.intel.com -- Speaking for myself only. From sandeen@sandeen.net Wed Apr 22 19:33:41 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_31, J_CHICKENPOX_42,J_CHICKENPOX_43,J_CHICKENPOX_44,J_CHICKENPOX_45, J_CHICKENPOX_48,J_CHICKENPOX_52,J_CHICKENPOX_56,J_CHICKENPOX_62, J_CHICKENPOX_63,J_CHICKENPOX_65,J_CHICKENPOX_66,J_CHICKENPOX_92 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3N0XfW1233547 for ; Wed, 22 Apr 2009 19:33:41 -0500 X-ASG-Debug-ID: 1240446982-183702100000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 612F11440D71 for ; Wed, 22 Apr 2009 17:36:22 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id LG0KhR5q9DqidLv0 for ; Wed, 22 Apr 2009 17:36:22 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id CED4CA9B0D7 for ; Wed, 22 Apr 2009 19:33:31 -0500 (CDT) Message-ID: <49EFB75B.5030700@sandeen.net> Date: Wed, 22 Apr 2009 19:33:31 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: xfs-oss X-ASG-Orig-Subj: [PATCH] xfstests: add aio-dio-regress tests Subject: [PATCH] xfstests: add aio-dio-regress tests 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: 1240446984 X-Barracuda-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, BSF_SC0_MJ615 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23939 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MJ615 Custom Rule MJ615 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Think it's worth pulling this in? Also not sure where to put it, under the top dir or under src ... Takes about 250s to run them all. Could break out the longer one into a separate test so the rest could be in quick. -Eric diff --git a/206 b/206 new file mode 100755 index 0000000..026059f --- /dev/null +++ b/206 @@ -0,0 +1,50 @@ +#! /bin/sh +# FS QA Test No. 206 +# +# Run the aio-dio-regress testsuite +# +#----------------------------------------------------------------------- +# Copyright (c) 2009 Eric Sandeen. All Rights Reserved. +#----------------------------------------------------------------------- +# +# creator +owner=sandeen@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.* +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here + +_supported_fs xfs udf nfs +_supported_os Linux + +AIO_TESTS="aio-dio-extend-stat aio-dio-invalidate-failure \ + aio-dio-invalidate-readahead aio-dio-subblock-eof-read \ + aio-free-ring-with-bogus-nr-pages \ + aio-io-setup-with-nonwritable-context-pointer" + +for AIO_TEST in $AIO_TESTS; do + rm -f $TEST_DIR/aio-testfile + echo "==${AIO_TEST}==" + aio-dio-regress/$AIO_TEST $TEST_DIR/aio-testfile 2>&1 +done +rm -f $TEST_DIR/aio-testfile + +# success, all done +status=0 +exit diff --git a/206.out b/206.out new file mode 100644 index 0000000..e5da95b --- /dev/null +++ b/206.out @@ -0,0 +1,13 @@ +QA output created by 206 +==aio-dio-extend-stat== +4000 iterations of racing extensions and collection passed +==aio-dio-invalidate-failure== +ran for 200 seconds without error, passing +==aio-dio-invalidate-readahead== +test ran for 30 seconds without error +==aio-dio-subblock-eof-read== +AIO read of last block in file succeeded. +==aio-free-ring-with-bogus-nr-pages== +aio-free-ring-with-bogus-nr-pages: Success! +==aio-io-setup-with-nonwritable-context-pointer== +aio-io-setup-with-nonwritable-context-pointer: Success! diff --git a/Makefile b/Makefile index b017580..41cae71 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,10 @@ LDIRT = config.log .dep config.status config.cache confdefs.h conftest* \ LIB_SUBDIRS = include lib TOOL_SUBDIRS = ltp src m4 +ifeq ($(HAVE_AIO), true) +TOOL_SUBDIRS += aio-dio-regress +endif + SUBDIRS = $(LIB_SUBDIRS) $(TOOL_SUBDIRS) default: include/builddefs include/config.h $(DMAPI_MAKEFILE) new remake check $(TESTS) diff --git a/aio-dio-regress/Makefile b/aio-dio-regress/Makefile new file mode 100644 index 0000000..eb9109d --- /dev/null +++ b/aio-dio-regress/Makefile @@ -0,0 +1,20 @@ +TOPDIR = .. +include $(TOPDIR)/include/builddefs + +TARGETS = $(basename $(wildcard *.c)) + +CFILES = $(TARGETS:=.c) +LDIRT = $(TARGETS) + +LIBAIO = -laio -lpthread + +default: $(TARGETS) + +include $(BUILDRULES) + +$(TARGETS): %: %.c + gcc -ggdb -Wall -laio -lpthread -o $@ $*.c + +install: + $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/aio-dio-regress + $(INSTALL) -m 755 $(TARGETS) $(PKG_LIB_DIR)/aio-dio-regress diff --git a/aio-dio-regress/aio-dio-extend-stat.c b/aio-dio-regress/aio-dio-extend-stat.c new file mode 100644 index 0000000..bdc8299 --- /dev/null +++ b/aio-dio-regress/aio-dio-extend-stat.c @@ -0,0 +1,163 @@ +#define __USE_GNU +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef O_DIRECT +#define O_DIRECT 040000 /* direct disk access hint */ +#endif + + +/* + * This was originally submitted to + * http://bugzilla.kernel.org/show_bug.cgi?id=6831 by + * Rafal Wijata . It caught a race in dio aio completion + * that would call aio_complete() before the dio callers would update i_size. + * A stat after io_getevents() would not see the new file size. + * + * The bug was fixed in the fs/direct-io.c completion reworking that appeared + * in 2.6.20. This test should fail on 2.6.19. + */ + +#define BUFSIZE 1024 + +static unsigned char buf[BUFSIZE] __attribute((aligned (512))); + +/* + * this was arbitrarily chosen to take about two seconds on a dual athlon in a + * debugging kernel.. it trips up long before that. + */ +#define MAX_AIO_EVENTS 4000 + +#define fail(fmt , args...) do {\ + printf(fmt , ##args); \ + exit(1); \ +} while (0) + +void fun_write1(void* ptr); +void fun_writeN(void* ptr); +void fun_read(void* ptr); + +int handle = 0; +io_context_t ctxp; +struct iocb *iocbs[MAX_AIO_EVENTS]; +struct io_event ioevents[MAX_AIO_EVENTS]; + +volatile int submittedSize = 0; //synchronization + +int main(int argc, char **argv) +{ + pthread_t thread_read; + pthread_t thread_write; + int i; + int ret; + + if (argc != 2) + fail("only arg should be file name\n"); + + for (i = 0; i < BUFSIZE; ++i) + buf[i] = 'A' + (char)(i % ('Z'-'A'+1)); + + buf[BUFSIZE-1] = '\n'; + + handle = open(argv[1], O_CREAT | O_TRUNC | O_DIRECT | O_RDWR, 0600); + if (handle == -1) + fail("failed to open test file %s, errno: %d\n", + argv[1], errno); + + memset(&ctxp, 0, sizeof(ctxp)); + ret = io_setup(MAX_AIO_EVENTS, &ctxp); + if (ret) + fail("io_setup returned %d\n", ret); + + for (i = 0; i < MAX_AIO_EVENTS; ++i) { + + iocbs[i] = calloc(1, sizeof(struct iocb)); + if (iocbs[i] == NULL) + fail("failed to allocate an iocb\n"); + +/* iocbs[i]->data = i; */ + iocbs[i]->aio_fildes = handle; + iocbs[i]->aio_lio_opcode = IO_CMD_PWRITE; + iocbs[i]->aio_reqprio = 0; + iocbs[i]->u.c.buf = buf; + iocbs[i]->u.c.nbytes = BUFSIZE; + iocbs[i]->u.c.offset = BUFSIZE*i; + } + + pthread_create(&thread_read, NULL, (void*)&fun_read, NULL); + pthread_create(&thread_write, NULL, (void*)&fun_writeN, NULL); + + pthread_join(thread_read, NULL); + pthread_join(thread_write, NULL); + + io_destroy(ctxp); + close(handle); + + printf("%u iterations of racing extensions and collection passed\n", + MAX_AIO_EVENTS); + + return 0; +} + +void fun_read(void *ptr) +{ + long n = MAX_AIO_EVENTS; + struct stat filestat; + long long exSize; + long i; + long r; + + while (n > 0) { + r = io_getevents(ctxp, 1, MAX_AIO_EVENTS, ioevents, NULL); + if (r < 0) + fail("io_getevents returned %ld\n", r); + + n -= r; + for (i = 0; i < r; ++i) { + if (ioevents[i].obj->u.c.nbytes != BUFSIZE) + fail("error in block: expacted %d bytes, " + "receiced %ld\n", BUFSIZE, + ioevents[i].obj->u.c.nbytes); + + exSize = ioevents[i].obj->u.c.offset + + ioevents[i].obj->u.c.nbytes; + fstat(handle, &filestat); + if (filestat.st_size < exSize) + fail("write of %lu bytes @%llu finished, " + "expected filesize at least %llu, but " + "got %ld\n", ioevents[i].obj->u.c.nbytes, + ioevents[i].obj->u.c.offset, exSize, + filestat.st_size); + } + } +} + +void fun_writeN(void *ptr) +{ + int i; + int ret; + + for(i = 0; i < MAX_AIO_EVENTS; ++i) { + ret = io_submit(ctxp, 1, &(iocbs[i])); + if (ret != 1) + fail("io_subit returned %d instead of 1\n", ret); + } +} + +void fun_write1(void *ptr) +{ + int ret; + + ret = io_submit(ctxp, MAX_AIO_EVENTS, iocbs); + if (ret != MAX_AIO_EVENTS) + fail("io_subit returned %d instead of %u\n", ret, + MAX_AIO_EVENTS); +} diff --git a/aio-dio-regress/aio-dio-invalidate-failure.c b/aio-dio-regress/aio-dio-invalidate-failure.c new file mode 100644 index 0000000..7cc4a4b --- /dev/null +++ b/aio-dio-regress/aio-dio-invalidate-failure.c @@ -0,0 +1,155 @@ +#define _XOPEN_SOURCE 500 /* pwrite */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * DIO invalidates the read cache after it writes. At one point it tried to + * return EIO if this failed. When called from AIO, though, this EIO return + * would clobber EIOCBQUEUED and cause fs/aio.c and fs/direct-io.c to complete + * an iocb twice. This typically references freed memory from an interrupt + * handler and oopses. + * + * This test hits the race after at most two minutes on a single spindle. It + * spins performing large dio writes. It also spins racing buffered writes. + * It assumes it's on ext3 using ordered writes. The ordered write bhs can be + * pinned by jbd as a transaction commits. If invalidate_inode_pages2_range() + * hits pages backed by those buffers ->releasepage will fail and it'll try to + * return -EIO. + */ +#ifndef O_DIRECT +#define O_DIRECT 040000 /* direct disk access hint */ +#endif + +#define GINORMOUS (32 * 1024 * 1024) + + +/* This test never survived to 180 seconds on a single spindle */ +#define SECONDS 200 + +static unsigned char buf[GINORMOUS] __attribute((aligned (512))); + +#define fail(fmt , args...) do {\ + printf(fmt , ##args); \ + exit(1); \ +} while (0) + +void spin_dio(int fd) +{ + io_context_t ctx; + struct iocb iocb; + struct iocb *iocbs[1] = { &iocb }; + struct io_event event; + int ret; + + io_prep_pwrite(&iocb, fd, buf, GINORMOUS, 0); + + ret = io_queue_init(1, &ctx); + if (ret) + fail("io_queue_init returned %d", ret); + + while (1) { + ret = io_submit(ctx, 1, iocbs); + if (ret != 1) + fail("io_submit returned %d instead of 1", ret); + + ret = io_getevents(ctx, 1, 1, &event, NULL); + if (ret != 1) + fail("io_getevents returned %d instead of 1", ret); + + if (event.res == -EIO) { + printf("invalidation returned -EIO, OK\n"); + exit(0); + } + + if (event.res != GINORMOUS) + fail("event res %ld\n", event.res); + } +} + +void spin_buffered(int fd) +{ + int ret; + + while (1) { + ret = pwrite(fd, buf, GINORMOUS, 0); + if (ret != GINORMOUS) + fail("buffered write returned %d", ret); + } +} + +static void alarm_handler(int signum) +{ +} + +int main(int argc, char **argv) +{ + pid_t buffered_pid; + pid_t dio_pid; + pid_t pid; + int fd; + int fd2; + int status; + + if (argc != 2) + fail("only arg should be file name"); + + fd = open(argv[1], O_DIRECT|O_CREAT|O_RDWR, 0644); + if (fd < 0) + fail("open dio failed: %d\n", errno); + + fd2 = open(argv[1], O_RDWR, 0644); + if (fd < 0) + fail("open failed: %d\n", errno); + + buffered_pid = fork(); + if (buffered_pid < 0) + fail("fork failed: %d\n", errno); + + if (buffered_pid == 0) { + spin_buffered(fd2); + exit(0); + } + + dio_pid = fork(); + if (dio_pid < 0) { + kill(buffered_pid, SIGKILL); + fail("fork failed: %d\n", errno); + } + + if (dio_pid == 0) { + spin_dio(fd); + exit(0); + } + + signal(SIGALRM, alarm_handler); + alarm(SECONDS); + + pid = wait(&status); + if (pid < 0 && errno == EINTR) { + /* if we timed out then we're done */ + kill(buffered_pid, SIGKILL); + kill(dio_pid, SIGKILL); + printf("ran for %d seconds without error, passing\n", SECONDS); + exit(0); + } + + if (pid == dio_pid) + kill(buffered_pid, SIGKILL); + else + kill(dio_pid, SIGKILL); + + /* + * pass on the child's pass/fail return code or fail if the child + * didn't exit cleanly. + */ + exit(WIFEXITED(status) ? WEXITSTATUS(status) : 1); +} diff --git a/aio-dio-regress/aio-dio-invalidate-readahead.c b/aio-dio-regress/aio-dio-invalidate-readahead.c new file mode 100644 index 0000000..3d72b13 --- /dev/null +++ b/aio-dio-regress/aio-dio-invalidate-readahead.c @@ -0,0 +1,172 @@ +#define _XOPEN_SOURCE 500 /* pwrite */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * sync DIO invalidates the read cache after it finishes the write. This + * is to invalidate cached pages which might have been brought in during + * the write. + * + * In http://lkml.org/lkml/2007/10/26/478 a user reported this failing + * for his case of readers and writers racing. It turned out that his + * reader wasn't actually racing with the writer, but read-ahead from + * the reader pushed reads up into the region that the writer was working + * on. + * + * This test reproduces his case. We have a writing thread tell + * a reading thread how far into the file it will find new data. + * The reader reads behind the writer, checking for stale data. + * If the kernel fails to invalidate the read-ahead after the + * write then the reader will see stale data. + */ +#ifndef O_DIRECT +#define O_DIRECT 040000 /* direct disk access hint */ +#endif + +#define FILE_SIZE (8 * 1024 * 1024) + +/* this test always failed before 10 seconds on a single spindle */ +#define SECONDS 30 + +#define fail(fmt , args...) do {\ + printf(fmt , ##args); \ + exit(1); \ +} while (0) + +int page_size; + +pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; +pthread_cond_t cond = PTHREAD_COND_INITIALIZER; +loff_t write_pos = 0; +loff_t read_pos = 0; +unsigned char byte = 0; + +static void *writer(void *arg) +{ + char *path = arg; + loff_t off; + void *buf; + int ret; + int fd; + time_t start = time(NULL); + + buf = memalign(page_size, page_size); + if (buf == NULL) + fail("failed to allocate an aligned page"); + + fd = open(path, O_DIRECT|O_CREAT|O_RDWR|O_TRUNC, 0644); + if (fd < 0) + fail("dio open failed: %d\n", errno); + + while (1) { + if ((time(NULL) - start) > SECONDS) { + printf("test ran for %u seconds without error\n", + SECONDS); + exit(0); + } + + pthread_mutex_lock(&mut); + while (read_pos != write_pos) + pthread_cond_wait(&cond, &mut); + byte++; + write_pos = 0; + pthread_mutex_unlock(&mut); + + memset(buf, byte, page_size); + + for (off = 0; off < FILE_SIZE; off += page_size) { + + ret = pwrite(fd, buf, page_size, off); + if (ret != page_size) + fail("write returned %d", ret); + + if ((rand() % 4) == 0) { + pthread_mutex_lock(&mut); + write_pos = off; + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mut); + }; + } + } +} + +static void *reader(void *arg) +{ + char *path = arg; + unsigned char old; + loff_t read_to = 0; + void *found; + int fd; + int ret; + void *buf; + loff_t off; + + setvbuf(stdout, NULL, _IONBF, 0); + + buf = memalign(page_size, page_size); + if (buf == NULL) + fail("failed to allocate an aligned page"); + + fd = open(path, O_CREAT|O_RDONLY, 0644); + if (fd < 0) + fail("buffered open failed: %d\n", errno); + + while (1) { + pthread_mutex_lock(&mut); + read_pos = read_to; + pthread_cond_signal(&cond); + while (read_pos == write_pos) + pthread_cond_wait(&cond, &mut); + read_to = write_pos; + off = read_pos; + old = byte - 1; + pthread_mutex_unlock(&mut); + + for (; off < read_to; off += page_size) { + + ret = pread(fd, buf, page_size, off); + if (ret != page_size) + fail("write returned %d", ret); + + found = memchr(buf, old, page_size); + if (found) + fail("reader found old byte at pos %lu", + (unsigned long)off + + (unsigned long)found - + (unsigned long)buf); + } + } +} + +int main(int argc, char **argv) +{ + pthread_t reader_thread; + pthread_t writer_thread; + int ret; + + page_size = getpagesize(); + + if (argc != 2) + fail("only arg should be file name"); + + ret = pthread_create(&writer_thread, NULL, writer, argv[1]); + if (ret == 0) + ret = pthread_create(&reader_thread, NULL, reader, argv[1]); + if (ret) + fail("failed to start reader and writer threads: %d", ret); + + pthread_join(writer_thread, NULL); + pthread_join(reader_thread, NULL); + exit(0); +} diff --git a/aio-dio-regress/aio-dio-subblock-eof-read.c b/aio-dio-regress/aio-dio-subblock-eof-read.c new file mode 100644 index 0000000..f92d361 --- /dev/null +++ b/aio-dio-regress/aio-dio-subblock-eof-read.c @@ -0,0 +1,95 @@ +/* + * Code taken from an example posted to linux-aio at kvack.org + * Original Author: Drangon Zhou + * Munged by Jeff Moyer. + * + * Description: This source code implements a test to ensure that an AIO + * read of the last block in a file opened with O_DIRECT returns the proper + * amount of data. In the past, there was a bug that resulted in a return + * value of the requested block size, when in fact there was only a fraction + * of that data available. Thus, if the last data block contained 300 bytes + * worth of data, and the user issued a 4k read, we want to ensure that + * the return value is 300, not 4k. + */ + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include + +/* Create a file of a size that is not a multiple of block size */ +#define FILE_SIZE 300 + +#define fail(fmt , args...) \ +do { \ + printf(fmt , ##args); \ + exit(1); \ +} while (0) + +static unsigned char buffer[4096] __attribute((aligned (512))); + +int +main(int argc, char **argv) +{ + int ret; + int fd; + const char *filename; + struct iocb myiocb; + struct iocb *cb = &myiocb; + io_context_t ioctx; + struct io_event ie; + + if (argc != 2) + fail("only arg should be file name"); + + filename = argv[1]; + fd = open(filename, O_CREAT|O_RDWR|O_DIRECT, 0600); + if (fd < 0) + fail("open returned error %d\n", errno); + + ret = ftruncate(fd, FILE_SIZE); + if (ret < 0) + fail("truncate returned error %d\n", errno); + + /* <1> use normal disk read, this should be ok */ + ret = read(fd, buffer, 4096); + if (ret != FILE_SIZE) + fail("buffered read returned %d, should be 300\n", ret); + + /* <2> use AIO disk read, it sees error. */ + memset(&myiocb, 0, sizeof(myiocb)); + cb->data = 0; + cb->key = 0; + cb->aio_lio_opcode = IO_CMD_PREAD; + cb->aio_reqprio = 0; + cb->aio_fildes = fd; + cb->u.c.buf = buffer; + cb->u.c.nbytes = 4096; + cb->u.c.offset = 0; + + ret = io_queue_init(1, &ioctx); + if (ret != 0) + fail("io_queue_init returned error %d\n", ret); + + ret = io_submit(ioctx, 1, &cb); + if (ret != 1) + fail("io_submit returned error %d\n", ret); + + ret = io_getevents(ioctx, 1, 1, &ie, NULL); + if (ret != 1) + fail("io_getevents returned %d\n", ret); + + /* + * If all goes well, we should see 300 bytes read. If things + * are broken, we may very well see a result of 4k. + */ + if (ie.res != FILE_SIZE) + fail("AIO read of last block in file returned %d bytes, " + "expected %d\n", ret, FILE_SIZE); + + printf("AIO read of last block in file succeeded.\n"); + return 0; +} diff --git a/aio-dio-regress/aio-free-ring-with-bogus-nr-pages.c b/aio-dio-regress/aio-free-ring-with-bogus-nr-pages.c new file mode 100644 index 0000000..e91f344 --- /dev/null +++ b/aio-dio-regress/aio-free-ring-with-bogus-nr-pages.c @@ -0,0 +1,65 @@ +/* + * Code taken from an example posted to Red Hat bugzilla #220971 + * + * Original Author: Kostantin Khorenko from OpenVZ/Virtuozzo + * Munged by Jeff Moyer. + * + * Description: "aio_setup_ring() function initializes info->nr_pages + * variable incorrectly, then this variable can be used in error path + * to free the allocated resources. By this way an unprivileged user + * can crash the node." + * + * At the beginning of aio_setup_ring, info->nr_pages is initialized + * to the requested number of pages. However, it is supposed to + * indicate how many pages are mapped in info->ring_pages. Thus, if + * the call to do_mmap fails: + * + * info->mmap_base = do_mmap(NULL, 0, info->mmap_size, + * PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, + * 0); + * if (IS_ERR((void *)info->mmap_base)) { + * up_write(&ctx->mm->mmap_sem); + * printk("mmap err: %ld\n", -info->mmap_base); + * info->mmap_size = 0; + * aio_free_ring(ctx); <--------- + * return -EAGAIN; + * } + * + * we end up calling aio_free_ring with a bogus array and cause an oops. + * + * This is a destructive test. + */ +#include +#include +#include +#include +#include +#include + +int main(int __attribute__((unused)) argc, char **argv) +{ + long res; + io_context_t ctx; + void* map; + + while (1) { + map = mmap(NULL, 100, PROT_READ, MAP_ANONYMOUS|MAP_PRIVATE, + 0, 0); + if (map == MAP_FAILED) + break; + map = mmap(NULL, 100, PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, + 0, 0); + if (map == MAP_FAILED) + break; + } + + memset(&ctx, 0, sizeof(ctx)); + res = io_setup(10000, &ctx); + if (res != -ENOMEM) { + printf("%s: Error: io_setup returned %ld, expected -ENOMEM\n", + basename(argv[0]), res); + return 1; + } else + printf("%s: Success!\n", basename(argv[0])); + return 0; +} diff --git a/aio-dio-regress/aio-io-setup-with-nonwritable-context-pointer.c b/aio-dio-regress/aio-io-setup-with-nonwritable-context-pointer.c new file mode 100644 index 0000000..c0ba09f --- /dev/null +++ b/aio-dio-regress/aio-io-setup-with-nonwritable-context-pointer.c @@ -0,0 +1,31 @@ +/* + * Author: Jeff Moyer + * + * Description: Pass a non-writable context pointer to io_setup to see if + * the kernel deals with it correctly. In the past, the reference counting + * in this particular error path was off and this operation would cause an + * oops. + * + * This is a destructive test. + */ +#include +#include +#include +#include +#include + +int +main(int __attribute__((unused)) argc, char **argv) +{ + void *addr; + + addr = mmap(NULL, 4096, PROT_READ, MAP_SHARED|MAP_ANONYMOUS, 0, 0); + if (!addr) { + perror("mmap"); + exit(1); + } + io_setup(1, addr /* un-writable pointer */); + + printf("%s: Success!\n", basename(argv[0])); + return 0; +} diff --git a/group b/group index 0ac33c2..ca74d54 100644 --- a/group +++ b/group @@ -310,3 +310,4 @@ atime 203 ioctl auto 204 metadata rw auto 205 metadata rw auto +206 auto aio From kevin@kevinjamieson.com Thu Apr 23 01:18:17 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3N6IH8K247502 for ; Thu, 23 Apr 2009 01:18:17 -0500 X-ASG-Debug-ID: 1240467494-0a5d00170000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from idcmail-mo1so.shaw.ca (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id CD5B71CDFA19 for ; Wed, 22 Apr 2009 23:18:14 -0700 (PDT) Received: from idcmail-mo1so.shaw.ca (idcmail-mo1so.shaw.ca [24.71.223.10]) by cuda.sgi.com with ESMTP id hU3N2gder1XwYDMq for ; Wed, 22 Apr 2009 23:18:14 -0700 (PDT) Received: from pd2ml1so-ssvc.prod.shaw.ca ([10.0.141.139]) by pd3mo1so-svcs.prod.shaw.ca with ESMTP; 23 Apr 2009 00:18:13 -0600 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.0 c=0 a=LxwZTiF61BKTENBN_ngA:9 a=oVw4IjaQbPE7U-PFzWp9_hlPaMoA:4 a=T6zWE12s9mEA:10 a=p0z0BktFnWsA:10 a=M8wPuokCQ-QA:10 Received: from s0106002078c6464f.vn.shawcable.net (HELO mail.kevinjamieson.com) ([24.87.84.75]) by pd2ml1so-dmz.prod.shaw.ca with ESMTP; 23 Apr 2009 00:18:13 -0600 Received: by mail.kevinjamieson.com (Postfix, from userid 1102) id 8F6B520200; Wed, 22 Apr 2009 23:18:11 -0700 (PDT) Received: from bender.lan.kevinjamieson.com (bender.lan.kevinjamieson.com [192.168.1.110]) by mail.kevinjamieson.com (Postfix) with ESMTP id 2388220058 for ; Wed, 22 Apr 2009 23:18:11 -0700 (PDT) Message-ID: <49F00823.6050908@kevinjamieson.com> Date: Wed, 22 Apr 2009 23:18:11 -0700 From: Kevin Jamieson Reply-To: kevin@kevinjamieson.com User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> In-Reply-To: <49EE7E17.8050006@sandeen.net> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: idcmail-mo1so.shaw.ca[24.71.223.10] X-Barracuda-Start-Time: 1240467494 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2989 1.0000 -0.3529 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.35 X-Barracuda-Spam-Status: No, SCORE=-0.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.2, rules version 3.2.1.23960 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Eric Sandeen wrote: > And you hit it pretty reliably before, right? Yes, fairly regularly -- about 2-3 times per week under the same workload. Kevin From kevin@kevinjamieson.com Thu Apr 23 01:24:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3N6OYHv256564 for ; Thu, 23 Apr 2009 01:24:34 -0500 X-ASG-Debug-ID: 1240467870-4b6301b00000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from idcmail-mo2no.shaw.ca (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 586481CDFA61 for ; Wed, 22 Apr 2009 23:24:31 -0700 (PDT) Received: from idcmail-mo2no.shaw.ca (idcmail-mo2no.shaw.ca [64.59.134.9]) by cuda.sgi.com with ESMTP id Avfcr25sNXMWUHji for ; Wed, 22 Apr 2009 23:24:31 -0700 (PDT) Received: from pd5ml2no-ssvc.prod.shaw.ca ([10.0.153.164]) by pd5mo1no-svcs.prod.shaw.ca with ESMTP; 23 Apr 2009 00:24:30 -0600 X-Cloudmark-SP-Filtered: true X-Cloudmark-SP-Result: v=1.0 c=0 a=fgQ9tHsKWQqtNxfXbZIA:9 a=c5OznMaIBcGIiMuHDTRYKJtUomwA:4 a=T6zWE12s9mEA:10 a=p0z0BktFnWsA:10 a=M8wPuokCQ-QA:10 Received: from s0106002078c6464f.vn.shawcable.net (HELO mail.kevinjamieson.com) ([24.87.84.75]) by pd5ml2no-dmz.prod.shaw.ca with ESMTP; 23 Apr 2009 00:24:30 -0600 Received: by mail.kevinjamieson.com (Postfix, from userid 1102) id 6AF3F20200; Wed, 22 Apr 2009 23:24:30 -0700 (PDT) Received: from bender.lan.kevinjamieson.com (bender.lan.kevinjamieson.com [192.168.1.110]) by mail.kevinjamieson.com (Postfix) with ESMTP id EE65820058 for ; Wed, 22 Apr 2009 23:24:29 -0700 (PDT) Message-ID: <49F0099D.3060004@kevinjamieson.com> Date: Wed, 22 Apr 2009 23:24:29 -0700 From: Kevin Jamieson Reply-To: kevin@kevinjamieson.com User-Agent: Thunderbird 2.0.0.14 (Macintosh/20080421) MIME-Version: 1.0 To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 References: <64323.24.80.224.145.1236883814.squirrel@squirrel.kevinjamieson.com> <49B9611F.5040009@sandeen.net> <58707.24.80.224.145.1236899620.squirrel@squirrel.kevinjamieson.com> <53630.24.80.224.145.1240361692.squirrel@squirrel.kevinjamieson.com> <49EE7E17.8050006@sandeen.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: idcmail-mo2no.shaw.ca[64.59.134.9] X-Barracuda-Start-Time: 1240467871 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2760 1.0000 -0.4538 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.2, rules version 3.2.1.23962 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Felix Blyakher wrote: > But I could never reproduce the problem, even with Lachlan's test > program. I was not able to reproduce the problem with Lachlan's test program either (although I did not experiment much with the parameters). > Kevin, any idea what kind of io load triggered this problem? The workload consisted of predominantly (98%) 2-3MB file ingests through an NFS share, with a a few (2%) 1GB file ingests, where the issue seemed to trigger on the larger files. Kevin From mike@fysh.org Thu Apr 23 03:49:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3N8n7Yv000379 for ; Thu, 23 Apr 2009 03:49:07 -0500 X-ASG-Debug-ID: 1240476713-033800630000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pond.fysh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 4EEA61442106 for ; Thu, 23 Apr 2009 01:51:53 -0700 (PDT) Received: from pond.fysh.org (pond.fysh.org [166.84.7.109]) by cuda.sgi.com with ESMTP id K5CR9EK56u1JWAEP for ; Thu, 23 Apr 2009 01:51:53 -0700 (PDT) Received: from mike by pond.fysh.org with local (Exim 4.69 #1 (Debian)) id 1Lwuc8-0001PV-4V; Thu, 23 Apr 2009 09:49:00 +0100 Date: Thu, 23 Apr 2009 09:49:00 +0100 From: Mike Ashton To: Andi Kleen Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements Message-ID: <20090423084900.GB16600@fysh.org> References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> <87ws9cnz14.fsf@basil.nowhere.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87ws9cnz14.fsf@basil.nowhere.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: pond.fysh.org[166.84.7.109] X-Barracuda-Start-Time: 1240476715 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2187 1.0000 -0.7306 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.73 X-Barracuda-Spam-Status: No, SCORE=-0.73 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23970 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 22, 2009 at 11:45:11PM +0200, Andi Kleen wrote: > Mike Ashton writes: > > > With badly behaved hardware, > > which seem prevalent, or any bugs which do get into xfs we could > > actually end up with xfs being less fault tolerant and less reliable > > in general use than other filesystems, which would be a bit of a > > shame. > > Most Linux file systems are not very fault tolerant in this sense; > e.g. on ext3 you have have to press return and accept lots of scary > messages to get through fsck. Perhaps, but anecdotally/subjectively I've never had a ext3 based system fail to boot because I turned it off and on again. I've had this happen with xfs root filesystems about 15 times over the past few years. I'm getting to the point where I'm starting to question the wisdom of choosing xfs for my systems - whether it's actually mature enough for use in server environments - which given that it's the one which ought to be a total no-brainer in this respect, is a worry. I think even if I can't persuade you guys to make official improvements, I've got enough information to make ad-hoc improvements to my own systems, but I'm going to have a hard time on the advocacy front. xfs rocks, but a system is only as good as its last power cut (or something). I'm hopeful that my readonly/norecovery tuning idea might catch someone's imagination, but we'll have to see. Mike. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 04:47:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3N9lk41002473 for ; Thu, 23 Apr 2009 04:47:52 -0500 X-ASG-Debug-ID: 1240480063-06be00ea0000-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 42132234BC3 for ; Thu, 23 Apr 2009 02:47:43 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id n7vXsj5X4tQKo3y2 for ; Thu, 23 Apr 2009 02:47:43 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LwvWv-00063S-Lm; Thu, 23 Apr 2009 09:47:41 +0000 Date: Thu, 23 Apr 2009 05:47:41 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: Eric Sandeen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Message-ID: <20090423094741.GA23157@infradead.org> References: <1416563271.242851240369384712.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> <811197347.242901240369616266.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <811197347.242901240369616266.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240480064 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Lachlan, any chance we could get you to resubmit the minimal locking fix for now? We can play with the test program than to find some cause the other corruptions. We also still have that non-freed attr fork patch that was somewhat related which we still need get done :P From sandeen@sandeen.net Thu Apr 23 07:45:31 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NCjUi6007434 for ; Thu, 23 Apr 2009 07:45:31 -0500 X-ASG-Debug-ID: 1240490899-5bf503980000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2CD9A14430CE for ; Thu, 23 Apr 2009 05:48:19 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id Eg6HorZ9ekDsfgy4 for ; Thu, 23 Apr 2009 05:48:19 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 23F86AC358C; Thu, 23 Apr 2009 07:45:26 -0500 (CDT) Message-ID: <49F062E5.70800@sandeen.net> Date: Thu, 23 Apr 2009 07:45:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Mike Ashton CC: Andi Kleen , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> <87ws9cnz14.fsf@basil.nowhere.org> <20090423084900.GB16600@fysh.org> In-Reply-To: <20090423084900.GB16600@fysh.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: 1240490900 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0430 1.0000 -1.7442 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.74 X-Barracuda-Spam-Status: No, SCORE=-1.74 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23983 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Mike Ashton wrote: > On Wed, Apr 22, 2009 at 11:45:11PM +0200, Andi Kleen wrote: >> Mike Ashton writes: >> >>> With badly behaved hardware, >>> which seem prevalent, or any bugs which do get into xfs we could >>> actually end up with xfs being less fault tolerant and less reliable >>> in general use than other filesystems, which would be a bit of a >>> shame. >> Most Linux file systems are not very fault tolerant in this sense; >> e.g. on ext3 you have have to press return and accept lots of scary >> messages to get through fsck. > > Perhaps, but anecdotally/subjectively I've never had a ext3 based > system fail to boot because I turned it off and on again. xfs log replay may be more sensitive... > I've had > this happen with xfs root filesystems about 15 times over the past few > years. I'm getting to the point where I'm starting to question the > wisdom of choosing xfs for my systems - whether it's actually mature > enough for use in server environments - which given that it's the one > which ought to be a total no-brainer in this respect, is a worry. Server environments probably *normally* are in better shape for power consistency, but still... > I think even if I can't persuade you guys to make official > improvements, I've got enough information to make ad-hoc improvements > to my own systems, but I'm going to have a hard time on the advocacy > front. xfs rocks, but a system is only as good as its last power cut > (or something). > > I'm hopeful that my readonly/norecovery tuning idea might catch > someone's imagination, but we'll have to see. It certainly does sound like an interesting idea, but others' concerns are relevant too. The issues around how the root filesystem gets mounted would need to be pretty clearly addressed. Maybe you can spell out your original proposal again, with updates to handle that issue? (as an aside, there have been arguments in the past that readonly mounts should not do recovery at all - i.e. "mount -o ro" doesn't just mean that you can only read the filesystem, but that the mount will only ever read the block device...) -Eric From mike@fysh.org Thu Apr 23 09:35:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NEZJ3K010798 for ; Thu, 23 Apr 2009 09:35:19 -0500 X-ASG-Debug-ID: 1240497315-22ca009f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pond.fysh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 990D9235608 for ; Thu, 23 Apr 2009 07:35:16 -0700 (PDT) Received: from pond.fysh.org (pond.fysh.org [166.84.7.109]) by cuda.sgi.com with ESMTP id HXj1TKscnpyzpJcs for ; Thu, 23 Apr 2009 07:35:16 -0700 (PDT) Received: from mike by pond.fysh.org with local (Exim 4.69 #1 (Debian)) id 1Lx01D-0001aI-IH for xfs@oss.sgi.com; Thu, 23 Apr 2009 15:35:15 +0100 Date: Thu, 23 Apr 2009 15:35:15 +0100 From: Mike Ashton To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements Message-ID: <20090423143515.GA5878@fysh.org> References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> <87ws9cnz14.fsf@basil.nowhere.org> <20090423084900.GB16600@fysh.org> <49F062E5.70800@sandeen.net> <20090423141432.GC16600@fysh.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090423141432.GC16600@fysh.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: pond.fysh.org[166.84.7.109] X-Barracuda-Start-Time: 1240497316 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.2, rules version 3.2.1.23984 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 07:45:25AM -0500, Eric Sandeen wrote: > It certainly does sound like an interesting idea, but others' concerns > are relevant too. The issues around how the root filesystem gets > mounted would need to be pretty clearly addressed. Maybe you can spell > out your original proposal again, with updates to handle that issue? > > (as an aside, there have been arguments in the past that readonly mounts > should not do recovery at all - i.e. "mount -o ro" doesn't just mean > that you can only read the filesystem, but that the mount will only ever > read the block device...) I propose firstly that that behaviour should be configurable by per filesystem tuning, making it possible to set a root filesystem to default to norecovery on a read-only mount. Then non-initrd mounting of / should always succeed, getting us access to fsck.xfs. I secondly, and I'm going to broke here, propose that xfs_check/xfs_repair (as invocations, not the code!) should be deprecated and both programs should be called fsck.xfs. When called with that name, they would have the following (familiar) semantics: fsck.xfs: verify journal integrity. If it's good, return "filesystem is clean" and exit. If it's bad, invoke xfs_clean behaviour fsck.xfs -f: invoke xfs_clean behaviour even with a good journal fsck.xfs -a: verify journal integrity If it's good, return "filesystem is clean" and exit. If it's bad, invoke xfs_repair -L behaviour (and so on) This makes fsck.xfs behave analogously to fsck.ext2 and friends, with it's clean and dirty flag. The improvement xfs offers over ext2 in this area is that a filesystem is not only clean if shut down cleanly, but is also clean if shutdown unclearly but with a usable journal, but without behaving worse than ext2 by fsck.xfs thinking (incorrectly) that a filesystem repair will never be needed and giving a filesystem that won't mount a clean bill of health. With both these proposals implemented, both initrd and non-initrd boot processes would correctly handle xfs filesystem checking, using the xfs journal to give the current excellent general case performance but provide a safe approach to corrupted journals, without the need for specific xfs-related care from distribution maintainers. Thanks, Mike. From stuart.menefy@st.com Thu Apr 23 11:10:40 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NGAdI8014191 for ; Thu, 23 Apr 2009 11:10:40 -0500 X-ASG-Debug-ID: 1240503203-21f502eb0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from eu1sys200aog106.obsmtp.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D69F314444B6 for ; Thu, 23 Apr 2009 09:13:24 -0700 (PDT) Received: from eu1sys200aog106.obsmtp.com (eu1sys200aog106.obsmtp.com [207.126.144.121]) by cuda.sgi.com with ESMTP id AstgCvjN0t8rNOGZ for ; Thu, 23 Apr 2009 09:13:24 -0700 (PDT) Received: from source ([164.129.1.35]) (using TLSv1) by eu1sys200aob106.postini.com ([207.126.147.11]) with SMTP ID DSNKSfCS5tHYBT9ndAKFVWZ52gh22qZKC5BX@postini.com; Thu, 23 Apr 2009 16:10:36 UTC Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id DF552DA92; Thu, 23 Apr 2009 16:08:45 +0000 (GMT) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 315A44C4EF; Thu, 23 Apr 2009 16:10:00 +0000 (GMT) Received: from adelie.bri.st.com (adelie.bri.st.com [164.129.14.72]) by mail1.bri.st.com (MOS 3.8.7a) with ESMTP id CLP68818 (AUTH stuart); Thu, 23 Apr 2009 17:09:59 +0100 (BST) Message-ID: <49F092D6.4070507@st.com> Date: Thu, 23 Apr 2009 17:09:58 +0100 From: Stuart MENEFY User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: Dave Chinner Cc: Russell Cattelan , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> <49E8A081.7020200@st.com> <20090419081702.GD16929@discord.disaster> In-Reply-To: <20090419081702.GD16929@discord.disaster> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Barracuda-Connect: eu1sys200aog106.obsmtp.com[207.126.144.121] X-Barracuda-Start-Time: 1240503209 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23991 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Dave Chinner wrote: > On Fri, Apr 17, 2009 at 04:30:09PM +0100, Stuart MENEFY wrote: >>> If you can instrument actually free that is causing the problem it >>> would be good to print out the >>> actually pid doing the free and as many return addresses that you can, >>> so we can get an >>> idea of the actual call chain. >> The free is coming from the xfssyncd thread, the back trace looks like: >> >> [<8418d0e2>] xfs_idestroy+0x22/0x100 >> [<8418a1b0>] xfs_ireclaim+0x50/0x80 >> [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 >> [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 >> [<8418a780>] xfs_ilock_nowait+0x0/0x160 >> [<841a9df2>] xfs_syncsub+0x52/0x360 >> [<84335108>] schedule_timeout+0x48/0x100 >> [<841ab684>] xfs_sync+0x24/0x40 >> [<841e0ce0>] list_add+0x0/0x20 >> [<841c041c>] vfs_sync+0x1c/0x40 >> [<841bf37c>] vfs_sync_worker+0x1c/0x60 >> [<841bf6b6>] xfssyncd+0xb6/0x140 >> [<8402f0dc>] kthread+0x3c/0x80 >> [<84012440>] complete+0x0/0x60 >> [<841bf600>] xfssyncd+0x0/0x140 >> [<8402f060>] kthread_should_stop+0x0/0x20 >> [<84003984>] kernel_thread_helper+0x4/0x20 >> [<8402f0a0>] kthread+0x0/0x80 >> [<84003980>] kernel_thread_helper+0x0/0x20 > > There were some use-after-free fixes in .27 timeframe to the inode > reclaim code. Can you reeetest with a more recent kernel? Possibly. I have a half-finished port of 2.6.27-rc4 to our hardware which I could probably get going fairly quickly. Do you think that would be sufficient to pick up the use-after-free fixes? Thanks Stuart From cattelan@thebarn.com Thu Apr 23 11:19:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NGJvA5014453 for ; Thu, 23 Apr 2009 11:19:58 -0500 X-ASG-Debug-ID: 1240503592-301b02090000-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 9FC331CE1ACF for ; Thu, 23 Apr 2009 09:19:53 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id 055BuGc6NYxmX6Ii for ; Thu, 23 Apr 2009 09:19:53 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3NGJjnN042183; Thu, 23 Apr 2009 11:19:45 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <49F09521.9000103@thebarn.com> Date: Thu, 23 Apr 2009 11:19:45 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Mike Ashton CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> <87ws9cnz14.fsf@basil.nowhere.org> <20090423084900.GB16600@fysh.org> <49F062E5.70800@sandeen.net> <20090423141432.GC16600@fysh.org> <20090423143515.GA5878@fysh.org> In-Reply-To: <20090423143515.GA5878@fysh.org> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1240503593 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23992 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Mike Ashton wrote: > On Thu, Apr 23, 2009 at 07:45:25AM -0500, Eric Sandeen wrote: > >> It certainly does sound like an interesting idea, but others' >> concerns are relevant too. The issues around how the root >> filesystem gets mounted would need to be pretty clearly >> addressed. Maybe you can spell out your original proposal again, >> with updates to handle that issue? >> >> (as an aside, there have been arguments in the past that readonly >> mounts should not do recovery at all - i.e. "mount -o ro" doesn't >> just mean that you can only read the filesystem, but that the >> mount will only ever read the block device...) > > I propose firstly that that behaviour should be configurable by per > filesystem tuning, making it possible to set a root filesystem to > default to norecovery on a read-only mount. Then non-initrd > mounting of / should always succeed, getting us access to fsck.xfs. > Traditional thinking with a journaled filesystem has been that if there is a dirty log then you do not want to risk mounting the filesystem in an inconsistent state an thereby risking a system crash or file system shutdown due to that inconsistent state. By replaying the log even on a read only mount the file system is brought back into a known good state. So there are risks of mounting without recovery but I'm leaning toward it might be an acceptable risk in a single user state that would allow access to the root file system. > > I secondly, and I'm going to broke here, propose that > xfs_check/xfs_repair (as invocations, not the code!) should be > deprecated and both programs should be called fsck.xfs. When called > with that name, they would have the following (familiar) > semantics: Well I wouldn't go that far xfs_check is already a wrapper around xfs_db which is a very different animal from xfs_repair. > > fsck.xfs: verify journal integrity. If it's good, return > "filesystem is clean" and exit. If it's bad, invoke xfs_clean > behaviour > > fsck.xfs -f: invoke xfs_clean behaviour even with a good journal > > fsck.xfs -a: verify journal integrity If it's good, return > "filesystem is clean" and exit. If it's bad, invoke xfs_repair -L > behaviour > > (and so on) Well again step back, most of the time at boot the mount of root succeeds and the log has been replayed and the fs is consistent. I don't think changing that to a mount -norecovery all the time is a good idea, that is risking every mount to a potentially inconsistent state for the rare case that the log is corrupted. So even if we do a norecovery and then drop the system into single user due to a corrupted log, the only option at that point is xfs_repair -L, which is not a recommended thing to do unless some manual analysis is done and the inevitable data loss is understood. It would be nice to eventually have an xfs_repair that could replay the log from userspace but that has not been implemented yet, that would allow for a clean repair from userspace. But again if the log is corrupted it may not be able to handle things any better than the kernel log recovery. Also in the case of a mount -norecover with any subsequent repair being done, it is probably best to reboot at that point to ensure there is no bad FS data that may be in cache. > > This makes fsck.xfs behave analogously to fsck.ext2 and friends, > with it's clean and dirty flag. The improvement xfs offers over > ext2 in this area is that a filesystem is not only clean if shut > down cleanly, but is also clean if shutdown unclearly but with a > usable journal, but without behaving worse than ext2 by fsck.xfs > thinking (incorrectly) that a filesystem repair will never be > needed and giving a filesystem that won't mount a clean bill of > health. Given that xfs was suppose to be a fresh way of doing file systems over the traditional UFS based filesystems trying to make xfs behave like ext2/ext* is not really a step forwards. But I think there could be some improvement made to provide a less painful way of recovering a root fs that has a bad log. > > With both these proposals implemented, both initrd and non-initrd > boot processes would correctly handle xfs filesystem checking, > using the xfs journal to give the current excellent general case > performance but provide a safe approach to corrupted journals, > without the need for specific xfs-related care from distribution > maintainers. > > Thanks, Mike. > > _______________________________________________ xfs mailing list > xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJ8JUYNRmM+OaGhBgRAtllAJ9Ha2DGfoMalyjnfEggS0YhXL24BQCfZfuc K5SglBMCSIIfzyjUsjFgTrE= =fDCQ -----END PGP SIGNATURE----- From cattelan@thebarn.com Thu Apr 23 11:25:11 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NGPAEc014826 for ; Thu, 23 Apr 2009 11:25:10 -0500 X-ASG-Debug-ID: 1240503905-301d02ea0000-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 6B0D61CE1B45 for ; Thu, 23 Apr 2009 09:25:05 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id f9o4WsuZukF04A9K for ; Thu, 23 Apr 2009 09:25:05 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3NGOnYF042346; Thu, 23 Apr 2009 11:24:50 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <49F09651.6010104@xfs.org> Date: Thu, 23 Apr 2009 11:24:49 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Stuart MENEFY CC: Dave Chinner , Russell Cattelan , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> <49E8A081.7020200@st.com> <20090419081702.GD16929@discord.disaster> <49F092D6.4070507@st.com> In-Reply-To: <49F092D6.4070507@st.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1240503907 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23992 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Stuart MENEFY wrote: > Dave Chinner wrote: > >> On Fri, Apr 17, 2009 at 04:30:09PM +0100, Stuart MENEFY wrote: >> >>>> If you can instrument actually free that is causing the problem it >>>> would be good to print out the >>>> actually pid doing the free and as many return addresses that you can, >>>> so we can get an >>>> idea of the actual call chain. >>>> >>> The free is coming from the xfssyncd thread, the back trace looks like: >>> >>> [<8418d0e2>] xfs_idestroy+0x22/0x100 >>> [<8418a1b0>] xfs_ireclaim+0x50/0x80 >>> [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 >>> [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 >>> [<8418a780>] xfs_ilock_nowait+0x0/0x160 >>> [<841a9df2>] xfs_syncsub+0x52/0x360 >>> [<84335108>] schedule_timeout+0x48/0x100 >>> [<841ab684>] xfs_sync+0x24/0x40 >>> [<841e0ce0>] list_add+0x0/0x20 >>> [<841c041c>] vfs_sync+0x1c/0x40 >>> [<841bf37c>] vfs_sync_worker+0x1c/0x60 >>> [<841bf6b6>] xfssyncd+0xb6/0x140 >>> [<8402f0dc>] kthread+0x3c/0x80 >>> [<84012440>] complete+0x0/0x60 >>> [<841bf600>] xfssyncd+0x0/0x140 >>> [<8402f060>] kthread_should_stop+0x0/0x20 >>> [<84003984>] kernel_thread_helper+0x4/0x20 >>> [<8402f0a0>] kthread+0x0/0x80 >>> [<84003980>] kernel_thread_helper+0x0/0x20 >>> >> There were some use-after-free fixes in .27 timeframe to the inode >> reclaim code. Can you reeetest with a more recent kernel? >> > > Possibly. I have a half-finished port of 2.6.27-rc4 > to our hardware > which I could probably get going fairly quickly. Do you think that > would be sufficient to pick up the use-after-free fixes? > > Thanks > > Stuart > > Any reason you are using an rc4? vs 2.6.27? I would simply run a diff over rc4 fs/xfs and 2.6.27 fs/xfs and see what is different if anything. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:11:05 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHB4Zi016406 for ; Thu, 23 Apr 2009 12:11:05 -0500 X-ASG-Debug-ID: 1240506661-656f027c0000-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 F066A1CE1EE1 for ; Thu, 23 Apr 2009 10:11:01 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id t1v8Bi9kkUiJIiCC for ; Thu, 23 Apr 2009 10:11:01 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2Rx-0004Ph-Bz; Thu, 23 Apr 2009 17:11:01 +0000 Date: Thu, 23 Apr 2009 13:11:01 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: filter out imaxpct value in test 096 Subject: Re: [PATCH] xfstests: filter out imaxpct value in test 096 Message-ID: <20090423171101.GA11391@infradead.org> References: <49EE2664.7030701@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE2664.7030701@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240506661 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 03:02:44PM -0500, Eric Sandeen wrote: > xfstests: filter out imaxpct value in test 096 > > On large filesystems, imaxpc drops from 25 to 5 > > Signed-off-by: Eric Sandeen Looks good. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:11:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHBtEL016439 for ; Thu, 23 Apr 2009 12:11:56 -0500 X-ASG-Debug-ID: 1240506885-6e1f01e80000-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 DF7991444997 for ; Thu, 23 Apr 2009 10:14:45 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id lPazr4kflVv3RKZT for ; Thu, 23 Apr 2009 10:14:45 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2Sl-0005Ol-Uc; Thu, 23 Apr 2009 17:11:51 +0000 Date: Thu, 23 Apr 2009 13:11:51 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Subject: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Message-ID: <20090423171151.GB11391@infradead.org> References: <49EE28EA.4010409@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE28EA.4010409@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240506885 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 03:13:30PM -0500, Eric Sandeen wrote: > I was experimenting w/ default lazy-count=1, and it broke a few tests. > Seems simplest to enforce lazy-count=0 in the common.log routines > for now, and fix up the output? (vs. updating all the expected > output for these tests...) Didn't you just send a patch to make lazy-count=1 the default? :) I'd rather see either a filter dealing with both variants or make sure we always test the newer and more important case (lazy-count=1) here. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:16:00 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHG0qN016595 for ; Thu, 23 Apr 2009 12:16:00 -0500 X-ASG-Debug-ID: 1240506957-66c103c00000-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 E3539236C2F for ; Thu, 23 Apr 2009 10:15:57 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id qzwOrnyWVCYXiS8I for ; Thu, 23 Apr 2009 10:15:57 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2Wb-0007yn-Sx; Thu, 23 Apr 2009 17:15:52 +0000 Date: Thu, 23 Apr 2009 13:15:49 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix up features2 tests for lazy-count=1 Subject: Re: [PATCH] xfstests: fix up features2 tests for lazy-count=1 Message-ID: <20090423171535.GC11391@infradead.org> References: <49EE2BBB.3070008@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE2BBB.3070008@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240506957 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 03:25:31PM -0500, Eric Sandeen wrote: > A few more tests are unhappy with a lazy-count=1 change; > specify lazy-count=0 in them for these tests. Again I'd prefer them to either deal with both cases and if that's not feasible test the lazy-count=1 case. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:16:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHGvWj016640 for ; Thu, 23 Apr 2009 12:16:58 -0500 X-ASG-Debug-ID: 1240507015-66c503bc0000-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 A5152236C41 for ; Thu, 23 Apr 2009 10:16:55 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id KhP4IRrH3DP3OCQY for ; Thu, 23 Apr 2009 10:16:55 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2Xe-00009c-S0; Thu, 23 Apr 2009 17:16:54 +0000 Date: Thu, 23 Apr 2009 13:16:54 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] make lazy-count=1 the default Subject: Re: [PATCH] make lazy-count=1 the default Message-ID: <20090423171654.GD11391@infradead.org> References: <49EE3EDD.1090305@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EE3EDD.1090305@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240507015 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Tue, Apr 21, 2009 at 04:47:09PM -0500, Eric Sandeen wrote: > If folks think it's been out there long enough, let's make > lazy-count=1 the mkfs default going forward? Yes, please put it in just after the 3.0.1 release we'll hopefully put out ASAP. From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:21:01 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHL0IX016739 for ; Thu, 23 Apr 2009 12:21:01 -0500 X-ASG-Debug-ID: 1240507257-38c100430000-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 6D15F2369FD for ; Thu, 23 Apr 2009 10:20:58 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id bCdrT6xAm6NPm5Ky for ; Thu, 23 Apr 2009 10:20:58 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2at-0002FD-Px; Thu, 23 Apr 2009 17:20:46 +0000 Date: Thu, 23 Apr 2009 13:20:15 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: add aio-dio-regress tests Subject: Re: [PATCH] xfstests: add aio-dio-regress tests Message-ID: <20090423171937.GE11391@infradead.org> References: <49EFB75B.5030700@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EFB75B.5030700@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240507258 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 22, 2009 at 07:33:31PM -0500, Eric Sandeen wrote: > Think it's worth pulling this in? > Also not sure where to put it, under the top dir or under src ... > > Takes about 250s to run them all. Could break out the longer > one into a separate test so the rest could be in quick. I would prefer to have a separate test for each of the programs. From sandeen@sandeen.net Thu Apr 23 12:25:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHPC0S017213 for ; Thu, 23 Apr 2009 12:25:12 -0500 X-ASG-Debug-ID: 1240507508-66dc02810000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8A1771CE2065 for ; Thu, 23 Apr 2009 10:25:09 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id hQuZKGsaawCADNTK for ; Thu, 23 Apr 2009 10:25:09 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3NHOY08006075; Thu, 23 Apr 2009 13:24:36 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3NHOXsY022614; Thu, 23 Apr 2009 13:24:33 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3NHOVui030314; Thu, 23 Apr 2009 13:24:32 -0400 Message-ID: <49F0A44F.9040603@sandeen.net> Date: Thu, 23 Apr 2009 12:24:31 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 Subject: Re: [PATCH] xfstests: enforce lazy-count=0 in log tests 018, 081, 082 References: <49EE28EA.4010409@sandeen.net> <20090423171151.GB11391@infradead.org> In-Reply-To: <20090423171151.GB11391@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240507509 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23996 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Tue, Apr 21, 2009 at 03:13:30PM -0500, Eric Sandeen wrote: >> I was experimenting w/ default lazy-count=1, and it broke a few tests. >> Seems simplest to enforce lazy-count=0 in the common.log routines >> for now, and fix up the output? (vs. updating all the expected >> output for these tests...) > > Didn't you just send a patch to make lazy-count=1 the default? :) > > I'd rather see either a filter dealing with both variants or make > sure we always test the newer and more important case (lazy-count=1) > here. I don't think that a filter will be possible, it pretty fundamentally changes log traffic doesn't it? I could make 2 expected outputs, perhaps, one for each... I'll double check though. I just made it forced to 0 because I don't think these tests are really testing anything relevant to whether or not lazy-count is enabled... -Eric From sandeen@sandeen.net Thu Apr 23 12:26:32 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHQWaf017246 for ; Thu, 23 Apr 2009 12:26:32 -0500 X-ASG-Debug-ID: 1240507760-786b01d30000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id C24921444D82 for ; Thu, 23 Apr 2009 10:29:21 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id m8flt30SkTv0v1qE for ; Thu, 23 Apr 2009 10:29:21 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3NHPR1f006481; Thu, 23 Apr 2009 13:25:27 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3NHPROL023082; Thu, 23 Apr 2009 13:25:27 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3NHPQ9E030804; Thu, 23 Apr 2009 13:25:26 -0400 Message-ID: <49F0A485.8060408@sandeen.net> Date: Thu, 23 Apr 2009 12:25:25 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: add aio-dio-regress tests Subject: Re: [PATCH] xfstests: add aio-dio-regress tests References: <49EFB75B.5030700@sandeen.net> <20090423171937.GE11391@infradead.org> In-Reply-To: <20090423171937.GE11391@infradead.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240507762 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0573 1.0000 -1.6539 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.65 X-Barracuda-Spam-Status: No, SCORE=-1.65 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.23995 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > On Wed, Apr 22, 2009 at 07:33:31PM -0500, Eric Sandeen wrote: >> Think it's worth pulling this in? >> Also not sure where to put it, under the top dir or under src ... >> >> Takes about 250s to run them all. Could break out the longer >> one into a separate test so the rest could be in quick. > > I would prefer to have a separate test for each of the programs. Fine by me. Any thoughts on if this should live under src/ or not? I'm not sure why ltp/ doesn't, but I was just following that. Thanks, -Eric From BATV+1ebe03e898642b405e36+2069+infradead.org+hch@bombadil.srs.infradead.org Thu Apr 23 12:28:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NHS3nE017299 for ; Thu, 23 Apr 2009 12:28:03 -0500 X-ASG-Debug-ID: 1240507680-66dc02960000-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 1C14E1CE20B4 for ; Thu, 23 Apr 2009 10:28:00 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 0hn4j7pD0bCu7s9h for ; Thu, 23 Apr 2009 10:28:00 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Lx2iK-0007qg-G4; Thu, 23 Apr 2009 17:27:57 +0000 Date: Thu, 23 Apr 2009 13:27:56 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: Christoph Hellwig , xfs-oss X-ASG-Orig-Subj: Re: [PATCH] xfstests: add aio-dio-regress tests Subject: Re: [PATCH] xfstests: add aio-dio-regress tests Message-ID: <20090423172755.GA27780@infradead.org> References: <49EFB75B.5030700@sandeen.net> <20090423171937.GE11391@infradead.org> <49F0A485.8060408@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49F0A485.8060408@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240507681 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 12:25:25PM -0500, Eric Sandeen wrote: > Christoph Hellwig wrote: > > On Wed, Apr 22, 2009 at 07:33:31PM -0500, Eric Sandeen wrote: > >> Think it's worth pulling this in? > >> Also not sure where to put it, under the top dir or under src ... > >> > >> Takes about 250s to run them all. Could break out the longer > >> one into a separate test so the rest could be in quick. > > > > I would prefer to have a separate test for each of the programs. > > Fine by me. Any thoughts on if this should live under src/ or not? I'm > not sure why ltp/ doesn't, but I was just following that. I don't think it matters too much. The external dmapi tests are also under src. In doubt I would put it under src/ From sandeen@sandeen.net Thu Apr 23 13:29:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NITJ6o019226 for ; Thu, 23 Apr 2009 13:29:19 -0500 X-ASG-Debug-ID: 1240511355-5226003e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mx2.redhat.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 760811CE1B76 for ; Thu, 23 Apr 2009 11:29:15 -0700 (PDT) Received: from mx2.redhat.com (mx2.redhat.com [66.187.237.31]) by cuda.sgi.com with ESMTP id IJkrbncdQu0nPDIS for ; Thu, 23 Apr 2009 11:29:15 -0700 (PDT) Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3NITFDf021562 for ; Thu, 23 Apr 2009 14:29:15 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3NITEc4009376 for ; Thu, 23 Apr 2009 14:29:14 -0400 Received: from neon.msp.redhat.com (neon.msp.redhat.com [10.15.80.10]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3NITDi6015000 for ; Thu, 23 Apr 2009 14:29:13 -0400 Message-ID: <49F0B379.2060309@sandeen.net> Date: Thu, 23 Apr 2009 13:29:13 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.19 (X11/20090105) MIME-Version: 1.0 To: xfs mailing list X-ASG-Orig-Subj: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Subject: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 X-Barracuda-Connect: mx2.redhat.com[66.187.237.31] X-Barracuda-Start-Time: 1240511356 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0155 1.0000 -1.9203 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=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24000 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Due to the new quantum/holographic storage I'm testing, my disks go infinitely fast, thereby breaking some filters: -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +3 KiB, 1 ops; 0.0000 sec (inf EiB/sec and inf ops/sec) I'm no regexp expert but I think the below change will fix it. Signed-off-by: Eric Sandeen --- diff --git a/130 b/130 index f287d20..b0bbe73 100755 --- a/130 +++ b/130 @@ -51,7 +51,7 @@ common_line_filter() _filter_xfs_io() { - common_line_filter | sed -e "s/[0-9/.]* [GMKiBbytes]*, [0-9]* ops\; [0-9/:. sec]* ([0-9/.]* [GMKiBbytes]*\/sec and [0-9/.]* ops\/sec)/XXX Bytes, X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" + common_line_filter | sed -e "s/[0-9/.]* [GMKiBbytes]*, [0-9]* ops\; [0-9/:. sec]* ([inf0-9/.]* [EPGMKiBbytes]*\/sec and [inf0-9/.]* ops\/sec)/XXX Bytes, X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" } # real QA test starts here diff --git a/132 b/132 index df3d3d3..f373256 100755 --- a/132 +++ b/132 @@ -43,7 +43,7 @@ common_line_filter() _filter_xfs_io() { - common_line_filter | sed -e "s/[0-9/.]* [GMKiBbytes]*, [0-9]* ops\; [0-9/:. sec]* ([0-9/.]* [GMKiBbytes]*\/sec and [0-9/.]* ops\/sec)/XXX Bytes, X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" + common_line_filter | sed -e "s/[0-9/.]* [GMKiBbytes]*, [0-9]* ops\; [0-9/:. sec]* ([inf0-9/.]* [EPGMKiBbytes]*\/sec and [inf0-9/.]* ops\/sec)/XXX Bytes, X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" } # real QA test starts here From stuart.menefy@st.com Thu Apr 23 13:38:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NIc77a019529 for ; Thu, 23 Apr 2009 13:38:08 -0500 X-ASG-Debug-ID: 1240512052-42a701a80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from eu1sys200aog118.obsmtp.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5355E1445131 for ; Thu, 23 Apr 2009 11:40:53 -0700 (PDT) Received: from eu1sys200aog118.obsmtp.com (eu1sys200aog118.obsmtp.com [207.126.144.145]) by cuda.sgi.com with ESMTP id KIX1pG6RLRGLWn80 for ; Thu, 23 Apr 2009 11:40:53 -0700 (PDT) Received: from source ([164.129.1.35]) (using TLSv1) by eu1sys200aob118.postini.com ([207.126.147.11]) with SMTP ID DSNKSfC1c0K1XcMUv9gmvSIlo6zH/ycY0/6X@postini.com; Thu, 23 Apr 2009 18:38:04 UTC Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id ABEFDDA7A; Thu, 23 Apr 2009 18:36:24 +0000 (GMT) Received: from mail1.bri.st.com (mail1.bri.st.com [164.129.8.218]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id E82E34C5D8; Thu, 23 Apr 2009 18:37:38 +0000 (GMT) Received: from adelie.bri.st.com (adelie.bri.st.com [164.129.14.72]) by mail1.bri.st.com (MOS 3.8.7a) with ESMTP id CLP69779 (AUTH stuart); Thu, 23 Apr 2009 19:37:38 +0100 (BST) Message-ID: <49F0B572.7090101@st.com> Date: Thu, 23 Apr 2009 19:37:38 +0100 From: Stuart MENEFY User-Agent: Thunderbird 2.0.0.17 (X11/20080914) MIME-Version: 1.0 To: Russell Cattelan Cc: Dave Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> <49E8A081.7020200@st.com> <20090419081702.GD16929@discord.disaster> <49F092D6.4070507@st.com> <49F09651.6010104@xfs.org> In-Reply-To: <49F09651.6010104@xfs.org> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: eu1sys200aog118.obsmtp.com[207.126.144.145] X-Barracuda-Start-Time: 1240512058 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0004 1.0000 -2.0186 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.92 X-Barracuda-Spam-Status: No, SCORE=-0.92 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24001 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Russell Cattelan wrote: > Stuart MENEFY wrote: >> Dave Chinner wrote: >> >>> On Fri, Apr 17, 2009 at 04:30:09PM +0100, Stuart MENEFY wrote: >>> >>>>> If you can instrument actually free that is causing the problem it >>>>> would be good to print out the >>>>> actually pid doing the free and as many return addresses that you can, >>>>> so we can get an >>>>> idea of the actual call chain. >>>>> >>>> The free is coming from the xfssyncd thread, the back trace looks like: >>>> >>>> [<8418d0e2>] xfs_idestroy+0x22/0x100 >>>> [<8418a1b0>] xfs_ireclaim+0x50/0x80 >>>> [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 >>>> [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 >>>> [<8418a780>] xfs_ilock_nowait+0x0/0x160 >>>> [<841a9df2>] xfs_syncsub+0x52/0x360 >>>> [<84335108>] schedule_timeout+0x48/0x100 >>>> [<841ab684>] xfs_sync+0x24/0x40 >>>> [<841e0ce0>] list_add+0x0/0x20 >>>> [<841c041c>] vfs_sync+0x1c/0x40 >>>> [<841bf37c>] vfs_sync_worker+0x1c/0x60 >>>> [<841bf6b6>] xfssyncd+0xb6/0x140 >>>> [<8402f0dc>] kthread+0x3c/0x80 >>>> [<84012440>] complete+0x0/0x60 >>>> [<841bf600>] xfssyncd+0x0/0x140 >>>> [<8402f060>] kthread_should_stop+0x0/0x20 >>>> [<84003984>] kernel_thread_helper+0x4/0x20 >>>> [<8402f0a0>] kthread+0x0/0x80 >>>> [<84003980>] kernel_thread_helper+0x0/0x20 >>>> >>> There were some use-after-free fixes in .27 timeframe to the inode >>> reclaim code. Can you reeetest with a more recent kernel? >>> >> Possibly. I have a half-finished port of 2.6.27-rc4 >> to our hardware >> which I could probably get going fairly quickly. Do you think that >> would be sufficient to pick up the use-after-free fixes? >> >> Thanks >> >> Stuart >> >> > Any reason you are using an rc4? vs 2.6.27? None, it just happened to be the latest at the time I did the work. > I would simply run a diff over rc4 fs/xfs and 2.6.27 fs/xfs and see what > is different if anything. There are about 500 lines of diff. Tracking them back to the git commits its about 10 commits, most of which are self contained XFS specific changes, and a couple are simple changes which affect all users of a kernel wide API. So on a first glance bringing the XFS code upto 2.6.27 level wouldn't be a problem. One of these change is a use-after-free fix (in buffers, not inodes which appears to be the problem I'm seeing), so its probably worth the effort. OK, I'll give that a try, and see what happens. Stuart From cattelan@thebarn.com Thu Apr 23 16:36:18 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3NLaH6q039696 for ; Thu, 23 Apr 2009 16:36:18 -0500 X-ASG-Debug-ID: 1240522746-36c6028c0000-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 957BB1445DA8 for ; Thu, 23 Apr 2009 14:39:06 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id YrJBdvrFsy4MRYv8 for ; Thu, 23 Apr 2009 14:39:06 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3NLZxth062593; Thu, 23 Apr 2009 16:35:59 -0500 (CDT) (envelope-from cattelan@xfs.org) Message-ID: <49F0DF3F.9060200@xfs.org> Date: Thu, 23 Apr 2009 16:35:59 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: Stuart MENEFY CC: Russell Cattelan , Dave Chinner , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Help debugging a use after free Subject: Re: Help debugging a use after free References: <49E37972.1070101@st.com> <49E4DF8C.4050800@thebarn.com> <49E8A081.7020200@st.com> <20090419081702.GD16929@discord.disaster> <49F092D6.4070507@st.com> <49F09651.6010104@xfs.org> <49F0B572.7090101@st.com> In-Reply-To: <49F0B572.7090101@st.com> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1240522748 X-Barracuda-Bayes: INNOCENT GLOBAL 0.2009 1.0000 -0.8229 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.28 X-Barracuda-Spam-Status: No, SCORE=0.28 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M, MARKETING_SUBJECT X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24012 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.60 MARKETING_SUBJECT Subject contains popular marketing words 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Stuart MENEFY wrote: > Russell Cattelan wrote: > >> Stuart MENEFY wrote: >> >>> Dave Chinner wrote: >>> >>> >>>> On Fri, Apr 17, 2009 at 04:30:09PM +0100, Stuart MENEFY wrote: >>>> >>>> >>>>>> If you can instrument actually free that is causing the problem it >>>>>> would be good to print out the >>>>>> actually pid doing the free and as many return addresses that you can, >>>>>> so we can get an >>>>>> idea of the actual call chain. >>>>>> >>>>>> >>>>> The free is coming from the xfssyncd thread, the back trace looks like: >>>>> >>>>> [<8418d0e2>] xfs_idestroy+0x22/0x100 >>>>> [<8418a1b0>] xfs_ireclaim+0x50/0x80 >>>>> [<841ad7f2>] xfs_finish_reclaim+0x32/0x1c0 >>>>> [<841ada30>] xfs_finish_reclaim_all+0xb0/0x100 >>>>> [<8418a780>] xfs_ilock_nowait+0x0/0x160 >>>>> [<841a9df2>] xfs_syncsub+0x52/0x360 >>>>> [<84335108>] schedule_timeout+0x48/0x100 >>>>> [<841ab684>] xfs_sync+0x24/0x40 >>>>> [<841e0ce0>] list_add+0x0/0x20 >>>>> [<841c041c>] vfs_sync+0x1c/0x40 >>>>> [<841bf37c>] vfs_sync_worker+0x1c/0x60 >>>>> [<841bf6b6>] xfssyncd+0xb6/0x140 >>>>> [<8402f0dc>] kthread+0x3c/0x80 >>>>> [<84012440>] complete+0x0/0x60 >>>>> [<841bf600>] xfssyncd+0x0/0x140 >>>>> [<8402f060>] kthread_should_stop+0x0/0x20 >>>>> [<84003984>] kernel_thread_helper+0x4/0x20 >>>>> [<8402f0a0>] kthread+0x0/0x80 >>>>> [<84003980>] kernel_thread_helper+0x0/0x20 >>>>> >>>>> >>>> There were some use-after-free fixes in .27 timeframe to the inode >>>> reclaim code. Can you reeetest with a more recent kernel? >>>> >>>> >>> Possibly. I have a half-finished port of 2.6.27-rc4 >>> to our hardware >>> which I could probably get going fairly quickly. Do you think that >>> would be sufficient to pick up the use-after-free fixes? >>> >>> Thanks >>> >>> Stuart >>> >>> >>> >> Any reason you are using an rc4? vs 2.6.27? >> > > None, it just happened to be the latest at the time I did the work. > > >> I would simply run a diff over rc4 fs/xfs and 2.6.27 fs/xfs and see what >> is different if anything. >> > > There are about 500 lines of diff. Tracking them back to the git commits its > about 10 commits, most of which are self contained XFS specific changes, > and a couple are simple changes which affect all users of a kernel wide API. > So on a first glance bringing the XFS code upto 2.6.27 level wouldn't be a > problem. One of these change is a use-after-free fix (in buffers, not inodes > which appears to be the problem I'm seeing), so its probably worth the effort. > > OK, I'll give that a try, and see what happens. > > Stuart > > Ya I have not looked specifically to see what is there in terms of inode use after free patches. The problem will be to track down why the ref counting is out of wack, and why it is allowing for the inode to be released. I wouldn't hurt to start with a more current xfs if possible to see if it is still a problem. -Russell From lmcilroy@redhat.com Thu Apr 23 21:18:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O2I6sf052363 for ; Thu, 23 Apr 2009 21:18:06 -0500 X-ASG-Debug-ID: 1240539482-2ea203280000-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 CF78B238644 for ; Thu, 23 Apr 2009 19:18:02 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id u49oHBvqKGEDMH4i for ; Thu, 23 Apr 2009 19:18:02 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3O2I1JG003581 for ; Thu, 23 Apr 2009 22:18:01 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3O2I0eR018592 for ; Thu, 23 Apr 2009 22:18:01 -0400 Date: Thu, 23 Apr 2009 22:18:00 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: xfs@oss.sgi.com Message-ID: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: [PATCH] xfs_file_last_byte() needs to acquire ilock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1240539483 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24029 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean We had some systems crash with this stack: [] ia64_leave_kernel+0x0/0x280 [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] [] xfs_bmap_last_offset+0x210/0x280 [xfs] [] xfs_file_last_byte+0x70/0x1a0 [xfs] [] xfs_itruncate_start+0xc0/0x1a0 [xfs] [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] [] xfs_release+0x1b0/0x240 [xfs] [] xfs_file_release+0x70/0xa0 [xfs] [] __fput+0x1a0/0x420 [] fput+0x40/0x60 The problem here is that xfs_file_last_byte() does not acquire the inode lock and can therefore race with another thread that is modifying the extext list. While xfs_bmap_last_offset() is trying to lookup what was the last extent some extents were merged and the extent list shrunk so the index we lookup is now beyond the end of the extent list and potentially in a freed buffer. diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index e7ae08d..cf62d9d 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1258,8 +1258,10 @@ xfs_file_last_byte( * necessary. */ if (ip->i_df.if_flags & XFS_IFEXTENTS) { + xfs_ilock(ip, XFS_ILOCK_SHARED); error = xfs_bmap_last_offset(NULL, ip, &last_block, XFS_DATA_FORK); + xfs_iunlock(ip, XFS_ILOCK_SHARED); if (error) { last_block = 0; } From lmcilroy@redhat.com Thu Apr 23 21:43:49 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O2hmdS053572 for ; Thu, 23 Apr 2009 21:43:48 -0500 X-ASG-Debug-ID: 1240541024-24bc02c70000-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 766121CE3B34 for ; Thu, 23 Apr 2009 19:43:44 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id cLHg3yzrc68srkNs for ; Thu, 23 Apr 2009 19:43:44 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3O2hHgf013649; Thu, 23 Apr 2009 22:43:17 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3O2hGYW028038; Thu, 23 Apr 2009 22:43:16 -0400 Date: Thu, 23 Apr 2009 22:43:16 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Christoph Hellwig Cc: Eric Sandeen , xfs@oss.sgi.com Message-ID: <144122190.4081240540996189.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <20090423094741.GA23157@infradead.org> X-ASG-Orig-Subj: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 Subject: Re: Oops at xfs_bmbt_get_startoff in SLES 10 2.6.16 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.71] 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: 1240541025 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0006 1.0000 -2.0173 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24031 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Christoph Hellwig" wrote: > Lachlan, > > any chance we could get you to resubmit the minimal locking fix for > now? Okay, done. If people still see problems then we should take the rest of the patch too (of course I would suggest taking it anyway but it needs more soak testing). > > We can play with the test program than to find some cause the other I suggest increasing or decreasing the -l argument until you can reproduce the problem. Timing it so that the file's data is being flushed to disk (and therefore delayed allocations being converted and extents merged) at the same time the file is closed (ie the fput() is done) can be tricky. It may be easier to reproduce if another program, running concurrently to the test program, is simply opening and close the file repeatedly. > corruptions. We also still have that non-freed attr fork patch that > was > somewhat related which we still need get done :P > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From sandeen@sandeen.net Thu Apr 23 21:50:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O2o1Tl053795 for ; Thu, 23 Apr 2009 21:50:02 -0500 X-ASG-Debug-ID: 1240541398-72de016f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5E2F11CE3944 for ; Thu, 23 Apr 2009 19:49:59 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id 6fivHabdV0Fyklz0 for ; Thu, 23 Apr 2009 19:49:59 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id D1950AC358C; Thu, 23 Apr 2009 21:49:57 -0500 (CDT) Message-ID: <49F128D5.2090200@sandeen.net> Date: Thu, 23 Apr 2009 21:49:57 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Lachlan McIlroy CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock References: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.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: 1240541399 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24033 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Lachlan McIlroy wrote: > We had some systems crash with this stack: > > [] ia64_leave_kernel+0x0/0x280 > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > [] xfs_release+0x1b0/0x240 [xfs] > [] xfs_file_release+0x70/0xa0 [xfs] > [] __fput+0x1a0/0x420 > [] fput+0x40/0x60 > > The problem here is that xfs_file_last_byte() does not acquire the > inode lock and can therefore race with another thread that is modifying > the extext list. While xfs_bmap_last_offset() is trying to lookup > what was the last extent some extents were merged and the extent list > shrunk so the index we lookup is now beyond the end of the extent list > and potentially in a freed buffer. > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index e7ae08d..cf62d9d 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1258,8 +1258,10 @@ xfs_file_last_byte( /* * Only check for blocks beyond the EOF if the extents have * been read in. This eliminates the need for the inode lock, * and it also saves us from looking when it really isn't > * necessary. > */ I suppose that comment should be modified too, and maybe the commit log should say why, exactly, it was wrong? :) -Eric > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > + xfs_ilock(ip, XFS_ILOCK_SHARED); > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > + xfs_iunlock(ip, XFS_ILOCK_SHARED); > if (error) { > last_block = 0; > } > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs > From lmcilroy@redhat.com Thu Apr 23 22:46:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O3ksqv056320 for ; Thu, 23 Apr 2009 22:46:54 -0500 X-ASG-Debug-ID: 1240544986-601902e80000-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 474641440FBF for ; Thu, 23 Apr 2009 20:49:46 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id BSDrGsSt6XJwCuba for ; Thu, 23 Apr 2009 20:49:46 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3O3koVT006732; Thu, 23 Apr 2009 23:46:50 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3O3knSt018687; Thu, 23 Apr 2009 23:46:50 -0400 Date: Thu, 23 Apr 2009 23:46:49 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Eric Sandeen Cc: xfs@oss.sgi.com Message-ID: <773418105.4861240544809694.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <344266684.4811240544710893.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1240544987 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24036 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Eric Sandeen" wrote: > Lachlan McIlroy wrote: > > We had some systems crash with this stack: > > > > [] ia64_leave_kernel+0x0/0x280 > > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > > [] xfs_release+0x1b0/0x240 [xfs] > > [] xfs_file_release+0x70/0xa0 [xfs] > > [] __fput+0x1a0/0x420 > > [] fput+0x40/0x60 > > > > The problem here is that xfs_file_last_byte() does not acquire the > > inode lock and can therefore race with another thread that is > modifying > > the extext list. While xfs_bmap_last_offset() is trying to lookup > > what was the last extent some extents were merged and the extent > list > > shrunk so the index we lookup is now beyond the end of the extent > list > > and potentially in a freed buffer. > > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > > index e7ae08d..cf62d9d 100644 > > --- a/fs/xfs/xfs_inode.c > > +++ b/fs/xfs/xfs_inode.c > > @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > > /* > * Only check for blocks beyond the EOF if the extents have > * been read in. This eliminates the need for the inode > lock, > * and it also saves us from looking when it really isn't > > * necessary. > > */ > > I suppose that comment should be modified too, and maybe the commit > log > should say why, exactly, it was wrong? :) Ha, I didn't even read the comment! It's still kind of correct in that we wont have to get the inode lock if the extents have not been read in. > > -Eric > > > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > > + xfs_ilock(ip, XFS_ILOCK_SHARED); > > error = xfs_bmap_last_offset(NULL, ip, &last_block, > > XFS_DATA_FORK); > > + xfs_iunlock(ip, XFS_ILOCK_SHARED); > > if (error) { > > last_block = 0; > > } > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Thu Apr 23 23:25:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O4P9jQ057933 for ; Thu, 23 Apr 2009 23:25:09 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 3D4DA3040A4 for ; Thu, 23 Apr 2009 21:25:04 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id DEDB07000103; Thu, 23 Apr 2009 23:25:03 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <2890C8FC-5620-4F1B-8D25-A6DDC8527F7E@sgi.com> From: Felix Blyakher To: Lachlan McIlroy In-Reply-To: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Date: Thu, 23 Apr 2009 23:25:03 -0500 References: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 23, 2009, at 9:18 PM, Lachlan McIlroy wrote: > We had some systems crash with this stack: > > [] ia64_leave_kernel+0x0/0x280 > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > [] xfs_release+0x1b0/0x240 [xfs] > [] xfs_file_release+0x70/0xa0 [xfs] > [] __fput+0x1a0/0x420 > [] fput+0x40/0x60 > > The problem here is that xfs_file_last_byte() does not acquire the > inode lock and can therefore race with another thread that is > modifying > the extext list. While xfs_bmap_last_offset() is trying to lookup > what was the last extent some extents were merged and the extent list > shrunk so the index we lookup is now beyond the end of the extent list > and potentially in a freed buffer. > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index e7ae08d..cf62d9d 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > * necessary. > */ > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > + xfs_ilock(ip, XFS_ILOCK_SHARED); > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > + xfs_iunlock(ip, XFS_ILOCK_SHARED); > if (error) { > last_block = 0; > } My understanding from the original patch was that this is one part of the fix, and the other was the following change: @@ -3206,6 +3208,8 @@ xfs_bmap_del_extent( */ XFS_BMAP_TRACE_DELETE("3", ip, idx, 1, whichfork); xfs_iext_remove(ifp, idx, 1); + if (idx >= (ifp->if_bytes / (uint)sizeof(xfs_bmbt_rec_t))) + idx--; ifp->if_lastex = idx; if (delay) break; You don't think it's still needed, do you? Felix From lmcilroy@redhat.com Fri Apr 24 00:07:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O57fMH061772 for ; Fri, 24 Apr 2009 00:07:41 -0500 X-ASG-Debug-ID: 1240549657-439800c70000-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 A721C238736; Thu, 23 Apr 2009 22:07:37 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id O3s0Q9yU3fXB74a4; Thu, 23 Apr 2009 22:07:37 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3O57XPf010644; Fri, 24 Apr 2009 01:07:33 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3O57X24014147; Fri, 24 Apr 2009 01:07:33 -0400 Date: Fri, 24 Apr 2009 01:07:33 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Felix Blyakher Cc: xfs@oss.sgi.com Message-ID: <1819013313.5611240549653009.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <869141559.5581240549433363.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.71] 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: 1240549658 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24041 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Felix Blyakher" wrote: > On Apr 23, 2009, at 9:18 PM, Lachlan McIlroy wrote: > > > We had some systems crash with this stack: > > > > [] ia64_leave_kernel+0x0/0x280 > > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > > [] xfs_release+0x1b0/0x240 [xfs] > > [] xfs_file_release+0x70/0xa0 [xfs] > > [] __fput+0x1a0/0x420 > > [] fput+0x40/0x60 > > > > The problem here is that xfs_file_last_byte() does not acquire the > > inode lock and can therefore race with another thread that is > > modifying > > the extext list. While xfs_bmap_last_offset() is trying to lookup > > what was the last extent some extents were merged and the extent > list > > shrunk so the index we lookup is now beyond the end of the extent > list > > and potentially in a freed buffer. > > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > > index e7ae08d..cf62d9d 100644 > > --- a/fs/xfs/xfs_inode.c > > +++ b/fs/xfs/xfs_inode.c > > @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > > * necessary. > > */ > > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > > + xfs_ilock(ip, XFS_ILOCK_SHARED); > > error = xfs_bmap_last_offset(NULL, ip, &last_block, > > XFS_DATA_FORK); > > + xfs_iunlock(ip, XFS_ILOCK_SHARED); > > if (error) { > > last_block = 0; > > } > > My understanding from the original patch was that this is one part > of the fix, and the other was the following change: > > @@ -3206,6 +3208,8 @@ xfs_bmap_del_extent( > */ > XFS_BMAP_TRACE_DELETE("3", ip, idx, 1, whichfork); > xfs_iext_remove(ifp, idx, 1); > + if (idx >= (ifp->if_bytes / > (uint)sizeof(xfs_bmbt_rec_t))) > + idx--; > ifp->if_lastex = idx; > if (delay) > break; > > You don't think it's still needed, do you? Yes, I do think it is still needed. While it is related to the other locking patch it fixes a separate problem. The above change (and the rest of the associated changes in the patch) ensure that we don't explicitly index beyond the end of the extent map by having a stale value in if_lastex. > > Felix > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From jeffpc@josefsipek.net Fri Apr 24 01:01:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O61aA3064355 for ; Fri, 24 Apr 2009 01:01:37 -0500 X-ASG-Debug-ID: 1240552893-436f017a0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 87A7E238B76 for ; Thu, 23 Apr 2009 23:01:33 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id FsXqLbZffJ9Twge2 for ; Thu, 23 Apr 2009 23:01:33 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 0F74C1C00DEC; Fri, 24 Apr 2009 02:01:33 -0400 (EDT) Date: Fri, 24 Apr 2009 02:01:33 -0400 From: "Josef 'Jeff' Sipek" To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Subject: Re: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Message-ID: <20090424060133.GH3709@josefsipek.net> References: <49F0B379.2060309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49F0B379.2060309@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240552894 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0014 1.0000 -2.0117 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.2, rules version 3.2.1.24045 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 01:29:13PM -0500, Eric Sandeen wrote: > Due to the new quantum/holographic storage I'm testing, my > disks go infinitely fast, thereby breaking some filters: If you want, send me those drives, and I'll test them for you ;) > -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +3 KiB, 1 ops; 0.0000 sec (inf EiB/sec and inf ops/sec) > > I'm no regexp expert but I think the below change will fix it. > > Signed-off-by: Eric Sandeen Yep, that'll do it. Josef 'Jeff' Sipek. -- What is the difference between Mechanical Engineers and Civil Engineers? Mechanical Engineers build weapons, Civil Engineers build targets. From mike@fysh.org Fri Apr 24 04:21:33 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_43 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3O9LWU0072289 for ; Fri, 24 Apr 2009 04:21:33 -0500 X-ASG-Debug-ID: 1240564889-421102f50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from pond.fysh.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 6F4931CE46DD for ; Fri, 24 Apr 2009 02:21:29 -0700 (PDT) Received: from pond.fysh.org (pond.fysh.org [166.84.7.109]) by cuda.sgi.com with ESMTP id S8KoZOi9oeWkxrQM for ; Fri, 24 Apr 2009 02:21:29 -0700 (PDT) Received: from mike by pond.fysh.org with local (Exim 4.69 #1 (Debian)) id 1LxHb7-0005Sn-0i for xfs@oss.sgi.com; Fri, 24 Apr 2009 10:21:29 +0100 Date: Fri, 24 Apr 2009 10:21:29 +0100 From: Mike Ashton To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: fsck.xfs proposed improvements Subject: Re: fsck.xfs proposed improvements Message-ID: <20090424092128.GD16600@fysh.org> References: <20090421142333.GA5197@fysh.org> <49EE441E.6040606@thebarn.com> <20090422094527.GA16600@fysh.org> <87ws9cnz14.fsf@basil.nowhere.org> <20090423084900.GB16600@fysh.org> <49F062E5.70800@sandeen.net> <20090423141432.GC16600@fysh.org> <20090423143515.GA5878@fysh.org> <49F09521.9000103@thebarn.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49F09521.9000103@thebarn.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: pond.fysh.org[166.84.7.109] X-Barracuda-Start-Time: 1240564890 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24059 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 11:19:45AM -0500, Russell Cattelan wrote: > Traditional thinking with a journaled filesystem has been that if > there is a dirty log then you do not want to risk mounting the > filesystem in an inconsistent state an thereby risking a system > crash or file system shutdown due to that inconsistent state. Although I don't think you're doing anything more dangerous than mounting a non-fsck'd non-journaling filesystem read-only, which is the traditional unix boot method when you're not using initrd, I do accept that I've introduced a non-zero chance of a system crash in situations where everything is fine. I think I've thought of a compromise. I propose the addition of a new mount semantic, let's call it "tryrecovery" for now, which will replay a log if possible or mount the filesystem in an inconsistent state otherwise. So you would mark a filesystem as being a root fs, enabling this behaviour, and the kernel's attempt to mount its root filesystem would invoke this behaviour without the explicit knowledge of lilo, grub, kernel parameters, etc. I believe this would address both our concerns. In the general case, the behaviour will be as it is now; the journal is played, the root filesystem will be mounted into known a good states and there's no chance of a crash, but if everything's gone to hell, we allow fingers-crossed access to the filesystem to be able to get access to the xfs_repair tool. > Also in the case of a mount -norecover with any subsequent repair > being done, it is probably > best to reboot at that point to ensure there is no bad FS data that > may be in cache. A remount to read/write ought to invalidate any cache/buffers for exactly that reason. Cheers, Mike. From BATV+4560c6a2e8436a6f7d74+2070+infradead.org+hch@bombadil.srs.infradead.org Fri Apr 24 12:51:45 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3OHpcaN094051 for ; Fri, 24 Apr 2009 12:51:45 -0500 X-ASG-Debug-ID: 1240595496-621c03dd0000-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 049C31CE651F for ; Fri, 24 Apr 2009 10:51:36 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id J01Jf8yAmpw3hsjn for ; Fri, 24 Apr 2009 10:51:36 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LxPYl-0008Ov-PR; Fri, 24 Apr 2009 17:51:35 +0000 Date: Fri, 24 Apr 2009 13:51:35 -0400 From: Christoph Hellwig To: Eric Sandeen Cc: xfs mailing list X-ASG-Orig-Subj: Re: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Subject: Re: [PATCH] xfstests: fix 130, 132 for inifinitely-fast disks Message-ID: <20090424175135.GA32198@infradead.org> References: <49F0B379.2060309@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49F0B379.2060309@sandeen.net> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240595497 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 01:29:13PM -0500, Eric Sandeen wrote: > Due to the new quantum/holographic storage I'm testing, my > disks go infinitely fast, thereby breaking some filters: > > -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +3 KiB, 1 ops; 0.0000 sec (inf EiB/sec and inf ops/sec) > > I'm no regexp expert but I think the below change will fix it. Looks good to me. I used to see this too when running xfsqa under qemu (with really fast disk (=host pagecache) and a really slow cpu.. From BATV+4560c6a2e8436a6f7d74+2070+infradead.org+hch@bombadil.srs.infradead.org Fri Apr 24 12:52:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3OHqREm094219 for ; Fri, 24 Apr 2009 12:52:27 -0500 X-ASG-Debug-ID: 1240595545-070c01c20000-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 391251CE636F for ; Fri, 24 Apr 2009 10:52:25 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id nUsJWjHJOx1kp0bu for ; Fri, 24 Apr 2009 10:52:25 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LxPZY-0008TP-JS; Fri, 24 Apr 2009 17:52:24 +0000 Date: Fri, 24 Apr 2009 13:52:24 -0400 From: Christoph Hellwig To: Lachlan McIlroy Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Message-ID: <20090424175224.GB32198@infradead.org> References: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1240595545 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 23, 2009 at 10:18:00PM -0400, Lachlan McIlroy wrote: > We had some systems crash with this stack: > > [] ia64_leave_kernel+0x0/0x280 > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > [] xfs_release+0x1b0/0x240 [xfs] > [] xfs_file_release+0x70/0xa0 [xfs] > [] __fput+0x1a0/0x420 > [] fput+0x40/0x60 > > The problem here is that xfs_file_last_byte() does not acquire the > inode lock and can therefore race with another thread that is modifying > the extext list. While xfs_bmap_last_offset() is trying to lookup > what was the last extent some extents were merged and the extent list > shrunk so the index we lookup is now beyond the end of the extent list > and potentially in a freed buffer. Looks good. Reviewed-by: Christoph Hellwig From felixb@sgi.com Fri Apr 24 14:30:58 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3OJUwKu106091 for ; Fri, 24 Apr 2009 14:30:58 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 67B00AC00B for ; Fri, 24 Apr 2009 12:30:53 -0700 (PDT) Received: from eagdhcp-232-184.americas.sgi.com (eagdhcp-232-184.americas.sgi.com [128.162.232.184]) by estes.americas.sgi.com (Postfix) with ESMTP id 1699F700016A; Fri, 24 Apr 2009 14:30:53 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <6D1E2794-2E7D-4E98-A86D-2E2AD12D4427@sgi.com> From: Felix Blyakher To: Lachlan McIlroy In-Reply-To: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Date: Fri, 24 Apr 2009 14:30:52 -0500 References: <1624785772.3251240539480564.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 23, 2009, at 9:18 PM, Lachlan McIlroy wrote: > We had some systems crash with this stack: > > [] ia64_leave_kernel+0x0/0x280 > [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > [] xfs_bmap_last_offset+0x210/0x280 [xfs] > [] xfs_file_last_byte+0x70/0x1a0 [xfs] > [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] > [] xfs_release+0x1b0/0x240 [xfs] > [] xfs_file_release+0x70/0xa0 [xfs] > [] __fput+0x1a0/0x420 > [] fput+0x40/0x60 > > The problem here is that xfs_file_last_byte() does not acquire the > inode lock and can therefore race with another thread that is > modifying > the extext list. While xfs_bmap_last_offset() is trying to lookup > what was the last extent some extents were merged and the extent list > shrunk so the index we lookup is now beyond the end of the extent list > and potentially in a freed buffer. Looks good. Though, I'd wish to be able to reproduce it without the patch, and see it going away with the one. Reviewed-by: Felix Blyakher > > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index e7ae08d..cf62d9d 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > * necessary. > */ > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > + xfs_ilock(ip, XFS_ILOCK_SHARED); > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > + xfs_iunlock(ip, XFS_ILOCK_SHARED); > if (error) { > last_block = 0; > } > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Fri Apr 24 16:42:46 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3OLgkm5110941 for ; Fri, 24 Apr 2009 16:42:46 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id E8A003040A4 for ; Fri, 24 Apr 2009 14:42:41 -0700 (PDT) Received: from eagdhcp-232-184.americas.sgi.com (eagdhcp-232-184.americas.sgi.com [128.162.232.184]) by estes.americas.sgi.com (Postfix) with ESMTP id D776F700016A; Fri, 24 Apr 2009 16:42:41 -0500 (CDT) Cc: Eric Sandeen , xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Lachlan McIlroy In-Reply-To: <773418105.4861240544809694.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Date: Fri, 24 Apr 2009 16:42:41 -0500 References: <773418105.4861240544809694.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 23, 2009, at 10:46 PM, Lachlan McIlroy wrote: > > ----- "Eric Sandeen" wrote: > >> Lachlan McIlroy wrote: >>> We had some systems crash with this stack: >>> >>> [] ia64_leave_kernel+0x0/0x280 >>> [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] >>> [] xfs_bmap_last_offset+0x210/0x280 [xfs] >>> [] xfs_file_last_byte+0x70/0x1a0 [xfs] >>> [] xfs_itruncate_start+0xc0/0x1a0 [xfs] >>> [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] >>> [] xfs_release+0x1b0/0x240 [xfs] >>> [] xfs_file_release+0x70/0xa0 [xfs] >>> [] __fput+0x1a0/0x420 >>> [] fput+0x40/0x60 >>> >>> The problem here is that xfs_file_last_byte() does not acquire the >>> inode lock and can therefore race with another thread that is >> modifying >>> the extext list. While xfs_bmap_last_offset() is trying to lookup >>> what was the last extent some extents were merged and the extent >> list >>> shrunk so the index we lookup is now beyond the end of the extent >> list >>> and potentially in a freed buffer. >>> >>> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c >>> index e7ae08d..cf62d9d 100644 >>> --- a/fs/xfs/xfs_inode.c >>> +++ b/fs/xfs/xfs_inode.c >>> @@ -1258,8 +1258,10 @@ xfs_file_last_byte( >> >> /* >> * Only check for blocks beyond the EOF if the extents have >> * been read in. This eliminates the need for the inode >> lock, >> * and it also saves us from looking when it really isn't >>> * necessary. >>> */ >> >> I suppose that comment should be modified too, and maybe the commit >> log >> should say why, exactly, it was wrong? :) > Ha, I didn't even read the comment! It's still kind of correct in > that we wont have to get the inode lock if the extents have not been > > read in. I'd still think the comments could be made less confusing if we're adding the inode lock here. Felix > > >> >> -Eric >> >>> if (ip->i_df.if_flags & XFS_IFEXTENTS) { >>> + xfs_ilock(ip, XFS_ILOCK_SHARED); >>> error = xfs_bmap_last_offset(NULL, ip, &last_block, >>> XFS_DATA_FORK); >>> + xfs_iunlock(ip, XFS_ILOCK_SHARED); >>> if (error) { >>> last_block = 0; >>> } >>> >>> _______________________________________________ >>> xfs mailing list >>> xfs@oss.sgi.com >>> http://oss.sgi.com/mailman/listinfo/xfs >>> >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From petersen@strands.com Fri Apr 24 18:01:27 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3ON1QGJ113981 for ; Fri, 24 Apr 2009 18:01:27 -0500 X-ASG-Debug-ID: 1240614083-2d8001a20000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.strands.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A5B001CE65DB for ; Fri, 24 Apr 2009 16:01:23 -0700 (PDT) Received: from mail.strands.com (mail.strands.com [217.116.18.226]) by cuda.sgi.com with ESMTP id l1Qbe8kqnWv7Dqck for ; Fri, 24 Apr 2009 16:01:23 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.strands.com (Postfix) with ESMTP id 43E603051E1 for ; Sat, 25 Apr 2009 01:01:23 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: Debian amavisd-new at mail.strands.com Received: from mail.strands.com ([127.0.0.1]) by localhost (mail.strands.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7wmpc3VGM+Dc for ; Sat, 25 Apr 2009 01:01:22 +0200 (CEST) Received: from dhcp-client-1-54.cor.mystrands.in (cor-fw [206.192.226.50]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (Client did not present a certificate) (Authenticated sender: petersen) by mail.strands.com (Postfix) with ESMTPSA id 111BA305453 for ; Sat, 25 Apr 2009 01:01:21 +0200 (CEST) Message-Id: <73EE3FB2-381F-43F1-82C1-FA4C020E7C02@strands.com> From: Poul Petersen To: xfs@oss.sgi.com Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) X-ASG-Orig-Subj: Slab memory usage Subject: Slab memory usage Date: Fri, 24 Apr 2009 16:01:18 -0700 X-Mailer: Apple Mail (2.930.3) X-Barracuda-Connect: mail.strands.com[217.116.18.226] X-Barracuda-Start-Time: 1240614084 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24111 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean I'm running Debian Lenny with kernel 2.6.26-1-amd64 and xfsprogs-2.9.8-1. I've been having a problem with the amount of slab memory that XFS seems to be consuming when running a rsync backup job, a du, or other file-system intensive programs. Below is an example of the output of slabtop and /proc/meminfo. I'm running a tool that monitors free memory space, and it starts generating alerts, though I don't blame it when the SLAB is running at 50% of memory! When the process finishes, the memory usually frees up over a period of several hours. However, on a similar system, even 24 hours after the rsync job finished, the slab never freed up. On that machine, if I run: echo 2 > /proc/sys/vm/drop_caches Then the slab goes down to something more like 1% or 2% of system RAM. Any ideas what is causing this behaviour? And how I might alleviate it? Thanks, -poul slabtop ======= Active / Total Objects (% used) : 7684622 / 7875871 (97.6%) Active / Total Slabs (% used) : 720661 / 720662 (100.0%) Active / Total Caches (% used) : 105 / 176 (59.7%) Active / Total Size (% used) : 2683658.81K / 2702989.38K (99.3%) Minimum / Average / Maximum Object : 0.02K / 0.34K / 4096.00K OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME 1933952 1933787 99% 0.44K 241744 8 966976K xfs_inode 1933918 1933787 99% 0.56K 276274 7 1105096K xfs_vnode 1361008 1359980 99% 0.20K 71632 19 286528K dentry 1311360 1309586 99% 0.12K 43712 30 174848K size-128 1030770 1030548 99% 0.25K 68718 15 274872K size-256 /proc/meminfo ============= MemTotal: 8265368 kB MemFree: 54160 kB Buffers: 4252 kB Cached: 416880 kB SwapCached: 166676 kB Active: 4999204 kB Inactive: 278028 kB SwapTotal: 1951856 kB SwapFree: 1761736 kB Dirty: 324 kB Writeback: 0 kB AnonPages: 4855084 kB Mapped: 12632 kB Slab: 2883536 kB SReclaimable: 2411420 kB SUnreclaim: 472116 kB PageTables: 870112 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6084540 kB Committed_AS: 5172208 kB VmallocTotal: 34359738367 kB VmallocUsed: 90988 kB VmallocChunk: 34359647323 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB From sandeen@sandeen.net Fri Apr 24 20:01:36 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3P11adc121323 for ; Fri, 24 Apr 2009 20:01:36 -0500 X-ASG-Debug-ID: 1240621293-20c300270000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 403071CE72B1 for ; Fri, 24 Apr 2009 18:01:33 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id lLTUqc2NajiVLj0G for ; Fri, 24 Apr 2009 18:01:33 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 581FEA9B0B2; Fri, 24 Apr 2009 20:01:32 -0500 (CDT) Message-ID: <49F260F1.4030503@sandeen.net> Date: Fri, 24 Apr 2009 20:01:37 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Poul Petersen CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Slab memory usage Subject: Re: Slab memory usage References: <73EE3FB2-381F-43F1-82C1-FA4C020E7C02@strands.com> In-Reply-To: <73EE3FB2-381F-43F1-82C1-FA4C020E7C02@strands.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: 1240621294 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24119 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Poul Petersen wrote: > I'm running Debian Lenny with kernel 2.6.26-1-amd64 and > xfsprogs-2.9.8-1. I've been having a problem with the amount of slab > memory that XFS seems to be consuming when running a rsync backup job, > a du, or other file-system intensive programs. Below is an example of > the output of slabtop and /proc/meminfo. I'm running a tool that > monitors free memory space, and it starts generating alerts, though I > don't blame it when the SLAB is running at 50% of memory! > > When the process finishes, the memory usually frees up over a period > of several hours. However, on a similar system, even 24 hours after > the rsync job finished, the slab never freed up. On that machine, if I > run: > > echo 2 > /proc/sys/vm/drop_caches > > Then the slab goes down to something more like 1% or 2% of system > RAM. Any ideas what is causing this behaviour? And how I might > alleviate it? > > Thanks, > > -poul > > slabtop > ======= > > Active / Total Objects (% used) : 7684622 / 7875871 (97.6%) > Active / Total Slabs (% used) : 720661 / 720662 (100.0%) > Active / Total Caches (% used) : 105 / 176 (59.7%) > Active / Total Size (% used) : 2683658.81K / 2702989.38K (99.3%) > Minimum / Average / Maximum Object : 0.02K / 0.34K / 4096.00K > > OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME > 1933952 1933787 99% 0.44K 241744 8 966976K xfs_inode > 1933918 1933787 99% 0.56K 276274 7 1105096K xfs_vnode > 1361008 1359980 99% 0.20K 71632 19 286528K dentry o/~ the dentry's connected to the ... v-node, the v-node's connected to the ... i-node .... o/~ This is really mostly the linux vfs hanging onto the dentries. This in turn pins the inodes and related xfs structures. But, your memory is there for caching, most of the time. If it's not (mostly) used, then it's wasted. If the memory is needed for other purposes, the vfs frees the cached dentries, which in turn frees the related structures. This really isn't necessarily indicative of a problem. There are some tunables* you could play with to change this behavior if you like, but unless you are actually seeing performance problems, I wouldn't be too concerned. -Eric *from Documentation/sysctl/vm.txt: vfs_cache_pressure ------------------ Controls the tendency of the kernel to reclaim the memory which is used for caching of directory and inode objects. At the default value of vfs_cache_pressure=100 the kernel will attempt to reclaim dentries and inodes at a "fair" rate with respect to pagecache and swapcache reclaim. Decreasing vfs_cache_pressure causes the kernel to prefer to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100 causes the kernel to prefer to reclaim dentries and inodes. From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_35 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE79cm233106 for ; Sun, 26 Apr 2009 09:07:11 -0500 X-ASG-Debug-ID: 1240754828-631c02f10000-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 4D8AF1CE98A6 for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id uw0fKEgY7as3zd1I for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50d-0008Jl-Vh for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:08 +0000 Message-Id: <20090426140707.884922000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:08 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 3/5] xfs: make inodes dirty before issuing I/O Subject: [PATCH 3/5] xfs: make inodes dirty before issuing I/O References: <20090426140305.113371000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-mark-inode-dirty-early 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: 1240754828 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean To make sure they get properly waited on in sync when I/O is in flight and we latter need to update the inode size. Index: linux-2.6/fs/xfs/linux-2.6/xfs_aops.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_aops.c 2009-04-26 10:33:05.556127371 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_aops.c 2009-04-26 10:37:23.137953826 +0200 @@ -186,19 +186,37 @@ xfs_destroy_ioend( } /* + * If the end of the current ioend is beyond the current EOF, + * return the new EOF value, otherwise zero. + */ +STATIC xfs_fsize_t +xfs_ioend_new_eof( + xfs_ioend_t *ioend) +{ + xfs_inode_t *ip = XFS_I(ioend->io_inode); + xfs_fsize_t isize; + xfs_fsize_t bsize; + + bsize = ioend->io_offset + ioend->io_size; + isize = MAX(ip->i_size, ip->i_new_size); + isize = MIN(isize, bsize); + return isize > ip->i_d.di_size ? isize : 0; +} + +/* * Update on-disk file size now that data has been written to disk. * The current in-memory file size is i_size. If a write is beyond * eof i_new_size will be the intended file size until i_size is * updated. If this write does not extend all the way to the valid * file size then restrict this update to the end of the write. */ + STATIC void xfs_setfilesize( xfs_ioend_t *ioend) { xfs_inode_t *ip = XFS_I(ioend->io_inode); xfs_fsize_t isize; - xfs_fsize_t bsize; ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFREG); ASSERT(ioend->io_type != IOMAP_READ); @@ -206,14 +224,9 @@ xfs_setfilesize( if (unlikely(ioend->io_error)) return; - bsize = ioend->io_offset + ioend->io_size; - xfs_ilock(ip, XFS_ILOCK_EXCL); - - isize = MAX(ip->i_size, ip->i_new_size); - isize = MIN(isize, bsize); - - if (ip->i_d.di_size < isize) { + isize = xfs_ioend_new_eof(ioend); + if (isize) { ip->i_d.di_size = isize; ip->i_update_core = 1; ip->i_update_size = 1; @@ -405,10 +418,16 @@ xfs_submit_ioend_bio( struct bio *bio) { atomic_inc(&ioend->io_remaining); - bio->bi_private = ioend; bio->bi_end_io = xfs_end_bio; + /* + * if the I/O is beyond EOF we mark the inode dirty immediately + * but don't update the inode size until I/O completion. + */ + if (xfs_ioend_new_eof(ioend)) + xfs_mark_inode_dirty_sync(XFS_I(ioend->io_inode)); + submit_bio(WRITE, bio); ASSERT(!bio_flagged(bio, BIO_EOPNOTSUPP)); bio_put(bio); From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE79CF233107 for ; Sun, 26 Apr 2009 09:07:12 -0500 X-ASG-Debug-ID: 1240754828-16da03e60000-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 7D04D23E3DF for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id 4jC9D6bpn27Gok8R for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50d-0008Hg-K9 for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:07 +0000 Message-Id: <20090426140707.533370000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:06 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 1/5] xfs: remove ->write_super and stop maintaining ->s_dirt Subject: [PATCH 1/5] xfs: remove ->write_super and stop maintaining ->s_dirt References: <20090426140305.113371000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-stop-maintaining-s_dirt 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: 1240754828 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean the write_super method is used for (1) writing back the superblock periodically from pdflush (2) called just before ->sync_fs for data integerity syncs (3) just before ->put_super We don't need (1) because we have our own peridoc writeout through xfssyncd, we don't need (2) because xfs_fs_sync_fs performs a proper synchronous superblock writeout after all other data and metadata has been written out, and we don't need (3) because we synchronously write the superblock in ->put_super once the filesystem is fully shut down. Also remove ->s_dirt tracking as it's only used to decide when too call ->write_super. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.c 2009-04-26 10:33:36.051949562 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.c 2009-04-26 10:34:19.962075469 +0200 @@ -1104,15 +1104,6 @@ xfs_fs_put_super( kfree(mp); } -STATIC void -xfs_fs_write_super( - struct super_block *sb) -{ - if (!(sb->s_flags & MS_RDONLY)) - xfs_sync_fsdata(XFS_M(sb), 0); - sb->s_dirt = 0; -} - STATIC int xfs_fs_sync_super( struct super_block *sb, @@ -1137,7 +1128,6 @@ xfs_fs_sync_super( error = xfs_quiesce_data(mp); else error = xfs_sync_fsdata(mp, 0); - sb->s_dirt = 0; if (unlikely(laptop_mode)) { int prev_sync_seq = mp->m_sync_seq; @@ -1443,7 +1433,6 @@ xfs_fs_fill_super( XFS_SEND_MOUNT(mp, DM_RIGHT_NULL, mtpt, mp->m_fsname); - sb->s_dirt = 1; sb->s_magic = XFS_SB_MAGIC; sb->s_blocksize = mp->m_sb.sb_blocksize; sb->s_blocksize_bits = ffs(sb->s_blocksize) - 1; @@ -1533,7 +1522,6 @@ static struct super_operations xfs_super .write_inode = xfs_fs_write_inode, .clear_inode = xfs_fs_clear_inode, .put_super = xfs_fs_put_super, - .write_super = xfs_fs_write_super, .sync_fs = xfs_fs_sync_super, .freeze_fs = xfs_fs_freeze, .statfs = xfs_fs_statfs, Index: linux-2.6/fs/xfs/xfs_trans.c =================================================================== --- linux-2.6.orig/fs/xfs/xfs_trans.c 2009-04-26 10:33:25.534949105 +0200 +++ linux-2.6/fs/xfs/xfs_trans.c 2009-04-26 10:33:31.760951563 +0200 @@ -628,8 +628,6 @@ xfs_trans_apply_sb_deltas( xfs_trans_log_buf(tp, bp, offsetof(xfs_dsb_t, sb_icount), offsetof(xfs_dsb_t, sb_frextents) + sizeof(sbp->sb_frextents) - 1); - - tp->t_mountp->m_super->s_dirt = 1; } /* From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE79jM233111 for ; Sun, 26 Apr 2009 09:07:11 -0500 X-ASG-Debug-ID: 1240754828-631d02ea0000-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 8D6851CE98AE for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id LLi38SQECazWLt8P for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50e-0008Lr-4O for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:08 +0000 Message-Id: <20090426140708.037795000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:09 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 4/5] xfs: make sure xfs_sync_fsdata covers the log Subject: [PATCH 4/5] xfs: make sure xfs_sync_fsdata covers the log References: <20090426140305.113371000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-fix-xfs_sync_fsdata 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: 1240754828 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean We want to always cover the log after writing out the superblock, and in case of a synchronous writeout make sure we actually wait for the log to be covered. That way a filesystem that has been sync()ed can be considered clean by log recovery. Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-04-26 10:08:01.468074092 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.c 2009-04-26 10:28:37.049956907 +0200 @@ -208,11 +210,15 @@ xfs_sync_inodes( STATIC int xfs_commit_dummy_trans( struct xfs_mount *mp, - uint log_flags) + uint flags) { struct xfs_inode *ip = mp->m_rootip; struct xfs_trans *tp; int error; + int log_flags = XFS_LOG_FORCE; + + if (flags & SYNC_WAIT) + log_flags |= XFS_LOG_SYNC; /* * Put a dummy transaction in the log to tell recovery @@ -230,13 +236,12 @@ xfs_commit_dummy_trans( xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - /* XXX(hch): ignoring the error here.. */ error = xfs_trans_commit(tp, 0); - xfs_iunlock(ip, XFS_ILOCK_EXCL); + /* the log force ensures this transaction is pushed to disk */ xfs_log_force(mp, 0, log_flags); - return 0; + return error; } int @@ -276,6 +281,7 @@ xfs_sync_fsdata( */ if (XFS_BUF_ISPINNED(bp)) xfs_log_force(mp, 0, XFS_LOG_FORCE); + xfs_flush_buftarg(mp->m_ddev_targp, 1); } @@ -284,7 +290,10 @@ xfs_sync_fsdata( else XFS_BUF_ASYNC(bp); - return xfs_bwrite(mp, bp); + error = xfs_bwrite(mp, bp); + if (!error && xfs_log_need_covered(mp)) + error = xfs_commit_dummy_trans(mp, (flags & SYNC_WAIT)); + return error; out_brelse: xfs_buf_relse(bp); @@ -469,8 +478,6 @@ xfs_sync_worker( /* dgc: errors ignored here */ error = XFS_QM_DQSYNC(mp, SYNC_BDFLUSH); error = xfs_sync_fsdata(mp, SYNC_BDFLUSH); - if (xfs_log_need_covered(mp)) - error = xfs_commit_dummy_trans(mp, XFS_LOG_FORCE); } mp->m_sync_seq++; wake_up(&mp->m_wait_single_sync_task); From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE79hT233113 for ; Sun, 26 Apr 2009 09:07:12 -0500 X-ASG-Debug-ID: 1240755016-2acb01b70000-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 0C2B3144D3E4 for ; Sun, 26 Apr 2009 07:10:16 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id ZY127XHz0MJbURat for ; Sun, 26 Apr 2009 07:10:16 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50d-0008IE-Qo for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:07 +0000 Message-Id: <20090426140707.713299000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:07 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 2/5] xfs: cleanup ->sync_fs Subject: [PATCH 2/5] xfs: cleanup ->sync_fs References: <20090426140305.113371000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-cleanup-sync_fs 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: 1240755017 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Sort out ->sync_fs to not perform a superblock writeback for the wait = 0 case as that is just an optional first pass and the superblock will be written back properly in the next call with wait = 1. Instead perform an opportunistic quota writeback to have less work later. Also remove the freeze special case as we do a proper wait = 1 call in the freeze code anyway. Also rename the function to xfs_fs_sync_fs to match the normal naming convention, update comments and avoid calling into the laptop_mode logic on an error. Signed-off-by: Christoph Hellwig Index: linux-2.6/fs/xfs/linux-2.6/xfs_super.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_super.c 2009-04-26 10:39:20.433949442 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_super.c 2009-04-26 10:43:31.297949640 +0200 @@ -1105,7 +1105,7 @@ xfs_fs_put_super( } STATIC int -xfs_fs_sync_super( +xfs_fs_sync_fs( struct super_block *sb, int wait) { @@ -1113,23 +1113,23 @@ xfs_fs_sync_super( int error; /* - * Treat a sync operation like a freeze. This is to work - * around a race in sync_inodes() which works in two phases - * - an asynchronous flush, which can write out an inode - * without waiting for file size updates to complete, and a - * synchronous flush, which wont do anything because the - * async flush removed the inode's dirty flag. Also - * sync_inodes() will not see any files that just have - * outstanding transactions to be flushed because we don't - * dirty the Linux inode until after the transaction I/O - * completes. + * Not much we can do fort the first async pass. Writing out the + * superblock would be contra-productive as we are going to redirty + * when writing out other data and metadata (and writing out a single + * block is quite fast anyway. + * + * Try to asynchronously kick of quota syncing at least. */ - if (wait || unlikely(sb->s_frozen == SB_FREEZE_WRITE)) - error = xfs_quiesce_data(mp); - else - error = xfs_sync_fsdata(mp, 0); + if (!wait) { + XFS_QM_DQSYNC(mp, SYNC_BDFLUSH); + return 0; + } + + error = xfs_quiesce_data(mp); + if (error) + return -error; - if (unlikely(laptop_mode)) { + if (laptop_mode) { int prev_sync_seq = mp->m_sync_seq; /* @@ -1148,7 +1148,7 @@ xfs_fs_sync_super( mp->m_sync_seq != prev_sync_seq); } - return -error; + return 0; } STATIC int @@ -1522,7 +1522,7 @@ static struct super_operations xfs_super .write_inode = xfs_fs_write_inode, .clear_inode = xfs_fs_clear_inode, .put_super = xfs_fs_put_super, - .sync_fs = xfs_fs_sync_super, + .sync_fs = xfs_fs_sync_fs, .freeze_fs = xfs_fs_freeze, .statfs = xfs_fs_statfs, .remount_fs = xfs_fs_remount, From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:12 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE7AQU233116 for ; Sun, 26 Apr 2009 09:07:12 -0500 X-ASG-Debug-ID: 1240755017-2af701a20000-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 80372144D3E7 for ; Sun, 26 Apr 2009 07:10:17 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id FXiwLSzMg2WQnlsy for ; Sun, 26 Apr 2009 07:10:17 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50e-0008MN-C5 for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:08 +0000 Message-Id: <20090426140708.279368000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:10 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 5/5] xfs: fix xfs_quiesce_data Subject: [PATCH 5/5] xfs: fix xfs_quiesce_data References: <20090426140305.113371000@bombadil.infradead.org> Content-Disposition: inline; filename=xfs-fix-xfs_quiesce_data 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: 1240755017 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean We need to do a synchronous xfs_sync_fsdata to make sure the superblock actually is on disk when we return. While we're at it also remove the superflous SYNC_BDFLUSH flag to xfs_sync_inodes, and move the xfs_filestream_flush call later [hch: why? seems unrelated]. Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.c =================================================================== --- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.c 2009-04-26 10:46:17.112949525 +0200 +++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.c 2009-04-26 10:48:19.713979813 +0200 @@ -323,16 +323,16 @@ xfs_quiesce_data( int error; /* push non-blocking */ - xfs_sync_inodes(mp, SYNC_DELWRI|SYNC_BDFLUSH); + xfs_sync_inodes(mp, SYNC_DELWRI); XFS_QM_DQSYNC(mp, SYNC_BDFLUSH); - xfs_filestream_flush(mp); - /* push and block */ + /* push and block till complete */ xfs_sync_inodes(mp, SYNC_DELWRI|SYNC_WAIT|SYNC_IOWAIT); XFS_QM_DQSYNC(mp, SYNC_WAIT); + xfs_filestream_flush(mp); /* write superblock and hoover up shutdown errors */ - error = xfs_sync_fsdata(mp, 0); + error = xfs_sync_fsdata(mp, SYNC_WAIT); /* flush data-only devices */ if (mp->m_rtdev_targp) From BATV+f355cb09103262bd4abd+2072+infradead.org+hch@bombadil.srs.infradead.org Sun Apr 26 09:07:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QE79GU233109 for ; Sun, 26 Apr 2009 09:07:12 -0500 X-ASG-Debug-ID: 1240754828-544001ae0000-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 8AE7C23E3E1 for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id EJ1NcFYz5fFQFGKr for ; Sun, 26 Apr 2009 07:07:08 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1Ly50d-0008Gu-Dx for xfs@oss.sgi.com; Sun, 26 Apr 2009 14:07:07 +0000 Message-Id: <20090426140305.113371000@bombadil.infradead.org> User-Agent: quilt/0.47-1 Date: Sun, 26 Apr 2009 10:03:05 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH 0/5] fix sync (test 182, grub) Subject: [PATCH 0/5] fix sync (test 182, grub) 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: 1240754828 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Revisit Dave's prototype to make sync equivalent to freeze, that is make sure not only we have all data on disk, but also the metadata in the right place and not requite a log recovery. That fixes test 182 and should also help with the frequent grub complaints. The patches require Jan Kara's sync rewrite on -fsdevel and lkml (http://lkml.indiana.edu/hypermail/linux/kernel/0904.2/03643.html) so that sync actually calls into the filesystem in the correct order for the various parts of sync activity. From michael.monnerie@is.it-management.at Sun Apr 26 16:51:29 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3QLpRps252312 for ; Sun, 26 Apr 2009 16:51:28 -0500 X-ASG-Debug-ID: 1240782684-4d9200320000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B915F1CEA2EB for ; Sun, 26 Apr 2009 14:51:24 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id EBEqtMwTCwbsenYu for ; Sun, 26 Apr 2009 14:51:24 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217107103.dyn.cm.kabsi.at [81.217.107.103]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 1B5135144 for ; Sun, 26 Apr 2009 23:51:28 +0200 (CEST) Received: from saturn.localnet (saturn.i.zmi.at [10.0.0.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 764E340017B for ; Sun, 26 Apr 2009 23:51:23 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Slab memory usage Subject: Re: Slab memory usage Date: Sun, 26 Apr 2009 23:51:22 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.29.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <73EE3FB2-381F-43F1-82C1-FA4C020E7C02@strands.com> <49F260F1.4030503@sandeen.net> In-Reply-To: <49F260F1.4030503@sandeen.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200904262351.22970@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1240782685 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0082 1.0000 -1.9677 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.97 X-Barracuda-Spam-Status: No, SCORE=-1.97 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24189 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Samstag 25 April 2009 Eric Sandeen wrote: > *from Documentation/sysctl/vm.txt: > > vfs_cache_pressure > ------------------ > > Controls the tendency of the kernel to reclaim the memory which is > used for caching of directory and inode objects. > > At the default value of vfs_cache_pressure=3D100 the kernel will > attempt to reclaim dentries and inodes at a "fair" rate with respect > to pagecache and swapcache reclaim. =A0Decreasing vfs_cache_pressure > causes the kernel to prefer to retain dentry and inode caches. > =A0Increasing vfs_cache_pressure beyond 100 causes the kernel to prefer > to reclaim dentries and inodes. So if I decrease it, lets say to 60, Linux prefers to remember=20 files/dirs over their content. An increase to 150 would mean Linux=20 prefers to keep file contents over dirs/files? If so, I think for a fileserver for many users accessing many=20 dirs/files, I'd prefer a lower value, in order to prevent searching.=20 Disk contents can be read fast, with all the read-ahead caching of=20 disks/controllers and Linux itself, but the scattered dirs take loooong=20 to scan sometimes. (Example: a foto collection with 50.000 files in many=20 dirs). Am I right? mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From jeffpc@josefsipek.net Mon Apr 27 03:40:38 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3R8ebKr012121 for ; Mon, 27 Apr 2009 03:40:38 -0500 X-ASG-Debug-ID: 1240821828-2b6e02b80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from josefsipek.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B0584144DD57 for ; Mon, 27 Apr 2009 01:43:48 -0700 (PDT) Received: from josefsipek.net (josefsipek.net [141.211.133.196]) by cuda.sgi.com with ESMTP id UoLxJiBHwlqkZOlo for ; Mon, 27 Apr 2009 01:43:48 -0700 (PDT) Received: by josefsipek.net (Postfix, from userid 1000) id 5CBBC1C0C9D8; Mon, 27 Apr 2009 04:40:35 -0400 (EDT) Date: Mon, 27 Apr 2009 04:40:35 -0400 From: "Josef 'Jeff' Sipek" To: Michael Monnerie Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: Slab memory usage Subject: Re: Slab memory usage Message-ID: <20090427084035.GO3709@josefsipek.net> References: <73EE3FB2-381F-43F1-82C1-FA4C020E7C02@strands.com> <49F260F1.4030503@sandeen.net> <200904262351.22970@zmi.at> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <200904262351.22970@zmi.at> User-Agent: Mutt/1.5.18 (2008-05-17) X-Barracuda-Connect: josefsipek.net[141.211.133.196] X-Barracuda-Start-Time: 1240821829 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0793 1.0000 -1.5180 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= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24231 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Sun, Apr 26, 2009 at 11:51:22PM +0200, Michael Monnerie wrote: > On Samstag 25 April 2009 Eric Sandeen wrote: > > *from Documentation/sysctl/vm.txt: > > > > vfs_cache_pressure > > ------------------ > > > > Controls the tendency of the kernel to reclaim the memory which is > > used for caching of directory and inode objects. > > > > At the default value of vfs_cache_pressure=100 the kernel will > > attempt to reclaim dentries and inodes at a "fair" rate with respect > > to pagecache and swapcache reclaim.  Decreasing vfs_cache_pressure > > causes the kernel to prefer to retain dentry and inode caches. > >  Increasing vfs_cache_pressure beyond 100 causes the kernel to prefer > > to reclaim dentries and inodes. > > So if I decrease it, lets say to 60, Linux prefers to remember > files/dirs over their content. An increase to 150 would mean Linux > prefers to keep file contents over dirs/files? Yep, that's right. > If so, I think for a fileserver for many users accessing many > dirs/files, I'd prefer a lower value, in order to prevent searching. > Disk contents can be read fast, with all the read-ahead caching of > disks/controllers and Linux itself, but the scattered dirs take loooong > to scan sometimes. (Example: a foto collection with 50.000 files in many > dirs). Am I right? Approximate answer is: it depends on the frequency of meta-data reads vs. data reads. Your reasoning is fine if whoever access the photo collection does not frequently read the photos themselves. Best answer is: benchmark it with the exact workload you have to deal with Josef 'Jeff' Sipek. -- Intellectuals solve problems; geniuses prevent them - Albert Einstein From SEMA-CR-1-48CUE6@ptcmarketing.com Mon Apr 27 06:07:03 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: **** X-Spam-Status: No, score=4.0 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3RB715F018277 for ; Mon, 27 Apr 2009 06:07:02 -0500 X-ASG-Debug-ID: 1240830420-4bde019e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 36ACA240495 for ; Mon, 27 Apr 2009 04:07:00 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id TJ8NLsaBHj3ZPEJF for ; Mon, 27 Apr 2009 04:07:00 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.40,253,1238990400"; d="scan'208,217";a="297544743" Received: from hqcrmint1.ptcnet.ptc.com ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 27 Apr 2009 07:01:42 -0400 Date: Mon, 27 Apr 2009 06:55:12 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: Expert Guidance on =?utf-8?q?PLM=E2=80=94from?= Intel, HP and PTC Subject: Expert Guidance on =?utf-8?q?PLM=E2=80=94from?= Intel, HP and PTC Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1240829737591_45597837 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1240830421 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1240829737591_45597837 Content-Type: text/plain; charset=UTF-8 How to Create an Optimal PLM Implementation Read New Article Series from Leaders in PLM solutions (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-3VRBYC&o=1-482XH5&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90973) What's the key to a successful PLM (Product Lifecycle Management) implementation? That's easy: solid upfront planning, proven PLM software, and the right choice of supporting applications, platforms and storage products. With a successful PLM implementation, you can achieve quicker time-to-market for products, lower development and production costs, and increased revenue during the life of the product. No doubt, we all want that PLM pot of gold, but what's the fastest, easiest route to the end of that rainbow? Most of us don't have the luxury of starting from scratch with PLM--but we do need to get moving fast, because we are now working in a functional, yet sub-optimal environment. We are spending far too much time searching for data, re-creating lost data, and repairing CAD models instead of creating new products or adding features to existing products. We know that we have to work smarter but we find ourselves wondering: * Where do we start? * How do we update our existing product development environment without interrupting current projects? * Where is the best place to spend our IT dollars? * How do we choose from the myriad options available? Now that PLM has been implemented and proven across global industry, there are clear answers to these important questions regarding best solutions, appropriate hardware, and ideal processors for PLM. This article series from HP, Intel and PTC will help you navigate the complex PLM IT territory. Click here to learn more (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-3VRBYC&o=1-482XH5&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90973) =============================================================================== contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-482XH5&campd=1-3VRBYC&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-482XH5&campd=1-3VRBYC&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com edit profile http://www.ptc.com/read?&w=2354034&t=/common/account/index.htm ------------------------------------------------------------------------------- This email was sent to: xfs@oss.sgi.com PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to . --BF_1240829737591_45597837 Content-Type: text/html; charset=UTF-8 Email 1 NA HP/PTC Marketing Program FY09
PTC.com

How to Create an Optimal PLM Implementation

Read New Article Series from Leaders in PLM solutions

What's the key to a successful PLM (Product Lifecycle Management) implementation? That's easy: solid upfront planning, proven PLM software, and the right choice of supporting applications, platforms and storage products. With a successful PLM implementation, you can achieve quicker time-to-market for products, lower development and production costs, and increased revenue during the life of the product. No doubt, we all want that PLM pot of gold, but what's the fastest, easiest route to the end of that rainbow?

Most of us don't have the luxury of starting from scratch with PLM--but we do need to get moving fast, because we are now working in a functional, yet sub-optimal environment. We are spending far too much time searching for data, re-creating lost data, and repairing CAD models instead of creating new products or adding features to existing products. We know that we have to work smarter but we find ourselves wondering:

  • Where do we start?
  • How do we update our existing product development environment without interrupting current projects?
  • Where is the best place to spend our IT dollars?
  • How do we choose from the myriad options available?

Now that PLM has been implemented and proven across global industry, there are clear answers to these important questions regarding best solutions, appropriate hardware, and ideal processors for PLM. This article series from HP, Intel and PTC will help you navigate the complex PLM IT territory.

Click here to learn more

contact PTC | privacy policy | unsubscribe | change preferences | edit profile
This email was sent to: xfs@oss.sgi.com     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank email to unsubscribe@ptc.com.
--BF_1240829737591_45597837-- From root@schmorp.de Mon Apr 27 21:02:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_47 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3S22gHb063256 for ; Mon, 27 Apr 2009 21:02:42 -0500 X-ASG-Debug-ID: 1240884157-53f801840000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.nethype.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 2E01E243AB0 for ; Mon, 27 Apr 2009 19:02:38 -0700 (PDT) Received: from mail.nethype.de (mail.nethype.de [78.47.73.129]) by cuda.sgi.com with ESMTP id YrtwbClG9Pumgboq for ; Mon, 27 Apr 2009 19:02:38 -0700 (PDT) Received: from [10.0.0.5] (helo=doom.schmorp.de) by mail.nethype.de with esmtp (Exim 4.69) (envelope-from ) id 1Lycea-0005Ht-KR for xfs@oss.sgi.com; Tue, 28 Apr 2009 02:02:36 +0000 Received: from [10.0.0.1] (helo=cerebro.laendle) by doom.schmorp.de with esmtp (Exim 4.69) (envelope-from ) id 1Lycea-0000rh-Eg for xfs@oss.sgi.com; Tue, 28 Apr 2009 02:02:36 +0000 Received: from root by cerebro.laendle with local (Exim 4.69) (envelope-from ) id 1Lycea-0003Zv-E6 for xfs@oss.sgi.com; Tue, 28 Apr 2009 04:02:36 +0200 Date: Tue, 28 Apr 2009 04:02:36 +0200 From: Marc Lehmann To: xfs@oss.sgi.com X-ASG-Orig-Subj: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) Subject: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) Message-ID: <20090428020236.GA13721@schmorp.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-PGP: "1024D/DA743396 1999-01-26 Marc Alexander Lehmann Key fingerprint = 475A FE9B D1D4 039E 01AC C217 A1E8 0270 DA74 3396" X-Barracuda-Connect: mail.nethype.de[78.47.73.129] X-Barracuda-Start-Time: 1240884159 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24298 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean (I am not on the list) I just had a crash on one of my machines involving xfs_fsr and xfs, with both kernels in the subject. The backtrace (also below) looks very similar to the one in http://archives.free.net.ph/message/20090402.024744.fd43d33b.en.html In addition, in both crashes, I had this line logged after restart: [ 87.556507] Filesystem "loop7": Access to block zero in inode 593140302 start_block: 0 start_off: 0 blkcnt: 0 extent-state: 0 lastx: 2 I run xfs_fsr regularly once a day, and ran it many times with 2.5.25-2 before without (apparently) any problems, but I recently upgraded from some older debian testing to lenny (which probably also upgraded xfs_fsr). [16417.013540] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018 [16417.013540] IP: [] :xfs:xfs_trans_find_item+0x0/0x5 [16417.013540] PGD 11d1f2067 PUD 11d026067 PMD 0 [16417.013540] Oops: 0000 [1] SMP [16417.013540] CPU 1 [16417.019603] Modules linked in: cpufreq_ondemand freq_table nfsd auth_rpcgss exportfs nfs lockd nfs_acl sunrpc nf_conntrack_ipv6 xt_state ip6table_filter ip6_tables ipt_MASQUERADE ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack iptable_mangle ipt_REJECT xt_tcpudp iptable_filter ip_tables x_tables xfs loop tun autofs4 w83627ehf hwmon_vid eeprom ipv6 snd_usb_audio snd_pcm_oss snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_usb_lib snd_rawmidi snd_seq_device snd_hwdep snd parport_pc pcspkr soundcore parport k8temp psmouse serio_raw shpchp pci_hotplug button i2c_nforce2 i2c_core evdev reiserfs dm_mirror dm_log dm_snapshot dm_mod sd_mod ide_disk ide_pci_generic amd74xx ide_core sata_nv megaraid ata_generic forcedeth ehci_hcd ohci_hcd thermal processor fan thermal_sys sata_via libata scsi_mod dock [16417.019603] Pid: 8767, comm: xfs_fsr Not tainted 2.6.26-1-amd64 #1 [16417.019603] RIP: 0010:[] [] :xfs:xfs_trans_find_item+0x0/0x5 [16417.019603] RSP: 0018:ffff81011e351c70 EFLAGS: 00010206 [16417.019603] RAX: 0000000000000008 RBX: ffff8100687e9cc8 RCX: ffff81011e351e04 [16417.019603] RDX: 0000000000000005 RSI: 0000000000000000 RDI: ffff8100687e9cc8 [16417.019603] RBP: ffffffffffffffff R08: 0000000000000000 R09: ffff81011e351d28 [16417.019603] R10: ffff8100bf88d6c0 R11: ffff8100bf88d6c0 R12: ffff81011f404b00 [16417.019603] R13: 0000000000000005 R14: 0000000000000000 R15: ffff8100d991a000 [16417.019603] FS: 00007f8be8dee6e0(0000) GS:ffff810123a7b8c0(0000) knlGS:00000000f7c7a6c0 [16417.019603] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [16417.019603] CR2: 0000000000000018 CR3: 000000010fafa000 CR4: 00000000000006e0 [16417.019603] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [16417.019603] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [16417.019603] Process xfs_fsr (pid: 8767, threadinfo ffff81011e350000, task ffff810097184d60) [16417.019603] Stack: ffffffffa02d4f1f 0000000000000000 ffff81011f404b00 ffff81011f404b60 [16417.019603] ffffffffa02a8471 ffff81011e351d58 0000000000000000 0000000000000000 [16417.019603] 0000000000000000 0000000000000296 0000000200000001 0000000000000000 [16417.019603] Call Trace: [16417.019603] [] ? :xfs:xfs_trans_log_inode+0x1a/0x42 [16417.019603] [] ? :xfs:xfs_bunmapi+0xa5b/0xad7 [16417.031595] [] ? :xfs:xfs_itruncate_finish+0x174/0x2ba [16417.031595] [] ? :xfs:xfs_inactive+0x1df/0x412 [16417.031595] [] ? __wake_up+0x38/0x4f [16417.031595] [] ? :xfs:xfs_fs_clear_inode+0xa4/0xe8 [16417.031595] [] ? clear_inode+0xad/0x104 [16417.031595] [] ? generic_delete_inode+0xc3/0x11f [16417.031595] [] ? d_kill+0x38/0x59 [16417.031595] [] ? dput+0xd3/0xdd [16417.031595] [] ? __fput+0x142/0x16b [16417.031595] [] ? filp_close+0x5d/0x65 [16417.031595] [] ? sys_close+0x7e/0xb7 [16417.031595] [] ? system_call_after_swapgs+0x8a/0x8f [16417.031595] [16417.031595] [16417.031595] Code: 4b 64 04 48 8b 44 24 10 48 89 a8 a0 00 00 00 48 8b 44 24 10 49 89 06 48 83 c4 18 44 89 e0 5b 5d 41 5c 41 5d 41 5e 41 5f c3 90 90 <48> 8b 46 18 c3 41 57 45 31 ff 41 56 45 31 f6 41 55 41 54 4c 8d [16417.031595] RIP [] :xfs:xfs_trans_find_item+0x0/0x5 [16417.031595] RSP [16417.031595] CR2: 0000000000000018 [16417.051239] ---[ end trace e573b4588b7924cb ]--- -- The choice of a Deliantra, the free code+content MORPG -----==- _GNU_ http://www.deliantra.net ----==-- _ generation ---==---(_)__ __ ____ __ Marc Lehmann --==---/ / _ \/ // /\ \/ / pcg@goof.com -=====/_/_//_/\_,_/ /_/\_\ From root@schmorp.de Mon Apr 27 22:24:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,J_CHICKENPOX_47 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3S3OAkp066809 for ; Mon, 27 Apr 2009 22:24:10 -0500 X-ASG-Debug-ID: 1240889047-1d7402230000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.nethype.de (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D92301CEF546 for ; Mon, 27 Apr 2009 20:24:07 -0700 (PDT) Received: from mail.nethype.de (mail.nethype.de [78.47.73.129]) by cuda.sgi.com with ESMTP id gISqnF4XwX2ENNXM for ; Mon, 27 Apr 2009 20:24:07 -0700 (PDT) Received: from [10.0.0.5] (helo=doom.schmorp.de) by mail.nethype.de with esmtp (Exim 4.69) (envelope-from ) id 1LydvT-0006BA-2g for xfs@oss.sgi.com; Tue, 28 Apr 2009 03:24:07 +0000 Received: from [10.0.0.1] (helo=cerebro.laendle) by doom.schmorp.de with esmtp (Exim 4.69) (envelope-from ) id 1LydvS-0005BF-Lz for xfs@oss.sgi.com; Tue, 28 Apr 2009 03:24:06 +0000 Received: from root by cerebro.laendle with local (Exim 4.69) (envelope-from ) id 1LydvS-0003iZ-Cj for xfs@oss.sgi.com; Tue, 28 Apr 2009 05:24:06 +0200 Date: Tue, 28 Apr 2009 05:24:06 +0200 From: Marc Lehmann To: xfs@oss.sgi.com X-ASG-Orig-Subj: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) Subject: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) Message-ID: <20090428032406.GA14234@schmorp.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Barracuda-Connect: mail.nethype.de[78.47.73.129] X-Barracuda-Start-Time: 1240889048 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.52 X-Barracuda-Spam-Status: No, SCORE=-1.52 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24304 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean (I am not on the list) As a followup, it seems I can "reproduce" the crash after a few hours of heavy I/O and running xfs_fsr in a loop (during which xfs_fsr does not actually defragment a file, i.e.): It also happens to the same filesystem each time (maybe because it does the heavy I/O),a and it is also the same filesystem where xfs_repair hangs in an endless loop often (but not always). (see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525880) The filesystem was created a month or so ago using blocksize of 512 and lazy-count=1, but I have many of those xfs filesystems. Since this is a production system and I have no backup abilities, I have to no choice but to reformat the disk now. [ 2492.159052] BUG: unable to handle kernel NULL pointer dereference at 0000000000000018 [ 2492.159299] IP: [] :xfs:xfs_trans_find_item+0x0/0x5 [ 2492.159484] PGD 10b0cc067 PUD 10b140067 PMD 0 [ 2492.159682] Oops: 0000 [1] SMP [ 2492.159841] CPU 1 [ 2492.159964] Modules linked in: cpufreq_ondemand freq_table nfsd auth_rpcgss exportfs nfs lockd nfs_acl sunrpc nf_conntrack_ipv6 xt_state ip6table_filter ip6_tables ipt_MASQUERADE ipt_REDIRECT iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack iptable_mangle ipt_REJECT xt_tcpudp iptable_filter ip_tables x_tables xfs loop tun autofs4 w83627ehf hwmon_vid eeprom ipv6 snd_usb_audio snd_pcm_oss snd_mixer_oss snd_pcm psmouse snd_timer parport_pc shpchp snd_usb_lib serio_raw parport snd_page_alloc k8temp pci_hotplug snd_rawmidi pcspkr snd_seq_device snd_hwdep snd soundcore i2c_nforce2 i2c_core button evdev reiserfs dm_mirror dm_log dm_snapshot dm_mod ide_disk sd_mod ide_pci_generic amd74xx ide_core megaraid sata_nv ata_generic forcedeth ehci_hcd ohci_hcd thermal processor fan thermal_sys sata_via libata scsi_mod dock [ 2492.163516] Pid: 5852, comm: xfs_fsr Not tainted 2.6.26-1-amd64 #1 [ 2492.163516] RIP: 0010:[] [] :xfs:xfs_trans_find_item+0x0/0x5 [ 2492.163516] RSP: 0018:ffff81010b2e3c70 EFLAGS: 00010206 [ 2492.163516] RAX: 0000000000000008 RBX: ffff81003a5ca688 RCX: ffff81010b2e3e04 [ 2492.163516] RDX: 0000000000000005 RSI: 0000000000000000 RDI: ffff81003a5ca688 [ 2492.167955] RBP: ffffffffffffffff R08: 0000000000000000 R09: ffff81010b2e3d28 [ 2492.167955] R10: ffff810054eb6b40 R11: ffff810054eb6b40 R12: ffff810113caa240 [ 2492.167955] R13: 0000000000000005 R14: 0000000000000000 R15: ffff81012182c000 [ 2492.167955] FS: 00007fd76f4d86e0(0000) GS:ffff810123a7b8c0(0000) knlGS:00000000f7ce66c0 [ 2492.167955] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 2492.167955] CR2: 0000000000000018 CR3: 00000001071dc000 CR4: 00000000000006e0 [ 2492.167955] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 2492.167955] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ 2492.167955] Process xfs_fsr (pid: 5852, threadinfo ffff81010b2e2000, task ffff810073692890) [ 2492.167955] Stack: ffffffffa02d4f1f 0000000000000000 ffff810113caa240 ffff810113caa2a0 [ 2492.167955] ffffffffa02a8471 ffff81010b2e3d58 0000000000000000 0000000000000000 [ 2492.167955] 0000000000000000 0000000000000296 0000000200000001 0000000000000000 [ 2492.167955] Call Trace: [ 2492.167955] [] ? :xfs:xfs_trans_log_inode+0x1a/0x42 [ 2492.167955] [] ? :xfs:xfs_bunmapi+0xa5b/0xad7 [ 2492.167955] [] ? :xfs:xfs_itruncate_finish+0x174/0x2ba [ 2492.167955] [] ? :xfs:xfs_inactive+0x1df/0x412 [ 2492.167955] [] ? __wake_up+0x38/0x4f [ 2492.167955] [] ? :xfs:xfs_fs_clear_inode+0xa4/0xe8 [ 2492.167955] [] ? clear_inode+0xad/0x104 [ 2492.167955] [] ? generic_delete_inode+0xc3/0x11f [ 2492.167955] [] ? d_kill+0x38/0x59 [ 2492.167955] [] ? dput+0xd3/0xdd [ 2492.167955] [] ? __fput+0x142/0x16b [ 2492.167955] [] ? filp_close+0x5d/0x65 [ 2492.167955] [] ? sys_close+0x7e/0xb7 [ 2492.167955] [] ? system_call_after_swapgs+0x8a/0x8f [ 2492.167955] [ 2492.167955] [ 2492.167955] Code: 4b 64 04 48 8b 44 24 10 48 89 a8 a0 00 00 00 48 8b 44 24 10 49 89 06 48 83 c4 18 44 89 e0 5b 5d 41 5c 41 5d 41 5e 41 5f c3 90 90 <48> 8b 46 18 c3 41 57 45 31 ff 41 56 45 31 f6 41 55 41 54 4c 8d [ 2492.167955] RIP [] :xfs:xfs_trans_find_item+0x0/0x5 [ 2492.167955] RSP [ 2492.167955] CR2: 0000000000000018 [ 2492.182149] ---[ end trace 3101a51508d9f1e4 ]--- -- The choice of a Deliantra, the free code+content MORPG -----==- _GNU_ http://www.deliantra.net ----==-- _ generation ---==---(_)__ __ ____ __ Marc Lehmann --==---/ / _ \/ // /\ \/ / pcg@goof.com -=====/_/_//_/\_,_/ /_/\_\ From lmcilroy@redhat.com Mon Apr 27 23:12:17 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3S4CGhP068505 for ; Mon, 27 Apr 2009 23:12:17 -0500 X-ASG-Debug-ID: 1240892128-3f6a00180000-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 573241452B0C for ; Mon, 27 Apr 2009 21:15:29 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id wKmXxFvQ1EHwO01X for ; Mon, 27 Apr 2009 21:15:29 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3S4Bbij013652; Tue, 28 Apr 2009 00:12:11 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3S4BahK021592; Tue, 28 Apr 2009 00:11:36 -0400 Date: Tue, 28 Apr 2009 00:11:36 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Felix Blyakher Cc: Eric Sandeen , xfs@oss.sgi.com Message-ID: <860553965.233621240891896139.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <1913401106.233581240891740242.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1240892130 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24307 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Felix Blyakher" wrote: > On Apr 23, 2009, at 10:46 PM, Lachlan McIlroy wrote: > > > > > ----- "Eric Sandeen" wrote: > > > >> Lachlan McIlroy wrote: > >>> We had some systems crash with this stack: > >>> > >>> [] ia64_leave_kernel+0x0/0x280 > >>> [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > >>> [] xfs_bmap_last_offset+0x210/0x280 [xfs] > >>> [] xfs_file_last_byte+0x70/0x1a0 [xfs] > >>> [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > >>> [] xfs_inactive_free_eofblocks+0x290/0x460 > [xfs] > >>> [] xfs_release+0x1b0/0x240 [xfs] > >>> [] xfs_file_release+0x70/0xa0 [xfs] > >>> [] __fput+0x1a0/0x420 > >>> [] fput+0x40/0x60 > >>> > >>> The problem here is that xfs_file_last_byte() does not acquire > the > >>> inode lock and can therefore race with another thread that is > >> modifying > >>> the extext list. While xfs_bmap_last_offset() is trying to > lookup > >>> what was the last extent some extents were merged and the extent > >> list > >>> shrunk so the index we lookup is now beyond the end of the extent > >> list > >>> and potentially in a freed buffer. > >>> > >>> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > >>> index e7ae08d..cf62d9d 100644 > >>> --- a/fs/xfs/xfs_inode.c > >>> +++ b/fs/xfs/xfs_inode.c > >>> @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > >> > >> /* > >> * Only check for blocks beyond the EOF if the extents have > >> * been read in. This eliminates the need for the inode > >> lock, > >> * and it also saves us from looking when it really isn't > >>> * necessary. > >>> */ > >> > >> I suppose that comment should be modified too, and maybe the > commit > >> log > >> should say why, exactly, it was wrong? :) > > Ha, I didn't even read the comment! It's still kind of correct in > > that we wont have to get the inode lock if the extents have not > been > > > > read in. > > I'd still think the comments could be made less confusing > if we're adding the inode lock here. The more I read the comment the more it makes sense and it seems to make more sense now with the change because it is clear how we can avoid the inode lock if the extents are not read in. How would you prefer the comment reads? > > Felix > > > > > > >> > >> -Eric > >> > >>> if (ip->i_df.if_flags & XFS_IFEXTENTS) { > >>> + xfs_ilock(ip, XFS_ILOCK_SHARED); > >>> error = xfs_bmap_last_offset(NULL, ip, &last_block, > >>> XFS_DATA_FORK); > >>> + xfs_iunlock(ip, XFS_ILOCK_SHARED); > >>> if (error) { > >>> last_block = 0; > >>> } > >>> > >>> _______________________________________________ > >>> xfs mailing list > >>> xfs@oss.sgi.com > >>> http://oss.sgi.com/mailman/listinfo/xfs > >>> > >> > >> _______________________________________________ > >> xfs mailing list > >> xfs@oss.sgi.com > >> http://oss.sgi.com/mailman/listinfo/xfs > > > > _______________________________________________ > > xfs mailing list > > xfs@oss.sgi.com > > http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From felixb@sgi.com Tue Apr 28 00:03:23 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3S53Ngr072611 for ; Tue, 28 Apr 2009 00:03:23 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 69BA4304081 for ; Mon, 27 Apr 2009 22:03:20 -0700 (PDT) Received: from [IPv6???1] (sshgate.corp.sgi.com [198.149.20.12]) by estes.americas.sgi.com (Postfix) with ESMTP id 2E81A7000103; Tue, 28 Apr 2009 00:03:20 -0500 (CDT) Cc: Eric Sandeen , xfs@oss.sgi.com Message-Id: <50EF6552-B061-4253-9643-719021CA443E@sgi.com> From: Felix Blyakher To: Lachlan McIlroy In-Reply-To: <860553965.233621240891896139.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Date: Tue, 28 Apr 2009 00:03:19 -0500 References: <860553965.233621240891896139.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-Mailer: Apple Mail (2.930.3) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 27, 2009, at 11:11 PM, Lachlan McIlroy wrote: > ----- "Felix Blyakher" wrote: > >> On Apr 23, 2009, at 10:46 PM, Lachlan McIlroy wrote: >> >>> >>> ----- "Eric Sandeen" wrote: >>> >>>> Lachlan McIlroy wrote: >>>>> We had some systems crash with this stack: >>>>> >>>>> [] ia64_leave_kernel+0x0/0x280 >>>>> [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] >>>>> [] xfs_bmap_last_offset+0x210/0x280 [xfs] >>>>> [] xfs_file_last_byte+0x70/0x1a0 [xfs] >>>>> [] xfs_itruncate_start+0xc0/0x1a0 [xfs] >>>>> [] xfs_inactive_free_eofblocks+0x290/0x460 >> [xfs] >>>>> [] xfs_release+0x1b0/0x240 [xfs] >>>>> [] xfs_file_release+0x70/0xa0 [xfs] >>>>> [] __fput+0x1a0/0x420 >>>>> [] fput+0x40/0x60 >>>>> >>>>> The problem here is that xfs_file_last_byte() does not acquire >> the >>>>> inode lock and can therefore race with another thread that is >>>> modifying >>>>> the extext list. While xfs_bmap_last_offset() is trying to >> lookup >>>>> what was the last extent some extents were merged and the extent >>>> list >>>>> shrunk so the index we lookup is now beyond the end of the extent >>>> list >>>>> and potentially in a freed buffer. >>>>> >>>>> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c >>>>> index e7ae08d..cf62d9d 100644 >>>>> --- a/fs/xfs/xfs_inode.c >>>>> +++ b/fs/xfs/xfs_inode.c >>>>> @@ -1258,8 +1258,10 @@ xfs_file_last_byte( >>>> >>>> /* >>>> * Only check for blocks beyond the EOF if the extents have >>>> * been read in. This eliminates the need for the inode >>>> lock, >>>> * and it also saves us from looking when it really isn't >>>>> * necessary. >>>>> */ >>>> >>>> I suppose that comment should be modified too, and maybe the >> commit >>>> log >>>> should say why, exactly, it was wrong? :) >>> Ha, I didn't even read the comment! It's still kind of correct in >>> that we wont have to get the inode lock if the extents have not >> been >>> >>> read in. >> >> I'd still think the comments could be made less confusing >> if we're adding the inode lock here. > The more I read the comment the more it makes sense and it seems to > make more sense now with the change because it is clear how we can > avoid the inode lock if the extents are not read in. OK, now after your explanation and reading the comments the Nth time, I think, I know what you mean. I think, the original comment intention was the following: if (ip->i_df.if_flags & XFS_IFEXTENTS) { // extents have been read in. This (the fact that the extents // have been read in) eliminates the need for the inode lock, as // we are not going to read them in through xfs_iread_extents(). error = xfs_bmap_last_offset(NULL, ip, &last_block, XFS_DATA_FORK); if (error) { last_block = 0; } } else { last_block = 0; } while in the patched version it'll become: if (ip->i_df.if_flags & XFS_IFEXTENTS) { // extents have been read in ... xfs_ilock(ip, XFS_ILOCK_SHARED); error = xfs_bmap_last_offset(NULL, ip, &last_block, XFS_DATA_FORK); xfs_iunlock(ip, XFS_ILOCK_SHARED); if (error) { last_block = 0; } } else { // this (the fact that the extents have _NOT_ been read in) // eliminates the need for the inode lock. // Doh, obvious. last_block = 0; } Is that how you see the comment now? Was the assumption in the original comment about not needing the ilock simply incorrect? > How would you prefer the comment reads? I'd just leave the first sentence from the original comment. * Only check for blocks beyond the EOF if the extents have * been read in. The mentioning about the ilock is too confusing now, imho. Felix > > >> >> Felix >> >>> >>> >>>> >>>> -Eric >>>> >>>>> if (ip->i_df.if_flags & XFS_IFEXTENTS) { >>>>> + xfs_ilock(ip, XFS_ILOCK_SHARED); >>>>> error = xfs_bmap_last_offset(NULL, ip, &last_block, >>>>> XFS_DATA_FORK); >>>>> + xfs_iunlock(ip, XFS_ILOCK_SHARED); >>>>> if (error) { >>>>> last_block = 0; >>>>> } >>>>> >>>>> _______________________________________________ >>>>> xfs mailing list >>>>> xfs@oss.sgi.com >>>>> http://oss.sgi.com/mailman/listinfo/xfs >>>>> >>>> >>>> _______________________________________________ >>>> xfs mailing list >>>> xfs@oss.sgi.com >>>> http://oss.sgi.com/mailman/listinfo/xfs >>> >>> _______________________________________________ >>> xfs mailing list >>> xfs@oss.sgi.com >>> http://oss.sgi.com/mailman/listinfo/xfs >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs From lmcilroy@redhat.com Tue Apr 28 00:33:07 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3S5X6eG073972 for ; Tue, 28 Apr 2009 00:33:06 -0500 X-ASG-Debug-ID: 1240896784-788e03360000-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 CD99F1CEF7F7 for ; Mon, 27 Apr 2009 22:33:05 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [66.187.233.31]) by cuda.sgi.com with ESMTP id s5eQMd9iL53CCWnM for ; Mon, 27 Apr 2009 22:33:05 -0700 (PDT) Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n3S5X4iC013439; Tue, 28 Apr 2009 01:33:04 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3S5X3Qx018853; Tue, 28 Apr 2009 01:33:04 -0400 Date: Tue, 28 Apr 2009 01:33:02 -0400 (EDT) From: Lachlan McIlroy Reply-To: Lachlan McIlroy To: Felix Blyakher Cc: Eric Sandeen , xfs@oss.sgi.com Message-ID: <1358225924.234061240896782828.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <50EF6552-B061-4253-9643-719021CA443E@sgi.com> X-ASG-Orig-Subj: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.5.5.72] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 X-Barracuda-Connect: mx1.redhat.com[66.187.233.31] X-Barracuda-Start-Time: 1240896785 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24312 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean ----- "Felix Blyakher" wrote: > On Apr 27, 2009, at 11:11 PM, Lachlan McIlroy wrote: > > > ----- "Felix Blyakher" wrote: > > > >> On Apr 23, 2009, at 10:46 PM, Lachlan McIlroy wrote: > >> > >>> > >>> ----- "Eric Sandeen" wrote: > >>> > >>>> Lachlan McIlroy wrote: > >>>>> We had some systems crash with this stack: > >>>>> > >>>>> [] ia64_leave_kernel+0x0/0x280 > >>>>> [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] > >>>>> [] xfs_bmap_last_offset+0x210/0x280 [xfs] > >>>>> [] xfs_file_last_byte+0x70/0x1a0 [xfs] > >>>>> [] xfs_itruncate_start+0xc0/0x1a0 [xfs] > >>>>> [] xfs_inactive_free_eofblocks+0x290/0x460 > >> [xfs] > >>>>> [] xfs_release+0x1b0/0x240 [xfs] > >>>>> [] xfs_file_release+0x70/0xa0 [xfs] > >>>>> [] __fput+0x1a0/0x420 > >>>>> [] fput+0x40/0x60 > >>>>> > >>>>> The problem here is that xfs_file_last_byte() does not acquire > >> the > >>>>> inode lock and can therefore race with another thread that is > >>>> modifying > >>>>> the extext list. While xfs_bmap_last_offset() is trying to > >> lookup > >>>>> what was the last extent some extents were merged and the > extent > >>>> list > >>>>> shrunk so the index we lookup is now beyond the end of the > extent > >>>> list > >>>>> and potentially in a freed buffer. > >>>>> > >>>>> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > >>>>> index e7ae08d..cf62d9d 100644 > >>>>> --- a/fs/xfs/xfs_inode.c > >>>>> +++ b/fs/xfs/xfs_inode.c > >>>>> @@ -1258,8 +1258,10 @@ xfs_file_last_byte( > >>>> > >>>> /* > >>>> * Only check for blocks beyond the EOF if the extents > have > >>>> * been read in. This eliminates the need for the inode > >>>> lock, > >>>> * and it also saves us from looking when it really isn't > >>>>> * necessary. > >>>>> */ > >>>> > >>>> I suppose that comment should be modified too, and maybe the > >> commit > >>>> log > >>>> should say why, exactly, it was wrong? :) > >>> Ha, I didn't even read the comment! It's still kind of correct > in > >>> that we wont have to get the inode lock if the extents have not > >> been > >>> > >>> read in. > >> > >> I'd still think the comments could be made less confusing > >> if we're adding the inode lock here. > > The more I read the comment the more it makes sense and it seems to > > make more sense now with the change because it is clear how we can > > avoid the inode lock if the extents are not read in. > > OK, now after your explanation and reading the comments the Nth time, > I think, I know what you mean. > > I think, the original comment intention was the following: > > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > // extents have been read in. This (the fact that the extents > // have been read in) eliminates the need for the inode lock, as > // we are not going to read them in through xfs_iread_extents(). > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > if (error) { > last_block = 0; > } > } else { > last_block = 0; > } > > while in the patched version it'll become: > > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > // extents have been read in ... > xfs_ilock(ip, XFS_ILOCK_SHARED); > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); > xfs_iunlock(ip, XFS_ILOCK_SHARED); > if (error) { > last_block = 0; > } > } else { > // this (the fact that the extents have _NOT_ been read in) > // eliminates the need for the inode lock. > // Doh, obvious. > last_block = 0; > } > > Is that how you see the comment now? Yes. And I think that was the intention of the comment all along. > > Was the assumption in the original comment about not needing the > ilock > simply incorrect? I don't think so. I think the more likely scenario is that someone erroneously removed the locking or it was never there to begin with. The locking is not there in version 1.1 in git so you'll have to look at ptools or the IRIX source to get the full history. > > > How would you prefer the comment reads? > > I'd just leave the first sentence from the original comment. > > * Only check for blocks beyond the EOF if the extents have > * been read in. > > The mentioning about the ilock is too confusing now, imho. > > Felix > > > > > > >> > >> Felix > >> > >>> > >>> > >>>> > >>>> -Eric > >>>> > >>>>> if (ip->i_df.if_flags & XFS_IFEXTENTS) { > >>>>> + xfs_ilock(ip, XFS_ILOCK_SHARED); > >>>>> error = xfs_bmap_last_offset(NULL, ip, &last_block, > >>>>> XFS_DATA_FORK); > >>>>> + xfs_iunlock(ip, XFS_ILOCK_SHARED); > >>>>> if (error) { > >>>>> last_block = 0; > >>>>> } > >>>>> > >>>>> _______________________________________________ > >>>>> xfs mailing list > >>>>> xfs@oss.sgi.com > >>>>> http://oss.sgi.com/mailman/listinfo/xfs > >>>>> > >>>> > >>>> _______________________________________________ > >>>> xfs mailing list > >>>> xfs@oss.sgi.com > >>>> http://oss.sgi.com/mailman/listinfo/xfs > >>> > >>> _______________________________________________ > >>> xfs mailing list > >>> xfs@oss.sgi.com > >>> http://oss.sgi.com/mailman/listinfo/xfs > >> > >> _______________________________________________ > >> xfs mailing list > >> xfs@oss.sgi.com > >> http://oss.sgi.com/mailman/listinfo/xfs > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From www@i-web.hu Tue Apr 28 05:25:54 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=BAYES_00,URIBL_BLACK autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3SAPrFY084114 for ; Tue, 28 Apr 2009 05:25:54 -0500 X-ASG-Debug-ID: 1240914351-352502390000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from i-web.hu (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 518861CF06A2 for ; Tue, 28 Apr 2009 03:25:51 -0700 (PDT) Received: from i-web.hu (i-web.hu [81.2.252.33]) by cuda.sgi.com with ESMTP id Yb5b6rDdTG3XgXny for ; Tue, 28 Apr 2009 03:25:51 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by i-web.hu (Postfix) with ESMTP id CA14F7A22A for ; Tue, 28 Apr 2009 12:26:30 +0200 (CEST) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Scanned: amavisd-new at i-web.hu Received: from i-web.hu ([127.0.0.1]) by localhost (i-web.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bkm+lD2o2YIj for ; Tue, 28 Apr 2009 12:26:27 +0200 (CEST) Received: by i-web.hu (Postfix, from userid 80) id 58EE87A3EC; Tue, 28 Apr 2009 12:24:11 +0200 (CEST) To: xfs@oss.sgi.com X-ASG-Orig-Subj: USAFestival.net Event Portal Subject: USAFestival.net Event Portal From: "USAFestival.net Team" Message-Id: <20090428102411.58EE87A3EC@i-web.hu> Date: Tue, 28 Apr 2009 12:24:11 +0200 (CEST) X-Barracuda-Connect: i-web.hu[81.2.252.33] X-Barracuda-Start-Time: 1240914352 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3392 1.0000 -0.1919 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -0.19 X-Barracuda-Spam-Status: No, SCORE=-0.19 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24331 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Status: Clean Upload Your event free at www.usafestival.net/upload Sincerely, www.usafestival.net From felixb@sgi.com Tue Apr 28 09:34:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3SEYEcx107342 for ; Tue, 28 Apr 2009 09:34:14 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id E0A9D304062 for ; Tue, 28 Apr 2009 07:34:11 -0700 (PDT) Received: from eagdhcp-232-184.americas.sgi.com (eagdhcp-232-184.americas.sgi.com [128.162.232.184]) by estes.americas.sgi.com (Postfix) with ESMTP id C22B670001C8; Tue, 28 Apr 2009 09:34:11 -0500 (CDT) Cc: Eric Sandeen , xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Lachlan McIlroy In-Reply-To: <1358225924.234061240896782828.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] xfs_file_last_byte() needs to acquire ilock Date: Tue, 28 Apr 2009 09:34:11 -0500 References: <1358225924.234061240896782828.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 28, 2009, at 12:33 AM, Lachlan McIlroy wrote: > ----- "Felix Blyakher" wrote: > >> On Apr 27, 2009, at 11:11 PM, Lachlan McIlroy wrote: >> >>> ----- "Felix Blyakher" wrote: >>> >>>> On Apr 23, 2009, at 10:46 PM, Lachlan McIlroy wrote: >>>> >>>>> >>>>> ----- "Eric Sandeen" wrote: >>>>> >>>>>> Lachlan McIlroy wrote: >>>>>>> We had some systems crash with this stack: >>>>>>> >>>>>>> [] ia64_leave_kernel+0x0/0x280 >>>>>>> [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] >>>>>>> [] xfs_bmap_last_offset+0x210/0x280 [xfs] >>>>>>> [] xfs_file_last_byte+0x70/0x1a0 [xfs] >>>>>>> [] xfs_itruncate_start+0xc0/0x1a0 [xfs] >>>>>>> [] xfs_inactive_free_eofblocks+0x290/0x460 >>>> [xfs] >>>>>>> [] xfs_release+0x1b0/0x240 [xfs] >>>>>>> [] xfs_file_release+0x70/0xa0 [xfs] >>>>>>> [] __fput+0x1a0/0x420 >>>>>>> [] fput+0x40/0x60 >>>>>>> >>>>>>> The problem here is that xfs_file_last_byte() does not acquire >>>> the >>>>>>> inode lock and can therefore race with another thread that is >>>>>> modifying >>>>>>> the extext list. While xfs_bmap_last_offset() is trying to >>>> lookup >>>>>>> what was the last extent some extents were merged and the >> extent >>>>>> list >>>>>>> shrunk so the index we lookup is now beyond the end of the >> extent >>>>>> list >>>>>>> and potentially in a freed buffer. >>>>>>> >>>>>>> diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c >>>>>>> index e7ae08d..cf62d9d 100644 >>>>>>> --- a/fs/xfs/xfs_inode.c >>>>>>> +++ b/fs/xfs/xfs_inode.c >>>>>>> @@ -1258,8 +1258,10 @@ xfs_file_last_byte( >>>>>> >>>>>> /* >>>>>> * Only check for blocks beyond the EOF if the extents >> have >>>>>> * been read in. This eliminates the need for the inode >>>>>> lock, >>>>>> * and it also saves us from looking when it really isn't >>>>>>> * necessary. >>>>>>> */ >>>>>> >>>>>> I suppose that comment should be modified too, and maybe the >>>> commit >>>>>> log >>>>>> should say why, exactly, it was wrong? :) >>>>> Ha, I didn't even read the comment! It's still kind of correct >> in >>>>> that we wont have to get the inode lock if the extents have not >>>> been >>>>> >>>>> read in. >>>> >>>> I'd still think the comments could be made less confusing >>>> if we're adding the inode lock here. >>> The more I read the comment the more it makes sense and it seems to >>> make more sense now with the change because it is clear how we can >>> avoid the inode lock if the extents are not read in. >> >> OK, now after your explanation and reading the comments the Nth time, >> I think, I know what you mean. >> >> I think, the original comment intention was the following: >> >> if (ip->i_df.if_flags & XFS_IFEXTENTS) { >> // extents have been read in. This (the fact that the extents >> // have been read in) eliminates the need for the inode lock, as >> // we are not going to read them in through xfs_iread_extents(). >> error = xfs_bmap_last_offset(NULL, ip, &last_block, >> XFS_DATA_FORK); >> if (error) { >> last_block = 0; >> } >> } else { >> last_block = 0; >> } >> >> while in the patched version it'll become: >> >> if (ip->i_df.if_flags & XFS_IFEXTENTS) { >> // extents have been read in ... >> xfs_ilock(ip, XFS_ILOCK_SHARED); >> error = xfs_bmap_last_offset(NULL, ip, &last_block, >> XFS_DATA_FORK); >> xfs_iunlock(ip, XFS_ILOCK_SHARED); >> if (error) { >> last_block = 0; >> } >> } else { >> // this (the fact that the extents have _NOT_ been read in) >> // eliminates the need for the inode lock. >> // Doh, obvious. >> last_block = 0; >> } >> >> Is that how you see the comment now? > Yes. And I think that was the intention of the comment all along. > >> >> Was the assumption in the original comment about not needing the >> ilock >> simply incorrect? > I don't think so. I think the more likely scenario is that someone > erroneously removed the locking or it was never there to begin with. > The locking is not there in version 1.1 in git so you'll have to look > at ptools or the IRIX source to get the full history. Code archeology showed that the check for the extents read in and the comment was added in 1995(!), and hadn't been touched since. revision 1.140 date: 1995/04/13 03:15:14; author: ajs; state: Exp; lines: +285 -94 First cut at disk error handling 732c782,798 < last_block = XFS_B_TO_FSB(mp, (xfs_ufsize_t)ip->i_d.di_size); --- > /* > * Only check for blocks beyond the EOF if the extents have > * been read in. This eliminates the need for the inode lock, > * and it also saves us from looking when it really isn't > * necessary. > */ > if (ip->i_flags & XFS_IEXTENTS) { > error = xfs_bmap_last_offset(NULL, ip, &last_block); > if (error) { > last_block = 0; > } > } else { > last_block = 0; > } > size_last_block = XFS_B_TO_FSB(mp, (xfs_ufsize_t)ip- >i_d.di_size); > last_block = XFS_FILEOFF_MAX(last_block, size_last_block); It was slightly modified later to account to changes in xfs_bmap_last_offset prototype: revision 1.148 date: 1995/05/09 21:21:41; author: doucette; state: Exp; lines: +435 -306 Add support for in-core and on-disk inodes with both data and attribute forks, or just a data fork. Change all the data structures and macros used to manipulate the variable portion of the inode, to support this feature. 806,807c900,902 < if (ip->i_flags & XFS_IEXTENTS) { < error = xfs_bmap_last_offset(NULL, ip, &last_block); --- > if (ip->i_df.if_flags & XFS_IFEXTENTS) { > error = xfs_bmap_last_offset(NULL, ip, &last_block, > XFS_DATA_FORK); So, there is no indication that the lock was accidentally missed. Anyway, I'm not confused with the comment any more (didn't change my opinion, though, on how it's perceived for the first time reader), and if nobody else objects (Eric, you brought it up first), I'll check it in as is. Felix > > >> >>> How would you prefer the comment reads? >> >> I'd just leave the first sentence from the original comment. >> >> * Only check for blocks beyond the EOF if the extents have >> * been read in. >> >> The mentioning about the ilock is too confusing now, imho. >> >> Felix >> >>> >>> >>>> >>>> Felix >>>> >>>>> >>>>> >>>>>> >>>>>> -Eric >>>>>> >>>>>>> if (ip->i_df.if_flags & XFS_IFEXTENTS) { >>>>>>> + xfs_ilock(ip, XFS_ILOCK_SHARED); >>>>>>> error = xfs_bmap_last_offset(NULL, ip, &last_block, >>>>>>> XFS_DATA_FORK); >>>>>>> + xfs_iunlock(ip, XFS_ILOCK_SHARED); >>>>>>> if (error) { >>>>>>> last_block = 0; >>>>>>> } >>>>>>> >>>>>>> _______________________________________________ >>>>>>> xfs mailing list >>>>>>> xfs@oss.sgi.com >>>>>>> http://oss.sgi.com/mailman/listinfo/xfs >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> xfs mailing list >>>>>> xfs@oss.sgi.com >>>>>> http://oss.sgi.com/mailman/listinfo/xfs >>>>> >>>>> _______________________________________________ >>>>> xfs mailing list >>>>> xfs@oss.sgi.com >>>>> http://oss.sgi.com/mailman/listinfo/xfs >>>> >>>> _______________________________________________ >>>> xfs mailing list >>>> xfs@oss.sgi.com >>>> http://oss.sgi.com/mailman/listinfo/xfs >> >> _______________________________________________ >> xfs mailing list >> xfs@oss.sgi.com >> http://oss.sgi.com/mailman/listinfo/xfs From kb@sysmikro.com.pl Tue Apr 28 11:18:46 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,J_CHICKENPOX_63, J_CHICKENPOX_66,J_CHICKENPOX_72,J_CHICKENPOX_73,MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3SGIju7111930 for ; Tue, 28 Apr 2009 11:18:46 -0500 X-ASG-Debug-ID: 1240935721-6ad0037b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from v007470.home.net.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 73D8E1456F9F for ; Tue, 28 Apr 2009 09:22:02 -0700 (PDT) Received: from v007470.home.net.pl (v007470.home.net.pl [212.85.125.104]) by cuda.sgi.com with SMTP id n0d0qyTGSTkjeal7 for ; Tue, 28 Apr 2009 09:22:02 -0700 (PDT) Received: from localhost (HELO linux2g2g.site) (kb.sysmikro@home@127.0.0.1) by m029.home.net.pl with SMTP; Tue, 28 Apr 2009 16:18:40 -0000 From: Krzysztof =?utf-8?q?B=C5=82aszkowski?= Organization: Systemy mikroprocesorowe To: xfs@oss.sgi.com X-ASG-Orig-Subj: generating uevents by xfs Subject: generating uevents by xfs Date: Tue, 28 Apr 2009 18:18:31 +0200 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_Yxy9JY+IVsuLkno" Message-Id: <200904281818.32127.kb@sysmikro.com.pl> X-Barracuda-Connect: v007470.home.net.pl[212.85.125.104] X-Barracuda-Start-Time: 1240935724 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3051 1.0000 -0.3268 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.17 X-Barracuda-Spam-Status: No, SCORE=0.17 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24354 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --Boundary-00=_Yxy9JY+IVsuLkno Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello, once upon i was asked to think about such facility for notifying userspace when some mount point is nearly full at some level let's say e.g. 90% (threshold should be configurable). here is a solution designed by me and i would like to see comments on this idea and solution. i verified these patches with 2.6.27.19 (SuSE) but there are also patches for 2.6.28.4 and 2.6.29.2 but i haven't given a try to latest two kernels. to use it one may need to pick right *-1- patch and the *-2 patch. Krzysztof Blaszkowski --Boundary-00=_Yxy9JY+IVsuLkno Content-Type: text/x-diff; charset="us-ascii"; name="xfs-sysfs-1-26292.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfs-sysfs-1-26292.diff" diff --git a/xfs/Makefile b/xfs/Makefile index c3dc491..b0a1330 100644 --- a/xfs/Makefile +++ b/xfs/Makefile @@ -88,7 +88,8 @@ xfs-y += xfs_alloc.o \ xfs_vnodeops.o \ xfs_rw.o \ xfs_dmops.o \ - xfs_qmops.o + xfs_qmops.o \ + xfs_sysfs.o xfs-$(CONFIG_XFS_TRACE) += xfs_btree_trace.o \ xfs_dir2_trace.o diff --git a/xfs/linux-2.6/xfs_super.c b/xfs/linux-2.6/xfs_super.c index 32ae502..99ac6ed 100644 --- a/xfs/linux-2.6/xfs_super.c +++ b/xfs/linux-2.6/xfs_super.c @@ -1082,6 +1082,9 @@ xfs_fs_put_super( xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); +#ifdef CONFIG_SYSFS + xfs_event_release(mp); +#endif xfs_free_fsname(mp); kfree(mp); } @@ -1509,6 +1512,9 @@ xfs_fs_fill_super( kfree(mtpt); +#ifdef CONFIG_SYSFS + xfs_event_alloc(mp); +#endif xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); return 0; @@ -1873,6 +1879,10 @@ init_xfs_fs(void) error = register_filesystem(&xfs_fs_type); if (error) goto out_sysctl_unregister; + +#ifdef CONFIG_SYSFS + xfs_sysfs_init(); +#endif return 0; out_sysctl_unregister: @@ -1906,6 +1916,9 @@ exit_xfs_fs(void) xfs_free_trace_bufs(); xfs_destroy_zones(); ktrace_uninit(); +#ifdef CONFIG_SYSFS + xfs_sysfs_done(); +#endif } module_init(init_xfs_fs); diff --git a/xfs/xfs_mount.c b/xfs/xfs_mount.c index 3530025..c19fc17 100644 --- a/xfs/xfs_mount.c +++ b/xfs/xfs_mount.c @@ -2413,3 +2413,25 @@ balance_counter: } #endif + + +__uint64_t xfs_icsb_get_fdblocks_lazy(xfs_mount_t *mp) +{ + __uint64_t fdblocks = 0; +#ifdef HAVE_PERCPU_SB + xfs_icsb_cnts_t *cntp; + int i; + + for_each_online_cpu(i) { + cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i); + fdblocks += cntp->icsb_fdblocks; + } + + if (xfs_icsb_counter_disabled(mp, XFS_SBS_FDBLOCKS)) + fdblocks = mp->m_sb.sb_fdblocks; +#else + fdblocks = mp->m_sb.sb_fdblocks; +#endif + return fdblocks - XFS_ALLOC_SET_ASIDE(mp); +} + diff --git a/xfs/xfs_mount.h b/xfs/xfs_mount.h index f5e9937..45ef4cb 100644 --- a/xfs/xfs_mount.h +++ b/xfs/xfs_mount.h @@ -329,6 +329,9 @@ typedef struct xfs_mount { wait_queue_head_t m_wait_single_sync_task; __int64_t m_update_flags; /* sb flags we need to update on the next remount,rw */ +#ifdef CONFIG_SYSFS + void *event_onlow; +#endif } xfs_mount_t; /* @@ -528,6 +531,13 @@ extern void xfs_qmops_put(struct xfs_mount *); extern struct xfs_dmops xfs_dmcore_xfs; +#ifdef CONFIG_SYSFS +extern void xfs_sysfs_init(void); +extern void xfs_sysfs_done(void); +extern int xfs_event_alloc(struct xfs_mount *mnt); +extern int xfs_event_release(struct xfs_mount *mnt); +#endif + #endif /* __KERNEL__ */ extern void xfs_mod_sb(struct xfs_trans *, __int64_t); --Boundary-00=_Yxy9JY+IVsuLkno Content-Type: text/x-diff; charset="us-ascii"; name="xfs-sysfs-1-26284.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfs-sysfs-1-26284.diff" diff --git a/xfs/Makefile b/xfs/Makefile index 737c9a4..1df5f4e 100644 --- a/xfs/Makefile +++ b/xfs/Makefile @@ -89,7 +89,8 @@ xfs-y += xfs_alloc.o \ xfs_vnodeops.o \ xfs_rw.o \ xfs_dmops.o \ - xfs_qmops.o + xfs_qmops.o \ + xfs_sysfs.o xfs-$(CONFIG_XFS_TRACE) += xfs_dir2_trace.o diff --git a/xfs/linux-2.6/xfs_super.c b/xfs/linux-2.6/xfs_super.c index 37ebe36..7cc0b6b 100644 --- a/xfs/linux-2.6/xfs_super.c +++ b/xfs/linux-2.6/xfs_super.c @@ -1152,6 +1152,9 @@ xfs_fs_put_super( xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); +#ifdef CONFIG_SYSFS + xfs_event_release(mp); +#endif xfs_free_fsname(mp); kfree(mp); } @@ -1783,6 +1786,9 @@ xfs_fs_fill_super( xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); kfree(args); +#ifdef CONFIG_SYSFS + xfs_event_alloc(mp); +#endif return 0; out_filestream_unmount: @@ -2142,6 +2148,10 @@ init_xfs_fs(void) error = register_filesystem(&xfs_fs_type); if (error) goto out_sysctl_unregister; + +#ifdef CONFIG_SYSFS + xfs_sysfs_init(); +#endif return 0; out_sysctl_unregister: @@ -2175,6 +2185,9 @@ exit_xfs_fs(void) xfs_free_trace_bufs(); xfs_destroy_zones(); ktrace_uninit(); +#ifdef CONFIG_SYSFS + xfs_sysfs_done(); +#endif } module_init(init_xfs_fs); diff --git a/xfs/xfs_mount.c b/xfs/xfs_mount.c index 15f5dd2..47e8202 100644 --- a/xfs/xfs_mount.c +++ b/xfs/xfs_mount.c @@ -2442,3 +2442,25 @@ balance_counter: } #endif + + +__uint64_t xfs_icsb_get_fdblocks_lazy(xfs_mount_t *mp) +{ + __uint64_t fdblocks = 0; +#ifdef HAVE_PERCPU_SB + xfs_icsb_cnts_t *cntp; + int i; + + for_each_online_cpu(i) { + cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i); + fdblocks += cntp->icsb_fdblocks; + } + + if (xfs_icsb_counter_disabled(mp, XFS_SBS_FDBLOCKS)) + fdblocks = mp->m_sb.sb_fdblocks; +#else + fdblocks = mp->m_sb.sb_fdblocks; +#endif + return fdblocks - XFS_ALLOC_SET_ASIDE(mp); +} + diff --git a/xfs/xfs_mount.h b/xfs/xfs_mount.h index f3c1024..9a98c44 100644 --- a/xfs/xfs_mount.h +++ b/xfs/xfs_mount.h @@ -341,6 +341,9 @@ 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; +#ifdef CONFIG_SYSFS + void *event_onlow; +#endif } xfs_mount_t; /* @@ -539,6 +542,13 @@ extern void xfs_qmops_put(struct xfs_mou extern struct xfs_dmops xfs_dmcore_xfs; +#ifdef CONFIG_SYSFS +extern void xfs_sysfs_init(void); +extern void xfs_sysfs_done(void); +extern int xfs_event_alloc(struct xfs_mount *mnt); +extern int xfs_event_release(struct xfs_mount *mnt); +#endif + #endif /* __KERNEL__ */ #endif /* __XFS_MOUNT_H__ */ --Boundary-00=_Yxy9JY+IVsuLkno Content-Type: text/x-diff; charset="us-ascii"; name="xfs-sysfs-1-262719.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfs-sysfs-1-262719.diff" diff --git a/xfs/Makefile b/xfs/Makefile index ba17121..904372b 100644 --- a/xfs/Makefile +++ b/xfs/Makefile @@ -91,7 +91,8 @@ xfs-y += xfs_alloc.o \ xfs_vnodeops.o \ xfs_rw.o \ xfs_dmops.o \ - xfs_qmops.o + xfs_qmops.o \ + xfs_sysfs.o xfs-$(CONFIG_XFS_TRACE) += xfs_dir2_trace.o diff --git a/xfs/linux-2.6/xfs_super.c b/xfs/linux-2.6/xfs_super.c index 9eaddb4..57f2558 100644 --- a/xfs/linux-2.6/xfs_super.c +++ b/xfs/linux-2.6/xfs_super.c @@ -1152,6 +1152,9 @@ xfs_fs_put_super( xfs_close_devices(mp); xfs_qmops_put(mp); xfs_dmops_put(mp); +#ifdef CONFIG_SYSFS + xfs_event_release(mp); +#endif xfs_free_fsname(mp); kfree(mp); } @@ -1783,6 +1786,9 @@ xfs_fs_fill_super( xfs_itrace_exit(XFS_I(sb->s_root->d_inode)); kfree(args); +#ifdef CONFIG_SYSFS + xfs_event_alloc(mp); +#endif return 0; out_filestream_unmount: @@ -2151,6 +2157,10 @@ init_xfs_fs(void) error = register_filesystem(&xfs_fs_type); if (error) goto out_sysctl_unregister; + +#ifdef CONFIG_SYSFS + xfs_sysfs_init(); +#endif return 0; out_sysctl_unregister: @@ -2184,6 +2194,9 @@ exit_xfs_fs(void) xfs_free_trace_bufs(); xfs_destroy_zones(); ktrace_uninit(); +#ifdef CONFIG_SYSFS + xfs_sysfs_done(); +#endif } module_init(init_xfs_fs); diff --git a/xfs/xfs_mount.c b/xfs/xfs_mount.c index a4503f5..2854b00 100644 --- a/xfs/xfs_mount.c +++ b/xfs/xfs_mount.c @@ -2441,3 +2441,25 @@ balance_counter: } #endif + + +__uint64_t xfs_icsb_get_fdblocks_lazy(xfs_mount_t *mp) +{ + __uint64_t fdblocks = 0; +#ifdef HAVE_PERCPU_SB + xfs_icsb_cnts_t *cntp; + int i; + + for_each_online_cpu(i) { + cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i); + fdblocks += cntp->icsb_fdblocks; + } + + if (xfs_icsb_counter_disabled(mp, XFS_SBS_FDBLOCKS)) + fdblocks = mp->m_sb.sb_fdblocks; +#else + fdblocks = mp->m_sb.sb_fdblocks; +#endif + return fdblocks - XFS_ALLOC_SET_ASIDE(mp); +} + diff --git a/xfs/xfs_mount.h b/xfs/xfs_mount.h index b6b8be8..a7c17fe 100644 --- a/xfs/xfs_mount.h +++ b/xfs/xfs_mount.h @@ -342,6 +342,9 @@ typedef struct xfs_mount { int m_sync_seq; /* sync thread generation no. */ wait_queue_head_t m_wait_single_sync_task; struct vfsmount *m_vfsmount; +#ifdef CONFIG_SYSFS + void *event_onlow; +#endif } xfs_mount_t; /* @@ -540,6 +543,13 @@ extern void xfs_qmops_put(struct xfs_mount *); extern struct xfs_dmops xfs_dmcore_xfs; +#ifdef CONFIG_SYSFS +extern void xfs_sysfs_init(void); +extern void xfs_sysfs_done(void); +extern int xfs_event_alloc(struct xfs_mount *mnt); +extern int xfs_event_release(struct xfs_mount *mnt); +#endif + #endif /* __KERNEL__ */ #endif /* __XFS_MOUNT_H__ */ --Boundary-00=_Yxy9JY+IVsuLkno Content-Type: text/x-diff; charset="us-ascii"; name="xfs-sysfs-2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="xfs-sysfs-2.diff" diff --git a/xfs/xfs_sysfs.c b/xfs/xfs_sysfs.c new file mode 100644 index 0000000..cbb0ed2 --- /dev/null +++ b/xfs/xfs_sysfs.c @@ -0,0 +1,339 @@ +/* + * A sysfs interface for triggering events like "Nearly Out Of Space" + * Krzysztof Blaszkowski 2009 + * + * + * each mounted block device will be associted with a directory under + * /sys/fs/xfs-oos/ where there is a file "trigger" which sets + * a free space trigger point and if crossed over then there will be raised + * an uevent like this: + * UEVENT[1240929288.150050] change /fs/xfs-oos/dm-18 (xfs-oos) + * ACTION=change + * DEVPATH=/fs/xfs-oos/dm-18 + * SUBSYSTEM=xfs-oos + * XFSDEV=dm-18 + * XFSLEFT=191111168 + * + * syntax: + * echo "1G" > /sys/fs/xfs-oos/ the_block_device_name /trigger + * echo "400M" > /sys/fs/xfs-oos/ some_other_bdev /trigger + * echo "20000000" > /sys/fs/xfs-oos/ yet_another_bdev /trigger + * + * the module polls each mount point every fixed time (5 sec) + * and if necessary raises events. it utilizes hysteresis loop of 1/8 + * of trigger value to avoid sending excessive events on small change. + * + * 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 + */ + + +#ifdef CONFIG_SYSFS + +#include +#include +#include +#include +#include +#include + +#include "xfs.h" +#include "xfs_fs.h" +#include "xfs_types.h" +#include "xfs_bit.h" +#include "xfs_log.h" +#include "xfs_inum.h" +#include "xfs_trans.h" +#include "xfs_sb.h" +#include "xfs_ag.h" +#include "xfs_dir2.h" +#include "xfs_dmapi.h" +#include "xfs_mount.h" + + +static struct xfs_event_ctrl { + struct kset *kset; + struct timer_list poll; + int poll_interval; + spinlock_t kset_lock; + /* because kset is acessed in different contextes then + kobject locking (kset->lock) is not appropriate this time */ +} xfs_event_ctrl; + + + +struct xfs_event_s { + struct kobject kobj; + __uint64_t trigger; + __uint64_t left_bytes; + struct xfs_mount *mp; + int triggered:1; + int fire_event:1; +}; + +struct xfs_event_attribute { + struct attribute attr; + ssize_t (*show)(struct xfs_event_s *, struct xfs_event_attribute *, char *); + ssize_t (*store)(struct xfs_event_s *, struct xfs_event_attribute *, const char *, ssize_t); +}; + + +static ssize_t xfs_event_kobj_attr_show(struct kobject *_kobj, + struct attribute *a, + char *buf) +{ + struct xfs_event_attribute *attribute = container_of(a, struct xfs_event_attribute, attr); + struct xfs_event_s *event = container_of(_kobj, struct xfs_event_s, kobj); + + if (!attribute->show) + return -EIO; + + return attribute->show(event, attribute, buf); +} + +static ssize_t xfs_event_kobj_attr_store(struct kobject *_kobj, + struct attribute *a, + const char *buf, size_t len) +{ + struct xfs_event_attribute *attribute = container_of(a, struct xfs_event_attribute, attr); + struct xfs_event_s *event = container_of(_kobj, struct xfs_event_s, kobj); + + if (!attribute->store) + return -EIO; + + return attribute->store(event, attribute, buf, len); +} + +static void xfs_event_kobj_release(struct kobject *_kobj) +{ + struct xfs_event_s *event = container_of(_kobj, struct xfs_event_s, kobj); + kfree(event); +} + + +static const struct sysfs_ops xfs_event_sysfs_ops = { + .show = xfs_event_kobj_attr_show, + .store = xfs_event_kobj_attr_store, +}; + +static const struct attribute *xfs_events_attrs[]; +static const struct kobj_type xfs_event_ktype = { + .sysfs_ops = (void *)&xfs_event_sysfs_ops, + .release = xfs_event_kobj_release, + .default_attrs = (void *)xfs_events_attrs, +}; + + + + + +static ssize_t xfs_trigger_get(struct xfs_event_s *event, + struct xfs_event_attribute *obj_attr, + char *buf) +{ + __uint64_t bs = event->mp->m_sb.sb_blocksize; + + return sprintf(buf, "%lld %lld %c", event->trigger * bs, event->left_bytes, event->triggered ? '1' : '0'); +} + +static ssize_t xfs_trigger_set(struct xfs_event_s *event, + struct xfs_event_attribute *obj_attr, + const char *buf, ssize_t count) +{ + int rc; + char unit; + + spin_lock_bh(&xfs_event_ctrl.kset_lock); + rc = sscanf(buf, "%lld%c", &event->trigger, &unit); + if (rc == 2) { + switch(unit) { + case 'T': + case 't': + event->trigger <<= 10; + case 'G': + case 'g': + event->trigger <<= 10; + case 'M': + case 'm': + event->trigger <<= 20; + } + } + event->trigger /= event->mp->m_sb.sb_blocksize; + spin_unlock_bh(&xfs_event_ctrl.kset_lock); + return count; +} + + +static const struct xfs_event_attribute xfs_event_trigger = + __ATTR(trigger, S_IFREG | S_IRUGO | S_IWUSR, + xfs_trigger_get, + xfs_trigger_set); + +static const struct attribute *xfs_events_attrs[] = { + &xfs_event_trigger.attr, + NULL +}; + + +extern __uint64_t xfs_icsb_get_fdblocks_lazy(xfs_mount_t *mp); + +static void xfs_event_fdblocks_poll(unsigned long arg) +{ + struct xfs_event_ctrl *ctrl = (struct xfs_event_ctrl *)arg; + struct kset *kset = ctrl->kset; + struct kobject *k, *tmp; + + struct list_head events_to_fire; + + INIT_LIST_HEAD(&events_to_fire); + mod_timer(&ctrl->poll, jiffies + ctrl->poll_interval); + spin_lock_bh(&ctrl->kset_lock); + /* no need to use kset->lock */ + list_for_each_entry_safe(k, tmp, &kset->list, entry) { + struct xfs_event_s *event = container_of(k, struct xfs_event_s, kobj); + __uint64_t space_left = xfs_icsb_get_fdblocks_lazy(event->mp); + + if (space_left < event->trigger && !event->triggered) { + event->triggered = 1; + kobject_get(&event->kobj); + event->left_bytes = space_left * event->mp->m_sb.sb_blocksize; + list_del(&event->kobj.entry); + list_add(&event->kobj.entry, &events_to_fire); + } + + if (space_left > (event->trigger + (event->trigger >> 3)) + && event->triggered) { + event->triggered = 0; + } + + } + spin_unlock_bh(&ctrl->kset_lock); + + if (!list_empty(&events_to_fire)) { + char buffer[256]; + char *envp[3]; + + envp[0] = buffer; + envp[2] = NULL; + list_for_each_entry(k, &events_to_fire, entry) { + struct xfs_event_s *event = container_of(k, struct xfs_event_s, kobj); + + envp[1] = envp[0] + snprintf(envp[0], 250, "XFSDEV=%s", k->name) + 1; + snprintf(envp[1], 250 - (envp[1] - envp[0]), "XFSLEFT=%lld", event->left_bytes); + +// printk("%s:%d firing [%s] [%s] [%s]\n", __FUNCTION__, __LINE__, k->name, envp[0], envp[1]); + kobject_uevent_env(k, KOBJ_CHANGE, envp); + } + + spin_lock_bh(&ctrl->kset_lock); + list_for_each_entry_safe(k, tmp, &events_to_fire, entry) { + struct xfs_event_s *event = container_of(k, struct xfs_event_s, kobj); + + list_del(&event->kobj.entry); + list_add(&event->kobj.entry, &kset->list); + kobject_put(&event->kobj); + } + spin_unlock_bh(&ctrl->kset_lock); + } +} + + +/* api */ + +void xfs_sysfs_init(void) +{ + memset(&xfs_event_ctrl, 0, sizeof(struct xfs_event_ctrl)); + + xfs_event_ctrl.poll_interval = HZ * 5; + xfs_event_ctrl.kset = kset_create_and_add("xfs-oos", NULL, fs_kobj); + spin_lock_init(&xfs_event_ctrl.kset_lock); + if (!xfs_event_ctrl.kset) { + cmn_err(CE_ALERT, "kset_create failed"); + return; + } +} + +void xfs_sysfs_done(void) +{ + if (xfs_event_ctrl.kset) { + BUG_ON(!list_empty(&xfs_event_ctrl.kset->list)); + kset_unregister(xfs_event_ctrl.kset); + xfs_event_ctrl.kset = NULL; + } +} + +/* stuff for xfs_fs_fill_super, xfs_fs_put_super */ + +int xfs_event_alloc(struct xfs_mount *mnt) +{ + struct xfs_event_s * ev; + int rc = -1; + int empty; + + if (!xfs_event_ctrl.kset) + return rc; + + ev = kzalloc(sizeof(struct xfs_event_s), GFP_KERNEL); + + spin_lock_bh(&xfs_event_ctrl.kset_lock); + empty = list_empty(&xfs_event_ctrl.kset->list); + + if (ev) { + ev->kobj.kset = xfs_event_ctrl.kset; + ev->mp = mnt; + + rc = kobject_init_and_add(&ev->kobj, (void *)&xfs_event_ktype, NULL, "%s", mnt->m_fsname); + if (!rc) { + mnt->event_onlow = ev; + kobject_uevent(&ev->kobj, KOBJ_ADD); + } else { + kobject_put(&ev->kobj); // ev will be freed too. + } + } + spin_unlock_bh(&xfs_event_ctrl.kset_lock); + + if (empty) { + init_timer(&xfs_event_ctrl.poll); + xfs_event_ctrl.poll.function = xfs_event_fdblocks_poll; + xfs_event_ctrl.poll.data = (unsigned long)&xfs_event_ctrl; + xfs_event_ctrl.poll.expires = jiffies + xfs_event_ctrl.poll_interval; + add_timer(&xfs_event_ctrl.poll); + } + + return rc; +} + +int xfs_event_release(struct xfs_mount *mnt) +{ + struct xfs_event_s * ev = (struct xfs_event_s *)mnt->event_onlow; + int empty; + + if (!xfs_event_ctrl.kset) + return -1; + + spin_lock_bh(&xfs_event_ctrl.kset_lock); + if (ev) + kobject_put(&ev->kobj); + + empty = list_empty(&xfs_event_ctrl.kset->list); + spin_unlock_bh(&xfs_event_ctrl.kset_lock); + + if (empty) { + del_timer_sync(&xfs_event_ctrl.poll); + } + + return 0; +} + +#endif + --Boundary-00=_Yxy9JY+IVsuLkno-- From ccoager@gmail.com Tue Apr 28 22:40:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=0.5 required=5.0 tests=BAYES_00,HTML_MESSAGE, J_CHICKENPOX_210 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3T3eL8Q142895 for ; Tue, 28 Apr 2009 22:40:22 -0500 X-ASG-Debug-ID: 1240976622-5dd2018e0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from qw-out-1920.google.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id D15AF1459DCC for ; Tue, 28 Apr 2009 20:43:42 -0700 (PDT) Received: from qw-out-1920.google.com (qw-out-1920.google.com [74.125.92.144]) by cuda.sgi.com with ESMTP id 1w5uQYwb8yTqHk8V for ; Tue, 28 Apr 2009 20:43:42 -0700 (PDT) Received: by qw-out-1920.google.com with SMTP id 4so808928qwk.32 for ; Tue, 28 Apr 2009 20:40:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=YOqISV3E49XNvDq1JKt0PvLOwD/KGwxMWicrxS0LuRQ=; b=kdf2NmgPuWgLzLfoDMp3mpiJVb7w4Hs7iPwPBa6SeqYMIYrtKxcGlUABrsorALO+RO tTSxLvNn3ES0gNM8dK+8EcLHxSmuMdEeyBHgpQXDN5B7+bQ72yJ8I+WrQWD0C3QoxkGB ix23PDDpKiJL19eMNwOMuH3l4WzW48B+z7gBs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=pJo5C7E9T0MvjgXlBhy6Kn5n5rmItkByNWYSS7NyqZFlZdWKdBx26uX/wEu+LE3z78 fOPGAbxCzgXe9n0CTq5CssXYfGft7Y4FjFqRYt4p0FcQf1R+4l8t1ak8mcP1o0kXYZNP D3oJNEgLh8ZfsYUBoLBIYAv5izbAER1/xlmME= MIME-Version: 1.0 Received: by 10.229.74.80 with SMTP id t16mr4360841qcj.20.1240976419449; Tue, 28 Apr 2009 20:40:19 -0700 (PDT) Date: Tue, 28 Apr 2009 23:40:19 -0400 Message-ID: X-ASG-Orig-Subj: xfs_repair Input/output error Subject: xfs_repair Input/output error From: Cory Coager To: xfs@oss.sgi.com Content-Type: multipart/alternative; boundary=00163646d0bea7ebfa0468a95651 X-Barracuda-Connect: qw-out-1920.google.com[74.125.92.144] X-Barracuda-Start-Time: 1240976623 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4395 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.2, rules version 3.2.1.24399 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --00163646d0bea7ebfa0468a95651 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit I had a power failure while I was running a defrag on an xfs partition. Now I am unable to mount, xfs_check or xfs_repair the partition. The partition is lvm and all other partitions seem to be fine except this one. When attempting to mount the partition the drive makes some funny noises and these messages spit out on the console: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=268552872, high=16, low=117416, sector=268552868 ide: failed opcode was: unknown end_request: I/O error, dev hda, sector 268552868 I believe the drive is fine because check_ide_smart reports: Id= 1, Status=11 {PreFailure , OnLine }, Value=100, Threshold= 60, Passed Id= 2, Status= 5 {PreFailure , OffLine}, Value=100, Threshold= 50, Passed Id= 3, Status= 7 {PreFailure , OnLine }, Value=151, Threshold= 24, Passed Id= 4, Status=18 {Advisory , OnLine }, Value=100, Threshold= 0, Passed Id= 5, Status=51 {PreFailure , OnLine }, Value=100, Threshold= 5, Passed Id= 7, Status=11 {PreFailure , OnLine }, Value=100, Threshold= 67, Passed Id= 8, Status= 5 {PreFailure , OffLine}, Value=100, Threshold= 20, Passed Id= 9, Status=18 {Advisory , OnLine }, Value= 96, Threshold= 0, Passed Id= 10, Status=19 {PreFailure , OnLine }, Value=100, Threshold= 60, Passed Id= 12, Status=50 {Advisory , OnLine }, Value=100, Threshold= 0, Passed Id=192, Status=50 {Advisory , OnLine }, Value= 99, Threshold= 50, Passed Id=193, Status=18 {Advisory , OnLine }, Value= 99, Threshold= 50, Passed Id=194, Status= 2 {Advisory , OnLine }, Value=137, Threshold= 0, Passed Id=196, Status=50 {Advisory , OnLine }, Value=100, Threshold= 0, Passed Id=197, Status=34 {Advisory , OnLine }, Value=100, Threshold= 0, Passed Id=198, Status= 8 {Advisory , OffLine}, Value=100, Threshold= 0, Passed Id=199, Status=10 {Advisory , OnLine }, Value=200, Threshold= 0, Passed OffLineStatus=0 {NeverStarted}, AutoOffLine=No, OffLineTimeout=92 minutes OffLineCapability=27 {Immediate Auto SuspendOnCmd} SmartRevision=16, CheckSum=151, SmartCapability=3 {SaveOnStandBy AutoSave} I can xxd and dd this partition without getting any console errors. I can also mount the partition with -o ro,norecovery. How do I repair this and recover my data? --00163646d0bea7ebfa0468a95651 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I had a power failure while I was running a defrag on an xfs partition. Now I am unable to mount, xfs_check or xfs_repair the partition. The partition is lvm and all other partitions seem to be fine except this one. When attempting to mount the partition the drive makes some funny noises and these messages spit out on the console:

hda: dma_intr: status=3D0x51 { DriveReady SeekComplete Error= }
hda: dma_intr: error=3D0x40 { UncorrectableError }, LBAsect=3D268552872, hi= gh=3D16, low=3D117416, sector=3D268552868
ide: failed opcode was: unknown
end_request: I/O error, dev hda, sector 268552868

I believe the drive is fine because check_ide_smart reports:

Id=3D=A0 1, Status=3D11 {PreFailure , OnLine }, Value=3D100,= Threshold=3D 60, Passed
Id=3D=A0 2, Status=3D 5 {PreFailure , OffLine}, Value=3D100, Threshold=3D 5= 0, Passed
Id=3D=A0 3, Status=3D 7 {PreFailure , OnLine }, Value=3D151, Threshold=3D 2= 4, Passed
Id=3D=A0 4, Status=3D18 {Advisory=A0 =A0 , OnLine }, Value=3D100, Threshold= =3D=A0 0, Passed
Id=3D=A0 5, Status=3D51 {PreFailure , OnLine }, Value=3D100, Threshold=3D= =A0 5, Passed
Id=3D=A0 7, Status=3D11 {PreFailure , OnLine }, Value=3D100, Threshold=3D 6= 7, Passed
Id=3D=A0 8, Status=3D 5 {PreFailure , OffLine}, Value=3D100, Threshold=3D 2= 0, Passed
Id=3D=A0 9, Status=3D18 {Advisory=A0 =A0 , OnLine }, Value=3D 96, Threshold= =3D=A0 0, Passed
Id=3D 10, Status=3D19 {PreFailure , OnLine }, Value=3D100, Threshold=3D 60,= Passed
Id=3D 12, Status=3D50 {Advisory=A0 =A0 , OnLine }, Value=3D100, Threshold= =3D=A0 0, Passed
Id=3D192, Status=3D50 {Advisory=A0 =A0 , OnLine }, Value=3D 99, Threshold= =3D 50, Passed
Id=3D193, Status=3D18 {Advisory=A0 =A0 , OnLine }, Value=3D 99, Threshold= =3D 50, Passed
Id=3D194, Status=3D 2 {Advisory=A0 =A0 , OnLine }, Value=3D137, Threshold= =3D=A0 0, Passed
Id=3D196, Status=3D50 {Advisory=A0 =A0 , OnLine }, Value=3D100, Threshold= =3D=A0 0, Passed
Id=3D197, Status=3D34 {Advisory=A0 =A0 , OnLine }, Value=3D100, Threshold= =3D=A0 0, Passed
Id=3D198, Status=3D 8 {Advisory=A0 =A0 , OffLine}, Value=3D100, Threshold= =3D=A0 0, Passed
Id=3D199, Status=3D10 {Advisory=A0 =A0 , OnLine }, Value=3D200, Threshold= =3D=A0 0, Passed
OffLineStatus=3D0 {NeverStarted}, AutoOffLine=3DNo, OffLineTimeout=3D92 min= utes
OffLineCapability=3D27 {Immediate Auto SuspendOnCmd}
SmartRevision=3D16, CheckSum=3D151, SmartCapability=3D3 {SaveOnStandBy Auto= Save}

I can xxd and dd this partition witho= ut getting any console errors. I can also mount the partition with -o ro,norecovery.=A0=20 How do I repair this and recover my data?
--00163646d0bea7ebfa0468a95651-- From michael.monnerie@is.it-management.at Tue Apr 28 23:28:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_210, J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3T4SOsU145216 for ; Tue, 28 Apr 2009 23:28:24 -0500 X-ASG-Debug-ID: 1240979302-455602e50000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 215C824AA59 for ; Tue, 28 Apr 2009 21:28:22 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id VCAyXtVTIYWwuatQ for ; Tue, 28 Apr 2009 21:28:22 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217107103.dyn.cm.kabsi.at [81.217.107.103]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id 6DBE553C7 for ; Wed, 29 Apr 2009 06:28:22 +0200 (CEST) Received: from saturn.localnet (saturn.i.zmi.at [10.0.0.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 8C84340017B for ; Wed, 29 Apr 2009 06:28:21 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: xfs_repair Input/output error Subject: Re: xfs_repair Input/output error Date: Wed, 29 Apr 2009 06:28:16 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.29.1-ZMI; KDE/4.1.3; x86_64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart2291964.UTdqCAq2Qg"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit Message-Id: <200904290628.20924@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1240979304 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24402 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --nextPart2291964.UTdqCAq2Qg Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Mittwoch 29 April 2009 Cory Coager wrote: > When attempting to mount the partition the drive makes some funny > noises and these messages spit out on the console: > > hda: dma_intr: status=3D0x51 { DriveReady SeekComplete Error } > hda: dma_intr: error=3D0x40 { UncorrectableError }, LBAsect=3D268552872, > high=3D16, low=3D117416, sector=3D268552868 > ide: failed opcode was: unknown > end_request: I/O error, dev hda, sector 268552868 This is definitely your drive gone bad. > I believe the drive is fine because check_ide_smart reports: If the drive "makes funny noises" and I/O errors are logged, it has bad=20 sectors. Try with # smartctl -a /dev/sda and look for a line like this: 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 If the last number is >0, your drive has problems - replace it! =46or a full SMART check, please try: smartctl --smart=3Don --offlineauto=3Don --saveauto=3Don --test=3Dlong /dev= /sda This tells your drive to make a long selftest. It prints the estimated=20 time for the test to run (usually 1-3h). Then check your smart values=20 again. You should try to not use your drive during this time. > I can xxd and dd this partition without getting any console errors.=20 It is possible the drive remapped the bad sectors itself. > I can also mount the partition with -o ro,norecovery. How do I repair > this and recover my data? Plug in new drive. Boot from recovery cd dd if=3D/dev/sda of=3D/dev/sdb=20 remove old drive xfs_repair enjoy mfg zmi =2D-=20 // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 --nextPart2291964.UTdqCAq2Qg Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEABECAAYFAkn312QACgkQzhSR9xwSCbT+3ACeKSP5IOT3Fszjqn/XR1k0bLl2 ZrkAoKRI3d09rq/HtzK+2bP+yDxynhDG =amuQ -----END PGP SIGNATURE----- --nextPart2291964.UTdqCAq2Qg-- From SEMA-CR-1-48VZHR@ptcmarketing.com Wed Apr 29 02:02:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: *** X-Spam-Status: No, score=4.0 required=5.0 tests=AWL,BAYES_50,HTML_MESSAGE, MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3T72Dhn152338 for ; Wed, 29 Apr 2009 02:02:13 -0500 X-ASG-Debug-ID: 1240988532-68b603520000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from crmmaxx.ptc.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8707824B108 for ; Wed, 29 Apr 2009 00:02:12 -0700 (PDT) Received: from crmmaxx.ptc.com (crmmaxx.ptc.com [12.11.148.125]) by cuda.sgi.com with ESMTP id VuXCjoJGMWV2JB6q for ; Wed, 29 Apr 2009 00:02:12 -0700 (PDT) X-ASG-Whitelist: Barracuda Reputation X-IronPort-AV: E=Sophos;i="4.40,265,1238990400"; d="scan'208,217";a="297872498" Received: from hqcrmint1.ptcnet.ptc.com ([132.253.202.83]) by crmmaxx.ptc.com with ESMTP; 29 Apr 2009 02:58:34 -0400 Date: Wed, 29 Apr 2009 02:53:30 -0400 To: X-Mailer: Siebel EMS 78 [EMS 1098] main/200512201810 MIME-Version: 1.0 Reply-To: noreply@ptc.com From: "PTC Communications" X-ASG-Orig-Subj: =?utf-8?q?You=E2=80=99re?= Invited =?utf-8?q?=E2=80=93?= ECAD and MCAD Co-Design Best Practices Forum =?utf-8?q?=E2=80=93?= 05/13/09 Subject: =?utf-8?q?You=E2=80=99re?= Invited =?utf-8?q?=E2=80=93?= ECAD and MCAD Co-Design Best Practices Forum =?utf-8?q?=E2=80=93?= 05/13/09 Sender: "PTC Communications" Message-ID: Content-Type: multipart/alternative; boundary=BF_1240988233367_1073231723 X-Barracuda-Connect: crmmaxx.ptc.com[12.11.148.125] X-Barracuda-Start-Time: 1240988533 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --BF_1240988233367_1073231723 Content-Type: text/plain; charset=UTF-8 ECAD and MCAD Co-Design Best Practices Forum PTC and Cadence Design Systems invite you to attend an exclusive co-design educational forum to discuss strategies and practices around ECAD/MCAD/DDM requirements and hear first hand our joint PTC/CDN integration and collaboration plans. Join PTC and Cadence Design Systems for the opportunity to network with peers and discuss industry and market trends. Date: Wednesday, May 13, 2009 Location: Cadence Design Systems, Inc. San Jose, California Agenda: Sign up for one, two or all three sessions! Session 1: What's New in Pro/ENGINEER Wildfire 4.0 Time: 10:00AM - 11:30AM PT Audience: MCAD Users, MCAD Consumers and Managers Focus: Pro/ENGINEER Wildfire 4.0 Modules and ProductView Presenter: Jason Petersen, Senior Generalist Applications Engineer, PTC Session 2: ECAD/MCAD Co-Design Collaboration and Best Practice Discussion Time: 11:30AM - 1:00PM PT (Lunch will be provided) Audience: ECAD and MCAD Users and Managers Focus: Pro/ENGINEER ECAD-MCAD Collaboration ECX Presenters: Pawel Chadzynski, VP Product Management, PTC Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems Session 3: ECAD Design Review, Change Verification and Design Data Management Time: 1:00PM - 2:30PM PT Audience: ECAD Users, ECAD Data Consumers and ECAD Managers Focus: InterComm Expert Suite, ECAD WGM Suite and Cadence Design Systems Allegro Design Workbench for Library and Design Data Management Presenters: Pawel Chadzynski, VP Product Management, PTC Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems Seating is limited! To reserve yours, register today. (http://www.ptc.com/read?&u=1-5LWLN-2077&c=1-3XZ5YN&o=1-47XW3D&w=2354034&t=http%3A%2F%2Fwww.ptc.com%2Fview%3Fim_dbkey%3D90706) =============================================================================== contact PTC http://www.ptc.com/company/contacts/index.htm privacy policy http://www.ptc.com/company/policies/index.htm unsubscribe http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-47XW3D&campd=1-3XZ5YN&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com change preferences http://www.ptc.com/appserver/mkt/mail/preferences.jsp?&offd=1-47XW3D&campd=1-3XZ5YN&conud=1-5LWLN-2077&mailkey=2354034&email=xfs@oss.sgi.com edit profile http://www.ptc.com/read?&w=2354034&t=/common/account/index.htm ------------------------------------------------------------------------------- This email was sent to: xfs@oss.sgi.com PTC, 140 Kendrick Street, Needham, MA 02494 USA If you wish to unsubscribe from all PTC Emails, please send a blank email to . --BF_1240988233367_1073231723 Content-Type: text/html; charset=UTF-8 Santa Clara Email 2 NA ECADMCAD Road Show FY09
PTC.com

ECAD and MCAD Co-Design Best Practices Forum

PTC and Cadence Design Systems invite you to attend an exclusive co-design educational forum to discuss strategies and practices around ECAD/MCAD/DDM requirements and hear first hand our joint PTC/CDN integration and collaboration plans. 

Join PTC and Cadence Design Systems for the opportunity to network with peers and discuss industry and market trends.

Date:
Wednesday, May 13, 2009

Location:
Cadence Design Systems, Inc.
San Jose, California

Agenda:
Sign up for one, two or all three sessions!

Session 1:

What's New in Pro/ENGINEER Wildfire 4.0

Time:

10:00AM - 11:30AM PT

Audience:

MCAD Users, MCAD Consumers and Managers

Focus:

Pro/ENGINEER Wildfire 4.0 Modules and ProductView

Presenter:

Jason Petersen, Senior Generalist Applications Engineer, PTC

 

 

Session 2:

ECAD/MCAD Co-Design Collaboration and Best Practice Discussion

Time:

11:30AM - 1:00PM PT (Lunch will be provided)

Audience:

ECAD and MCAD Users and Managers

Focus:

Pro/ENGINEER ECAD-MCAD Collaboration ECX

Presenters:

Pawel Chadzynski, VP Product Management, PTC

 

Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems

   

Session 3:

ECAD Design Review, Change Verification and Design Data Management

Time:

1:00PM - 2:30PM PT

Audience:

ECAD Users, ECAD Data Consumers and ECAD Managers

Focus:

InterComm Expert Suite, ECAD WGM Suite and Cadence Design Systems Allegro Design Workbench for Library and Design Data Management

Presenters:

Pawel Chadzynski, VP Product Management, PTC

 

Linda Mazzitelli, Allegro Product Marketing Director, Cadence Design Systems

Seating is limited! To reserve yours, register today.

contact PTC | privacy policy | unsubscribe | change preferences | edit profile
This email was sent to: xfs@oss.sgi.com     PTC, 140 Kendrick Street, Needham, MA 02494 USA
If you wish to unsubscribe from all PTC Emails, please send a blank email to unsubscribe@ptc.com.
--BF_1240988233367_1073231723-- From andi@firstfloor.org Wed Apr 29 07:50:42 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TCofov162345 for ; Wed, 29 Apr 2009 07:50:42 -0500 X-ASG-Debug-ID: 1241009440-7b71028f0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from one.firstfloor.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8A7471CF7A3A for ; Wed, 29 Apr 2009 05:50:40 -0700 (PDT) Received: from one.firstfloor.org (one.firstfloor.org [213.235.205.2]) by cuda.sgi.com with ESMTP id boFxTPGuUYRGR9Ga for ; Wed, 29 Apr 2009 05:50:40 -0700 (PDT) Received: from basil.firstfloor.org (p5B3CB5AD.dip0.t-ipconnect.de [91.60.181.173]) by one.firstfloor.org (Postfix) with ESMTP id 2329E1AB0002; Wed, 29 Apr 2009 14:54:49 +0200 (CEST) Received: by basil.firstfloor.org (Postfix, from userid 1000) id 6C2491D0239; Wed, 29 Apr 2009 14:50:38 +0200 (CEST) To: Krzysztof =?iso-8859-1?Q?B=E2aszkowski?= Cc: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: generating uevents by xfs Subject: Re: generating uevents by xfs From: Andi Kleen References: <200904281818.32127.kb@sysmikro.com.pl> Date: Wed, 29 Apr 2009 14:50:38 +0200 In-Reply-To: <200904281818.32127.kb@sysmikro.com.pl> (Krzysztof =?iso-8859-1?Q?B=E2aszkowski's?= message of "Tue, 28 Apr 2009 18:18:31 +0200") Message-ID: <87r5zbpqsh.fsf@basil.nowhere.org> User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Barracuda-Connect: one.firstfloor.org[213.235.205.2] X-Barracuda-Start-Time: 1241009441 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4560 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24436 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Krzysztof Bâaszkowski writes: > Hello, > > once upon i was asked to think about such facility for notifying userspace > when some mount point is nearly full at some level let's say e.g. 90% > (threshold should be configurable). > > here is a solution designed by me and i would like to see comments on this > idea and solution. It doesn't seem to be very useful to poll in kernel for this. When you're in kernel you could just hook into the respective functions that handle disk allocation directly. Polling can be as well done in user space only, so it doesn't make too much sense to put polling code into the kernel. -Andi -- ak@linux.intel.com -- Speaking for myself only. From kb@sysmikro.com.pl Wed Apr 29 08:12:47 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,MIME_8BIT_HEADER autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TDCku2162963 for ; Wed, 29 Apr 2009 08:12:46 -0500 X-ASG-Debug-ID: 1241010765-12a102b40000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from v007470.home.net.pl (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id A21C71CF7DF7 for ; Wed, 29 Apr 2009 06:12:45 -0700 (PDT) Received: from v007470.home.net.pl (v007470.home.net.pl [212.85.125.104]) by cuda.sgi.com with SMTP id 4xpbSrPnCYTgzUCK for ; Wed, 29 Apr 2009 06:12:45 -0700 (PDT) Received: from localhost (HELO linux2g2g.site) (kb.sysmikro@home@127.0.0.1) by m029.home.net.pl with SMTP; Wed, 29 Apr 2009 13:12:44 -0000 From: Krzysztof =?utf-8?q?B=C5=82aszkowski?= Organization: Systemy mikroprocesorowe To: Andi Kleen X-ASG-Orig-Subj: Re: generating uevents by xfs Subject: Re: generating uevents by xfs Date: Wed, 29 Apr 2009 15:12:33 +0200 User-Agent: KMail/1.9.5 Cc: xfs@oss.sgi.com References: <200904281818.32127.kb@sysmikro.com.pl> <87r5zbpqsh.fsf@basil.nowhere.org> In-Reply-To: <87r5zbpqsh.fsf@basil.nowhere.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Message-Id: <200904291512.33875.kb@sysmikro.com.pl> X-Barracuda-Connect: v007470.home.net.pl[212.85.125.104] X-Barracuda-Start-Time: 1241010766 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3196 1.0000 -0.2673 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= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24436 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wednesday 29 April 2009 14:50, Andi Kleen wrote: > Krzysztof B=E2aszkowski writes: > > Hello, > > > > once upon i was asked to think about such facility for notifying > > userspace when some mount point is nearly full at some level let's say > > e.g. 90% (threshold should be configurable). > > > > here is a solution designed by me and i would like to see comments on > > this idea and solution. > > It doesn't seem to be very useful to poll in kernel for this. When you're > in kernel you could just hook into the respective functions that handle > disk allocation directly. i reckon yes and no both. "no" because i wanted a solution which will have= =20 almost no impact on performance. if the speed wasn't an important concern=20 then why would one take care about per cpu counters like fdblocks ? > Polling can be as well done in user space only,=20 > so it doesn't make too much sense to put polling code into the kernel. yes i think too, that's maybe a bit too huge thing looking at benefits it=20 brings but consider bash instance consuming 1.5M (at least) and other thing= s=20 spawned periodically,=20 do they have more sense ? i don't think so and this is the solution which=20 voids all hassle with userspace polling because it uses unified notificatio= n=20 system and this can be good starting point for notification system for othe= r=20 purposes i haven't think of yet but maybe someone has a new idea regarding= =20 this. are these reasons good to (complete and) merge this stuff ? I found that the xfs-sysfs-2 requires small rework around event_alloc() and= =20 event_release() because of very rare (but possible) race with timer functio= n=20 which drops lock (i decided to drop lock because i think kobject_uevent may= =20 be synchronous in the case of deprecated /sbin/hotplug and i'm not sure als= o=20 how long it takes for udevd) i think that there is no point to update patch as long as we will not sort = out=20 if the whole idea is really worth to implement. Thanks for reply. Krzysztof Blaszkowski > > -Andi From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 08:49:43 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TDnfDv163938 for ; Wed, 29 Apr 2009 08:49:42 -0500 X-ASG-Debug-ID: 1241012981-135102400000-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 DB28724C912 for ; Wed, 29 Apr 2009 06:49:41 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id TTkMuh1xTMutOfYi for ; Wed, 29 Apr 2009 06:49:41 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzAAO-0001bG-GP for xfs@oss.sgi.com; Wed, 29 Apr 2009 13:49:40 +0000 Date: Wed, 29 Apr 2009 09:49:40 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] dmapi: bump version and update CHANGES Subject: [PATCH] dmapi: bump version and update CHANGES Message-ID: <20090429134940.GA30808@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241012981 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Index: dmapi-dev/VERSION =================================================================== --- dmapi-dev.orig/VERSION 2009-04-29 15:35:03.447607212 +0200 +++ dmapi-dev/VERSION 2009-04-29 15:35:06.731519494 +0200 @@ -3,5 +3,5 @@ # PKG_MAJOR=2 PKG_MINOR=2 -PKG_REVISION=9 +PKG_REVISION=10 PKG_BUILD=1 Index: dmapi-dev/doc/CHANGES =================================================================== --- dmapi-dev.orig/doc/CHANGES 2009-04-29 15:35:10.867482929 +0200 +++ dmapi-dev/doc/CHANGES 2009-04-29 15:36:03.542550769 +0200 @@ -1,3 +1,8 @@ +dmapi-2.2.10 + - Update the Makepkgs script to generate proper source tarballs. + - Small specfile improvements, thanks to Jan Engelhardt. + - Various autoconf/libtool fixes, thanks to Andreas Gruenbacher. + dmapi-2.2.9 (4 February 2009) - Various build system updates. From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 08:50:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TDo2qq163963 for ; Wed, 29 Apr 2009 08:50:02 -0500 X-ASG-Debug-ID: 1241013205-62b501920000-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 24C83145B8C6 for ; Wed, 29 Apr 2009 06:53:26 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Dr94Hne1638zZDVA for ; Wed, 29 Apr 2009 06:53:26 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzAAi-0004sF-QW for xfs@oss.sgi.com; Wed, 29 Apr 2009 13:50:00 +0000 Date: Wed, 29 Apr 2009 09:50:00 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] dmapi: add .gitignore Subject: [PATCH] dmapi: add .gitignore Message-ID: <20090429135000.GB30808@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241013207 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Signed-off-by: Christoph Hellwig Index: dmapi-dev/.gitignore =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ dmapi-dev/.gitignore 2009-04-29 15:37:28.128650851 +0200 @@ -0,0 +1,39 @@ +# object files +*.o + +# build system +.census +Logs/ +include/builddefs +install-sh + +# magic diretory symlinks +include/xfs + +# Makepgs +build/src-manifest +build/dmapi-*.tar.gz +doc/CHANGES.gz +dmapi-* + +# autoconf generated files +aclocal.m4 +autom4te.cache/ +config.guess +config.log +config.status +config.sub +configure + +# libtool +libtool +ltmain.sh +*.lo +*.la +.libs + +# quilt stuff +.pc/ +patches/ + +# binaries From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 08:50:51 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TDooFu164013 for ; Wed, 29 Apr 2009 08:50:50 -0500 X-ASG-Debug-ID: 1241013050-53a401ba0000-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 E66C41CF7F22 for ; Wed, 29 Apr 2009 06:50:50 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id TTtz4InXluGM8H8l for ; Wed, 29 Apr 2009 06:50:50 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzABW-0004ND-Jp for xfs@oss.sgi.com; Wed, 29 Apr 2009 13:50:50 +0000 Date: Wed, 29 Apr 2009 09:50:50 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: [PATCH] xfsdump: add .gitignore Subject: [PATCH] xfsdump: add .gitignore Message-ID: <20090429135050.GC30808@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241013050 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean This one is pretty ugly due to all the symlinked files, any better suggestions? Signed-off-by: Christoph Hellwig Index: xfsdump-dev/.gitignore =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ xfsdump-dev/.gitignore 2009-04-29 15:48:26.996484383 +0200 @@ -0,0 +1,134 @@ +# object files +*.o + +# build system +.census +Logs/ +include/config.h +include/builddefs +install-sh + +# magic diretory symlinks +#include/disk +#include/xfs + +# Makepgs +build/src-manifest +build/xfsdump-*.tar.gz +doc/CHANGES.gz +xfsdump-* + +# autoconf generated files +aclocal.m4 +autom4te.cache/ +config.guess +config.log +config.status +config.sub +configure + +# libtool +libtool +ltmain.sh +*.lo +*.la +.libs + +# gettext +po/xfsdump.pot +po/*.mo + +# quilt stuff +.pc/ +patches/ + +# binaries +dump/xfsdump +invutil/xfsinvutil +restore/xfsrestore + +# @%#% symlinked sourced files +dump/arch_xlate.[ch] +dump/cldmgr.[ch] +dump/content.h +dump/content_common.[ch] +dump/content_inode.h +dump/dlog.[ch] +dump/drive.[ch] +dump/drive_minrmt.c +dump/drive_scsitape.c +dump/drive_simple.c +dump/exit.h +dump/fs.[ch] +dump/getdents.[ch] +dump/global.[ch] +dump/hsmapi.[ch] +dump/inv_api.c +dump/inv_core.c +dump/inv_files.c +dump/inv_fstab.c +dump/inv_idx.c +dump/inv_mgr.c +dump/inv_priv.h +dump/inv_stobj.c +dump/inventory.h +dump/lock.[ch] +dump/main.c +dump/media.h +dump/mlog.[ch] +dump/openutil.[ch] +dump/path.[ch] +dump/qlock.[ch] +dump/rec_hdr.h +dump/ring.[ch] +dump/sproc.[ch] +dump/stream.[ch] +dump/ts_mtio.h +dump/types.h +dump/util.[ch] + +invutil/global.h +invutil/inv_files.c +invutil/inv_priv.h +invutil/inventory.h +invutil/mlog.h +invutil/types.h +invutil/util.h + +restore/arch_xlate.[ch] +restore/cldmgr.[ch] +restore/content.h +restore/content_inode.h +restore/dlog.[ch] +restore/drive.[ch] +restore/drive_minrmt.c +restore/drive_scsitape.c +restore/drive_simple.c +restore/exit.h +restore/fs.[ch] +restore/getdents.[ch] +restore/global.[ch] +restore/hsmapi.[ch] +restore/inv_api.c +restore/inv_core.c +restore/inv_files.c +restore/inv_fstab.c +restore/inv_idx.c +restore/inv_mgr.c +restore/inv_priv.h +restore/inv_stobj.c +restore/inventory.h +restore/lock.[ch] +restore/main.c +restore/media.h +restore/mlog.[ch] +restore/openutil.[ch] +restore/path.[ch] +restore/qlock.[ch] +restore/rec_hdr.h +restore/ring.[ch] +restore/sproc.[ch] +restore/stream.[ch] +restore/ts_mtio.h +restore/types.h +restore/util.[ch] From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 09:11:09 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEB8if164731 for ; Wed, 29 Apr 2009 09:11:09 -0500 X-ASG-Debug-ID: 1241014268-53ad02630000-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 75E911CF807E for ; Wed, 29 Apr 2009 07:11:08 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id DV4dzO8lmNfZjVLK for ; Wed, 29 Apr 2009 07:11:08 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzAVA-0005J4-4J for xfs@oss.sgi.com; Wed, 29 Apr 2009 14:11:08 +0000 Date: Wed, 29 Apr 2009 10:11:08 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: release.sh, take two Subject: release.sh, take two Message-ID: <20090429141108.GA14578@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241014268 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean A new release script, now using Makepkgs to simply things. Needs to be run from the repository directory. Anyone fine with commiting a copy to each of the repositories? From sandeen@sandeen.net Wed Apr 29 09:17:30 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEHU6f164895 for ; Wed, 29 Apr 2009 09:17:30 -0500 X-ASG-Debug-ID: 1241014650-189603600000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 7F1DB24C9D9 for ; Wed, 29 Apr 2009 07:17:30 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id XNXSnBG9jb7UC3G1 for ; Wed, 29 Apr 2009 07:17:30 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 86B94AC358C; Wed, 29 Apr 2009 09:17:28 -0500 (CDT) Message-ID: <49F86178.8050101@sandeen.net> Date: Wed, 29 Apr 2009 09:17:28 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] dmapi: bump version and update CHANGES Subject: Re: [PATCH] dmapi: bump version and update CHANGES References: <20090429134940.GA30808@infradead.org> In-Reply-To: <20090429134940.GA30808@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: 1241014650 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0000 1.0000 -2.0210 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24440 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Index: dmapi-dev/VERSION > =================================================================== > --- dmapi-dev.orig/VERSION 2009-04-29 15:35:03.447607212 +0200 > +++ dmapi-dev/VERSION 2009-04-29 15:35:06.731519494 +0200 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=2 > PKG_MINOR=2 > -PKG_REVISION=9 > +PKG_REVISION=10 > PKG_BUILD=1 > Index: dmapi-dev/doc/CHANGES > =================================================================== > --- dmapi-dev.orig/doc/CHANGES 2009-04-29 15:35:10.867482929 +0200 > +++ dmapi-dev/doc/CHANGES 2009-04-29 15:36:03.542550769 +0200 > @@ -1,3 +1,8 @@ > +dmapi-2.2.10 > + - Update the Makepkgs script to generate proper source tarballs. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Various autoconf/libtool fixes, thanks to Andreas Gruenbacher. > + > dmapi-2.2.9 (4 February 2009) > - Various build system updates. > Reviewed-by: Eric Sandeen From sandeen@sandeen.net Wed Apr 29 09:18:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEIJGL164921 for ; Wed, 29 Apr 2009 09:18:19 -0500 X-ASG-Debug-ID: 1241014699-53aa02c80000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 5E6281CF805E for ; Wed, 29 Apr 2009 07:18:19 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id wTdtZPqoECSszG1B for ; Wed, 29 Apr 2009 07:18:19 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 17B9DAC358C; Wed, 29 Apr 2009 09:18:17 -0500 (CDT) Message-ID: <49F861A8.20106@sandeen.net> Date: Wed, 29 Apr 2009 09:18:16 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] dmapi: add .gitignore Subject: Re: [PATCH] dmapi: add .gitignore References: <20090429135000.GB30808@infradead.org> In-Reply-To: <20090429135000.GB30808@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: 1241014699 X-Barracuda-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.61 X-Barracuda-Spam-Status: No, SCORE=-1.61 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=SUBJECT_FUZZY_TION X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24440 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig > > Index: dmapi-dev/.gitignore > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ dmapi-dev/.gitignore 2009-04-29 15:37:28.128650851 +0200 > @@ -0,0 +1,39 @@ > +# object files > +*.o > + > +# build system > +.census > +Logs/ > +include/builddefs > +install-sh > + > +# magic diretory symlinks > +include/xfs > + > +# Makepgs > +build/src-manifest > +build/dmapi-*.tar.gz > +doc/CHANGES.gz > +dmapi-* > + > +# autoconf generated files > +aclocal.m4 > +autom4te.cache/ > +config.guess > +config.log > +config.status > +config.sub > +configure > + > +# libtool > +libtool > +ltmain.sh > +*.lo > +*.la > +.libs > + > +# quilt stuff > +.pc/ > +patches/ > + > +# binaries (could add cscope/ too ...) Reviewed-by: Eric Sandeen From sandeen@sandeen.net Wed Apr 29 09:20:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEKCWk164988 for ; Wed, 29 Apr 2009 09:20:12 -0500 X-ASG-Debug-ID: 1241014812-53a603260000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mail.sandeen.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id A93C21CF815A for ; Wed, 29 Apr 2009 07:20:12 -0700 (PDT) Received: from mail.sandeen.net (sandeen.net [209.173.210.139]) by cuda.sgi.com with ESMTP id QqtLGtxsWvAZO9CE for ; Wed, 29 Apr 2009 07:20:12 -0700 (PDT) Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.sandeen.net (Postfix) with ESMTP id 0C82DAA60CB; Wed, 29 Apr 2009 09:20:12 -0500 (CDT) Message-ID: <49F8621B.4060103@sandeen.net> Date: Wed, 29 Apr 2009 09:20:11 -0500 From: Eric Sandeen User-Agent: Thunderbird 2.0.0.21 (Macintosh/20090302) MIME-Version: 1.0 To: Christoph Hellwig CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH] xfsdump: add .gitignore Subject: Re: [PATCH] xfsdump: add .gitignore References: <20090429135050.GC30808@infradead.org> In-Reply-To: <20090429135050.GC30808@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: 1241014812 X-Barracuda-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.61 X-Barracuda-Spam-Status: No, SCORE=-1.61 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=SUBJECT_FUZZY_TION X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24442 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.41 SUBJECT_FUZZY_TION Attempt to obfuscate words in Subject: X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Christoph Hellwig wrote: > This one is pretty ugly due to all the symlinked files, any better > suggestions? > > > Signed-off-by: Christoph Hellwig > > Index: xfsdump-dev/.gitignore > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ xfsdump-dev/.gitignore 2009-04-29 15:48:26.996484383 +0200 > @@ -0,0 +1,134 @@ > +# object files > +*.o > + > +# build system > +.census > +Logs/ > +include/config.h > +include/builddefs > +install-sh > + > +# magic diretory symlinks > +#include/disk > +#include/xfs > + > +# Makepgs > +build/src-manifest > +build/xfsdump-*.tar.gz > +doc/CHANGES.gz > +xfsdump-* > + > +# autoconf generated files > +aclocal.m4 > +autom4te.cache/ > +config.guess > +config.log > +config.status > +config.sub > +configure > + > +# libtool > +libtool > +ltmain.sh > +*.lo > +*.la > +.libs > + > +# gettext > +po/xfsdump.pot > +po/*.mo > + > +# quilt stuff > +.pc/ > +patches/ > + > +# binaries > +dump/xfsdump > +invutil/xfsinvutil > +restore/xfsrestore > + > +# @%#% symlinked sourced files > +dump/arch_xlate.[ch] > +dump/cldmgr.[ch] > +dump/content.h > +dump/content_common.[ch] > +dump/content_inode.h > +dump/dlog.[ch] > +dump/drive.[ch] > +dump/drive_minrmt.c > +dump/drive_scsitape.c > +dump/drive_simple.c > +dump/exit.h > +dump/fs.[ch] > +dump/getdents.[ch] > +dump/global.[ch] > +dump/hsmapi.[ch] > +dump/inv_api.c > +dump/inv_core.c > +dump/inv_files.c > +dump/inv_fstab.c > +dump/inv_idx.c > +dump/inv_mgr.c > +dump/inv_priv.h > +dump/inv_stobj.c > +dump/inventory.h > +dump/lock.[ch] > +dump/main.c > +dump/media.h > +dump/mlog.[ch] > +dump/openutil.[ch] > +dump/path.[ch] > +dump/qlock.[ch] > +dump/rec_hdr.h > +dump/ring.[ch] > +dump/sproc.[ch] > +dump/stream.[ch] > +dump/ts_mtio.h > +dump/types.h > +dump/util.[ch] > + > +invutil/global.h > +invutil/inv_files.c > +invutil/inv_priv.h > +invutil/inventory.h > +invutil/mlog.h > +invutil/types.h > +invutil/util.h > + > +restore/arch_xlate.[ch] > +restore/cldmgr.[ch] > +restore/content.h > +restore/content_inode.h > +restore/dlog.[ch] > +restore/drive.[ch] > +restore/drive_minrmt.c > +restore/drive_scsitape.c > +restore/drive_simple.c > +restore/exit.h > +restore/fs.[ch] > +restore/getdents.[ch] > +restore/global.[ch] > +restore/hsmapi.[ch] > +restore/inv_api.c > +restore/inv_core.c > +restore/inv_files.c > +restore/inv_fstab.c > +restore/inv_idx.c > +restore/inv_mgr.c > +restore/inv_priv.h > +restore/inv_stobj.c > +restore/inventory.h > +restore/lock.[ch] > +restore/main.c > +restore/media.h > +restore/mlog.[ch] > +restore/openutil.[ch] > +restore/path.[ch] > +restore/qlock.[ch] > +restore/rec_hdr.h > +restore/ring.[ch] > +restore/sproc.[ch] > +restore/stream.[ch] > +restore/ts_mtio.h > +restore/types.h > +restore/util.[ch] > could add cscope/ here too, but, *shrug* Reviewed-by: Eric Sandeen From felixb@sgi.com Wed Apr 29 09:40:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEeikc165584 for ; Wed, 29 Apr 2009 09:40:44 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id C8C10AC006 for ; Wed, 29 Apr 2009 07:40:41 -0700 (PDT) Received: from eagdhcp-232-143.americas.sgi.com (eagdhcp-232-143.americas.sgi.com [128.162.232.143]) by estes.americas.sgi.com (Postfix) with ESMTP id 61BE97000103; Wed, 29 Apr 2009 09:40:41 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <6F8D4AC9-D76A-43FC-AA5C-78C86A12E244@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090409171135.GA25303@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Date: Wed, 29 Apr 2009 09:40:40 -0500 References: <20090224133858.GB15820@infradead.org> <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> <20090409171135.GA25303@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 9, 2009, at 12:11 PM, Christoph Hellwig wrote: > On Mon, Apr 06, 2009 at 07:57:48PM -0500, Felix Blyakher wrote: >> Shouldn't we set error to ENOMEM here? > > Yes, good catch. Christoph, do you want to repost this patch with that change? Thanks, Felix From felixb@sgi.com Wed Apr 29 09:42:37 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEgav7165622 for ; Wed, 29 Apr 2009 09:42:37 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 3B3CAAC004 for ; Wed, 29 Apr 2009 07:42:37 -0700 (PDT) Received: from eagdhcp-232-143.americas.sgi.com (eagdhcp-232-143.americas.sgi.com [128.162.232.143]) by estes.americas.sgi.com (Postfix) with ESMTP id DD9907000103; Wed, 29 Apr 2009 09:42:36 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <04552742-BF7F-4F94-A658-1307A0C2D6A7@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090429134940.GA30808@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] dmapi: bump version and update CHANGES Date: Wed, 29 Apr 2009 09:42:35 -0500 References: <20090429134940.GA30808@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 29, 2009, at 8:49 AM, Christoph Hellwig wrote: > Index: dmapi-dev/VERSION > =================================================================== > --- dmapi-dev.orig/VERSION 2009-04-29 15:35:03.447607212 +0200 > +++ dmapi-dev/VERSION 2009-04-29 15:35:06.731519494 +0200 > @@ -3,5 +3,5 @@ > # > PKG_MAJOR=2 > PKG_MINOR=2 > -PKG_REVISION=9 > +PKG_REVISION=10 > PKG_BUILD=1 > Index: dmapi-dev/doc/CHANGES > =================================================================== > --- dmapi-dev.orig/doc/CHANGES 2009-04-29 15:35:10.867482929 +0200 > +++ dmapi-dev/doc/CHANGES 2009-04-29 15:36:03.542550769 +0200 > @@ -1,3 +1,8 @@ > +dmapi-2.2.10 > + - Update the Makepkgs script to generate proper source tarballs. > + - Small specfile improvements, thanks to Jan Engelhardt. > + - Various autoconf/libtool fixes, thanks to Andreas Gruenbacher. > + > dmapi-2.2.9 (4 February 2009) > - Various build system updates. Acked-by: Felix Blyakher From felixb@sgi.com Wed Apr 29 09:43:22 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, SUBJECT_FUZZY_TION autolearn=no version=3.3.0-rupdated Received: from relay.sgi.com (relay3.corp.sgi.com [198.149.34.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEhLGt165654 for ; Wed, 29 Apr 2009 09:43:22 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id 5C00BAC007 for ; Wed, 29 Apr 2009 07:43:22 -0700 (PDT) Received: from eagdhcp-232-143.americas.sgi.com (eagdhcp-232-143.americas.sgi.com [128.162.232.143]) by estes.americas.sgi.com (Postfix) with ESMTP id 10CB77000103; Wed, 29 Apr 2009 09:43:22 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: <645E0688-2C35-489F-B309-BE944F804346@sgi.com> From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090429135000.GB30808@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH] dmapi: add .gitignore Date: Wed, 29 Apr 2009 09:43:21 -0500 References: <20090429135000.GB30808@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 29, 2009, at 8:50 AM, Christoph Hellwig wrote: > Signed-off-by: Christoph Hellwig Reviewed-by: Felix Blyakher > > > Index: dmapi-dev/.gitignore > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ dmapi-dev/.gitignore 2009-04-29 15:37:28.128650851 +0200 > @@ -0,0 +1,39 @@ > +# object files > +*.o > + > +# build system > +.census > +Logs/ > +include/builddefs > +install-sh > + > +# magic diretory symlinks > +include/xfs > + > +# Makepgs > +build/src-manifest > +build/dmapi-*.tar.gz > +doc/CHANGES.gz > +dmapi-* > + > +# autoconf generated files > +aclocal.m4 > +autom4te.cache/ > +config.guess > +config.log > +config.status > +config.sub > +configure > + > +# libtool > +libtool > +ltmain.sh > +*.lo > +*.la > +.libs > + > +# quilt stuff > +.pc/ > +patches/ > + > +# binaries > > _______________________________________________ > xfs mailing list > xfs@oss.sgi.com > http://oss.sgi.com/mailman/listinfo/xfs From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 09:47:34 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TElYUr166595 for ; Wed, 29 Apr 2009 09:47:34 -0500 X-ASG-Debug-ID: 1241016454-52b002120000-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 BF3E224CBB0 for ; Wed, 29 Apr 2009 07:47:34 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id hPj9ULY9mAAX5BqH for ; Wed, 29 Apr 2009 07:47:34 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzB4Q-0003vw-EK for xfs@oss.sgi.com; Wed, 29 Apr 2009 14:47:34 +0000 Date: Wed, 29 Apr 2009 10:47:34 -0400 From: Christoph Hellwig To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: release.sh, take two Subject: Re: release.sh, take two Message-ID: <20090429144734.GA15044@infradead.org> References: <20090429141108.GA14578@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090429141108.GA14578@infradead.org> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241016454 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 29, 2009 at 10:11:08AM -0400, Christoph Hellwig wrote: > A new release script, now using Makepkgs to simply things. Needs to > be run from the repository directory. > > Anyone fine with commiting a copy to each of the repositories? And now with actual content: #!/bin/sh . VERSION version=${PKG_MAJOR}.${PKG_MINOR}.${PKG_REVISION} date=`date +"%-d %B %Y"` echo "Updating CHANGES" sed -e "s/${version}.*/${version} (${date})/" doc/CHANGES > doc/CHANGES.tmp && \ mv doc/CHANGES.tmp doc/CHANGES echo "Commiting CHANGES update to git" git-commit -a -m "${version} release" echo "Tagging git repository" git-tag v${version} echo "Creating source tarball in build/tar/" ./Makepkgs echo "Done." echo "Please remember to push out tags using \"git push --tags\"" From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 09:50:52 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_64 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TEoms8166653 for ; Wed, 29 Apr 2009 09:50:51 -0500 X-ASG-Debug-ID: 1241016648-569401f30000-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 958D324CA55; Wed, 29 Apr 2009 07:50:48 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id Jwrep3u6mlEVRV84; Wed, 29 Apr 2009 07:50:48 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzB7Y-0004dd-6o; Wed, 29 Apr 2009 14:50:48 +0000 Date: Wed, 29 Apr 2009 10:50:48 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Message-ID: <20090429145048.GA15558@infradead.org> References: <20090224133858.GB15820@infradead.org> <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> <20090409171135.GA25303@infradead.org> <6F8D4AC9-D76A-43FC-AA5C-78C86A12E244@sgi.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="oyUTqETQ0mS9luUI" Content-Disposition: inline In-Reply-To: <6F8D4AC9-D76A-43FC-AA5C-78C86A12E244@sgi.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241016648 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean --oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Apr 29, 2009 at 09:40:40AM -0500, Felix Blyakher wrote: > > On Apr 9, 2009, at 12:11 PM, Christoph Hellwig wrote: > >> On Mon, Apr 06, 2009 at 07:57:48PM -0500, Felix Blyakher wrote: >>> Shouldn't we set error to ENOMEM here? >> >> Yes, good catch. > > Christoph, do you want to repost this patch with that change? Yeah, I added it long ago. Below is the updated version. I've been running xfsqa on it quite a bit. --oyUTqETQ0mS9luUI Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=xfs-getbmap-cleanups Subject: xfs: a couple getbmap cleanups From: Christoph Hellwig - reshuffle various conditionals for data vs attr fork to make the code more readable - do fine-grainded goto-based error handling - exit early from conditionals instead of keeping a long else branch around - allow kmem_alloc to fail Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen Index: xfs/fs/xfs/xfs_bmap.c =================================================================== --- xfs.orig/fs/xfs/xfs_bmap.c 2009-04-06 18:39:17.952445045 +0200 +++ xfs/fs/xfs/xfs_bmap.c 2009-04-09 19:07:46.764452348 +0200 @@ -5880,7 +5880,7 @@ xfs_getbmap( void *arg) /* formatter arg */ { __int64_t bmvend; /* last block requested */ - int error; /* return value */ + int error = 0; /* return value */ __int64_t fixlen; /* length for -1 case */ int i; /* extent number */ int lock; /* lock state */ @@ -5899,30 +5899,8 @@ xfs_getbmap( mp = ip->i_mount; iflags = bmv->bmv_iflags; - whichfork = iflags & BMV_IF_ATTRFORK ? XFS_ATTR_FORK : XFS_DATA_FORK; - /* If the BMV_IF_NO_DMAPI_READ interface bit specified, do not - * generate a DMAPI read event. Otherwise, if the DM_EVENT_READ - * bit is set for the file, generate a read event in order - * that the DMAPI application may do its thing before we return - * the extents. Usually this means restoring user file data to - * regions of the file that look like holes. - * - * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify - * BMV_IF_NO_DMAPI_READ so that read events are generated. - * If this were not true, callers of ioctl( XFS_IOC_GETBMAP ) - * could misinterpret holes in a DMAPI file as true holes, - * when in fact they may represent offline user data. - */ - if ((iflags & BMV_IF_NO_DMAPI_READ) == 0 && - DM_EVENT_ENABLED(ip, DM_EVENT_READ) && - whichfork == XFS_DATA_FORK) { - error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, 0, 0, 0, NULL); - if (error) - return XFS_ERROR(error); - } - if (whichfork == XFS_ATTR_FORK) { if (XFS_IFORK_Q(ip)) { if (ip->i_d.di_aformat != XFS_DINODE_FMT_EXTENTS && @@ -5936,11 +5914,37 @@ xfs_getbmap( ip->i_mount); return XFS_ERROR(EFSCORRUPTED); } - } else if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && - ip->i_d.di_format != XFS_DINODE_FMT_BTREE && - ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) - return XFS_ERROR(EINVAL); - if (whichfork == XFS_DATA_FORK) { + + prealloced = 0; + fixlen = 1LL << 32; + } else { + /* + * If the BMV_IF_NO_DMAPI_READ interface bit specified, do + * not generate a DMAPI read event. Otherwise, if the + * DM_EVENT_READ bit is set for the file, generate a read + * event in order that the DMAPI application may do its thing + * before we return the extents. Usually this means restoring + * user file data to regions of the file that look like holes. + * + * The "old behavior" (from XFS_IOC_GETBMAP) is to not specify + * BMV_IF_NO_DMAPI_READ so that read events are generated. + * If this were not true, callers of ioctl(XFS_IOC_GETBMAP) + * could misinterpret holes in a DMAPI file as true holes, + * when in fact they may represent offline user data. + */ + if (DM_EVENT_ENABLED(ip, DM_EVENT_READ) && + !(iflags & BMV_IF_NO_DMAPI_READ)) { + error = XFS_SEND_DATA(mp, DM_EVENT_READ, ip, + 0, 0, 0, NULL); + if (error) + return XFS_ERROR(error); + } + + if (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS && + ip->i_d.di_format != XFS_DINODE_FMT_BTREE && + ip->i_d.di_format != XFS_DINODE_FMT_LOCAL) + return XFS_ERROR(EINVAL); + if (xfs_get_extsz_hint(ip) || ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)){ prealloced = 1; @@ -5949,42 +5953,34 @@ xfs_getbmap( prealloced = 0; fixlen = ip->i_size; } - } else { - prealloced = 0; - fixlen = 1LL << 32; } if (bmv->bmv_length == -1) { fixlen = XFS_FSB_TO_BB(mp, XFS_B_TO_FSB(mp, fixlen)); - bmv->bmv_length = MAX( (__int64_t)(fixlen - bmv->bmv_offset), - (__int64_t)0); - } else if (bmv->bmv_length < 0) - return XFS_ERROR(EINVAL); - if (bmv->bmv_length == 0) { + bmv->bmv_length = + max_t(__int64_t, fixlen - bmv->bmv_offset, 0); + } else if (bmv->bmv_length == 0) { bmv->bmv_entries = 0; return 0; + } else if (bmv->bmv_length < 0) { + return XFS_ERROR(EINVAL); } + nex = bmv->bmv_count - 1; if (nex <= 0) return XFS_ERROR(EINVAL); bmvend = bmv->bmv_offset + bmv->bmv_length; xfs_ilock(ip, XFS_IOLOCK_SHARED); - - if (((iflags & BMV_IF_DELALLOC) == 0) && - (whichfork == XFS_DATA_FORK) && - (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size)) { - /* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */ - error = xfs_flush_pages(ip, (xfs_off_t)0, - -1, 0, FI_REMAPF); - if (error) { - xfs_iunlock(ip, XFS_IOLOCK_SHARED); - return error; + if (whichfork == XFS_DATA_FORK && !(iflags & BMV_IF_DELALLOC)) { + if (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size) { + error = xfs_flush_pages(ip, 0, -1, 0, FI_REMAPF); + if (error) + goto out_unlock_iolock; } - } - ASSERT(whichfork == XFS_ATTR_FORK || (iflags & BMV_IF_DELALLOC) || - ip->i_delayed_blks == 0); + ASSERT(ip->i_delayed_blks == 0); + } lock = xfs_ilock_map_shared(ip); @@ -5995,23 +5991,25 @@ xfs_getbmap( if (nex > XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1) nex = XFS_IFORK_NEXTENTS(ip, whichfork) * 2 + 1; - bmapi_flags = xfs_bmapi_aflag(whichfork) | - ((iflags & BMV_IF_PREALLOC) ? 0 : XFS_BMAPI_IGSTATE); + bmapi_flags = xfs_bmapi_aflag(whichfork); + if (!(iflags & BMV_IF_PREALLOC)) + bmapi_flags |= XFS_BMAPI_IGSTATE; /* * Allocate enough space to handle "subnex" maps at a time. */ + error = ENOMEM; subnex = 16; - map = kmem_alloc(subnex * sizeof(*map), KM_SLEEP); + map = kmem_alloc(subnex * sizeof(*map), KM_MAYFAIL); + if (!map) + goto out_unlock_ilock; bmv->bmv_entries = 0; - if ((XFS_IFORK_NEXTENTS(ip, whichfork) == 0)) { - if (((iflags & BMV_IF_DELALLOC) == 0) || - whichfork == XFS_ATTR_FORK) { - error = 0; - goto unlock_and_return; - } + if (XFS_IFORK_NEXTENTS(ip, whichfork) == 0 && + (whichfork == XFS_ATTR_FORK || !(iflags & BMV_IF_DELALLOC))) { + error = 0; + goto out_free_map; } nexleft = nex; @@ -6023,10 +6021,12 @@ xfs_getbmap( bmapi_flags, NULL, 0, map, &nmap, NULL, NULL); if (error) - goto unlock_and_return; + goto out_free_map; ASSERT(nmap <= subnex); for (i = 0; i < nmap && nexleft && bmv->bmv_length; i++) { + int full = 0; /* user array is full */ + out.bmv_oflags = 0; if (map[i].br_state == XFS_EXT_UNWRITTEN) out.bmv_oflags |= BMV_OF_PREALLOC; @@ -6041,36 +6041,32 @@ xfs_getbmap( whichfork == XFS_ATTR_FORK) { /* came to the end of attribute fork */ out.bmv_oflags |= BMV_OF_LAST; - goto unlock_and_return; - } else { - int full = 0; /* user array is full */ - - if (!xfs_getbmapx_fix_eof_hole(ip, &out, - prealloced, bmvend, - map[i].br_startblock)) { - goto unlock_and_return; - } - - /* format results & advance arg */ - error = formatter(&arg, &out, &full); - if (error || full) - goto unlock_and_return; - nexleft--; - bmv->bmv_offset = - out.bmv_offset + out.bmv_length; - bmv->bmv_length = MAX((__int64_t)0, - (__int64_t)(bmvend - bmv->bmv_offset)); - bmv->bmv_entries++; + goto out_free_map; } + + if (!xfs_getbmapx_fix_eof_hole(ip, &out, prealloced, + bmvend, map[i].br_startblock)) + goto out_free_map; + + /* format results & advance arg */ + error = formatter(&arg, &out, &full); + if (error || full) + goto out_free_map; + nexleft--; + bmv->bmv_offset = + out.bmv_offset + out.bmv_length; + bmv->bmv_length = + max_t(__int64_t, 0, bmvend - bmv->bmv_offset); + bmv->bmv_entries++; } } while (nmap && nexleft && bmv->bmv_length); -unlock_and_return: + out_free_map: + kmem_free(map); + out_unlock_ilock: xfs_iunlock_map_shared(ip, lock); + out_unlock_iolock: xfs_iunlock(ip, XFS_IOLOCK_SHARED); - - kmem_free(map); - return error; } --oyUTqETQ0mS9luUI-- From felixb@oss.sgi.com Wed Apr 29 10:01:08 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TF17Sa167252 for ; Wed, 29 Apr 2009 10:01:07 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n3TF115l167210; Wed, 29 Apr 2009 10:01:01 -0500 Date: Wed, 29 Apr 2009 10:01:01 -0500 Message-Id: <200904291501.n3TF115l167210@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.28-rc3-20851-g4be4a00 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 8de2bf937a6bea8f0f775fd5399ba20c1a0c3d77 X-Git-Newrev: 4be4a00fb55879ef44b5914c189aecffa828deb4 This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 4be4a00 xfs: a couple getbmap cleanups 2ac00af xfs: add more checks to superblock validation f25181f xfs_file_last_byte() needs to acquire ilock from 8de2bf937a6bea8f0f775fd5399ba20c1a0c3d77 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4be4a00fb55879ef44b5914c189aecffa828deb4 Author: Christoph Hellwig Date: Wed Apr 29 10:50:48 2009 -0400 xfs: a couple getbmap cleanups - reshuffle various conditionals for data vs attr fork to make the code more readable - do fine-grainded goto-based error handling - exit early from conditionals instead of keeping a long else branch around - allow kmem_alloc to fail Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher commit 2ac00af7a6d2e65013e6f28bd1f37c0cd98ba134 Author: Olaf Weber Date: Fri Apr 17 16:12:45 2009 -0500 xfs: add more checks to superblock validation There had been reports where xfs filesystem was randomly corrupted with fsfuzzer, and xfs failed to handle it gracefully. This patch fixes couple of reported problem by providing additional checks in the superblock validation routine. Signed-off-by: Olaf Weber Reviewed-by: Josef 'Jeff' Sipek Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher commit f25181f598cf4a8ccc40a51d8b74f8b555ecddee Author: Lachlan McIlroy Date: Thu Apr 23 22:18:00 2009 -0400 xfs_file_last_byte() needs to acquire ilock We had some systems crash with this stack: [] ia64_leave_kernel+0x0/0x280 [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] [] xfs_bmap_last_offset+0x210/0x280 [xfs] [] xfs_file_last_byte+0x70/0x1a0 [xfs] [] xfs_itruncate_start+0xc0/0x1a0 [xfs] [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] [] xfs_release+0x1b0/0x240 [xfs] [] xfs_file_release+0x70/0xa0 [xfs] [] __fput+0x1a0/0x420 [] fput+0x40/0x60 The problem here is that xfs_file_last_byte() does not acquire the inode lock and can therefore race with another thread that is modifying the extext list. While xfs_bmap_last_offset() is trying to lookup what was the last extent some extents were merged and the extent list shrunk so the index we lookup is now beyond the end of the extent list and potentially in a freed buffer. Signed-off-by: Lachlan McIlroy Reviewed-by: Christoph Hellwig Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_bmap.c | 162 +++++++++++++++++++++++++-------------------------- fs/xfs/xfs_inode.c | 2 + fs/xfs/xfs_mount.c | 3 + 3 files changed, 84 insertions(+), 83 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Wed Apr 29 10:02:15 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TF2ERT167282 for ; Wed, 29 Apr 2009 10:02:14 -0500 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay2.corp.sgi.com (Postfix) with ESMTP id 659B430407A for ; Wed, 29 Apr 2009 08:02:12 -0700 (PDT) Received: from eagdhcp-232-143.americas.sgi.com (eagdhcp-232-143.americas.sgi.com [128.162.232.143]) by estes.americas.sgi.com (Postfix) with ESMTP id 4A1CE7000103; Wed, 29 Apr 2009 10:02:12 -0500 (CDT) Cc: xfs@oss.sgi.com Message-Id: From: Felix Blyakher To: Christoph Hellwig In-Reply-To: <20090429145048.GA15558@infradead.org> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v926) Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Date: Wed, 29 Apr 2009 10:02:11 -0500 References: <20090224133858.GB15820@infradead.org> <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> <20090409171135.GA25303@infradead.org> <6F8D4AC9-D76A-43FC-AA5C-78C86A12E244@sgi.com> <20090429145048.GA15558@infradead.org> X-Mailer: Apple Mail (2.926) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Apr 29, 2009, at 9:50 AM, Christoph Hellwig wrote: > On Wed, Apr 29, 2009 at 09:40:40AM -0500, Felix Blyakher wrote: >> >> On Apr 9, 2009, at 12:11 PM, Christoph Hellwig wrote: >> >>> On Mon, Apr 06, 2009 at 07:57:48PM -0500, Felix Blyakher wrote: >>>> Shouldn't we set error to ENOMEM here? >>> >>> Yes, good catch. >> >> Christoph, do you want to repost this patch with that change? > > Yeah, I added it long ago. I must have missed your updated patch. > Below is the updated version. I've been > running xfsqa on it quite a bit. Applied to the tree. Thanks, Felix From BATV+4a8d3070050667b3fc24+2075+infradead.org+hch@bombadil.srs.infradead.org Wed Apr 29 10:04:55 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TF4sot167329 for ; Wed, 29 Apr 2009 10:04:55 -0500 X-ASG-Debug-ID: 1241017699-510c00280000-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 045BC145BCBE; Wed, 29 Apr 2009 08:08:19 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) by cuda.sgi.com with ESMTP id xKSCMxTUs2suJsuV; Wed, 29 Apr 2009 08:08:19 -0700 (PDT) X-ASG-Whitelist: Client Received: from hch by bombadil.infradead.org with local (Exim 4.69 #1 (Red Hat Linux)) id 1LzBLC-0006Xl-7i; Wed, 29 Apr 2009 15:04:54 +0000 Date: Wed, 29 Apr 2009 11:04:54 -0400 From: Christoph Hellwig To: Felix Blyakher Cc: Christoph Hellwig , xfs@oss.sgi.com X-ASG-Orig-Subj: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Subject: Re: [PATCH 1/2] xfs: a couple getbmap cleanups Message-ID: <20090429150454.GA24797@infradead.org> References: <20090224133858.GB15820@infradead.org> <9EF64CF3-FDFC-4777-94A5-7295E827ABA4@sgi.com> <20090409171135.GA25303@infradead.org> <6F8D4AC9-D76A-43FC-AA5C-78C86A12E244@sgi.com> <20090429145048.GA15558@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org See http://www.infradead.org/rpr.html X-Barracuda-Connect: bombadil.infradead.org[18.85.46.34] X-Barracuda-Start-Time: 1241017700 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Wed, Apr 29, 2009 at 10:02:11AM -0500, Felix Blyakher wrote: >> Yeah, I added it long ago. > > I must have missed your updated patch. Not sure I actually sent it out, but it's been tested in my local tree at least :) From nate@houseofnate.net Wed Apr 29 12:29:57 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3THTu6d171645 for ; Wed, 29 Apr 2009 12:29:57 -0500 X-ASG-Debug-ID: 1241026194-79be025d0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from millhouse.houseofnate.net (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 8661324D59D for ; Wed, 29 Apr 2009 10:29:54 -0700 (PDT) Received: from millhouse.houseofnate.net (dsl092-086-237.bos1.dsl.speakeasy.net [66.92.86.237]) by cuda.sgi.com with ESMTP id VYzmdlq6hnrmNpOJ for ; Wed, 29 Apr 2009 10:29:54 -0700 (PDT) Received: from [172.20.0.234] (port.exagrid.com [::ffff:72.248.115.6]) (AUTH: LOGIN nturner, TLS: TLSv1/SSLv3,256bits,AES256-SHA) by millhouse.houseofnate.net with esmtp; Wed, 29 Apr 2009 13:29:54 -0400 id 000000000022D654.0000000049F88E92.00005F3B Message-ID: <49F88E73.7060403@houseofnate.net> Date: Wed, 29 Apr 2009 13:29:23 -0400 From: "Nathaniel W. Turner" User-Agent: Thunderbird 2.0.0.21 (X11/20090409) MIME-Version: 1.0 To: Marc Lehmann CC: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) Subject: Re: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) References: <20090428032406.GA14234@schmorp.de> In-Reply-To: <20090428032406.GA14234@schmorp.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: dsl092-086-237.bos1.dsl.speakeasy.net[66.92.86.237] X-Barracuda-Start-Time: 1241026196 X-Barracuda-Bayes: INNOCENT GLOBAL 0.3382 1.0000 -0.1956 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.2, rules version 3.2.1.24454 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 version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi Marc, Marc Lehmann wrote: > It also happens to the same filesystem each time (maybe because > it does the heavy I/O),a and it is also the same filesystem where > xfs_repair hangs in an endless loop often (but not always). (see > http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525880) > > The filesystem was created a month or so ago using blocksize of 512 and > lazy-count=1, but I have many of those xfs filesystems. > > Since this is a production system and I have no backup abilities, I have > to no choice but to reformat the disk now. > I'm not sure about the root cause of your crash, but I just wanted to mention that before you blow away this filesystem, you should probably try repairing it with a recent version of xfs_repair (like 3.0.0). ftp://oss.sgi.com/projects/xfs/cmd_tars/ Also, I have seen similar problems to those described in Debian bug 525880 with xfs_repair not making progress (although I'm running 32-bit), and adding "-P" to the xfs_repair invocation helped in many cases. Cheers, nate -- Nathaniel W. Turner http://houseofnate.net/ From cattelan@thebarn.com Wed Apr 29 12:59:13 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3THxAkL172833 for ; Wed, 29 Apr 2009 12:59:13 -0500 X-ASG-Debug-ID: 1241028154-6c3700ba0000-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 66901145CF5E for ; Wed, 29 Apr 2009 11:02:34 -0700 (PDT) Received: from slurp.thebarn.com (cattelan-host202.dsl.visi.com [208.42.117.202]) by cuda.sgi.com with ESMTP id ot2Si9kAREGpkJBy for ; Wed, 29 Apr 2009 11:02:34 -0700 (PDT) Received: from funky.x.thebarn.com (slurp.thebarn.com [208.42.117.201]) (authenticated bits=0) by slurp.thebarn.com (8.14.3/8.14.0) with ESMTP id n3THwXm0069087; Wed, 29 Apr 2009 12:58:34 -0500 (CDT) (envelope-from cattelan@thebarn.com) Message-ID: <49F89549.8090505@thebarn.com> Date: Wed, 29 Apr 2009 12:58:33 -0500 From: Russell Cattelan User-Agent: Thunderbird 2.0.0.6 (Macintosh/20070728) MIME-Version: 1.0 To: "Nathaniel W. Turner" , xfs-oss X-ASG-Orig-Subj: Re: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) Subject: Re: crashes with xfs_fsr in 2.6.25-2-amd64 and 2.6.26-1-amd64 (debian) (f'up) References: <20090428032406.GA14234@schmorp.de> <49F88E73.7060403@houseofnate.net> In-Reply-To: <49F88E73.7060403@houseofnate.net> X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Barracuda-Connect: cattelan-host202.dsl.visi.com[208.42.117.202] X-Barracuda-Start-Time: 1241028156 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0015 1.0000 -2.0113 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.51 X-Barracuda-Spam-Status: No, SCORE=-1.51 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=BSF_RULE7568M X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24455 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.50 BSF_RULE7568M Custom Rule 7568M X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Nathaniel W. Turner wrote: > Hi Marc, > > Marc Lehmann wrote: >> It also happens to the same filesystem each time (maybe because >> it does the heavy I/O),a and it is also the same filesystem where >> xfs_repair hangs in an endless loop often (but not always). (see >> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525880) >> >> The filesystem was created a month or so ago using blocksize of 512 >> and >> lazy-count=1, but I have many of those xfs filesystems. >> >> Since this is a production system and I have no backup abilities, I >> have >> to no choice but to reformat the disk now. >> > I'm not sure about the root cause of your crash, The crash is probably due to a bad inode, the file system needs to be repaired. > but I just wanted to mention that before you blow away this > filesystem, you should probably try repairing it with a recent > version of xfs_repair (like 3.0.0). > ftp://oss.sgi.com/projects/xfs/cmd_tars/ That is a good suggestion, 2.9.8 is quite old at this point. xfs_check might also be useful as it might point to the problem inode. > > Also, I have seen similar problems to those described in Debian bug > 525880 with xfs_repair not making progress (although I'm running > 32-bit), and adding "-P" to the xfs_repair invocation helped in many > cases. > > Cheers, > nate > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFJ+JVJNRmM+OaGhBgRAilEAJ9jBvIqlvMtlog0Oyeeb0BPbaMrowCfXmTE 2Pk4UxofSyr1zq6Dfuq8aDk= =L9qB -----END PGP SIGNATURE----- From felixb@oss.sgi.com Wed Apr 29 13:26:10 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3TIQAC3174112 for ; Wed, 29 Apr 2009 13:26:10 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n3TIQ7q2174084; Wed, 29 Apr 2009 13:26:07 -0500 Date: Wed, 29 Apr 2009 13:26:07 -0500 Message-Id: <200904291826.n3TIQ7q2174084@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, master, updated. v2.6.28-rc3-20852-g6321e3e X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 4be4a00fb55879ef44b5914c189aecffa828deb4 X-Git-Newrev: 6321e3ed2acf3ee9643cdd403e1c88605d7944ba This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, master has been updated 6321e3e xfs: fix getbmap vs mmap deadlock from 4be4a00fb55879ef44b5914c189aecffa828deb4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6321e3ed2acf3ee9643cdd403e1c88605d7944ba Author: Christoph Hellwig Date: Tue Feb 24 08:39:02 2009 -0500 xfs: fix getbmap vs mmap deadlock xfs_getbmap (or rather the formatters called by it) copy out the getbmap structures under the ilock, which can deadlock against mmap. This has been reported via bugzilla a while ago (#717) and has recently also shown up via lockdep. So allocate a temporary buffer to format the kernel getbmap structures into and then copy them out after dropping the locks. A little problem with this is that we limit the number of extents we can copy out by the maximum allocation size, but I see no real way around that. Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_bmap.c | 52 +++++++++++++++++++++++++++++++++++----------------- 1 files changed, 35 insertions(+), 17 deletions(-) hooks/post-receive -- XFS development tree From felixb@oss.sgi.com Thu Apr 30 00:29:26 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.6 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from oss.sgi.com (localhost [127.0.0.1]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3U5TQ73209703 for ; Thu, 30 Apr 2009 00:29:26 -0500 Received: (from felixb@localhost) by oss.sgi.com (8.14.3/8.14.3/Submit) id n3U5TLPl209657; Thu, 30 Apr 2009 00:29:21 -0500 Date: Thu, 30 Apr 2009 00:29:21 -0500 Message-Id: <200904300529.n3U5TLPl209657@oss.sgi.com> From: xfs@oss.sgi.com To: xfs@oss.sgi.com Subject: [XFS updates] XFS development tree branch, for-linus, updated. v2.6.28-rc3-21345-g28e2117 X-Git-Refname: refs/heads/for-linus X-Git-Reftype: branch X-Git-Oldrev: dc2a5536d633dd2318f82f3d5ad3c9e43cfc21d7 X-Git-Newrev: 28e211700a81b0a934b6c7a4b8e7dda843634d2f This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "XFS development tree". The branch, for-linus has been updated 28e2117 xfs: fix getbmap vs mmap deadlock 5f79ed6 xfs: a couple getbmap cleanups b9ec906 xfs: add more checks to superblock validation def6b3b xfs_file_last_byte() needs to acquire ilock from dc2a5536d633dd2318f82f3d5ad3c9e43cfc21d7 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 28e211700a81b0a934b6c7a4b8e7dda843634d2f Author: Christoph Hellwig Date: Tue Feb 24 08:39:02 2009 -0500 xfs: fix getbmap vs mmap deadlock xfs_getbmap (or rather the formatters called by it) copy out the getbmap structures under the ilock, which can deadlock against mmap. This has been reported via bugzilla a while ago (#717) and has recently also shown up via lockdep. So allocate a temporary buffer to format the kernel getbmap structures into and then copy them out after dropping the locks. A little problem with this is that we limit the number of extents we can copy out by the maximum allocation size, but I see no real way around that. Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher commit 5f79ed685fc6122018c4b5826e2e5bdb7bc6f109 Author: Christoph Hellwig Date: Wed Apr 29 10:50:48 2009 -0400 xfs: a couple getbmap cleanups - reshuffle various conditionals for data vs attr fork to make the code more readable - do fine-grainded goto-based error handling - exit early from conditionals instead of keeping a long else branch around - allow kmem_alloc to fail Signed-off-by: Christoph Hellwig Reviewed-by: Eric Sandeen Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher commit b9ec9068d79e039507a247ebc5bc9c0ce53654ce Author: Olaf Weber Date: Fri Apr 17 16:12:45 2009 -0500 xfs: add more checks to superblock validation There had been reports where xfs filesystem was randomly corrupted with fsfuzzer, and xfs failed to handle it gracefully. This patch fixes couple of reported problem by providing additional checks in the superblock validation routine. Signed-off-by: Olaf Weber Reviewed-by: Josef 'Jeff' Sipek Reviewed-by: Christoph Hellwig Signed-off-by: Felix Blyakher commit def6b3ba56b637d58126ef67fc19bab57945fcc4 Author: Lachlan McIlroy Date: Thu Apr 23 22:18:00 2009 -0400 xfs_file_last_byte() needs to acquire ilock We had some systems crash with this stack: [] ia64_leave_kernel+0x0/0x280 [] xfs_bmbt_get_startoff+0x0/0x20 [xfs] [] xfs_bmap_last_offset+0x210/0x280 [xfs] [] xfs_file_last_byte+0x70/0x1a0 [xfs] [] xfs_itruncate_start+0xc0/0x1a0 [xfs] [] xfs_inactive_free_eofblocks+0x290/0x460 [xfs] [] xfs_release+0x1b0/0x240 [xfs] [] xfs_file_release+0x70/0xa0 [xfs] [] __fput+0x1a0/0x420 [] fput+0x40/0x60 The problem here is that xfs_file_last_byte() does not acquire the inode lock and can therefore race with another thread that is modifying the extext list. While xfs_bmap_last_offset() is trying to lookup what was the last extent some extents were merged and the extent list shrunk so the index we lookup is now beyond the end of the extent list and potentially in a freed buffer. Signed-off-by: Lachlan McIlroy Reviewed-by: Christoph Hellwig Reviewed-by: Felix Blyakher Signed-off-by: Felix Blyakher ----------------------------------------------------------------------- Summary of changes: fs/xfs/xfs_bmap.c | 192 ++++++++++++++++++++++++++++------------------------ fs/xfs/xfs_inode.c | 2 + fs/xfs/xfs_mount.c | 3 + 3 files changed, 108 insertions(+), 89 deletions(-) hooks/post-receive -- XFS development tree From felixb@sgi.com Thu Apr 30 00:32:19 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3U5WJrf209916 for ; Thu, 30 Apr 2009 00:32:19 -0500 Received: from attica.americas.sgi.com (attica.americas.sgi.com [128.162.236.44]) by relay1.corp.sgi.com (Postfix) with ESMTP id 61D8B8F80B8; Wed, 29 Apr 2009 22:32:16 -0700 (PDT) Received: by attica.americas.sgi.com (Postfix, from userid 29043) id 2C65CA1FAB9F; Thu, 30 Apr 2009 00:32:16 -0500 (CDT) Date: Thu, 30 Apr 2009 00:32:16 -0500 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.30-rc5 User-Agent: Heirloom mailx 12.2 01/07/07 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20090430053216.2C65CA1FAB9F@attica.americas.sgi.com> From: felixb@sgi.com (Felix Blyakher) X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean The following changes since commit 091438dd5668396328a3419abcbc6591159eb8d1: Linus Torvalds (1): Linux 2.6.30-rc4 are available in the git repository at: git://oss.sgi.com/xfs/xfs for-linus Christoph Hellwig (2): xfs: a couple getbmap cleanups xfs: fix getbmap vs mmap deadlock Lachlan McIlroy (1): xfs_file_last_byte() needs to acquire ilock Olaf Weber (1): xfs: add more checks to superblock validation fs/xfs/xfs_bmap.c | 192 ++++++++++++++++++++++++++++------------------------ fs/xfs/xfs_inode.c | 2 + fs/xfs/xfs_mount.c | 3 + 3 files changed, 108 insertions(+), 89 deletions(-) From milind@gslab.com Thu Apr 30 02:42:25 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3U7gOwT214998 for ; Thu, 30 Apr 2009 02:42:24 -0500 X-ASG-Debug-ID: 1241077342-6a6f02ec0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from padma.gslab.com (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with SMTP id 03E6D24FD3B for ; Thu, 30 Apr 2009 00:42:23 -0700 (PDT) Received: from padma.gslab.com (padma.gslab.com [59.163.66.102]) by cuda.sgi.com with SMTP id Bzk818HoHK4RQifc for ; Thu, 30 Apr 2009 00:42:23 -0700 (PDT) Received: from [172.20.25.198] (unknown [172.20.25.198]) (Authenticated sender: milind) by padma.gslab.com (Postfix) with ESMTP id C929717701C5; Thu, 30 Apr 2009 13:12:18 +0530 (IST) Message-ID: <49F9565E.40804@gslab.com> Date: Thu, 30 Apr 2009 13:12:22 +0530 From: Milind Dumbare User-Agent: Thunderbird 2.0.0.21 (X11/20090409) MIME-Version: 1.0 To: linux-fsdevel@vger.kernel.org CC: xfs@oss.sgi.com X-ASG-Orig-Subj: EXT vs XFS at 80% filled filesystem Subject: EXT vs XFS at 80% filled filesystem Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Barracuda-Connect: padma.gslab.com[59.163.66.102] X-Barracuda-Start-Time: 1241077345 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4983 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24506 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi, I have heard of XFS's performance is not good as compared to EXT3 when the filesystem(disk) is 80% filled with data. Is it true? I have went through lots of performance documents of both XFS and EXT3 but could not find such performance benchmarking (for 80% full filesystems). Any numbers or pointers to other documents are appreciated. Thanks -Miline From hgichon@gmail.com Thu Apr 30 04:45:02 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,UNPARSEABLE_RELAY autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda3.sgi.com [192.48.176.15]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3U9j1iv219165 for ; Thu, 30 Apr 2009 04:45:01 -0500 X-ASG-Debug-ID: 1241084700-6fd203070000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from spamfilter2.mailnara.co.kr (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id E63831CFBB76 for ; Thu, 30 Apr 2009 02:45:00 -0700 (PDT) Received: from spamfilter2.mailnara.co.kr (spamfilter2.mailnara.co.kr [61.109.252.92]) by cuda.sgi.com with ESMTP id fY1QDdCSImBJTbVV for ; Thu, 30 Apr 2009 02:45:00 -0700 (PDT) Received: (S-FILTER Queue Handler, PID 25924 invoked by UID 507); 30 Apr 2009 18:44:53 +0900 Received: from 116.39.193.213 (HELO ?192.168.0.33?) (kpkim@gluesys.com) by 0 (S-FILTER SMTP Handler) with SMTP; 30 Apr 2009 18:44:53 +0900 Message-ID: <49F97318.4040103@gmail.com> Date: Thu, 30 Apr 2009 18:44:56 +0900 From: hgichon User-Agent: Thunderbird 2.0.0.21 (X11/20090318) MIME-Version: 1.0 To: xfs@oss.sgi.com CC: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org X-ASG-Orig-Subj: Sometimes df is not updated after remove within xfs via nfs. Subject: Sometimes df is not updated after remove within xfs via nfs. Content-Type: text/plain; charset=EUC-KR Content-Transfer-Encoding: 7bit X-Mail-From: hgichon@gmail.com X-Remote-Client-IP: 116.39.193.213 X-HMAC-SMTP-Auth-Info: X-HMAC-Message-ID: <1cd41aac0220cbc7980504fd3a851f7c> X-Filter-Host: spamfilter2 X-Filter-SR: 0.50 X-Filter-Ham: S-FILTER Intelligent SPAM Detection Module V1.20 RC4 (20080922); 30 Apr 2009 18:44:54 +0900 X-Barracuda-Connect: spamfilter2.mailnara.co.kr[61.109.252.92] X-Barracuda-Start-Time: 1241084701 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0530 1.0000 -1.6812 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -1.68 X-Barracuda-Spam-Status: No, SCORE=-1.68 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests=UNPARSEABLE_RELAY X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24513 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 UNPARSEABLE_RELAY Informational: message has unparseable relay lines X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean Hi guys. I used xfs and nfs for a long time. Recently, I have problem with df when removing files via nfs client. df result is not updated both local and nfs client. It's hard to reproducing same problem. But I have seen the problem several times in this month. I can't remember exactly, df was updated when new files was created. Are there any known issue or any check point? Any comments appreciated. Related xfs/nfsd Kernel Version. - 2.6.23.1 - 2.6.24.7 - 2.6.27.21 My Environment - nfs client (AIX5.3 , CentOS 5.3) - nfs tcp v3 - Intel DR2500, Xeon Dual core, 4G RAM - kpkim From michael.monnerie@is.it-management.at Thu Apr 30 12:28:44 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33 autolearn=no version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3UHSgZW233417 for ; Thu, 30 Apr 2009 12:28:43 -0500 X-ASG-Debug-ID: 1241112731-37ac00250000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from mailsrv1.zmi.at (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id 3FA0B14638BB for ; Thu, 30 Apr 2009 10:32:11 -0700 (PDT) Received: from mailsrv1.zmi.at (mailsrv1.zmi.at [212.69.162.198]) by cuda.sgi.com with ESMTP id FxbN8nUKxhR3wgEe for ; Thu, 30 Apr 2009 10:32:11 -0700 (PDT) Received: from mailsrv2.i.zmi.at (h081217107103.dyn.cm.kabsi.at [81.217.107.103]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client CN "mailsrv2.i.zmi.at", Issuer "power4u.zmi.at" (not verified)) by mailsrv1.zmi.at (Postfix) with ESMTP id A661653F2 for ; Thu, 30 Apr 2009 19:28:39 +0200 (CEST) Received: from saturn.localnet (saturn.i.zmi.at [10.0.0.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mailsrv2.i.zmi.at (Postfix) with ESMTPSA id 260F940017B for ; Thu, 30 Apr 2009 19:28:39 +0200 (CEST) From: Michael Monnerie Organization: it-management http://it-management.at To: xfs@oss.sgi.com X-ASG-Orig-Subj: Re: EXT vs XFS at 80% filled filesystem Subject: Re: EXT vs XFS at 80% filled filesystem Date: Thu, 30 Apr 2009 19:28:38 +0200 User-Agent: KMail/1.10.3 (Linux/2.6.29.1-ZMI; KDE/4.1.3; x86_64; ; ) References: <49F9565E.40804@gslab.com> In-Reply-To: <49F9565E.40804@gslab.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904301928.38873@zmi.at> X-Barracuda-Connect: mailsrv1.zmi.at[212.69.162.198] X-Barracuda-Start-Time: 1241112733 X-Barracuda-Bayes: INNOCENT GLOBAL 0.4578 1.0000 0.0000 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24544 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Donnerstag 30 April 2009 Milind Dumbare wrote: > I have heard of XFS's performance is not good as compared to EXT3 > when the filesystem(disk) is 80% filled with data. Is it true? I have > went through lots of performance documents of both XFS and EXT3 but > could not find such performance benchmarking (for 80% full > filesystems). > > Any numbers or pointers to other documents are appreciated. Never heard that before. Where did you hear this? mfg zmi -- // Michael Monnerie, Ing.BSc ----- http://it-management.at // Tel: 0660 / 415 65 31 .network.your.ideas. // PGP Key: "curl -s http://zmi.at/zmi.asc | gpg --import" // Fingerprint: AC19 F9D5 36ED CD8A EF38 500E CE14 91F7 1C12 09B4 // Keyserver: wwwkeys.eu.pgp.net Key-ID: 1C1209B4 From tytso@mit.edu Thu Apr 30 13:35:06 2009 X-Spam-Checker-Version: SpamAssassin 3.3.0-rupdated (updated) on oss.sgi.com X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.0-rupdated Received: from cuda.sgi.com (cuda1.sgi.com [192.48.157.11]) by oss.sgi.com (8.14.3/8.14.3/SuSE Linux 0.8) with ESMTP id n3UIZ65u235025 for ; Thu, 30 Apr 2009 13:35:06 -0500 X-ASG-Debug-ID: 1241116714-37a7022b0000-NocioJ X-Barracuda-URL: http://cuda.sgi.com:80/cgi-bin/mark.cgi Received: from thunker.thunk.org (localhost [127.0.0.1]) by cuda.sgi.com (Spam Firewall) with ESMTP id B45571463980 for ; Thu, 30 Apr 2009 11:38:35 -0700 (PDT) Received: from thunker.thunk.org (thunk.org [69.25.196.29]) by cuda.sgi.com with ESMTP id 5FnhnmcNJYDthR7S for ; Thu, 30 Apr 2009 11:38:35 -0700 (PDT) Received: from root (helo=closure.thunk.org) by thunker.thunk.org with local-esmtp (Exim 4.50 #1 (Debian)) id 1Lzb5y-0007Ge-0H; Thu, 30 Apr 2009 14:34:54 -0400 Received: from tytso by closure.thunk.org with local (Exim 4.69) (envelope-from ) id 1Lzb5u-0000yz-BR; Thu, 30 Apr 2009 14:34:50 -0400 Date: Thu, 30 Apr 2009 14:34:50 -0400 From: Theodore Tso To: Milind Dumbare Cc: linux-fsdevel@vger.kernel.org, xfs@oss.sgi.com X-ASG-Orig-Subj: Re: EXT vs XFS at 80% filled filesystem Subject: Re: EXT vs XFS at 80% filled filesystem Message-ID: <20090430183450.GB19276@mit.edu> References: <49F9565E.40804@gslab.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49F9565E.40804@gslab.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: tytso@mit.edu X-SA-Exim-Scanned: No (on thunker.thunk.org); SAEximRunCond expanded to false X-Barracuda-Connect: thunk.org[69.25.196.29] X-Barracuda-Start-Time: 1241116716 X-Barracuda-Bayes: INNOCENT GLOBAL 0.0003 1.0000 -2.0191 X-Barracuda-Virus-Scanned: by cuda.sgi.com at sgi.com X-Barracuda-Spam-Score: -2.02 X-Barracuda-Spam-Status: No, SCORE=-2.02 using per-user scores of TAG_LEVEL=2.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=2.1 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.1.24549 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on oss.sgi.com X-Virus-Status: Clean On Thu, Apr 30, 2009 at 01:12:22PM +0530, Milind Dumbare wrote: > Hi, > > I have heard of XFS's performance is not good as compared to EXT3 when > the filesystem(disk) is 80% filled with data. Is it true? I have went > through lots of performance documents of both XFS and EXT3 but could not > find such performance benchmarking (for 80% full filesystems). I've not heard of any such performance metrics, and I suspect it would very much depend on how the filesystem was "aged". A filesystem that has been in use for a few years and is at 80% capacity will behave very different from a brand-new filesystem which was freshly formatted and then filled with a few large files until said filesystem was 80% full. - Ted